diff options
183 files changed, 12722 insertions, 5185 deletions
diff --git a/.gitignore b/.gitignore index 671288d418..b8642ee76e 100644 --- a/.gitignore +++ b/.gitignore @@ -211,6 +211,7 @@ uptime-*.json /src/test/fuzz/lf-fuzz-* # /src/tools/ +/src/tools/libtorrunner.a /src/tools/tor-checkkey /src/tools/tor-resolve /src/tools/tor-cov-resolve @@ -1,3 +1,442 @@ +Changes in version 0.3.2.4-alpha - 2017-11-08 + Tor 0.3.2.4-alpha is the fourth alpha release in the 0.3.2.x series. + It fixes several stability and reliability bugs, especially including + a major reliability issue that has been plaguing fast exit relays in + recent months. + + o Major bugfixes (exit relays, DNS): + - Fix an issue causing DNS to fail on high-bandwidth exit nodes, + making them nearly unusable. Fixes bugs 21394 and 18580; bugfix on + 0.1.2.2-alpha, which introduced eventdns. Thanks to Dhalgren for + identifying and finding a workaround to this bug and to Moritz, + Arthur Edelstein, and Roger for helping to track it down and + analyze it. + + o Major bugfixes (scheduler, channel): + - Stop processing scheduled channels if they closed while flushing + cells. This can happen if the write on the connection fails + leading to the channel being closed while in the scheduler loop. + Fixes bug 23751; bugfix on 0.3.2.1-alpha. + + o Minor features (logging, scheduler): + - Introduce a SCHED_BUG() function to log extra information about + the scheduler state if we ever catch a bug in the scheduler. + Closes ticket 23753. + + o Minor features (removed deprecations): + - The ClientDNSRejectInternalAddresses flag can once again be set in + non-testing Tor networks, so long as they do not use the default + directory authorities. This change also removes the deprecation of + this flag from 0.2.9.2-alpha. Closes ticket 21031. + + o Minor features (testing): + - Our fuzzing tests now test the encrypted portions of v3 onion + service descriptors. Implements more of 21509. + + o Minor bugfixes (directory client): + - On failure to download directory information, delay retry attempts + by a random amount based on the "decorrelated jitter" algorithm. + Our previous delay algorithm tended to produce extra-long delays + too easily. Fixes bug 23816; bugfix on 0.2.9.1-alpha. + + o Minor bugfixes (IPv6, v3 single onion services): + - Remove buggy code for IPv6-only v3 single onion services, and + reject attempts to configure them. This release supports IPv4, + dual-stack, and IPv6-only v3 onion services; and IPv4 and dual- + stack v3 single onion services. Fixes bug 23820; bugfix + on 0.3.2.1-alpha. + + o Minor bugfixes (logging, relay): + - Give only a protocol warning when the ed25519 key is not + consistent between the descriptor and microdescriptor of a relay. + This can happen, for instance, if the relay has been flagged + NoEdConsensus. Fixes bug 24025; bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (manpage, onion service): + - Document that the HiddenServiceNumIntroductionPoints option is + 0-10 for v2 services and 0-20 for v3 services. Fixes bug 24115; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (memory leaks): + - Fix a minor memory leak at exit in the KIST scheduler. This bug + should have no user-visible impact. Fixes bug 23774; bugfix + on 0.3.2.1-alpha. + - Fix a memory leak when decrypting a badly formatted v3 onion + service descriptor. Fixes bug 24150; bugfix on 0.3.2.1-alpha. + Found by OSS-Fuzz; this is OSS-Fuzz issue 3994. + + o Minor bugfixes (onion services): + - Cache some needed onion service client information instead of + constantly computing it over and over again. Fixes bug 23623; + bugfix on 0.3.2.1-alpha. + - Properly retry HSv3 descriptor fetches when missing required + directory information. Fixes bug 23762; bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (path selection): + - When selecting relays by bandwidth, avoid a rounding error that + could sometimes cause load to be imbalanced incorrectly. + Previously, we would always round upwards; now, we round towards + the nearest integer. This had the biggest effect when a relay's + weight adjustments should have given it weight 0, but it got + weight 1 instead. Fixes bug 23318; bugfix on 0.2.4.3-alpha. + - When calculating the fraction of nodes that have descriptors, and + all nodes in the network have zero bandwidths, count the number of + nodes instead. Fixes bug 23318; bugfix on 0.2.4.10-alpha. + - Actually log the total bandwidth in compute_weighted_bandwidths(). + Fixes bug 24170; bugfix on 0.2.4.3-alpha. + + o Minor bugfixes (relay, crash): + - Avoid a crash when transitioning from client mode to bridge mode. + Previously, we would launch the worker threads whenever our + "public server" mode changed, but not when our "server" mode + changed. Fixes bug 23693; bugfix on 0.2.6.3-alpha. + + o Minor bugfixes (testing): + - Fix a spurious fuzzing-only use of an uninitialized value. Found + by Brian Carpenter. Fixes bug 24082; bugfix on 0.3.0.3-alpha. + - Test that IPv6-only clients can use microdescriptors when running + "make test-network-all". Requires chutney master 61c28b9 or later. + Closes ticket 24109. + + +Changes in version 0.3.2.3-alpha - 2017-10-27 + Tor 0.3.2.3-alpha is the third release in the 0.3.2 series. It fixes + numerous small bugs in earlier versions of 0.3.2.x, and adds a new + directory authority, Bastet. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Minor features (bridge): + - Bridge relays can now set the BridgeDistribution config option to + add a "bridge-distribution-request" line to their bridge + descriptor, which tells BridgeDB how they'd like their bridge + address to be given out. (Note that as of Oct 2017, BridgeDB does + not yet implement this feature.) As a side benefit, this feature + provides a way to distinguish bridge descriptors from non-bridge + descriptors. Implements tickets 18329. + + o Minor features (client, entry guards): + - Improve log messages when missing descriptors for primary guards. + Resolves ticket 23670. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (bridge): + - Overwrite the bridge address earlier in the process of retrieving + its descriptor, to make sure we reach it on the configured + address. Fixes bug 20532; bugfix on 0.2.0.10-alpha. + + o Minor bugfixes (documentation): + - Document better how to read gcov, and what our gcov postprocessing + scripts do. Fixes bug 23739; bugfix on 0.2.9.1-alpha. + + o Minor bugfixes (entry guards): + - Tor now updates its guard state when it reads a consensus + regardless of whether it's missing descriptors. That makes tor use + its primary guards to fetch descriptors in some edge cases where + it would previously have used fallback directories. Fixes bug + 23862; bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (hidden service client): + - When handling multiple SOCKS request for the same .onion address, + only fetch the service descriptor once. + - When a descriptor fetch fails with a non-recoverable error, close + all pending SOCKS requests for that .onion. Fixes bug 23653; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (hidden service): + - Always regenerate missing hidden service public key files. Prior + to this, if the public key was deleted from disk, it wouldn't get + recreated. Fixes bug 23748; bugfix on 0.3.2.2-alpha. Patch + from "cathugger". + - Make sure that we have a usable ed25519 key when the intro point + relay supports ed25519 link authentication. Fixes bug 24002; + bugfix on 0.3.2.1-alpha. + + o Minor bugfixes (hidden service, v2): + - When reloading configured hidden services, copy all information + from the old service object. Previously, some data was omitted, + causing delays in descriptor upload, and other bugs. Fixes bug + 23790; bugfix on 0.2.1.9-alpha. + + o Minor bugfixes (memory safety, defensive programming): + - Clear the target address when node_get_prim_orport() returns + early. Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (relay): + - Avoid a BUG warning when receiving a dubious CREATE cell while an + option transition is in progress. Fixes bug 23952; bugfix + on 0.3.2.1-alpha. + + o Minor bugfixes (testing): + - Adjust the GitLab CI configuration to more closely match that of + Travis CI. Fixes bug 23757; bugfix on 0.3.2.2-alpha. + - Prevent scripts/test/coverage from attempting to move gcov output + to the root directory. Fixes bug 23741; bugfix on 0.2.5.1-alpha. + - When running unit tests as root, skip a test that would fail + because it expects a permissions error. This affects some + continuous integration setups. Fixes bug 23758; bugfix + on 0.3.2.2-alpha. + - Stop unconditionally mirroring the tor repository in GitLab CI. + This prevented developers from enabling GitLab CI on master. Fixes + bug 23755; bugfix on 0.3.2.2-alpha. + - Fix the hidden service v3 descriptor decoding fuzzing to use the + latest decoding API correctly. Fixes bug 21509; bugfix + on 0.3.2.1-alpha. + + o Minor bugfixes (warnings): + - When we get an HTTP request on a SOCKS port, tell the user about + the new HTTPTunnelPort option. Previously, we would give a "Tor is + not an HTTP Proxy" message, which stopped being true when + HTTPTunnelPort was introduced. Fixes bug 23678; bugfix + on 0.3.2.1-alpha. + + +Changes in version 0.2.5.15 - 2017-10-25 + Tor 0.2.5.15 backports a collection of bugfixes from later Tor release + series. It also adds a new directory authority, Bastet. + + Note: the Tor 0.2.5 series will no longer be supported after 1 May + 2018. If you need a release with long-term support, please upgrade to + the 0.2.9 series. Otherwise, please upgrade to 0.3.1 or later. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (openbsd, denial-of-service, backport from 0.3.1.5-alpha): + - Avoid an assertion failure bug affecting our implementation of + inet_pton(AF_INET6) on certain OpenBSD systems whose strtol() + handling of "0xx" differs from what we had expected. Fixes bug + 22789; bugfix on 0.2.3.8-alpha. Also tracked as TROVE-2017-007. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (defensive programming, undefined behavior, backport from 0.3.1.4-alpha): + - Fix a memset() off the end of an array when packing cells. This + bug should be harmless in practice, since the corrupted bytes are + still in the same structure, and are always padding bytes, + ignored, or immediately overwritten, depending on compiler + behavior. Nevertheless, because the memset()'s purpose is to make + sure that any other cell-handling bugs can't expose bytes to the + network, we need to fix it. Fixes bug 22737; bugfix on + 0.2.4.11-alpha. Fixes CID 1401591. + + o Build features (backport from 0.3.1.5-alpha): + - Tor's repository now includes a Travis Continuous Integration (CI) + configuration file (.travis.yml). This is meant to help new + developers and contributors who fork Tor to a Github repository be + better able to test their changes, and understand what we expect + to pass. To use this new build feature, you must fork Tor to your + Github account, then go into the "Integrations" menu in the + repository settings for your fork and enable Travis, then push + your changes. Closes ticket 22636. + + +Changes in version 0.2.8.16 - 2017-10-25 + Tor 0.2.8.16 backports a collection of bugfixes from later Tor release + series, including a bugfix for a crash issue that had affected relays + under memory pressure. It also adds a new directory authority, Bastet. + + Note: the Tor 0.2.8 series will no longer be supported after 1 Jan + 2018. If you need a release with long-term support, please stick with + the 0.2.9 series. Otherwise, please upgrade to 0.3.1 or later. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + +Changes in version 0.2.9.13 - 2017-10-25 + Tor 0.2.9.13 backports a collection of bugfixes from later Tor release + series, including a bugfix for a crash issue that had affected relays + under memory pressure. It also adds a new directory authority, Bastet. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (directory authority, backport from 0.3.1.5-alpha): + - When a directory authority rejects a descriptor or extrainfo with + a given digest, mark that digest as undownloadable, so that we do + not attempt to download it again over and over. We previously + tried to avoid downloading such descriptors by other means, but we + didn't notice if we accidentally downloaded one anyway. This + behavior became problematic in 0.2.7.2-alpha, when authorities + began pinning Ed25519 keys. Fixes bug 22349; bugfix + on 0.2.1.19-alpha. + + o Minor bugfixes (memory safety, backport from 0.3.2.3-alpha): + - Clear the address when node_get_prim_orport() returns early. + Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (Windows service, backport from 0.3.1.6-rc): + - When running as a Windows service, set the ID of the main thread + correctly. Failure to do so made us fail to send log messages to + the controller in 0.2.1.16-rc, slowed down controller event + delivery in 0.2.7.3-rc and later, and crash with an assertion + failure in 0.3.1.1-alpha. Fixes bug 23081; bugfix on 0.2.1.6-alpha. + Patch and diagnosis from "Vort". + + +Changes in version 0.3.0.12 - 2017-10-25 + Tor 0.3.0.12 backports a collection of bugfixes from later Tor release + series, including a bugfix for a crash issue that had affected relays + under memory pressure. It also adds a new directory authority, Bastet. + + Note: the Tor 0.3.0 series will no longer be supported after 26 Jan + 2018. If you need a release with long-term support, please stick with + the 0.2.9 series. Otherwise, please upgrade to 0.3.1 or later. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (directory authority, backport from 0.3.1.5-alpha): + - When a directory authority rejects a descriptor or extrainfo with + a given digest, mark that digest as undownloadable, so that we do + not attempt to download it again over and over. We previously + tried to avoid downloading such descriptors by other means, but we + didn't notice if we accidentally downloaded one anyway. This + behavior became problematic in 0.2.7.2-alpha, when authorities + began pinning Ed25519 keys. Fixes bug 22349; bugfix + on 0.2.1.19-alpha. + + o Minor bugfixes (hidden service, relay, backport from 0.3.2.2-alpha): + - Avoid a possible double close of a circuit by the intro point on + error of sending the INTRO_ESTABLISHED cell. Fixes bug 23610; + bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (memory safety, backport from 0.3.2.3-alpha): + - Clear the address when node_get_prim_orport() returns early. + Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (Windows service, backport from 0.3.1.6-rc): + - When running as a Windows service, set the ID of the main thread + correctly. Failure to do so made us fail to send log messages to + the controller in 0.2.1.16-rc, slowed down controller event + delivery in 0.2.7.3-rc and later, and crash with an assertion + failure in 0.3.1.1-alpha. Fixes bug 23081; bugfix on 0.2.1.6-alpha. + Patch and diagnosis from "Vort". + + +Changes in version 0.3.1.8 - 2017-10-25 + Tor 0.3.1.8 is the second stable release in the 0.3.1 series. + It includes several bugfixes, including a bugfix for a crash issue + that had affected relays under memory pressure. It also adds + a new directory authority, Bastet. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (compilation, backport from 0.3.2.2-alpha): + - Fix a compilation warning when building with zstd support on + 32-bit platforms. Fixes bug 23568; bugfix on 0.3.1.1-alpha. Found + and fixed by Andreas Stieger. + + o Minor bugfixes (compression, backport from 0.3.2.2-alpha): + - Handle a pathological case when decompressing Zstandard data when + the output buffer size is zero. Fixes bug 23551; bugfix + on 0.3.1.1-alpha. + + o Minor bugfixes (directory authority, backport from 0.3.2.1-alpha): + - Remove the length limit on HTTP status lines that authorities can + send in their replies. Fixes bug 23499; bugfix on 0.3.1.6-rc. + + o Minor bugfixes (hidden service, relay, backport from 0.3.2.2-alpha): + - Avoid a possible double close of a circuit by the intro point on + error of sending the INTRO_ESTABLISHED cell. Fixes bug 23610; + bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (memory safety, backport from 0.3.2.3-alpha): + - Clear the address when node_get_prim_orport() returns early. + Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (unit tests, backport from 0.3.2.2-alpha): + - Fix additional channelpadding unit test failures by using mocked + time instead of actual time for all tests. Fixes bug 23608; bugfix + on 0.3.1.1-alpha. + + Changes in version 0.3.2.2-alpha - 2017-09-29 Tor 0.3.2.2-alpha is the second release in the 0.3.2 series. This release fixes several minor bugs in the new scheduler and next- @@ -3220,7 +3659,7 @@ Changes in version 0.3.0.1-alpha - 2016-12-19 initial code by Alec Heifetz. - Relays now support the HSDir version 3 protocol, so that they can can store and serve v3 descriptors. This is part of the next- - generation onion service work detailled in proposal 224. Closes + generation onion service work detailed in proposal 224. Closes ticket 17238. o Major features (protocol, ed25519 identity keys): diff --git a/Makefile.am b/Makefile.am index ad2ceb66a9..3445fc064d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -26,7 +26,7 @@ TESTING_TOR_BINARY=$(top_builddir)/src/or/tor$(EXEEXT) endif if USE_RUST -rust_ldadd=$(top_builddir)/src/rust/target/release/@TOR_RUST_UTIL_STATIC_NAME@ +rust_ldadd=$(top_builddir)/src/rust/target/release/@TOR_RUST_STATIC_NAME@ else rust_ldadd= endif @@ -246,3 +246,8 @@ mostlyclean-local: 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 + @@ -27,3 +27,6 @@ Frequently Asked Questions: To get started working on Tor development: See the doc/HACKING directory. + +Release timeline: + https://trac.torproject.org/projects/tor/wiki/org/teams/NetworkTeam/CoreTorReleases diff --git a/ReleaseNotes b/ReleaseNotes index 07a3881acb..1bdf30b814 100644 --- a/ReleaseNotes +++ b/ReleaseNotes @@ -2,6 +2,245 @@ 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.2.5.15 - 2017-10-25 + Tor 0.2.5.15 backports a collection of bugfixes from later Tor release + series. It also adds a new directory authority, Bastet. + + Note: the Tor 0.2.5 series will no longer be supported after 1 May + 2018. If you need a release with long-term support, please upgrade to + the 0.2.9 series. Otherwise, please upgrade to 0.3.1 or later. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (openbsd, denial-of-service, backport from 0.3.1.5-alpha): + - Avoid an assertion failure bug affecting our implementation of + inet_pton(AF_INET6) on certain OpenBSD systems whose strtol() + handling of "0xx" differs from what we had expected. Fixes bug + 22789; bugfix on 0.2.3.8-alpha. Also tracked as TROVE-2017-007. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (defensive programming, undefined behavior, backport from 0.3.1.4-alpha): + - Fix a memset() off the end of an array when packing cells. This + bug should be harmless in practice, since the corrupted bytes are + still in the same structure, and are always padding bytes, + ignored, or immediately overwritten, depending on compiler + behavior. Nevertheless, because the memset()'s purpose is to make + sure that any other cell-handling bugs can't expose bytes to the + network, we need to fix it. Fixes bug 22737; bugfix on + 0.2.4.11-alpha. Fixes CID 1401591. + + o Build features (backport from 0.3.1.5-alpha): + - Tor's repository now includes a Travis Continuous Integration (CI) + configuration file (.travis.yml). This is meant to help new + developers and contributors who fork Tor to a Github repository be + better able to test their changes, and understand what we expect + to pass. To use this new build feature, you must fork Tor to your + Github account, then go into the "Integrations" menu in the + repository settings for your fork and enable Travis, then push + your changes. Closes ticket 22636. + + +Changes in version 0.2.8.16 - 2017-10-25 + Tor 0.2.8.16 backports a collection of bugfixes from later Tor release + series, including a bugfix for a crash issue that had affected relays + under memory pressure. It also adds a new directory authority, Bastet. + + Note: the Tor 0.2.8 series will no longer be supported after 1 Jan + 2018. If you need a release with long-term support, please stick with + the 0.2.9 series. Otherwise, please upgrade to 0.3.1 or later. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + +Changes in version 0.2.9.13 - 2017-10-25 + Tor 0.2.9.13 backports a collection of bugfixes from later Tor release + series, including a bugfix for a crash issue that had affected relays + under memory pressure. It also adds a new directory authority, Bastet. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (directory authority, backport from 0.3.1.5-alpha): + - When a directory authority rejects a descriptor or extrainfo with + a given digest, mark that digest as undownloadable, so that we do + not attempt to download it again over and over. We previously + tried to avoid downloading such descriptors by other means, but we + didn't notice if we accidentally downloaded one anyway. This + behavior became problematic in 0.2.7.2-alpha, when authorities + began pinning Ed25519 keys. Fixes bug 22349; bugfix + on 0.2.1.19-alpha. + + o Minor bugfixes (memory safety, backport from 0.3.2.3-alpha): + - Clear the address when node_get_prim_orport() returns early. + Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (Windows service, backport from 0.3.1.6-rc): + - When running as a Windows service, set the ID of the main thread + correctly. Failure to do so made us fail to send log messages to + the controller in 0.2.1.16-rc, slowed down controller event + delivery in 0.2.7.3-rc and later, and crash with an assertion + failure in 0.3.1.1-alpha. Fixes bug 23081; bugfix on 0.2.1.6-alpha. + Patch and diagnosis from "Vort". + + +Changes in version 0.3.0.12 - 2017-10-25 + Tor 0.3.0.12 backports a collection of bugfixes from later Tor release + series, including a bugfix for a crash issue that had affected relays + under memory pressure. It also adds a new directory authority, Bastet. + + Note: the Tor 0.3.0 series will no longer be supported after 26 Jan + 2018. If you need a release with long-term support, please stick with + the 0.2.9 series. Otherwise, please upgrade to 0.3.1 or later. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (directory authority, backport from 0.3.1.5-alpha): + - When a directory authority rejects a descriptor or extrainfo with + a given digest, mark that digest as undownloadable, so that we do + not attempt to download it again over and over. We previously + tried to avoid downloading such descriptors by other means, but we + didn't notice if we accidentally downloaded one anyway. This + behavior became problematic in 0.2.7.2-alpha, when authorities + began pinning Ed25519 keys. Fixes bug 22349; bugfix + on 0.2.1.19-alpha. + + o Minor bugfixes (hidden service, relay, backport from 0.3.2.2-alpha): + - Avoid a possible double close of a circuit by the intro point on + error of sending the INTRO_ESTABLISHED cell. Fixes bug 23610; + bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (memory safety, backport from 0.3.2.3-alpha): + - Clear the address when node_get_prim_orport() returns early. + Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (Windows service, backport from 0.3.1.6-rc): + - When running as a Windows service, set the ID of the main thread + correctly. Failure to do so made us fail to send log messages to + the controller in 0.2.1.16-rc, slowed down controller event + delivery in 0.2.7.3-rc and later, and crash with an assertion + failure in 0.3.1.1-alpha. Fixes bug 23081; bugfix on 0.2.1.6-alpha. + Patch and diagnosis from "Vort". + + +Changes in version 0.3.1.8 - 2017-10-25 + Tor 0.3.1.8 is the second stable release in the 0.3.1 series. + It includes several bugfixes, including a bugfix for a crash issue + that had affected relays under memory pressure. It also adds + a new directory authority, Bastet. + + o Directory authority changes: + - Add "Bastet" as a ninth directory authority to the default list. + Closes ticket 23910. + - The directory authority "Longclaw" has changed its IP address. + Closes ticket 23592. + + o Major bugfixes (relay, crash, assertion failure, backport from 0.3.2.2-alpha): + - Fix a timing-based assertion failure that could occur when the + circuit out-of-memory handler freed a connection's output buffer. + Fixes bug 23690; bugfix on 0.2.6.1-alpha. + + o Minor features (directory authorities, backport from 0.3.2.2-alpha): + - Remove longclaw's IPv6 address, as it will soon change. Authority + IPv6 addresses were originally added in 0.2.8.1-alpha. This leaves + 3/8 directory authorities with IPv6 addresses, but there are also + 52 fallback directory mirrors with IPv6 addresses. Resolves 19760. + + o Minor features (geoip): + - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 + Country database. + + o Minor bugfixes (compilation, backport from 0.3.2.2-alpha): + - Fix a compilation warning when building with zstd support on + 32-bit platforms. Fixes bug 23568; bugfix on 0.3.1.1-alpha. Found + and fixed by Andreas Stieger. + + o Minor bugfixes (compression, backport from 0.3.2.2-alpha): + - Handle a pathological case when decompressing Zstandard data when + the output buffer size is zero. Fixes bug 23551; bugfix + on 0.3.1.1-alpha. + + o Minor bugfixes (directory authority, backport from 0.3.2.1-alpha): + - Remove the length limit on HTTP status lines that authorities can + send in their replies. Fixes bug 23499; bugfix on 0.3.1.6-rc. + + o Minor bugfixes (hidden service, relay, backport from 0.3.2.2-alpha): + - Avoid a possible double close of a circuit by the intro point on + error of sending the INTRO_ESTABLISHED cell. Fixes bug 23610; + bugfix on 0.3.0.1-alpha. + + o Minor bugfixes (memory safety, backport from 0.3.2.3-alpha): + - Clear the address when node_get_prim_orport() returns early. + Fixes bug 23874; bugfix on 0.2.8.2-alpha. + + o Minor bugfixes (unit tests, backport from 0.3.2.2-alpha): + - Fix additional channelpadding unit test failures by using mocked + time instead of actual time for all tests. Fixes bug 23608; bugfix + on 0.3.1.1-alpha. + + Changes in version 0.2.8.15 - 2017-09-18 Tor 0.2.8.15 backports a collection of bugfixes from later Tor series. @@ -1345,7 +1584,7 @@ Changes in version 0.3.0.6 - 2017-04-26 initial code by Alec Heifetz. - Relays now support the HSDir version 3 protocol, so that they can can store and serve v3 descriptors. This is part of the next- - generation onion service work detailled in proposal 224. Closes + generation onion service work detailed in proposal 224. Closes ticket 17238. o Major features (protocol, ed25519 identity keys): diff --git a/changes/bug12062 b/changes/bug12062 new file mode 100644 index 0000000000..8972929d84 --- /dev/null +++ b/changes/bug12062 @@ -0,0 +1,16 @@ + o Minor bugfixes (hibernation, bandwidth accounting, shutdown): + + - When hibernating, do not attempt to launch DNS checks. Fixes a + case of bug 12062; bugfix on 0.1.2.2-alpha. + + - Resolve several bugs related to descriptor fetching on bridge + clients with bandwidth accounting enabled. (This combination is + not recommended!) Fixes a case of bug 12062; bugfix on + 0.2.0.3-alpha. + + - When hibernating, do not try to upload or download + descriptors. Fixes a case of bug 12062; bugfix on 0.0.9pre5. + + - Do not attempt to launch self-reachability tests when entering + hibernation. Fixes a base of bug 12062; bugfix on 0.0.9pre5. + diff --git a/changes/bug22605 b/changes/bug22605 new file mode 100644 index 0000000000..fdfe202021 --- /dev/null +++ b/changes/bug22605 @@ -0,0 +1,5 @@ + o Minor bugfixes (linux seccomp2 sandbox): + - When running with the sandbox enabled, reload configuration files + correctly even when %include was used. Previously we + would crash. Fixes bug 22605; bugfix on 0.3.1. + Patch from Daniel Pinto. diff --git a/changes/bug23571 b/changes/bug23571 new file mode 100644 index 0000000000..f2efbdfb96 --- /dev/null +++ b/changes/bug23571 @@ -0,0 +1,3 @@ + o Minor bugfixes (hibernation): + - When hibernating, close connections normally and allow them to flush. + Fixes bug 23571; bugfix on 0.2.4.7-alpha. Also fixes bug 7267. diff --git a/changes/bug23653 b/changes/bug23653 deleted file mode 100644 index 81760cbb82..0000000000 --- a/changes/bug23653 +++ /dev/null @@ -1,7 +0,0 @@ - o Minor bugfixes (hidden service client): - - When getting multiple SOCKS request for the same .onion address, don't - trigger multiple descriptor fetches. - - When the descriptor fetch fails with an internal error, no more HSDir to - query or we aren't allowed to fetch (FetchHidServDescriptors 0), close - all pending SOCKS request for that .onion. Fixes bug 23653; bugfix on - 0.3.2.1-alpha. diff --git a/changes/bug23670 b/changes/bug23670 deleted file mode 100644 index 039bc39478..0000000000 --- a/changes/bug23670 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor features (entry guards): - - Improve logs issued when we are missing descriptors of primary guards. - Resolves ticket 23670. diff --git a/changes/bug23678 b/changes/bug23678 deleted file mode 100644 index 8138ea71ea..0000000000 --- a/changes/bug23678 +++ /dev/null @@ -1,7 +0,0 @@ - o Minor bugfixes (warnings): - - When we get an HTTP request on a SOCKS port, tell the user about - the new HTTPTunnelPort option. Previously, we would give a - "Tor is not an HTTP Proxy" message, which stopped being true when - HTTPTunnelPort was introduced. Fixes bug 23678; bugfix on - 0.3.2.1-alpha. - diff --git a/changes/bug23681 b/changes/bug23681 new file mode 100644 index 0000000000..e317f36d50 --- /dev/null +++ b/changes/bug23681 @@ -0,0 +1,5 @@ + o Minor bugfixes (hidden service client): + - The introduction circuit was being timed out too quickly while waiting + for the rendezvous circuit to complete. Keep the intro circuit around + longer instead of timing out and reopening new ones constantly. Fixes + bug 23681; bugfix on 0.2.4.8-alpha. diff --git a/changes/bug23739 b/changes/bug23739 deleted file mode 100644 index 3207b5eaf3..0000000000 --- a/changes/bug23739 +++ /dev/null @@ -1,3 +0,0 @@ - o Minor bugfixes (documentation): - - Document better how to read gcov and what our postprocessing scripts do. - Fixes bug 23739; bugfix on 0.2.9.1-alpha. diff --git a/changes/bug23741 b/changes/bug23741 deleted file mode 100644 index 92f06f5270..0000000000 --- a/changes/bug23741 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (testing): - - Prevent scripts/test/coverage from attempting to move gcov - output to the root directory. Fixes bug 23741; bugfix on - 0.2.5.1-alpha. diff --git a/changes/bug23748 b/changes/bug23748 deleted file mode 100644 index 0bd3f3f8ff..0000000000 --- a/changes/bug23748 +++ /dev/null @@ -1,5 +0,0 @@ - o Minor bugfixes (hidden service): - - Always make sure the hidden service generate the public key file if it - is missing. Prior to this, if the public key was deleted from disk, it - wouldn't get recreated. Fixes bug 23748; bugfix on 0.3.2.2-alpha. - Patch from "cathugger". diff --git a/changes/bug23755 b/changes/bug23755 deleted file mode 100644 index 98f0970344..0000000000 --- a/changes/bug23755 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (testing): - - Stop unconditionally mirroring the tor repository in GitLab CI. - This prevented developers from enabling GitLab CI on master. - Fixes bug 23755; bugfix on 0.3.2.2-alpha. diff --git a/changes/bug23757 b/changes/bug23757 deleted file mode 100644 index 02507a0b4d..0000000000 --- a/changes/bug23757 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (testing): - - Adjust the GitLab CI configuration to more closely match that of Travis - CI. Fixes bug 23757; bugfix on 0.3.2.2-alpha. - diff --git a/changes/bug23758 b/changes/bug23758 deleted file mode 100644 index 565791e8f4..0000000000 --- a/changes/bug23758 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor bugfixes (testing): - - Skip a test that would fail if run as root (because it expects a - permissions error). This affects some continuous integration setups. - Fixes bug 23758; bugfix on 0.3.2.2-alpha. diff --git a/changes/bug23783 b/changes/bug23783 new file mode 100644 index 0000000000..98c583a12b --- /dev/null +++ b/changes/bug23783 @@ -0,0 +1,5 @@ + o Minor bugfixes (compilation, windows): + - When detecting OpenSSL on Windows from our configure script, make sure + to try linking with the ws2_32 library. Fixes bug 23783; bugfix on + 0.3.2.2-alpha. + diff --git a/changes/bug23848 b/changes/bug23848 new file mode 100644 index 0000000000..e2aec687ca --- /dev/null +++ b/changes/bug23848 @@ -0,0 +1,8 @@ + o Minor features (embedding): + - On most errors that would cause Tor to exit, it now tries to return + from the tor_main() function, rather than calling the system exit() + function. Most users won't notice a difference here, but it should + make a significant difference on platforms that try to run Tor inside + a separate thread: they should now be able to survive Tor's exit + conditions rather than having Tor shut down the entire process. + Closes ticket 23848. diff --git a/changes/bug24086 b/changes/bug24086 new file mode 100644 index 0000000000..2ae0b37e65 --- /dev/null +++ b/changes/bug24086 @@ -0,0 +1,7 @@ + o Minor bugfixes (directory cache): + - When a consensus diff calculation is only partially successful, only + record the successful parts as having succeeded. Partial success + can happen if (for example) one compression method fails but + the others succeed. Previously we misrecorded all the calculations as + having succeeded, which would later cause a nonfatal assertion failure. + Fixes bug 24086; bugfix on 0.3.1.1-alpha. diff --git a/changes/bug24099 b/changes/bug24099 new file mode 100644 index 0000000000..dca3992664 --- /dev/null +++ b/changes/bug24099 @@ -0,0 +1,4 @@ + o Minor bugfixes (directory cache): + - Recover better from empty or corrupt files in the consensus cache + directory. Fixes bug 24099; bugfix on 0.3.1.1-alpha. + diff --git a/changes/bug24137 b/changes/bug24137 new file mode 100644 index 0000000000..588e68d199 --- /dev/null +++ b/changes/bug24137 @@ -0,0 +1,3 @@ + o Minor bugfixes (Private Networks): + - Give out Exit flags in bootstrapping networks. Fixes bug 24137; + bugfix on 0.2.3.1-alpha. diff --git a/changes/bug24198 b/changes/bug24198 new file mode 100644 index 0000000000..6790706872 --- /dev/null +++ b/changes/bug24198 @@ -0,0 +1,4 @@ + o Minor bugfixes (controller, linux seccomp2 sandbox): + - Avoid a crash when attempting to use the seccomp2 sandbox + together with the OwningControllerProcess feature. + Fixes bug 24198; bugfix on 0.2.5.1-alpha. diff --git a/changes/bug24318 b/changes/bug24318 new file mode 100644 index 0000000000..c92f7209f1 --- /dev/null +++ b/changes/bug24318 @@ -0,0 +1,3 @@ + o Documentation: + - Clarify the behavior of RelayBandwidth{Rate,Burst} with client traffic. + Closes ticket 24318. diff --git a/changes/geoip-october2017 b/changes/geoip-october2017 deleted file mode 100644 index 11f623e85f..0000000000 --- a/changes/geoip-october2017 +++ /dev/null @@ -1,4 +0,0 @@ - o Minor features (geoip): - - Update geoip and geoip6 to the October 4 2017 Maxmind GeoLite2 - Country database. - diff --git a/changes/longclaw_23592 b/changes/longclaw_23592 deleted file mode 100644 index 91e2da8972..0000000000 --- a/changes/longclaw_23592 +++ /dev/null @@ -1,3 +0,0 @@ - o Directory authority changes: - - The directory authority "Longclaw" has changed its IP address. - Closes ticket 23592. diff --git a/changes/ticket13605 b/changes/ticket13605 new file mode 100644 index 0000000000..0456881ff9 --- /dev/null +++ b/changes/ticket13605 @@ -0,0 +1,5 @@ + o Major features (relay): + - Implement an option, ReducedExitPolicy, to allow an Tor exit relay + operator to use a more reasonable ("reduced") exit policy, rather + than the default one. Closes ticket 13605. Patch from Neel Chauhan. + diff --git a/changes/ticket20895 b/changes/ticket20895 new file mode 100644 index 0000000000..a1d8204997 --- /dev/null +++ b/changes/ticket20895 @@ -0,0 +1,6 @@ + o Minor features (forward-compatibility): + - If a relay supports some link authentication protocol that we do not + recognize, then include that relay's ed25519 key when telling other + relays to extend to it. Previously, we treated future versions as if + they were too old to support ed25519 link authentication. + Closes ticket 20895. diff --git a/changes/ticket22342 b/changes/ticket22342 new file mode 100644 index 0000000000..53505509d2 --- /dev/null +++ b/changes/ticket22342 @@ -0,0 +1,3 @@ + o Code simplification and refactoring: + - Small changes to Tor's buf_t API to make it suitable for use as + a general-purpose safe string constructor. Closes ticket 22342. diff --git a/changes/ticket22840 b/changes/ticket22840 new file mode 100644 index 0000000000..6d234fb0d4 --- /dev/null +++ b/changes/ticket22840 @@ -0,0 +1,8 @@ + o Major features (Rust experimentation): + - Tor now ships with an optional implementation of one of its smaller + modules (protover.c) in the Rust programming language. To try it + out, install a Rust build environment, and configure Tor with + "--enable-rust --enable-cargo-online-mode". This should not + cause any user-visible changes, but should help us gain more experience + with Rust, and plan future Rust integration work. + Implementation by Chelsea Komlo. Closes ticket 22840. diff --git a/changes/ticket23577 b/changes/ticket23577 new file mode 100644 index 0000000000..7cd80bcb69 --- /dev/null +++ b/changes/ticket23577 @@ -0,0 +1,7 @@ + o Major features (v3 onion services): + - When v3 onion service clients send introduce cells, include the IPv6 + address of the rendezvous point, if it has one. v3 onion services running + 0.3.2 ignore IPv6 addresses. In future Tor versions, IPv6-only v3 single + onion services can use IPv6 addresses to connect directly to the + rendezvous point. Closes ticket 23577. Patch by Neel Chauhan. + diff --git a/changes/ticket23637 b/changes/ticket23637 new file mode 100644 index 0000000000..0c524f34c3 --- /dev/null +++ b/changes/ticket23637 @@ -0,0 +1,5 @@ + o Minor features (directory authority): + - Make the "Exit" flag assignment only depend on whether the exit + policy allows connections to ports 80 and 443. Previously relays + would get the Exit flag if they allowed connections to one of + these ports and also port 6667. Resolves ticket 23637. diff --git a/changes/ticket23760 b/changes/ticket23760 new file mode 100644 index 0000000000..9213b14627 --- /dev/null +++ b/changes/ticket23760 @@ -0,0 +1,4 @@ + o Code simplification and refactoring: + - We make extend_info_from_node() use node_get_curve25519_onion_key() + introduced in ticket 23577 to access the curve25519 public keys rather + than accessing it directly. Closes ticket 23760. Patch by Neel Chauhan. diff --git a/changes/ticket23845 b/changes/ticket23845 new file mode 100644 index 0000000000..93c150bdb0 --- /dev/null +++ b/changes/ticket23845 @@ -0,0 +1,9 @@ + o Major features (embedding): + - There is now a documented stable API for programs that need to + embed Tor. See tor_api.h for full documentation and known bugs. + Closes ticket 23684. + + o Code simplification and refactoring: + - The tor_git_revision[] constant no longer needs to be redeclared + by everything that links against the rest of Tor. Done as part + of ticket 23845, to simplify our external API. diff --git a/changes/ticket23900 b/changes/ticket23900 new file mode 100644 index 0000000000..0f949f4f4e --- /dev/null +++ b/changes/ticket23900 @@ -0,0 +1,7 @@ + o Minor features (API, embedding): + - Tor can now start with a preauthenticated control connection + created by the process that launched it. This feature is meant + for use by programs that want to launch and manage a Tor process + without allowing other programs to manage it as well. + For more information, see the __OwningControllerFD option + documented in control-spec.txt. Closes ticket 23900. diff --git a/changes/ticket23910 b/changes/ticket23910 deleted file mode 100644 index eb38fcf32f..0000000000 --- a/changes/ticket23910 +++ /dev/null @@ -1,3 +0,0 @@ - o Directory authority changes: - - Add bastet as a ninth directory authority to the default list. Closes - ticket 23910. diff --git a/changes/ticket24315 b/changes/ticket24315 new file mode 100644 index 0000000000..df34dbf412 --- /dev/null +++ b/changes/ticket24315 @@ -0,0 +1,3 @@ + o Major features (linux seccomp2 sandbox): + - Update the sandbox rules so that they should now work correctly with + Glibc 2.26. Closes ticket 24315. diff --git a/changes/ticket24363 b/changes/ticket24363 new file mode 100644 index 0000000000..6f90fc066e --- /dev/null +++ b/changes/ticket24363 @@ -0,0 +1,2 @@ + o Code simplification and refactoring: + - Remove /usr/athena from search path in configure.ac. Closes ticket 24363. diff --git a/configure.ac b/configure.ac index 05968fa913..fd098b48de 100644 --- a/configure.ac +++ b/configure.ac @@ -375,6 +375,7 @@ AH_BOTTOM([ AM_CONDITIONAL(BUILD_NT_SERVICES, test "x$bwin32" = "xtrue") +AM_CONDITIONAL(BUILD_LIBTORRUNNER, test "x$bwin32" != "xtrue") dnl Enable C99 when compiling with MIPSpro AC_MSG_CHECKING([for MIPSpro compiler]) @@ -417,34 +418,34 @@ if test "x$enable_rust" = "xyes"; then 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([RUST_DEPENDENCIES], [path to directory with local crate mirror]) - if test "x$RUST_DEPENDENCIES" = "x"; then - RUST_DEPENDENCIES="$srcdir/src/ext/rust/" + 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/" NEED_MOD=1 fi - if test ! -d "$RUST_DEPENDENCIES"; then - AC_MSG_ERROR([Rust dependency directory $RUST_DEPENDENCIES does not exist. Specify a dependency directory using the RUST_DEPENDENCIES variable or allow cargo to fetch crates using --enable-cargo-online-mode.]) + 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.]) fi for dep in $rust_crates; do - if test ! -d "$RUST_DEPENDENCIES"/"$dep"; then - AC_MSG_ERROR([Failure to find rust dependency $RUST_DEPENDENCIES/$dep. Specify a dependency directory using the RUST_DEPENDENCIES variable or allow cargo to fetch crates using --enable-cargo-online-mode.]) + 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.]) fi done if test "x$NEED_MOD" = "x1"; then dnl When looking for dependencies from cargo, pick right directory - RUST_DEPENDENCIES="../../src/ext/rust" + TOR_RUST_DEPENDENCIES="../../src/ext/rust" 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_UTIL_STATIC_NAME=tor_util.lib + TOR_RUST_STATIC_NAME=tor_rust.lib else - TOR_RUST_UTIL_STATIC_NAME=libtor_util.a + TOR_RUST_STATIC_NAME=libtor_rust.a fi - AC_SUBST(TOR_RUST_UTIL_STATIC_NAME) + AC_SUBST(TOR_RUST_STATIC_NAME) AC_SUBST(CARGO_ONLINE) AC_SUBST(RUST_DL) @@ -497,6 +498,7 @@ AC_CHECK_FUNCS( getrlimit \ gettimeofday \ gmtime_r \ + gnu_get_libc_version \ htonll \ inet_aton \ ioctl \ @@ -624,7 +626,7 @@ struct event_base *event_base_new(void);], #ifdef _WIN32 {WSADATA d; WSAStartup(0x101,&d); } #endif -event_base_new(); +event_base_free(event_base_new()); ], [--with-libevent-dir], [/opt/libevent]) dnl Determine the incantation needed to link libevent. @@ -723,11 +725,11 @@ AC_ARG_WITH(ssl-dir, ]) AC_MSG_NOTICE([Now, we'll look for OpenSSL >= 1.0.1]) -TOR_SEARCH_LIBRARY(openssl, $tryssldir, [-lssl -lcrypto $TOR_LIB_GDI], +TOR_SEARCH_LIBRARY(openssl, $tryssldir, [-lssl -lcrypto $TOR_LIB_GDI $TOR_LIB_WS32], [#include <openssl/ssl.h>], [struct ssl_method_st; const struct ssl_method_st *TLSv1_1_method(void);], [TLSv1_1_method();], [], - [/usr/local/opt/openssl /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/athena /opt/openssl]) + [/usr/local/opt/openssl /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /opt/openssl]) dnl XXXX check for OPENSSL_VERSION_NUMBER == SSLeay() @@ -1215,6 +1217,7 @@ AC_CHECK_HEADERS([assert.h \ arpa/inet.h \ crt_externs.h \ execinfo.h \ + gnu/libc-version.h \ grp.h \ ifaddrs.h \ inttypes.h \ diff --git a/doc/HACKING/GettingStartedRust.md b/doc/HACKING/GettingStartedRust.md index a5253b46a6..181535122c 100644 --- a/doc/HACKING/GettingStartedRust.md +++ b/doc/HACKING/GettingStartedRust.md @@ -125,6 +125,16 @@ 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 ----------------------------------------------- @@ -132,8 +142,13 @@ solidify on is readily available. in the `.../tor/src/rust/` directory. 1. Add your crate to `.../tor/src/rust/Cargo.toml`, in the `[workspace.members]` section. -2. Append your crate's static library to the `rust_ldadd` definition - (underneath `if USE_RUST`) in `.../tor/Makefile.am`. +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 ---------------------------- diff --git a/doc/HACKING/ReleasingTor.md b/doc/HACKING/ReleasingTor.md index 62029b44f0..9cbc8710bb 100644 --- a/doc/HACKING/ReleasingTor.md +++ b/doc/HACKING/ReleasingTor.md @@ -171,7 +171,8 @@ new Tor release: - {mike} at tig dot as - {tails-rm} at boum dot org - {simon} at sdeziel.info - - {yuri} at rawbw.com + - {yuri} at freebsd.org + - {mh+tor} at scrit.ch 4. Add the version number to Trac. To do this, go to Trac, log in, select "Admin" near the top of the screen, then select "Versions" from diff --git a/doc/tor.1.txt b/doc/tor.1.txt index ba2bc13dad..6d0b809186 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -231,12 +231,15 @@ GENERAL OPTIONS usage for \_relayed traffic_ on this node to the specified number of bytes per second, and the average outgoing bandwidth usage to that same value. Relayed traffic currently is calculated to include answers to directory - requests, but that may change in future versions. (Default: 0) + requests, but that may change in future versions. They do not include directory + fetches by the relay (from authority or other relays), because that is considered + "client" activity. (Default: 0) [[RelayBandwidthBurst]] **RelayBandwidthBurst** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**TBytes**|**KBits**|**MBits**|**GBits**|**TBits**:: If not 0, limit the maximum token bucket size (also known as the burst) for \_relayed traffic_ to the given number of bytes in each direction. - (Default: 0) + They do not include directory fetches by the relay (from authority + or other relays), because that is considered "client" activity. (Default: 0) [[PerConnBWRate]] **PerConnBWRate** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**TBytes**|**KBits**|**MBits**|**GBits**|**TBits**:: If set, do separate rate limiting for each connection from a non-relay. @@ -791,27 +794,35 @@ GENERAL OPTIONS restarting Tor. (Default: 0) [[Schedulers]] **Schedulers** **KIST**|**KISTLite**|**Vanilla**:: - Specify the scheduler type that tor should use to handle outbound data on - channels. This is an ordered list by priority which means that the first - value will be tried first and if unavailable, the second one is tried and - so on. It is possible to change thse values at runtime. + Specify the scheduler type that tor should use. The scheduler is + responsible for moving data around within a Tor process. This is an ordered + list by priority which means that the first value will be tried first and if + unavailable, the second one is tried and so on. It is possible to change + these values at runtime. This option mostly effects relays, and most + operators should leave it set to its default value. (Default: KIST,KISTLite,Vanilla) + The possible scheduler types are: + - **KIST**: Kernel Informed Socket Transport. Tor will use the kernel tcp - information stack per-socket to make an informed decision on if it should - send or not the data. (Only available on Linux) + **KIST**: Kernel-Informed Socket Transport. Tor will use TCP information + from the kernel to make informed decisions regarding how much data to send + and when to send it. KIST also handles traffic in batches (see + KISTSchedRunInterval) in order to improve traffic prioritization decisions. + As implemented, KIST will only work on Linux kernel version 2.6.39 or + higher. + - **KISTLite**: Same as KIST but without kernel support which means that tor - will use all the same mecanics as KIST but without the TCP information the - kernel can provide. + **KISTLite**: Same as KIST but without kernel support. Tor will use all + the same mechanics as with KIST, including the batching, but its decisions + regarding how much data to send will not be as good. KISTLite will work on + all kernels and operating systems, and the majority of the benefits of KIST + are still realized with KISTLite. + - **Vanilla**: The scheduler that tor has always used that is do as much as - possible or AMAP. + **Vanilla**: The scheduler that Tor used before KIST was implemented. It + sends as much data as possible, as soon as possible. Vanilla will work on + all kernels and operating systems. [[KISTSchedRunInterval]] **KISTSchedRunInterval** __NUM__ **msec**:: - If KIST or KISTLite is used in Schedulers option, this control at which + If KIST or KISTLite is used in the Schedulers option, this controls at which interval the scheduler tick is. If the value is 0 msec, the value is taken from the consensus if possible else it will fallback to the default 10 msec. Maximum possible value is 100 msec. (Default: 0 msec) @@ -1215,8 +1226,8 @@ The following options are useful only for clients (that is, if nodes via this connection. **UseIPv4Cache**;; Tells the client to use any cached IPv4 DNS answers we have when making - requests via this connection. (NOTE: This option, along UseIPv6Cache - and UseDNSCache, can harm your anonymity, and probably + requests via this connection. (NOTE: This option, or UseIPv6Cache + or UseDNSCache, can harm your anonymity, and probably won't help performance as much as you might expect. Use with care!) **UseIPv6Cache**;; Tells the client to use any cached IPv6 DNS answers we have when making @@ -1440,9 +1451,15 @@ The following options are useful only for clients (that is, if addresses/ports. See SocksPort for an explanation of isolation flags. (Default: 0) +[[ClientDNSRejectInternalAddresses]] **ClientDNSRejectInternalAddresses** **0**|**1**:: + If true, Tor does not believe any anonymously retrieved DNS answer that + tells it that an address resolves to an internal address (like 127.0.0.1 or + 192.168.0.1). This option prevents certain browser-based attacks; it + is not allowed to be set on the default network. (Default: 1) + [[ClientRejectInternalAddresses]] **ClientRejectInternalAddresses** **0**|**1**:: If true, Tor does not try to fulfill requests to connect to an internal - address (like 127.0.0.1 or 192.168.0.1) __unless a exit node is + address (like 127.0.0.1 or 192.168.0.1) __unless an exit node is specifically requested__ (for example, via a .exit hostname, or a controller request). If true, multicast DNS hostnames for machines on the local network (of the form *.local) are also rejected. (Default: 1) @@ -1670,6 +1687,17 @@ is non-zero): server descriptor to the bridge database, rather than to the public directory authorities. +[[BridgeDistribution]] **BridgeDistribution** __string__:: + If set along with BridgeRelay, Tor will include a new line in its + bridge descriptor which indicates to the BridgeDB service how it + would like its bridge address to be given out. Set it to "none" if + you want BridgeDB to avoid distributing your bridge address, or "any" to + let BridgeDB decide. (Default: any) + + + Note: as of Oct 2017, the BridgeDB part of this option is not yet + implemented. Until BridgeDB is updated to obey this option, your + bridge will make this request, but it will not (yet) be obeyed. + [[ContactInfo]] **ContactInfo** __email_address__:: Administrative contact information for this relay or bridge. This line can be used to contact you if your relay or bridge is misconfigured or @@ -1746,8 +1774,15 @@ is non-zero): write your IPv6 rules using accept6/reject6 \*6, and your IPv4 rules using accept/reject \*4. If you want to \_replace_ the default exit policy, end your exit policy with either a reject \*:* or an accept \*:*. Otherwise, - you're \_augmenting_ (prepending to) the default exit policy. The default - exit policy is: + + you're \_augmenting_ (prepending to) the default exit policy. + + + + If you want to use a reduced exit policy rather than the default exit + policy, set "ReducedExitPolicy 1". If you want to _replace_ the default + exit policy with your custom exit policy, end your exit policy with either + a reject *:* or an accept *:*. Otherwise, you’re _augmenting_ (prepending + to) the default or reduced exit policy. + + + + The default exit policy is: reject *:25 reject *:119 @@ -1761,7 +1796,7 @@ is non-zero): reject *:6881-6999 accept *:* -[[ExitPolicyDefault]]:: +[[ExitPolicyDefault]] **ExitPolicyDefault**:: Since the default exit policy uses accept/reject *, it applies to both IPv4 and IPv6 addresses. @@ -1783,6 +1818,99 @@ is non-zero): to disclose. (Default: 0) +[[ReducedExitPolicy]] **ReducedExitPolicy** **0**|**1**:: + If set, use a reduced exit policy rather than the default one. + + + + The reduced exit policy is an alternative to the default exit policy. It + allows as many Internet services as possible while still blocking the + majority of TCP ports. Currently, the policy allows approximately 65 ports. + This reduces the odds that your node will be used for peer-to-peer + applications. + + + + The reduced exit policy is: + + accept *:20-21 + accept *:22 + accept *:23 + accept *:43 + accept *:53 + accept *:79 + accept *:80-81 + accept *:88 + accept *:110 + accept *:143 + accept *:194 + accept *:220 + accept *:389 + accept *:443 + accept *:464 + accept *:465 + accept *:531 + accept *:543-544 + accept *:554 + accept *:563 + accept *:587 + accept *:636 + accept *:706 + accept *:749 + accept *:873 + accept *:902-904 + accept *:981 + accept *:989-990 + accept *:991 + accept *:992 + accept *:993 + accept *:994 + accept *:995 + accept *:1194 + accept *:1220 + accept *:1293 + accept *:1500 + accept *:1533 + accept *:1677 + accept *:1723 + accept *:1755 + accept *:1863 + accept *:2082 + accept *:2083 + accept *:2086-2087 + accept *:2095-2096 + accept *:2102-2104 + accept *:3128 + accept *:3389 + accept *:3690 + accept *:4321 + accept *:4643 + accept *:5050 + accept *:5190 + accept *:5222-5223 + accept *:5228 + accept *:5900 + accept *:6660-6669 + accept *:6679 + accept *:6697 + accept *:8000 + accept *:8008 + accept *:8074 + accept *:8080 + accept *:8082 + accept *:8087-8088 + accept *:8232-8233 + accept *:8332-8333 + accept *:8443 + accept *:8888 + accept *:9418 + accept *:9999 + accept *:10000 + accept *:11371 + accept *:19294 + accept *:19638 + accept *:50002 + accept *:64738 + reject *:* + + (Default: 0) + [[IPv6Exit]] **IPv6Exit** **0**|**1**:: If set, and we are an exit node, allow clients to use us for IPv6 traffic. (Default: 0) @@ -2434,7 +2562,7 @@ The following options are used to configure a hidden service. [[HiddenServiceNumIntroductionPoints]] **HiddenServiceNumIntroductionPoints** __NUM__:: Number of introduction points the hidden service will have. You can't - have more than 10. (Default: 3) + have more than 10 for v2 service and 20 for v3. (Default: 3) [[HiddenServiceSingleHopMode]] **HiddenServiceSingleHopMode** **0**|**1**:: **Experimental - Non Anonymous** Hidden Services on a tor instance in @@ -2496,7 +2624,7 @@ The following options are used for running a testing Tor network. 4 (for 40 seconds), 8, 16, 32, 60 ClientBootstrapConsensusMaxDownloadTries 80 ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries 80 - TestingClientDNSRejectInternalAddresses 0 + ClientDNSRejectInternalAddresses 0 ClientRejectInternalAddresses 0 CountPrivateBandwidth 1 ExitPolicyRejectPrivate 0 @@ -2707,13 +2835,6 @@ The following options are used for running a testing Tor network. we replace it and issue a new key? (Default: 3 hours for link and auth; 1 day for signing.) -[[ClientDNSRejectInternalAddresses]] [[TestingClientDNSRejectInternalAddresses]] **TestingClientDNSRejectInternalAddresses** **0**|**1**:: - If true, Tor does not believe any anonymously retrieved DNS answer that - tells it that an address resolves to an internal address (like 127.0.0.1 or - 192.168.0.1). This option prevents certain browser-based attacks; don't - turn it off unless you know what you're doing. (Default: 1) - - NON-PERSISTENT OPTIONS ---------------------- diff --git a/scripts/codegen/fuzzing_include_am.py b/scripts/codegen/fuzzing_include_am.py index e01bc8daa9..fda57d2ae8 100755 --- a/scripts/codegen/fuzzing_include_am.py +++ b/scripts/codegen/fuzzing_include_am.py @@ -7,8 +7,9 @@ FUZZERS = """ diff-apply extrainfo hsdescv2 + hsdescv3 http - http-connect + http-connect iptsv2 microdesc vrs diff --git a/scripts/maint/lintChanges.py b/scripts/maint/lintChanges.py index c2dda6dc81..d5b8fcae5c 100755 --- a/scripts/maint/lintChanges.py +++ b/scripts/maint/lintChanges.py @@ -76,13 +76,13 @@ def lintfile(fname): if isBug and not re.search(r'(\d+)', contents): warn("Ticket marked as bugfix, but does not mention a number.") - elif isBug and not re.search(r'Fixes ([a-z ]*)bug (\d+)', contents): + elif isBug and not re.search(r'Fixes ([a-z ]*)bugs? (\d+)', contents): warn("Ticket marked as bugfix, but does not say 'Fixes bug XXX'") if re.search(r'[bB]ug (\d+)', contents): if not re.search(r'[Bb]ugfix on ', contents): warn("Bugfix does not say 'bugfix on X.Y.Z'") - elif not re.search('[fF]ixes ([a-z ]*)bug (\d+); bugfix on ', + elif not re.search('[fF]ixes ([a-z ]*)bugs? (\d+)((, \d+)* and \d+)?; bugfix on ', contents): warn("Bugfix does not say 'Fixes bug X; bugfix on Y'") elif re.search('tor-([0-9]+)', contents): diff --git a/src/common/buffers.c b/src/common/buffers.c index c45e13d551..a21cf2ab5b 100644 --- a/src/common/buffers.c +++ b/src/common/buffers.c @@ -714,6 +714,53 @@ buf_add(buf_t *buf, const char *string, size_t string_len) return (int)buf->datalen; } +/** Add a nul-terminated <b>string</b> to <b>buf</b>, not including the + * terminating NUL. */ +void +buf_add_string(buf_t *buf, const char *string) +{ + buf_add(buf, string, strlen(string)); +} + +/** As tor_snprintf, but write the results into a buf_t */ +void +buf_add_printf(buf_t *buf, const char *format, ...) +{ + va_list ap; + va_start(ap,format); + buf_add_vprintf(buf, format, ap); + va_end(ap); +} + +/** As tor_vsnprintf, but write the results into a buf_t. */ +void +buf_add_vprintf(buf_t *buf, const char *format, va_list args) +{ + /* XXXX Faster implementations are easy enough, but let's optimize later */ + char *tmp; + tor_vasprintf(&tmp, format, args); + buf_add(buf, tmp, strlen(tmp)); + tor_free(tmp); +} + +/** Return a heap-allocated string containing the contents of <b>buf</b>, plus + * a NUL byte. If <b>sz_out</b> is provided, set *<b>sz_out</b> to the length + * of the returned string, not including the terminating NUL. */ +char * +buf_extract(buf_t *buf, size_t *sz_out) +{ + tor_assert(buf); + + size_t sz = buf_datalen(buf); + char *result; + result = tor_malloc(sz+1); + buf_peek(buf, result, sz); + result[sz] = 0; + if (sz_out) + *sz_out = sz; + return result; +} + /** Helper: copy the first <b>string_len</b> bytes from <b>buf</b> * onto <b>string</b>. */ @@ -795,6 +842,28 @@ buf_move_to_buf(buf_t *buf_out, buf_t *buf_in, size_t *buf_flushlen) return (int)cp; } +/** Moves all data from <b>buf_in</b> to <b>buf_out</b>, without copying. + */ +void +buf_move_all(buf_t *buf_out, buf_t *buf_in) +{ + tor_assert(buf_out); + if (!buf_in) + return; + + if (buf_out->head == NULL) { + buf_out->head = buf_in->head; + buf_out->tail = buf_in->tail; + } else { + buf_out->tail->next = buf_in->head; + buf_out->tail = buf_in->tail; + } + + buf_out->datalen += buf_in->datalen; + buf_in->head = buf_in->tail = NULL; + buf_in->datalen = 0; +} + /** Internal structure: represents a position in a buffer. */ typedef struct buf_pos_t { const chunk_t *chunk; /**< Which chunk are we pointing to? */ diff --git a/src/common/buffers.h b/src/common/buffers.h index 1eaa5f2d04..dd96ddcb6c 100644 --- a/src/common/buffers.h +++ b/src/common/buffers.h @@ -43,9 +43,15 @@ int buf_flush_to_socket(buf_t *buf, tor_socket_t s, size_t sz, size_t *buf_flushlen); int buf_add(buf_t *buf, const char *string, size_t string_len); +void buf_add_string(buf_t *buf, const char *string); +void buf_add_printf(buf_t *buf, const char *format, ...) + CHECK_PRINTF(2, 3); +void buf_add_vprintf(buf_t *buf, const char *format, va_list args) + CHECK_PRINTF(2, 0); int buf_add_compress(buf_t *buf, struct tor_compress_state_t *state, const char *data, size_t data_len, int done); int buf_move_to_buf(buf_t *buf_out, buf_t *buf_in, size_t *buf_flushlen); +void buf_move_all(buf_t *buf_out, buf_t *buf_in); void buf_peek(const buf_t *buf, char *string, size_t string_len); void buf_drain(buf_t *buf, size_t n); int buf_get_bytes(buf_t *buf, char *string, size_t string_len); @@ -62,6 +68,7 @@ void buf_assert_ok(buf_t *buf); int buf_find_string_offset(const buf_t *buf, const char *s, size_t n); void buf_pullup(buf_t *buf, size_t bytes, const char **head_out, size_t *len_out); +char *buf_extract(buf_t *buf, size_t *sz_out); #ifdef BUFFERS_PRIVATE #ifdef TOR_UNIT_TESTS diff --git a/src/common/compat.c b/src/common/compat.c index 7fe97488e3..38693b21fe 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -1186,7 +1186,7 @@ mark_socket_open(tor_socket_t s) bitarray_set(open_sockets, s); } #else /* !(defined(DEBUG_SOCKET_COUNTING)) */ -#define mark_socket_open(s) STMT_NIL +#define mark_socket_open(s) ((void) (s)) #endif /* defined(DEBUG_SOCKET_COUNTING) */ /** @} */ @@ -1273,11 +1273,22 @@ tor_open_socket_with_extensions(int domain, int type, int protocol, goto socket_ok; /* So that socket_ok will not be unused. */ socket_ok: + tor_take_socket_ownership(s); + return s; +} + +/** + * For socket accounting: remember that we are the owner of the socket + * <b>s</b>. This will prevent us from overallocating sockets, and prevent us + * from asserting later when we close the socket <b>s</b>. + */ +void +tor_take_socket_ownership(tor_socket_t s) +{ socket_accounting_lock(); ++n_sockets_open; mark_socket_open(s); socket_accounting_unlock(); - return s; } /** As accept(), but counts the number of open sockets. */ @@ -1358,10 +1369,7 @@ tor_accept_socket_with_extensions(tor_socket_t sockfd, struct sockaddr *addr, goto socket_ok; /* So that socket_ok will not be unused. */ socket_ok: - socket_accounting_lock(); - ++n_sockets_open; - mark_socket_open(s); - socket_accounting_unlock(); + tor_take_socket_ownership(s); return s; } diff --git a/src/common/compat.h b/src/common/compat.h index fee9e6587d..0aabee68c8 100644 --- a/src/common/compat.h +++ b/src/common/compat.h @@ -483,6 +483,7 @@ typedef int socklen_t; int tor_close_socket_simple(tor_socket_t s); MOCK_DECL(int, tor_close_socket, (tor_socket_t s)); +void tor_take_socket_ownership(tor_socket_t s); tor_socket_t tor_open_socket_with_extensions( int domain, int type, int protocol, int cloexec, int nonblock); diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h index 834354c405..3d8672fc63 100644 --- a/src/common/compat_libevent.h +++ b/src/common/compat_libevent.h @@ -30,6 +30,7 @@ periodic_timer_t *periodic_timer_new(struct event_base *base, void periodic_timer_free(periodic_timer_t *); #define tor_event_base_loopexit event_base_loopexit +#define tor_event_base_loopbreak event_base_loopbreak /** Defines a configuration for using libevent with Tor: passed as an argument * to tor_libevent_initialize() to describe how we want to set up. */ diff --git a/src/common/compat_rust.c b/src/common/compat_rust.c deleted file mode 100644 index 366fd4037b..0000000000 --- a/src/common/compat_rust.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (c) 2017, The Tor Project, Inc. */ -/* See LICENSE for licensing information */ - -/** - * \file rust_compat.c - * \brief Rust FFI compatibility functions and helpers. This file is only built - * if Rust is not used. - **/ - -#include "compat_rust.h" -#include "util.h" - -/** - * Free storage pointed to by <b>str</b>, and itself. - */ -void -rust_str_free(rust_str_t str) -{ - char *s = (char *)str; - tor_free(s); -} - -/** - * Return zero-terminated contained string. - */ -const char * -rust_str_get(const rust_str_t str) -{ - return (const char *)str; -} - -/* If we were using Rust, we'd say so on startup. */ -rust_str_t -rust_welcome_string(void) -{ - char *s = tor_malloc_zero(1); - return (rust_str_t)s; -} - diff --git a/src/common/compat_rust.h b/src/common/compat_rust.h deleted file mode 100644 index 72fde39296..0000000000 --- a/src/common/compat_rust.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (c) 2017, The Tor Project, Inc. */ -/* See LICENSE for licensing information */ - -/** - * \file rust_compat.h - * \brief Headers for rust_compat.c - **/ - -#ifndef TOR_RUST_COMPAT_H -#define TOR_RUST_COMPAT_H - -#include "torint.h" - -/** - * Strings allocated in Rust must be freed from Rust code again. Let's make - * it less likely to accidentally mess up and call tor_free() on it, because - * currently it'll just work but might break at any time. - */ -typedef uintptr_t rust_str_t; - -void rust_str_free(rust_str_t); - -const char *rust_str_get(const rust_str_t); - -rust_str_t rust_welcome_string(void); - -#endif /* !defined(TOR_RUST_COMPAT_H) */ - diff --git a/src/common/confline.c b/src/common/confline.c index 04545bc2c3..781ad2a12b 100644 --- a/src/common/confline.c +++ b/src/common/confline.c @@ -12,15 +12,18 @@ static int config_get_lines_aux(const char *string, config_line_t **result, int extended, int allow_include, - int *has_include, int recursion_level, - config_line_t **last); -static smartlist_t *config_get_file_list(const char *path); -static int config_get_included_list(const char *path, int recursion_level, - int extended, config_line_t **list, - config_line_t **list_last); + int *has_include, smartlist_t *opened_lst, + int recursion_level, config_line_t **last); +static smartlist_t *config_get_file_list(const char *path, + smartlist_t *opened_files); +static int config_get_included_config(const char *path, int recursion_level, + int extended, config_line_t **config, + config_line_t **config_last, + smartlist_t *opened_lst); static int config_process_include(const char *path, int recursion_level, int extended, config_line_t **list, - config_line_t **list_last); + config_line_t **list_last, + smartlist_t *opened_lst); /** Helper: allocate a new configuration option mapping 'key' to 'val', * append it to *<b>lst</b>. */ @@ -80,11 +83,13 @@ config_line_find(const config_line_t *lines, /** Auxiliary function that does all the work of config_get_lines. * <b>recursion_level</b> is the count of how many nested %includes we have. + * <b>opened_lst</b> will have a list of opened files if provided. * Returns the a pointer to the last element of the <b>result</b> in * <b>last</b>. */ static int config_get_lines_aux(const char *string, config_line_t **result, int extended, - int allow_include, int *has_include, int recursion_level, + int allow_include, int *has_include, + smartlist_t *opened_lst, int recursion_level, config_line_t **last) { config_line_t *list = NULL, **next, *list_last = NULL; @@ -134,7 +139,7 @@ config_get_lines_aux(const char *string, config_line_t **result, int extended, config_line_t *include_list; if (config_process_include(v, recursion_level, extended, &include_list, - &list_last) < 0) { + &list_last, opened_lst) < 0) { log_warn(LD_CONFIG, "Error reading included configuration " "file or directory: \"%s\".", v); config_free_lines(list); @@ -176,24 +181,27 @@ config_get_lines_aux(const char *string, config_line_t **result, int extended, /** Helper: parse the config string and strdup into key/value * strings. Set *result to the list, or NULL if parsing the string * failed. Set *has_include to 1 if <b>result</b> has values from - * %included files. Return 0 on success, -1 on failure. Warn and ignore any + * %included files. <b>opened_lst</b> will have a list of opened files if + * provided. Return 0 on success, -1 on failure. Warn and ignore any * misformatted lines. * * If <b>extended</b> is set, then treat keys beginning with / and with + as * indicating "clear" and "append" respectively. */ int config_get_lines_include(const char *string, config_line_t **result, - int extended, int *has_include) + int extended, int *has_include, + smartlist_t *opened_lst) { - return config_get_lines_aux(string, result, extended, 1, has_include, 1, - NULL); + return config_get_lines_aux(string, result, extended, 1, has_include, + opened_lst, 1, NULL); } /** Same as config_get_lines_include but does not allow %include */ int config_get_lines(const char *string, config_line_t **result, int extended) { - return config_get_lines_aux(string, result, extended, 0, NULL, 1, NULL); + return config_get_lines_aux(string, result, extended, 0, NULL, NULL, 1, + NULL); } /** Adds a list of configuration files present on <b>path</b> to @@ -201,12 +209,18 @@ config_get_lines(const char *string, config_line_t **result, int extended) * only that file will be added to <b>file_list</b>. If it is a directory, * all paths for files on that directory root (no recursion) except for files * whose name starts with a dot will be added to <b>file_list</b>. - * Return 0 on success, -1 on failure. Ignores empty files. + * <b>opened_files</b> will have a list of files opened by this function + * if provided. Return 0 on success, -1 on failure. Ignores empty files. */ static smartlist_t * -config_get_file_list(const char *path) +config_get_file_list(const char *path, smartlist_t *opened_files) { smartlist_t *file_list = smartlist_new(); + + if (opened_files) { + smartlist_add_strdup(opened_files, path); + } + file_status_t file_type = file_status(path); if (file_type == FN_FILE) { smartlist_add_strdup(file_list, path); @@ -228,6 +242,10 @@ config_get_file_list(const char *path) tor_asprintf(&fullname, "%s"PATH_SEPARATOR"%s", path, f); tor_free(f); + if (opened_files) { + smartlist_add_strdup(opened_files, fullname); + } + if (file_status(fullname) != FN_FILE) { tor_free(fullname); continue; @@ -245,19 +263,21 @@ config_get_file_list(const char *path) } /** Creates a list of config lines present on included <b>path</b>. - * Set <b>list</b> to the list and <b>list_last</b> to the last element of - * <b>list</b>. Return 0 on success, -1 on failure. */ + * Set <b>config</b> to the list and <b>config_last</b> to the last element of + * <b>config</b>. <b>opened_lst</b> will have a list of opened files if + * provided. Return 0 on success, -1 on failure. */ static int -config_get_included_list(const char *path, int recursion_level, int extended, - config_line_t **list, config_line_t **list_last) +config_get_included_config(const char *path, int recursion_level, int extended, + config_line_t **config, config_line_t **config_last, + smartlist_t *opened_lst) { char *included_conf = read_file_to_str(path, 0, NULL); if (!included_conf) { return -1; } - if (config_get_lines_aux(included_conf, list, extended, 1, NULL, - recursion_level+1, list_last) < 0) { + if (config_get_lines_aux(included_conf, config, extended, 1, NULL, + opened_lst, recursion_level+1, config_last) < 0) { tor_free(included_conf); return -1; } @@ -268,41 +288,31 @@ config_get_included_list(const char *path, int recursion_level, int extended, /** Process an %include <b>path</b> in a config file. Set <b>list</b> to the * list of configuration settings obtained and <b>list_last</b> to the last - * element of the same list. Return 0 on success, -1 on failure. */ + * element of the same list. <b>opened_lst</b> will have a list of opened + * files if provided. Return 0 on success, -1 on failure. */ static int config_process_include(const char *path, int recursion_level, int extended, - config_line_t **list, config_line_t **list_last) + config_line_t **list, config_line_t **list_last, + smartlist_t *opened_lst) { config_line_t *ret_list = NULL; config_line_t **next = &ret_list; -#if 0 - // Disabled -- we already unescape_string() on the result. */ - char *unquoted_path = get_unquoted_path(path); - if (!unquoted_path) { - return -1; - } - smartlist_t *config_files = config_get_file_list(unquoted_path); - if (!config_files) { - tor_free(unquoted_path); - return -1; - } - tor_free(unquoted_path); -#endif /* 0 */ - smartlist_t *config_files = config_get_file_list(path); + smartlist_t *config_files = config_get_file_list(path, opened_lst); if (!config_files) { return -1; } int rv = -1; SMARTLIST_FOREACH_BEGIN(config_files, const char *, config_file) { - config_line_t *included_list = NULL; - if (config_get_included_list(config_file, recursion_level, extended, - &included_list, list_last) < 0) { + config_line_t *included_config = NULL; + if (config_get_included_config(config_file, recursion_level, extended, + &included_config, list_last, + opened_lst) < 0) { goto done; } - *next = included_list; + *next = included_config; if (*list_last) next = &(*list_last)->next; diff --git a/src/common/confline.h b/src/common/confline.h index 8256326f2d..feeb9f249d 100644 --- a/src/common/confline.h +++ b/src/common/confline.h @@ -7,6 +7,8 @@ #ifndef TOR_CONFLINE_H #define TOR_CONFLINE_H +#include "container.h" + /** Ordinary configuration line. */ #define CONFIG_LINE_NORMAL 0 /** Appends to previous configuration for the same option, even if we @@ -44,7 +46,8 @@ int config_lines_eq(config_line_t *a, config_line_t *b); int config_count_key(const config_line_t *a, const char *key); int config_get_lines(const char *string, config_line_t **result, int extended); int config_get_lines_include(const char *string, config_line_t **result, - int extended, int *has_include); + int extended, int *has_include, + smartlist_t *opened_lst); void config_free_lines(config_line_t *front); const char *parse_config_line_from_str_verbose(const char *line, char **key_out, char **value_out, diff --git a/src/common/crypto_pwbox.h b/src/common/crypto_pwbox.h index cee8653587..a26b6d2c17 100644 --- a/src/common/crypto_pwbox.h +++ b/src/common/crypto_pwbox.h @@ -1,3 +1,6 @@ +/* Copyright (c) 2014-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #ifndef CRYPTO_PWBOX_H_INCLUDED_ #define CRYPTO_PWBOX_H_INCLUDED_ diff --git a/src/common/include.am b/src/common/include.am index cd5eea3404..2856c40fdc 100644 --- a/src/common/include.am +++ b/src/common/include.am @@ -101,11 +101,6 @@ LIBOR_A_SRC = \ $(threads_impl_source) \ $(readpassphrase_source) -if USE_RUST -else -LIBOR_A_SRC += src/common/compat_rust.c -endif - src/common/src_common_libor_testing_a-log.$(OBJEXT) \ src/common/log.$(OBJEXT): micro-revision.i @@ -156,7 +151,6 @@ COMMONHEADERS = \ src/common/compat.h \ src/common/compat_libevent.h \ src/common/compat_openssl.h \ - src/common/compat_rust.h \ src/common/compat_threads.h \ src/common/compat_time.h \ src/common/compress.h \ diff --git a/src/common/sandbox.c b/src/common/sandbox.c index 931837e767..92fdd60221 100644 --- a/src/common/sandbox.c +++ b/src/common/sandbox.c @@ -62,6 +62,9 @@ #include <time.h> #include <poll.h> +#ifdef HAVE_GNU_LIBC_VERSION_H +#include <gnu/libc-version.h> +#endif #ifdef HAVE_LINUX_NETFILTER_IPV4_H #include <linux/netfilter_ipv4.h> #endif @@ -133,6 +136,9 @@ static int filter_nopar_gen[] = { SCMP_SYS(clone), SCMP_SYS(epoll_create), SCMP_SYS(epoll_wait), +#ifdef __NR_epoll_pwait + SCMP_SYS(epoll_pwait), +#endif #ifdef HAVE_EVENTFD SCMP_SYS(eventfd2), #endif @@ -151,6 +157,7 @@ static int filter_nopar_gen[] = { SCMP_SYS(fstat64), #endif SCMP_SYS(futex), + SCMP_SYS(getdents), SCMP_SYS(getdents64), SCMP_SYS(getegid), #ifdef __NR_getegid32 @@ -396,6 +403,52 @@ sb_mmap2(scmp_filter_ctx ctx, sandbox_cfg_t *filter) } #endif /* defined(__NR_mmap2) */ +#ifdef HAVE_GNU_LIBC_VERSION_H +#ifdef HAVE_GNU_GET_LIBC_VERSION +#define CHECK_LIBC_VERSION +#endif +#endif + +/* Return true if we think we're running with a libc that always uses + * openat on linux. */ +static int +libc_uses_openat_for_everything(void) +{ +#ifdef CHECK_LIBC_VERSION + const char *version = gnu_get_libc_version(); + if (version == NULL) + return 0; + + int major = -1; + int minor = -1; + + tor_sscanf(version, "%d.%d", &major, &minor); + if (major >= 3) + return 1; + else if (major == 2 && minor >= 26) + return 1; + else + return 0; +#else + return 0; +#endif +} + +/** Allow a single file to be opened. If <b>use_openat</b> is true, + * we're using a libc that remaps all the opens into openats. */ +static int +allow_file_open(scmp_filter_ctx ctx, int use_openat, const char *file) +{ + if (use_openat) { + return seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat), + SCMP_CMP_STR(0, SCMP_CMP_EQ, AT_FDCWD), + SCMP_CMP_STR(1, SCMP_CMP_EQ, file)); + } else { + return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), + SCMP_CMP_STR(0, SCMP_CMP_EQ, file)); + } +} + /** * Function responsible for setting up the open syscall for * the seccomp filter sandbox. @@ -406,14 +459,15 @@ sb_open(scmp_filter_ctx ctx, sandbox_cfg_t *filter) int rc; sandbox_cfg_t *elem = NULL; + int use_openat = libc_uses_openat_for_everything(); + // 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(open)) { - rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), - SCMP_CMP_STR(0, SCMP_CMP_EQ, param->value)); + rc = allow_file_open(ctx, use_openat, param->value); if (rc != 0) { log_err(LD_BUG,"(Sandbox) failed to add open syscall, received " "libseccomp error %d", rc); @@ -431,6 +485,15 @@ sb_open(scmp_filter_ctx ctx, sandbox_cfg_t *filter) return rc; } + rc = seccomp_rule_add_1(ctx, SCMP_ACT_ERRNO(EACCES), SCMP_SYS(openat), + SCMP_CMP_MASKED(2, O_CLOEXEC|O_NONBLOCK|O_NOCTTY|O_NOFOLLOW, + O_RDONLY)); + if (rc != 0) { + log_err(LD_BUG,"(Sandbox) failed to add openat syscall, received " + "libseccomp error %d", rc); + return rc; + } + return 0; } @@ -620,7 +683,7 @@ sb_socket(scmp_filter_ctx ctx, sandbox_cfg_t *filter) rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket), SCMP_CMP(0, SCMP_CMP_EQ, PF_NETLINK), - SCMP_CMP(1, SCMP_CMP_EQ, SOCK_RAW), + SCMP_CMP_MASKED(1, SOCK_CLOEXEC, SOCK_RAW), SCMP_CMP(2, SCMP_CMP_EQ, 0)); if (rc) return rc; @@ -1053,6 +1116,19 @@ sb_stat64(scmp_filter_ctx ctx, sandbox_cfg_t *filter) } #endif /* defined(__NR_stat64) */ +static int +sb_kill(scmp_filter_ctx ctx, sandbox_cfg_t *filter) +{ + (void) filter; +#ifdef __NR_kill + /* Allow killing anything with signal 0 -- it isn't really a kill. */ + return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(kill), + SCMP_CMP(1, SCMP_CMP_EQ, 0)); +#else + return 0; +#endif +} + /** * Array of function pointers responsible for filtering different syscalls at * a parameter level. @@ -1089,10 +1165,10 @@ static sandbox_filter_func_t filter_func[] = { sb_setsockopt, sb_getsockopt, sb_socketpair, - #ifdef HAVE_KIST_SUPPORT sb_ioctl, #endif + sb_kill }; const char * @@ -1600,7 +1676,8 @@ add_param_filter(scmp_filter_ctx ctx, sandbox_cfg_t* cfg) // function pointer for (i = 0; i < ARRAY_LENGTH(filter_func); i++) { - if ((filter_func[i])(ctx, cfg)) { + rc = filter_func[i](ctx, cfg); + if (rc) { log_err(LD_BUG,"(Sandbox) failed to add syscall %d, received libseccomp " "error %d", i, rc); return rc; diff --git a/src/common/storagedir.c b/src/common/storagedir.c index 31933f64c2..c471ea911f 100644 --- a/src/common/storagedir.c +++ b/src/common/storagedir.c @@ -187,14 +187,19 @@ storage_dir_get_usage(storage_dir_t *d) return d->usage; } -/** Mmap a specified file within <b>d</b>. */ +/** Mmap a specified file within <b>d</b>. + * + * On failure, return NULL and set errno as for tor_mmap_file(). */ tor_mmap_t * storage_dir_map(storage_dir_t *d, const char *fname) { char *path = NULL; tor_asprintf(&path, "%s/%s", d->directory, fname); tor_mmap_t *result = tor_mmap_file(path); + int errval = errno; tor_free(path); + if (result == NULL) + errno = errval; return result; } @@ -364,6 +369,10 @@ storage_dir_save_labeled_to_file(storage_dir_t *d, * the data's size into *<b>sz_out</b>. On success, also return a tor_mmap_t * object whose contents should not be used -- it needs to be kept around, * though, for as long as <b>data_out</b> is going to be valid. + * + * On failure, set errno as for tor_mmap_file() if the file was missing or + * empty, and set errno to EINVAL if the file was not in the labeled + * format expected. */ tor_mmap_t * storage_dir_map_labeled(storage_dir_t *dir, @@ -373,13 +382,20 @@ storage_dir_map_labeled(storage_dir_t *dir, size_t *sz_out) { tor_mmap_t *m = storage_dir_map(dir, fname); - if (! m) + int errval; + if (! m) { + errval = errno; goto err; + } const char *nulp = memchr(m->data, '\0', m->size); - if (! nulp) + if (! nulp) { + errval = EINVAL; goto err; - if (labels_out && config_get_lines(m->data, labels_out, 0) < 0) + } + if (labels_out && config_get_lines(m->data, labels_out, 0) < 0) { + errval = EINVAL; goto err; + } size_t offset = nulp - m->data + 1; tor_assert(offset <= m->size); *data_out = (const uint8_t *)(m->data + offset); @@ -388,6 +404,7 @@ storage_dir_map_labeled(storage_dir_t *dir, return m; err: tor_munmap_file(m); + errno = errval; return NULL; } diff --git a/src/config/geoip b/src/config/geoip index c2058395f3..06199f6877 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -1,4 +1,4 @@ -# Last updated based on October 4 2017 Maxmind GeoLite2 Country +# Last updated based on November 6 2017 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -266,7 +266,8 @@ 84574208,84576255,FR 84576256,84582399,GB 84582400,84590591,DE -84590592,84592639,NL +84590592,84591103,NL +84591104,84592639,CN 84592640,84594687,ES 84594688,84598783,DE 84598784,84600831,IQ @@ -375,9 +376,7 @@ 86442240,86442243,GB 86442244,86442291,FR 86442292,86442295,GB -86442296,86442435,FR -86442436,86442439,ES -86442440,86442495,FR +86442296,86442495,FR 86442496,86442499,ES 86442500,86442507,FR 86442508,86442511,ES @@ -400,7 +399,8 @@ 86443312,86443319,ES 86443320,86443451,FR 86443452,86443455,ES -86443456,86443535,FR +86443456,86443519,FR +86443520,86443535,PL 86443536,86443539,ES 86443540,86443583,FR 86443584,86443647,GB @@ -431,7 +431,9 @@ 86444784,86444791,GB 86444792,86444839,FR 86444840,86444843,ES -86444844,86445311,FR +86444844,86444983,FR +86444984,86444991,ES +86444992,86445311,FR 86445312,86445319,NL 86445320,86445375,FR 86445376,86445407,ES @@ -463,8 +465,8 @@ 86446768,86446771,GB 86446772,86446931,FR 86446932,86446935,CZ -86446936,86447091,FR -86447092,86447103,ES +86446936,86447095,FR +86447096,86447103,ES 86447104,86447279,FR 86447280,86447280,DE 86447281,86447287,FR @@ -602,7 +604,9 @@ 86456656,86456671,IE 86456672,86456943,FR 86456944,86456947,GR -86456948,86457059,FR +86456948,86456999,FR +86457000,86457007,ES +86457008,86457059,FR 86457060,86457060,DE 86457061,86457087,FR 86457088,86457091,DE @@ -628,7 +632,9 @@ 86458184,86458187,DE 86458188,86458295,FR 86458296,86458299,CZ -86458300,86467207,FR +86458300,86466639,FR +86466640,86466647,ES +86466648,86467207,FR 86467208,86467211,IE 86467212,86467279,FR 86467280,86467283,DE @@ -734,7 +740,8 @@ 86497280,86499327,NL 86499328,86503423,FR 86503424,86505471,DE -86505472,86507519,GB +86505472,86507263,GB +86507264,86507519,PK 86507520,86573055,ES 86573056,86638591,SA 86638592,86671359,RU @@ -883,7 +890,9 @@ 87766528,87766783,UA 87766784,87768063,RU 87768064,87777279,ES -87777280,87818239,CZ +87777280,87785471,CZ +87785472,87793663,RU +87793664,87818239,CZ 87818240,87883775,PL 87883776,87885823,IT 87885824,87889919,RU @@ -929,8 +938,14 @@ 87959528,87959535,US 87959536,87959547,BE 87959548,87959551,NL -87959552,87960063,DE -87960064,87960575,GB +87959552,87959817,DE +87959818,87959818,NL +87959819,87959835,DE +87959836,87959836,BE +87959837,87960063,DE +87960064,87960321,GB +87960322,87960322,NL +87960323,87960575,GB 87960576,87961586,US 87961587,87961587,CA 87961588,87963651,US @@ -973,7 +988,7 @@ 87963796,87963799,NI 87963800,87963803,NU 87963804,87963807,NF -87963808,87963811,KP +87963808,87963811,US 87963812,87963815,PW 87963816,87963819,PA 87963820,87963823,PG @@ -1152,7 +1167,7 @@ 87964980,87964983,NP 87964984,87964987,NE 87964988,87964991,NG -87964992,87964995,KP +87964992,87964995,CZ 87964996,87964999,OM 87965000,87965003,PK 87965004,87965007,PW @@ -1353,10 +1368,9 @@ 88016896,88018943,IR 88018944,88020991,GB 88020992,88023039,FR -88023040,88031231,MD +88023040,88031231,TR 88031232,88047615,KZ -88047616,88048639,US -88048640,88049663,LU +88047616,88049663,RU 88049664,88051711,IT 88051712,88053759,GB 88053760,88055807,RU @@ -1412,8 +1426,7 @@ 90516480,90516735,DE 90516736,90516991,RO 90516992,90517503,FR -90517504,90518527,GB -90518528,90528767,RU +90517504,90528767,RU 90528768,90533887,NL 90533888,90537983,EE 90537984,90540031,RU @@ -1699,17 +1712,19 @@ 92742816,92742819,ES 92742820,92743343,FR 92743344,92743351,GB -92743352,92743647,FR -92743648,92743663,ES -92743664,92743679,FR +92743352,92743679,FR 92743680,92743935,ES -92743936,92744123,FR +92743936,92744103,FR +92744104,92744111,ES +92744112,92744123,FR 92744124,92744127,GB 92744128,92744319,FR 92744320,92744323,GB 92744324,92744551,FR 92744552,92744555,ES -92744556,92745071,FR +92744556,92744951,FR +92744952,92744959,ES +92744960,92745071,FR 92745072,92745087,ES 92745088,92745207,FR 92745208,92745215,ES @@ -1723,7 +1738,9 @@ 92746560,92746623,IT 92746624,92747043,FR 92747044,92747047,CH -92747048,92747547,FR +92747048,92747231,FR +92747232,92747247,PL +92747248,92747547,FR 92747548,92747567,ES 92747568,92747711,FR 92747712,92747775,GB @@ -1748,7 +1765,9 @@ 92749068,92749071,GB 92749072,92749135,FR 92749136,92749151,FI -92749152,92749747,FR +92749152,92749471,FR +92749472,92749487,PL +92749488,92749747,FR 92749748,92749751,ES 92749752,92750639,FR 92750640,92750643,ES @@ -2299,7 +2318,9 @@ 95569920,95571967,SE 95571968,95574015,RU 95574016,95576063,IT -95576064,95580159,GB +95576064,95578624,GB +95578625,95578879,US +95578880,95580159,GB 95580160,95582207,NL 95582208,95584255,IT 95584256,95600639,GE @@ -2331,9 +2352,19 @@ 96174080,96206847,HU 96206848,96209407,RU 96209408,96209919,HR -96209920,96223231,RU +96209920,96210943,RU +96210944,96214015,EE +96214016,96222463,RU +96222464,96222719,UA +96222720,96223231,RU 96223232,96224255,KZ -96224256,96245759,RU +96224256,96228863,RU +96228864,96229119,IE +96229120,96235519,RU +96235520,96236543,GB +96236544,96241663,RU +96241664,96241919,UA +96241920,96245759,RU 96245760,96246783,KZ 96246784,96247807,RU 96247808,96248831,NL @@ -2441,11 +2472,16 @@ 96755816,96755819,PT 96755820,96755967,FR 96755968,96755999,PT -96756000,96756427,FR +96756000,96756071,FR +96756072,96756079,ES +96756080,96756095,GB +96756096,96756427,FR 96756428,96756431,ES 96756432,96756543,FR 96756544,96756551,ES -96756552,96757403,FR +96756552,96757375,FR +96757376,96757379,DE +96757380,96757403,FR 96757404,96757407,NL 96757408,96757639,FR 96757640,96757643,CH @@ -2530,9 +2566,7 @@ 96772408,96772408,GB 96772409,96773119,FR 96773120,96773375,ES -96773376,96773743,FR -96773744,96773759,ES -96773760,96774631,FR +96773376,96774631,FR 96774632,96774635,BE 96774636,96774719,FR 96774720,96774751,ES @@ -2610,7 +2644,9 @@ 96783772,96783775,DE 96783776,96783887,FR 96783888,96783903,DE -96783904,96784495,FR +96783904,96784031,FR +96784032,96784039,ES +96784040,96784495,FR 96784496,96784511,FI 96784512,96784719,FR 96784720,96784723,NL @@ -2630,7 +2666,9 @@ 96785604,96785607,PT 96785608,96786431,FR 96786432,96786495,GB -96786496,96787999,FR +96786496,96787743,FR +96787744,96787751,ES +96787752,96787999,FR 96788000,96788031,LT 96788032,96788143,FR 96788144,96788159,ES @@ -2838,8 +2876,8 @@ 100532480,100532735,US 100532736,100547839,RO 100547840,100548095,DE -100548096,100548351,US -100548352,100548872,RO +100548096,100548607,US +100548608,100548872,RO 100548873,100548873,TR 100548874,100550143,RO 100550144,100550399,NL @@ -3121,7 +3159,9 @@ 225097728,225098239,AU 225098240,225098751,US 225098752,225099263,JP -225099264,225443839,US +225099264,225099775,US +225099776,225100287,SG +225100288,225443839,US 225443840,225705983,JP 225705984,226230271,US 226230272,226361343,KR @@ -3220,8 +3260,7 @@ 244318208,245366783,CN 245366784,247463935,VN 247463936,247464959,IN -247464960,247465983,CN -247465984,247467007,HK +247464960,247467007,HK 247467008,247469055,IN 247469056,247470079,HK 247470080,247472127,IN @@ -3260,9 +3299,7 @@ 265003520,265003547,HU 265003548,265003548,FR 265003549,265003775,HU -265003776,265005311,US -265005312,265005567,CH -265005568,265025791,US +265003776,265025791,US 265025792,265026047,GB 265026048,265533695,US 265533696,265533951,PH @@ -3297,7 +3334,11 @@ 288212992,288215039,CA 288215040,288223231,US 288223232,288227327,CA -288227328,289406975,US +288227328,288293887,US +288293888,288294143,BR +288294144,288358399,US +288358400,288366591,BR +288366592,289406975,US 289406976,289554431,IE 289554432,289611775,US 289611776,289615871,GB @@ -3457,7 +3498,9 @@ 301814784,301815039,HK 301815040,301815295,US 301815296,301815551,HK -301815552,301987863,US +301815552,301987839,US +301987840,301987847,GB +301987848,301987863,US 301987864,301988111,GB 301988112,301988119,US 301988120,301988151,GB @@ -3511,7 +3554,9 @@ 347947008,347963391,HK 347963392,347979775,US 347979776,347996159,JP -347996160,353769239,US +347996160,348012543,US +348012544,348020735,SG +348020736,353769239,US 353769240,353769240,FR 353769241,355993887,US 355993888,355993895,IT @@ -3935,9 +3980,7 @@ 391344128,391348223,NL 391348224,391368703,US 391368704,391372799,CA -391372800,391376895,US -391376896,391380991,CA -391380992,391865855,US +391372800,391865855,US 391865856,391866879,HK 391866880,391867391,US 391867392,391867647,VN @@ -4285,25 +4328,31 @@ 395198464,395198719,US 395214848,395215103,US 395231232,395231487,US -395247616,395313407,US +395247616,395345919,US 395345920,395346175,CA -395378688,395576319,US -395608064,395608319,CA +395362304,395362559,US +395378688,395493375,US +395493376,395493631,CA +395493632,395576319,US +395591680,395591935,US +395608064,395640831,CA +395657216,395657471,US 395673600,395673855,CA +395689984,395690239,US 395706368,395706623,CA -395739136,395739391,US -395771904,395837439,CA -395837440,395837695,AU -395837696,395903231,US +395722752,395723007,US +395739136,395771903,US +395771904,395788287,CA +395788288,395788543,US +395788544,395837439,CA +395837440,395903231,US 395935744,395935999,CA 395968512,396034047,CA 396034048,396034303,US 396066816,396067071,CA 396099584,396230911,US 396263424,396263679,CA -396296192,396558335,US -396558336,396558591,AU -396558592,396754943,US +396296192,396754943,US 396754944,396755199,CA 396787712,396787967,US 396820480,397082879,US @@ -4532,12 +4581,9 @@ 400883920,400883927,GB 400883928,400884255,CA 400884256,400884287,US -400884288,400884319,CA -400884320,400884335,AE +400884288,400884335,CA 400884336,400884351,US -400884352,400884415,CA -400884416,400884431,US -400884432,400884479,CA +400884352,400884479,CA 400884480,400884735,TR 400884736,400884991,GB 400884992,400885007,US @@ -4545,263 +4591,189 @@ 400885096,400885103,US 400885104,400885111,GB 400885112,400885119,US -400885120,400885199,CA -400885200,400885207,US -400885208,400885279,CA +400885120,400885279,CA 400885280,400885311,US 400885312,400885407,CA 400885408,400885439,US -400885440,400885887,CA -400885888,400885903,US -400885904,400885951,CA -400885952,400885959,US -400885960,400885999,CA -400886000,400886015,US -400886016,400886031,CA +400885440,400886031,CA 400886032,400886047,US -400886048,400886095,CA -400886096,400886111,US -400886112,400886303,CA -400886304,400886319,US -400886320,400886335,AE -400886336,400886351,CA -400886352,400886399,US -400886400,400886407,CA +400886048,400886351,CA +400886352,400886383,US +400886384,400886407,CA 400886408,400886415,US -400886416,400886463,CA -400886464,400886527,US +400886416,400886495,CA +400886496,400886527,US 400886528,400886719,CA -400886720,400886783,US -400886784,400887039,CA +400886720,400886767,US +400886768,400887039,CA 400887040,400887135,US 400887136,400887151,CA 400887152,400887167,US -400887168,400887199,CA -400887200,400887295,US -400887296,400887311,CA -400887312,400887327,US -400887328,400887343,CA +400887168,400887231,CA +400887232,400887263,US +400887264,400887343,CA 400887344,400887351,SE -400887352,400887415,CA -400887416,400887423,US -400887424,400887503,CA +400887352,400887503,CA 400887504,400887535,US 400887536,400887551,CA 400887552,400887807,GB -400887808,400887855,CA -400887856,400887863,US -400887864,400887935,CA -400887936,400887951,US -400887952,400887999,CA -400888000,400888007,US -400888008,400888031,CA +400887808,400888031,CA 400888032,400888039,US 400888040,400888063,CA 400888064,400888319,US 400888320,400888575,CA 400888576,400888831,GB -400888832,400889343,CA -400889344,400889359,US -400889360,400889407,CA -400889408,400889503,US +400888832,400889439,CA +400889440,400889503,US 400889504,400889519,CA -400889520,400889599,US -400889600,400889647,CA +400889520,400889567,US +400889568,400889647,CA 400889648,400889663,US -400889664,400889711,CA -400889712,400889759,US -400889760,400889791,CA -400889792,400889807,US -400889808,400889855,CA -400889856,400890143,US -400890144,400890159,CA +400889664,400889855,CA +400889856,400890111,US +400890112,400890159,CA 400890160,400890167,US 400890168,400890175,CA -400890176,400890239,US -400890240,400890263,CA +400890176,400890207,US +400890208,400890263,CA 400890264,400890271,US 400890272,400890335,CA 400890336,400890367,US -400890368,400890447,CA -400890448,400890463,US -400890464,400890527,CA +400890368,400890527,CA 400890528,400890543,US -400890544,400890559,CA -400890560,400890631,US -400890632,400890639,CA -400890640,400890655,US -400890656,400890783,CA -400890784,400890831,US -400890832,400890847,CA -400890848,400890863,US -400890864,400891263,CA -400891264,400891375,US -400891376,400891391,CA +400890544,400890591,CA +400890592,400890623,US +400890624,400890815,CA +400890816,400890831,US +400890832,400891263,CA +400891264,400891343,US +400891344,400891391,CA 400891392,400891407,US 400891408,400891423,CA -400891424,400891487,US -400891488,400891535,CA -400891536,400891647,US -400891648,400891775,CA -400891776,400891839,US -400891840,400891887,CA -400891888,400892159,US -400892160,400892247,CA -400892248,400892251,US -400892252,400892479,CA +400891424,400891455,US +400891456,400891471,CA +400891472,400891487,US +400891488,400891615,CA +400891616,400891631,US +400891632,400891791,CA +400891792,400891807,US +400891808,400891903,CA +400891904,400892159,US +400892160,400892479,CA 400892480,400892543,US 400892544,400892591,CA 400892592,400892607,US -400892608,400892639,CA -400892640,400892655,US -400892656,400892671,CA -400892672,400892799,US -400892800,400892863,CA -400892864,400892927,US -400892928,400893055,CA +400892608,400892671,CA +400892672,400892767,US +400892768,400893055,CA 400893056,400893087,US 400893088,400893103,CA -400893104,400893311,US +400893104,400893151,US +400893152,400893183,CA +400893184,400893311,US 400893312,400893695,CA 400893696,400893983,US 400893984,400893999,CA -400894000,400894335,US +400894000,400894047,US +400894048,400894079,CA +400894080,400894335,US 400894336,400894463,CA -400894464,400894767,US -400894768,400894783,CA -400894784,400894847,US -400894848,400894879,CA -400894880,400894895,US -400894896,400894911,CA -400894912,400895295,US +400894464,400894719,US +400894720,400895231,CA +400895232,400895295,US 400895296,400895359,CA 400895360,400895407,US -400895408,400895455,CA -400895456,400895551,US +400895408,400895487,CA +400895488,400895551,US 400895552,400895615,GB 400895616,400895663,CA 400895664,400895679,US -400895680,400895711,CA -400895712,400896511,US -400896512,400896879,CA -400896880,400896887,US -400896888,400897023,CA +400895680,400895743,CA +400895744,400896511,US +400896512,400897023,CA 400897024,400897279,US 400897280,400897423,CA 400897424,400897439,US -400897440,400897471,CA -400897472,400897791,US +400897440,400897503,CA +400897504,400897519,US +400897520,400897535,CA +400897536,400897791,US 400897792,400897887,CA 400897888,400897903,US -400897904,400897919,CA -400897920,400898047,US -400898048,400898063,CA +400897904,400897935,CA +400897936,400897967,US +400897968,400897983,CA +400897984,400898015,US +400898016,400898063,CA 400898064,400898079,US 400898080,400898175,CA 400898176,400898303,US -400898304,400898447,CA -400898448,400898495,US -400898496,400898687,CA -400898688,400898799,US -400898800,400898807,CA -400898808,400898815,US -400898816,400898911,CA -400898912,400898927,US -400898928,400898943,CA +400898304,400898703,CA +400898704,400898735,US +400898736,400898943,CA 400898944,400899039,US -400899040,400899047,CA -400899048,400899055,GB -400899056,400899327,US -400899328,400899591,CA -400899592,400899599,US -400899600,400899623,CA -400899624,400899631,US -400899632,400899711,CA +400899040,400899071,CA +400899072,400899327,US +400899328,400899711,CA 400899712,400899743,US 400899744,400899759,CA 400899760,400899807,US 400899808,400899815,CA -400899816,400899839,US -400899840,400899847,CA +400899816,400899823,US +400899824,400899847,CA 400899848,400899855,US 400899856,400899967,CA -400899968,400900255,US -400900256,400900263,CA -400900264,400900319,US -400900320,400900391,CA -400900392,400900399,GB -400900400,400900415,CA -400900416,400900479,US -400900480,400900487,CA -400900488,400900495,GB -400900496,400900527,CA -400900528,400900575,US +400899968,400899999,US +400900000,400900031,CA +400900032,400900255,US +400900256,400900287,CA +400900288,400900319,US +400900320,400900559,CA +400900560,400900575,US 400900576,400900607,CA 400900608,400901119,US -400901120,400901487,CA -400901488,400901495,GB -400901496,400901567,CA -400901568,400901631,US +400901120,400901567,CA +400901568,400901583,US +400901584,400901615,CA +400901616,400901631,US 400901632,400901759,CA -400901760,400901887,US +400901760,400901807,US +400901808,400901823,CA +400901824,400901887,US 400901888,400902143,CA 400902144,400902399,US 400902400,400902431,CA -400902432,400902623,US +400902432,400902479,US +400902480,400902527,CA +400902528,400902623,US 400902624,400902639,CA 400902640,400902655,US -400902656,400902663,CA -400902664,400902671,GB -400902672,400902719,CA +400902656,400902719,CA 400902720,400902783,US 400902784,400902911,CA -400902912,400902975,US -400902976,400903039,CA -400903040,400903167,US -400903168,400903231,CA -400903232,400903247,US -400903248,400903271,CA -400903272,400903279,US -400903280,400903295,CA -400903296,400903679,US -400903680,400903935,CA +400902912,400902943,US +400902944,400903935,CA 400903936,400904479,US 400904480,400904487,CA -400904488,400904591,US -400904592,400904599,CA -400904600,400904607,GB -400904608,400904687,US -400904688,400904703,CA -400904704,400905215,US -400905216,400905271,CA +400904488,400904575,US +400904576,400905271,CA 400905272,400905279,US -400905280,400905335,CA -400905336,400905343,GB -400905344,400905359,CA -400905360,400905367,US -400905368,400905399,CA -400905400,400905407,US -400905408,400905471,CA -400905472,400905727,US -400905728,400905983,CA -400905984,400906143,US -400906144,400906175,CA +400905280,400906175,CA 400906176,400906207,US -400906208,400906215,CA -400906216,400906223,GB -400906224,400906231,CA -400906232,400906239,GB -400906240,400906255,CA +400906208,400906255,CA 400906256,400906263,US -400906264,400906367,CA -400906368,400906463,US -400906464,400906471,CA -400906472,400906479,GB +400906264,400906399,CA +400906400,400906463,US +400906464,400906479,CA 400906480,400906815,US 400906816,400906831,CA 400906832,400906879,US -400906880,400906975,CA -400906976,400911103,US +400906880,400907263,CA +400907264,400907519,US +400907520,400907775,CA +400907776,400908031,US +400908032,400908287,CA +400908288,400911103,US 400911104,400911359,PA 400911360,400911583,AU 400911584,400911615,US @@ -4882,82 +4854,61 @@ 401370624,401370879,DE 401370880,401372671,US 401372672,401372927,SG -401372928,401375495,US -401375496,401375511,CA +401372928,401375487,US +401375488,401375511,CA 401375512,401375519,US 401375520,401375535,CA 401375536,401375543,US 401375544,401375743,CA 401375744,401376095,US 401376096,401376111,CA -401376112,401376191,US -401376192,401376223,CA -401376224,401376255,US -401376256,401376287,CA -401376288,401376319,US -401376320,401376327,CA -401376328,401376335,GB -401376336,401376351,CA -401376352,401376383,US -401376384,401376447,CA -401376448,401376511,US -401376512,401377279,CA -401377280,401377535,US -401377536,401377791,CA +401376112,401376143,US +401376144,401376447,CA +401376448,401376479,US +401376480,401376495,CA +401376496,401376511,US +401376512,401377791,CA 401377792,401378303,US 401378304,401378559,EG 401378560,401378687,US 401378688,401378815,CA 401378816,401379071,US -401379072,401380351,CA -401380352,401380495,US -401380496,401380503,GB -401380504,401380527,CA +401379072,401380431,CA +401380432,401380447,US +401380448,401380479,CA +401380480,401380495,US +401380496,401380527,CA 401380528,401380543,US 401380544,401380607,CA -401380608,401381247,US +401380608,401380863,US +401380864,401381119,CA +401381120,401381247,US 401381248,401381375,CA -401381376,401381887,US -401381888,401381983,CA -401381984,401381991,US -401381992,401382015,CA -401382016,401382023,GB -401382024,401382063,CA -401382064,401382087,US -401382088,401382231,CA -401382232,401382239,US -401382240,401382287,CA -401382288,401382295,US -401382296,401382415,CA -401382416,401382423,US -401382424,401382479,CA +401381376,401381407,US +401381408,401381423,CA +401381424,401381887,US +401381888,401382479,CA 401382480,401382527,US -401382528,401382543,CA -401382544,401382575,US -401382576,401382591,CA -401382592,401382655,US -401382656,401383627,CA -401383628,401383631,US -401383632,401383643,CA -401383644,401383647,US -401383648,401384423,CA -401384424,401384431,US -401384432,401384799,CA +401382528,401382559,CA +401382560,401382575,US +401382576,401384799,CA 401384800,401384831,US 401384832,401384959,CA 401384960,401385215,US -401385216,401385219,CA -401385220,401385223,US -401385224,401385295,CA -401385296,401385375,US +401385216,401385343,CA +401385344,401385375,US 401385376,401385391,CA -401385392,401385983,US -401385984,401386271,CA -401386272,401386399,US +401385392,401385407,US +401385408,401385423,CA +401385424,401385439,US +401385440,401385471,CA +401385472,401385983,US +401385984,401386303,CA +401386304,401386399,US 401386400,401386415,CA 401386416,401386463,US -401386464,401386471,CA -401386472,401386495,US +401386464,401386479,CA +401386480,401386495,US 401386496,401387007,SE 401387008,401387263,US 401387264,401387519,CA @@ -4970,87 +4921,72 @@ 401388616,401388631,US 401388632,401388671,CA 401388672,401388687,US -401388688,401389055,CA -401389056,401390079,US +401388688,401389567,CA +401389568,401390079,US 401390080,401390591,CA 401390592,401390847,US 401390848,401393151,CA -401393152,401393663,US -401393664,401393919,CA -401393920,401394175,US -401394176,401395455,CA +401393152,401393407,US +401393408,401395455,CA 401395456,401395711,US -401395712,401395727,CA -401395728,401395743,US -401395744,401396239,CA -401396240,401396255,US -401396256,401396351,CA +401395712,401396351,CA 401396352,401396383,US -401396384,401396391,CA -401396392,401396399,GB -401396400,401396447,US +401396384,401396415,CA +401396416,401396447,US 401396448,401397247,CA 401397248,401397311,US 401397312,401397327,CA -401397328,401397375,US -401397376,401397407,CA -401397408,401397439,US -401397440,401397487,CA -401397488,401397503,US -401397504,401398271,CA -401398272,401398527,US -401398528,401398783,CA -401398784,401399039,US -401399040,401399063,CA -401399064,401399199,US +401397328,401397359,US +401397360,401399103,CA +401399104,401399135,US +401399136,401399167,CA +401399168,401399199,US 401399200,401399215,CA 401399216,401399263,US 401399264,401399279,CA -401399280,401399599,US -401399600,401399607,CA -401399608,401399647,US +401399280,401399295,US +401399296,401399583,CA +401399584,401399599,US +401399600,401399615,CA +401399616,401399647,US 401399648,401399663,CA 401399664,401399679,US 401399680,401399711,CA -401399712,401399807,US -401399808,401400063,CA -401400064,401400575,US -401400576,401400639,CA -401400640,401400735,US +401399712,401399743,US +401399744,401400063,CA +401400064,401400319,US +401400320,401400655,CA +401400656,401400671,US +401400672,401400703,CA +401400704,401400735,US 401400736,401400751,CA -401400752,401400799,US -401400800,401400815,CA +401400752,401400783,US +401400784,401400815,CA 401400816,401400863,US 401400864,401400871,CA 401400872,401400879,NO -401400880,401401055,US -401401056,401401087,CA -401401088,401401103,US -401401104,401401111,CA -401401112,401401215,US +401400880,401400895,US +401400896,401401039,CA +401401040,401401055,US +401401056,401401119,CA +401401120,401401135,US +401401136,401401151,CA +401401152,401401215,US 401401216,401401247,CA 401401248,401401279,US -401401280,401401311,CA -401401312,401401343,US -401401344,401401359,CA -401401360,401401439,US -401401440,401401455,CA -401401456,401401463,US -401401464,401401471,CA +401401280,401401359,CA +401401360,401401375,US +401401376,401401471,CA 401401472,401401503,US -401401504,401401511,CA -401401512,401401567,US -401401568,401401583,CA -401401584,401401599,US -401401600,401401663,CA +401401504,401401535,CA +401401536,401401567,US +401401568,401401663,CA 401401664,401401679,US -401401680,401401687,CA -401401688,401401855,US +401401680,401401727,CA +401401728,401401855,US 401401856,401401935,CA 401401936,401401983,US -401401984,401402015,CA -401402016,401402063,US -401402064,401402079,CA +401401984,401402079,CA 401402080,401402095,US 401402096,401402111,CA 401402112,401402207,US @@ -5058,24 +4994,18 @@ 401402224,401402239,US 401402240,401402287,CA 401402288,401402303,US -401402304,401402335,CA -401402336,401402343,US -401402344,401402623,CA +401402304,401402623,CA 401402624,401402879,US -401402880,401403391,CA -401403392,401403423,US -401403424,401403455,CA -401403456,401403503,US -401403504,401403519,CA -401403520,401403615,US -401403616,401403647,CA -401403648,401403679,US -401403680,401403695,CA +401402880,401403487,CA +401403488,401403503,US +401403504,401403583,CA +401403584,401403615,US +401403616,401403695,CA 401403696,401403743,US 401403744,401403807,CA 401403808,401403839,US -401403840,401403871,CA -401403872,401419775,US +401403840,401403903,CA +401403904,401419775,US 401419776,401420031,CA 401420032,401420287,US 401420288,401420543,CA @@ -5156,200 +5086,165 @@ 402247680,402249215,US 402249216,402249727,GB 402249728,402259967,US -402259968,402260023,CA -402260024,402260031,US +402259968,402260031,CA 402260032,402260039,FI -402260040,402260159,CA -402260160,402260167,US -402260168,402260199,CA -402260200,402260231,US -402260232,402260271,CA +402260040,402260271,CA 402260272,402260279,GB -402260280,402260295,CA -402260296,402260311,US -402260312,402260319,CA -402260320,402260335,US -402260336,402260367,CA -402260368,402260383,US -402260384,402260407,CA -402260408,402260415,US -402260416,402260431,CA -402260432,402260439,US -402260440,402260447,CA -402260448,402260455,US -402260456,402260479,CA +402260280,402260479,CA 402260480,402260511,US -402260512,402260527,CA -402260528,402260543,US -402260544,402260575,CA -402260576,402260655,US -402260656,402260671,CA -402260672,402260735,US -402260736,402260767,CA -402260768,402260895,US +402260512,402260575,CA +402260576,402260607,US +402260608,402260639,CA +402260640,402260655,US +402260656,402260767,CA +402260768,402260783,US +402260784,402260799,CA +402260800,402260815,US +402260816,402260863,CA +402260864,402260895,US 402260896,402260911,CA 402260912,402260959,US -402260960,402260967,CA -402260968,402260975,GB +402260960,402260975,CA 402260976,402260991,US -402260992,402260999,CA -402261000,402261007,GB +402260992,402261007,CA 402261008,402261087,US 402261088,402261119,CA -402261120,402261247,US -402261248,402262015,CA +402261120,402261151,US +402261152,402261183,CA +402261184,402261215,US +402261216,402262015,CA 402262016,402262271,US -402262272,402262351,CA -402262352,402262359,US -402262360,402262455,CA +402262272,402262455,CA 402262456,402262463,FI -402262464,402262519,CA -402262520,402262527,US -402262528,402262591,CA -402262592,402262599,US -402262600,402262663,CA -402262664,402262671,US -402262672,402262695,CA -402262696,402262703,US -402262704,402262751,CA -402262752,402262759,US -402262760,402262847,CA -402262848,402262855,US -402262856,402262927,CA -402262928,402262935,US -402262936,402262943,CA -402262944,402262951,US -402262952,402262975,CA -402262976,402262983,US -402262984,402263295,CA -402263296,402263311,US -402263312,402263335,CA +402262464,402263335,CA 402263336,402263343,US -402263344,402263359,CA -402263360,402263551,US -402263552,402263807,CA +402263344,402263423,CA +402263424,402263455,US +402263456,402263471,CA +402263472,402263487,US +402263488,402263807,CA 402263808,402264063,US 402264064,402264079,CA 402264080,402264095,US 402264096,402264111,CA -402264112,402264319,US -402264320,402264383,CA -402264384,402264575,US -402264576,402265471,CA -402265472,402265631,US -402265632,402265663,CA +402264112,402264127,US +402264128,402264191,CA +402264192,402264319,US +402264320,402264447,CA +402264448,402264559,US +402264560,402265471,CA +402265472,402265535,US +402265536,402265551,CA +402265552,402265583,US +402265584,402265663,CA 402265664,402265690,US 402265691,402265691,BD -402265692,402265823,US -402265824,402265879,CA -402265880,402266143,US +402265692,402265759,US +402265760,402265879,CA +402265880,402265887,US +402265888,402265919,CA +402265920,402265951,US +402265952,402265967,CA +402265968,402266143,US 402266144,402266175,CA -402266176,402266207,US -402266208,402266215,GB -402266216,402266287,CA +402266176,402266191,US +402266192,402266287,CA 402266288,402266303,US -402266304,402266311,CA -402266312,402266319,US -402266320,402266335,CA -402266336,402266343,US -402266344,402266351,CA -402266352,402266359,GB -402266360,402266367,CA -402266368,402266703,US +402266304,402266367,CA +402266368,402266655,US +402266656,402266671,CA +402266672,402266703,US 402266704,402266727,CA 402266728,402266735,NO -402266736,402266847,US -402266848,402267391,CA +402266736,402266751,US +402266752,402267391,CA 402267392,402267423,US 402267424,402267439,CA -402267440,402267903,US -402267904,402269199,CA +402267440,402267455,US +402267456,402267471,CA +402267472,402267487,US +402267488,402267519,CA +402267520,402267647,US +402267648,402269199,CA 402269200,402269207,US -402269208,402269215,CA -402269216,402269223,GB -402269224,402269263,CA -402269264,402269455,US -402269456,402269471,CA -402269472,402269503,US -402269504,402269519,CA -402269520,402269535,US -402269536,402269551,CA -402269552,402269567,US -402269568,402269583,CA -402269584,402269591,GB -402269592,402269599,CA -402269600,402269647,US -402269648,402269663,CA -402269664,402269695,US -402269696,402269983,CA +402269208,402269263,CA +402269264,402269279,US +402269280,402269311,CA +402269312,402269343,US +402269344,402269375,CA +402269376,402269455,US +402269456,402269631,CA +402269632,402269647,US +402269648,402269983,CA 402269984,402270031,US -402270032,402270047,CA -402270048,402270207,US -402270208,402270223,CA -402270224,402270239,US -402270240,402270335,CA +402270032,402270079,CA +402270080,402270207,US +402270208,402270335,CA 402270336,402270463,US 402270464,402270719,CA -402270720,402270847,US -402270848,402270879,CA -402270880,402270943,US -402270944,402270975,CA +402270720,402270751,US +402270752,402270879,CA +402270880,402270895,US +402270896,402270911,CA +402270912,402270927,US +402270928,402270975,CA 402270976,402271103,US 402271104,402271119,CA 402271120,402271135,US 402271136,402271167,CA 402271168,402271199,US 402271200,402271231,CA -402271232,402271423,US -402271424,402271439,CA +402271232,402271391,US +402271392,402271439,CA 402271440,402271455,US 402271456,402271487,CA -402271488,402271615,US +402271488,402271519,US +402271520,402271551,CA +402271552,402271615,US 402271616,402271631,CA -402271632,402271735,US -402271736,402271999,CA +402271632,402271647,US +402271648,402271679,CA +402271680,402271727,US +402271728,402271999,CA 402272000,402272127,US 402272128,402272255,CA 402272256,402272639,US -402272640,402272663,CA -402272664,402272671,US -402272672,402272703,CA +402272640,402272703,CA 402272704,402272895,US 402272896,402273279,CA -402273280,402273407,US -402273408,402273423,CA -402273424,402273439,US -402273440,402273471,CA +402273280,402273311,US +402273312,402273375,CA +402273376,402273391,US +402273392,402273471,CA 402273472,402273503,US 402273504,402273519,CA 402273520,402273535,US 402273536,402273599,CA -402273600,402273919,US -402273920,402273927,CA -402273928,402273935,GB +402273600,402273631,US +402273632,402273663,CA +402273664,402273791,US +402273792,402273935,CA 402273936,402273951,US 402273952,402273983,CA 402273984,402273999,US 402274000,402274015,CA -402274016,402274175,US -402274176,402274239,CA -402274240,402274287,US -402274288,402274295,CA -402274296,402274463,US +402274016,402274047,US +402274048,402274271,CA +402274272,402274287,US +402274288,402274303,CA +402274304,402274463,US 402274464,402274479,CA -402274480,402274559,US -402274560,402275351,CA -402275352,402275359,US -402275360,402275391,CA -402275392,402275839,US +402274480,402274543,US +402274544,402275423,CA +402275424,402275839,US 402275840,402276095,CA 402276096,402276223,US -402276224,402276351,CA -402276352,402276607,US -402276608,402277375,CA +402276224,402277375,CA 402277376,402277631,US 402277632,402278015,CA -402278016,402278127,US +402278016,402278047,US +402278048,402278079,CA +402278080,402278127,US 402278128,402278399,CA 402278400,402278655,US 402278656,402280063,CA @@ -5357,80 +5252,66 @@ 402280192,402280207,CA 402280208,402280223,US 402280224,402280319,CA -402280320,402280447,US -402280448,402280959,CA +402280320,402280383,US +402280384,402280959,CA 402280960,402281087,US -402281088,402281151,CA -402281152,402281183,US -402281184,402281199,CA +402281088,402281199,CA 402281200,402281471,US 402281472,402281727,CA -402281728,402281855,US -402281856,402281991,CA -402281992,402281999,US -402282000,402282111,CA +402281728,402281823,US +402281824,402282111,CA 402282112,402282239,US -402282240,402282815,CA -402282816,402282847,US -402282848,402282879,CA +402282240,402282879,CA 402282880,402282911,US 402282912,402282927,CA -402282928,402283519,US -402283520,402284039,CA -402284040,402284047,US -402284048,402284159,CA +402282928,402282943,US +402282944,402282959,CA +402282960,402282975,US +402282976,402283263,CA +402283264,402283519,US +402283520,402284159,CA 402284160,402284287,US 402284288,402284799,CA 402284800,402285055,US -402285056,402285311,CA -402285312,402285439,US +402285056,402285407,CA +402285408,402285439,US 402285440,402285567,CA -402285568,402286079,US -402286080,402286095,CA -402286096,402286111,US -402286112,402286335,CA -402286336,402286927,US +402285568,402285823,US +402285824,402286335,CA +402286336,402286847,US +402286848,402286863,CA +402286864,402286895,US +402286896,402286911,CA +402286912,402286927,US 402286928,402286935,CA 402286936,402286975,US -402286976,402286983,CA -402286984,402286991,US -402286992,402287207,CA -402287208,402287215,US -402287216,402287263,CA +402286976,402287263,CA 402287264,402287279,US -402287280,402287295,CA -402287296,402287311,US -402287312,402287327,CA -402287328,402287487,US +402287280,402287423,CA +402287424,402287487,US 402287488,402287551,CA 402287552,402287583,US 402287584,402287743,CA -402287744,402287799,US -402287800,402287807,CA -402287808,402287903,US -402287904,402288007,CA -402288008,402288015,US -402288016,402288031,CA -402288032,402288063,US -402288064,402288135,CA -402288136,402288143,US -402288144,402288159,CA -402288160,402288191,US -402288192,402288223,CA -402288224,402288383,US -402288384,402288391,CA -402288392,402288399,US -402288400,402288431,CA +402287744,402287791,US +402287792,402288031,CA +402288032,402288047,US +402288048,402288159,CA +402288160,402288175,US +402288176,402288223,CA +402288224,402288255,US +402288256,402288271,CA +402288272,402288287,US +402288288,402288319,CA +402288320,402288383,US +402288384,402288431,CA 402288432,402288447,US -402288448,402288511,CA -402288512,402288591,US +402288448,402288543,CA +402288544,402288591,US 402288592,402288607,CA 402288608,402288623,US -402288624,402288631,CA -402288632,402288895,US -402288896,402288943,CA -402288944,402288951,US -402288952,402289119,CA +402288624,402288639,CA +402288640,402288895,US +402288896,402289119,CA 402289120,402289151,US 402289152,402289407,CA 402289408,402289471,US @@ -5444,21 +5325,17 @@ 402289744,402289759,US 402289760,402289775,CA 402289776,402289791,US -402289792,402289919,CA -402289920,402290047,US -402290048,402290175,CA -402290176,402290255,US +402289792,402289983,CA +402289984,402290047,US +402290048,402290239,CA +402290240,402290255,US 402290256,402290271,CA 402290272,402290287,US 402290288,402290399,CA 402290400,402290407,US 402290408,402290479,CA 402290480,402290511,US -402290512,402290547,CA -402290548,402290551,US -402290552,402290587,CA -402290588,402290591,US -402290592,402290639,CA +402290512,402290639,CA 402290640,402290655,US 402290656,402290687,CA 402290688,402290943,US @@ -5478,13 +5355,9 @@ 402291392,402291423,US 402291424,402291711,CA 402291712,402291999,US -402292000,402292103,CA -402292104,402292111,US -402292112,402292143,CA +402292000,402292143,CA 402292144,402292151,US -402292152,402292183,CA -402292184,402292191,US -402292192,402292351,CA +402292152,402292351,CA 402292352,402353663,US 402353664,402353919,JP 402353920,402354175,ID @@ -5513,31 +5386,35 @@ 402410752,402411263,US 402411264,402411519,NL 402411520,402522111,US -402522112,402522175,CA -402522176,402522183,US -402522184,402522223,CA +402522112,402522223,CA 402522224,402522231,US -402522232,402522279,CA -402522280,402522287,US -402522288,402522327,CA -402522328,402522335,US -402522336,402522399,CA +402522232,402522271,CA +402522272,402522279,US +402522280,402522399,CA 402522400,402522407,US 402522408,402522479,CA -402522480,402522655,US -402522656,402522679,CA -402522680,402522911,US -402522912,402522943,CA -402522944,402522975,US -402522976,402522991,CA -402522992,402523103,US -402523104,402523111,CA -402523112,402523135,US +402522480,402522559,US +402522560,402522591,CA +402522592,402522607,US +402522608,402522623,CA +402522624,402522655,US +402522656,402522719,CA +402522720,402522895,US +402522896,402522991,CA +402522992,402523007,US +402523008,402523023,CA +402523024,402523039,US +402523040,402523071,CA +402523072,402523103,US +402523104,402523119,CA +402523120,402523135,US 402523136,402523167,CA -402523168,402523391,US +402523168,402523199,US +402523200,402523231,CA +402523232,402523391,US 402523392,402523423,CA -402523424,402523447,US -402523448,402523455,CA +402523424,402523439,US +402523440,402523455,CA 402523456,402523487,US 402523488,402523503,CA 402523504,402523647,US @@ -5549,13 +5426,17 @@ 402524192,402524255,US 402524256,402524263,CA 402524264,402524271,FI -402524272,402524279,CA -402524280,402524575,US +402524272,402524287,CA +402524288,402524319,US +402524320,402524383,CA +402524384,402524415,US +402524416,402524479,CA +402524480,402524575,US 402524576,402524591,CA 402524592,402524607,US 402524608,402524639,CA -402524640,402524663,US -402524664,402524671,CA +402524640,402524655,US +402524656,402524671,CA 402524672,402524799,US 402524800,402524831,CA 402524832,402524895,US @@ -5564,13 +5445,29 @@ 402524960,402524991,CA 402524992,402525007,US 402525008,402525023,CA -402525024,402525375,US +402525024,402525055,US +402525056,402525087,CA +402525088,402525103,US +402525104,402525119,CA +402525120,402525151,US +402525152,402525183,CA +402525184,402525215,US +402525216,402525247,CA +402525248,402525279,US +402525280,402525295,CA +402525296,402525327,US +402525328,402525343,CA +402525344,402525375,US 402525376,402525439,CA -402525440,402526079,US +402525440,402525695,US +402525696,402525951,CA +402525952,402526079,US 402526080,402526207,CA -402526208,402526591,US -402526592,402526623,CA -402526624,402526719,US +402526208,402526527,US +402526528,402526655,CA +402526656,402526671,US +402526672,402526687,CA +402526688,402526719,US 402526720,402526975,CA 402526976,402527359,US 402527360,402527391,CA @@ -5586,97 +5483,99 @@ 402530048,402530303,CA 402530304,402530559,US 402530560,402531583,CA -402531584,402531903,US -402531904,402531935,CA -402531936,402532231,US -402532232,402532247,CA +402531584,402531839,US +402531840,402532247,CA 402532248,402532255,US -402532256,402532287,CA -402532288,402532607,US -402532608,402532871,CA -402532872,402532879,US -402532880,402532887,CA -402532888,402532903,US -402532904,402532967,CA -402532968,402532975,US -402532976,402532983,CA +402532256,402532351,CA +402532352,402532607,US +402532608,402532983,CA 402532984,402532991,US -402532992,402533015,CA -402533016,402533023,US -402533024,402533039,CA -402533040,402533055,US -402533056,402533111,CA +402532992,402533039,CA +402533040,402533047,US +402533048,402533111,CA 402533112,402533279,US 402533280,402533295,CA -402533296,402533375,US -402533376,402533631,CA +402533296,402533311,US +402533312,402533327,CA +402533328,402533343,US +402533344,402533631,CA 402533632,402533759,US 402533760,402533791,CA 402533792,402533887,US 402533888,402533903,CA -402533904,402534095,US +402533904,402533919,US +402533920,402533935,CA +402533936,402534015,US +402534016,402534079,CA +402534080,402534095,US 402534096,402534111,CA 402534112,402534143,US 402534144,402534175,CA -402534176,402534479,US -402534480,402534487,CA -402534488,402534655,US -402534656,402535679,CA -402535680,402536351,US +402534176,402534255,US +402534256,402534271,CA +402534272,402534319,US +402534320,402534399,CA +402534400,402534479,US +402534480,402534495,CA +402534496,402534655,US +402534656,402535935,CA +402535936,402536191,US +402536192,402536255,CA +402536256,402536287,US +402536288,402536303,CA +402536304,402536351,US 402536352,402536367,CA 402536368,402536383,US -402536384,402536391,CA -402536392,402536399,US -402536400,402536455,CA -402536456,402536463,US -402536464,402536479,CA +402536384,402536479,CA 402536480,402536527,US 402536528,402536543,CA -402536544,402536703,US -402536704,402536959,CA -402536960,402537367,US -402537368,402537407,CA -402537408,402537471,US -402537472,402538495,CA -402538496,402538687,US -402538688,402538727,CA -402538728,402538751,US -402538752,402538759,CA -402538760,402538767,US -402538768,402538815,CA -402538816,402538895,US +402536544,402536575,US +402536576,402536639,CA +402536640,402536687,US +402536688,402536959,CA +402536960,402537215,US +402537216,402537359,CA +402537360,402537367,US +402537368,402538591,CA +402538592,402538687,US +402538688,402538735,CA +402538736,402538751,US +402538752,402538815,CA +402538816,402538863,US +402538864,402538879,CA +402538880,402538895,US 402538896,402538911,CA 402538912,402538927,US -402538928,402538943,CA -402538944,402539087,US -402539088,402539135,CA -402539136,402539519,US -402539520,402539535,CA -402539536,402539551,US -402539552,402539775,CA +402538928,402538959,CA +402538960,402538975,US +402538976,402539079,CA +402539080,402539087,US +402539088,402539775,CA 402539776,402540031,US 402540032,402540287,CA 402540288,402540543,US -402540544,402541055,CA -402541056,402541567,US +402540544,402541311,CA +402541312,402541567,US 402541568,402541823,CA 402541824,402542079,US 402542080,402542335,CA -402542336,402543295,US -402543296,402543303,CA -402543304,402543311,US -402543312,402543327,CA +402542336,402542591,US +402542592,402542847,CA +402542848,402543119,US +402543120,402543167,CA +402543168,402543231,US +402543232,402543327,CA 402543328,402543343,US -402543344,402543367,CA -402543368,402543375,US -402543376,402543391,CA -402543392,402543599,US -402543600,402543607,CA -402543608,402544415,US +402543344,402543391,CA +402543392,402543487,US +402543488,402543551,CA +402543552,402543583,US +402543584,402543615,CA +402543616,402544415,US 402544416,402544423,CA -402544424,402544511,US -402544512,402544551,CA -402544552,402544591,US +402544424,402544479,US +402544480,402544559,CA +402544560,402544591,US 402544592,402544607,CA 402544608,402546687,US 402546688,402546943,CA @@ -5986,8 +5885,7 @@ 459541504,459542527,IN 459542528,459543295,HK 459543296,459543551,TW -459543552,459544063,MO -459544064,459544319,HK +459543552,459544319,MO 459544320,459544575,SG 459544576,459545599,IN 459545600,459547647,JP @@ -6350,7 +6248,8 @@ 520994816,521006079,BG 521006080,521007103,DE 521007104,521011199,BG -521011200,521014015,RO +521011200,521013247,FR +521013248,521014015,RO 521014016,521014271,NL 521014272,521018367,RO 521018368,521018623,IT @@ -6375,7 +6274,7 @@ 521029120,521029375,ES 521029376,521029631,US 521029632,521030655,GB -521030656,521031679,RO +521030656,521031679,PL 521031680,521035775,IR 521035776,521037567,RO 521037568,521037823,TH @@ -6767,7 +6666,10 @@ 529849856,529850111,CZ 529850112,529850367,RU 529850368,529855487,ES -529855488,529857535,RU +529855488,529856511,RU +529856512,529856530,BY +529856531,529856531,RU +529856532,529857535,BY 529857536,529858559,UA 529858560,529924095,NL 529924096,529989631,DE @@ -6777,7 +6679,9 @@ 530186240,530251775,IL 530251776,530317311,TR 530317312,530579455,IT -530579456,530710527,NL +530579456,530648143,NL +530648144,530648151,GB +530648152,530710527,NL 530710528,530841599,RU 530841600,530972671,CH 530972672,531103743,SA @@ -6953,7 +6857,7 @@ 532366240,532366271,PA 532366272,532366847,DE 532366848,532367359,GB -532367360,532368383,DE +532367360,532368383,US 532368384,532368639,NL 532368640,532370431,DE 532370432,532371455,FI @@ -7115,7 +7019,7 @@ 533970944,533987327,SE 533987328,534118399,DE 534118400,534151167,KW -534151168,534151423,DE +534151168,534151423,US 534151424,534151679,TR 534151680,534152191,DE 534152192,534152703,IR @@ -7128,7 +7032,7 @@ 534155776,534156287,IR 534156288,534157311,DE 534157312,534157567,TR -534157568,534157823,DE +534157568,534157823,IT 534157824,534158079,IR 534158080,534158591,ES 534158592,534158847,NL @@ -7200,7 +7104,7 @@ 534518912,534518975,FR 534518976,534519039,AU 534519040,534519167,AL -534519168,534519199,KP +534519168,534519199,GB 534519200,534519231,VA 534519232,534519263,AQ 534519264,534519295,IT @@ -7286,11 +7190,7 @@ 540729344,540731391,US 540731392,540733439,GB 540733440,540737535,NL -540737536,540737757,BZ -540737758,540737758,BR -540737759,540783936,BZ -540783937,540783937,BR -540783938,540803071,BZ +540737536,540803071,BR 540803072,540811263,US 540811264,540813639,SG 540813640,540813647,US @@ -7504,7 +7404,9 @@ 621441792,621442047,DE 621442048,621442303,ES 621442304,621442559,IR -621442560,621445119,DE +621442560,621444095,DE +621444096,621444351,US +621444352,621445119,DE 621445120,621805567,ES 621805568,621813759,NL 621813760,621821951,SA @@ -7598,7 +7500,8 @@ 622512128,622514175,DE 622514176,622518271,NO 622518272,622518783,GB -622518784,622519281,NL +622518784,622519039,DE +622519040,622519281,NL 622519282,622519282,GB 622519283,622519295,NL 622519296,622519551,FR @@ -7660,7 +7563,9 @@ 623077856,623077857,WS 623077858,623077861,NZ 623077862,623083519,CH -623083520,623116287,ES +623083520,623097737,ES +623097738,623097738,RO +623097739,623116287,ES 623116288,623191332,KW 623191333,623191333,SA 623191334,623378431,KW @@ -7792,7 +7697,9 @@ 624643244,624643247,ES 624643248,624643263,FR 624643264,624643295,DE -624643296,624643423,FR +624643296,624643343,FR +624643344,624643351,ES +624643352,624643423,FR 624643424,624643459,ES 624643460,624643811,FR 624643812,624643815,CH @@ -7867,7 +7774,9 @@ 624657632,624657711,FR 624657712,624657715,ES 624657716,624657719,PL -624657720,624657831,FR +624657720,624657759,FR +624657760,624657767,ES +624657768,624657831,FR 624657832,624657839,ES 624657840,624657883,FR 624657884,624657887,ES @@ -8148,7 +8057,9 @@ 624682264,624682267,ES 624682268,624682319,FR 624682320,624682323,ES -624682324,624682495,FR +624682324,624682367,FR +624682368,624682383,LT +624682384,624682495,FR 624682496,624682527,ES 624682528,624682623,FR 624682624,624682639,ES @@ -8431,7 +8342,9 @@ 628621312,628654079,DE 628654080,628662271,RO 628662272,628670463,DE -628670464,628686847,RO +628670464,628685823,RO +628685824,628686335,FO +628686336,628686847,RO 628686848,628752383,SA 628752384,628785151,RU 628785152,628787199,CH @@ -8487,7 +8400,9 @@ 629313536,629315583,ES 629315584,629317631,IT 629317632,629325823,FI -629325824,629327871,RU +629325824,629327359,RU +629327360,629327615,GB +629327616,629327871,RU 629327872,629329919,IR 629329920,629331967,ES 629331968,629334015,IT @@ -8579,9 +8494,7 @@ 630495232,630497279,DE 630497280,630499327,NL 630499328,630501375,LV -630501376,630502911,BE -630502912,630503167,NL -630503168,630503423,BE +630501376,630503423,BE 630503424,630503679,NL 630503680,630504447,IT 630504448,630509567,NL @@ -9066,7 +8979,9 @@ 637337088,637337599,RU 637337600,637403135,NO 637403136,637534207,IR -637534208,638910463,US +637534208,638754815,US +638754816,638763007,CA +638763008,638910463,US 638910464,638918655,CA 638918656,639242239,US 639242240,639246335,CA @@ -9085,7 +9000,9 @@ 641769728,641771519,US 641771520,641772543,CA 641772544,641773055,US -641773056,641776639,CA +641773056,641774641,CA +641774642,641774642,US +641774643,641776639,CA 641776640,641777663,US 641777664,641777919,CA 641777920,641778175,US @@ -9347,7 +9264,9 @@ 675447424,675447551,BR 675447552,675448575,US 675448576,675449087,GB -675449088,675449471,US +675449088,675449151,US +675449152,675449215,BR +675449216,675449471,US 675449472,675449599,IE 675449600,675449727,AT 675449728,675449855,FI @@ -9365,7 +9284,21 @@ 675451904,675452159,HK 675452160,675452927,US 675452928,675453055,IE -675453056,675528703,US +675453056,675453439,US +675453440,675453503,BR +675453504,675453567,IN +675453568,675453695,AU +675453696,675453759,KR +675453760,675453951,GB +675453952,675454015,JP +675454016,675454079,CA +675454080,675454207,IE +675454208,675454271,SG +675454272,675454335,MY +675454336,675454399,KR +675454400,675454463,US +675454464,675454719,NL +675454720,675528703,US 675528704,675536895,NL 675536896,675545087,IE 675545088,675610623,NL @@ -9432,11 +9365,14 @@ 676343808,676347903,NL 676347904,676364287,GB 676364288,676368383,JP -676368384,676421631,US -676421632,676438015,IN -676438016,676446207,HK -676446208,676462591,GB -676462592,676528127,NL +676368384,676401151,US +676401152,676405247,HK +676405248,676409343,US +676409344,676413439,AU +676413440,676421631,IN +676421632,676442111,GB +676442112,676463103,US +676463104,676528127,NL 676528128,676544511,US 676544512,676560895,HK 676560896,676659199,US @@ -10509,7 +10445,9 @@ 698220544,698351615,GA 698351616,699334655,ZA 699334656,699342847,ZM -699342848,699400191,ZA +699342848,699359231,ZA +699359232,699367423,ZW +699367424,699400191,ZA 699400192,699465727,EG 699465728,699531263,ZA 699531264,699662335,EG @@ -10593,8 +10531,7 @@ 700776448,700841983,RW 700841984,700844031,GB 700844032,700846079,ZA -700846080,700856319,NA -700856320,700858367,MU +700846080,700858367,NA 700858368,700862463,ZA 700862464,700866559,ZM 700866560,700866815,NG @@ -10758,7 +10695,9 @@ 702342112,702342127,KE 702342128,702343039,MU 702343040,702343103,KE -702343104,702345215,MU +702343104,702344199,MU +702344200,702344971,KE +702344972,702345215,MU 702345216,702349311,KE 702349312,702353407,ZA 702353408,702357503,DZ @@ -10837,7 +10776,13 @@ 702505984,702507007,AO 702507008,702508031,CD 702508032,702509055,SO -702509056,702510079,KE +702509056,702509391,KE +702509392,702509399,AO +702509400,702509471,KE +702509472,702509479,CD +702509480,702509911,KE +702509912,702509919,AO +702509920,702510079,KE 702510080,702511103,ZM 702511104,702512127,ZA 702512128,702513151,MZ @@ -11141,7 +11086,8 @@ 736390144,736391167,LK 736391168,736392191,IN 736392192,736394239,CN -736394240,736395263,HK +736394240,736394495,SG +736394496,736395263,HK 736395264,736396287,MN 736396288,736398335,CN 736398336,736399359,IN @@ -11219,10 +11165,7 @@ 736494592,736495103,ID 736495104,736495359,NR 736495360,736495615,ID -736495616,736496127,HK -736496128,736496383,JP -736496384,736496639,PH -736496640,736498687,HK +736495616,736498687,HK 736498688,736499711,CN 736499712,736500479,SG 736500480,736500735,TH @@ -11340,7 +11283,8 @@ 737142784,737143039,HK 737143040,737143807,MY 737143808,737146879,IN -737146880,737147903,NZ +737146880,737147391,US +737147392,737147903,NZ 737147904,737148927,MY 737148928,737149951,CN 737149952,737151999,IN @@ -11668,7 +11612,7 @@ 737753088,737757183,TH 737757184,737757439,JP 737757440,737757695,HK -737757696,737757951,NZ +737757696,737757951,AU 737757952,737758207,SG 737758208,737760255,HK 737760256,737761279,IN @@ -12115,8 +12059,8 @@ 757096448,757104639,SG 757104640,757108223,US 757108224,757108415,NL -757108416,757108479,US -757108480,757108735,NL +757108416,757108575,US +757108576,757108735,NL 757108736,757110523,FR 757110524,757110524,TF 757110525,757110783,FR @@ -12129,13 +12073,15 @@ 757125120,757125151,NL 757125152,757125215,US 757125216,757125247,NL -757125248,757125407,US -757125408,757125631,NL +757125248,757125503,US +757125504,757125631,NL 757125632,757131263,US 757131264,757133311,NL 757133312,757135359,AU 757135360,757137407,JP -757137408,757186559,US +757137408,757176319,US +757176320,757176575,FR +757176576,757186559,US 757186560,757190655,CA 757190656,757600255,US 757600256,757604351,CA @@ -12188,9 +12134,7 @@ 757764096,757764351,ZW 757764352,757765375,US 757765376,757765631,SD -757765632,757765887,US -757765888,757766143,KP -757766144,757766655,US +757765632,757766655,US 757766656,757766911,BI 757766912,757767167,US 757767168,757767423,CC @@ -12302,125 +12246,131 @@ 758704128,758706175,NL 758706176,758710271,GR 758710272,758743039,US -758743040,758744575,CA -758744576,758745727,US +758743040,758744679,CA +758744680,758744687,US +758744688,758744751,CA +758744752,758744767,US +758744768,758744879,CA +758744880,758744887,US +758744888,758745087,CA +758745088,758745727,US 758745728,758745791,CA 758745792,758745823,US -758745824,758745831,CA -758745832,758745855,US +758745824,758745839,CA +758745840,758745855,US 758745856,758747135,CA -758747136,758747263,US -758747264,758747327,CA +758747136,758747199,US +758747200,758747215,CA +758747216,758747231,US +758747232,758747327,CA 758747328,758747375,US 758747376,758747903,CA 758747904,758747935,US 758747936,758747951,CA -758747952,758748159,US +758747952,758747999,US +758748000,758748031,CA +758748032,758748159,US 758748160,758748415,CA 758748416,758748927,US 758748928,758749439,CA 758749440,758749519,US 758749520,758749535,CA -758749536,758749567,US -758749568,758749695,CA -758749696,758751999,US +758749536,758749551,US +758749552,758749695,CA +758749696,758749951,US +758749952,758750207,CA +758750208,758750463,US +758750464,758750719,CA +758750720,758750975,US +758750976,758751487,CA +758751488,758751999,US 758752000,758752127,CA 758752128,758752191,US 758752192,758752199,CA 758752200,758752207,FI -758752208,758752255,US +758752208,758752223,US +758752224,758752239,CA +758752240,758752255,US 758752256,758752511,CA 758752512,758752671,US 758752672,758752687,CA -758752688,758752895,US -758752896,758752927,CA -758752928,758753023,US -758753024,758753279,CA +758752688,758752735,US +758752736,758753279,CA 758753280,758753535,US 758753536,758754047,CA 758754048,758754431,US -758754432,758754815,CA -758754816,758755071,US -758755072,758755327,CA -758755328,758756095,US -758756096,758756351,CA -758756352,758757023,US -758757024,758757039,AE -758757040,758757631,US +758754432,758755327,CA +758755328,758755839,US +758755840,758756351,CA +758756352,758756863,US +758756864,758757375,CA +758757376,758757631,US 758757632,758757887,CA 758757888,758758143,US -758758144,758758399,CA -758758400,758758655,US -758758656,758759423,CA -758759424,758759807,US -758759808,758759839,CA -758759840,758760767,US -758760768,758760799,CA -758760800,758760959,US -758760960,758761727,CA +758758144,758759935,CA +758759936,758760703,US +758760704,758761727,CA 758761728,758762239,US 758762240,758762495,CA -758762496,758763007,US -758763008,758763263,CA -758763264,758763519,US -758763520,758763775,CA -758763776,758764543,US -758764544,758764679,CA -758764680,758764759,US -758764760,758764767,CA -758764768,758764927,US -758764928,758764991,CA -758764992,758765119,US -758765120,758765183,CA -758765184,758765439,US -758765440,758765503,CA -758765504,758765567,US -758765568,758765631,CA +758762496,758762751,US +758762752,758764031,CA +758764032,758764287,US +758764288,758764679,CA +758764680,758764703,US +758764704,758764719,CA +758764720,758764751,US +758764752,758764767,CA +758764768,758764799,US +758764800,758765631,CA 758765632,758765647,US 758765648,758765663,CA -758765664,758765975,US +758765664,758765695,US +758765696,758765951,CA +758765952,758765975,US 758765976,758765983,CA 758765984,758766015,US -758766016,758766103,CA -758766104,758766111,GB -758766112,758766143,CA +758766016,758766143,CA 758766144,758766303,US 758766304,758766319,CA 758766320,758766335,US 758766336,758766431,CA -758766432,758766575,US +758766432,758766495,US +758766496,758766527,CA +758766528,758766575,US 758766576,758766583,CA 758766584,758766847,US -758766848,758767615,CA -758767616,758767871,US -758767872,758769279,CA +758766848,758769279,CA 758769280,758769359,US 758769360,758769367,CA 758769368,758769375,US 758769376,758769663,CA 758769664,758769751,US -758769752,758769759,CA -758769760,758770239,US -758770240,758770271,CA -758770272,758770303,US -758770304,758770367,CA -758770368,758770847,US +758769752,758769791,CA +758769792,758769855,US +758769856,758769919,CA +758769920,758770175,US +758770176,758770431,CA +758770432,758770687,US +758770688,758770751,CA +758770752,758770847,US 758770848,758770863,CA -758770864,758771199,US -758771200,758771455,CA -758771456,758772991,US +758770864,758770927,US +758770928,758770943,CA +758770944,758771199,US +758771200,758771711,CA +758771712,758772991,US 758772992,758773759,CA -758773760,758774783,US -758774784,758775039,CA -758775040,758775295,US -758775296,758775551,CA -758775552,758779903,US +758773760,758774271,US +758774272,758775807,CA +758775808,758779903,US 758779904,758783999,CA 758784000,758785023,US 758785024,758785535,CA 758785536,758796287,US 758796288,758804479,CA -758804480,758824959,US +758804480,758811135,US +758811136,758811391,NL +758811392,758824959,US 758824960,758841343,CA 758841344,758847487,US 758847488,758847743,NL @@ -12645,11 +12595,13 @@ 759591936,759592959,AR 759592960,759601151,BR 759601152,759602175,AR -759603200,759605247,BR +759602176,759605247,BR +759605248,759606271,CO 759606272,759608319,BR 759608320,759609343,BO +759609344,759610367,AR 759610368,759612415,BR -759612416,759613439,EC +759612416,759614463,EC 759614464,759618559,BR 759618560,759619583,AR 759619584,759620607,BR @@ -12658,52 +12610,58 @@ 759622656,759623679,EC 759623680,759624703,BZ 759624704,759627775,BR +759627776,759628799,EC 759628800,759629823,BR 759629824,759630847,CL 759630848,759631871,BR 759631872,759632895,HN 759632896,759635967,BR +759635968,759636991,PE 759636992,759638015,EC +759638016,759639039,BR 759639040,759640063,CL +759640064,759641087,BR 759641088,759642111,HN 759642112,759643135,AR -759643136,759661567,BR +759643136,759654911,BR +759654912,759655167,AR +759655168,759656447,BR +759656448,759657471,EC +759657472,759666687,BR +759666688,759667711,AR 759667712,759668735,CW 759668736,759673855,BR 759673856,759674879,CO 759674880,759675903,EC -759675904,759676927,BR +759675904,759677951,BR 759677952,759678975,AR 759678976,759679999,EC 759680000,759681023,AR -759681024,759689215,BR +759681024,759692287,BR +759692288,759693311,EC 759693312,759693439,CA 759693440,759693455,US 759693456,759693471,CA 759693472,759693519,US 759693520,759693527,CA 759693528,759693567,US -759693568,759693823,CA -759693824,759693959,US +759693568,759693959,CA 759693960,759693975,GR -759693976,759694079,US -759694080,759694207,CA +759693976,759694207,CA 759694208,759694303,US 759694304,759694319,CA 759694320,759695231,US -759695232,759696143,CA -759696144,759696159,US -759696160,759696263,CA +759695232,759696263,CA 759696264,759696335,US 759696336,759696351,CA -759696352,759696463,US +759696352,759696415,US +759696416,759696447,CA +759696448,759696463,US 759696464,759696479,CA -759696480,759696591,US -759696592,759696599,CA -759696600,759696639,US -759696640,759697535,CA -759697536,759697663,US -759697664,759699263,CA +759696480,759696575,US +759696576,759696599,CA +759696600,759696607,US +759696608,759699263,CA 759699264,759699279,US 759699280,759699287,CA 759699288,759699423,US @@ -12717,11 +12675,9 @@ 759700064,759700223,US 759700224,759700479,CA 759700480,759700607,US -759700608,759700623,CA -759700624,759700639,US -759700640,759700735,CA -759700736,759700991,US -759700992,759701759,CA +759700608,759700735,CA +759700736,759700863,US +759700864,759701759,CA 759701760,759702015,US 759702016,759702399,CA 759702400,759702431,US @@ -12736,38 +12692,36 @@ 759709184,759710463,CA 759710464,759710495,US 759710496,759710511,CA -759710512,759710719,US +759710512,759710559,US +759710560,759710591,CA +759710592,759710719,US 759710720,759710975,CA 759710976,759711263,US 759711264,759711279,CA 759711280,759711359,US -759711360,759711487,CA -759711488,759711647,US +759711360,759711615,CA +759711616,759711647,US 759711648,759711655,CA -759711656,759711807,US -759711808,759711839,CA -759711840,759711855,US -759711856,759711871,CA -759711872,759712095,US +759711656,759711679,US +759711680,759711695,CA +759711696,759711711,US +759711712,759711871,CA +759711872,759712015,US +759712016,759712063,CA +759712064,759712095,US 759712096,759712111,CA 759712112,759712127,US 759712128,759712255,CA -759712256,759712511,US +759712256,759712351,US +759712352,759712383,CA +759712384,759712511,US 759712512,759712895,CA 759712896,759713023,US -759713024,759713407,CA -759713408,759713535,US -759713536,759713791,CA -759713792,759714047,US -759714048,759721215,CA +759713024,759721215,CA 759721216,759721231,US -759721232,759721263,CA -759721264,759721343,US -759721344,759724031,CA -759724032,759724287,US -759724288,759724799,CA -759724800,759725311,US -759725312,759791615,CA +759721232,759721279,CA +759721280,759721343,US +759721344,759791615,CA 759791616,759802367,US 759802368,759803391,CA 759803392,759803903,US @@ -12814,12 +12768,17 @@ 759832960,759833087,BI 759833088,759833215,ER 759833216,759833343,LS -759833344,759835391,US +759833344,759834623,US +759834624,759834879,GB +759834880,759835391,US 759835392,759835647,AU 759835648,759835903,SE 759835904,759836159,US 759836160,759836415,SE -759836416,759840767,US +759836416,759839999,US +759840000,759840255,CA +759840256,759840511,GB +759840512,759840767,US 759840768,759844863,CA 759844864,759848959,US 759848960,759889919,CA @@ -12838,8 +12797,7 @@ 759980032,759983119,JP 759983120,759983135,US 759983136,759984127,JP -759984128,759987711,AU -759987712,759988223,US +759984128,759988223,AU 759988224,759992319,GB 759992320,759997439,SG 759997440,760000511,US @@ -12859,7 +12817,14 @@ 760037376,760038399,DE 760038400,760043519,US 760043520,760044543,GB -760044544,760111103,US +760044544,760053759,US +760053760,760055807,JP +760055808,760056831,NL +760056832,760057855,DE +760057856,760063999,US +760064000,760066047,SG +760066048,760068095,JP +760068096,760111103,US 760111104,760119295,CA 760119296,760127487,US 760127488,760152063,CA @@ -12868,7 +12833,7 @@ 761316352,761316607,RU 761316608,762314751,EG 762314752,762315775,IN -762315776,762316799,GB +762315776,762316799,US 762316800,762320895,IN 762320896,762321919,HK 762321920,762323967,IN @@ -13568,7 +13533,80 @@ 769550336,769556479,ZA 769556480,769589247,GH 769589248,769654783,US +769654784,769656831,BR +769656832,769657855,AR 769659904,769660927,EC +769660928,769661951,BR +769661952,769662975,AR +769662976,769668095,BR +769668096,769669119,AR +769669120,769679359,BR +769679360,769680383,EC +769680384,769682431,AR +769682432,769684479,BR +769684480,769685503,EC +769685504,769686527,CL +769686528,769687551,AR +769687552,769690623,BR +769690624,769691647,AR +769691648,769692671,PE +769692672,769694719,EC +769694720,769695743,AR +769695744,769701887,BR +769701888,769702143,AR +769702656,769702911,BR +769702912,769703935,AR +769703936,769706495,BR +769706752,769707007,AR +769707008,769713151,BR +769713152,769714175,HN +769714176,769719295,BR +769719296,769720319,HN +769720320,769721343,AR +769721344,769722367,BR +769723392,769727487,BR +769727488,769728511,AR +769728512,769730559,BR +769730560,769731071,AR +769731072,769731327,BZ +769731584,769732607,EC +769732608,769734655,BR +769735680,769736703,BR +769738752,769739263,BR +769740800,769741823,CL +769741824,769742847,BR +769742848,769743871,EC +769743872,769744895,CL +769744896,769745919,AR +769745920,769746943,BR +769746944,769747967,EC +769747968,769748991,BR +769748992,769750015,CL +769750016,769754111,BR +769756160,769758207,BR +769759744,769760255,BR +769761280,769763327,BR +769764352,769767423,BR +769767424,769768447,CL +769768448,769771519,BR +769772544,769773567,CL +769773568,769777663,AR +769777664,769778687,CO +769779712,769780735,BR +769781760,769794047,BR +769797120,769798143,BR +769800704,769800959,AR +769801216,769802239,BR +769804288,769805311,BR +769811456,769812479,AR +769814528,769815551,CO +769817600,769822719,BR +769822720,769823743,AR +769823744,769826815,BR +769829888,769830911,AR +769830912,769831935,GT +769831936,769832959,PY +769838080,769839103,EC 770703360,771227647,EG 771227648,771229695,IN 771229696,771230719,CN @@ -13715,7 +13753,7 @@ 771685376,771685631,KR 771685632,771685887,JP 771685888,771686143,NZ -771686144,771686399,HK +771686144,771686399,TW 771686400,771719167,CN 771719168,771720191,US 771720192,771750911,CN @@ -14284,7 +14322,7 @@ 774163266,774163270,TZ 774163271,774163275,ST 774163276,774163280,GB -774163281,774163283,KP +774163281,774163283,NL 774163284,774163290,FK 774163291,774163330,IT 774163331,774163335,UG @@ -14472,7 +14510,9 @@ 778654032,778654039,ES 778654040,778654903,FR 778654904,778654907,GB -778654908,778654959,FR +778654908,778654927,FR +778654928,778654935,ES +778654936,778654959,FR 778654960,778654975,BE 778654976,778655039,FR 778655040,778655103,ES @@ -14534,7 +14574,9 @@ 778667500,778667503,GB 778667504,778667999,FR 778668000,778668003,GB -778668004,778668391,FR +778668004,778668271,FR +778668272,778668279,ES +778668280,778668391,FR 778668392,778668395,FI 778668396,778668399,ES 778668400,778668479,FR @@ -14757,7 +14799,9 @@ 778693096,778693103,ES 778693104,778693159,FR 778693160,778693163,ES -778693164,778693427,FR +778693164,778693175,FR +778693176,778693179,ES +778693180,778693427,FR 778693428,778693431,ES 778693432,778693439,FR 778693440,778693455,GB @@ -14771,11 +14815,11 @@ 778693856,778693887,BE 778693888,778693967,FR 778693968,778693971,ES -778693972,778694187,FR -778694188,778694191,ES -778694192,778695087,FR +778693972,778695087,FR 778695088,778695103,PT -778695104,778695203,FR +778695104,778695119,FR +778695120,778695135,LT +778695136,778695203,FR 778695204,778695207,ES 778695208,778695375,FR 778695376,778695391,FI @@ -14848,7 +14892,11 @@ 778764288,778822655,HU 778822656,778823679,UA 778823680,778829823,HU -778829824,778895359,RO +778829824,778862591,RO +778862592,778870783,GB +778870784,778874879,RO +778874880,778893311,GB +778893312,778895359,RO 778895360,778960895,LV 778960896,779026431,DE 779026432,779091967,RU @@ -15024,7 +15072,8 @@ 783048704,783056895,RU 783056896,783065087,UA 783065088,783073279,RU -783073280,783089663,UA +783073280,783081471,UA +783081472,783089663,AD 783089664,783106047,RU 783106048,783134719,UA 783134720,783138815,RU @@ -15088,9 +15137,9 @@ 783681536,783683583,IE 783683584,783685631,DE 783685632,783687679,RU -783687680,783688447,PT +783687680,783688447,IR 783688448,783688703,ES -783688704,783689727,PT +783688704,783689727,IR 783689728,783691775,FR 783691776,783693823,BY 783693824,783694367,GB @@ -15320,7 +15369,7 @@ 786812928,786817023,RU 786817024,786821119,SK 786821120,786824703,HR -786824704,786825215,US +786824704,786825215,CN 786825216,786857983,SA 786857984,786868223,NO 786868224,786890751,SE @@ -15336,8 +15385,7 @@ 786913280,786915327,DE 786915328,786917375,SK 786917376,786919423,US -786919424,786919431,IT -786919432,786919639,GB +786919424,786919639,GB 786919640,786919655,IT 786919656,786919687,GB 786919688,786919695,IT @@ -15508,14 +15556,16 @@ 787715328,787715583,YE 787715584,787715839,BH 787715840,787718143,NL -787718144,787718655,RU -787718656,787719167,NL -787719168,787719423,RU -787719424,787719935,NL +787718144,787718911,RU +787718912,787719167,NL +787719168,787719679,RU +787719680,787719935,NL 787719936,787722239,RU 787722240,787722751,NL 787722752,787725311,RU -787725312,787730431,NL +787725312,787728639,NL +787728640,787728895,RU +787728896,787730431,NL 787730432,787731199,SE 787731200,787731967,CA 787731968,787732479,LU @@ -15777,7 +15827,12 @@ 794361856,794369288,HK 794369289,794369289,CN 794369290,794378239,HK -794378240,794427391,US +794378240,794390527,US +794390528,794391807,IN +794391808,794392575,ID +794392576,794392831,TH +794392832,794393087,ID +794393088,794427391,US 794427392,794460159,HK 794460160,794492927,US 794492928,794501119,JP @@ -15876,7 +15931,9 @@ 832312320,832313343,ID 832313344,832315391,AU 832315392,832319487,KH -832319488,832320511,NZ +832319488,832319999,NU +832320000,832320255,NZ +832320256,832320511,NU 832320512,832321535,VN 832321536,832323583,ID 832323584,832348159,IN @@ -16012,7 +16069,9 @@ 846649344,846649599,CN 846649600,846650367,US 846650368,846650879,CN -846650880,853622019,US +846650880,846659583,US +846659584,846725119,SA +846725120,853622019,US 853622020,853622020,DE 853622021,853622096,US 853622097,853622098,GB @@ -16147,7 +16206,9 @@ 872300736,872300751,PL 872300752,872300767,FR 872300768,872300799,NL -872300800,872301503,FR +872300800,872301087,FR +872301088,872301095,ES +872301096,872301503,FR 872301504,872301567,PL 872301568,872302687,FR 872302688,872302719,NL @@ -16317,7 +16378,9 @@ 872342336,872342367,ES 872342368,872342623,FR 872342624,872342655,DE -872342656,872344603,FR +872342656,872343191,FR +872343192,872343199,ES +872343200,872344603,FR 872344604,872344607,GB 872344608,872344639,IT 872344640,872344895,FR @@ -16381,7 +16444,9 @@ 872353664,872353791,GB 872353792,872354079,FR 872354080,872354111,CZ -872354112,872354367,FR +872354112,872354263,FR +872354264,872354271,ES +872354272,872354367,FR 872354368,872354399,PT 872354400,872354751,FR 872354752,872354815,BE @@ -16425,7 +16490,9 @@ 872365312,872365319,PT 872365320,872374459,FR 872374460,872374463,GB -872374464,872374591,FR +872374464,872374543,FR +872374544,872374559,LT +872374560,872374591,FR 872374592,872374655,ES 872374656,872375007,FR 872375008,872375039,PT @@ -16695,14 +16762,14 @@ 878579968,878580223,DE 878580224,878580735,US 878580736,878580991,IN -878580992,878581247,US -878581248,878581503,SE -878581504,878581759,US +878580992,878581759,US 878581760,878582783,IE 878582784,878583807,US 878583808,878591999,GB 878592000,878593023,CA -878593024,878596095,US +878593024,878593279,US +878593280,878593535,DE +878593536,878596095,US 878596096,878604287,CA 878604288,878605311,GB 878605312,878625791,US @@ -16792,7 +16859,9 @@ 878706512,878706559,US 878706560,878706575,DE 878706576,878706591,CN -878706592,879565823,US +878706592,878952447,US +878952448,878952463,BR +878952464,879565823,US 879565824,879569919,GB 879569920,879571967,KR 879571968,879572991,JP @@ -16905,7 +16974,9 @@ 880261120,880262143,SG 880262144,880263167,DE 880263168,880264191,IE -880264192,880267775,US +880264192,880266495,US +880266496,880266751,SG +880266752,880267775,US 880267776,880268287,AU 880268288,880269311,US 880269312,880271359,JP @@ -16921,7 +16992,11 @@ 880557568,880557823,CA 880557824,880558079,US 880558080,880574463,CA -880574464,880872191,US +880574464,880807935,US +880807936,880808191,CA +880808192,880861183,US +880861184,880869375,HK +880869376,880872191,US 880872192,880872447,CA 880872448,880874751,US 880874752,880875007,CA @@ -17190,14 +17265,20 @@ 908330664,908330671,ES 908330672,908331775,FR 908331776,908331903,IT -908331904,908332223,FR -908332224,908332239,IT -908332240,908333823,FR +908331904,908332847,FR +908332848,908332863,LT +908332864,908332991,FR +908332992,908333023,GB +908333024,908333823,FR 908333824,908333951,DE 908333952,908334079,GB 908334080,908334271,FR 908334272,908334303,PT -908334304,908335871,FR +908334304,908334919,FR +908334920,908334927,ES +908334928,908334951,FR +908334952,908334959,ES +908334960,908335871,FR 908335872,908335999,ES 908336000,908336167,FR 908336168,908336183,ES @@ -17207,10 +17288,14 @@ 908336536,908336543,ES 908336544,908336639,FR 908336640,908336767,NL -908336768,908336991,FR +908336768,908336831,FR +908336832,908336839,ES +908336840,908336991,FR 908336992,908337023,PT 908337024,908337151,IE -908337152,908337407,FR +908337152,908337383,FR +908337384,908337391,ES +908337392,908337407,FR 908337408,908337535,NL 908337536,908338367,FR 908338368,908338375,ES @@ -17226,7 +17311,11 @@ 908340224,908340607,FR 908340608,908340735,ES 908340736,908340863,GB -908340864,908345447,FR +908340864,908341207,FR +908341208,908341215,ES +908341216,908345343,FR +908345344,908345359,ES +908345360,908345447,FR 908345448,908345455,ES 908345456,908345527,FR 908345528,908345535,ES @@ -17241,15 +17330,23 @@ 908346288,908346303,LT 908346304,908346647,FR 908346648,908346655,ES -908346656,908347919,FR +908346656,908347455,FR +908347456,908347471,ES +908347472,908347919,FR 908347920,908347927,ES -908347928,908348143,FR +908347928,908347935,FR +908347936,908347943,ES +908347944,908347951,FR +908347952,908347959,ES +908347960,908348143,FR 908348144,908348159,LT 908348160,908348415,FR 908348416,908348543,IT 908348544,908348671,FR 908348672,908348799,ES -908348800,908349455,FR +908348800,908348855,FR +908348856,908348863,ES +908348864,908349455,FR 908349456,908349463,ES 908349464,908349503,FR 908349504,908349519,LT @@ -17299,8 +17396,8 @@ 908363008,908363103,FR 908363104,908363119,DE 908363120,908363375,FR -908363376,908363383,ES -908363384,908363471,FR +908363376,908363391,ES +908363392,908363471,FR 908363472,908363479,ES 908363480,908363487,FR 908363488,908363519,FI @@ -17330,7 +17427,9 @@ 908366200,908366335,ES 908366336,908366631,FR 908366632,908366639,ES -908366640,908368015,FR +908366640,908366839,FR +908366840,908366847,ES +908366848,908368015,FR 908368016,908368031,LT 908368032,908368167,FR 908368168,908368175,ES @@ -17351,7 +17450,9 @@ 908371968,908374015,PL 908374016,908376127,FR 908376128,908376255,PL -908376256,908378271,FR +908376256,908376767,FR +908376768,908376831,PL +908376832,908378271,FR 908378272,908378279,ES 908378280,908378383,FR 908378384,908378399,LT @@ -17372,7 +17473,11 @@ 908379904,908379911,ES 908379912,908379951,FR 908379952,908379967,LT -908379968,908380415,FR +908379968,908380223,FR +908380224,908380239,ES +908380240,908380319,FR +908380320,908380327,ES +908380328,908380415,FR 908380416,908380543,ES 908380544,908380959,FR 908380960,908380991,PT @@ -17387,7 +17492,162 @@ 908382720,908382751,PL 908382752,908382823,FR 908382824,908382831,ES -908382832,908591103,FR +908382832,908383015,FR +908383016,908383023,ES +908383024,908384511,FR +908384512,908384639,BE +908384640,908385063,FR +908385064,908385071,ES +908385072,908385407,FR +908385408,908385423,LT +908385424,908385535,FR +908385536,908385663,IT +908385664,908386007,FR +908386008,908386015,ES +908386016,908387071,FR +908387072,908387135,GB +908387136,908387151,FR +908387152,908387167,GB +908387168,908388399,FR +908388400,908388415,DE +908388416,908388431,FR +908388432,908388447,DE +908388448,908388879,FR +908388880,908388887,DE +908388888,908389055,FR +908389056,908389375,DE +908389376,908389759,FR +908389760,908389823,DE +908389824,908391159,FR +908391160,908391295,ES +908391296,908391423,GB +908391424,908392759,FR +908392760,908392767,ES +908392768,908392863,FR +908392864,908392879,LT +908392880,908394495,FR +908394496,908396543,GB +908396544,908403343,FR +908403344,908403351,ES +908403352,908403655,FR +908403656,908403663,ES +908403664,908403735,FR +908403736,908403743,ES +908403744,908403775,FR +908403776,908403807,CZ +908403808,908403839,FR +908403840,908403967,NL +908403968,908405247,FR +908405248,908405375,IT +908405376,908405455,FR +908405456,908405463,ES +908405464,908405599,FR +908405600,908405607,ES +908405608,908405647,FR +908405648,908405655,ES +908405656,908406039,FR +908406040,908406047,ES +908406048,908406159,FR +908406160,908406167,ES +908406168,908406551,FR +908406552,908406559,ES +908406560,908407151,FR +908407152,908407159,ES +908407160,908408295,FR +908408296,908408303,ES +908408304,908409279,FR +908409280,908409287,ES +908409288,908409487,FR +908409488,908409495,ES +908409496,908409975,FR +908409976,908409983,ES +908409984,908410111,DE +908410112,908410495,FR +908410496,908410503,ES +908410504,908410711,FR +908410712,908410719,ES +908410720,908410863,FR +908410864,908410879,LT +908410880,908412927,FR +908412928,908414975,DE +908414976,908417023,FR +908417024,908417535,DE +908417536,908419327,FR +908419328,908419455,ES +908419456,908419495,FR +908419496,908419503,ES +908419504,908419711,FR +908419712,908419719,ES +908419720,908419767,FR +908419768,908419775,ES +908419776,908419999,FR +908420000,908420015,LT +908420016,908420071,FR +908420072,908420079,ES +908420080,908420351,FR +908420352,908420479,GB +908420480,908420791,FR +908420792,908420799,ES +908420800,908421127,FR +908421128,908421135,ES +908421136,908421951,FR +908421952,908421967,ES +908421968,908422047,FR +908422048,908422063,GB +908422064,908422079,FI +908422080,908422255,FR +908422256,908422263,ES +908422264,908422911,FR +908422912,908422919,ES +908422920,908423039,FR +908423040,908423071,PT +908423072,908423095,FR +908423096,908423103,ES +908423104,908423319,FR +908423320,908423327,ES +908423328,908423823,FR +908423824,908423831,ES +908423832,908423895,FR +908423896,908423903,ES +908423904,908424263,FR +908424264,908424271,ES +908424272,908424319,FR +908424320,908424447,DE +908424448,908424511,FR +908424512,908424527,LT +908424528,908424535,ES +908424536,908425055,FR +908425056,908425087,PT +908425088,908425151,FR +908425152,908425183,FI +908425184,908425463,FR +908425464,908425471,ES +908425472,908425855,FR +908425856,908425983,ES +908425984,908426287,FR +908426288,908426295,ES +908426296,908426391,FR +908426392,908426399,ES +908426400,908426431,FR +908426432,908426447,LT +908426448,908426479,FR +908426480,908426495,GB +908426496,908426703,FR +908426704,908426711,ES +908426712,908427119,FR +908427120,908427127,ES +908427128,908427143,FR +908427144,908427151,ES +908427152,908427247,FR +908427248,908427263,ES +908427264,908435495,FR +908435496,908435503,ES +908435504,908435647,FR +908435648,908435663,ES +908435664,908435839,FR +908435840,908435967,GB +908435968,908525567,FR +908525568,908591103,CA 908591104,910163967,US 910163968,910197237,JP 910197238,910197238,US @@ -17559,7 +17819,7 @@ 961118208,961126399,MY 961126400,961134591,TW 961134592,961142783,KR -961142784,961150975,KP +961142784,961150975,FR 961150976,961183743,BR 961183744,961191935,AR 961191936,961200127,CL @@ -18114,7 +18374,7 @@ 1024378880,1024380927,IN 1024380928,1024381951,KR 1024381952,1024385023,CN -1024385024,1024386047,JP +1024385024,1024386047,US 1024386048,1024387071,IN 1024387072,1024389119,VN 1024389120,1024391167,CN @@ -18312,7 +18572,9 @@ 1041728552,1041728559,IT 1041728560,1041728655,FR 1041728656,1041728671,IT -1041728672,1041752319,FR +1041728672,1041741567,FR +1041741568,1041741823,ES +1041741824,1041752319,FR 1041752320,1041752575,AT 1041752576,1041760255,FR 1041760256,1041768447,DE @@ -18561,7 +18823,9 @@ 1045037056,1045119231,GR 1045119232,1045119743,AL 1045119744,1045135359,GR -1045135360,1045168127,FR +1045135360,1045162147,FR +1045162148,1045162151,DE +1045162152,1045168127,FR 1045168128,1045171199,RU 1045171200,1045171455,UA 1045171456,1045233663,RU @@ -18716,7 +18980,9 @@ 1046498688,1046498695,DE 1046498696,1046498799,GB 1046498800,1046498807,DE -1046498808,1046502106,GB +1046498808,1046500735,GB +1046500736,1046500743,DE +1046500744,1046502106,GB 1046502107,1046502108,DE 1046502109,1046503095,GB 1046503096,1046503103,DE @@ -19020,6 +19286,7 @@ 1048991960,1048991967,DE 1048992528,1048992535,DE 1048992608,1048992623,DE +1048992640,1048992703,DE 1049006080,1049006335,DE 1049008128,1049009151,DE 1049016320,1049022463,DE @@ -20070,7 +20337,7 @@ 1053867520,1053867775,DE 1053867976,1053867999,DE 1053868008,1053868015,DE -1053868032,1053868375,ES +1053868032,1053868383,ES 1053868416,1053868447,ES 1053868448,1053868455,GB 1053868456,1053868479,ES @@ -20346,11 +20613,15 @@ 1065873408,1065877503,PR 1065877504,1065906175,US 1065906176,1065908223,KY -1065908224,1066213887,US +1065908224,1066139647,US +1066139648,1066143743,HK +1066143744,1066213887,US 1066213888,1066214911,NL 1066214912,1066254975,US 1066254976,1066255103,GB -1066255104,1066311679,US +1066255104,1066270719,US +1066270720,1066274815,DE +1066274816,1066311679,US 1066311680,1066311954,CA 1066311955,1066311955,US 1066311956,1066315775,CA @@ -20492,7 +20763,9 @@ 1072928768,1072929023,US 1072929024,1072929535,CA 1072929536,1072930303,US -1072930304,1072931071,CA +1072930304,1072930559,CA +1072930560,1072930815,US +1072930816,1072931071,CA 1072931072,1072931327,US 1072931328,1072931583,CA 1072931584,1072931839,SY @@ -20718,71 +20991,34 @@ 1075920896,1075970047,US 1075970048,1075972095,CA 1075972096,1075972351,GB -1075972352,1075975167,US -1075975168,1075975679,CA -1075975680,1075976191,US -1075976192,1075976447,CA -1075976448,1075977055,US -1075977056,1075977071,CA -1075977072,1075982335,US -1075982336,1075982591,CA -1075982592,1075982847,US -1075982848,1075983103,CA -1075983104,1075983359,US -1075983360,1075984127,CA -1075984128,1075985919,US -1075985920,1075986687,CA -1075986688,1075986943,US -1075986944,1075987199,CA -1075987200,1075987967,US -1075987968,1075988223,CA -1075988224,1075988319,US -1075988320,1075988351,CA -1075988352,1075988479,US -1075988480,1075988991,CA -1075988992,1075989231,US -1075989232,1075989239,CA -1075989240,1075989503,US -1075989504,1075989759,CA -1075989760,1075990015,US -1075990016,1075990527,CA -1075990528,1075994623,US -1075994624,1075995007,CA -1075995008,1075995103,US -1075995104,1075995135,CA -1075995136,1075995647,US -1075995648,1075996671,CA -1075996672,1075997183,US -1075997184,1075997439,CA -1075997440,1075998119,US -1075998120,1075998127,CA -1075998128,1075998207,US -1075998208,1075998271,CA -1075998272,1075998463,US -1075998464,1075999231,CA -1075999232,1075999999,US +1075972352,1075973375,CA +1075973376,1075973631,US +1075973632,1075980031,CA +1075980032,1075980543,US +1075980544,1075981567,CA +1075981568,1075982079,US +1075982080,1075985151,CA +1075985152,1075985407,US +1075985408,1075990783,CA +1075990784,1075991039,US +1075991040,1075991807,CA +1075991808,1075992063,US +1075992064,1075992575,CA +1075992576,1075992831,US +1075992832,1075992895,CA +1075992896,1075992959,US +1075992960,1075994111,CA +1075994112,1075994367,US +1075994368,1075999231,CA +1075999232,1075999487,US +1075999488,1075999743,CA +1075999744,1075999999,US 1076000000,1076000255,CA 1076000256,1076000767,US 1076000768,1076002047,CA -1076002048,1076003071,US -1076003072,1076003327,CA -1076003328,1076003583,US -1076003584,1076004351,CA -1076004352,1076004863,US -1076004864,1076005119,CA -1076005120,1076005311,US -1076005312,1076005319,CA -1076005320,1076005375,US -1076005376,1076005631,CA -1076005632,1076006399,US -1076006400,1076006655,CA -1076006656,1076006911,US -1076006912,1076007935,CA -1076007936,1076008447,US -1076008448,1076009215,CA -1076009216,1076009727,US -1076009728,1076009983,CA -1076009984,1076015103,US +1076002048,1076002815,US +1076002816,1076011007,CA +1076011008,1076015103,US 1076015104,1076018098,CA 1076018099,1076018099,US 1076018100,1076018431,CA @@ -20790,21 +21026,35 @@ 1076018688,1076018765,CA 1076018766,1076018766,US 1076018767,1076018943,CA -1076018944,1076026623,US -1076026624,1076026879,CA -1076026880,1076027019,US -1076027020,1076027023,CA -1076027024,1076028159,US -1076028160,1076028415,CA -1076028416,1076028927,US +1076018944,1076022783,US +1076022784,1076023295,CA +1076023296,1076025855,US +1076025856,1076025951,CA +1076025952,1076025999,US +1076026000,1076026023,CA +1076026024,1076026031,US +1076026032,1076026175,CA +1076026176,1076026207,US +1076026208,1076028671,CA +1076028672,1076028927,US 1076028928,1076029183,BZ -1076029184,1076029439,US -1076029440,1076030207,CA -1076030208,1076031743,US -1076031744,1076031999,CA -1076032000,1076032255,US -1076032256,1076032511,CA -1076032512,1076035519,US +1076029184,1076032511,CA +1076032512,1076033543,US +1076033544,1076033887,CA +1076033888,1076033903,US +1076033904,1076033983,CA +1076033984,1076034015,US +1076034016,1076034111,CA +1076034112,1076034175,US +1076034176,1076034303,CA +1076034304,1076034334,US +1076034335,1076034340,CA +1076034341,1076034367,US +1076034368,1076034815,CA +1076034816,1076035071,US +1076035072,1076035135,CA +1076035136,1076035199,US +1076035200,1076035519,CA 1076035520,1076035583,IN 1076035584,1076046847,US 1076046848,1076047103,CA @@ -20922,49 +21172,9 @@ 1078128640,1078247423,US 1078247424,1078251519,CA 1078251520,1078280191,US -1078280192,1078280447,CA -1078280448,1078280575,US -1078280576,1078280583,CA -1078280584,1078281071,US -1078281072,1078281079,CA -1078281080,1078281300,US -1078281301,1078281301,CA -1078281302,1078281511,US -1078281512,1078281519,CA -1078281520,1078281599,US -1078281600,1078281663,CA -1078281664,1078281727,US -1078281728,1078281735,CA -1078281736,1078282239,US -1078282240,1078283007,CA -1078283008,1078283831,US -1078283832,1078283839,CA -1078283840,1078284031,US -1078284032,1078284287,CA -1078284288,1078284479,US -1078284480,1078284543,CA -1078284544,1078284703,US -1078284704,1078284719,CA -1078284720,1078284735,US -1078284736,1078284751,CA -1078284752,1078284863,US -1078284864,1078284991,CA -1078284992,1078285151,US -1078285152,1078285167,CA -1078285168,1078285255,US -1078285256,1078285259,CA -1078285260,1078285311,US -1078285312,1078285567,CA -1078285568,1078286351,US -1078286352,1078286367,CA -1078286368,1078287231,US -1078287232,1078287239,CA -1078287240,1078287359,US -1078287360,1078287615,CA -1078287616,1078287807,US -1078287808,1078287839,CA -1078287840,1078287871,US -1078287872,1078288383,CA +1078280192,1078285008,CA +1078285009,1078285011,US +1078285012,1078288383,CA 1078288384,1078429695,US 1078429696,1078429951,GR 1078429952,1078438399,US @@ -21152,7 +21362,9 @@ 1079992320,1079993343,NL 1079993344,1080015871,US 1080015872,1080016383,GB -1080016384,1080033279,US +1080016384,1080016639,US +1080016640,1080016895,GB +1080016896,1080033279,US 1080033280,1080164351,KY 1080164352,1080165375,US 1080165376,1080168447,CA @@ -21373,11 +21585,17 @@ 1087509968,1087509971,FI 1087509972,1087514623,US 1087514624,1087516671,BB -1087516672,1087589119,US +1087516672,1087586967,US +1087586968,1087586971,NL +1087586972,1087586999,US +1087587000,1087587003,DE +1087587004,1087589119,US 1087589120,1087589247,GB 1087589248,1087591237,US 1087591238,1087591238,FR -1087591239,1087626111,US +1087591239,1087613115,US +1087613116,1087613119,FR +1087613120,1087626111,US 1087626112,1087626239,VI 1087626240,1087653887,US 1087653888,1087655935,VE @@ -21682,27 +21900,15 @@ 1093125120,1093125375,CA 1093125376,1093126143,US 1093126144,1093126399,CA -1093126400,1093128191,US +1093126400,1093127679,US +1093127680,1093127935,CA +1093127936,1093128191,US 1093128192,1093131775,CA -1093131776,1093132543,US -1093132544,1093133055,CA -1093133056,1093135359,US -1093135360,1093135615,CA -1093135616,1093135631,US -1093135632,1093135639,CA -1093135640,1093135871,US -1093135872,1093136639,CA -1093136640,1093136895,US -1093136896,1093137151,CA -1093137152,1093137663,US -1093137664,1093137791,CA -1093137792,1093137919,US -1093137920,1093138175,CA -1093138176,1093138303,US -1093138304,1093138319,CA -1093138320,1093139711,US -1093139712,1093140223,CA -1093140224,1093697535,US +1093131776,1093132287,US +1093132288,1093134335,CA +1093134336,1093135359,US +1093135360,1093140479,CA +1093140480,1093697535,US 1093697536,1093699071,BB 1093699072,1093700607,GD 1093700608,1093701631,VC @@ -21722,7 +21928,13 @@ 1093732538,1093732538,CA 1093732539,1093734053,US 1093734054,1093734054,PH -1093734055,1093943295,US +1093734055,1093767167,US +1093767168,1093767679,HK +1093767680,1093768703,US +1093768704,1093769215,HK +1093769216,1093787647,US +1093787648,1093791743,CA +1093791744,1093943295,US 1093943296,1093947391,IE 1093947392,1093959679,US 1093959680,1093967871,NL @@ -21844,7 +22056,9 @@ 1098891624,1098891631,AU 1098891632,1098892255,US 1098892256,1098892263,AU -1098892264,1100505127,US +1098892264,1100450825,US +1100450826,1100450829,DE +1100450830,1100505127,US 1100505128,1100505135,CA 1100505136,1100560647,US 1100560648,1100560655,TR @@ -22120,11 +22334,17 @@ 1112413696,1112414207,CA 1112414208,1112416255,US 1112416256,1112418303,CN -1112418304,1112419327,US +1112418304,1112418815,US +1112418816,1112419071,IT +1112419072,1112419327,FR 1112419328,1112419839,GB -1112419840,1112420351,US +1112419840,1112420095,US +1112420096,1112420351,GB 1112420352,1112422399,CN -1112422400,1112424447,US +1112422400,1112422655,US +1112422656,1112422911,FR +1112422912,1112423167,GB +1112423168,1112424447,US 1112432640,1112440831,CA 1112440832,1112498175,US 1112498176,1112506367,IR @@ -22136,10 +22356,7 @@ 1112867328,1112867583,BS 1112867584,1112869887,US 1112869888,1112870143,CA -1112870144,1112873471,US -1112873472,1112873933,AU -1112873934,1112873934,US -1112873935,1112873983,AU +1112870144,1112873983,US 1112873984,1112875007,CA 1112875008,1112875519,US 1112875520,1112875775,CA @@ -22188,7 +22405,9 @@ 1113855488,1113983249,US 1113983250,1113983250,RU 1113983251,1113983251,KG -1113983252,1113984643,US +1113983252,1113983364,US +1113983365,1113983365,LT +1113983366,1113984643,US 1113984644,1113984645,DE 1113984646,1113997311,US 1113997312,1114005503,CA @@ -22320,14 +22539,24 @@ 1117142272,1117142527,CA 1117142528,1117274111,US 1117274112,1117282303,CA -1117282304,1117454335,US +1117282304,1117413375,US +1117413376,1117415423,CA +1117415424,1117416703,US +1117416704,1117417471,CA +1117417472,1117417983,US +1117417984,1117418495,CA +1117418496,1117419007,US +1117419008,1117419519,CA +1117419520,1117454335,US 1117454336,1117454591,CA 1117454592,1117454847,US 1117454848,1117455619,CA 1117455620,1117455620,DE 1117455621,1117456383,CA 1117456384,1117457151,US -1117457152,1117458911,CA +1117457152,1117458751,CA +1117458752,1117458815,GB +1117458816,1117458911,CA 1117458912,1117458943,GB 1117458944,1117460223,CA 1117460224,1117460351,GB @@ -22335,7 +22564,15 @@ 1117460992,1117461247,GB 1117461248,1117469183,CA 1117469184,1117469439,US -1117469440,1117481471,CA +1117469440,1117478519,CA +1117478520,1117478520,DE +1117478521,1117478561,CA +1117478562,1117478562,DE +1117478563,1117478603,CA +1117478604,1117478604,DE +1117478605,1117478610,CA +1117478611,1117478611,DE +1117478612,1117481471,CA 1117481472,1117481983,US 1117481984,1117487103,CA 1117487104,1117683711,US @@ -22765,7 +23002,9 @@ 1137657856,1137659903,DE 1137659904,1137681583,US 1137681584,1137681599,AR -1137681600,1137704959,US +1137681600,1137688063,US +1137688064,1137688319,FR +1137688320,1137704959,US 1137704960,1137712383,CA 1137712384,1137712639,US 1137712640,1137713151,CA @@ -22831,7 +23070,44 @@ 1138415872,1138416127,CA 1138416128,1138419711,US 1138419712,1138419967,DE -1138419968,1138474239,US +1138419968,1138450959,US +1138450960,1138450967,JM +1138450968,1138451071,US +1138451072,1138451079,GB +1138451080,1138451103,US +1138451104,1138451111,DO +1138451112,1138451191,US +1138451192,1138451199,BE +1138451200,1138451767,US +1138451768,1138451775,IN +1138451776,1138451783,GB +1138451784,1138451847,US +1138451848,1138451855,RU +1138451856,1138451959,US +1138451960,1138451967,RU +1138451968,1138452007,US +1138452008,1138452015,DE +1138452016,1138452047,US +1138452048,1138452055,AU +1138452056,1138452063,GB +1138452064,1138452263,US +1138452264,1138452271,IN +1138452272,1138452287,US +1138452288,1138452295,GR +1138452296,1138452311,US +1138452312,1138452319,CA +1138452320,1138452335,US +1138452336,1138452351,CA +1138452352,1138452415,US +1138452416,1138452423,CA +1138452424,1138452431,FR +1138452432,1138452455,US +1138452456,1138452479,FR +1138452480,1138453247,US +1138453248,1138453255,CA +1138453256,1138453391,US +1138453392,1138453399,IS +1138453400,1138474239,US 1138474240,1138474751,CA 1138474752,1138499583,US 1138499584,1138503679,CA @@ -22874,7 +23150,9 @@ 1138940416,1138940671,CA 1138940672,1138941951,US 1138941952,1138950143,CA -1138950144,1138956799,US +1138950144,1138951679,US +1138951680,1138951935,GB +1138951936,1138956799,US 1138956800,1138957311,CA 1138957312,1138957823,US 1138957824,1138958079,NL @@ -22885,12 +23163,12 @@ 1138974720,1138974975,MX 1138974976,1138975231,US 1138975232,1138976767,MX -1138976768,1138978303,US +1138976768,1138977791,US +1138977792,1138978047,FR +1138978048,1138978303,IT 1138978304,1138978815,HK -1138978816,1138979071,US -1138979072,1138980863,DE -1138980864,1138981119,US -1138981120,1138982911,CN +1138978816,1138980863,DE +1138980864,1138982911,CN 1138982912,1139146751,US 1139146752,1139154943,GT 1139154944,1139167231,JM @@ -22987,90 +23265,128 @@ 1157755264,1157758207,US 1157758208,1157758463,RU 1157758464,1157910527,US -1157910528,1157910575,CA +1157910528,1157910543,CA +1157910544,1157910551,US +1157910552,1157910575,CA 1157910576,1157910591,US -1157910592,1157910639,CA +1157910592,1157910615,CA +1157910616,1157910627,US +1157910628,1157910639,CA 1157910640,1157910655,US -1157910656,1157910831,CA +1157910656,1157910791,CA +1157910792,1157910811,US +1157910812,1157910831,CA 1157910832,1157910847,US 1157910848,1157910863,CA 1157910864,1157910879,US -1157910880,1157911071,CA -1157911072,1157911103,US -1157911104,1157911279,CA -1157911280,1157911287,US -1157911288,1157911743,CA -1157911744,1157911759,US -1157911760,1157911775,CA +1157910880,1157910903,CA +1157910904,1157910911,US +1157910912,1157910927,CA +1157910928,1157910951,US +1157910952,1157910967,CA +1157910968,1157910975,US +1157910976,1157911063,CA +1157911064,1157911143,US +1157911144,1157911159,CA +1157911160,1157911167,US +1157911168,1157911207,CA +1157911208,1157911215,US +1157911216,1157911367,CA +1157911368,1157911391,US +1157911392,1157911495,CA +1157911496,1157911519,US +1157911520,1157911687,CA +1157911688,1157911703,US +1157911704,1157911775,CA 1157911776,1157911791,US -1157911792,1157911927,CA -1157911928,1157911935,US +1157911792,1157911895,CA +1157911896,1157911903,US +1157911904,1157911919,CA +1157911920,1157911935,US 1157911936,1157911951,CA 1157911952,1157911983,US 1157911984,1157912015,CA 1157912016,1157912031,US -1157912032,1157912215,CA -1157912216,1157912223,US -1157912224,1157912347,CA -1157912348,1157912348,US -1157912349,1157912391,CA -1157912392,1157912399,US -1157912400,1157912447,CA -1157912448,1157912463,US -1157912464,1157912647,CA +1157912032,1157912063,CA +1157912064,1157912071,US +1157912072,1157912119,CA +1157912120,1157912127,US +1157912128,1157912143,CA +1157912144,1157912151,US +1157912152,1157912327,CA +1157912328,1157912351,US +1157912352,1157912383,CA +1157912384,1157912399,US +1157912400,1157912423,CA +1157912424,1157912431,US +1157912432,1157912447,CA +1157912448,1157912467,US +1157912468,1157912527,CA +1157912528,1157912543,US +1157912544,1157912559,CA +1157912560,1157912567,US +1157912568,1157912583,CA +1157912584,1157912591,US +1157912592,1157912647,CA 1157912648,1157912671,US -1157912672,1157912687,CA -1157912688,1157912735,US +1157912672,1157912703,CA +1157912704,1157912735,US 1157912736,1157912743,CA 1157912744,1157912751,US -1157912752,1157912815,CA -1157912816,1157912823,US -1157912824,1157912831,CA -1157912832,1157912839,US -1157912840,1157912895,CA +1157912752,1157912807,CA +1157912808,1157912823,US +1157912824,1157912895,CA 1157912896,1157912911,US -1157912912,1157912943,CA -1157912944,1157912959,US -1157912960,1157913087,CA -1157913088,1157913151,US -1157913152,1157913231,CA -1157913232,1157913295,US -1157913296,1157913439,CA -1157913440,1157913455,US -1157913456,1157913471,CA +1157912912,1157912915,CA +1157912916,1157912919,US +1157912920,1157913055,CA +1157913056,1157913063,US +1157913064,1157913087,CA +1157913088,1157913119,US +1157913120,1157913167,CA +1157913168,1157913175,US +1157913176,1157913279,CA +1157913280,1157913295,US +1157913296,1157913359,CA +1157913360,1157913367,US +1157913368,1157913383,CA +1157913384,1157913407,US +1157913408,1157913415,CA +1157913416,1157913423,US +1157913424,1157913431,CA +1157913432,1157913439,US +1157913440,1157913471,CA 1157913472,1157913487,US 1157913488,1157913495,CA 1157913496,1157913503,US -1157913504,1157913583,CA +1157913504,1157913551,CA +1157913552,1157913567,US +1157913568,1157913583,CA 1157913584,1157913599,US -1157913600,1157913631,CA -1157913632,1157913647,US -1157913648,1157913663,CA -1157913664,1157913679,US -1157913680,1157913695,CA -1157913696,1157913711,US -1157913712,1157913759,CA -1157913760,1157913775,US -1157913776,1157913919,CA -1157913920,1157913943,US -1157913944,1157914031,CA +1157913600,1157913619,CA +1157913620,1157913623,US +1157913624,1157913663,CA +1157913664,1157913687,US +1157913688,1157913743,CA +1157913744,1157913751,US +1157913752,1157913767,CA +1157913768,1157913775,US +1157913776,1157914031,CA 1157914032,1157914047,US -1157914048,1157914079,CA -1157914080,1157914095,US -1157914096,1157914143,CA +1157914048,1157914127,CA +1157914128,1157914135,US +1157914136,1157914143,CA 1157914144,1157914175,US -1157914176,1157914183,CA -1157914184,1157914194,US +1157914176,1157914194,CA 1157914195,1157914202,IN -1157914203,1157914223,US +1157914203,1157914207,CA +1157914208,1157914223,US 1157914224,1157914239,CA 1157914240,1157914255,US -1157914256,1157914303,CA -1157914304,1157914335,US -1157914336,1157914351,CA +1157914256,1157914351,CA 1157914352,1157914367,US -1157914368,1157914431,CA -1157914432,1157931007,US +1157914368,1157914623,CA +1157914624,1157931007,US 1157931008,1157935103,BS 1157935104,1157943295,US 1157943296,1157947391,CA @@ -23241,65 +23557,77 @@ 1161426944,1161427967,AI 1161427968,1161428223,AG 1161428224,1161428991,KN -1161428992,1161429047,CA -1161429048,1161429055,US -1161429056,1161429111,CA +1161428992,1161428999,CA +1161429000,1161429007,US +1161429008,1161429055,CA +1161429056,1161429071,US +1161429072,1161429103,CA +1161429104,1161429107,US +1161429108,1161429111,CA 1161429112,1161429135,US -1161429136,1161429151,CA -1161429152,1161429167,US -1161429168,1161429175,CA +1161429136,1161429175,CA 1161429176,1161429199,US 1161429200,1161429215,CA 1161429216,1161429255,US -1161429256,1161429263,CA -1161429264,1161429279,US -1161429280,1161429295,CA -1161429296,1161429327,US -1161429328,1161429335,CA -1161429336,1161429351,US +1161429256,1161429287,CA +1161429288,1161429295,US +1161429296,1161429343,CA +1161429344,1161429351,US 1161429352,1161429375,CA 1161429376,1161429407,US -1161429408,1161429431,CA -1161429432,1161429439,US -1161429440,1161429535,CA -1161429536,1161429543,US -1161429544,1161429551,CA -1161429552,1161429599,US -1161429600,1161429631,CA -1161429632,1161429663,US +1161429408,1161429439,CA +1161429440,1161429447,US +1161429448,1161429455,CA +1161429456,1161429463,US +1161429464,1161429487,CA +1161429488,1161429503,US +1161429504,1161429551,CA +1161429552,1161429583,US +1161429584,1161429647,CA +1161429648,1161429663,US 1161429664,1161429695,CA 1161429696,1161429711,US 1161429712,1161429719,FI 1161429720,1161429727,US 1161429728,1161429759,CA 1161429760,1161429775,US -1161429776,1161429855,CA -1161429856,1161429863,US -1161429864,1161429887,CA -1161429888,1161429903,US -1161429904,1161429983,CA -1161429984,1161430015,US -1161430016,1161430111,CA -1161430112,1161430159,US -1161430160,1161430191,CA -1161430192,1161430207,US -1161430208,1161430431,CA +1161429776,1161430039,CA +1161430040,1161430047,US +1161430048,1161430111,CA +1161430112,1161430175,US +1161430176,1161430183,CA +1161430184,1161430207,US +1161430208,1161430247,CA +1161430248,1161430263,US +1161430264,1161430307,CA +1161430308,1161430311,US +1161430312,1161430343,CA +1161430344,1161430359,US +1161430360,1161430415,CA +1161430416,1161430423,US +1161430424,1161430431,CA 1161430432,1161430447,US -1161430448,1161430455,CA -1161430456,1161430463,US -1161430464,1161430527,CA +1161430448,1161430511,CA +1161430512,1161430519,US +1161430520,1161430527,CA 1161430528,1161430543,US -1161430544,1161430559,CA -1161430560,1161430567,US -1161430568,1161430575,CA +1161430544,1161430575,CA 1161430576,1161430591,US -1161430592,1161430799,CA +1161430592,1161430647,CA +1161430648,1161430655,US +1161430656,1161430719,CA +1161430720,1161430723,US +1161430724,1161430743,CA +1161430744,1161430747,US +1161430748,1161430799,CA 1161430800,1161430815,US -1161430816,1161430847,CA -1161430848,1161430911,US -1161430912,1161430943,CA -1161430944,1161431007,US -1161431008,1161431295,CA +1161430816,1161430879,CA +1161430880,1161430911,US +1161430912,1161430927,CA +1161430928,1161430935,US +1161430936,1161430943,CA +1161430944,1161430975,US +1161430976,1161431295,CA 1161431296,1161432063,US 1161432064,1161432831,CA 1161432832,1161433087,US @@ -23325,11 +23653,7 @@ 1161818112,1161822207,CA 1161822208,1161830852,US 1161830853,1161830853,BZ -1161830854,1161831181,US -1161831182,1161831182,BZ -1161831183,1161835109,US -1161835110,1161835110,BZ -1161835111,1161835226,US +1161830854,1161835226,US 1161835227,1161835227,BZ 1161835228,1161835230,US 1161835231,1161835231,PH @@ -23524,9 +23848,7 @@ 1168229376,1168229631,JP 1168229632,1168279295,US 1168279296,1168279359,CA -1168279360,1168321535,US -1168321536,1168321791,CA -1168321792,1168420863,US +1168279360,1168420863,US 1168420864,1168424959,CA 1168424960,1168461823,US 1168461824,1168465919,CA @@ -23546,7 +23868,8 @@ 1168698112,1168698367,GB 1168698368,1168727551,US 1168727552,1168727807,ES -1168727808,1168851967,US +1168727808,1168850943,US +1168850944,1168851967,HK 1168851968,1168855039,CA 1168855040,1168859135,US 1168859136,1168863231,CA @@ -23606,7 +23929,9 @@ 1170355200,1170357247,US 1170357248,1170358271,CA 1170358272,1170374655,AE -1170374656,1170461135,US +1170374656,1170382847,US +1170382848,1170386943,HK +1170386944,1170461135,US 1170461136,1170461151,SV 1170461152,1170461183,US 1170461184,1170461695,CO @@ -23635,7 +23960,7 @@ 1176631552,1176632063,US 1176632064,1176632319,CA 1176632320,1176632575,US -1176632576,1176632831,CA +1176632576,1176632831,GB 1176632832,1176731647,US 1176731648,1176735743,PR 1176735744,1176736767,US @@ -24042,7 +24367,7 @@ 1248979712,1248979967,IE 1248979968,1248997375,US 1248997376,1248998399,ID -1248998912,1249003519,US +1248998400,1249003519,US 1249003520,1249005567,CA 1249005568,1249010687,US 1249010688,1249011711,CA @@ -24407,8 +24732,8 @@ 1279975936,1279976447,US 1279976448,1279976959,CA 1279976960,1279977215,US -1279977216,1279978495,CA -1279978496,1279979775,US +1279977216,1279979519,CA +1279979520,1279979775,US 1279979776,1279980031,CA 1279980032,1279980287,US 1279980288,1279981567,CA @@ -24525,7 +24850,9 @@ 1296245760,1296246783,IE 1296246784,1296247295,NL 1296247296,1296247807,DE -1296247808,1296248447,IE +1296247808,1296247999,IE +1296248000,1296248015,ES +1296248016,1296248447,IE 1296248448,1296248575,DE 1296248576,1296248703,IE 1296248704,1296248831,FR @@ -24563,10 +24890,14 @@ 1296251392,1296251775,NL 1296251776,1296252479,IE 1296252480,1296252487,ES -1296252488,1296252535,IE +1296252488,1296252503,IE +1296252504,1296252507,DE +1296252508,1296252535,IE 1296252536,1296252543,IT 1296252544,1296252551,FR -1296252552,1296252591,IE +1296252552,1296252571,IE +1296252572,1296252575,DE +1296252576,1296252591,IE 1296252592,1296252595,GB 1296252596,1296252599,IE 1296252600,1296252607,GB @@ -24890,7 +25221,8 @@ 1297735680,1297743871,MD 1297743872,1297760255,DE 1297760256,1297776639,LT -1297776640,1297793023,DE +1297776640,1297782783,DE +1297782784,1297793023,PT 1297793024,1297809407,UA 1297809408,1297825791,PL 1297825792,1297838079,RU @@ -24972,11 +25304,7 @@ 1298137088,1298661375,GB 1298661376,1298677759,FR 1298677760,1298694143,IR -1298694144,1298706175,US -1298706176,1298706431,GB -1298706432,1298706687,US -1298706688,1298706943,GB -1298706944,1298710527,US +1298694144,1298710527,US 1298710528,1298726911,CZ 1298726912,1298743295,RS 1298743296,1298757631,FI @@ -25116,7 +25444,9 @@ 1307191552,1307192063,US 1307192064,1307192319,GB 1307192320,1307192575,US -1307192576,1307192831,DE +1307192576,1307192755,DE +1307192756,1307192756,AF +1307192757,1307192831,DE 1307192832,1307193343,US 1307193344,1307195391,NO 1307195392,1307197439,CH @@ -25400,7 +25730,9 @@ 1310277632,1310310399,RU 1310310400,1310326783,GB 1310326784,1310343167,NO -1310343168,1310359551,IT +1310343168,1310358783,IT +1310358784,1310359039,US +1310359040,1310359551,IT 1310359552,1310392319,UA 1310392320,1310408703,NL 1310408704,1310425087,FI @@ -25471,7 +25803,9 @@ 1311253480,1311253487,IT 1311253488,1311254007,GB 1311254008,1311254015,IT -1311254016,1311254527,GB +1311254016,1311254319,GB +1311254320,1311254327,IT +1311254328,1311254527,GB 1311254528,1311256575,SE 1311256576,1311258623,FR 1311258624,1311260671,GB @@ -25669,7 +26003,9 @@ 1317617664,1317625855,YE 1317625856,1317627903,DE 1317627904,1317629951,RU -1317629952,1317642239,GB +1317629952,1317636877,GB +1317636878,1317636878,IE +1317636879,1317642239,GB 1317642240,1317642495,IE 1317642496,1317643316,GB 1317643317,1317643317,IE @@ -25923,11 +26259,12 @@ 1332614656,1332614783,UA 1332614784,1332614911,KZ 1332614912,1332615423,RO -1332615424,1332616191,UA +1332615424,1332615679,UA +1332615680,1332616191,RO 1332616192,1332616319,GB 1332616320,1332616447,US 1332616448,1332616703,CZ -1332616704,1332616959,NL +1332616704,1332616959,DE 1332616960,1332617087,RU 1332617088,1332617215,CA 1332617216,1332621311,CZ @@ -26013,7 +26350,9 @@ 1334379972,1334379975,DE 1334379976,1334380031,FR 1334380032,1334380287,PL -1334380288,1334381823,FR +1334380288,1334380447,FR +1334380448,1334380463,LT +1334380464,1334381823,FR 1334381824,1334381839,IT 1334381840,1334381887,FR 1334381888,1334381919,IT @@ -26032,13 +26371,14 @@ 1334384000,1334384031,CZ 1334384032,1334384063,FI 1334384064,1334384095,LT -1334384096,1334384735,FR +1334384096,1334384335,FR +1334384336,1334384343,ES +1334384344,1334384735,FR 1334384736,1334384767,BE 1334384768,1334384799,PL 1334384800,1334384831,ES 1334384832,1334384863,DE -1334384864,1334384991,FR -1334384992,1334385007,GB +1334384864,1334385007,FR 1334385008,1334385023,BE 1334385024,1334385055,IT 1334385056,1334385695,FR @@ -26117,7 +26457,9 @@ 1334407296,1334407359,IT 1334407360,1334408191,FR 1334408192,1334408255,ES -1334408256,1334408319,FR +1334408256,1334408279,FR +1334408280,1334408287,ES +1334408288,1334408319,FR 1334408320,1334408351,FI 1334408352,1334408367,LT 1334408368,1334408383,FR @@ -26315,14 +26657,13 @@ 1336786944,1336803327,JO 1336811520,1336827903,RU 1336827904,1336836095,AT -1336836096,1336836351,NL -1336836352,1336837119,BE -1336837120,1336837183,NL +1336836096,1336837119,BE +1336837120,1336837151,NL +1336837152,1336837183,BE 1336837184,1336837191,FR 1336837192,1336837199,NL 1336837200,1336837207,GB -1336837208,1336837375,NL -1336837376,1336838143,BE +1336837208,1336838143,BE 1336838144,1336842239,DE 1336842240,1336844287,DK 1336844288,1336846335,IR @@ -26373,7 +26714,9 @@ 1342834688,1342842879,JO 1342842880,1342844927,FR 1342844928,1342853119,JO -1342853120,1342869503,FR +1342853120,1342860799,FR +1342860800,1342861055,RE +1342861056,1342869503,FR 1342869504,1342871551,JO 1342871552,1342875647,FR 1342875648,1342877695,JO @@ -26888,7 +27231,13 @@ 1347481600,1347485695,AT 1347485696,1347493887,DE 1347493888,1347502079,LV -1347502080,1347505159,ES +1347502080,1347504639,ES +1347504640,1347504671,SG +1347504672,1347504682,ES +1347504683,1347504683,FR +1347504684,1347504777,ES +1347504778,1347504779,GB +1347504780,1347505159,ES 1347505160,1347505167,GB 1347505168,1347505215,ES 1347505216,1347505247,GB @@ -27017,6 +27366,7 @@ 1347936256,1347940351,FR 1347940352,1347944447,BA 1347944448,1347944959,ZA +1347944960,1347945215,UG 1347945216,1347945471,ZM 1347945472,1347945983,KE 1347945984,1347946239,MU @@ -27290,7 +27640,10 @@ 1355937792,1355938815,PL 1355938816,1355939327,NL 1355939584,1355939839,ES -1355939840,1356005375,DK +1355939840,1355956223,IR +1355956224,1355964415,DK +1355964416,1355972607,IT +1355972608,1356005375,IR 1356005376,1356054527,IT 1356054528,1356062719,CZ 1356062720,1356068863,IT @@ -27403,7 +27756,7 @@ 1357375600,1357375615,GB 1357377536,1357377679,FR 1357377696,1357378647,FR -1357378656,1357378671,FR +1357378656,1357378687,FR 1357378816,1357379071,FR 1357381632,1357414399,NO 1357414400,1357447167,LV @@ -27571,7 +27924,10 @@ 1358290944,1358295039,SE 1358295040,1358299135,RU 1358299136,1358303231,DZ -1358303232,1358307327,RU +1358303232,1358306303,RU +1358306304,1358306815,GB +1358306816,1358307071,PT +1358307072,1358307327,RU 1358307328,1358315519,DE 1358315520,1358323711,RU 1358323712,1358327807,LU @@ -28687,7 +29043,13 @@ 1382422272,1382422527,BG 1382422528,1382422783,CH 1382422784,1382423039,SG -1382423040,1382424575,GB +1382423040,1382423167,IT +1382423168,1382423295,ES +1382423296,1382423551,NO +1382423552,1382423807,JP +1382423808,1382423935,US +1382423936,1382424063,GB +1382424064,1382424575,US 1382424576,1382449151,CY 1382449152,1382465535,IL 1382465536,1382481919,PS @@ -28790,9 +29152,7 @@ 1383563264,1383571455,RU 1383571456,1383579647,DE 1383579648,1383587839,IT -1383587840,1383589887,PL -1383589888,1383590911,SK -1383590912,1383591935,PL +1383587840,1383591935,SK 1383591936,1383596031,CZ 1383596032,1384120319,FR 1384120320,1384153087,NG @@ -29165,7 +29525,9 @@ 1388744832,1388744847,IE 1388744848,1388745971,GB 1388745972,1388745975,IE -1388745976,1388746495,GB +1388745976,1388746207,GB +1388746208,1388746223,IE +1388746224,1388746495,GB 1388746496,1388746559,IE 1388746560,1388746911,GB 1388746912,1388746927,IE @@ -29715,12 +30077,19 @@ 1404103680,1404108799,LT 1404108800,1404116991,HR 1404116992,1404125183,LT -1404125184,1404133375,HR -1404133376,1404141567,SE +1404125184,1404141567,HR 1404141568,1404149759,LV -1404149760,1404151807,SE -1404151808,1404170239,LV -1404170240,1404174335,SE +1404149760,1404151807,LT +1404151808,1404153855,LV +1404153856,1404153856,LT +1404153857,1404157090,LV +1404157091,1404157091,LT +1404157092,1404157951,LV +1404157952,1404157952,LT +1404157953,1404166143,LV +1404166144,1404166144,LT +1404166145,1404170239,LV +1404170240,1404174335,LT 1404174336,1404182527,EE 1404182528,1404187519,SE 1404187520,1404187535,LV @@ -29731,9 +30100,7 @@ 1404194816,1404198911,LT 1404198912,1404200959,SE 1404200960,1404207103,HR -1404207104,1404209151,SE -1404209152,1404210175,LV -1404210176,1404211199,SE +1404207104,1404211199,SE 1404211200,1404212223,LV 1404212224,1404217343,SE 1404217344,1404219391,LV @@ -29743,13 +30110,24 @@ 1404222464,1404222975,LV 1404222976,1404227071,SE 1404227072,1404231679,LV -1404231680,1404231935,SE -1404231936,1404233215,LV +1404231680,1404232703,SE +1404232704,1404233215,LV 1404233216,1404234239,SE 1404234240,1404239871,HR -1404239872,1404242687,EE +1404239872,1404239872,LT +1404239873,1404242687,EE 1404242688,1404242751,SE -1404242752,1404313599,EE +1404242752,1404249572,EE +1404249573,1404249573,LT +1404249574,1404251450,EE +1404251451,1404251451,LT +1404251452,1404258945,EE +1404258946,1404258946,LT +1404258947,1404263186,EE +1404263187,1404263187,LT +1404263188,1404265888,EE +1404265889,1404265889,LT +1404265890,1404313599,EE 1404313600,1404321791,HR 1404321792,1404338175,EE 1404338176,1404340223,SE @@ -30295,9 +30673,7 @@ 1411872768,1411874815,NL 1411874816,1411876863,RU 1411878912,1411880959,CH -1411880960,1411880990,DE -1411880991,1411880991,GB -1411880992,1411881215,DE +1411880960,1411881215,DE 1411881216,1411881471,GB 1411883008,1411887103,PL 1411887104,1411889151,IR @@ -30463,7 +30839,9 @@ 1424607744,1424607775,DE 1424607776,1424608083,GB 1424608084,1424608087,FR -1424608088,1424608671,GB +1424608088,1424608579,GB +1424608580,1424608580,ES +1424608581,1424608671,GB 1424608672,1424608687,ES 1424608688,1424608743,GB 1424608744,1424608751,ES @@ -30553,7 +30931,8 @@ 1425430528,1425432575,SE 1425432576,1425434623,HR 1425434624,1425436671,FR -1425436672,1425438719,GB +1425436672,1425438463,GB +1425438464,1425438719,IN 1425438720,1425440767,DE 1425440768,1425442815,SE 1425442816,1425444863,GB @@ -31058,7 +31437,8 @@ 1438384128,1438400511,FI 1438400512,1438433279,SE 1438433280,1438515199,GB -1438515200,1438539775,DE +1438515200,1438531583,DE +1438531584,1438539775,FR 1438539776,1438547967,NL 1438547968,1438553343,DE 1438553344,1438553599,GB @@ -31376,9 +31756,11 @@ 1441529856,1441538047,RU 1441538048,1441546239,DE 1441546240,1441554431,DK -1441554432,1441556991,GB +1441554432,1441556479,GB +1441556480,1441556991,DE 1441556992,1441557503,SE -1441557504,1441564671,GB +1441557504,1441558015,NL +1441558016,1441564671,GB 1441564672,1441566719,NL 1441566720,1441568767,GB 1441568768,1441570815,FR @@ -31484,7 +31866,8 @@ 1449590784,1449656319,DE 1449656320,1449657087,GB 1449657088,1449659903,RO -1449659904,1449660415,BG +1449659904,1449660159,NL +1449660160,1449660415,BG 1449660416,1449661439,RO 1449661440,1449662463,US 1449662464,1449663487,ES @@ -31599,7 +31982,8 @@ 1449789440,1449790207,GB 1449790208,1449790719,RO 1449790720,1449791487,GB -1449791488,1449793279,RO +1449791488,1449791743,ES +1449791744,1449793279,RO 1449793280,1449793535,NL 1449793536,1449794047,IR 1449794048,1449794303,PH @@ -31633,7 +32017,8 @@ 1449823744,1449823999,BG 1449824000,1449824255,RO 1449824256,1449826303,MD -1449826304,1449828351,RO +1449826304,1449827327,US +1449827328,1449828351,RO 1449828352,1449830399,SE 1449830400,1449831935,RO 1449831936,1449832447,GB @@ -31838,7 +32223,9 @@ 1467466752,1467472895,DE 1467472896,1467473919,NL 1467473920,1467482111,RU -1467482112,1467502591,BG +1467482112,1467484927,BG +1467484928,1467485183,IL +1467485184,1467502591,BG 1467502592,1467503615,DE 1467503616,1467525119,BG 1467525120,1467527167,DE @@ -31957,10 +32344,8 @@ 1475203072,1475205119,SE 1475205120,1475205887,DE 1475205888,1475206143,US -1475206144,1475207199,DE -1475207200,1475207263,AE -1475207264,1475207295,US -1475207296,1475207423,AE +1475206144,1475207167,DE +1475207168,1475207423,AE 1475207424,1475207679,GR 1475207680,1475209215,AE 1475209216,1475211263,UZ @@ -32010,13 +32395,13 @@ 1475315712,1475317759,US 1475317760,1475319807,RU 1475319808,1475321855,BG -1475321856,1475323903,RO +1475321856,1475323903,FR 1475323904,1475327999,PL 1475328000,1475330047,NL 1475330048,1475332095,PL 1475332096,1475336191,CH 1475336192,1475338239,PL -1475338240,1475340287,RO +1475338240,1475340287,DE 1475340288,1475342335,GR 1475342336,1475344383,PL 1475344384,1475344639,ES @@ -32099,8 +32484,8 @@ 1475735487,1475738111,GB 1475738112,1475738879,RU 1475738880,1475739647,GB -1475739648,1475750399,BG -1475750400,1475750911,IQ +1475739648,1475749887,BG +1475749888,1475750911,IQ 1475750912,1475756031,BG 1475756032,1475772415,GB 1475772416,1475788799,LV @@ -32147,7 +32532,9 @@ 1476012239,1476012239,RS 1476012240,1476012250,XK 1476012251,1476012251,RS -1476012252,1476012287,XK +1476012252,1476012278,XK +1476012279,1476012279,RS +1476012280,1476012287,XK 1476012288,1476014079,RS 1476014080,1476014127,XK 1476014128,1476014135,RS @@ -32173,11 +32560,9 @@ 1476132864,1476141055,FR 1476141056,1476149247,GB 1476149248,1476157439,NO -1476157440,1476159743,BH -1476159744,1476159951,GB -1476159952,1476159983,BH -1476159984,1476165119,GB -1476165120,1476165631,BH +1476157440,1476160511,BH +1476160512,1476163583,GB +1476163584,1476165631,BH 1476165632,1476173823,HR 1476173824,1476182015,BG 1476182016,1476186367,GB @@ -32260,9 +32645,7 @@ 1481867264,1481875455,SE 1481875456,1481883647,CZ 1481883648,1481891839,RU -1481891840,1481893631,CZ -1481893632,1481893887,SK -1481893888,1481900031,CZ +1481891840,1481900031,CZ 1481900032,1481908223,CH 1481908224,1481916415,NO 1481916416,1481924607,ES @@ -32403,8 +32786,10 @@ 1489648384,1489648639,GR 1489649664,1489653247,FR 1489655296,1489655551,GR -1489657856,1489659647,IT +1489657856,1489658879,CM +1489658880,1489659647,KE 1489659648,1489661951,FR +1489661952,1489662975,NG 1489662976,1489663487,IT 1489664256,1489664511,GB 1489664512,1489664767,LY @@ -32965,7 +33350,8 @@ 1495573504,1495574527,KZ 1495574528,1495575039,RO 1495575040,1495575551,CH -1495575552,1495576575,RO +1495575552,1495575807,NL +1495575808,1495576575,RO 1495576576,1495580671,IR 1495580672,1495581183,RO 1495581184,1495581695,IR @@ -33121,7 +33507,9 @@ 1495766528,1495766783,DE 1495766784,1495767039,RO 1495767040,1495769087,ES -1495769088,1495771135,RO +1495769088,1495769599,RO +1495769600,1495770623,NL +1495770624,1495771135,RO 1495771136,1495772159,PL 1495772160,1495772671,US 1495772672,1495774207,RO @@ -33134,7 +33522,7 @@ 1495781888,1495782911,GB 1495782912,1495783167,RO 1495783168,1495783423,GB -1495783424,1495785471,RO +1495783424,1495785471,ES 1495785472,1495789567,IT 1495789568,1495789823,PL 1495789824,1495790079,GB @@ -33195,7 +33583,9 @@ 1495848192,1495848447,PL 1495848448,1495848959,RO 1495848960,1495849471,SE -1495849472,1495852031,RO +1495849472,1495849983,RO +1495849984,1495850495,US +1495850496,1495852031,RO 1495852032,1495853055,MD 1495853056,1495853567,RO 1495853568,1495854079,IT @@ -33265,7 +33655,8 @@ 1495951360,1495952383,MD 1495952384,1495953919,RO 1495953920,1495954175,GB -1495954176,1495957503,RO +1495954176,1495955455,RO +1495955456,1495957503,ES 1495957504,1495958527,MD 1495958528,1495959551,RO 1495959552,1495960575,IR @@ -33490,7 +33881,8 @@ 1496242176,1496243199,IR 1496243200,1496248575,RO 1496248576,1496248831,MD -1496248832,1496251391,RO +1496248832,1496250367,RO +1496250368,1496251391,US 1496251392,1496252415,GR 1496252416,1496252671,RO 1496252672,1496252927,NL @@ -33530,7 +33922,7 @@ 1496312832,1496313855,ES 1496313856,1496315647,RO 1496315648,1496315903,GB -1496315904,1496316159,RO +1496315904,1496316159,RS 1496316160,1496316415,GB 1496316416,1496317951,RO 1496317952,1497366527,DE @@ -33642,7 +34034,8 @@ 1502674944,1502691327,DE 1502691328,1502707711,GB 1502707712,1502715903,RU -1502715904,1502717951,CH +1502715904,1502716927,DE +1502716928,1502717951,CH 1502717952,1502719999,GB 1502720000,1502722047,FR 1502722048,1502724095,TR @@ -33745,9 +34138,7 @@ 1503901568,1503901695,TW 1503901696,1503902215,DE 1503902216,1503902223,US -1503902224,1503905551,DE -1503905552,1503905559,CH -1503905560,1503906343,DE +1503902224,1503906343,DE 1503906344,1503906351,AT 1503906352,1503906407,DE 1503906408,1503906415,MX @@ -33849,7 +34240,9 @@ 1505705984,1505714175,DE 1505714176,1505722367,LV 1505722368,1505738751,PL -1505738752,1505751039,GB +1505738752,1505746943,GB +1505746944,1505748991,BG +1505748992,1505751039,DE 1505751040,1505755135,RU 1505755136,1506017279,GB 1506017280,1506082815,IR @@ -34578,12 +34971,28 @@ 1518541481,1518542847,SE 1518542848,1518565375,LT 1518565376,1518567423,SE -1518567424,1518583807,LV +1518567424,1518575615,LV +1518575616,1518575616,LT +1518575617,1518577814,LV +1518577815,1518577815,LT +1518577816,1518579711,LV +1518579712,1518579712,LT +1518579713,1518583807,LV 1518583808,1518600191,HR 1518600192,1518641151,SE 1518641152,1518649343,HR 1518649344,1518665727,SE -1518665728,1518723071,LV +1518665728,1518698495,LV +1518698496,1518698496,LT +1518698497,1518698960,LV +1518698961,1518698961,LT +1518698962,1518706687,LV +1518706688,1518706688,LT +1518706689,1518708837,LV +1518708838,1518708838,LT +1518708839,1518709552,LV +1518709553,1518709553,LT +1518709554,1518723071,LV 1518723072,1518727167,EE 1518727168,1518731263,SE 1518731264,1518780415,LT @@ -34610,8 +35019,8 @@ 1519206400,1519208703,SE 1519208704,1519209471,LV 1519209472,1519210495,SE -1519210496,1519214591,LT -1519214592,1519271935,SE +1519210496,1519222783,LT +1519222784,1519271935,SE 1519271936,1519288319,NL 1519288320,1519292415,SE 1519292416,1519294463,LT @@ -34904,7 +35313,10 @@ 1533882368,1533886463,IT 1533886464,1533894655,RU 1533894656,1533896703,ES -1533896704,1533900799,PT +1533896704,1533898751,IR +1533898752,1533899775,PT +1533899776,1533900031,GB +1533900032,1533900799,PT 1533900800,1533902847,FR 1533902848,1533911039,RU 1533911040,1533913087,ES @@ -34990,7 +35402,9 @@ 1534718032,1534718047,ES 1534718048,1534718087,FR 1534718088,1534718091,ES -1534718092,1534718127,FR +1534718092,1534718103,FR +1534718104,1534718111,ES +1534718112,1534718127,FR 1534718128,1534718143,ES 1534718144,1534718415,FR 1534718416,1534718419,ES @@ -35000,8 +35414,8 @@ 1534718736,1534718763,FR 1534718764,1534718767,ES 1534718768,1534718783,FR -1534718784,1534718815,ES -1534718816,1534719071,FR +1534718784,1534718807,ES +1534718808,1534719071,FR 1534719072,1534719075,FI 1534719076,1534719339,FR 1534719340,1534719343,ES @@ -35060,8 +35474,8 @@ 1534988288,1535049727,ES 1535049728,1535115263,SK 1535115264,1535116287,AT -1535116288,1535131647,SE -1535131648,1535148031,HR +1535116288,1535123455,SE +1535123456,1535148031,HR 1535148032,1535197183,AT 1535197184,1535203359,EE 1535203360,1535205375,SE @@ -35156,9 +35570,13 @@ 1535547159,1535547159,IT 1535547160,1535547167,FR 1535547168,1535547183,IT -1535547184,1535547407,FR +1535547184,1535547199,FR +1535547200,1535547207,ES +1535547208,1535547407,FR 1535547408,1535547423,DE -1535547424,1535548091,FR +1535547424,1535547471,FR +1535547472,1535547487,LT +1535547488,1535548091,FR 1535548092,1535548095,PL 1535548096,1535548159,IT 1535548160,1535548223,FR @@ -35195,7 +35613,9 @@ 1535551904,1535551919,NL 1535551920,1535551999,FR 1535552000,1535552127,IT -1535552128,1535552463,FR +1535552128,1535552215,FR +1535552216,1535552223,ES +1535552224,1535552463,FR 1535552464,1535552479,NL 1535552480,1535552895,FR 1535552896,1535553023,DE @@ -35819,7 +36239,8 @@ 1539506688,1539507199,UA 1539507200,1539508223,RO 1539508224,1539508735,NO -1539508736,1539509759,UA +1539508736,1539509247,UA +1539509248,1539509759,PL 1539509760,1539510271,RO 1539510272,1539510783,RU 1539510784,1539511295,LU @@ -37432,7 +37853,8 @@ 1540548608,1540549631,IE 1540549632,1540552703,PL 1540552704,1540553727,UA -1540553728,1540555775,RU +1540553728,1540554751,RU +1540554752,1540555775,SE 1540555776,1540556799,UZ 1540556800,1540557823,DE 1540557824,1540558848,UA @@ -38730,7 +39152,8 @@ 1541212672,1541213183,MT 1541213184,1541213695,DE 1541213696,1541214207,UA -1541214208,1541215743,RU +1541214208,1541215231,RU +1541215232,1541215743,LV 1541215744,1541216255,SA 1541216256,1541216767,RU 1541216768,1541217279,PL @@ -39580,7 +40003,9 @@ 1541723648,1541723903,NO 1541723904,1541724159,BE 1541724160,1541725183,UA -1541725184,1541727487,RU +1541725184,1541726207,RU +1541726208,1541726719,KZ +1541726720,1541727487,RU 1541727488,1541727743,UA 1541727744,1541727999,RU 1541728256,1541729023,GB @@ -39992,7 +40417,8 @@ 1541960704,1541962751,RU 1541962752,1541963263,GB 1541963264,1541963519,RU -1541963520,1541964031,UA +1541963520,1541963775,PL +1541963776,1541964031,UA 1541964288,1541964543,NL 1541964544,1541965823,RU 1541965824,1541966847,US @@ -40838,7 +41264,7 @@ 1542464512,1542464767,RU 1542464768,1542465023,TR 1542465024,1542465535,RU -1542465536,1542466559,XK +1542465536,1542466559,RS 1542466560,1542466815,PL 1542466816,1542467071,RU 1542467072,1542467583,PL @@ -41108,7 +41534,7 @@ 1542837504,1542837759,UA 1542837760,1542838015,RS 1542838016,1542838271,DE -1542838272,1542838783,UA +1542838272,1542838783,GB 1542838784,1542839039,DK 1542839040,1542839295,PL 1542839296,1542839551,DE @@ -41210,14 +41636,15 @@ 1546015488,1546015743,GB 1546015744,1546015999,CZ 1546016000,1546016255,DE -1546016256,1546016767,CZ -1546016768,1546017791,IT +1546016256,1546017791,CZ 1546017792,1546017969,RU 1546017970,1546017970,CZ 1546017971,1546018303,RU 1546018304,1546018815,FR 1546018816,1546027007,UA -1546027008,1546059775,RU +1546027008,1546028543,RU +1546028544,1546028799,KR +1546028800,1546059775,RU 1546059776,1546063871,SE 1546063872,1546067967,DE 1546067968,1546072063,SE @@ -41270,9 +41697,7 @@ 1546283828,1546283835,FR 1546283836,1546284287,DE 1546284288,1546284291,FR -1546284292,1546284469,DE -1546284470,1546284471,FR -1546284472,1546285055,DE +1546284292,1546285055,DE 1546285056,1546287103,PL 1546287104,1546289151,GB 1546289152,1546291199,RU @@ -41468,9 +41893,7 @@ 1547665408,1547669503,GB 1547669504,1547673599,AT 1547673600,1547677695,NL -1547677696,1547683071,RU -1547683072,1547683327,UA -1547683328,1547683839,RU +1547677696,1547683839,RU 1547683840,1547683967,PL 1547683968,1547684031,EE 1547684032,1547684095,LV @@ -41684,7 +42107,8 @@ 1558133760,1558134015,RU 1558134016,1558134271,KR 1558134272,1558134783,JP -1558134784,1558135295,LU +1558134784,1558135039,RU +1558135040,1558135295,LU 1558135296,1558135551,US 1558135552,1558135552,RU 1558135553,1558135807,LU @@ -42033,7 +42457,9 @@ 1566452052,1566452052,CH 1566452053,1566452053,GB 1566452054,1566452057,UA -1566452058,1566453759,IL +1566452058,1566452479,IL +1566452480,1566452735,IE +1566452736,1566453759,IL 1566453760,1566455807,IQ 1566455808,1566457855,PT 1566457856,1566459903,CH @@ -42104,7 +42530,11 @@ 1567293440,1567358975,IE 1567358976,1567424511,PT 1567424512,1567490047,CY -1567490048,1567555583,IR +1567490048,1567531007,IR +1567531008,1567532031,GB +1567532032,1567535103,IR +1567535104,1567539199,GB +1567539200,1567555583,IR 1567555584,1567621119,AT 1567621120,1567686655,SA 1567686656,1567690751,RO @@ -42114,7 +42544,8 @@ 1567696640,1567696895,ES 1567696896,1567698175,RO 1567698176,1567698431,SE -1567698432,1567698943,RO +1567698432,1567698687,XK +1567698688,1567698943,RO 1567698944,1567699967,ES 1567699968,1567702015,RO 1567702016,1567703039,TR @@ -42343,9 +42774,9 @@ 1568555008,1568571391,UA 1568571392,1568604159,LB 1568604160,1568636927,UA -1568636928,1568667391,DE -1568667392,1568667519,IN -1568667520,1569193983,DE +1568636928,1568661503,DE +1568661504,1568669695,US +1568669696,1569193983,DE 1569193984,1569718271,HR 1569718272,1570242559,IT 1570242560,1570275327,GB @@ -42469,7 +42900,9 @@ 1571458560,1571458815,CZ 1571458816,1571459071,BY 1571459072,1571463167,UA -1571463168,1571466239,CZ +1571463168,1571464191,UZ +1571464192,1571465215,BY +1571465216,1571466239,CZ 1571466240,1571467007,RU 1571467008,1571467263,UA 1571467264,1571467775,RU @@ -42486,7 +42919,7 @@ 1571477504,1571477506,CZ 1571477507,1571477507,RU 1571477508,1571477759,CZ -1571477760,1571478015,RU +1571477760,1571478015,UA 1571478016,1571478527,CZ 1571478528,1571479551,RU 1571479552,1571483647,CZ @@ -42977,7 +43410,9 @@ 1578593376,1578593407,GB 1578593408,1578593439,FR 1578593440,1578593443,ES -1578593444,1578593695,FR +1578593444,1578593495,FR +1578593496,1578593499,PT +1578593500,1578593695,FR 1578593696,1578593703,GB 1578593704,1578593887,FR 1578593888,1578593895,ES @@ -43063,7 +43498,9 @@ 1578611968,1578611971,DE 1578611972,1578611979,FR 1578611980,1578611983,DE -1578611984,1578612059,FR +1578611984,1578611999,FR +1578612000,1578612007,ES +1578612008,1578612059,FR 1578612060,1578612063,ES 1578612064,1578612247,FR 1578612248,1578612255,ES @@ -43168,7 +43605,9 @@ 1580098048,1580098303,US 1580098304,1580101955,GB 1580101956,1580101956,SE -1580101957,1580105007,GB +1580101957,1580102718,GB +1580102719,1580102719,SE +1580102720,1580105007,GB 1580105008,1580105008,SE 1580105009,1580105727,GB 1580105728,1580107775,PT @@ -43609,7 +44048,9 @@ 1587200000,1587216383,UA 1587216384,1587289087,BG 1587289088,1587290111,DE -1587290112,1587334143,BG +1587290112,1587322367,BG +1587322368,1587322623,RS +1587322624,1587334143,BG 1587334144,1587335167,DE 1587335168,1587340287,BG 1587340288,1587341311,DE @@ -43724,7 +44165,9 @@ 1589256192,1589258239,SE 1589258240,1589262335,LV 1589262336,1589264383,SE -1589264384,1589280767,LV +1589264384,1589278719,LV +1589278720,1589279743,SE +1589279744,1589280767,LV 1589280768,1589313535,DE 1589313536,1589346303,LB 1589346304,1589379071,KW @@ -43950,11 +44393,9 @@ 1593081856,1593098239,UA 1593098240,1593114623,CH 1593114624,1593131007,SE -1593131008,1593131023,CH +1593131008,1593131023,GB 1593131024,1593131039,SE -1593131040,1593131263,GB -1593131264,1593132031,CH -1593132032,1593132287,GB +1593131040,1593132287,GB 1593132288,1593132543,AT 1593132544,1593132799,FR 1593132800,1593133055,GB @@ -43990,7 +44431,9 @@ 1593260032,1593262079,RU 1593262080,1593264127,KZ 1593264128,1593266175,NL -1593266176,1593268223,GB +1593266176,1593267199,GB +1593267200,1593267711,IM +1593267712,1593268223,GB 1593268224,1593270271,HU 1593270272,1593272319,GB 1593272320,1593274367,RU @@ -44134,9 +44577,8 @@ 1596925952,1596927999,CZ 1596928000,1596930047,RU 1596930048,1596930303,UA -1596930304,1596930382,CZ -1596930383,1596930383,TM -1596930384,1596931071,CZ +1596930304,1596930559,TM +1596930560,1596931071,CZ 1596931072,1596931583,BY 1596931584,1596931839,CZ 1596931840,1596940287,RU @@ -44622,9 +45064,7 @@ 1605110304,1605110311,IT 1605110312,1605110375,GB 1605110376,1605110383,IT -1605110384,1605110927,GB -1605110928,1605110935,IT -1605110936,1605111023,GB +1605110384,1605111023,GB 1605111024,1605111031,IT 1605111032,1605111903,GB 1605111904,1605111911,IT @@ -44730,7 +45170,9 @@ 1605861376,1605894143,TR 1605894144,1606156287,SA 1606156288,1606418431,RU -1606418432,1607467007,SE +1606418432,1607100682,SE +1607100683,1607100683,DE +1607100684,1607467007,SE 1607467008,1607532543,DE 1607532544,1607569407,SE 1607569408,1607573503,DK @@ -44744,12 +45186,10 @@ 1607600896,1607601151,CH 1607601152,1607601919,IT 1607601920,1607602175,GB -1607602176,1607602431,CM 1607602432,1607602687,SE 1607602688,1607602943,NO 1607602944,1607603199,DK 1607603200,1607603455,FI -1607603456,1607604223,KE 1607604224,1607605247,NG 1607605248,1607606015,ZA 1607606016,1607606271,FR @@ -44845,7 +45285,7 @@ 1607986688,1607988223,RU 1607988224,1607989247,KG 1607989248,1607991295,RU -1607991296,1608122367,DE +1607991296,1608122367,FI 1608122368,1608253439,SA 1608253440,1608384511,RU 1608384512,1608515583,DE @@ -44976,7 +45416,9 @@ 1654554624,1654558719,CA 1654558720,1654582015,US 1654582016,1654582271,CN -1654582272,1654648831,US +1654582272,1654595583,US +1654595584,1654596095,CA +1654596096,1654648831,US 1654648832,1654652927,CA 1654652928,1666731329,US 1666731330,1666731330,FR @@ -45000,7 +45442,9 @@ 1678377279,1678377282,UG 1678377283,1678377314,US 1678377315,1678377315,CZ -1678377316,1680535551,US +1678377316,1680479231,US +1680479232,1680480255,CA +1680480256,1680535551,US 1680535552,1680539647,CA 1680539648,1680564223,US 1680564224,1680572415,CA @@ -45161,7 +45605,9 @@ 1710972672,1710972927,TW 1710972928,1711210495,CN 1711210496,1711276031,ID +1721761792,1722023935,MU 1722286080,1722810367,TN +1722908672,1722925055,ZA 1722925056,1722941439,ZW 1722941440,1723138047,BF 1723138048,1723195391,SD @@ -45205,7 +45651,8 @@ 1728153600,1728154623,SG 1728154624,1728155647,JP 1728155648,1728157695,MY -1728157696,1728158463,HK +1728157696,1728158207,HK +1728158208,1728158463,MY 1728158464,1728158719,NL 1728158720,1728159743,HK 1728159744,1728161791,TH @@ -47250,7 +47697,8 @@ 1730395136,1730396159,JP 1730396160,1730398207,IN 1730398208,1730399231,CN -1730399232,1730400255,TW +1730399232,1730399743,TW +1730399744,1730400255,SG 1730400256,1730402303,PK 1730402560,1730402815,IN 1730402816,1730403071,ID @@ -47355,7 +47803,8 @@ 1730545920,1730546687,AU 1730546688,1730547711,IN 1730547712,1730548735,BD -1730548736,1730549759,ID +1730548736,1730549247,MY +1730549248,1730549759,ID 1730549760,1730550783,KR 1730550784,1730551807,HK 1730551808,1730552831,CN @@ -48221,7 +48670,9 @@ 1731666688,1731666943,KR 1731666944,1731667967,ID 1731667968,1731668991,IN -1731668992,1731669927,AU +1731668992,1731669786,AU +1731669787,1731669787,GS +1731669788,1731669927,AU 1731669928,1731669928,CC 1731669929,1731670015,AU 1731670016,1731671039,TL @@ -48345,7 +48796,7 @@ 1731806208,1731806463,AU 1731806464,1731807231,IN 1731807232,1731807743,SG -1731807744,1731807999,JP +1731807744,1731807999,SE 1731808000,1731808255,DK 1731808256,1731809279,CN 1731809280,1731811583,IN @@ -48419,7 +48870,8 @@ 1731901440,1731903487,IN 1731903488,1731904511,AU 1731905536,1731908607,IN -1731908608,1731909631,NZ +1731908608,1731908863,AU +1731908864,1731909631,NZ 1731909632,1731911679,AU 1731911680,1731912703,KH 1731912704,1731913727,NZ @@ -48461,7 +48913,7 @@ 1731979520,1731979775,BD 1731979776,1731980287,ID 1731980288,1731986431,IN -1731987456,1731987711,SG +1731987456,1731987711,HK 1731987712,1731987967,ID 1731987968,1731988479,SG 1731988480,1731989503,US @@ -48736,9 +49188,15 @@ 1732424752,1732424755,CN 1732424756,1732424767,HK 1732424768,1732424831,CN -1732424832,1732424863,HK -1732424864,1732424879,CN -1732424880,1732425727,HK +1732424832,1732424839,HK +1732424840,1732424847,CN +1732424848,1732424855,HK +1732424856,1732424879,CN +1732424880,1732424919,HK +1732424920,1732424927,CN +1732424928,1732424935,HK +1732424936,1732424943,CN +1732424944,1732425727,HK 1732425728,1732426751,KH 1732426752,1732428799,KR 1732428800,1732429823,ID @@ -48925,7 +49383,7 @@ 1732655616,1732655871,IN 1732655872,1732656127,HK 1732656128,1732657151,IN -1732657152,1732658175,AU +1732657152,1732658175,SG 1732658176,1732658431,ID 1732658432,1732658687,IN 1732658688,1732660223,AU @@ -48997,8 +49455,8 @@ 1732744192,1732746239,HK 1732746240,1732747263,JP 1732747264,1732748287,ID -1732748288,1732750591,IN -1732750592,1732751359,NL +1732748288,1732750847,IN +1732750848,1732751359,NL 1732751360,1732752383,HK 1732752384,1732754431,VN 1732754432,1732754687,AU @@ -49049,7 +49507,7 @@ 1732811776,1732812799,IN 1732812800,1732813311,HK 1732813312,1732813823,MY -1732813824,1732814847,CN +1732813824,1732814847,HK 1732814848,1732815871,IN 1732815872,1732816895,CN 1732816896,1732817919,IN @@ -49114,7 +49572,7 @@ 1732897536,1732897791,ID 1732897792,1732898815,MM 1732898816,1732901887,CN -1732901888,1732902911,GB +1732901888,1732902911,US 1732902912,1732903935,KR 1732903936,1732904191,IN 1732904192,1732904447,AU @@ -49381,7 +49839,7 @@ 1733185536,1733186559,ID 1733186560,1733189631,VN 1733189632,1733192447,ID -1733192448,1733192703,SE +1733192448,1733192703,IN 1733192704,1733193215,AU 1733193216,1733193471,ID 1733193472,1733193727,BT @@ -49540,8 +49998,7 @@ 1733349888,1733350399,MN 1733350400,1733351423,CN 1733351424,1733352447,TH -1733352448,1733352959,HK -1733352960,1733353471,JP +1733352448,1733353471,HK 1733353472,1733354495,BD 1733354496,1733355519,AU 1733355520,1733356543,CN @@ -49594,10 +50051,9 @@ 1733406720,1733407743,JP 1733407744,1733407999,NZ 1733408000,1733408511,IN -1733408512,1733408767,CN -1733408768,1733409279,HK -1733409280,1733409535,AQ -1733409536,1733409791,CN +1733408512,1733409023,CN +1733409024,1733409279,SG +1733409536,1733409791,JP 1733409792,1733411327,IN 1733411328,1733411839,ID 1733411840,1733412863,BD @@ -50385,7 +50841,7 @@ 1734258688,1734259711,VN 1734259712,1734260735,CN 1734260736,1734260991,HK -1734260992,1734261247,IN +1734260992,1734261247,US 1734261248,1734261503,PK 1734261504,1734261759,IN 1734261760,1734262783,ID @@ -50533,8 +50989,7 @@ 1734421504,1734422015,BD 1734422016,1734422527,IN 1734422528,1734423551,TW -1734423552,1734423807,JP -1734423808,1734424575,AU +1734423552,1734424575,AU 1734424576,1734429695,CN 1734429696,1734430719,ID 1734430720,1734431743,CN @@ -50677,7 +51132,7 @@ 1734568960,1734569983,IN 1734569984,1734570495,ID 1734570496,1734570751,AU -1734570752,1734571007,IN +1734570752,1734571007,US 1734571008,1734573055,CN 1734573056,1734574079,JP 1734574080,1734575103,BD @@ -50691,7 +51146,7 @@ 1734585344,1734585855,IN 1734585856,1734586367,PG 1734586368,1734586879,BD -1734586880,1734587391,IN +1734586880,1734587391,US 1734587392,1734588415,BD 1734588416,1734589183,IN 1734589184,1734589439,GB @@ -50702,7 +51157,8 @@ 1734596608,1734597631,IN 1734597632,1734598655,CN 1734598656,1734599679,AU -1734599680,1734600703,VN +1734599680,1734599935,TW +1734599936,1734600703,VN 1734600704,1734602751,CN 1734602752,1734603775,AU 1734603776,1734604799,VN @@ -50838,7 +51294,119 @@ 1734724608,1734725631,HK 1734725632,1734726655,KH 1734726656,1734727167,IN +1734727168,1734727423,AU +1734727424,1734727679,HK 1734727680,1734728703,MN +1734728704,1734729727,JP +1734729728,1734731775,ID +1734731776,1734732031,PK +1734732032,1734732287,IN +1734732288,1734732799,AU +1734732800,1734733311,NP +1734733312,1734733567,SG +1734733568,1734733823,ID +1734733824,1734734847,FJ +1734734848,1734735871,MY +1734735872,1734736127,HK +1734736128,1734736895,BD +1734736896,1734737151,NP +1734737152,1734737407,BD +1734737408,1734737919,MY +1734737920,1734738431,ID +1734738432,1734738687,IN +1734738688,1734738943,JP +1734738944,1734739967,HK +1734739968,1734740991,AU +1734740992,1734742015,ID +1734742016,1734743039,US +1734743040,1734744063,VN +1734744064,1734744319,AU +1734744320,1734744831,IN +1734744832,1734745087,BD +1734745088,1734746111,IN +1734746112,1734747135,HK +1734747136,1734747647,NP +1734747648,1734747903,PK +1734747904,1734748159,AU +1734748160,1734748671,PK +1734748672,1734749183,BD +1734749184,1734750207,GI +1734750208,1734750719,HK +1734750720,1734751487,NZ +1734751488,1734751743,AU +1734751744,1734753279,IN +1734753280,1734754303,ID +1734754304,1734757375,IN +1734757376,1734759423,CN +1734759424,1734764799,IN +1734764800,1734765055,AU +1734765056,1734765567,IN +1734765568,1734766591,NZ +1734766592,1734767615,ID +1734767616,1734768127,IN +1734768128,1734768383,AU +1734768384,1734769663,IN +1734769664,1734770687,PH +1734770688,1734771711,VN +1734771712,1734773759,BD +1734773760,1734774783,ID +1734774784,1734775295,IN +1734775296,1734775551,ID +1734775552,1734775807,IN +1734775808,1734777855,ID +1734777856,1734778879,PK +1734778880,1734779903,US +1734779904,1734780415,AU +1734780416,1734780671,US +1734780672,1734780927,ID +1734780928,1734782975,CN +1734782976,1734783487,ID +1734783488,1734783999,AU +1734784000,1734790143,CN +1734790144,1734791167,BD +1734791168,1734793215,CN +1734793216,1734794239,BD +1734794240,1734794751,AF +1734794752,1734797823,AU +1734797824,1734798079,IN +1734798080,1734798335,SG +1734798336,1734799359,BD +1734799360,1734800383,MY +1734800384,1734800639,IN +1734800640,1734800895,AU +1734800896,1734801407,BD +1734801408,1734802175,ID +1734802176,1734802431,IN +1734802432,1734803455,BD +1734803456,1734803711,PH +1734803712,1734803967,AU +1734803968,1734804991,IN +1734804992,1734805503,BD +1734805504,1734806527,IN +1734806528,1734808575,CN +1734808576,1734810623,ID +1734810624,1734811135,IN +1734811136,1734811647,ID +1734811648,1734812671,BD +1734812672,1734813695,CN +1734813696,1734814207,NZ +1734814208,1734814719,PK +1734814720,1734815743,NZ +1734815744,1734816767,US +1734816768,1734818815,IN +1734818816,1734819839,SG +1734819840,1734820351,HK +1734820352,1734820607,MV +1734820608,1734820863,TH +1734820864,1734822911,CN +1734822912,1734823935,AU +1734823936,1734824959,TW +1734824960,1734825983,AU +1734825984,1734826495,BD +1734826496,1734828031,IN +1734828032,1734828543,NZ +1734828544,1734830079,BD +1734830080,1734831103,AU 1740636160,1740644351,CN 1740644352,1740645375,IN 1740645376,1740647423,HK @@ -50917,7 +51485,7 @@ 1740744704,1740745727,BD 1740745728,1740746751,HK 1740747776,1740748799,KH -1740748800,1740749823,JP +1740748800,1740749823,HK 1740749824,1740751871,CN 1740751872,1740753919,IN 1740753920,1740754943,KH @@ -51354,7 +51922,8 @@ 1741442048,1741443071,HK 1741443072,1741445119,BD 1741445120,1741446143,CN -1741446144,1741447167,SG +1741446144,1741446175,US +1741446176,1741447167,SG 1741447168,1741448191,HK 1741448192,1741449215,MM 1741449216,1741450239,AU @@ -51390,10 +51959,8 @@ 1741485056,1741486079,BD 1741486080,1741487103,NZ 1741487104,1741489151,HK -1741489152,1741490240,CN -1741490241,1741490241,HK -1741490242,1741490431,CN -1741490432,1741490687,HK +1741489152,1741490175,CN +1741490176,1741490687,HK 1741490688,1741490943,CN 1741490944,1741491199,HK 1741491200,1741492223,IN @@ -51416,7 +51983,8 @@ 1741508864,1741509119,SG 1741509120,1741509375,ID 1741509376,1741509631,IN -1741509632,1741511679,JP +1741509632,1741510655,US +1741510656,1741511679,JP 1741511680,1741512703,IN 1741512704,1741515775,VN 1741515776,1741516799,CN @@ -51533,7 +52101,7 @@ 1741659136,1741659647,SG 1741659648,1741659903,PH 1741659904,1741660159,HK -1741660160,1741661183,IN +1741660160,1741661183,US 1741661184,1741662207,CN 1741662208,1741666303,IN 1741666304,1741674495,CN @@ -52069,7 +52637,8 @@ 1742338560,1742339071,AU 1742339072,1742339327,US 1742339328,1742339583,SG -1742339584,1742340095,US +1742339584,1742339839,AU +1742339840,1742340095,US 1742340096,1742341119,CN 1742341120,1742342143,HK 1742342144,1742346239,CN @@ -52102,7 +52671,8 @@ 1742422016,1742423039,CN 1742423040,1742424063,PH 1742424064,1742425343,ID -1742425344,1742426111,SG +1742425344,1742425599,US +1742425600,1742426111,SG 1742426112,1742427135,HK 1742427136,1742432255,CN 1742432256,1742433279,HK @@ -52480,7 +53050,8 @@ 1743016448,1743016703,HK 1743016704,1743017983,IN 1743017984,1743019007,CN -1743019008,1743020543,HK +1743019008,1743020287,HK +1743020288,1743020543,BE 1743020544,1743020799,AU 1743020800,1743021055,HK 1743021056,1743021311,SG @@ -52594,7 +53165,8 @@ 1743126528,1743127551,CN 1743127552,1743128575,BD 1743128576,1743129599,PH -1743129600,1743130623,HK +1743129600,1743130367,HK +1743130368,1743130623,JP 1743130624,1743131647,BD 1743131648,1743132671,IN 1743132672,1743133695,JP @@ -52629,7 +53201,7 @@ 1743158272,1743159295,MY 1743160320,1743161343,TH 1743161344,1743162367,HK -1743162368,1743162623,BZ +1743162368,1743162623,AU 1743162624,1743162879,AQ 1743162880,1743163135,KR 1743163136,1743163391,BZ @@ -53244,7 +53816,9 @@ 1743897600,1743899647,AU 1743899648,1743900671,ID 1743900672,1743901695,JP -1743901696,1743902463,AU +1743901696,1743901951,AU +1743901952,1743902207,US +1743902208,1743902463,AU 1743902464,1743902719,US 1743902720,1743903743,AU 1743903744,1743904767,CN @@ -53522,8 +54096,7 @@ 1744196608,1744197631,IN 1744197632,1744198655,MY 1744198656,1744199679,SG -1744199680,1744199935,US -1744199936,1744201727,AU +1744199680,1744201727,AU 1744201728,1744201983,VN 1744202240,1744202495,IN 1744202496,1744202751,ID @@ -53592,8 +54165,7 @@ 1744257024,1744257535,AU 1744257536,1744257791,PK 1744257792,1744258047,AU -1744258048,1744258303,HK -1744258304,1744259071,JP +1744258048,1744259071,JP 1744259072,1744260095,NZ 1744260096,1744261119,AU 1744261120,1744262143,IN @@ -54370,7 +54942,8 @@ 1747964416,1747965951,IN 1747965952,1747966015,US 1747966016,1747966079,NL -1747966080,1747966463,US +1747966080,1747966095,IE +1747966096,1747966463,US 1747966464,1747966975,IE 1747966976,1749061631,US 1749061632,1749069823,NL @@ -54723,7 +55296,9 @@ 1753309184,1753317375,CA 1753317376,1753325055,US 1753325056,1753325567,CA -1753325568,1753341951,US +1753325568,1753330687,US +1753330688,1753331711,CA +1753331712,1753341951,US 1753341952,1753346047,CA 1753346048,1753481727,US 1753481728,1753481983,SG @@ -54795,7 +55370,9 @@ 1753539072,1753539327,US 1753539328,1753539583,IE 1753539584,1753539839,CH -1753539840,1753735167,US +1753539840,1753541631,US +1753541632,1753541887,DE +1753541888,1753735167,US 1753735168,1753743359,IE 1753743360,1754136575,US 1754136576,1754169343,CA @@ -54854,415 +55431,567 @@ 1754258432,1754258687,MG 1754258688,1754258943,US 1754258944,1754259199,TN -1754259200,1754267903,US -1754267904,1754267935,CA -1754267936,1754267943,US -1754267944,1754267959,CA -1754267960,1754267991,US +1754259200,1754267647,US +1754267648,1754267719,CA +1754267720,1754267727,US +1754267728,1754267967,CA +1754267968,1754267991,US 1754267992,1754268063,CA -1754268064,1754268087,US -1754268088,1754268095,CA +1754268064,1754268079,US +1754268080,1754268095,CA 1754268096,1754268159,US -1754268160,1754268415,CA -1754268416,1754268671,US -1754268672,1754269055,CA +1754268160,1754269055,CA 1754269056,1754269087,US 1754269088,1754269103,CA -1754269104,1754269183,US -1754269184,1754269247,CA -1754269248,1754269423,US -1754269424,1754269455,CA -1754269456,1754269471,US -1754269472,1754269567,CA +1754269104,1754269119,US +1754269120,1754269247,CA +1754269248,1754269311,US +1754269312,1754269327,CA +1754269328,1754269343,US +1754269344,1754269375,CA +1754269376,1754269423,US +1754269424,1754269567,CA 1754269568,1754269599,US 1754269600,1754269615,CA -1754269616,1754269695,US -1754269696,1754270719,CA -1754270720,1754270847,US -1754270848,1754270975,CA -1754270976,1754271007,US -1754271008,1754271135,CA -1754271136,1754272207,US +1754269616,1754269631,US +1754269632,1754269647,CA +1754269648,1754269663,US +1754269664,1754271231,CA +1754271232,1754271743,US +1754271744,1754271999,CA +1754272000,1754272127,US +1754272128,1754272143,CA +1754272144,1754272159,US +1754272160,1754272191,CA +1754272192,1754272207,US 1754272208,1754272223,CA 1754272224,1754272255,US 1754272256,1754272383,CA -1754272384,1754272479,US -1754272480,1754272495,CA -1754272496,1754272719,US +1754272384,1754272415,US +1754272416,1754272431,CA +1754272432,1754272463,US +1754272464,1754272495,CA +1754272496,1754272511,US +1754272512,1754272655,CA +1754272656,1754272671,US +1754272672,1754272703,CA +1754272704,1754272719,US 1754272720,1754272735,CA -1754272736,1754272975,US +1754272736,1754272895,US +1754272896,1754272959,CA +1754272960,1754272975,US 1754272976,1754272991,CA 1754272992,1754273023,US 1754273024,1754273151,CA 1754273152,1754273183,US 1754273184,1754273199,CA -1754273200,1754273439,US +1754273200,1754273247,US +1754273248,1754273263,CA +1754273264,1754273279,US +1754273280,1754273407,CA +1754273408,1754273439,US 1754273440,1754273455,CA -1754273456,1754273535,US -1754273536,1754273791,CA -1754273792,1754273871,US +1754273456,1754273487,US +1754273488,1754273855,CA +1754273856,1754273871,US 1754273872,1754273887,CA 1754273888,1754274175,US -1754274176,1754274303,CA -1754274304,1754274815,US -1754274816,1754274943,CA -1754274944,1754275023,US +1754274176,1754274559,CA +1754274560,1754274815,US +1754274816,1754274959,CA +1754274960,1754274991,US +1754274992,1754275007,CA +1754275008,1754275023,US 1754275024,1754275039,CA 1754275040,1754275199,US -1754275200,1754275839,CA -1754275840,1754275967,US -1754275968,1754276095,CA -1754276096,1754276607,US -1754276608,1754276767,CA -1754276768,1754276775,US -1754276776,1754276839,CA -1754276840,1754276855,US -1754276856,1754276863,CA -1754276864,1754277631,US -1754277632,1754279295,CA -1754279296,1754279423,US -1754279424,1754280447,CA -1754280448,1754280959,US -1754280960,1754281279,CA +1754275200,1754276863,CA +1754276864,1754277119,US +1754277120,1754281279,CA 1754281280,1754281343,US -1754281344,1754281359,CA -1754281360,1754281375,US -1754281376,1754281407,CA -1754281408,1754281567,US -1754281568,1754281583,AE -1754281584,1754281983,US +1754281344,1754281407,CA +1754281408,1754281455,US +1754281456,1754281727,CA +1754281728,1754281983,US 1754281984,1754282495,CA 1754282496,1754282751,US -1754282752,1754282879,CA -1754282880,1754282959,US +1754282752,1754282895,CA +1754282896,1754282927,US +1754282928,1754282943,CA +1754282944,1754282959,US 1754282960,1754282967,CA 1754282968,1754282975,SE 1754282976,1754283007,US 1754283008,1754283263,CA 1754283264,1754283519,US -1754283520,1754284543,CA -1754284544,1754284671,US -1754284672,1754284703,CA -1754284704,1754285119,US -1754285120,1754285151,CA -1754285152,1754285167,US -1754285168,1754285247,CA -1754285248,1754285311,US -1754285312,1754285823,CA -1754285824,1754285887,US -1754285888,1754285951,CA -1754285952,1754288207,US +1754283520,1754286591,CA +1754286592,1754286847,US +1754286848,1754288143,CA +1754288144,1754288159,US +1754288160,1754288191,CA +1754288192,1754288207,US 1754288208,1754288223,CA -1754288224,1754289055,US +1754288224,1754288239,US +1754288240,1754288255,CA +1754288256,1754288383,US +1754288384,1754288911,CA +1754288912,1754288927,US +1754288928,1754288959,CA +1754288960,1754288991,US +1754288992,1754289007,CA +1754289008,1754289055,US 1754289056,1754289071,CA -1754289072,1754289487,US +1754289072,1754289087,US +1754289088,1754289471,CA +1754289472,1754289487,US 1754289488,1754289495,CA 1754289496,1754289503,NO -1754289504,1754289919,US -1754289920,1754290175,CA -1754290176,1754290591,US +1754289504,1754289519,US +1754289520,1754289535,CA +1754289536,1754289663,US +1754289664,1754290431,CA +1754290432,1754290447,US +1754290448,1754290495,CA +1754290496,1754290511,US +1754290512,1754290527,CA +1754290528,1754290543,US +1754290544,1754290559,CA +1754290560,1754290591,US 1754290592,1754290607,CA -1754290608,1754291023,US +1754290608,1754290623,US +1754290624,1754290943,CA +1754290944,1754290975,US +1754290976,1754290991,CA +1754290992,1754291023,US 1754291024,1754291039,CA -1754291040,1754291535,US +1754291040,1754291103,US +1754291104,1754291119,CA +1754291120,1754291135,US +1754291136,1754291471,CA +1754291472,1754291503,US +1754291504,1754291519,CA +1754291520,1754291535,US 1754291536,1754291551,CA -1754291552,1754292095,US -1754292096,1754292159,CA -1754292160,1754292607,US -1754292608,1754292639,CA -1754292640,1754293311,US -1754293312,1754293343,CA -1754293344,1754293503,US -1754293504,1754294015,CA -1754294016,1754294095,US +1754291552,1754291711,US +1754291712,1754294015,CA +1754294016,1754294063,US +1754294064,1754294079,CA +1754294080,1754294095,US 1754294096,1754294111,CA -1754294112,1754294271,US +1754294112,1754294127,US +1754294128,1754294143,CA +1754294144,1754294271,US 1754294272,1754294527,CA 1754294528,1754294655,US -1754294656,1754294783,CA -1754294784,1754294847,US -1754294848,1754294943,CA -1754294944,1754294959,US -1754294960,1754294967,CA -1754294968,1754295295,US -1754295296,1754295935,CA -1754295936,1754296015,US +1754294656,1754295951,CA +1754295952,1754295983,US +1754295984,1754295999,CA +1754296000,1754296015,US 1754296016,1754296031,CA -1754296032,1754296319,US -1754296320,1754296383,CA +1754296032,1754296063,US +1754296064,1754296383,CA 1754296384,1754296399,US -1754296400,1754296407,GB -1754296408,1754296415,CA -1754296416,1754296831,US -1754296832,1754297471,CA +1754296400,1754296415,CA +1754296416,1754296527,US +1754296528,1754296543,CA +1754296544,1754296575,US +1754296576,1754297471,CA 1754297472,1754297487,US 1754297488,1754297503,CA -1754297504,1754297599,US -1754297600,1754298623,CA +1754297504,1754297535,US +1754297536,1754297551,CA +1754297552,1754297583,US +1754297584,1754298623,CA 1754298624,1754299135,US 1754299136,1754299647,CA -1754299648,1754299711,US -1754299712,1754299775,CA +1754299648,1754299695,US +1754299696,1754299775,CA 1754299776,1754299791,US -1754299792,1754299807,CA -1754299808,1754299903,US +1754299792,1754299839,CA +1754299840,1754299903,US 1754299904,1754300543,CA 1754300544,1754300575,US 1754300576,1754300591,CA -1754300592,1754300751,US +1754300592,1754300639,US +1754300640,1754300671,CA +1754300672,1754300751,US 1754300752,1754300767,CA -1754300768,1754300927,US -1754300928,1754301695,CA -1754301696,1754301951,US -1754301952,1754302463,CA -1754302464,1754302719,US -1754302720,1754303231,CA +1754300768,1754300783,US +1754300784,1754300799,CA +1754300800,1754300879,US +1754300880,1754300895,CA +1754300896,1754300911,US +1754300912,1754303231,CA 1754303232,1754303247,US -1754303248,1754303263,CA -1754303264,1754303295,US -1754303296,1754303327,CA -1754303328,1754303567,US -1754303568,1754303575,CA -1754303576,1754303743,US -1754303744,1754304511,CA -1754304512,1754304783,US +1754303248,1754303359,CA +1754303360,1754303375,US +1754303376,1754303391,CA +1754303392,1754303487,US +1754303488,1754304543,CA +1754304544,1754304551,US +1754304552,1754304767,CA +1754304768,1754304783,US 1754304784,1754304799,CA 1754304800,1754304847,US -1754304848,1754304863,GB -1754304864,1754305759,US -1754305760,1754305767,CA -1754305768,1754305775,GB -1754305776,1754306815,US -1754306816,1754306943,CA -1754306944,1754307023,US -1754307024,1754307031,GB -1754307032,1754307039,CA +1754304848,1754304863,CA +1754304864,1754304895,US +1754304896,1754304911,CA +1754304912,1754304943,US +1754304944,1754304959,CA +1754304960,1754304991,US +1754304992,1754305663,CA +1754305664,1754305695,US +1754305696,1754305711,CA +1754305712,1754305743,US +1754305744,1754305775,CA +1754305776,1754306559,US +1754306560,1754306975,CA +1754306976,1754307023,US +1754307024,1754307039,CA 1754307040,1754307071,US 1754307072,1754307327,CA -1754307328,1754307439,US +1754307328,1754307391,US +1754307392,1754307423,CA +1754307424,1754307439,US 1754307440,1754307455,CA -1754307456,1754307583,US -1754307584,1754307839,CA -1754307840,1754307871,US -1754307872,1754307895,CA +1754307456,1754307487,US +1754307488,1754307503,CA +1754307504,1754307567,US +1754307568,1754307895,CA 1754307896,1754307903,SE -1754307904,1754308095,US -1754308096,1754308103,CA -1754308104,1754308111,US -1754308112,1754308127,CA -1754308128,1754308303,US -1754308304,1754308311,CA -1754308312,1754308319,GB -1754308320,1754308367,US +1754307904,1754308015,US +1754308016,1754308127,CA +1754308128,1754308143,US +1754308144,1754308159,CA +1754308160,1754308191,US +1754308192,1754308287,CA +1754308288,1754308303,US +1754308304,1754308351,CA +1754308352,1754308367,US 1754308368,1754308383,CA -1754308384,1754308447,US -1754308448,1754308455,CA -1754308456,1754308943,US +1754308384,1754308415,US +1754308416,1754308479,CA +1754308480,1754308543,US +1754308544,1754308863,CA +1754308864,1754308879,US +1754308880,1754308895,CA +1754308896,1754308943,US 1754308944,1754308951,CA 1754308952,1754308959,SE -1754308960,1754309471,US -1754309472,1754309479,CA -1754309480,1754309487,GB -1754309488,1754309919,US -1754309920,1754309935,CA -1754309936,1754310015,US -1754310016,1754310079,CA -1754310080,1754310479,US +1754308960,1754308975,CA +1754308976,1754308991,US +1754308992,1754309023,CA +1754309024,1754309055,US +1754309056,1754309439,CA +1754309440,1754309455,US +1754309456,1754309503,CA +1754309504,1754309583,US +1754309584,1754309887,CA +1754309888,1754309903,US +1754309904,1754309935,CA +1754309936,1754309951,US +1754309952,1754309983,CA +1754309984,1754309999,US +1754310000,1754310079,CA +1754310080,1754310111,US +1754310112,1754310127,CA +1754310128,1754310143,US +1754310144,1754310463,CA +1754310464,1754310479,US 1754310480,1754310495,CA 1754310496,1754310527,US -1754310528,1754310655,CA -1754310656,1754311039,US -1754311040,1754311055,CA -1754311056,1754311583,US -1754311584,1754311615,CA -1754311616,1754311967,US -1754311968,1754311975,CA -1754311976,1754311983,GB -1754311984,1754312463,US -1754312464,1754312479,CA -1754312480,1754312703,US +1754310528,1754310911,CA +1754310912,1754310943,US +1754310944,1754310975,CA +1754310976,1754310991,US +1754310992,1754311055,CA +1754311056,1754311119,US +1754311120,1754311423,CA +1754311424,1754311487,US +1754311488,1754311615,CA +1754311616,1754311647,US +1754311648,1754311663,CA +1754311664,1754311679,US +1754311680,1754311695,CA +1754311696,1754311711,US +1754311712,1754311743,CA +1754311744,1754311759,US +1754311760,1754311807,CA +1754311808,1754311967,US +1754311968,1754311999,CA +1754312000,1754312191,US +1754312192,1754312447,CA +1754312448,1754312463,US +1754312464,1754312511,CA +1754312512,1754312527,US +1754312528,1754312543,CA +1754312544,1754312559,US +1754312560,1754312639,CA +1754312640,1754312655,US +1754312656,1754312671,CA +1754312672,1754312703,US 1754312704,1754312719,CA -1754312720,1754312783,US -1754312784,1754312799,CA -1754312800,1754312847,US -1754312848,1754312863,GB -1754312864,1754312959,US -1754312960,1754312991,CA -1754312992,1754313071,US -1754313072,1754313087,AE -1754313088,1754313151,US +1754312720,1754312735,US +1754312736,1754312767,CA +1754312768,1754312783,US +1754312784,1754312895,CA +1754312896,1754312959,US +1754312960,1754313023,CA +1754313024,1754313039,US +1754313040,1754313087,CA +1754313088,1754313119,US +1754313120,1754313135,CA +1754313136,1754313151,US 1754313152,1754313247,CA -1754313248,1754313439,US -1754313440,1754313455,CA -1754313456,1754313471,US -1754313472,1754313487,CA -1754313488,1754313615,US -1754313616,1754313631,CA -1754313632,1754313727,US -1754313728,1754313759,CA -1754313760,1754313839,US -1754313840,1754313847,CA -1754313848,1754313855,GB -1754313856,1754313983,US -1754313984,1754314015,CA -1754314016,1754314239,US +1754313248,1754313295,US +1754313296,1754313311,CA +1754313312,1754313327,US +1754313328,1754313343,CA +1754313344,1754313391,US +1754313392,1754313535,CA +1754313536,1754313583,US +1754313584,1754313599,CA +1754313600,1754313615,US +1754313616,1754313663,CA +1754313664,1754313679,US +1754313680,1754313791,CA +1754313792,1754313807,US +1754313808,1754313823,CA +1754313824,1754313839,US +1754313840,1754313855,CA +1754313856,1754313903,US +1754313904,1754314047,CA +1754314048,1754314079,US +1754314080,1754314175,CA +1754314176,1754314191,US +1754314192,1754314207,CA +1754314208,1754314239,US 1754314240,1754314255,CA -1754314256,1754314463,US -1754314464,1754314495,CA -1754314496,1754314527,US -1754314528,1754314559,CA +1754314256,1754314271,US +1754314272,1754314303,CA +1754314304,1754314351,US +1754314352,1754314367,CA +1754314368,1754314415,US +1754314416,1754314431,CA +1754314432,1754314463,US +1754314464,1754314559,CA 1754314560,1754314575,US -1754314576,1754314591,CA -1754314592,1754314719,US -1754314720,1754314735,CA -1754314736,1754314783,US -1754314784,1754314815,CA -1754314816,1754315039,US -1754315040,1754315071,CA -1754315072,1754315215,US -1754315216,1754315223,CA -1754315224,1754315231,GB -1754315232,1754315295,US -1754315296,1754315311,CA -1754315312,1754315455,US -1754315456,1754315471,CA -1754315472,1754315551,US -1754315552,1754315559,CA -1754315560,1754315615,US -1754315616,1754315623,CA -1754315624,1754315631,GB -1754315632,1754316287,US -1754316288,1754317823,CA -1754317824,1754317903,US +1754314576,1754314623,CA +1754314624,1754314687,US +1754314688,1754314735,CA +1754314736,1754314751,US +1754314752,1754314815,CA +1754314816,1754314847,US +1754314848,1754314863,CA +1754314864,1754314911,US +1754314912,1754314943,CA +1754314944,1754314991,US +1754314992,1754315071,CA +1754315072,1754315087,US +1754315088,1754315103,CA +1754315104,1754315135,US +1754315136,1754315199,CA +1754315200,1754315215,US +1754315216,1754315231,CA +1754315232,1754315263,US +1754315264,1754315327,CA +1754315328,1754315343,US +1754315344,1754315407,CA +1754315408,1754315423,US +1754315424,1754315471,CA +1754315472,1754315487,US +1754315488,1754315567,CA +1754315568,1754315615,US +1754315616,1754315647,CA +1754315648,1754316287,US +1754316288,1754317839,CA +1754317840,1754317871,US +1754317872,1754317887,CA +1754317888,1754317903,US 1754317904,1754317919,CA 1754317920,1754317935,US -1754317936,1754317943,CA -1754317944,1754317951,GB +1754317936,1754317951,CA 1754317952,1754318111,US -1754318112,1754318119,CA -1754318120,1754318127,GB -1754318128,1754318335,US +1754318112,1754318127,CA +1754318128,1754318143,US +1754318144,1754318159,CA +1754318160,1754318175,US +1754318176,1754318207,CA +1754318208,1754318335,US 1754318336,1754319103,CA 1754319104,1754319119,US 1754319120,1754319135,CA -1754319136,1754319199,US -1754319200,1754319207,CA -1754319208,1754319455,US -1754319456,1754319479,CA -1754319480,1754319487,GB -1754319488,1754319647,US -1754319648,1754319663,CA -1754319664,1754319743,US -1754319744,1754319903,CA -1754319904,1754320159,US -1754320160,1754320167,CA -1754320168,1754320223,US -1754320224,1754320231,CA -1754320232,1754320239,GB -1754320240,1754320607,US -1754320608,1754320623,CA -1754320624,1754320671,US -1754320672,1754320687,CA -1754320688,1754320719,US -1754320720,1754320735,CA -1754320736,1754320927,US -1754320928,1754320951,CA -1754320952,1754320959,GB -1754320960,1754321087,US -1754321088,1754321103,CA +1754319136,1754319167,US +1754319168,1754319295,CA +1754319296,1754319311,US +1754319312,1754319327,CA +1754319328,1754319391,US +1754319392,1754319551,CA +1754319552,1754319567,US +1754319568,1754319663,CA +1754319664,1754319727,US +1754319728,1754319935,CA +1754319936,1754319951,US +1754319952,1754320063,CA +1754320064,1754320095,US +1754320096,1754320111,CA +1754320112,1754320127,US +1754320128,1754320175,CA +1754320176,1754320207,US +1754320208,1754320239,CA +1754320240,1754320255,US +1754320256,1754320319,CA +1754320320,1754320335,US +1754320336,1754320351,CA +1754320352,1754320415,US +1754320416,1754320447,CA +1754320448,1754320479,US +1754320480,1754320511,CA +1754320512,1754320527,US +1754320528,1754320543,CA +1754320544,1754320559,US +1754320560,1754320623,CA +1754320624,1754320639,US +1754320640,1754320703,CA +1754320704,1754320719,US +1754320720,1754320767,CA +1754320768,1754320799,US +1754320800,1754320815,CA +1754320816,1754320895,US +1754320896,1754320959,CA +1754320960,1754320975,US +1754320976,1754321023,CA +1754321024,1754321055,US +1754321056,1754321103,CA 1754321104,1754321119,US 1754321120,1754321151,CA 1754321152,1754321167,US -1754321168,1754321183,CA -1754321184,1754321231,US -1754321232,1754321239,CA -1754321240,1754321439,US -1754321440,1754321447,CA -1754321448,1754321455,GB -1754321456,1754321503,US -1754321504,1754321511,CA -1754321512,1754321663,US -1754321664,1754322695,CA -1754322696,1754322703,US -1754322704,1754322719,CA -1754322720,1754322943,US -1754322944,1754323207,CA -1754323208,1754323279,US -1754323280,1754323287,CA -1754323288,1754323295,GB -1754323296,1754323455,US -1754323456,1754323583,CA -1754323584,1754324735,US -1754324736,1754324999,CA -1754325000,1754325071,US -1754325072,1754325079,CA -1754325080,1754325087,GB -1754325088,1754325247,US -1754325248,1754325263,CA -1754325264,1754325503,US -1754325504,1754325567,CA -1754325568,1754325759,US -1754325760,1754325767,CA -1754325768,1754325791,US -1754325792,1754325823,CA -1754325824,1754325919,US -1754325920,1754325927,CA -1754325928,1754325935,GB -1754325936,1754326015,US -1754326016,1754326031,CA -1754326032,1754326047,US -1754326048,1754326079,CA -1754326080,1754326271,US -1754326272,1754326335,CA -1754326336,1754326527,US -1754326528,1754326535,CA -1754326536,1754326559,US -1754326560,1754326591,CA -1754326592,1754326751,US -1754326752,1754326759,CA -1754326760,1754326767,GB +1754321168,1754321215,CA +1754321216,1754321231,US +1754321232,1754321247,CA +1754321248,1754321439,US +1754321440,1754321455,CA +1754321456,1754321487,US +1754321488,1754321535,CA +1754321536,1754321551,US +1754321552,1754321567,CA +1754321568,1754321615,US +1754321616,1754322719,CA +1754322720,1754322767,US +1754322768,1754322783,CA +1754322784,1754322847,US +1754322848,1754322863,CA +1754322864,1754322879,US +1754322880,1754323231,CA +1754323232,1754323247,US +1754323248,1754323263,CA +1754323264,1754323279,US +1754323280,1754323295,CA +1754323296,1754323327,US +1754323328,1754323391,CA +1754323392,1754323423,US +1754323424,1754324095,CA +1754324096,1754324735,US +1754324736,1754325055,CA +1754325056,1754325071,US +1754325072,1754325119,CA +1754325120,1754325247,US +1754325248,1754325279,CA +1754325280,1754325295,US +1754325296,1754325311,CA +1754325312,1754325343,US +1754325344,1754325439,CA +1754325440,1754325487,US +1754325488,1754325599,CA +1754325600,1754325615,US +1754325616,1754325695,CA +1754325696,1754325759,US +1754325760,1754325887,CA +1754325888,1754325919,US +1754325920,1754326079,CA +1754326080,1754326095,US +1754326096,1754326111,CA +1754326112,1754326127,US +1754326128,1754326207,CA +1754326208,1754326239,US +1754326240,1754326335,CA +1754326336,1754326351,US +1754326352,1754326367,CA +1754326368,1754326399,US +1754326400,1754326463,CA +1754326464,1754326495,US +1754326496,1754326511,CA +1754326512,1754326527,US +1754326528,1754326591,CA +1754326592,1754326655,US +1754326656,1754326719,CA +1754326720,1754326751,US +1754326752,1754326767,CA 1754326768,1754326783,US 1754326784,1754326799,CA 1754326800,1754326815,US 1754326816,1754326847,CA -1754326848,1754328143,US -1754328144,1754328151,CA -1754328152,1754328319,US +1754326848,1754327039,US +1754327040,1754327551,CA +1754327552,1754328063,US +1754328064,1754328079,CA +1754328080,1754328111,US +1754328112,1754328127,CA +1754328128,1754328143,US +1754328144,1754328159,CA +1754328160,1754328319,US 1754328320,1754328575,CA 1754328576,1754329087,US -1754329088,1754329103,CA -1754329104,1754329119,US -1754329120,1754329151,CA -1754329152,1754329327,US -1754329328,1754329335,CA -1754329336,1754329343,GB -1754329344,1754329359,CA -1754329360,1754329375,US -1754329376,1754329407,CA -1754329408,1754329599,US -1754329600,1754329607,CA -1754329608,1754329631,US -1754329632,1754329663,CA +1754329088,1754329151,CA +1754329152,1754329183,US +1754329184,1754329279,CA +1754329280,1754329311,US +1754329312,1754329407,CA +1754329408,1754329455,US +1754329456,1754329471,CA +1754329472,1754329599,US +1754329600,1754329663,CA 1754329664,1754329679,US 1754329680,1754329695,CA -1754329696,1754329935,US +1754329696,1754329711,US +1754329712,1754329791,CA +1754329792,1754329839,US +1754329840,1754329871,CA +1754329872,1754329887,US +1754329888,1754329919,CA +1754329920,1754329935,US 1754329936,1754329951,CA 1754329952,1754330111,US 1754330112,1754330879,CA 1754330880,1754331135,US 1754331136,1754331263,CA 1754331264,1754331295,US -1754331296,1754331303,CA -1754331304,1754331487,US -1754331488,1754331495,CA -1754331496,1754331855,US +1754331296,1754331311,CA +1754331312,1754331375,US +1754331376,1754331407,CA +1754331408,1754331423,US +1754331424,1754331455,CA +1754331456,1754331487,US +1754331488,1754331503,CA +1754331504,1754331647,US +1754331648,1754331791,CA +1754331792,1754331823,US +1754331824,1754331839,CA +1754331840,1754331855,US 1754331856,1754331871,CA 1754331872,1754332191,US -1754332192,1754332199,CA -1754332200,1754332751,US +1754332192,1754332207,CA +1754332208,1754332223,US +1754332224,1754332239,CA +1754332240,1754332271,US +1754332272,1754332287,CA +1754332288,1754332671,US +1754332672,1754332687,CA +1754332688,1754332703,US +1754332704,1754332735,CA +1754332736,1754332751,US 1754332752,1754332767,CA -1754332768,1754333183,US -1754333184,1754337279,CA +1754332768,1754332927,US +1754332928,1754337279,CA 1754337280,1754394367,US 1754394368,1754394623,CA 1754394624,1754402815,US @@ -55905,283 +56634,296 @@ 1759526400,1759526655,JE 1759526656,1759526911,FO 1759526912,1759531007,US -1759531008,1759535103,SG +1759531008,1759533055,SG +1759533056,1759533311,US +1759533312,1759533567,GB +1759533568,1759533823,FR +1759533824,1759534079,SG +1759534080,1759534335,FR +1759534336,1759534591,GB +1759534592,1759535103,SG 1759535104,1759543295,CA 1759543296,1759547391,US 1759547392,1759548415,NL 1759548416,1759707391,US -1759707392,1759707655,CA -1759707656,1759707663,US -1759707664,1759707679,CA -1759707680,1759707687,US -1759707688,1759707711,CA -1759707712,1759707719,US -1759707720,1759707727,CA -1759707728,1759707735,US +1759707392,1759707735,CA 1759707736,1759707743,NO -1759707744,1759707759,CA -1759707760,1759707783,US -1759707784,1759707807,CA -1759707808,1759707823,US -1759707824,1759707855,CA -1759707856,1759707863,US -1759707864,1759707879,CA -1759707880,1759707887,US -1759707888,1759707911,CA -1759707912,1759707919,US -1759707920,1759707935,CA -1759707936,1759707943,US -1759707944,1759707975,CA -1759707976,1759707991,US -1759707992,1759708031,CA +1759707744,1759707767,CA +1759707768,1759707775,US +1759707776,1759707807,CA +1759707808,1759707815,US +1759707816,1759708031,CA 1759708032,1759708159,US 1759708160,1759708351,CA 1759708352,1759708399,US -1759708400,1759708407,CA -1759708408,1759708751,US -1759708752,1759708759,CA -1759708760,1759709695,US -1759709696,1759710207,CA -1759710208,1759711703,US -1759711704,1759711711,CA +1759708400,1759708415,CA +1759708416,1759708751,US +1759708752,1759708767,CA +1759708768,1759709439,US +1759709440,1759710207,CA +1759710208,1759710463,US +1759710464,1759711231,CA +1759711232,1759711487,US +1759711488,1759711615,CA +1759711616,1759711663,US +1759711664,1759711679,CA +1759711680,1759711695,US +1759711696,1759711711,CA 1759711712,1759711727,US 1759711728,1759711743,CA -1759711744,1759712335,US +1759711744,1759712255,US +1759712256,1759712271,CA +1759712272,1759712287,US +1759712288,1759712319,CA +1759712320,1759712335,US 1759712336,1759712351,CA -1759712352,1759712767,US +1759712352,1759712511,US +1759712512,1759712639,CA +1759712640,1759712767,US 1759712768,1759713279,CA -1759713280,1759714047,US -1759714048,1759714815,CA +1759713280,1759713791,US +1759713792,1759714815,CA 1759714816,1759715071,US 1759715072,1759715327,CA -1759715328,1759715423,US -1759715424,1759715439,CA -1759715440,1759715967,US -1759715968,1759716031,CA -1759716032,1759716223,US -1759716224,1759716255,CA -1759716256,1759716351,US -1759716352,1759716991,CA +1759715328,1759715375,US +1759715376,1759715391,CA +1759715392,1759715407,US +1759715408,1759715439,CA +1759715440,1759715839,US +1759715840,1759716991,CA 1759716992,1759717023,US 1759717024,1759717039,CA -1759717040,1759717375,US -1759717376,1759718399,CA +1759717040,1759717055,US +1759717056,1759717071,CA +1759717072,1759717103,US +1759717104,1759718399,CA 1759718400,1759718655,US -1759718656,1759719167,CA -1759719168,1759719295,US -1759719296,1759719423,CA -1759719424,1759719487,US -1759719488,1759719519,CA -1759719520,1759719679,US -1759719680,1759719807,CA +1759718656,1759719807,CA 1759719808,1759719839,US 1759719840,1759719855,CA -1759719856,1759719967,US -1759719968,1759719999,CA +1759719856,1759719919,US +1759719920,1759719999,CA 1759720000,1759720015,US -1759720016,1759720031,CA -1759720032,1759720191,US -1759720192,1759720207,CA -1759720208,1759720271,US -1759720272,1759720287,CA -1759720288,1759720319,US -1759720320,1759720383,CA -1759720384,1759720783,US -1759720784,1759720791,CA -1759720792,1759721375,US -1759721376,1759721391,CA +1759720016,1759720063,CA +1759720064,1759720095,US +1759720096,1759720127,CA +1759720128,1759720159,US +1759720160,1759720207,CA +1759720208,1759720223,US +1759720224,1759720255,CA +1759720256,1759720271,US +1759720272,1759720383,CA +1759720384,1759720415,US +1759720416,1759720447,CA +1759720448,1759720511,US +1759720512,1759720575,CA +1759720576,1759720703,US +1759720704,1759720767,CA +1759720768,1759720783,US +1759720784,1759720799,CA +1759720800,1759720815,US +1759720816,1759720831,CA +1759720832,1759721151,US +1759721152,1759721215,CA +1759721216,1759721343,US +1759721344,1759721391,CA 1759721392,1759721423,US 1759721424,1759721439,CA -1759721440,1759721503,US -1759721504,1759721535,CA -1759721536,1759721695,US -1759721696,1759721727,CA -1759721728,1759721823,US +1759721440,1759721471,US +1759721472,1759721535,CA +1759721536,1759721583,US +1759721584,1759721599,CA +1759721600,1759721615,US +1759721616,1759721631,CA +1759721632,1759721647,US +1759721648,1759721727,CA +1759721728,1759721743,US +1759721744,1759721759,CA +1759721760,1759721775,US +1759721776,1759721791,CA +1759721792,1759721823,US 1759721824,1759721831,CA 1759721832,1759721839,NO 1759721840,1759722047,US 1759722048,1759722079,CA -1759722080,1759722303,US -1759722304,1759722335,CA -1759722336,1759722383,US -1759722384,1759722399,CA -1759722400,1759722511,US +1759722080,1759722271,US +1759722272,1759722367,CA +1759722368,1759722383,US +1759722384,1759722431,CA +1759722432,1759722479,US +1759722480,1759722495,CA +1759722496,1759722511,US 1759722512,1759722527,CA 1759722528,1759722559,US -1759722560,1759722591,CA -1759722592,1759722895,US +1759722560,1759722607,CA +1759722608,1759722655,US +1759722656,1759722751,CA +1759722752,1759722895,US 1759722896,1759722911,CA -1759722912,1759722975,US -1759722976,1759722991,CA -1759722992,1759723151,US +1759722912,1759722943,US +1759722944,1759722991,CA +1759722992,1759723007,US +1759723008,1759723071,CA +1759723072,1759723151,US 1759723152,1759723167,CA 1759723168,1759723199,US -1759723200,1759723215,CA -1759723216,1759723247,US -1759723248,1759723263,CA -1759723264,1759723343,US +1759723200,1759723231,CA +1759723232,1759723247,US +1759723248,1759723279,CA +1759723280,1759723295,US +1759723296,1759723327,CA +1759723328,1759723343,US 1759723344,1759723359,CA 1759723360,1759723551,US 1759723552,1759723583,CA 1759723584,1759723599,US 1759723600,1759723615,CA -1759723616,1759723823,US -1759723824,1759723831,CA -1759723832,1759723839,US -1759723840,1759723887,CA -1759723888,1759724031,US -1759724032,1759724159,CA -1759724160,1759724287,US -1759724288,1759725055,CA +1759723616,1759723631,US +1759723632,1759723647,CA +1759723648,1759723823,US +1759723824,1759723887,CA +1759723888,1759723967,US +1759723968,1759724159,CA +1759724160,1759724223,US +1759724224,1759724239,CA +1759724240,1759724255,US +1759724256,1759725055,CA 1759725056,1759726079,US 1759726080,1759726975,CA -1759726976,1759727087,US -1759727088,1759727095,CA -1759727096,1759727103,US -1759727104,1759727359,CA -1759727360,1759728127,US -1759728128,1759728383,CA -1759728384,1759728703,US -1759728704,1759728767,CA -1759728768,1759728895,US -1759728896,1759729151,CA +1759726976,1759727007,US +1759727008,1759727023,CA +1759727024,1759727087,US +1759727088,1759727359,CA +1759727360,1759727615,US +1759727616,1759728383,CA +1759728384,1759728639,US +1759728640,1759729151,CA 1759729152,1759729663,US 1759729664,1759729711,CA 1759729712,1759729743,US -1759729744,1759729751,CA -1759729752,1759729967,US +1759729744,1759729759,CA +1759729760,1759729967,US 1759729968,1759730015,CA -1759730016,1759730303,US -1759730304,1759730319,CA -1759730320,1759730335,US -1759730336,1759730367,CA +1759730016,1759730175,US +1759730176,1759730191,CA +1759730192,1759730207,US +1759730208,1759730239,CA +1759730240,1759730303,US +1759730304,1759730367,CA 1759730368,1759730399,US 1759730400,1759730415,CA 1759730416,1759730463,US 1759730464,1759730495,CA -1759730496,1759730519,US -1759730520,1759730527,CA -1759730528,1759730839,US -1759730840,1759730847,CA +1759730496,1759730511,US +1759730512,1759730543,CA +1759730544,1759730559,US +1759730560,1759730623,CA +1759730624,1759730831,US +1759730832,1759730847,CA 1759730848,1759730879,US 1759730880,1759730895,CA 1759730896,1759730911,US 1759730912,1759730927,CA 1759730928,1759731455,US -1759731456,1759732735,CA -1759732736,1759733247,US -1759733248,1759733759,CA -1759733760,1759734159,US -1759734160,1759734167,CA -1759734168,1759734279,US -1759734280,1759734287,CA -1759734288,1759734351,US +1759731456,1759734335,CA +1759734336,1759734351,US 1759734352,1759734367,CA -1759734368,1759734623,US -1759734624,1759734639,CA -1759734640,1759734783,US -1759734784,1759735807,CA -1759735808,1759736015,US +1759734368,1759734383,US +1759734384,1759734399,CA +1759734400,1759734415,US +1759734416,1759734463,CA +1759734464,1759734607,US +1759734608,1759734639,CA +1759734640,1759734703,US +1759734704,1759734719,CA +1759734720,1759734735,US +1759734736,1759734751,CA +1759734752,1759734783,US +1759734784,1759735967,CA +1759735968,1759736015,US 1759736016,1759736031,CA 1759736032,1759736063,US -1759736064,1759736319,CA -1759736320,1759736447,US -1759736448,1759736511,CA -1759736512,1759737007,US -1759737008,1759737015,CA -1759737016,1759737423,US -1759737424,1759737431,CA -1759737432,1759737855,US -1759737856,1759738879,CA -1759738880,1759739039,US -1759739040,1759739055,CA -1759739056,1759739519,US -1759739520,1759739551,CA -1759739552,1759739567,US -1759739568,1759739575,CA -1759739576,1759739967,US -1759739968,1759739999,CA -1759740000,1759740015,US -1759740016,1759740023,CA -1759740024,1759740031,US -1759740032,1759740095,CA -1759740096,1759740223,US -1759740224,1759740287,CA -1759740288,1759740415,US -1759740416,1759743999,CA +1759736064,1759736575,CA +1759736576,1759737007,US +1759737008,1759737023,CA +1759737024,1759737071,US +1759737072,1759737087,CA +1759737088,1759737343,US +1759737344,1759738879,CA +1759738880,1759739023,US +1759739024,1759739055,CA +1759739056,1759739103,US +1759739104,1759743999,CA 1759744000,1759744255,US 1759744256,1759746047,CA 1759746048,1759746303,US -1759746304,1759747071,CA -1759747072,1759747151,US -1759747152,1759747159,CA -1759747160,1759747407,US -1759747408,1759747415,CA -1759747416,1759747455,US -1759747456,1759747519,CA -1759747520,1759747663,US -1759747664,1759747671,CA -1759747672,1759747927,US -1759747928,1759747935,CA -1759747936,1759748175,US -1759748176,1759748183,CA -1759748184,1759748431,US -1759748432,1759748439,CA -1759748440,1759748479,US -1759748480,1759748543,CA -1759748544,1759748647,US +1759746304,1759747839,CA +1759747840,1759747919,US +1759747920,1759747935,CA +1759747936,1759748095,US +1759748096,1759748407,CA +1759748408,1759748415,US +1759748416,1759748607,CA +1759748608,1759748647,US 1759748648,1759748655,SE 1759748656,1759748863,US 1759748864,1759749119,CA 1759749120,1759749631,US -1759749632,1759749903,CA -1759749904,1759749919,US -1759749920,1759749935,CA -1759749936,1759749975,US -1759749976,1759749983,CA -1759749984,1759750223,US +1759749632,1759749935,CA +1759749936,1759749967,US +1759749968,1759749983,CA +1759749984,1759750159,US +1759750160,1759750175,CA +1759750176,1759750191,US +1759750192,1759750207,CA +1759750208,1759750223,US 1759750224,1759750239,CA 1759750240,1759750335,US -1759750336,1759750351,CA -1759750352,1759750367,US -1759750368,1759750399,CA +1759750336,1759750399,CA 1759750400,1759750415,US 1759750416,1759750431,CA 1759750432,1759750463,US 1759750464,1759750479,CA 1759750480,1759750495,US 1759750496,1759750511,CA -1759750512,1759751679,US -1759751680,1759751759,CA -1759751760,1759751775,US -1759751776,1759752191,CA -1759752192,1759752511,US -1759752512,1759752543,CA -1759752544,1759752703,US -1759752704,1759753023,CA -1759753024,1759753047,US -1759753048,1759753055,CA -1759753056,1759753215,US +1759750512,1759751167,US +1759751168,1759752191,CA +1759752192,1759752447,US +1759752448,1759753023,CA +1759753024,1759753039,US +1759753040,1759753055,CA +1759753056,1759753087,US +1759753088,1759753103,CA +1759753104,1759753135,US +1759753136,1759753151,CA +1759753152,1759753215,US 1759753216,1759754239,CA 1759754240,1759754495,US -1759754496,1759754623,CA -1759754624,1759754719,US +1759754496,1759754655,CA +1759754656,1759754719,US 1759754720,1759754735,CA 1759754736,1759754751,US 1759754752,1759754879,CA -1759754880,1759755263,US -1759755264,1759755647,CA -1759755648,1759755775,US +1759754880,1759755007,US +1759755008,1759755151,CA +1759755152,1759755167,US +1759755168,1759755199,CA +1759755200,1759755263,US +1759755264,1759755711,CA +1759755712,1759755775,US 1759755776,1759755903,CA 1759755904,1759755935,US -1759755936,1759755943,CA -1759755944,1759756031,US -1759756032,1759756159,CA +1759755936,1759755951,CA +1759755952,1759755967,US +1759755968,1759755983,CA +1759755984,1759755999,US +1759756000,1759756159,CA 1759756160,1759756239,US -1759756240,1759756247,CA -1759756248,1759764479,US +1759756240,1759756255,CA +1759756256,1759764479,US 1759764480,1759766527,CA -1759766528,1759767551,US +1759766528,1759767039,CY +1759767040,1759767551,US 1759767552,1759767807,CA 1759767808,1759768831,US 1759768832,1759772671,CA @@ -56253,11 +56995,8 @@ 1760823296,1760824319,PT 1760824320,1760837631,US 1760837632,1760839679,CA -1760839680,1760840269,US -1760840270,1760840270,LU -1760840271,1760840379,US -1760840380,1760840380,LU -1760840381,1760867327,US +1760839680,1760841727,LU +1760841728,1760867327,US 1760867328,1760868351,PR 1760868352,1760869375,US 1760869376,1760870399,CA @@ -56671,270 +57410,239 @@ 1805148160,1805150463,US 1805150464,1805150719,GB 1805150720,1805156351,US -1805156352,1805156367,CA -1805156368,1805156375,US -1805156376,1805156511,CA -1805156512,1805156527,US -1805156528,1805156543,CA -1805156544,1805156551,US -1805156552,1805156599,CA -1805156600,1805156607,US -1805156608,1805156719,CA +1805156352,1805156511,CA +1805156512,1805156519,US +1805156520,1805156719,CA 1805156720,1805156815,US -1805156816,1805156823,CA -1805156824,1805156831,GB +1805156816,1805156831,CA 1805156832,1805156863,US 1805156864,1805156871,CA 1805156872,1805156879,US -1805156880,1805156911,CA -1805156912,1805156919,US -1805156920,1805156927,CA -1805156928,1805156935,US -1805156936,1805156951,CA -1805156952,1805156959,US -1805156960,1805156967,CA -1805156968,1805156975,US -1805156976,1805156999,CA -1805157000,1805157023,US -1805157024,1805157079,CA -1805157080,1805157095,US -1805157096,1805157159,CA -1805157160,1805157375,US -1805157376,1805157383,CA -1805157384,1805157387,US -1805157388,1805157631,CA -1805157632,1805158031,US -1805158032,1805158047,CA -1805158048,1805158063,AE -1805158064,1805158143,US -1805158144,1805158399,CA +1805156880,1805157007,CA +1805157008,1805157015,US +1805157016,1805157167,CA +1805157168,1805157231,US +1805157232,1805157247,CA +1805157248,1805157279,US +1805157280,1805157311,CA +1805157312,1805157375,US +1805157376,1805158399,CA 1805158400,1805158655,US -1805158656,1805158763,CA -1805158764,1805158767,US -1805158768,1805158823,CA -1805158824,1805158831,US -1805158832,1805158911,CA +1805158656,1805158911,CA 1805158912,1805159039,US -1805159040,1805159055,CA -1805159056,1805159071,US -1805159072,1805159103,CA -1805159104,1805159175,US -1805159176,1805159191,CA -1805159192,1805159199,US -1805159200,1805159247,CA -1805159248,1805159279,US -1805159280,1805159359,CA +1805159040,1805159247,CA +1805159248,1805159271,US +1805159272,1805159359,CA 1805159360,1805159423,US 1805159424,1805160191,CA -1805160192,1805160215,US -1805160216,1805160271,CA -1805160272,1805160279,US -1805160280,1805160295,CA -1805160296,1805160303,US -1805160304,1805160319,CA +1805160192,1805160207,US +1805160208,1805160319,CA 1805160320,1805160335,US -1805160336,1805160343,CA -1805160344,1805160351,US -1805160352,1805160359,CA -1805160360,1805160367,US -1805160368,1805160407,CA -1805160408,1805160415,US -1805160416,1805160423,CA +1805160336,1805160423,CA 1805160424,1805160439,US 1805160440,1805160447,CA -1805160448,1805160895,US +1805160448,1805160703,US +1805160704,1805160719,CA +1805160720,1805160735,US +1805160736,1805160767,CA +1805160768,1805160783,US +1805160784,1805160799,CA +1805160800,1805160895,US 1805160896,1805160911,CA -1805160912,1805160943,US -1805160944,1805160959,CA -1805160960,1805161215,US -1805161216,1805161471,CA -1805161472,1805162495,US +1805160912,1805160927,US +1805160928,1805162255,CA +1805162256,1805162495,US 1805162496,1805164111,CA 1805164112,1805164127,US -1805164128,1805164143,CA -1805164144,1805164287,US +1805164128,1805164159,CA +1805164160,1805164223,US +1805164224,1805164239,CA +1805164240,1805164287,US 1805164288,1805164351,CA -1805164352,1805164799,US +1805164352,1805164367,US +1805164368,1805164383,CA +1805164384,1805164799,US 1805164800,1805164863,CA -1805164864,1805165055,US +1805164864,1805164879,US +1805164880,1805164895,CA +1805164896,1805164975,US +1805164976,1805164991,CA +1805164992,1805165055,US 1805165056,1805165311,CA 1805165312,1805165439,US 1805165440,1805165455,CA -1805165456,1805166335,US -1805166336,1805166591,CA -1805166592,1805166655,US -1805166656,1805166687,CA -1805166688,1805166703,US -1805166704,1805166751,CA -1805166752,1805166847,US -1805166848,1805167103,CA +1805165456,1805165823,US +1805165824,1805166079,CA +1805166080,1805166335,US +1805166336,1805167103,CA 1805167104,1805167359,FR -1805167360,1805167615,US -1805167616,1805167743,CA -1805167744,1805167871,US -1805167872,1805167887,CA -1805167888,1805168767,US -1805168768,1805168783,CA -1805168784,1805168847,US +1805167360,1805167551,CA +1805167552,1805167567,US +1805167568,1805167887,CA +1805167888,1805167903,US +1805167904,1805167935,CA +1805167936,1805168079,US +1805168080,1805168127,CA +1805168128,1805168223,US +1805168224,1805168255,CA +1805168256,1805168671,US +1805168672,1805168703,CA +1805168704,1805168751,US +1805168752,1805168799,CA +1805168800,1805168815,US +1805168816,1805168831,CA +1805168832,1805168847,US 1805168848,1805168855,CA 1805168856,1805168863,SE -1805168864,1805169663,US -1805169664,1805170047,CA -1805170048,1805170175,US -1805170176,1805171239,CA -1805171240,1805171247,US -1805171248,1805171311,CA -1805171312,1805171327,US -1805171328,1805171343,CA -1805171344,1805171351,US -1805171352,1805171367,CA -1805171368,1805171375,US -1805171376,1805171383,CA -1805171384,1805171391,US -1805171392,1805171551,CA -1805171552,1805171559,US -1805171560,1805171583,CA -1805171584,1805171591,US -1805171592,1805171599,CA -1805171600,1805171607,US -1805171608,1805171647,CA -1805171648,1805171663,US -1805171664,1805171687,CA -1805171688,1805171703,US -1805171704,1805171711,CA -1805171712,1805171775,US -1805171776,1805171839,CA -1805171840,1805172047,US -1805172048,1805172063,CA -1805172064,1805172735,US -1805172736,1805172991,CA -1805172992,1805173079,US -1805173080,1805173087,CA +1805168864,1805169183,CA +1805169184,1805169199,US +1805169200,1805169215,CA +1805169216,1805169263,US +1805169264,1805169279,CA +1805169280,1805169663,US +1805169664,1805171711,CA +1805171712,1805171759,US +1805171760,1805171839,CA +1805171840,1805171887,US +1805171888,1805171903,CA +1805171904,1805171951,US +1805171952,1805171967,CA +1805171968,1805172047,US +1805172048,1805172095,CA +1805172096,1805172159,US +1805172160,1805173007,CA +1805173008,1805173039,US +1805173040,1805173055,CA +1805173056,1805173071,US +1805173072,1805173087,CA 1805173088,1805173247,US -1805173248,1805173503,CA -1805173504,1805173887,US -1805173888,1805173951,CA -1805173952,1805174527,US -1805174528,1805174655,CA -1805174656,1805174815,US -1805174816,1805174823,CA -1805174824,1805174831,US -1805174832,1805174847,CA -1805174848,1805174911,US -1805174912,1805174943,CA -1805174944,1805175103,US +1805173248,1805173567,CA +1805173568,1805173599,US +1805173600,1805173615,CA +1805173616,1805173759,US +1805173760,1805173823,CA +1805173824,1805174271,US +1805174272,1805174335,CA +1805174336,1805174527,US +1805174528,1805174863,CA +1805174864,1805174911,US +1805174912,1805174975,CA +1805174976,1805175103,US 1805175104,1805175119,CA -1805175120,1805175159,US -1805175160,1805175167,CA +1805175120,1805175151,US +1805175152,1805175167,CA 1805175168,1805175807,US 1805175808,1805176319,CA -1805176320,1805176831,US -1805176832,1805177087,CA -1805177088,1805177471,US -1805177472,1805177599,CA +1805176320,1805176575,US +1805176576,1805177343,CA +1805177344,1805177375,US +1805177376,1805177599,CA 1805177600,1805177855,US -1805177856,1805178879,CA -1805178880,1805178943,US -1805178944,1805179071,CA -1805179072,1805179135,US -1805179136,1805179391,CA -1805179392,1805179647,US -1805179648,1805179903,CA -1805179904,1805180927,US -1805180928,1805181183,CA -1805181184,1805181439,US -1805181440,1805181951,CA +1805177856,1805181951,CA 1805181952,1805182207,US 1805182208,1805182719,CA -1805182720,1805183135,US -1805183136,1805183151,CA -1805183152,1805183743,US -1805183744,1805183999,CA -1805184000,1805184127,US -1805184128,1805184159,CA -1805184160,1805184255,US -1805184256,1805184511,CA +1805182720,1805183039,US +1805183040,1805183103,CA +1805183104,1805183135,US +1805183136,1805183167,CA +1805183168,1805183199,US +1805183200,1805183231,CA +1805183232,1805183743,US +1805183744,1805184511,CA 1805184512,1805184527,US -1805184528,1805184535,CA -1805184536,1805184607,US -1805184608,1805184639,CA -1805184640,1805184687,US -1805184688,1805184703,CA -1805184704,1805184735,US -1805184736,1805184783,CA -1805184784,1805184863,US -1805184864,1805184895,CA -1805184896,1805185023,US +1805184528,1805184671,CA +1805184672,1805184687,US +1805184688,1805184783,CA +1805184784,1805184799,US +1805184800,1805184895,CA +1805184896,1805184911,US +1805184912,1805184943,CA +1805184944,1805185023,US 1805185024,1805185071,CA -1805185072,1805185151,US +1805185072,1805185103,US +1805185104,1805185119,CA +1805185120,1805185151,US 1805185152,1805185159,CA 1805185160,1805185167,FI 1805185168,1805185215,CA -1805185216,1805185279,US -1805185280,1805185311,CA -1805185312,1805185327,US -1805185328,1805185343,CA -1805185344,1805185407,US -1805185408,1805185423,CA -1805185424,1805185647,US -1805185648,1805185655,CA -1805185656,1805185663,US -1805185664,1805185679,CA -1805185680,1805185919,US -1805185920,1805185935,CA -1805185936,1805185951,US -1805185952,1805185959,CA +1805185216,1805185231,US +1805185232,1805185247,CA +1805185248,1805185279,US +1805185280,1805185343,CA +1805185344,1805185359,US +1805185360,1805185423,CA +1805185424,1805185439,US +1805185440,1805185471,CA +1805185472,1805185519,US +1805185520,1805185535,CA +1805185536,1805185599,US +1805185600,1805185679,CA +1805185680,1805185695,US +1805185696,1805185727,CA +1805185728,1805185759,US +1805185760,1805185791,CA +1805185792,1805185919,US +1805185920,1805185959,CA 1805185960,1805185967,NO -1805185968,1805186111,US -1805186112,1805186127,CA +1805185968,1805185999,US +1805186000,1805186079,CA +1805186080,1805186095,US +1805186096,1805186127,CA 1805186128,1805186143,US -1805186144,1805186175,CA -1805186176,1805186335,US -1805186336,1805186351,CA -1805186352,1805186551,US -1805186552,1805186575,CA -1805186576,1805186591,GB -1805186592,1805186879,US -1805186880,1805186911,CA -1805186912,1805186943,US -1805186944,1805186959,CA +1805186144,1805186239,CA +1805186240,1805186255,US +1805186256,1805186271,CA +1805186272,1805186287,US +1805186288,1805186351,CA +1805186352,1805186463,US +1805186464,1805186511,CA +1805186512,1805186543,US +1805186544,1805186591,CA +1805186592,1805186607,US +1805186608,1805186751,CA +1805186752,1805186783,US +1805186784,1805186799,CA +1805186800,1805186879,US +1805186880,1805186959,CA 1805186960,1805186975,US -1805186976,1805186991,CA -1805186992,1805186999,US -1805187000,1805187023,CA -1805187024,1805187103,US -1805187104,1805187111,CA +1805186976,1805187023,CA +1805187024,1805187071,US +1805187072,1805187111,CA 1805187112,1805187119,NO -1805187120,1805187127,CA -1805187128,1805187359,US -1805187360,1805187391,CA +1805187120,1805187135,CA +1805187136,1805187327,US +1805187328,1805187391,CA 1805187392,1805187455,US -1805187456,1805187487,CA -1805187488,1805187551,US -1805187552,1805187567,CA -1805187568,1805187871,US -1805187872,1805187887,CA -1805187888,1805188175,US -1805188176,1805188223,CA -1805188224,1805188287,US -1805188288,1805188295,CA -1805188296,1805188367,US +1805187456,1805187503,CA +1805187504,1805187519,US +1805187520,1805187567,CA +1805187568,1805187839,US +1805187840,1805187887,CA +1805187888,1805188159,US +1805188160,1805188255,CA +1805188256,1805188287,US +1805188288,1805188303,CA +1805188304,1805188319,US +1805188320,1805188351,CA +1805188352,1805188367,US 1805188368,1805188375,CA 1805188376,1805188383,FI -1805188384,1805188447,CA -1805188448,1805188479,US -1805188480,1805188511,CA -1805188512,1805188639,US -1805188640,1805188647,CA -1805188648,1805188703,US -1805188704,1805188735,CA +1805188384,1805188655,CA +1805188656,1805188671,US +1805188672,1805188735,CA 1805188736,1805188751,US -1805188752,1805188767,CA -1805188768,1805188863,US +1805188752,1805188799,CA +1805188800,1805188863,US 1805188864,1805188879,CA -1805188880,1805188911,US -1805188912,1805188927,CA -1805188928,1805190399,US +1805188880,1805188895,US +1805188896,1805188927,CA +1805188928,1805189039,US +1805189040,1805189055,CA +1805189056,1805189071,US +1805189072,1805189087,CA +1805189088,1805189103,US +1805189104,1805189119,CA +1805189120,1805190399,US 1805190400,1805190655,ES 1805190656,1805190911,DE 1805190912,1805194239,US @@ -57558,8 +58266,7 @@ 1834876928,1834885119,RU 1834885120,1834893311,FR 1834893312,1834901503,RU -1834901504,1834902527,XK -1834902528,1834903551,RS +1834901504,1834903551,RS 1834903552,1834904575,BA 1834904576,1834905087,RS 1834905088,1834905343,BG @@ -58259,7 +58966,9 @@ 1843843072,1843843327,DE 1843843328,1843843583,GB 1843843584,1843843839,AT -1843843840,1843844863,DE +1843843840,1843844095,DE +1843844096,1843844351,IT +1843844352,1843844863,DE 1843844864,1843845119,GB 1843845120,1843845631,ES 1843845632,1843845887,GB @@ -59265,9 +59974,9 @@ 1921865728,1921867775,ID 1921867776,1921871871,AU 1921871872,1921872895,US -1921872896,1921873663,NZ -1921873664,1921874175,US -1921874176,1921874687,NZ +1921872896,1921873151,NZ +1921873152,1921873407,US +1921873408,1921874687,NZ 1921874688,1921875967,US 1921875968,1921892351,CN 1921892352,1921896447,AU @@ -59698,7 +60407,7 @@ 1959671808,1959673855,BD 1959673856,1959674879,PK 1959674880,1959675903,JP -1959675904,1959676927,US +1959675904,1959676927,TW 1959676928,1959677951,SG 1959677952,1959678975,AU 1959678976,1959679999,PK @@ -60494,7 +61203,7 @@ 2033078272,2033079295,HK 2033079296,2033088511,IN 2033088512,2033089535,AU -2033089536,2033090559,IN +2033089536,2033090559,US 2033090560,2033319935,CN 2033319936,2033321983,IN 2033321984,2033324031,CN @@ -60742,7 +61451,9 @@ 2056819088,2056819103,SG 2056819104,2056823849,JP 2056823850,2056823850,SG -2056823851,2056825855,JP +2056823851,2056824831,JP +2056824832,2056824847,AU +2056824848,2056825855,JP 2056825856,2056826879,CN 2056826880,2056830975,JP 2056830976,2056847359,CN @@ -60776,7 +61487,9 @@ 2059997184,2060001279,MN 2060001280,2060002559,HK 2060002560,2060002815,ID -2060002816,2060005375,HK +2060002816,2060004399,HK +2060004400,2060004415,AF +2060004416,2060005375,HK 2060005376,2060009471,CN 2060009472,2060025855,AU 2060025856,2060058623,TW @@ -60823,6 +61536,7 @@ 2063122432,2063138815,SG 2063138816,2063335423,JP 2063335424,2063341567,AU +2063341568,2063343615,SG 2063343616,2063351807,US 2063351808,2063368191,KR 2063368192,2063370239,US @@ -61138,7 +61852,8 @@ 2090074112,2090237951,AU 2090237952,2090239999,TW 2090240256,2090240511,CN -2090240512,2090241023,AU +2090240512,2090240767,AU +2090240768,2090241023,NZ 2090241024,2090242047,MY 2090242048,2090246143,JP 2090246144,2090250239,NZ @@ -61362,12 +62077,15 @@ 2147501312,2147501823,NL 2147501824,2147502079,US 2147502080,2147504127,DK -2147504128,2147508223,RU +2147504128,2147506687,RU +2147506688,2147507199,UA +2147507200,2147508223,RU 2147508224,2147510271,DE 2147510272,2147510783,UA 2147510784,2147511039,RU 2147511040,2147512319,CY -2147512320,2147516415,DE +2147512320,2147514879,DE +2147514880,2147516415,IT 2147516416,2147520511,RU 2147520512,2147524607,DE 2147524608,2147526655,RU @@ -61471,9 +62189,13 @@ 2153387776,2153388031,CH 2153388032,2153388287,ES 2153388288,2153388543,PL -2153388544,2153394431,US +2153388544,2153391615,US +2153391616,2153391871,HK +2153391872,2153394431,US 2153394432,2153394943,SG -2153394944,2153396991,US +2153394944,2153395455,US +2153395456,2153395711,VN +2153395712,2153396991,US 2153396992,2153397247,IL 2153397248,2153397503,IN 2153397504,2153397759,SA @@ -61510,7 +62232,9 @@ 2154037248,2154102783,CA 2154102784,2154430463,US 2154430464,2154495999,SG -2154496000,2155610111,US +2154496000,2154561535,US +2154561536,2154627071,CN +2154627072,2155610111,US 2155610112,2155675647,UA 2155675648,2155806719,US 2155806720,2155808767,IT @@ -61641,9 +62365,11 @@ 2166292480,2166358015,GB 2166358016,2166571007,US 2166571008,2166575103,GB -2166575104,2166594563,US +2166575104,2166594559,US +2166594560,2166594563,PL 2166594564,2166594564,DE -2166594565,2167209983,US +2166594565,2166594815,PL +2166594816,2167209983,US 2167209984,2167242751,DZ 2167242752,2167275519,BF 2167275520,2167930879,US @@ -61710,7 +62436,9 @@ 2176434176,2176450559,FR 2176450560,2176516095,US 2176516096,2176581631,DE -2176581632,2176868607,US +2176581632,2176862975,US +2176862976,2176863231,SG +2176863232,2176868607,US 2176868608,2176868863,IT 2176868864,2176897023,US 2176897024,2176897535,AU @@ -62214,7 +62942,9 @@ 2207846400,2207848447,NL 2207848448,2207852543,US 2207852544,2207853055,RS -2207853056,2207907839,US +2207853056,2207854079,US +2207854080,2207855615,SG +2207855616,2207907839,US 2207907840,2207973375,IT 2207973376,2208038911,NL 2208038912,2208235519,US @@ -62862,8 +63592,8 @@ 2254098432,2254100479,RU 2254100480,2254102527,CH 2254102528,2254110719,IT -2254110720,2254766079,DE -2254766080,2254798847,CH +2254110720,2254774271,DE +2254774272,2254798847,CH 2254798848,2255421439,DE 2255421440,2255683583,US 2255683584,2255749119,AU @@ -62950,7 +63680,9 @@ 2258594304,2258594607,HK 2258594608,2258594623,AU 2258594624,2258594751,HK -2258594752,2258595103,AU +2258594752,2258595071,AU +2258595072,2258595087,TW +2258595088,2258595103,AU 2258595104,2258595167,TW 2258595168,2258595231,AU 2258595232,2258595263,TW @@ -63270,9 +64002,11 @@ 2282234184,2283151359,US 2283151360,2283159551,IN 2283159552,2291142655,US -2291142656,2291144703,NL +2291142656,2291144191,CN +2291144192,2291144703,NL 2291144704,2291145471,ES -2291145472,2291147775,NL +2291145472,2291146751,NL +2291146752,2291147775,CN 2291147776,2291148799,CH 2291148800,2291154943,NL 2291154944,2291171327,GB @@ -63439,7 +64173,9 @@ 2303341952,2303341967,ES 2303341968,2303342031,FR 2303342032,2303342039,ES -2303342040,2303342459,FR +2303342040,2303342279,FR +2303342280,2303342287,ES +2303342288,2303342459,FR 2303342460,2303342463,DE 2303342464,2303342975,FR 2303342976,2303343007,CZ @@ -63513,7 +64249,9 @@ 2303367924,2303367927,DE 2303367928,2303368579,FR 2303368580,2303368583,ES -2303368584,2303373431,FR +2303368584,2303368799,FR +2303368800,2303368831,PT +2303368832,2303373431,FR 2303373432,2303373439,ES 2303373440,2303374399,FR 2303374400,2303374463,NL @@ -63545,7 +64283,9 @@ 2303387008,2303387535,FR 2303387536,2303387551,PT 2303387552,2303387567,FI -2303387568,2303387763,FR +2303387568,2303387591,FR +2303387592,2303387599,ES +2303387600,2303387763,FR 2303387764,2303387767,PL 2303387768,2303387839,FR 2303387840,2303387871,LT @@ -63692,8 +64432,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 @@ -63762,7 +64502,9 @@ 2317632512,2317634559,BR 2317634560,2317635583,BO 2317635584,2317638655,BR -2317638656,2317639679,HN +2317638656,2317638863,HN +2317638864,2317638871,BR +2317638872,2317639679,HN 2317639680,2317640703,AR 2317640704,2317649919,BR 2317649920,2317649991,HN @@ -63815,7 +64557,9 @@ 2319165440,2319167487,AR 2319167488,2319168511,HN 2319169536,2319174655,BR -2319174656,2319175647,HN +2319174656,2319175583,HN +2319175584,2319175591,BR +2319175592,2319175647,HN 2319175648,2319175663,BR 2319175664,2319175679,HN 2319175680,2319184895,BR @@ -63873,7 +64617,9 @@ 2321454080,2321467136,BR 2321467137,2321467137,US 2321467138,2321471487,BR -2321471488,2321472391,HN +2321471488,2321472039,HN +2321472040,2321472047,CA +2321472048,2321472391,HN 2321472392,2321472399,UY 2321472400,2321472511,HN 2321472512,2321477631,BR @@ -63890,7 +64636,9 @@ 2321634304,2321648639,BR 2321648640,2321649663,SV 2321649664,2321652735,BR -2321652736,2321653759,BZ +2321652736,2321653223,BZ +2321653224,2321653231,ES +2321653232,2321653759,BZ 2321653760,2321654783,NI 2321654784,2321655807,BR 2321655808,2321656831,MX @@ -64084,177 +64832,156 @@ 2323315712,2323316735,MX 2323316736,2323382271,US 2323382272,2323447807,NO -2323447808,2323644447,US -2323644448,2323644495,CA +2323447808,2323644431,US +2323644432,2323644495,CA 2323644496,2323644511,US 2323644512,2323644543,CA -2323644544,2323644623,US -2323644624,2323644631,GB -2323644632,2323644639,CA +2323644544,2323644575,US +2323644576,2323644607,CA +2323644608,2323644623,US +2323644624,2323644639,CA 2323644640,2323644719,US -2323644720,2323644783,CA -2323644784,2323645119,US +2323644720,2323644799,CA +2323644800,2323644895,US +2323644896,2323644927,CA +2323644928,2323645071,US +2323645072,2323645087,CA +2323645088,2323645119,US 2323645120,2323645135,CA 2323645136,2323645151,US 2323645152,2323645199,CA 2323645200,2323645263,US 2323645264,2323645279,CA -2323645280,2323645967,US -2323645968,2323645983,CA -2323645984,2323646079,US +2323645280,2323645471,US +2323645472,2323645503,CA +2323645504,2323645535,US +2323645536,2323645567,CA +2323645568,2323645663,US +2323645664,2323645695,CA +2323645696,2323645951,US +2323645952,2323645983,CA +2323645984,2323645999,US +2323646000,2323646015,CA +2323646016,2323646079,US 2323646080,2323646127,CA 2323646128,2323646335,US 2323646336,2323646383,CA 2323646384,2323646415,US -2323646416,2323646431,CA -2323646432,2323646447,US -2323646448,2323646463,AE -2323646464,2323646479,CA +2323646416,2323646479,CA 2323646480,2323646495,US 2323646496,2323646527,CA -2323646528,2323646815,US +2323646528,2323646783,US +2323646784,2323646799,CA +2323646800,2323646815,US 2323646816,2323646831,CA 2323646832,2323646911,US 2323646912,2323646975,CA -2323646976,2323647199,US +2323646976,2323647119,US +2323647120,2323647135,CA +2323647136,2323647199,US 2323647200,2323647215,CA -2323647216,2323647391,US -2323647392,2323647407,CA -2323647408,2323647535,US -2323647536,2323647583,CA -2323647584,2323647759,US -2323647760,2323647775,CA -2323647776,2323647871,US -2323647872,2323647887,CA -2323647888,2323647999,US +2323647216,2323647311,US +2323647312,2323647407,CA +2323647408,2323647487,US +2323647488,2323647519,CA +2323647520,2323647535,US +2323647536,2323647615,CA +2323647616,2323647743,US +2323647744,2323647775,CA +2323647776,2323647791,US +2323647792,2323647807,CA +2323647808,2323647871,US +2323647872,2323647935,CA +2323647936,2323647999,US 2323648000,2323648007,CA 2323648008,2323648015,FI -2323648016,2323648319,US +2323648016,2323648031,US +2323648032,2323648063,CA +2323648064,2323648319,US 2323648320,2323648335,CA -2323648336,2323648367,US -2323648368,2323648383,AE +2323648336,2323648351,US +2323648352,2323648383,CA 2323648384,2323648639,US 2323648640,2323648655,CA -2323648656,2323648767,US -2323648768,2323648943,CA -2323648944,2323648951,US -2323648952,2323649023,CA +2323648656,2323648671,US +2323648672,2323648703,CA +2323648704,2323648767,US +2323648768,2323649023,CA 2323649024,2323649279,US -2323649280,2323649607,CA -2323649608,2323649615,US -2323649616,2323649751,CA +2323649280,2323649751,CA 2323649752,2323649759,US 2323649760,2323649775,CA 2323649776,2323649783,US 2323649784,2323649823,CA 2323649824,2323649831,NO -2323649832,2323649855,CA -2323649856,2323649863,US -2323649864,2323649919,CA -2323649920,2323649935,US -2323649936,2323649951,CA -2323649952,2323649959,US -2323649960,2323649983,CA -2323649984,2323650007,US +2323649832,2323650007,CA 2323650008,2323650015,RO -2323650016,2323650023,CA -2323650024,2323650031,US -2323650032,2323650039,CA -2323650040,2323650047,US -2323650048,2323650127,CA -2323650128,2323650151,US -2323650152,2323650167,CA -2323650168,2323650175,US -2323650176,2323650183,CA +2323650016,2323650183,CA 2323650184,2323650191,FI -2323650192,2323650223,CA -2323650224,2323650231,US -2323650232,2323650239,CA +2323650192,2323650239,CA 2323650240,2323650255,US -2323650256,2323650263,CA -2323650264,2323650271,US -2323650272,2323650527,CA -2323650528,2323650559,US -2323650560,2323651327,CA +2323650256,2323651327,CA 2323651328,2323651583,US -2323651584,2323652223,CA -2323652224,2323652255,US -2323652256,2323652287,CA -2323652288,2323652607,US -2323652608,2323653119,CA +2323651584,2323652287,CA +2323652288,2323652335,US +2323652336,2323653119,CA 2323653120,2323653135,US 2323653136,2323653151,CA 2323653152,2323653375,US 2323653376,2323653631,CA 2323653632,2323653887,US -2323653888,2323655167,CA -2323655168,2323655503,US -2323655504,2323655511,CA -2323655512,2323655823,US -2323655824,2323655839,CA -2323655840,2323655935,US -2323655936,2323655967,CA -2323655968,2323655983,US -2323655984,2323655991,CA -2323655992,2323655999,US -2323656000,2323656031,CA -2323656032,2323656223,US -2323656224,2323656255,CA -2323656256,2323656511,US -2323656512,2323656607,CA -2323656608,2323656815,US +2323653888,2323655423,CA +2323655424,2323655487,US +2323655488,2323655551,CA +2323655552,2323655807,US +2323655808,2323655871,CA +2323655872,2323655935,US +2323655936,2323656031,CA +2323656032,2323656207,US +2323656208,2323656255,CA +2323656256,2323656271,US +2323656272,2323656287,CA +2323656288,2323656447,US +2323656448,2323656719,CA +2323656720,2323656735,US +2323656736,2323656767,CA +2323656768,2323656815,US 2323656816,2323656831,CA 2323656832,2323656895,US 2323656896,2323656927,CA 2323656928,2323656959,US 2323656960,2323657215,CA -2323657216,2323657311,US +2323657216,2323657263,US +2323657264,2323657279,CA +2323657280,2323657311,US 2323657312,2323657343,CA -2323657344,2323657567,US -2323657568,2323657663,CA -2323657664,2323657855,US -2323657856,2323657919,CA +2323657344,2323657535,US +2323657536,2323657663,CA +2323657664,2323657695,US +2323657696,2323657711,CA +2323657712,2323657759,US +2323657760,2323657775,CA +2323657776,2323657839,US +2323657840,2323657919,CA 2323657920,2323658495,US 2323658496,2323658751,CA 2323658752,2323659519,US 2323659520,2323659775,CA -2323659776,2323660287,US -2323660288,2323661079,CA -2323661080,2323661087,US -2323661088,2323661143,CA -2323661144,2323661151,US -2323661152,2323661199,CA -2323661200,2323661223,US -2323661224,2323661239,CA -2323661240,2323661271,US -2323661272,2323661311,CA +2323659776,2323660191,US +2323660192,2323661311,CA 2323661312,2323661567,US -2323661568,2323661623,CA -2323661624,2323661823,US -2323661824,2323662335,CA -2323662336,2323662431,US -2323662432,2323662447,AE -2323662448,2323662719,US -2323662720,2323662751,CA -2323662752,2323662767,US -2323662768,2323662775,CA -2323662776,2323663679,US -2323663680,2323663759,CA -2323663760,2323663767,US -2323663768,2323663791,CA -2323663792,2323663799,US -2323663800,2323663839,CA -2323663840,2323663871,US -2323663872,2323664895,CA -2323664896,2323665039,US -2323665040,2323665047,CA -2323665048,2323665151,US -2323665152,2323665919,CA +2323661568,2323661631,CA +2323661632,2323661823,US +2323661824,2323663103,CA +2323663104,2323663679,US +2323663680,2323665919,CA 2323665920,2323666687,US 2323666688,2323668223,CA 2323668224,2323668991,US 2323668992,2323669759,CA -2323669760,2323671039,US +2323669760,2323670015,US +2323670016,2323670271,CA +2323670272,2323671039,US 2323671040,2323671295,CA 2323671296,2323671551,US 2323671552,2323672063,CA @@ -64268,13 +64995,15 @@ 2323672576,2323672591,CA 2323672592,2323672607,US 2323672608,2323672639,CA -2323672640,2323672831,US +2323672640,2323672735,US +2323672736,2323672767,CA +2323672768,2323672831,US 2323672832,2323672847,CA 2323672848,2323672863,US 2323672864,2323672895,CA 2323672896,2323672959,US -2323672960,2323673023,CA -2323673024,2323673351,US +2323672960,2323673055,CA +2323673056,2323673351,US 2323673352,2323673359,CA 2323673360,2323673375,US 2323673376,2323673391,CA @@ -64285,16 +65014,20 @@ 2323673984,2323674047,US 2323674048,2323674111,CA 2323674112,2323674175,US -2323674176,2323674239,CA -2323674240,2323674367,US -2323674368,2323674575,CA +2323674176,2323674575,CA 2323674576,2323674591,US 2323674592,2323674767,CA 2323674768,2323674775,US 2323674776,2323674799,CA -2323674800,2323675839,US +2323674800,2323674879,US +2323674880,2323675135,CA +2323675136,2323675519,US +2323675520,2323675647,CA +2323675648,2323675839,US 2323675840,2323675903,CA -2323675904,2323690495,US +2323675904,2323676927,US +2323676928,2323676991,CA +2323676992,2323690495,US 2323690496,2323690751,IN 2323690752,2323699711,US 2323699712,2323700735,NL @@ -64524,7 +65257,8 @@ 2331988992,2331990015,BR 2331990016,2331991039,AR 2331991040,2331992063,BR -2331992064,2331994111,CL +2331992064,2331992319,CO +2331992320,2331994111,CL 2331994112,2331997183,BR 2331997184,2331998207,MX 2331998208,2332006399,BR @@ -64610,7 +65344,9 @@ 2335970304,2335971327,CA 2335971328,2335994879,US 2335994880,2335995903,CA -2335995904,2336010239,US +2335995904,2336008191,US +2336008192,2336009215,CA +2336009216,2336010239,US 2336010240,2336014335,PR 2336014336,2336161791,US 2336161792,2336227327,NL @@ -64662,7 +65398,14 @@ 2340814848,2340880383,AU 2340880384,2341126143,US 2341126144,2341134335,CY -2341134336,2341273599,US +2341134336,2341134591,IN +2341134592,2341134847,US +2341134848,2341135103,AU +2341135104,2341135359,GB +2341135360,2341135615,SG +2341135616,2341135871,JP +2341135872,2341136127,CN +2341136128,2341273599,US 2341273600,2341339135,KW 2341339136,2341404671,CA 2341404672,2341470207,GB @@ -64927,7 +65670,7 @@ 2372240384,2372240511,NL 2372240512,2372240639,LU 2372240640,2372240895,NL -2372240896,2372241151,CH +2372240896,2372241151,DE 2372241152,2372241407,PK 2372241408,2372243199,RU 2372243200,2372243455,RO @@ -64936,7 +65679,9 @@ 2372243968,2372244223,NO 2372244224,2372244479,BN 2372244480,2372251391,US -2372251392,2372272127,RU +2372251392,2372258815,RU +2372258816,2372259327,TJ +2372259328,2372272127,RU 2372272128,2372337663,US 2372337664,2372403199,ID 2372403200,2372468735,US @@ -65193,7 +65938,11 @@ 2385031168,2385032191,BR 2385032192,2385032703,CA 2385032704,2385035263,BR -2385035264,2385903615,CA +2385035264,2385293087,CA +2385293088,2385293111,US +2385293112,2385307727,CA +2385307728,2385307735,US +2385307736,2385903615,CA 2385903616,2385908735,US 2385908736,2385909759,VG 2385909760,2385915903,US @@ -65386,7 +66135,8 @@ 2408165376,2408169471,BR 2408169472,2408170495,TT 2408170496,2408178687,BR -2408178688,2408179375,HN +2408178688,2408178695,IT +2408178696,2408179375,HN 2408179376,2408179391,IT 2408179392,2408179423,HN 2408179424,2408179431,IT @@ -65855,7 +66605,8 @@ 2427585680,2427585683,TR 2427585684,2427585695,GB 2427585696,2427585711,AE -2427585712,2427585799,GB +2427585712,2427585791,GB +2427585792,2427585799,NL 2427585800,2427585863,IT 2427585864,2427585887,GB 2427585888,2427585917,DE @@ -65885,7 +66636,9 @@ 2427586176,2427586217,AU 2427586218,2427586219,GB 2427586220,2427586221,AU -2427586222,2427591807,GB +2427586222,2427586303,GB +2427586304,2427586311,AU +2427586312,2427591807,GB 2427591808,2427591839,US 2427591840,2427591945,GB 2427591946,2427591946,AT @@ -65979,8 +66732,7 @@ 2433628160,2433630207,NL 2433630208,2433638399,GB 2433638400,2433646591,SE -2433646592,2433647103,US -2433647104,2433647359,DE +2433646592,2433647359,DE 2433647360,2433647615,US 2433647616,2433648639,CA 2433648640,2433650687,DE @@ -66037,7 +66789,9 @@ 2448363840,2448363903,PL 2448363904,2448363967,FR 2448363968,2448364159,PL -2448364160,2448364287,FR +2448364160,2448364231,FR +2448364232,2448364239,PL +2448364240,2448364287,FR 2448364288,2448364351,PL 2448364352,2448364415,FR 2448364416,2448364543,PL @@ -66045,7 +66799,9 @@ 2448364608,2448364735,PL 2448364736,2448364863,FR 2448364864,2448364927,PL -2448364928,2448365183,FR +2448364928,2448365047,FR +2448365048,2448365051,PL +2448365052,2448365183,FR 2448365184,2448365247,PL 2448365248,2448365311,FR 2448365312,2448365375,PL @@ -66065,7 +66821,9 @@ 2448369508,2448369511,DE 2448369512,2448369887,FR 2448369888,2448369903,GB -2448369904,2448370719,FR +2448369904,2448370015,FR +2448370016,2448370047,FI +2448370048,2448370719,FR 2448370720,2448370727,ES 2448370728,2448371031,FR 2448371032,2448371039,ES @@ -66085,7 +66843,9 @@ 2448386048,2448386175,GB 2448386176,2448387199,FR 2448387200,2448387327,DE -2448387328,2448387527,FR +2448387328,2448387359,FR +2448387360,2448387391,CZ +2448387392,2448387527,FR 2448387528,2448387535,ES 2448387536,2448388351,FR 2448388352,2448388479,ES @@ -66100,11 +66860,16 @@ 2448391040,2448391167,FR 2448391168,2448391175,ES 2448391176,2448393471,FR -2448393472,2448394239,PL +2448393472,2448393983,PL +2448393984,2448394239,FR 2448394240,2448394303,DE 2448394304,2448394463,FR 2448394464,2448394479,DE -2448394480,2448394943,FR +2448394480,2448394767,FR +2448394768,2448394771,DE +2448394772,2448394775,FR +2448394776,2448394783,DE +2448394784,2448394943,FR 2448394944,2448395007,DE 2448395008,2448395011,FR 2448395012,2448395015,DE @@ -66128,9 +66893,13 @@ 2448404416,2448404447,GB 2448404448,2448404479,FR 2448404480,2448404511,GB -2448404512,2448406623,FR +2448404512,2448405359,FR +2448405360,2448405367,ES +2448405368,2448406623,FR 2448406624,2448406655,FI -2448406656,2448407807,FR +2448406656,2448407511,FR +2448407512,2448407519,ES +2448407520,2448407807,FR 2448407808,2448407935,ES 2448407936,2448410623,FR 2448410624,2448410687,GB @@ -66144,7 +66913,17 @@ 2448411648,2448412415,GB 2448412416,2448412671,FR 2448412672,2448412799,DE -2448412800,2448414893,FR +2448412800,2448413855,FR +2448413856,2448413887,FI +2448413888,2448413919,FR +2448413920,2448413927,ES +2448413928,2448414375,FR +2448414376,2448414383,ES +2448414384,2448414591,FR +2448414592,2448414719,DE +2448414720,2448414751,FR +2448414752,2448414783,PL +2448414784,2448414893,FR 2448414894,2448414894,PL 2448414895,2448415487,FR 2448415488,2448415615,IT @@ -66162,15 +66941,27 @@ 2448419088,2448419091,DE 2448419092,2448419263,FR 2448419264,2448419327,DE -2448419328,2448419839,FR +2448419328,2448419767,FR +2448419768,2448419771,DE +2448419772,2448419799,FR +2448419800,2448419807,DE +2448419808,2448419839,FR 2448419840,2448419903,PL -2448419904,2448419987,FR +2448419904,2448419975,FR +2448419976,2448419979,PL +2448419980,2448419987,FR 2448419988,2448419991,PL 2448419992,2448420031,FR 2448420032,2448420095,PL 2448420096,2448420159,FR -2448420160,2448420351,PL -2448420352,2448421887,FR +2448420160,2448420415,PL +2448420416,2448420543,FR +2448420544,2448420607,PL +2448420608,2448420671,FR +2448420672,2448420735,PL +2448420736,2448420783,FR +2448420784,2448420863,PL +2448420864,2448421887,FR 2448421888,2448422911,DE 2448422912,2448423167,FR 2448423168,2448423423,GB @@ -66260,7 +67051,8 @@ 2452815872,2452881407,JP 2452881408,2452946943,DE 2452946944,2453143551,US -2453143552,2453209087,JP +2453143552,2453192703,JP +2453192704,2453209087,CN 2453209088,2453274623,US 2453340160,2453405695,NO 2453405696,2453471231,DE @@ -66405,8 +67197,8 @@ 2457362176,2457362431,UA 2457362432,2457362687,GB 2457362688,2457362943,UA -2457362944,2457363711,GB -2457363712,2457363967,UA +2457362944,2457363455,RU +2457363456,2457363967,UA 2457363968,2457364479,GB 2457364480,2457365503,RU 2457365504,2457366015,CZ @@ -66430,7 +67222,7 @@ 2457392128,2457392639,KG 2457392640,2457392895,CZ 2457392896,2457393151,UA -2457393152,2457394175,RU +2457393152,2457394175,CZ 2457394176,2457394431,UA 2457394432,2457394687,RU 2457394688,2457394943,UA @@ -66465,7 +67257,9 @@ 2459631616,2459697151,CL 2459697152,2459828223,US 2459828224,2459846655,RU -2459846656,2459848703,FR +2459846656,2459847679,FR +2459847680,2459848191,RU +2459848192,2459848703,FR 2459848704,2459860991,RU 2459860992,2459893759,ES 2459893760,2459959295,CH @@ -66570,7 +67364,9 @@ 2462486528,2462504959,GB 2462504960,2462507007,US 2462507008,2462520319,GB -2462520320,2462522367,US +2462520320,2462521744,US +2462521745,2462521745,GB +2462521746,2462522367,US 2462522368,2462526602,GB 2462526603,2462526603,US 2462526604,2462529535,GB @@ -66639,7 +67435,8 @@ 2465690368,2465693695,IT 2465693696,2465697791,NO 2465697792,2465718271,SE -2465718272,2465726463,NO +2465718272,2465722367,NO +2465722368,2465726463,SE 2465726464,2465791999,CH 2465792000,2465857535,FR 2465857536,2465923071,US @@ -66778,7 +67575,9 @@ 2474639360,2474901503,US 2474901504,2474967039,AU 2474967040,2475130879,US -2475130880,2475139391,FR +2475130880,2475135487,FR +2475135488,2475135495,ES +2475135496,2475139391,FR 2475139392,2475139455,ES 2475139456,2475141935,FR 2475141936,2475141951,FI @@ -66790,7 +67589,9 @@ 2475143616,2475143647,CZ 2475143648,2475143679,PT 2475143680,2475143743,DE -2475143744,2475143807,FR +2475143744,2475143783,FR +2475143784,2475143791,ES +2475143792,2475143807,FR 2475143808,2475143935,DE 2475143936,2475143999,FR 2475144000,2475144063,IT @@ -66799,7 +67600,9 @@ 2475145152,2475145215,ES 2475145216,2475145343,DE 2475145344,2475145471,GB -2475145472,2475145727,FR +2475145472,2475145615,FR +2475145616,2475145631,LT +2475145632,2475145727,FR 2475145728,2475145855,GB 2475145856,2475145919,DE 2475145920,2475146063,FR @@ -66850,7 +67653,9 @@ 2475156480,2475156607,ES 2475156608,2475157887,FR 2475157888,2475158015,BE -2475158016,2475159423,FR +2475158016,2475158303,FR +2475158304,2475158335,PL +2475158336,2475159423,FR 2475159424,2475159551,DE 2475159552,2475159711,FR 2475159712,2475159743,ES @@ -66901,7 +67706,9 @@ 2478374912,2478440447,US 2478440448,2478505983,SE 2478505984,2478571519,US -2478571520,2478702591,GB +2478571520,2478655487,GB +2478655488,2478656511,FR +2478656512,2478702591,GB 2478702592,2478899199,US 2478899200,2478964735,GB 2478964736,2479030271,CA @@ -66969,7 +67776,7 @@ 2486960128,2487025663,FR 2487025664,2487156735,US 2487156736,2487222271,PT -2487222272,2487222527,US +2487222272,2487222527,HK 2487222528,2487222783,JP 2487222784,2487224319,US 2487224320,2487224831,GB @@ -66977,7 +67784,8 @@ 2487227392,2487227647,MX 2487227648,2487236607,US 2487236608,2487237631,GB -2487237632,2487238655,US +2487237632,2487238143,MF +2487238144,2487238655,US 2487238656,2487246847,CA 2487246848,2487353343,US 2487353344,2487361535,HK @@ -66989,7 +67797,7 @@ 2487394304,2487418879,US 2487418880,2487549951,JP 2487549952,2487615487,PT -2487615488,2487681023,US +2487615488,2487681023,CN 2487681024,2487746559,PT 2487746560,2488066047,US 2488066048,2488074239,IL @@ -67104,7 +67912,9 @@ 2500050944,2500067327,KZ 2500067328,2500132991,US 2500132992,2500133023,NL -2500133024,2500138367,US +2500133024,2500135679,US +2500135680,2500135935,NL +2500135936,2500138367,US 2500138368,2500138399,BE 2500138400,2500141055,US 2500141056,2500141311,IE @@ -67135,8 +67945,8 @@ 2500173824,2500177935,US 2500177936,2500177943,PL 2500177944,2500180735,US -2500180736,2500180991,HR -2500180992,2500182015,US +2500180736,2500181503,HR +2500181504,2500182015,US 2500182016,2500188223,GB 2500188224,2500188287,CH 2500188288,2500188415,GB @@ -67213,8 +68023,8 @@ 2500273920,2500274175,US 2500274176,2500275199,GB 2500275200,2500275455,NL -2500275456,2500277247,GB -2500277248,2500278751,US +2500275456,2500277503,GB +2500277504,2500278751,US 2500278752,2500278783,GB 2500278784,2500288511,US 2500288512,2500290815,FR @@ -67234,7 +68044,9 @@ 2500532750,2500532750,GR 2500532751,2500535327,US 2500535328,2500535335,IE -2500535336,2500535399,US +2500535336,2500535371,US +2500535372,2500535375,IE +2500535376,2500535399,US 2500535400,2500535407,IE 2500535408,2500537599,US 2500537600,2500537855,GB @@ -67320,7 +68132,9 @@ 2500748544,2500748799,ES 2500748800,2500756647,US 2500756648,2500756655,IT -2500756656,2500759551,US +2500756656,2500759159,US +2500759160,2500759167,NL +2500759168,2500759551,US 2500759552,2500761631,GB 2500761632,2500761639,FR 2500761640,2500761879,GB @@ -67455,10 +68269,10 @@ 2506362880,2506363903,US 2506363904,2506364415,ES 2506364416,2506364671,US -2506364672,2506364927,ES -2506364928,2506399743,US -2506399744,2506400767,IT -2506400768,2506401791,GB +2506364672,2506366975,ES +2506366976,2506399743,US +2506399744,2506401023,IT +2506401024,2506401791,GB 2506401792,2506405887,IT 2506405888,2506498047,US 2506498048,2506499071,FR @@ -67468,7 +68282,8 @@ 2506504192,2506506239,US 2506506240,2506514431,NO 2506514432,2506522623,ES -2506522624,2506526719,GB +2506522624,2506524671,US +2506524672,2506526719,GB 2506526720,2506817535,US 2506817536,2506820351,ES 2506820352,2506821119,US @@ -67512,7 +68327,9 @@ 2508111872,2508128255,RU 2508128256,2508259327,US 2508259328,2508263423,KR -2508263424,2508324863,SG +2508263424,2508292095,SG +2508292096,2508308479,IN +2508308480,2508324863,ID 2508324864,2508455935,US 2508455936,2508521471,IT 2508521472,2508587007,CH @@ -68064,7 +68881,9 @@ 2538619776,2538619807,LT 2538619808,2538619903,FR 2538619904,2538619911,ES -2538619912,2538620255,FR +2538619912,2538620231,FR +2538620232,2538620239,ES +2538620240,2538620255,FR 2538620256,2538620287,NL 2538620288,2538620847,FR 2538620848,2538620863,CZ @@ -68122,7 +68941,9 @@ 2538645608,2538645615,PL 2538645616,2538645695,FR 2538645696,2538645727,CZ -2538645728,2538645855,FR +2538645728,2538645775,FR +2538645776,2538645783,ES +2538645784,2538645855,FR 2538645856,2538645871,ES 2538645872,2538646063,FR 2538646064,2538646079,PT @@ -68205,15 +69026,60 @@ 2538663456,2538663471,ES 2538663472,2538663551,FR 2538663552,2538663567,IT -2538663568,2538666111,FR +2538663568,2538663791,FR +2538663792,2538663799,ES +2538663800,2538666111,FR 2538666112,2538666175,GB 2538666176,2538667775,FR 2538667776,2538667839,ES 2538667840,2538668031,FR 2538668032,2539978751,IT -2539978752,2540240895,US +2539978752,2539980799,US +2539980800,2539981823,SG +2539981824,2539982847,DE +2539982848,2539983871,GB +2539983872,2539985919,US +2539985920,2539986943,AU +2539986944,2539987967,US +2539987968,2539988991,NL +2539988992,2539994111,US +2539994112,2539995135,GB +2539995136,2539997183,US +2539997184,2539998207,JP +2539998208,2539999231,HK +2539999232,2540000255,AU +2540000256,2540001279,SE +2540001280,2540002303,JP +2540002304,2540003327,BR +2540003328,2540004351,AU +2540004352,2540005375,US +2540005376,2540006399,AU +2540006400,2540007423,IL +2540007424,2540008447,DE +2540008448,2540009471,US +2540009472,2540010495,FR +2540010496,2540011519,CA +2540011520,2540012543,US +2540012544,2540013567,ES +2540013568,2540014591,CA +2540014592,2540015615,AE +2540015616,2540017663,US +2540017664,2540019711,IN +2540019712,2540020735,US +2540020736,2540021759,NZ +2540021760,2540022783,US +2540022784,2540023807,ZA +2540023808,2540024831,BR +2540024832,2540033023,US +2540033024,2540034047,CA +2540034048,2540035071,AR +2540035072,2540036095,CL +2540036096,2540037119,ZA +2540037120,2540038143,JP +2540038144,2540240895,US 2540240896,2540306431,FI -2540306432,2540339199,US +2540306432,2540314623,FR +2540314624,2540339199,US 2540339200,2540347391,GB 2540347392,2540355583,US 2540355584,2540363775,GB @@ -68255,6 +69121,7 @@ 2547154944,2547187711,NZ 2547187712,2547318783,GB 2547318784,2547515391,US +2547515392,2547515903,RU 2547523584,2547524607,DE 2547524608,2547525631,IR 2547525632,2547535871,GB @@ -68516,8 +69383,8 @@ 2572950272,2572950527,ES 2572950528,2572951551,DE 2572951552,2572953599,US -2572953600,2572953855,BY -2572953856,2572954111,HK +2572953600,2572953855,CA +2572953856,2572954111,DE 2572954112,2572954367,ES 2572954368,2572954623,HK 2572954624,2572954879,AU @@ -68921,7 +69788,9 @@ 2587066368,2587069439,GB 2587069440,2587070463,US 2587070464,2587076607,GB -2587076608,2587128522,US +2587076608,2587081727,US +2587081728,2587082751,GB +2587082752,2587128522,US 2587128523,2587128523,TR 2587128524,2587131903,US 2587131904,2587132415,FR @@ -68929,7 +69798,9 @@ 2587164672,2587172863,CH 2587172864,2587197439,US 2587197440,2587197695,ES -2587197696,2587240389,US +2587197696,2587217919,US +2587217920,2587218943,CG +2587218944,2587240389,US 2587240390,2587240390,FR 2587240391,2587249417,US 2587249418,2587249418,FR @@ -68940,8 +69811,8 @@ 2587385856,2587394047,US 2587394048,2587399423,ES 2587399424,2587399679,US -2587399680,2587400191,ES -2587400192,2587410431,US +2587399680,2587402239,ES +2587402240,2587410431,US 2587410432,2587418623,IT 2587418624,2587426815,US 2587426816,2587435007,GR @@ -69003,7 +69874,9 @@ 2587738112,2587738623,RS 2587738624,2587740159,US 2587740160,2587742207,RS -2587742208,2587926527,US +2587742208,2587746303,US +2587746304,2587747327,ES +2587747328,2587926527,US 2587926528,2587930623,BG 2587930624,2587938815,US 2587938816,2587939327,PR @@ -69017,7 +69890,9 @@ 2587955200,2587959295,KE 2587959296,2587961343,SN 2587961344,2587962367,ZA -2587962368,2587964415,SS +2587962368,2587963391,SS +2587963392,2587963647,GS +2587963648,2587964415,SS 2587964416,2587965439,ZA 2587966464,2587967487,BF 2587967488,2587975679,ZA @@ -69262,9 +70137,9 @@ 2592043008,2592047103,ZA 2592047104,2592079871,AO 2592079872,2593128447,EG -2593128448,2593522885,MA -2593522886,2593522886,EH -2593522887,2593652735,MA +2593128448,2593522687,MA +2593522688,2593522943,EH +2593522944,2593652735,MA 2593652736,2594177023,KE 2594177024,2595225599,GH 2595225600,2596274175,EG @@ -69524,9 +70399,13 @@ 2617179648,2617179903,KE 2617179904,2617180159,NG 2617180160,2617245695,UG -2617270272,2617278463,ZA +2617245696,2617262079,LS +2617262080,2617278463,ZA 2617278464,2617286655,GH -2617294848,2617298943,ZA +2617294848,2617296383,ZA +2617296384,2617296639,CD +2617296640,2617296895,AO +2617296896,2617299967,ZA 2617299968,2617300991,BJ 2617300992,2617305087,ZA 2617305088,2617305599,KE @@ -69535,7 +70414,7 @@ 2617307136,2617308159,SZ 2617308160,2617309183,ZA 2617309184,2617310207,NG -2617310208,2617310463,ZA +2617310208,2617310719,ZA 2617311232,2617769983,US 2617769984,2617835519,ZA 2617835520,2617901055,US @@ -69821,11 +70700,23 @@ 2637430784,2637438975,CA 2637438976,2637447679,US 2637447680,2637447935,CA -2637447936,2637448447,US +2637447936,2637448191,US +2637448192,2637448447,ZA 2637448448,2637448703,ES -2637448704,2637448959,US +2637448704,2637448959,NZ 2637448960,2637449215,SG -2637449216,2637627391,US +2637449216,2637449727,BR +2637449728,2637451519,US +2637451520,2637451775,HK +2637451776,2637452031,US +2637452032,2637452543,IN +2637452544,2637452799,CA +2637452800,2637453311,US +2637453312,2637453567,AR +2637453568,2637453823,CL +2637453824,2637454079,US +2637454080,2637454335,JP +2637454336,2637627391,US 2637627392,2637627551,IE 2637627552,2637627583,US 2637627584,2637628031,IE @@ -70060,7 +70951,8 @@ 2642739200,2642743295,RU 2642743296,2642751487,US 2642751488,2642755583,CA -2642755584,2642759679,US +2642755584,2642757631,DE +2642757632,2642759679,US 2642759680,2642761727,AE 2642761728,2642763775,SA 2642763776,2642767871,AU @@ -70356,7 +71248,8 @@ 2653618176,2653683711,GB 2653683712,2653749247,KR 2653749248,2653814783,AU -2653814784,2653849599,RU +2653814784,2653847551,RU +2653847552,2653849599,IN 2653849600,2653851647,FR 2653851648,2653855743,GB 2653855744,2653856767,KR @@ -70441,7 +71334,9 @@ 2658140160,2658205695,NO 2658205696,2658454491,US 2658454492,2658454492,IN -2658454493,2658459903,US +2658454493,2658459355,US +2658459356,2658459356,IN +2658459357,2658459903,US 2658459904,2658460159,HU 2658460160,2658598911,US 2658598912,2658664447,GB @@ -70466,7 +71361,9 @@ 2660007936,2660016127,SG 2660016128,2660024319,ID 2660024320,2660032511,AU -2660032512,2660040703,NZ +2660032512,2660040472,NZ +2660040473,2660040473,AU +2660040474,2660040703,NZ 2660040704,2660106239,CA 2660106240,2660171775,US 2660171776,2660237311,GB @@ -70512,7 +71409,13 @@ 2662418816,2662418819,DE 2662418820,2662420103,US 2662420104,2662420111,SE -2662420112,2662498303,US +2662420112,2662421647,US +2662421648,2662421655,IT +2662421656,2662422543,US +2662422544,2662422559,HU +2662422560,2662423183,US +2662423184,2662423199,IT +2662423200,2662498303,US 2662498304,2662662143,GB 2662662144,2662670335,KG 2662670336,2662674431,AZ @@ -70676,7 +71579,9 @@ 2671711574,2671711574,GB 2671711575,2671712029,US 2671712030,2671712030,AR -2671712031,2671718827,US +2671712031,2671712147,US +2671712148,2671712151,GB +2671712152,2671718827,US 2671718828,2671718831,GB 2671718832,2671718911,US 2671718912,2671719167,GB @@ -70696,8 +71601,12 @@ 2673147904,2673213439,US 2673213440,2673278975,GB 2673278976,2673410047,US -2673410048,2673414143,DE -2673414144,2673475583,US +2673410048,2673418239,DE +2673418240,2673459199,US +2673459200,2673463295,SG +2673463296,2673473535,US +2673473536,2673474559,GB +2673474560,2673475583,US 2673475584,2673541119,VE 2673541120,2673606655,US 2673606656,2673672191,GB @@ -70711,7 +71620,8 @@ 2674139136,2674143231,FR 2674143232,2674144255,CH 2674144256,2674145791,US -2674145792,2674146303,GB +2674145792,2674146047,GB +2674146048,2674146303,US 2674146304,2674147327,TR 2674147328,2674163711,NL 2674163712,2674164175,GB @@ -70821,9 +71731,7 @@ 2675616436,2675616438,IT 2675616439,2675616439,US 2675616440,2675616441,IT -2675616442,2675621263,US -2675621264,2675621279,NL -2675621280,2675621301,US +2675616442,2675621301,US 2675621302,2675621302,IT 2675621303,2675626239,US 2675626240,2675626271,GB @@ -71137,10 +72045,11 @@ 2685605888,2685607935,US 2685608960,2685609983,ZA 2685611008,2685612031,BR -2685612032,2685613055,CN +2685612032,2685613055,HK 2685613056,2685614079,TW 2685615104,2685616127,NG 2685616128,2685617151,ID +2685624320,2685626367,LY 2685626368,2685627391,US 2685628416,2685636607,ZA 2685638656,2685639679,SL @@ -71432,7 +72341,9 @@ 2701138608,2701138615,UY 2701138616,2701139135,HN 2701139136,2701139151,UY -2701139152,2701139967,HN +2701139152,2701139479,HN +2701139480,2701139487,NL +2701139488,2701139967,HN 2701139968,2701148159,NI 2701148160,2701149183,AR 2701149184,2701150207,HN @@ -71442,9 +72353,7 @@ 2701160448,2701162495,TT 2701162496,2701164543,UY 2701164544,2701171199,HT -2701171200,2701172223,TT -2701172224,2701172479,HT -2701172480,2701172735,TT +2701171200,2701172735,TT 2701172736,2701176831,CL 2701176832,2701178879,AR 2701178880,2701180927,CL @@ -71536,8 +72445,7 @@ 2705691648,2705692671,GB 2705692672,2705710079,US 2705710080,2705711103,IN -2705711104,2705784831,US -2705784832,2705850367,GB +2705711104,2705850367,US 2705850368,2705915903,ES 2705915904,2706046975,GB 2706046976,2706112511,JP @@ -71603,7 +72511,7 @@ 2709241600,2709241855,ZA 2709241856,2709242111,DE 2709242112,2709242367,US -2709242368,2709242623,ZA +2709242368,2709242623,DE 2709242624,2709242879,US 2709242880,2709243135,DE 2709243136,2709243391,US @@ -71709,7 +72617,9 @@ 2714381952,2714381983,HK 2714381984,2714382530,US 2714382531,2714382531,HK -2714382532,2714384907,US +2714382532,2714382580,US +2714382581,2714382581,HK +2714382582,2714384907,US 2714384908,2714384911,HK 2714384912,2714386431,US 2714386432,2714419743,JP @@ -71780,7 +72690,9 @@ 2721382400,2721447935,CA 2721447936,2721579007,US 2721579008,2721644543,IN -2721644544,2722496511,US +2721644544,2721972223,US +2721972224,2722037759,CN +2722037760,2722496511,US 2722496512,2722562047,CA 2722562048,2722693119,US 2722693120,2722758655,CA @@ -72229,15 +73141,27 @@ 2734398464,2734399487,PR 2734399488,2734407679,US 2734407680,2734409727,CA -2734409728,2734414095,US -2734414096,2734414139,MX -2734414140,2734414159,US +2734409728,2734413823,US +2734413824,2734413847,AR +2734413848,2734413855,TT +2734413856,2734413863,AR +2734413864,2734414078,US +2734414079,2734414079,MX +2734414080,2734414083,PA +2734414084,2734414087,MX +2734414088,2734414091,CR +2734414092,2734414095,PA +2734414096,2734414143,MX +2734414144,2734414159,PA 2734414160,2734414175,MX -2734414176,2734414183,US -2734414184,2734414275,MX -2734414276,2734414299,US -2734414300,2734414303,MX -2734414304,2734414334,US +2734414176,2734414183,PA +2734414184,2734414295,MX +2734414296,2734414299,US +2734414300,2734414319,MX +2734414320,2734414327,PA +2734414328,2734414328,US +2734414329,2734414329,MX +2734414330,2734414334,US 2734414335,2734414335,MX 2734414336,2734432255,US 2734433280,2734435327,US @@ -72650,7 +73574,9 @@ 2760119968,2760119983,GB 2760119984,2760120543,FR 2760120544,2760120575,ES -2760120576,2760120839,FR +2760120576,2760120751,FR +2760120752,2760120759,ES +2760120760,2760120839,FR 2760120840,2760120843,PT 2760120844,2760121663,FR 2760121664,2760121727,ES @@ -72745,7 +73671,9 @@ 2760149328,2760149343,LT 2760149344,2760149375,FR 2760149376,2760149503,GB -2760149504,2760150111,FR +2760149504,2760150087,FR +2760150088,2760150095,ES +2760150096,2760150111,FR 2760150112,2760150143,NL 2760150144,2760150207,BE 2760150208,2760150239,FR @@ -73038,7 +73966,7 @@ 2773061632,2773065727,CM 2773065728,2773073919,ZA 2773073920,2773082111,NG -2773082112,2773084159,ZA +2773082112,2773085183,ZA 2773085184,2773086207,SL 2773086208,2773090303,ZA 2773090304,2773221375,US @@ -73213,7 +74141,9 @@ 2783150080,2783162367,DE 2783162368,2783174655,US 2783174656,2783178751,GB -2783178752,2783182847,US +2783178752,2783179775,US +2783179776,2783180799,DE +2783180800,2783182847,US 2783182848,2783248383,AU 2783248384,2783313919,KR 2783313920,2783379455,US @@ -73633,7 +74563,9 @@ 2824498304,2824498319,FR 2824498320,2824498527,HN 2824498528,2824498535,FR -2824498536,2824499199,HN +2824498536,2824499119,HN +2824499120,2824499127,UY +2824499128,2824499199,HN 2824499200,2824503295,BR 2824503296,2824504319,AR 2824504320,2824510463,BR @@ -73662,8 +74594,7 @@ 2825191424,2825256959,AR 2825256960,2825519103,US 2825519104,2825584639,HK -2825584640,2825912319,US -2825977856,2826108927,US +2825584640,2826108927,US 2826108928,2826174463,KR 2826174464,2826436607,US 2826436608,2826502143,TH @@ -73939,7 +74870,9 @@ 2832010240,2832023551,BR 2832023552,2832024575,CR 2832024576,2832025599,BR -2832025600,2832026015,HN +2832025600,2832025903,HN +2832025904,2832025919,DE +2832025920,2832026015,HN 2832026016,2832026031,DE 2832026032,2832026623,HN 2832026624,2832030719,BR @@ -74140,9 +75073,7 @@ 2838307296,2838307303,US 2838307304,2838307311,NL 2838307312,2838307327,US -2838307328,2838307439,NL -2838307440,2838307455,US -2838307456,2838307647,NL +2838307328,2838307647,NL 2838307648,2838307679,US 2838307680,2838307903,NL 2838307904,2838307935,US @@ -74152,11 +75083,7 @@ 2838308192,2838308223,US 2838308224,2838308255,NL 2838308256,2838308271,US -2838308272,2838308607,NL -2838308608,2838308623,US -2838308624,2838308671,NL -2838308672,2838308687,US -2838308688,2838315007,NL +2838308272,2838315007,NL 2838315008,2838331391,US 2838331392,2838331535,NL 2838331536,2838331551,US @@ -74164,9 +75091,7 @@ 2838331568,2838331583,US 2838331584,2838331711,NL 2838331712,2838331727,US -2838331728,2838331807,NL -2838331808,2838331839,US -2838331840,2838332879,NL +2838331728,2838332879,NL 2838332880,2838332895,US 2838332896,2838333651,NL 2838333652,2838333654,US @@ -74183,9 +75108,9 @@ 2838337296,2838337759,NL 2838337760,2838337761,IN 2838337762,2838337763,US -2838337764,2838337903,NL -2838337904,2838337919,US -2838337920,2838338271,NL +2838337764,2838338111,NL +2838338112,2838338127,US +2838338128,2838338271,NL 2838338272,2838338303,JP 2838338304,2838338567,NL 2838338568,2838338575,US @@ -74240,7 +75165,9 @@ 2838345744,2838345751,US 2838345752,2838345759,NL 2838345760,2838345775,US -2838345776,2838346559,NL +2838345776,2838346015,NL +2838346016,2838346047,US +2838346048,2838346559,NL 2838346560,2838346591,US 2838346592,2838346687,NL 2838346688,2838346719,US @@ -74284,15 +75211,11 @@ 2838406578,2838406578,US 2838406579,2838406687,NL 2838406688,2838406703,US -2838406704,2838406959,NL -2838406960,2838406967,US -2838406968,2838407103,NL +2838406704,2838407103,NL 2838407104,2838407119,US 2838407120,2838407863,NL 2838407864,2838407871,US -2838407872,2838408799,NL -2838408800,2838408831,US -2838408832,2838409439,NL +2838407872,2838409439,NL 2838409440,2838409471,US 2838409472,2838409479,NL 2838409480,2838409503,US @@ -74316,9 +75239,7 @@ 2838415168,2838415183,US 2838415184,2838415391,NL 2838415392,2838415487,US -2838415488,2838415535,NL -2838415536,2838415551,US -2838415552,2838415655,NL +2838415488,2838415655,NL 2838415656,2838415663,US 2838415664,2838415839,NL 2838415840,2838415871,US @@ -74377,23 +75298,25 @@ 2838484840,2838484843,US 2838484844,2838485151,NL 2838485152,2838485183,US -2838485184,2838485375,NL -2838485376,2838485407,US -2838485408,2838485695,NL +2838485184,2838485695,NL 2838485696,2838485727,US -2838485728,2838486143,NL -2838486144,2838486159,US -2838486160,2838486463,NL +2838485728,2838486463,NL 2838486464,2838486495,US -2838486496,2838487743,NL +2838486496,2838486567,NL +2838486568,2838486575,US +2838486576,2838486583,NL +2838486584,2838486591,US +2838486592,2838487327,NL +2838487328,2838487343,US +2838487344,2838487743,NL 2838487744,2838487807,US -2838487808,2838488399,NL -2838488400,2838488415,US -2838488416,2838488663,NL +2838487808,2838488663,NL 2838488664,2838488671,US 2838488672,2838488943,NL 2838488944,2838488959,US -2838488960,2838491943,NL +2838488960,2838489999,NL +2838490000,2838490007,US +2838490008,2838491943,NL 2838491944,2838491951,US 2838491952,2838492479,NL 2838492480,2838492511,US @@ -74405,8 +75328,8 @@ 2838493712,2838493727,US 2838493728,2838494655,NL 2838494656,2838494671,US -2838494672,2838511887,NL -2838511888,2838511903,US +2838494672,2838511871,NL +2838511872,2838511903,US 2838511904,2838511935,NL 2838511936,2838511951,JP 2838511952,2838511983,NL @@ -74439,15 +75362,15 @@ 2838513200,2838513215,US 2838513216,2838513295,NL 2838513296,2838513311,US -2838513312,2838513487,NL +2838513312,2838513343,NL +2838513344,2838513347,US +2838513348,2838513487,NL 2838513488,2838513503,US 2838513504,2838513583,NL 2838513584,2838513599,US 2838513600,2838513807,NL 2838513808,2838513871,US -2838513872,2838513887,NL -2838513888,2838513903,US -2838513904,2838513983,NL +2838513872,2838513983,NL 2838513984,2838513999,US 2838514000,2838514071,NL 2838514072,2838514111,US @@ -74457,7 +75380,9 @@ 2838514288,2838514303,US 2838514304,2838514399,NL 2838514400,2838514431,JP -2838514432,2838514767,NL +2838514432,2838514511,NL +2838514512,2838514527,US +2838514528,2838514767,NL 2838514768,2838514783,US 2838514784,2838515087,NL 2838515088,2838515103,BR @@ -74481,7 +75406,9 @@ 2838520832,2838522879,US 2838522880,2838522895,NL 2838522896,2838522927,US -2838522928,2838523391,NL +2838522928,2838523111,NL +2838523112,2838523119,US +2838523120,2838523391,NL 2838523392,2838523423,US 2838523424,2838523615,NL 2838523616,2838523663,US @@ -74489,9 +75416,7 @@ 2838523680,2838523711,JP 2838523712,2838523967,NL 2838523968,2838524031,JP -2838524032,2838524151,NL -2838524152,2838524159,US -2838524160,2838524191,NL +2838524032,2838524191,NL 2838524192,2838524223,AF 2838524224,2838524391,NL 2838524392,2838524399,US @@ -74503,7 +75428,11 @@ 2838524736,2838524799,US 2838524800,2838525999,NL 2838526000,2838526015,US -2838526016,2838526983,NL +2838526016,2838526151,NL +2838526152,2838526159,US +2838526160,2838526639,NL +2838526640,2838526655,US +2838526656,2838526983,NL 2838526984,2838526991,US 2838526992,2838527055,NL 2838527056,2838527071,US @@ -74535,8 +75464,8 @@ 2838530528,2838530559,US 2838530560,2838531367,NL 2838531368,2838531375,US -2838531376,2838536191,NL -2838536192,2838536239,US +2838531376,2838536207,NL +2838536208,2838536239,US 2838536240,2838537375,NL 2838537376,2838537407,US 2838537408,2838537863,NL @@ -74547,11 +75476,7 @@ 2838538320,2838538327,US 2838538328,2838538559,NL 2838538560,2838538591,US -2838538592,2838538639,NL -2838538640,2838538647,US -2838538648,2838539543,NL -2838539544,2838539545,US -2838539546,2838540111,NL +2838538592,2838540111,NL 2838540112,2838540119,US 2838540120,2838540367,NL 2838540368,2838540383,US @@ -74573,11 +75498,17 @@ 2838542272,2838542303,US 2838542304,2838542767,NL 2838542768,2838542783,US -2838542784,2838543759,NL +2838542784,2838543223,NL +2838543224,2838543231,US +2838543232,2838543623,NL +2838543624,2838543631,US +2838543632,2838543759,NL 2838543760,2838543775,US 2838543776,2838543855,NL 2838543856,2838543871,US -2838543872,2838544655,NL +2838543872,2838544575,NL +2838544576,2838544607,US +2838544608,2838544655,NL 2838544656,2838544671,US 2838544672,2838544703,NL 2838544704,2838544767,US @@ -74605,13 +75536,15 @@ 2838549120,2838549135,US 2838549136,2838549407,NL 2838549408,2838549415,US -2838549416,2838549447,NL -2838549448,2838549455,US -2838549456,2838549855,NL +2838549416,2838549855,NL 2838549856,2838549887,US 2838549888,2838550111,NL 2838550112,2838550159,US -2838550160,2838560767,NL +2838550160,2838550719,NL +2838550720,2838550799,US +2838550800,2838550855,NL +2838550856,2838550863,US +2838550864,2838560767,NL 2838560768,2838626303,CH 2838626304,2838626399,US 2838626400,2838626431,SA @@ -74638,13 +75571,17 @@ 2838633296,2838633311,SA 2838633312,2838634047,US 2838634048,2838634111,DE -2838634112,2838641263,US -2838641264,2838641279,GR -2838641280,2838641351,US +2838634112,2838636095,US +2838636096,2838636111,HU +2838636112,2838641351,US 2838641352,2838641359,SE -2838641360,2838642239,US +2838641360,2838641831,US +2838641832,2838641839,IT +2838641840,2838642239,US 2838642240,2838642303,DE -2838642304,2838642623,US +2838642304,2838642575,US +2838642576,2838642583,IT +2838642584,2838642623,US 2838642624,2838642639,CN 2838642640,2838642719,US 2838642720,2838642723,AE @@ -74690,7 +75627,9 @@ 2838669520,2838669535,NL 2838669536,2838672007,US 2838672008,2838672015,RO -2838672016,2838683615,US +2838672016,2838672415,US +2838672416,2838672417,NL +2838672418,2838683615,US 2838683616,2838683631,CN 2838683632,2838683887,US 2838683888,2838683903,GH @@ -74794,9 +75733,7 @@ 2838989728,2838989743,CA 2838989744,2838990719,US 2838990720,2838990751,CA -2838990752,2838995823,US -2838995824,2838995839,NL -2838995840,2838996063,US +2838990752,2838996063,US 2838996064,2838996095,HK 2838996096,2838999087,US 2838999088,2838999103,CA @@ -74823,9 +75760,7 @@ 2839052288,2839085055,US 2839085056,2839117823,MX 2839117824,2839150591,BR -2839150592,2839290415,US -2839290416,2839290431,NL -2839290432,2839297023,US +2839150592,2839297023,US 2839297024,2839298047,CA 2839298048,2839298793,US 2839298794,2839298795,NL @@ -74836,8 +75771,8 @@ 2839300048,2839315471,US 2839315472,2839315487,JP 2839315488,2839315519,US -2839315520,2839315535,NL -2839315536,2839363685,US +2839315520,2839315527,NL +2839315528,2839363685,US 2839363686,2839363687,NL 2839363688,2839363903,US 2839363904,2839363911,AU @@ -74849,7 +75784,11 @@ 2839379488,2839379503,NL 2839379504,2839379617,US 2839379618,2839379619,NL -2839379620,2840015359,US +2839379620,2839431737,US +2839431738,2839431739,NL +2839431740,2839432255,US +2839432256,2839432271,NL +2839432272,2840015359,US 2840015360,2840015615,GB 2840015616,2843803647,US 2843803648,2843869183,ZA @@ -74864,7 +75803,9 @@ 2845802496,2845822975,ZA 2845822976,2845827071,CD 2845827072,2845835263,ZA -2845835264,2848212991,US +2845835264,2848211967,US +2848211968,2848212223,HK +2848212224,2848212991,US 2848212992,2848215039,GB 2848215040,2848244735,US 2848244736,2848245759,GB @@ -74989,7 +75930,9 @@ 2852121600,2852122623,NG 2852122624,2852126719,ZA 2852126720,2852127743,BR -2852127744,2852128767,HN +2852127744,2852128087,HN +2852128088,2852128095,NL +2852128096,2852128767,HN 2852128768,2852129791,AR 2852129792,2852130815,MX 2852130816,2852131839,SX @@ -75007,7 +75950,9 @@ 2852187136,2852189183,BR 2852189184,2852190207,TT 2852190208,2852192255,BR -2852192256,2852839423,US +2852192256,2852810751,US +2852810752,2852814847,DE +2852814848,2852839423,US 2852839424,2852847615,CA 2852847616,2853306367,US 2853306368,2853371903,CL @@ -75029,9 +75974,7 @@ 2855477248,2855485439,PY 2855485440,2855489535,UY 2855489536,2855497727,AR -2855497728,2855498751,PY -2855498752,2855499007,UY -2855499008,2855501823,PY +2855497728,2855501823,PY 2855501824,2855518207,AR 2855518208,2855520255,UY 2855520256,2855534591,AR @@ -75166,7 +76109,8 @@ 2857496576,2857497599,PE 2857497600,2857499647,BR 2857499648,2857500671,CO -2857500672,2857501695,HN +2857500672,2857501183,HN +2857501184,2857501695,US 2857501696,2857506815,BR 2857506816,2857507839,DO 2857507840,2857509887,BR @@ -75213,8 +76157,7 @@ 2857596928,2857597951,BR 2857597952,2857598975,AR 2857598976,2857611263,BR -2857611264,2857611775,US -2857611776,2857612287,HN +2857611264,2857612287,US 2857612288,2857615359,BR 2857615360,2857616383,HT 2857616384,2857621503,BR @@ -75250,7 +76193,8 @@ 2857696256,2857697279,AR 2857697280,2859007999,US 2859008000,2859073535,JP -2859073536,2861842431,US +2859073536,2859139071,CN +2859139072,2861842431,US 2861842432,2861843851,HK 2861843852,2861843853,US 2861843854,2861844479,HK @@ -75888,7 +76832,8 @@ 2891849216,2891850239,US 2891850240,2891850495,TH 2891850496,2891850751,AM -2891850752,2891851263,US +2891850752,2891851007,US +2891851008,2891851263,EE 2891851264,2891851519,AM 2891851520,2891853567,US 2891853568,2891853823,SG @@ -75902,9 +76847,7 @@ 2891855616,2891855871,CH 2891855872,2891856127,JP 2891856128,2891856383,LU -2891856384,2891856895,US -2891856896,2891857151,CU -2891857152,2891857663,US +2891856384,2891857663,US 2891857664,2891857919,DE 2891857920,2891858175,DZ 2891858176,2891858431,DK @@ -75947,7 +76890,9 @@ 2891870720,2891870975,NO 2891870976,2891871231,US 2891871232,2891871487,CA -2891871488,2891976535,US +2891871488,2891874047,US +2891874048,2891874303,CA +2891874304,2891976535,US 2891976536,2891976543,CA 2891976544,2891982847,US 2891982848,2891984895,CA @@ -75965,9 +76910,7 @@ 2892050432,2892052479,CA 2892052480,2892053503,US 2892053504,2892054527,CA -2892054528,2892059263,US -2892059264,2892059391,KP -2892059392,2892059775,US +2892054528,2892059775,US 2892059776,2892059903,BI 2892059904,2892060031,US 2892060032,2892060159,CC @@ -76086,7 +77029,8 @@ 2892991488,2892991999,GB 2892992000,2892992511,HK 2892992512,2892993023,IT -2892993024,2892993535,JP +2892993024,2892993279,JP +2892993280,2892993535,US 2892993536,2892993791,BE 2892993792,2892994047,PA 2892994048,2892994303,GB @@ -76097,7 +77041,9 @@ 2892995840,2892996095,GB 2892996096,2892996607,US 2892996608,2892996863,CA -2892996864,2892997119,AU +2892996864,2892996910,AU +2892996911,2892996911,GS +2892996912,2892997119,AU 2892997120,2892997375,CA 2892997376,2892997631,BG 2892997632,2892997887,AU @@ -76109,8 +77055,9 @@ 2892999168,2892999423,CR 2892999424,2892999935,US 2892999936,2893000191,IT -2893000192,2893000447,JP -2893000448,2893000959,HK +2893000192,2893000447,US +2893000448,2893000703,HK +2893000704,2893000959,US 2893000960,2893001215,CA 2893001216,2893001727,GB 2893001728,2893002239,IT @@ -76139,7 +77086,7 @@ 2893008896,2893009151,AF 2893009152,2893009663,US 2893009664,2893010175,GB -2893010176,2893010431,US +2893010176,2893010431,IT 2893010432,2893010687,DE 2893010688,2893010943,US 2893010944,2893011199,AT @@ -76209,7 +77156,9 @@ 2901496832,2901497855,NL 2901497856,2901538815,US 2901538816,2901540863,SG -2901540864,2901740455,US +2901540864,2901737983,US +2901737984,2901738239,CA +2901738240,2901740455,US 2901740456,2901740463,CA 2901740464,2901751295,US 2901751296,2901751551,GB @@ -76300,7 +77249,9 @@ 2905415680,2905415935,GB 2905415936,2905473023,US 2905473024,2905481215,CA -2905481216,2905510911,US +2905481216,2905494783,US +2905494784,2905495039,DE +2905495040,2905510911,US 2905510912,2905511935,CA 2905511936,2905512959,US 2905512960,2905513471,CA @@ -76375,7 +77326,9 @@ 2916286464,2916287487,US 2916287488,2916287743,NL 2916287744,2916287999,CA -2916288000,2916302847,US +2916288000,2916290047,US +2916290048,2916290303,FR +2916290304,2916302847,US 2916302848,2916303359,CA 2916303360,2916303871,DE 2916303872,2916304383,CA @@ -76383,12 +77336,21 @@ 2916304896,2916305919,GB 2916305920,2916306943,US 2916306944,2916308991,ES -2916308992,2916312063,US +2916308992,2916310015,US +2916310016,2916310271,FR +2916310272,2916310527,US +2916310528,2916310783,GB +2916310784,2916311039,IT +2916311040,2916312063,US 2916312064,2916313087,IT 2916313088,2916314111,HK 2916314112,2916315135,DE 2916315136,2916316159,US -2916316160,2916318207,CN +2916316160,2916317183,CN +2916317184,2916317439,US +2916317440,2916317695,CN +2916317696,2916317951,US +2916317952,2916318207,CN 2916318208,2916319231,GB 2916319232,2916335615,PR 2916335616,2916368383,US @@ -76595,7 +77557,8 @@ 2918699008,2918703103,CA 2918703104,2918768639,US 2918768640,2918776831,HK -2918776832,2918815999,US +2918776832,2918793215,DE +2918793216,2918815999,US 2918816000,2918817023,GB 2918817024,2918817791,US 2918825984,2918828031,US @@ -76742,7 +77705,10 @@ 2928328704,2928336895,CA 2928336896,2928455679,US 2928455680,2928459775,CA -2928459776,2928541695,US +2928459776,2928474623,US +2928474624,2928474879,GB +2928474880,2928475135,FR +2928475136,2928541695,US 2928541696,2928553303,CA 2928553304,2928553311,HU 2928553312,2928555831,CA @@ -77211,7 +78177,9 @@ 2954838176,2954838179,GB 2954838180,2954838215,FR 2954838216,2954838219,GB -2954838220,2954838599,FR +2954838220,2954838247,FR +2954838248,2954838255,ES +2954838256,2954838599,FR 2954838600,2954838607,GB 2954838608,2954838655,FR 2954838656,2954838687,BE @@ -77237,9 +78205,7 @@ 2954840096,2954840103,ES 2954840104,2954840255,FR 2954840256,2954840447,GB -2954840448,2954840499,FR -2954840500,2954840503,ES -2954840504,2954840515,FR +2954840448,2954840515,FR 2954840516,2954840519,NL 2954840520,2954840611,FR 2954840612,2954840615,GB @@ -77406,7 +78372,9 @@ 2954861988,2954861991,BE 2954861992,2954862079,FR 2954862080,2954862095,ES -2954862096,2954862415,FR +2954862096,2954862287,FR +2954862288,2954862303,LT +2954862304,2954862415,FR 2954862416,2954862419,ES 2954862420,2954862479,FR 2954862480,2954862495,ES @@ -77626,7 +78594,8 @@ 2956602880,2956603135,GB 2956603136,2956604671,RU 2956604672,2956604927,NL -2956604928,2956605439,RU +2956604928,2956605183,RU +2956605184,2956605439,NL 2956605440,2956605695,DE 2956605696,2956607487,RU 2956607488,2956611583,PS @@ -77829,7 +78798,9 @@ 2959245312,2959253503,RU 2959253504,2959255551,DE 2959255552,2959261695,RU -2959261696,2959275007,KZ +2959261696,2959265791,KZ +2959265792,2959266815,ES +2959266816,2959275007,KZ 2959275008,2959278079,CZ 2959278080,2959282175,RU 2959282176,2959286271,SA @@ -77967,7 +78938,9 @@ 2960028672,2960029183,NO 2960029184,2960029439,GB 2960029440,2960029695,KW -2960029696,2960035839,RU +2960029696,2960030975,RU +2960030976,2960031231,KZ +2960031232,2960035839,RU 2960035840,2960039935,PL 2960039936,2960054271,RU 2960054272,2960056319,RO @@ -78087,7 +79060,8 @@ 2960697344,2960699391,ES 2960699392,2960719871,RU 2960719872,2960723455,UA -2960723456,2960723967,CZ +2960723456,2960723711,CZ +2960723712,2960723967,UA 2960723968,2960726015,RU 2960726016,2960732159,RO 2960732160,2960736255,RU @@ -78105,7 +79079,8 @@ 2960793600,2960797695,CZ 2960797696,2960805887,RU 2960805888,2960807935,KZ -2960807936,2960834559,UA +2960807936,2960818175,UA +2960818176,2960834559,CA 2960834560,2960835071,GB 2960835072,2960835583,CH 2960835584,2960836351,IT @@ -78193,8 +79168,8 @@ 2961065728,2961066239,HK 2961066240,2961066495,DE 2961066496,2961066751,BG -2961066752,2961067263,DE -2961067264,2961067775,GB +2961066752,2961067519,DE +2961067520,2961067775,GB 2961067776,2961068543,DE 2961068544,2961068799,NL 2961068800,2961069055,IT @@ -78342,7 +79317,9 @@ 2972098570,2972098570,US 2972098571,2975594495,BR 2975594496,2975596543,PE -2975596544,2984247295,BR +2975596544,2977726975,BR +2977726976,2977727231,US +2977727232,2984247295,BR 2984247296,2984935423,MX 2984935424,2984936447,AR 2984936448,2984937471,BR @@ -78400,10 +79377,7 @@ 2987517952,2987519999,US 2987520000,2987524095,GB 2987524096,2987528191,RU -2987528192,2987529215,US -2987529216,2987530751,NL -2987530752,2987531775,US -2987531776,2987532287,NL +2987528192,2987532287,US 2987532288,2987536383,MD 2987536384,2987540479,FR 2987540480,2987544575,SK @@ -78496,7 +79470,9 @@ 2987782144,2987784191,EE 2987784192,2987786239,DK 2987786240,2987788287,FR -2987788288,2987789055,TR +2987788288,2987789052,TR +2987789053,2987789054,US +2987789055,2987789055,TR 2987789056,2987789311,GB 2987789312,2987790335,TR 2987790336,2987792383,GB @@ -78754,7 +79730,9 @@ 2988474960,2988474975,FI 2988474976,2988475215,FR 2988475216,2988475223,ES -2988475224,2988476415,FR +2988475224,2988475343,FR +2988475344,2988475351,ES +2988475352,2988476415,FR 2988476416,2988478463,IT 2988478464,2988478579,FR 2988478580,2988478583,DE @@ -78937,7 +79915,8 @@ 2988490180,2988490191,ES 2988490192,2988490291,FR 2988490292,2988490295,DE -2988490296,2988490367,FR +2988490296,2988490303,ES +2988490304,2988490367,FR 2988490368,2988490371,ES 2988490372,2988490686,FR 2988490687,2988490687,BE @@ -78995,7 +79974,9 @@ 2988500816,2988500831,PL 2988500832,2988500855,FR 2988500856,2988500859,ES -2988500860,2988500939,FR +2988500860,2988500887,FR +2988500888,2988500895,ES +2988500896,2988500939,FR 2988500940,2988500943,ES 2988500944,2988501683,FR 2988501684,2988501687,GB @@ -79011,8 +79992,7 @@ 2988502496,2988502511,ES 2988502512,2988502655,FR 2988502656,2988502719,DE -2988502720,2988502723,ES -2988502724,2988502751,FR +2988502720,2988502751,FR 2988502752,2988502783,ES 2988502784,2988502823,FR 2988502824,2988502831,ES @@ -79079,7 +80059,9 @@ 2988507562,2988507567,GB 2988507568,2988507583,FR 2988507584,2988507591,ES -2988507592,2988508079,FR +2988507592,2988507687,FR +2988507688,2988507695,ES +2988507696,2988508079,FR 2988508080,2988508095,ES 2988508096,2988508135,FR 2988508136,2988508143,GB @@ -79103,9 +80085,13 @@ 2988509748,2988509751,LT 2988509752,2988509779,FR 2988509780,2988509783,GB -2988509784,2988510079,FR +2988509784,2988510015,FR +2988510016,2988510023,ES +2988510024,2988510079,FR 2988510080,2988510087,ES -2988510088,2988510175,FR +2988510088,2988510095,FR +2988510096,2988510099,ES +2988510100,2988510175,FR 2988510176,2988510191,DE 2988510192,2988510311,FR 2988510312,2988510319,GB @@ -79153,13 +80139,17 @@ 2988513684,2988513687,GB 2988513688,2988513739,FR 2988513740,2988513743,ES -2988513744,2988514207,FR +2988513744,2988514183,FR +2988514184,2988514191,ES +2988514192,2988514207,FR 2988514208,2988514215,PT 2988514216,2988514231,FR 2988514232,2988514239,ES 2988514240,2988514287,FR 2988514288,2988514303,ES -2988514304,2988514527,FR +2988514304,2988514519,FR +2988514520,2988514523,ES +2988514524,2988514527,FR 2988514528,2988514543,GB 2988514544,2988514739,FR 2988514740,2988514743,GB @@ -79175,7 +80165,9 @@ 2988521776,2988521791,LT 2988521792,2988521951,FR 2988521952,2988521983,ES -2988521984,2988523599,FR +2988521984,2988523551,FR +2988523552,2988523559,ES +2988523560,2988523599,FR 2988523600,2988523603,ES 2988523604,2988523631,FR 2988523632,2988523635,DE @@ -79444,7 +80436,9 @@ 2988551180,2988551183,GB 2988551184,2988551191,FR 2988551192,2988551199,ES -2988551200,2988551443,FR +2988551200,2988551431,FR +2988551432,2988551439,ES +2988551440,2988551443,FR 2988551444,2988551451,ES 2988551452,2988551455,FR 2988551456,2988551471,GB @@ -79856,7 +80850,9 @@ 2997523200,2997525503,NL 2997525504,2997526527,TR 2997526528,2997543167,RU -2997543168,2997544191,NL +2997543168,2997543423,NL +2997543424,2997543679,RU +2997543680,2997544191,NL 2997544192,2997544447,RU 2997544448,2997544959,NL 2997544960,2997551103,RU @@ -79864,7 +80860,8 @@ 2997555200,2997557247,SG 2997557248,2997559295,TW 2997559296,2997560319,IN -2997560320,2997561343,RU +2997560320,2997560831,KR +2997560832,2997561343,RU 2997561344,2997563391,TH 2997563392,2997567487,RU 2997567488,2997568511,IN @@ -79902,28 +80899,14 @@ 2999451648,2999713791,DE 2999713792,2999975935,RU 2999975936,2999984127,FR -2999984128,2999984383,BE -2999984384,2999984639,NL -2999984640,2999985407,BE -2999985408,2999985759,NL -2999985760,2999986687,BE -2999986688,2999986943,NL -2999986944,2999987199,BE -2999987200,2999987967,NL -2999987968,2999988223,BE -2999988224,2999988479,NL -2999988480,2999988735,BE -2999988736,2999989005,NL -2999989006,2999989006,BE -2999989007,2999989055,NL +2999984128,2999989007,BE +2999989008,2999989015,NL +2999989016,2999989031,BE +2999989032,2999989055,NL 2999989056,2999989059,LU -2999989060,2999989119,NL +2999989060,2999989119,BE 2999989120,2999989247,FR -2999989248,2999989503,BE -2999989504,2999989759,NL -2999989760,2999991039,BE -2999991040,2999991551,NL -2999991552,2999992319,BE +2999989248,2999992319,BE 2999992320,3000000511,RU 3000000512,3000008703,DE 3000008704,3000016895,RU @@ -80200,9 +81183,7 @@ 3002603520,3002605567,SE 3002605568,3002607615,GB 3002607616,3002609663,IR -3002609664,3002610943,GB -3002610944,3002611199,US -3002611200,3002611711,GB +3002609664,3002611711,GB 3002611712,3002613759,CZ 3002613760,3002615807,RU 3002615808,3002617855,PL @@ -80440,8 +81421,8 @@ 3005896192,3005896703,PA 3005896704,3005897215,CO 3005897216,3005897471,PA -3005897472,3005899263,CO -3005899264,3005900031,PA +3005897472,3005899519,CO +3005899520,3005900031,PA 3005900032,3005901055,CO 3005901056,3005901567,PA 3005901568,3005903103,CO @@ -80792,7 +81773,9 @@ 3007283712,3007284223,PA 3007284224,3007284735,CR 3007284736,3007285247,PA -3007285248,3007286015,CR +3007285248,3007285503,CR +3007285504,3007285759,PA +3007285760,3007286015,CR 3007286016,3007286271,PA 3007286272,3007286783,CR 3007286784,3007287295,PA @@ -80997,7 +81980,9 @@ 3025641780,3025641983,IN 3025641984,3025642495,HK 3025642496,3025642751,SG -3025642752,3025647103,IN +3025642752,3025643039,IN +3025643040,3025643071,HK +3025643072,3025647103,IN 3025647104,3025647359,SG 3025647360,3025647615,AU 3025647616,3025647775,IN @@ -81239,7 +82224,8 @@ 3035299840,3035316223,JP 3035316224,3035324415,CN 3035324416,3035326463,JP -3035326464,3035328511,AU +3035326464,3035327487,NZ +3035327488,3035328511,AU 3035328512,3035329535,CN 3035329536,3035330559,MM 3035330560,3035331583,IN @@ -81278,7 +82264,11 @@ 3039379456,3039395839,GY 3039395840,3039396351,US 3039396352,3039396607,NL -3039396608,3039412223,US +3039396608,3039398911,US +3039398912,3039399935,BZ +3039399936,3039410175,US +3039410176,3039411199,BZ +3039411200,3039412223,CA 3039412224,3039412351,CL 3039412352,3039412479,BR 3039412480,3039412735,SG @@ -81895,7 +82885,7 @@ 3057026048,3057027071,US 3057027072,3057028095,TW 3057028096,3057029119,ID -3057029120,3057030143,AU +3057029120,3057030143,SG 3057030144,3057031167,IN 3057031168,3057032191,BD 3057032192,3057033215,NP @@ -82273,9 +83263,13 @@ 3098263552,3098271743,CA 3098271744,3098412031,US 3098412032,3098413055,CN -3098413056,3098415359,US -3098415360,3098421247,CN -3098421248,3098423295,US +3098413056,3098415104,US +3098415105,3098421247,CN +3098421248,3098422271,US +3098422272,3098422527,FR +3098422528,3098422783,US +3098422784,3098423039,IT +3098423040,3098423295,GB 3098423296,3098424319,FR 3098424320,3098425343,CN 3098425344,3098426367,RU @@ -82343,7 +83337,7 @@ 3103862016,3103862271,MD 3103862272,3103862527,IT 3103862528,3103862783,FR -3103862784,3103863039,TR +3103862784,3103863039,DE 3103863040,3103863295,RU 3103863296,3103863807,UA 3103863808,3103864063,NL @@ -82389,6 +83383,9 @@ 3103875072,3103875327,UA 3103875328,3103875583,IT 3103875584,3103875839,IQ +3103875840,3103876095,UA +3103876096,3103876351,AL +3103876352,3103876607,GB 3103916032,3103917055,CH 3103917056,3103918079,IT 3103918080,3103919103,DE @@ -82407,9 +83404,9 @@ 3103927120,3103927135,GB 3103927136,3103927167,CZ 3103927168,3103927295,SK -3103927296,3103928575,NL -3103928576,3103928831,DE -3103928832,3103929343,HK +3103927296,3103928319,NL +3103928320,3103928575,HK +3103928576,3103929343,NL 3103929344,3103930367,BE 3103930368,3103931391,DE 3103931392,3103932415,PL @@ -82452,7 +83449,9 @@ 3103968256,3103969279,GB 3103969280,3103970303,BG 3103970304,3103971327,UA -3103971328,3103973375,GB +3103971328,3103972351,GB +3103972352,3103972863,IE +3103972864,3103973375,GB 3103973376,3103974399,KZ 3103974400,3103974919,LT 3103974920,3103974943,SE @@ -82961,9 +83960,7 @@ 3104495616,3104496639,JO 3104496640,3104497663,DK 3104497664,3104498687,CH -3104498688,3104499391,NL -3104499392,3104499399,US -3104499400,3104500735,NL +3104498688,3104500735,NL 3104500736,3104501759,CZ 3104501760,3104502783,LY 3104502784,3104503807,DE @@ -83132,8 +84129,7 @@ 3104662528,3104663551,FR 3104663552,3104664255,GB 3104664256,3104664263,CH -3104664264,3104664271,PL -3104664272,3104665599,GB +3104664264,3104665599,GB 3104665600,3104668671,RU 3104668672,3104669695,NO 3104669696,3104670719,FR @@ -83211,7 +84207,7 @@ 3104747520,3104749567,FR 3104749568,3104750591,NL 3104750592,3104751615,CZ -3104751616,3104751871,UA +3104751616,3104751871,GB 3104751872,3104752127,CA 3104752128,3104752255,GB 3104752256,3104752383,RU @@ -83421,9 +84417,7 @@ 3104963584,3104964607,GB 3104964608,3104965631,DK 3104965632,3104966655,RU -3104966656,3104967167,BE -3104967168,3104967423,NL -3104967424,3104967679,BE +3104966656,3104967679,BE 3104967680,3104968703,RS 3104968704,3104969727,ES 3104969728,3104970751,RU @@ -83458,7 +84452,7 @@ 3105001472,3105002495,GB 3105002496,3105003519,BE 3105003520,3105004543,BA -3105004544,3105005567,PT +3105004544,3105005567,IR 3105005568,3105006591,EE 3105006592,3105007615,SE 3105007616,3105008639,FR @@ -83954,8 +84948,7 @@ 3105491968,3105494015,GB 3105494016,3105495039,BE 3105495040,3105495551,AE -3105495552,3105495807,LU -3105495808,3105496063,AE +3105495552,3105496063,LU 3105496064,3105497087,RU 3105497088,3105498111,IR 3105498112,3105499135,DE @@ -83985,7 +84978,7 @@ 3105524736,3105525759,IT 3105525760,3105526783,TR 3105526784,3105527807,GB -3105527808,3105528831,JE +3105527808,3105528831,NL 3105528832,3105529855,DE 3105529856,3105530879,LU 3105530880,3105531903,NO @@ -84074,7 +85067,16 @@ 3105614848,3105615871,NL 3105615872,3105616895,SE 3105616896,3105617919,GB -3105617920,3105618943,NL +3105617920,3105617951,AF +3105617952,3105617967,NL +3105617968,3105617999,AF +3105618000,3105618015,NL +3105618016,3105618031,AF +3105618032,3105618047,NL +3105618048,3105618063,AF +3105618064,3105618111,NL +3105618112,3105618127,AF +3105618128,3105618943,NL 3105618944,3105619967,DE 3105619968,3105620991,TR 3105620992,3105622015,DE @@ -84256,7 +85258,9 @@ 3105803264,3105804287,NL 3105804288,3105805311,FR 3105805312,3105806335,GB -3105806336,3105807359,FR +3105806336,3105807167,FR +3105807168,3105807175,KM +3105807176,3105807359,FR 3105807360,3105808383,RU 3105808384,3105809407,NO 3105809408,3105810431,RU @@ -84269,6 +85273,8 @@ 3105818624,3105819647,NL 3105819648,3105820671,GB 3105820672,3105820927,NL +3105820928,3105821183,DE +3105821184,3105821695,GB 3105821696,3105822719,ES 3105822720,3105823743,PL 3105823744,3105824767,AT @@ -84384,9 +85390,7 @@ 3105930240,3105931263,PT 3105931264,3105932287,US 3105932288,3105933311,SE -3105933312,3105933351,GB -3105933352,3105933359,IT -3105933360,3105933847,GB +3105933312,3105933847,GB 3105933848,3105933855,IT 3105933856,3105934215,GB 3105934216,3105934223,IT @@ -85901,13 +86905,38 @@ 3107400704,3107401727,AL 3107401728,3107402751,EE 3107402752,3107402819,US -3107402820,3107402871,GB -3107402872,3107402875,US -3107402876,3107402911,GB +3107402820,3107402821,NL +3107402822,3107402823,GB +3107402824,3107402839,US +3107402840,3107402843,GB +3107402844,3107402845,US +3107402846,3107402849,GB +3107402850,3107402855,JO +3107402856,3107402857,GB +3107402858,3107402859,DE +3107402860,3107402863,US +3107402864,3107402865,DE +3107402866,3107402877,US +3107402878,3107402883,GB +3107402884,3107402885,US +3107402886,3107402887,IQ +3107402888,3107402899,GB +3107402900,3107402903,MY +3107402904,3107402909,FR +3107402910,3107402911,CN 3107402912,3107402915,US -3107402916,3107402929,GB +3107402916,3107402921,HK +3107402922,3107402925,NL +3107402926,3107402927,GB +3107402928,3107402929,GI 3107402930,3107402931,AU -3107402932,3107403775,GB +3107402932,3107402939,CN +3107402940,3107402945,JO +3107402946,3107402947,IQ +3107402948,3107402949,GB +3107402950,3107402951,IQ +3107402952,3107402959,DO +3107402960,3107403775,GB 3107403776,3107404799,ES 3107404800,3107405823,GB 3107405824,3107406847,PL @@ -86007,7 +87036,7 @@ 3107496800,3107496815,IL 3107496816,3107496831,CN 3107496832,3107496847,BR -3107496848,3107496863,KP +3107496848,3107496863,NL 3107496864,3107496879,HK 3107496880,3107496895,IS 3107496896,3107496911,US @@ -86382,7 +87411,8 @@ 3107887104,3107888127,BG 3107888128,3107889151,GB 3107889152,3107890175,NO -3107890176,3107891199,IE +3107890176,3107890431,QA +3107890432,3107891199,IE 3107891200,3107892223,CH 3107892224,3107893247,AL 3107893248,3107894271,SA @@ -86613,7 +87643,8 @@ 3108122624,3108123647,AT 3108123648,3108123903,HU 3108123904,3108124159,SK -3108124160,3108124671,HU +3108124160,3108124415,HU +3108124416,3108124671,AT 3108124672,3108126719,ES 3108126720,3108127743,DE 3108127744,3108128767,BY @@ -86694,7 +87725,7 @@ 3108206592,3108208639,TR 3108208640,3108209663,DK 3108209664,3108210687,CZ -3108210688,3108211711,NL +3108210688,3108211711,CN 3108211712,3108212735,GB 3108212736,3108216831,FR 3108216832,3108217855,RU @@ -87023,9 +88054,7 @@ 3108544512,3108546559,NL 3108546560,3108547583,BE 3108547584,3108548607,GB -3108548608,3108548863,RO -3108548864,3108549119,SE -3108549120,3108549631,RO +3108548608,3108549631,RO 3108549632,3108550655,NL 3108550656,3108551679,PL 3108551680,3108552703,RU @@ -87539,9 +88568,7 @@ 3109076992,3109078015,HR 3109078016,3109079039,IR 3109079040,3109079295,IL -3109079296,3109079551,SE -3109079552,3109079807,ES -3109079808,3109080063,IT +3109079296,3109080063,US 3109080064,3109081087,RU 3109081088,3109082111,SE 3109082112,3109083135,PL @@ -87889,9 +88916,7 @@ 3109413888,3109414911,CH 3109414912,3109415935,FR 3109415936,3109416959,TR -3109416960,3109417964,NL -3109417965,3109417983,FR -3109417984,3109419007,GB +3109416960,3109419007,GB 3109419008,3109420031,CH 3109420032,3109421055,IT 3109421056,3109422079,UA @@ -88142,10 +89167,9 @@ 3109673451,3109673451,NO 3109673452,3109673471,GB 3109673472,3109673695,MY -3109673696,3109673699,GB -3109673700,3109673703,MY +3109673696,3109673703,GB 3109673704,3109673704,IN -3109673705,3109673727,MY +3109673705,3109673727,GB 3109673728,3109673983,AU 3109673984,3109675007,FR 3109675008,3109677055,DE @@ -89232,9 +90256,9 @@ 3110688768,3110689791,UA 3110689792,3110690815,IT 3110690816,3110691839,GB -3110691840,3110692863,RU +3110691840,3110692863,IR 3110692864,3110693887,IT -3110693888,3110694911,UA +3110693888,3110694911,RU 3110694912,3110695935,DE 3110695936,3110696959,UA 3110696960,3110697983,IR @@ -89581,7 +90605,7 @@ 3111076864,3111077887,DE 3111077888,3111078911,NL 3111078912,3111079935,IT -3111079936,3111080959,NL +3111079936,3111080959,IR 3111080960,3111081983,RU 3111081984,3111083007,HU 3111083008,3111084031,CA @@ -89647,7 +90671,7 @@ 3111144448,3111145471,ES 3111145472,3111145983,RU 3111145984,3111146239,FI -3111146240,3111146495,RU +3111146240,3111146495,US 3111146496,3111146635,IT 3111146636,3111146639,FR 3111146640,3111149567,IT @@ -89658,7 +90682,7 @@ 3111152640,3111153663,NL 3111153664,3111154687,SE 3111154688,3111155711,PL -3111155712,3111156735,RU +3111155712,3111156735,UA 3111156736,3111157759,DE 3111157760,3111158783,IR 3111158784,3111159807,CH @@ -90200,10 +91224,7 @@ 3111714816,3111715839,TJ 3111715840,3111716863,GB 3111716864,3111717887,NL -3111717888,3111718127,AD -3111718128,3111718135,FR -3111718136,3111718143,GB -3111718144,3111718911,AD +3111717888,3111718911,AD 3111718912,3111719935,GB 3111719936,3111720959,CY 3111720960,3111721983,GB @@ -90231,9 +91252,7 @@ 3111745536,3111746559,MD 3111746560,3111747583,TR 3111747584,3111748607,IR -3111748608,3111749631,GB -3111749632,3111749696,BG -3111749697,3111750655,DE +3111748608,3111750655,GB 3111750656,3111751679,FR 3111751680,3111752703,GB 3111752704,3111753727,IT @@ -90602,8 +91621,7 @@ 3112055808,3112056831,DK 3112056832,3112057855,NL 3112057856,3112058879,IS -3112058880,3112059391,NL -3112059392,3112059903,FR +3112058880,3112059903,NL 3112059904,3112062975,RO 3112062976,3112063999,ES 3112064000,3112065023,RU @@ -91010,7 +92028,7 @@ 3112518656,3112519679,SE 3112519680,3112520191,NL 3112520192,3112520447,GB -3112520448,3112520703,NL +3112520448,3112520703,US 3112520704,3112521727,PT 3112521728,3112522751,FR 3112522752,3112523775,SA @@ -91126,7 +92144,8 @@ 3112635264,3112635391,DE 3112635392,3112636415,BE 3112636416,3112637439,AT -3112637440,3112638463,CZ +3112637440,3112637951,CZ +3112637952,3112638463,SK 3112638464,3112639487,DE 3112639488,3112640511,IR 3112640512,3112641535,DE @@ -91426,7 +92445,9 @@ 3112951808,3112952831,SK 3112952832,3112953855,IL 3112953856,3112954879,DK -3112954880,3112955007,RS +3112954880,3112954917,RS +3112954918,3112954918,DE +3112954919,3112955007,RS 3112955008,3112955008,DE 3112955009,3112955135,AE 3112955136,3112955263,QA @@ -91577,7 +92598,7 @@ 3113094144,3113095167,ES 3113095168,3113096191,GB 3113096192,3113097215,IT -3113097216,3113097471,DE +3113097216,3113097471,CH 3113097472,3113097727,GB 3113097728,3113097983,DE 3113097984,3113098239,GB @@ -91651,7 +92672,8 @@ 3113170944,3113171967,UA 3113171968,3113172991,FI 3113172992,3113175039,DE -3113175040,3113177087,GB +3113175040,3113176063,IR +3113176064,3113177087,GB 3113177088,3113178111,BG 3113178112,3113179135,GB 3113179136,3113180159,RU @@ -91729,13 +92751,11 @@ 3113245696,3113245951,AT 3113245952,3113246719,DE 3113246720,3113246975,SK -3113246976,3113247231,CZ +3113246976,3113247231,RU 3113247232,3113247487,FR 3113247488,3113247743,RU 3113247744,3113247999,NL -3113248000,3113248031,US -3113248032,3113248255,DE -3113248256,3113248767,GB +3113248000,3113248767,GB 3113248768,3113249791,NL 3113249792,3113250815,GB 3113250816,3113251839,FR @@ -91954,7 +92974,7 @@ 3113455616,3113456639,DK 3113456640,3113457663,FR 3113457664,3113458687,NL -3113458688,3113459711,GB +3113458688,3113459711,US 3113459712,3113460735,IR 3113460736,3113461759,IT 3113461760,3113462783,DE @@ -92056,7 +93076,7 @@ 3113564160,3113565183,NL 3113565184,3113566207,FR 3113566208,3113567231,RU -3113567232,3113568255,GB +3113567232,3113568255,US 3113568256,3113569279,ES 3113569280,3113570303,NL 3113570304,3113571327,ES @@ -92826,7 +93846,15 @@ 3114264576,3114265599,GB 3114265600,3114266623,FI 3114266624,3114267647,NL -3114267648,3114268159,US +3114267648,3114267674,US +3114267675,3114267675,FR +3114267676,3114267676,DE +3114267677,3114267677,NL +3114267678,3114267678,PL +3114267679,3114267679,ES +3114267680,3114267680,GB +3114267681,3114267903,US +3114267904,3114268159,GB 3114268160,3114268671,BR 3114268672,3114269695,BE 3114269696,3114270719,ES @@ -93035,7 +94063,8 @@ 3114458112,3114459135,RO 3114459136,3114460159,GB 3114460160,3114461183,DK -3114461184,3114462207,RU +3114461184,3114461951,RU +3114461952,3114462207,NL 3114462208,3114463231,GR 3114463232,3114464255,US 3114464256,3114465279,BE @@ -93156,7 +94185,7 @@ 3114579968,3114580991,CH 3114580992,3114582015,SA 3114582016,3114583039,IL -3114583040,3114584063,ES +3114583040,3114584063,SA 3114584064,3114585087,SY 3114585088,3114586111,AT 3114586112,3114587135,NL @@ -93476,7 +94505,8 @@ 3114915840,3114916863,RU 3114916864,3114917887,LB 3114917888,3114918911,IT -3114918912,3114919423,CH +3114918912,3114919167,HN +3114919168,3114919423,CH 3114919424,3114919679,CW 3114919680,3114919935,CH 3114919936,3114920703,GB @@ -93545,7 +94575,7 @@ 3114978304,3114979327,RU 3114979328,3114980351,NL 3114980352,3114981375,DE -3114981376,3114982399,PL +3114981376,3114982399,US 3114982400,3114983423,JP 3114983424,3114983679,PL 3114983680,3114983935,RO @@ -93557,7 +94587,9 @@ 3114988544,3114989567,DE 3114989568,3114990591,NO 3114990592,3114991615,LT -3114991616,3114992639,GB +3114991616,3114991871,GB +3114991872,3114992127,TR +3114992128,3114992639,GB 3114992640,3114993663,FR 3114993664,3114994687,ES 3114994688,3114995711,RU @@ -93797,7 +94829,8 @@ 3115229184,3115230207,EE 3115230208,3115231231,RU 3115231232,3115232255,CZ -3115232256,3115233279,UA +3115232256,3115232767,NL +3115232768,3115233279,UA 3115233280,3115234303,IS 3115234304,3115235327,ES 3115235328,3115236351,BE @@ -93893,8 +94926,7 @@ 3115322368,3115323391,IE 3115323392,3115324415,DE 3115324416,3115325439,IT -3115325440,3115326207,RU -3115326208,3115326463,GB +3115325440,3115326463,RU 3115326464,3115327487,SE 3115327488,3115328511,IR 3115328512,3115329535,NO @@ -93909,7 +94941,8 @@ 3115337728,3115338751,SK 3115338752,3115340799,GB 3115340800,3115341823,ES -3115341824,3115342847,GB +3115341824,3115342079,US +3115342080,3115342847,GB 3115342848,3115343871,RU 3115343872,3115344895,SE 3115344896,3115345919,IE @@ -94183,8 +95216,7 @@ 3115621376,3115622399,GB 3115622400,3115623423,RU 3115623424,3115624447,DE -3115624448,3115624703,GB -3115624704,3115625471,IM +3115624448,3115625471,IM 3115625472,3115626495,NL 3115626496,3115627519,RU 3115627520,3115628543,IT @@ -94346,7 +95378,8 @@ 3115793408,3115795455,FR 3115795456,3115796479,IT 3115796480,3115797503,CZ -3115797504,3115798527,RU +3115797504,3115798015,UA +3115798016,3115798527,RU 3115798528,3115799551,MD 3115799552,3115801599,DE 3115801600,3115802623,LB @@ -94462,7 +95495,7 @@ 3115906048,3115907071,MD 3115907072,3115908095,GB 3115908096,3115909119,CZ -3115909120,3115910143,RU +3115909120,3115910143,UA 3115910144,3115912191,FR 3115912192,3115913215,MD 3115913216,3115914239,IR @@ -94491,7 +95524,8 @@ 3115937792,3115938815,TR 3115938816,3115939839,FR 3115939840,3115940863,RU -3115940864,3115941887,DE +3115940864,3115941119,CU +3115941120,3115941887,DE 3115941888,3115942911,CZ 3115942912,3115943935,IL 3115943936,3115948031,RU @@ -94523,8 +95557,7 @@ 3115973376,3115973631,US 3115973632,3115974655,UA 3115974656,3115975679,RU -3115975680,3115975935,US -3115975936,3115976703,GB +3115975680,3115976703,GB 3115976704,3115977727,US 3115977728,3115978751,IT 3115978752,3115980799,PL @@ -94632,7 +95665,10 @@ 3116082176,3116083199,FR 3116083200,3116084223,US 3116084224,3116085247,IT -3116085248,3116086271,KW +3116085248,3116085503,KW +3116085504,3116085759,SA +3116085760,3116086015,EG +3116086016,3116086271,JO 3116086272,3116087295,ES 3116087296,3116088319,TR 3116088320,3116089343,RU @@ -94646,9 +95682,10 @@ 3116096512,3116097535,SY 3116097536,3116098559,NL 3116098560,3116099583,CH -3116099584,3116100607,DE +3116099584,3116100607,US 3116100608,3116101631,CZ -3116101632,3116102655,GB +3116101632,3116102143,DE +3116102144,3116102655,GB 3116102656,3116103679,FR 3116103680,3116104703,HU 3116104704,3116105727,SE @@ -94809,9 +95846,7 @@ 3116255232,3116256255,GB 3116256256,3116257279,AT 3116257280,3116257535,CR -3116257536,3116257791,AT -3116257792,3116258047,GB -3116258048,3116258303,AT +3116257536,3116258303,AT 3116258304,3116259327,NL 3116259328,3116260351,FR 3116260352,3116261375,DE @@ -95102,7 +96137,7 @@ 3116551168,3116552191,FR 3116552192,3116553215,ES 3116553216,3116554239,PL -3116554240,3116555263,DE +3116554240,3116555263,US 3116555264,3116557311,PL 3116557312,3116558335,NL 3116558336,3116559359,FR @@ -95280,7 +96315,7 @@ 3116740608,3116741631,JO 3116742656,3116743679,FR 3116743680,3116744703,NL -3116744704,3116745727,DE +3116744704,3116745727,US 3116745728,3116746751,TR 3116746752,3116747775,ES 3116747776,3116748799,IL @@ -95370,7 +96405,7 @@ 3116837888,3116838911,ES 3116838912,3116839935,IT 3116839936,3116841983,GB -3116841984,3116843007,DE +3116841984,3116843007,SC 3116843008,3116844031,IR 3116844032,3116845055,DE 3116845056,3116846079,IT @@ -95660,7 +96695,8 @@ 3117143040,3117144063,GB 3117144064,3117145087,US 3117145088,3117147135,ES -3117147136,3117148159,AE +3117147136,3117147391,GR +3117147392,3117148159,AE 3117148160,3117149183,DK 3117149184,3117150207,RU 3117150208,3117151231,NL @@ -95704,7 +96740,7 @@ 3117189120,3117190143,IE 3117190144,3117191167,MD 3117191168,3117192191,SE -3117192192,3117193215,RO +3117192192,3117193215,US 3117193216,3117194239,GB 3117194240,3117195263,RU 3117195264,3117196287,FR @@ -95830,7 +96866,7 @@ 3117315072,3117316095,FR 3117316096,3117317119,RU 3117317120,3117318143,IQ -3117318144,3117319167,GB +3117318144,3117319167,US 3117319168,3117320191,SA 3117320192,3117321215,FR 3117321216,3117322239,NL @@ -95843,7 +96879,7 @@ 3117328384,3117329407,NL 3117329408,3117330431,IQ 3117330432,3117331455,FI -3117331456,3117332479,BG +3117331456,3117332479,DE 3117332480,3117333503,SI 3117333504,3117334527,DE 3117334528,3117335551,IE @@ -95904,7 +96940,8 @@ 3117392896,3117393919,NL 3117393920,3117394943,CZ 3117394944,3117395967,ES -3117395968,3117396735,GB +3117395968,3117396479,GB +3117396480,3117396735,US 3117396736,3117396991,TR 3117396992,3117398015,MD 3117398016,3117399039,UA @@ -96007,9 +97044,7 @@ 3117498368,3117499391,DE 3117499392,3117500415,PL 3117500416,3117502463,ES -3117502464,3117503487,RU -3117503488,3117503743,DE -3117503744,3117503999,RU +3117502464,3117503999,RU 3117504000,3117504511,DE 3117504512,3117505535,RU 3117505536,3117506559,IE @@ -96062,7 +97097,7 @@ 3117554688,3117555711,GB 3117555712,3117556735,CH 3117556736,3117557759,PL -3117557760,3117558783,RO +3117557760,3117558783,US 3117558784,3117559807,RU 3117559808,3117560831,IT 3117560832,3117561855,DE @@ -96130,7 +97165,9 @@ 3117621248,3117622271,US 3117622272,3117623295,SK 3117623296,3117624319,HU -3117624320,3117626367,GB +3117624320,3117625599,GB +3117625600,3117626111,DE +3117626112,3117626367,GB 3117626368,3117627391,NO 3117627392,3117628415,IR 3117628416,3117629439,DE @@ -96157,7 +97194,7 @@ 3117648896,3117649919,GB 3117649920,3117650943,US 3117650944,3117651967,DE -3117651968,3117652991,NL +3117651968,3117652991,US 3117652992,3117654015,RU 3117654016,3117655039,IT 3117655040,3117656063,RU @@ -96310,7 +97347,7 @@ 3117810688,3117811711,NL 3117811712,3117811967,FR 3117811968,3117812223,ES -3117812224,3117812735,GB +3117812224,3117812735,CN 3117812736,3117813759,ES 3117813760,3117814783,NO 3117814784,3117816831,NL @@ -96341,7 +97378,8 @@ 3117842432,3117843455,NL 3117843456,3117844479,US 3117844480,3117845503,ES -3117845504,3117846527,GB +3117845504,3117846015,GB +3117846016,3117846527,US 3117846528,3117847551,ES 3117847552,3117848575,NL 3117848576,3117849599,CH @@ -96401,9 +97439,7 @@ 3117904896,3117905919,IE 3117905920,3117906943,CH 3117906944,3117907967,IR -3117907968,3117908223,GB -3117908224,3117908479,CA -3117908480,3117908991,GB +3117907968,3117908991,GB 3117908992,3117910015,ES 3117910016,3117911039,FR 3117911040,3117913087,IT @@ -96422,18 +97458,17 @@ 3117925376,3117926399,SE 3117926400,3117927423,AT 3117927424,3117929471,DE -3117929472,3117929727,KR +3117929472,3117929727,GB 3117929728,3117930239,DE 3117930240,3117930495,TW 3117930496,3117931519,AT -3117931520,3117932543,RO -3117932544,3117933567,US +3117931520,3117933567,US 3117933568,3117936639,IR 3117936640,3117937663,IT 3117937664,3117938687,IR 3117938688,3117939711,DK 3117939712,3117940735,NL -3117940736,3117941759,GB +3117940736,3117941759,CN 3117941760,3117942783,CY 3117942784,3117943807,IQ 3117943808,3117945855,RU @@ -96489,7 +97524,9 @@ 3117995008,3117996031,DE 3117996032,3117997055,ES 3117997056,3117998079,CZ -3117998080,3118002175,DE +3117998080,3117999103,DE +3117999104,3118000127,GB +3118000128,3118002175,DE 3118002176,3118003199,FR 3118003200,3118004223,RU 3118004224,3118005247,NL @@ -96500,7 +97537,7 @@ 3118009344,3118010367,ES 3118010368,3118011391,KZ 3118011392,3118012415,IE -3118012416,3118013439,PL +3118012416,3118013439,US 3118013440,3118014463,IT 3118014464,3118016511,NL 3118016512,3118017535,GB @@ -96523,12 +97560,15 @@ 3118030848,3118031871,IL 3118031872,3118032895,SA 3118032896,3118033919,GB -3118033920,3118034943,IR +3118033920,3118034687,IR +3118034688,3118034943,AZ 3118034944,3118035967,ES -3118035968,3118038015,GB +3118035968,3118036735,GB +3118036736,3118037759,CN +3118037760,3118038015,GB 3118038016,3118039039,US 3118039040,3118041087,GB -3118041088,3118042111,UA +3118041088,3118042111,PL 3118042112,3118043135,NL 3118043136,3118044159,DE 3118044160,3118045183,US @@ -96590,7 +97630,7 @@ 3118104576,3118107647,DE 3118107648,3118108671,CH 3118108672,3118109695,FR -3118109696,3118110719,PL +3118109696,3118110719,US 3118110720,3118111743,FR 3118111744,3118112767,PL 3118112768,3118113791,ES @@ -96609,7 +97649,7 @@ 3118128128,3118129151,DE 3118129152,3118130175,NL 3118130176,3118131199,DK -3118131200,3118132223,NL +3118131200,3118132223,US 3118132224,3118133247,ES 3118133248,3118134271,CH 3118134272,3118135295,TR @@ -96724,7 +97764,9 @@ 3118252032,3118253055,DE 3118253056,3118254079,LV 3118254080,3118255103,DE -3118255104,3118256127,IL +3118255104,3118255615,IL +3118255616,3118255871,NL +3118255872,3118256127,IL 3118256128,3118257151,NO 3118257152,3118258175,NL 3118258176,3118259199,IR @@ -96751,7 +97793,9 @@ 3118281728,3118282751,NO 3118282752,3118283775,SI 3118283776,3118284799,IS -3118284800,3118286847,DE +3118284800,3118285823,DE +3118285824,3118286079,AU +3118286080,3118286847,DE 3118286848,3118287871,IT 3118287872,3118288895,IR 3118288896,3118289919,PL @@ -96802,7 +97846,7 @@ 3118340096,3118341119,GB 3118341120,3118342143,ES 3118342144,3118343167,CH -3118343168,3118344191,RO +3118343168,3118344191,US 3118344192,3118345215,NL 3118345216,3118346239,AT 3118346240,3118347263,LB @@ -96826,7 +97870,7 @@ 3118364672,3118365695,IR 3118365696,3118366719,DE 3118366720,3118367743,MD -3118367744,3118368767,RO +3118367744,3118368767,US 3118368768,3118369791,DE 3118369792,3118370815,NL 3118370816,3118371839,FR @@ -96836,7 +97880,7 @@ 3118374912,3118375935,DE 3118375936,3118376959,ES 3118376960,3118377983,GB -3118377984,3118379007,RO +3118377984,3118379007,US 3118379008,3118380031,SE 3118380032,3118382079,IR 3118382080,3118383103,ES @@ -96863,7 +97907,7 @@ 3118405632,3118406655,DK 3118406656,3118407679,DE 3118407680,3118409727,NL -3118409728,3118410751,RO +3118409728,3118410751,US 3118410752,3118411775,AE 3118411776,3118412799,NL 3118412800,3118413823,LB @@ -96875,6 +97919,416 @@ 3118418944,3118420991,ES 3118420992,3118422015,NL 3118422016,3118423039,GB +3118423040,3118423807,US +3118423808,3118424063,RU +3118424064,3118425087,ES +3118425088,3118426111,NO +3118426112,3118428159,DE +3118428160,3118429183,UA +3118429184,3118430207,RU +3118430208,3118431231,ES +3118431232,3118432255,AM +3118432256,3118434303,NL +3118434304,3118435327,ES +3118435328,3118436351,NL +3118436352,3118437375,DE +3118437376,3118438399,FR +3118438400,3118439423,ES +3118439424,3118440447,FR +3118440448,3118442495,RU +3118442496,3118443519,MD +3118443520,3118444543,GB +3118444544,3118445567,UA +3118445568,3118446591,FR +3118446592,3118447615,GB +3118447616,3118448639,UA +3118448640,3118449663,GB +3118449664,3118451711,IT +3118451712,3118452735,RU +3118452736,3118453759,IT +3118453760,3118454783,RU +3118454784,3118456831,ES +3118456832,3118457855,BE +3118457856,3118458879,FR +3118458880,3118459903,GB +3118459904,3118460927,SE +3118460928,3118461951,ES +3118461952,3118462975,UA +3118462976,3118463999,RU +3118464000,3118464511,US +3118464512,3118465023,DE +3118465024,3118466047,TR +3118466048,3118467071,HU +3118467072,3118468095,RU +3118468096,3118469119,GB +3118469120,3118470143,DK +3118470144,3118471167,IE +3118471168,3118472191,AT +3118472192,3118473215,GB +3118473216,3118474239,FR +3118474240,3118475263,ES +3118475264,3118476287,CH +3118476288,3118477311,HU +3118477312,3118478335,ES +3118478336,3118479359,NL +3118479360,3118480383,SE +3118480384,3118481407,UA +3118481408,3118482431,RO +3118482432,3118483455,GB +3118483456,3118484479,FI +3118484480,3118485503,ES +3118485504,3118486527,NL +3118486528,3118487551,MD +3118487552,3118488575,NL +3118488576,3118489599,ES +3118489600,3118490623,RU +3118490624,3118491647,AL +3118491648,3118492671,UA +3118492672,3118493695,NL +3118493696,3118494719,CZ +3118494720,3118495743,DE +3118495744,3118496767,AT +3118496768,3118497791,SY +3118497792,3118500863,NL +3118500864,3118502143,US +3118502144,3118504959,DE +3118504960,3118505983,FI +3118505984,3118507007,BG +3118507008,3118508031,PT +3118508032,3118509055,NL +3118509056,3118510079,FR +3118510080,3118511103,IR +3118511104,3118512127,CH +3118512128,3118513151,ES +3118513152,3118514175,GB +3118514176,3118515199,ES +3118515200,3118516223,GB +3118516224,3118517247,AT +3118517248,3118518271,IR +3118518272,3118519295,GB +3118519296,3118520319,RU +3118520320,3118521343,NL +3118521344,3118522367,ES +3118522368,3118523391,US +3118523392,3118524415,RU +3118524416,3118525439,GB +3118525440,3118526463,NL +3118526464,3118527487,DE +3118527488,3118528511,CH +3118528512,3118529535,RU +3118529536,3118530559,GB +3118530560,3118531583,ES +3118531584,3118532607,IT +3118532608,3118533631,RU +3118533632,3118534655,GB +3118534656,3118535679,RO +3118535680,3118536703,ES +3118536704,3118537727,RU +3118537728,3118538751,MK +3118538752,3118539775,RU +3118539776,3118540799,TR +3118540800,3118541823,SY +3118541824,3118542847,NL +3118542848,3118544895,SE +3118544896,3118545919,SA +3118545920,3118546943,IT +3118546944,3118547967,FR +3118547968,3118548991,HU +3118548992,3118550015,DE +3118550016,3118551039,RO +3118551040,3118552063,IR +3118552064,3118553087,BG +3118553088,3118554111,AT +3118554112,3118555135,CH +3118555136,3118555263,AT +3118555264,3118555295,DE +3118555296,3118555327,RO +3118555328,3118556159,AT +3118556160,3118557183,PL +3118557184,3118557247,RO +3118557248,3118557311,GB +3118557312,3118557439,RO +3118557440,3118557471,FI +3118557472,3118557487,ES +3118557488,3118557503,IT +3118557504,3118557519,GR +3118557520,3118557535,CH +3118557536,3118557551,SE +3118557552,3118557567,RU +3118557568,3118558015,RO +3118558016,3118558079,NL +3118558080,3118558207,RO +3118558208,3118559231,PL +3118559232,3118560255,NL +3118560256,3118561279,PS +3118561280,3118562303,FI +3118562304,3118563327,RU +3118563328,3118564351,MD +3118564352,3118567423,DE +3118567424,3118568447,MD +3118568448,3118569471,ES +3118569472,3118570495,RU +3118570496,3118571519,GB +3118571520,3118572543,BE +3118572544,3118573567,TR +3118573568,3118574591,ES +3118574592,3118575615,IL +3118575616,3118576639,RU +3118576640,3118577663,IR +3118577664,3118578687,FR +3118578688,3118579711,RU +3118579712,3118580735,AE +3118580736,3118582783,RU +3118582784,3118583807,GB +3118583808,3118584831,DE +3118584832,3118585855,UA +3118585856,3118586879,IT +3118586880,3118587903,NL +3118587904,3118588927,SE +3118588928,3118589951,PL +3118589952,3118590975,DE +3118590976,3118591999,BG +3118592000,3118593023,IR +3118593024,3118594047,ES +3118594048,3118595071,PL +3118595072,3118596095,GB +3118596096,3118597119,MK +3118597120,3118598143,SE +3118598144,3118599167,ES +3118599168,3118600191,MD +3118600192,3118601215,FR +3118601216,3118602239,LU +3118602240,3118603263,UA +3118603264,3118604287,ES +3118604288,3118605311,FR +3118605312,3118606335,UA +3118606336,3118607359,AT +3118607360,3118608383,PL +3118608384,3118609407,FR +3118609408,3118610431,RU +3118610432,3118611455,SE +3118611456,3118612479,PL +3118612480,3118613503,GR +3118613504,3118614527,RO +3118614528,3118615551,DE +3118615552,3118616575,NL +3118616576,3118617599,RO +3118617600,3118618623,UA +3118618624,3118619647,AL +3118619648,3118619903,TR +3118619904,3118620159,US +3118620160,3118620671,TR +3118620672,3118621695,RU +3118621696,3118622719,NO +3118622720,3118623743,ES +3118623744,3118624767,NL +3118624768,3118625791,UA +3118625792,3118626815,IR +3118626816,3118627839,DE +3118627840,3118628863,OM +3118628864,3118629887,RU +3118629888,3118630911,IR +3118630912,3118631935,NL +3118631936,3118632959,IR +3118632960,3118633983,DE +3118633984,3118635007,NO +3118635008,3118636031,ES +3118636032,3118637055,GB +3118637056,3118638079,TR +3118638080,3118639103,RU +3118639104,3118640127,ES +3118640128,3118641151,DE +3118641152,3118643199,ES +3118643200,3118644223,DE +3118644224,3118646271,ES +3118646272,3118647295,TR +3118647296,3118648319,NO +3118648320,3118649343,NL +3118649344,3118650367,GB +3118650368,3118651391,DE +3118651392,3118652415,IE +3118652416,3118653439,GB +3118653440,3118657535,ES +3118657536,3118658559,DE +3118658560,3118659583,RU +3118659584,3118660607,PL +3118660608,3118661631,MD +3118661632,3118662655,FR +3118662656,3118663679,NO +3118663680,3118664703,ES +3118664704,3118665727,DE +3118665728,3118666751,FR +3118666752,3118667775,CH +3118667776,3118668799,SE +3118668800,3118669823,IT +3118669824,3118670847,ES +3118670848,3118671871,RU +3118671872,3118672895,RO +3118672896,3118673919,FI +3118673920,3118674943,BG +3118674944,3118675967,UA +3118675968,3118676991,CH +3118676992,3118678015,GB +3118678016,3118679039,IR +3118679040,3118680063,GB +3118680064,3118681087,MD +3118681088,3118682111,SE +3118682112,3118683135,NL +3118683136,3118684159,RU +3118684160,3118685183,AT +3118685184,3118686207,ES +3118686208,3118687231,BY +3118687232,3118688255,ES +3118688256,3118690303,NL +3118690304,3118691327,DE +3118691328,3118692351,IR +3118692352,3118693375,IT +3118693376,3118694399,NO +3118694400,3118695423,ES +3118695424,3118696447,DE +3118696448,3118697471,IR +3118697472,3118698495,SY +3118698496,3118699519,ES +3118699520,3118700543,CH +3118700544,3118702591,DE +3118702592,3118703615,GB +3118703616,3118704639,CH +3118704640,3118705663,SK +3118705664,3118707711,ES +3118707712,3118708735,TR +3118708736,3118709759,ES +3118709760,3118711807,PL +3118711808,3118713855,GB +3118713856,3118714879,ES +3118714880,3118715903,IE +3118715904,3118717951,ES +3118717952,3118718975,IE +3118718976,3118719999,DE +3118720000,3118721023,GB +3118721024,3118722047,FR +3118722048,3118723071,IQ +3118723072,3118724095,DE +3118724096,3118725119,MD +3118725120,3118727167,GB +3118727168,3118728191,ES +3118728192,3118730239,DE +3118730240,3118731263,SY +3118731264,3118732287,DE +3118732288,3118733311,FR +3118733312,3118734335,BG +3118734336,3118735359,SE +3118735360,3118736383,AT +3118736384,3118737407,NL +3118737408,3118738431,AT +3118738432,3118739455,US +3118739456,3118740479,RU +3118740480,3118741503,ES +3118741504,3118742527,NL +3118742528,3118743551,UA +3118743552,3118744575,ES +3118744576,3118745599,DK +3118745600,3118746623,ES +3118746624,3118747647,UA +3118747648,3118748671,NL +3118748672,3118749695,FR +3118749696,3118750719,RU +3118750720,3118751743,US +3118751744,3118752767,ES +3118752768,3118754815,UA +3118754816,3118755839,PL +3118755840,3118756863,RU +3118756864,3118759935,ES +3118759936,3118760959,MD +3118760960,3118761983,RU +3118761984,3118763007,DE +3118763008,3118764031,PL +3118764032,3118765055,DE +3118765056,3118766079,AT +3118766080,3118767103,ES +3118767104,3118768127,FR +3118768128,3118769151,ES +3118769152,3118770175,CZ +3118770176,3118771199,IE +3118771200,3118772223,ES +3118772224,3118773247,DE +3118773248,3118775295,GB +3118775296,3118776319,NL +3118776320,3118777343,UA +3118777344,3118781439,NL +3118781440,3118782463,SK +3118782464,3118783487,RO +3118783488,3118784511,IT +3118784512,3118785535,MD +3118785536,3118786559,FR +3118786560,3118787583,RU +3118787584,3118788607,IR +3118788608,3118789631,DE +3118789632,3118790655,IR +3118790656,3118791679,IT +3118791680,3118792703,GB +3118792704,3118793727,IR +3118793728,3118794751,TR +3118794752,3118795775,RU +3118795776,3118796799,TR +3118796800,3118797823,IT +3118797824,3118798847,GB +3118798848,3118799871,MK +3118799872,3118800895,IR +3118800896,3118801919,NL +3118801920,3118802943,KG +3118802944,3118803967,GB +3118803968,3118804991,ES +3118804992,3118806015,GB +3118806016,3118807039,NL +3118807040,3118807807,DE +3118807808,3118808063,US +3118808064,3118809087,PT +3118809088,3118810111,RU +3118810112,3118811135,CH +3118811136,3118812159,MK +3118812160,3118813183,GB +3118813184,3118814207,NL +3118814208,3118815231,UA +3118815232,3118816255,DE +3118816256,3118817279,DK +3118817280,3118818303,ES +3118818304,3118819327,DE +3118819328,3118820351,MD +3118820352,3118821375,GE +3118821376,3118823423,DE +3118823424,3118824447,RU +3118824448,3118825471,PL +3118825472,3118826495,FI +3118826496,3118827519,SE +3118827520,3118828543,BG +3118828544,3118829567,AT +3118829568,3118832639,DK +3118832640,3118833663,ES +3118833664,3118834687,FR +3118834688,3118835711,SA +3118835712,3118836735,DE +3118836736,3118837759,IT +3118837760,3118838783,FR +3118838784,3118839807,ES +3118839808,3118840831,RU +3118840832,3118841855,CZ +3118841856,3118842879,RU +3118842880,3118843903,ES +3118843904,3118844927,HR +3118844928,3118845951,DE +3118845952,3118846975,NL +3118846976,3118849023,ES +3118849024,3118850047,NL +3118850048,3118851071,IL +3118851072,3118852095,NO +3118852096,3118853119,RU +3118853120,3118854143,IT +3118854144,3118855167,NL +3118855168,3118856191,DE +3118856192,3118857215,RU +3118857216,3118858239,BG +3118858240,3118859263,ES +3118859264,3118860287,BG 3120562176,3120594943,CO 3120594944,3120599039,AR 3120601088,3120602111,AR @@ -97092,7 +98546,8 @@ 3132588032,3132620799,CO 3132620800,3132915711,VE 3132915712,3132948479,PA -3132948480,3132981247,AR +3132948480,3132964863,AW +3132964864,3132981247,AR 3132981248,3132997631,AW 3132997632,3133014015,AR 3133014016,3133046783,HT @@ -97109,15 +98564,37 @@ 3133313024,3133317119,BR 3133321216,3136983039,BR 3136984064,3136985087,BR -3136985088,3136985947,AR +3136985088,3136985103,AR +3136985104,3136985107,CO +3136985108,3136985127,AR +3136985128,3136985131,CO +3136985132,3136985135,AR +3136985136,3136985143,CO +3136985144,3136985343,AR +3136985344,3136985355,CL +3136985356,3136985359,AR +3136985360,3136985375,CL +3136985376,3136985407,AR +3136985408,3136985415,BR +3136985416,3136985423,AR +3136985424,3136985431,BR +3136985432,3136985439,AR +3136985440,3136985447,BR +3136985448,3136985623,AR +3136985624,3136985631,MX +3136985632,3136985947,AR 3136985948,3136985951,BR 3136985952,3136985979,AR 3136985980,3136985983,BR -3136985984,3136986015,AR -3136986016,3136986023,BR -3136986024,3136986095,AR +3136985984,3136986007,AR +3136986008,3136986047,BR +3136986048,3136986055,PE +3136986056,3136986087,BR +3136986088,3136986095,PE 3136986096,3136986099,BR -3136986100,3136986107,AR +3136986100,3136986103,AR +3136986104,3136986105,BR +3136986106,3136986107,AR 3136986108,3140587519,BR 3140599808,3140614143,BR 3140614144,3140616191,CR @@ -97311,7 +98788,9 @@ 3158857728,3158857983,DE 3158857984,3158858239,GB 3158858240,3158858495,SG -3158858496,3158859519,NL +3158858496,3158858751,NL +3158858752,3158859007,FR +3158859008,3158859519,NL 3158859520,3158859775,GB 3158859776,3158859903,NL 3158859904,3158860031,CZ @@ -97323,8 +98802,8 @@ 3158861312,3158861567,IE 3158861568,3158861823,AE 3158861824,3158862079,DE -3158862080,3158862335,GB -3158862336,3158862591,NL +3158862080,3158862463,GB +3158862464,3158862591,NL 3158862592,3158862847,FR 3158862848,3158863103,PL 3158863104,3158863359,IT @@ -97496,7 +98975,10 @@ 3161616384,3161618431,GB 3161618432,3161620479,IQ 3161620480,3161636863,DK -3161636864,3161645055,RU +3161636864,3161637887,UA +3161637888,3161638911,RU +3161638912,3161640959,UA +3161640960,3161645055,RU 3161645056,3161653247,SE 3161653248,3161669631,LU 3161669632,3161673727,MQ @@ -97613,9 +99095,7 @@ 3162676224,3162677247,KZ 3162677248,3162679039,RU 3162679040,3162679295,KZ -3162679296,3162679551,RU -3162679552,3162679807,GE -3162679808,3162680319,RU +3162679296,3162680319,RU 3162680320,3162680575,UZ 3162680576,3162681343,RU 3162681344,3162682367,UA @@ -97755,8 +99235,8 @@ 3164952234,3164952235,GB 3164952236,3164952236,FR 3164952237,3164952237,GB -3164952238,3164952255,FR -3164952256,3164952271,ES +3164952238,3164952247,FR +3164952248,3164952271,ES 3164952272,3164952511,FR 3164952512,3164952527,PT 3164952528,3164953007,FR @@ -97802,9 +99282,7 @@ 3164961392,3164961395,ES 3164961396,3164961551,FR 3164961552,3164961555,ES -3164961556,3164961823,FR -3164961824,3164961827,ES -3164961828,3164962143,FR +3164961556,3164962143,FR 3164962144,3164962151,ES 3164962152,3164962283,FR 3164962284,3164962287,ES @@ -98156,9 +99634,7 @@ 3168051200,3168059391,IR 3168059392,3168061439,RO 3168061440,3168073727,IR -3168073728,3168074239,RO -3168074240,3168074495,GB -3168074496,3168075263,RO +3168073728,3168075263,RO 3168075264,3168075519,GB 3168075520,3168076799,RO 3168076800,3168079871,ES @@ -98268,7 +99744,7 @@ 3168214016,3168214527,GB 3168214528,3168214783,BG 3168214784,3168215295,RO -3168215296,3168215551,BG +3168215296,3168215551,GB 3168215552,3168215807,TH 3168215808,3168216063,BG 3168216064,3168216575,RO @@ -98294,7 +99770,7 @@ 3168247808,3168264191,IR 3168264192,3168265215,ES 3168265216,3168265471,RS -3168265472,3168265727,RO +3168265472,3168265727,NL 3168265728,3168265855,FR 3168265856,3168265983,BE 3168265984,3168266239,GR @@ -98354,7 +99830,9 @@ 3169583104,3169648639,KW 3169648640,3169714175,MD 3169714176,3169779711,FI -3169779712,3169845247,UA +3169779712,3169828607,UA +3169828608,3169828863,CZ +3169828864,3169845247,UA 3169845248,3169849087,RO 3169849088,3169849343,FR 3169849344,3169849855,RO @@ -98543,7 +100021,9 @@ 3187943392,3187943399,HN 3187943400,3187943551,GT 3187943552,3187943687,HN -3187943688,3187944351,GT +3187943688,3187943715,GT +3187943716,3187943716,HN +3187943717,3187944351,GT 3187944352,3187944359,HN 3187944360,3187944773,GT 3187944774,3187944774,HN @@ -98953,7 +100433,9 @@ 3194449176,3194449183,PE 3194449184,3194450263,CO 3194450264,3194450271,CL -3194450272,3194452375,CO +3194450272,3194451415,CO +3194451416,3194451423,EC +3194451424,3194452375,CO 3194452376,3194452383,PE 3194452384,3194454015,CO 3194454016,3194458111,AR @@ -99348,7 +100830,11 @@ 3201917952,3201920063,CO 3201920064,3201920064,AR 3201920065,3201920068,CO -3201920069,3201925119,AR +3201920069,3201920639,AR +3201920640,3201920655,CO +3201920656,3201924863,AR +3201924864,3201924991,PA +3201924992,3201925119,AR 3201925120,3201957887,CL 3201957888,3202088959,PA 3202088960,3202215167,AR @@ -99823,8 +101309,7 @@ 3211129088,3211129343,AT 3211129344,3211129599,SG 3211129600,3211129855,NL -3211129856,3211129983,CL -3211129984,3211130111,HK +3211129856,3211130111,HK 3211130112,3211130367,US 3211130368,3211130623,GR 3211130624,3211130879,TR @@ -99891,9 +101376,11 @@ 3211175200,3211175215,BR 3211175216,3211175295,HN 3211175296,3211175327,BR -3211175328,3211177831,HN -3211177832,3211177839,CR -3211177840,3211178583,HN +3211175328,3211175679,HN +3211175680,3211175935,US +3211175936,3211177831,HN +3211177832,3211177847,CR +3211177848,3211178583,HN 3211178584,3211178591,ES 3211178592,3211178671,HN 3211178672,3211178703,ES @@ -99905,9 +101392,11 @@ 3211180048,3211180063,BR 3211180064,3211180103,HN 3211180104,3211180111,BR -3211180112,3211180687,HN +3211180112,3211180543,HN +3211180544,3211180687,US 3211180688,3211180695,BR -3211180696,3211180887,HN +3211180696,3211180799,US +3211180800,3211180887,HN 3211180888,3211180895,CR 3211180896,3211181119,HN 3211181120,3211181135,CR @@ -100031,8 +101520,7 @@ 3221196102,3221225471,BR 3221226240,3221226495,US 3221226496,3221227519,KY -3221227520,3221242879,US -3221242880,3221243135,AU +3221227520,3221243135,US 3221243136,3221243391,DE 3221243392,3221243647,US 3221243648,3221243903,SG @@ -100213,7 +101701,7 @@ 3222983168,3222983935,CA 3222983936,3222984447,US 3222984704,3222988543,AU -3222988544,3222988799,NL +3222988544,3222988799,PT 3222988800,3222989055,AU 3222989056,3222989311,US 3222989312,3222989567,GB @@ -100651,7 +102139,8 @@ 3224699392,3224705023,US 3224705024,3224707071,CH 3224707072,3224725247,US -3224725248,3224725759,NL +3224725248,3224725503,NL +3224725504,3224725759,CH 3224725760,3224772351,US 3224772352,3224777983,DE 3224777984,3224778239,US @@ -100878,7 +102367,7 @@ 3225630720,3225631231,US 3225631232,3225631487,NL 3225631488,3225635839,US -3225635840,3225636095,NL +3225635840,3225636095,PT 3225636096,3225636607,US 3225636608,3225636863,ES 3225636864,3225637887,US @@ -100948,7 +102437,7 @@ 3225728512,3225728767,NL 3225728768,3225729023,US 3225729024,3225729279,CA -3225729536,3225729791,NL +3225729536,3225729791,PT 3225729792,3225730047,US 3225730048,3225730303,CA 3225730304,3225735423,US @@ -101258,7 +102747,7 @@ 3226630656,3226631167,US 3226631168,3226631423,SE 3226631424,3226631935,US -3226631936,3226632191,NL +3226631936,3226632191,PT 3226632192,3226633215,CA 3226633216,3226635263,US 3226635264,3226635519,AU @@ -101322,11 +102811,9 @@ 3226732032,3226733567,US 3226733568,3226733823,MX 3226733824,3226734079,PT -3226734080,3226734335,US -3226734336,3226734493,NL +3226734080,3226734493,US 3226734494,3226734494,PT -3226734495,3226734591,NL -3226734592,3226736639,US +3226734495,3226736639,US 3226736896,3226737407,US 3226737408,3226737663,AT 3226737664,3226738175,US @@ -101429,9 +102916,7 @@ 3226994176,3226994687,AU 3226994688,3226994943,US 3226994944,3226995455,NL -3226995456,3226996991,US -3226996992,3226997247,NL -3226997248,3226998527,US +3226995456,3226998527,US 3226998528,3226999039,AT 3226999040,3227013119,US 3227013376,3227013887,US @@ -102368,7 +103853,7 @@ 3229196800,3229197311,NL 3229197312,3229197823,SE 3229197824,3229198335,GB -3229198336,3229198591,SE +3229198336,3229198591,US 3229198592,3229198847,ES 3229198848,3229199103,CH 3229199104,3229199359,IT @@ -102527,7 +104012,7 @@ 3229885440,3229886719,US 3229886720,3229886975,AU 3229886976,3229889791,US -3229889792,3229890047,NL +3229889792,3229890047,PT 3229890048,3229890303,US 3229890304,3229890559,PT 3229890560,3229891583,US @@ -102638,7 +104123,7 @@ 3230125824,3230126335,AU 3230126336,3230126591,US 3230126848,3230128895,US -3230128896,3230129151,NL +3230128896,3230129151,PT 3230129152,3230129663,US 3230129664,3230129919,JP 3230129920,3230130431,US @@ -102743,7 +104228,7 @@ 3230267904,3230269695,US 3230269696,3230271743,GB 3230271744,3230291455,US -3230291456,3230291711,NL +3230291456,3230291711,PT 3230291712,3230295039,US 3230295040,3230295295,AU 3230295296,3230296319,US @@ -103336,32 +104821,18 @@ 3231514880,3231515647,NO 3231515648,3231516671,US 3231516672,3231519231,SE -3231519232,3231526935,US -3231526936,3231526943,CA -3231526944,3231527119,US -3231527120,3231527127,CA -3231527128,3231527167,US -3231527168,3231527423,CA -3231527424,3231528255,US -3231528256,3231528287,CA -3231528288,3231528303,US -3231528304,3231528311,CA -3231528312,3231528471,US -3231528472,3231528487,CA -3231528488,3231528959,US +3231519232,3231526911,US +3231526912,3231527423,CA +3231527424,3231528191,US +3231528192,3231528703,CA +3231528704,3231528959,US 3231528960,3231528975,CA 3231528976,3231528983,US 3231528984,3231528999,CA 3231529000,3231529015,US -3231529016,3231529055,CA -3231529056,3231529071,US -3231529072,3231529191,CA -3231529192,3231529207,US -3231529208,3231529215,CA +3231529016,3231529215,CA 3231529216,3231529471,US -3231529472,3231529663,CA -3231529664,3231529671,US -3231529672,3231529727,CA +3231529472,3231529727,CA 3231529728,3231529983,US 3231529984,3231530239,CA 3231530240,3231530495,IN @@ -103761,50 +105232,48 @@ 3233292288,3233431551,US 3233431552,3233448287,CA 3233448288,3233448295,US -3233448296,3233448303,CA -3233448304,3233448319,US -3233448320,3233448447,CA -3233448448,3233448463,US -3233448464,3233448479,CA -3233448480,3233448495,US -3233448496,3233448527,CA -3233448528,3233448543,US -3233448544,3233448575,CA -3233448576,3233448607,US -3233448608,3233448655,CA -3233448656,3233448671,US -3233448672,3233448791,CA -3233448792,3233448799,US -3233448800,3233448823,CA -3233448824,3233448831,US +3233448296,3233448383,CA +3233448384,3233448447,US +3233448448,3233448543,CA +3233448544,3233448547,US +3233448548,3233448591,CA +3233448592,3233448607,US +3233448608,3233448619,CA +3233448620,3233448623,US +3233448624,3233448695,CA +3233448696,3233448703,US +3233448704,3233448707,CA +3233448708,3233448711,US +3233448712,3233448719,CA +3233448720,3233448723,US +3233448724,3233448755,CA +3233448756,3233448759,US +3233448760,3233448819,CA +3233448820,3233448831,US 3233448832,3233448863,CA -3233448864,3233448871,US -3233448872,3233448903,CA +3233448864,3233448879,US +3233448880,3233448903,CA 3233448904,3233448911,US -3233448912,3233449095,CA +3233448912,3233449071,CA +3233449072,3233449079,US +3233449080,3233449095,CA 3233449096,3233449103,GB 3233449104,3233449199,CA 3233449200,3233449207,US 3233449208,3233449215,GB 3233449216,3233449311,CA 3233449312,3233449319,RO -3233449320,3233449327,CA -3233449328,3233449343,US -3233449344,3233449359,CA +3233449320,3233449359,CA 3233449360,3233449367,US -3233449368,3233449431,CA -3233449432,3233449439,US -3233449440,3233449519,CA -3233449520,3233449567,US -3233449568,3233449583,CA -3233449584,3233449631,US +3233449368,3233449487,CA +3233449488,3233449503,US +3233449504,3233449535,CA +3233449536,3233449567,US +3233449568,3233449615,CA +3233449616,3233449631,US 3233449632,3233449647,CA 3233449648,3233449663,US -3233449664,3233449727,CA -3233449728,3233449775,US -3233449776,3233449823,CA -3233449824,3233449839,US -3233449840,3233450047,CA +3233449664,3233450047,CA 3233450048,3233450111,US 3233450112,3233450127,CA 3233450128,3233450135,US @@ -103814,170 +105283,202 @@ 3233450240,3233450751,US 3233450752,3233450783,CA 3233450784,3233450815,US -3233450816,3233450847,CA -3233450848,3233450887,US -3233450888,3233450895,CA -3233450896,3233450959,US -3233450960,3233450991,CA -3233450992,3233451263,US +3233450816,3233450863,CA +3233450864,3233450879,US +3233450880,3233450895,CA +3233450896,3233450911,US +3233450912,3233450927,CA +3233450928,3233450959,US +3233450960,3233451007,CA +3233451008,3233451263,US 3233451264,3233451519,CA -3233451520,3233451775,GB -3233451776,3233451807,US -3233451808,3233451887,CA -3233451888,3233451951,US -3233451952,3233451967,CA -3233451968,3233451999,US -3233452000,3233452031,CA +3233451520,3233451535,GB +3233451536,3233451543,US +3233451544,3233451583,GB +3233451584,3233451775,US +3233451776,3233451831,CA +3233451832,3233451839,US +3233451840,3233451879,CA +3233451880,3233451887,US +3233451888,3233451935,CA +3233451936,3233451951,US +3233451952,3233452031,CA 3233452032,3233452287,US 3233452288,3233452303,CA 3233452304,3233452319,US -3233452320,3233452335,CA -3233452336,3233452351,US -3233452352,3233452383,CA -3233452384,3233452415,US -3233452416,3233452511,CA -3233452512,3233452879,US -3233452880,3233452959,CA -3233452960,3233453039,US -3233453040,3233453055,GB -3233453056,3233453183,CA +3233452320,3233452399,CA +3233452400,3233452415,US +3233452416,3233452479,CA +3233452480,3233452495,US +3233452496,3233452511,CA +3233452512,3233452519,US +3233452520,3233452543,CA +3233452544,3233452831,US +3233452832,3233452847,CA +3233452848,3233452879,US +3233452880,3233452991,CA +3233452992,3233453007,US +3233453008,3233453183,CA 3233453184,3233453199,US -3233453200,3233453247,CA -3233453248,3233453263,US -3233453264,3233453271,CA -3233453272,3233453279,US -3233453280,3233453295,CA +3233453200,3233453263,CA +3233453264,3233453271,US +3233453272,3233453295,CA 3233453296,3233453439,US 3233453440,3233453455,CA -3233453456,3233453471,US -3233453472,3233453567,CA -3233453568,3233453631,IT -3233453632,3233454079,US +3233453456,3233453475,US +3233453476,3233453567,CA +3233453568,3233453623,IT +3233453624,3233454079,US 3233454080,3233454303,CA 3233454304,3233454335,US -3233454336,3233454399,CA -3233454400,3233454415,US -3233454416,3233454423,CA -3233454424,3233454447,US -3233454448,3233454511,CA +3233454336,3233454415,CA +3233454416,3233454423,US +3233454424,3233454511,CA 3233454512,3233454527,US 3233454528,3233454559,CA 3233454560,3233454575,US -3233454576,3233454695,CA -3233454696,3233454703,US -3233454704,3233454719,CA -3233454720,3233454727,US -3233454728,3233455039,CA -3233455040,3233455071,US -3233455072,3233455087,CA -3233455088,3233455103,US -3233455104,3233455327,CA -3233455328,3233455335,US -3233455336,3233455423,CA -3233455424,3233455447,US -3233455448,3233455455,CA -3233455456,3233455487,US -3233455488,3233455519,CA -3233455520,3233455551,US -3233455552,3233455679,CA -3233455680,3233455711,US -3233455712,3233455743,CA -3233455744,3233455807,US -3233455808,3233455855,CA -3233455856,3233455871,US -3233455872,3233455935,CA -3233455936,3233455967,US -3233455968,3233455999,CA -3233456000,3233456047,US -3233456048,3233456063,CA -3233456064,3233456111,US -3233456112,3233456119,CA -3233456120,3233456191,US +3233454576,3233454591,CA +3233454592,3233454599,US +3233454600,3233454639,CA +3233454640,3233454647,US +3233454648,3233454687,CA +3233454688,3233454695,US +3233454696,3233454735,CA +3233454736,3233454751,US +3233454752,3233454799,CA +3233454800,3233454807,US +3233454808,3233454831,CA +3233454832,3233454839,US +3233454840,3233455079,CA +3233455080,3233455087,US +3233455088,3233455343,CA +3233455344,3233455359,US +3233455360,3233455495,CA +3233455496,3233455503,US +3233455504,3233455663,CA +3233455664,3233455679,US +3233455680,3233455743,CA +3233455744,3233455775,US +3233455776,3233455855,CA +3233455856,3233455875,US +3233455876,3233455887,CA +3233455888,3233455891,US +3233455892,3233455915,CA +3233455916,3233455919,US +3233455920,3233455991,CA +3233455992,3233455999,US +3233456000,3233456015,CA +3233456016,3233456031,US +3233456032,3233456047,CA +3233456048,3233456111,US +3233456112,3233456127,CA +3233456128,3233456191,US 3233456192,3233456255,LV 3233456256,3233456383,US 3233456384,3233456391,UA 3233456392,3233456399,NO -3233456400,3233456447,UA +3233456400,3233456407,US +3233456408,3233456447,UA 3233456448,3233456639,US 3233456640,3233456655,CA 3233456656,3233456671,US -3233456672,3233456799,CA -3233456800,3233456831,US -3233456832,3233456943,CA -3233456944,3233456959,US +3233456672,3233456791,CA +3233456792,3233456831,US +3233456832,3233456919,CA +3233456920,3233456927,US +3233456928,3233456935,CA +3233456936,3233456959,US 3233456960,3233456975,CA 3233456976,3233456991,US 3233456992,3233457023,CA 3233457024,3233457039,US 3233457040,3233457151,CA -3233457152,3233457535,US -3233457536,3233457631,CA -3233457632,3233457671,US -3233457672,3233457735,CA -3233457736,3233457775,US -3233457776,3233457831,CA -3233457832,3233457871,US -3233457872,3233457919,CA +3233457152,3233457471,US +3233457472,3233457631,CA +3233457632,3233457647,US +3233457648,3233457855,CA +3233457856,3233457863,US +3233457864,3233457919,CA 3233457920,3233458191,US 3233458192,3233458223,CA 3233458224,3233458271,US 3233458272,3233458303,CA -3233458304,3233458351,US -3233458352,3233458359,CA -3233458360,3233458415,US -3233458416,3233458431,CA -3233458432,3233458527,US -3233458528,3233458591,CA -3233458592,3233458623,US -3233458624,3233458687,CA +3233458304,3233458335,US +3233458336,3233458351,CA +3233458352,3233458359,US +3233458360,3233458367,CA +3233458368,3233458399,US +3233458400,3233458415,CA +3233458416,3233458463,US +3233458464,3233458479,CA +3233458480,3233458527,US +3233458528,3233458535,CA +3233458536,3233458543,US +3233458544,3233458591,CA +3233458592,3233458607,US +3233458608,3233458687,CA 3233458688,3233458943,US 3233458944,3233458959,BG 3233458960,3233458975,US 3233458976,3233459007,BG -3233459008,3233459695,US -3233459696,3233459711,CA -3233459712,3233459839,US -3233459840,3233459919,CA -3233459920,3233459999,US +3233459008,3233459455,US +3233459456,3233459519,CA +3233459520,3233459631,US +3233459632,3233459711,CA +3233459712,3233459727,US +3233459728,3233459775,CA +3233459776,3233459807,US +3233459808,3233459823,CA +3233459824,3233459839,US +3233459840,3233459967,CA +3233459968,3233459999,US 3233460000,3233460015,CA -3233460016,3233460047,US -3233460048,3233460063,CA -3233460064,3233460095,US -3233460096,3233460127,CA -3233460128,3233460159,US -3233460160,3233460223,CA +3233460016,3233460031,US +3233460032,3233460119,CA +3233460120,3233460127,US +3233460128,3233460223,CA 3233460224,3233460479,US -3233460480,3233460495,CA -3233460496,3233460511,US +3233460480,3233460487,CA +3233460488,3233460511,US 3233460512,3233460519,SE 3233460520,3233460671,CA -3233460672,3233461263,US -3233461264,3233461279,AE -3233461280,3233461303,CA -3233461304,3233461319,US -3233461320,3233461375,CA +3233460672,3233461247,US +3233461248,3233461343,CA +3233461344,3233461351,US +3233461352,3233461375,CA 3233461376,3233461407,US -3233461408,3233461487,CA -3233461488,3233461543,US -3233461544,3233461567,CA -3233461568,3233461631,US -3233461632,3233461639,CA -3233461640,3233461663,US -3233461664,3233461679,AE -3233461680,3233461727,CA +3233461408,3233461455,CA +3233461456,3233461463,US +3233461464,3233461487,CA +3233461488,3233461503,US +3233461504,3233461567,CA +3233461568,3233461583,US +3233461584,3233461599,CA +3233461600,3233461615,US +3233461616,3233461631,CA +3233461632,3233461639,US +3233461640,3233461647,CA +3233461648,3233461663,US +3233461664,3233461687,CA +3233461688,3233461695,US +3233461696,3233461727,CA 3233461728,3233461743,US 3233461744,3233461759,CA -3233461760,3233461855,US -3233461856,3233461871,CA +3233461760,3233461823,US +3233461824,3233461871,CA 3233461872,3233462015,US -3233462016,3233462127,CA -3233462128,3233462143,US -3233462144,3233462527,CA +3233462016,3233462063,CA +3233462064,3233462071,US +3233462072,3233462527,CA 3233462528,3233462783,US 3233462784,3233463295,CA -3233463296,3233463855,US -3233463856,3233463919,CA -3233463920,3233463999,US +3233463296,3233463807,US +3233463808,3233463839,CA +3233463840,3233463855,US +3233463856,3233463915,CA +3233463916,3233463919,US +3233463920,3233463935,CA +3233463936,3233463999,US 3233464000,3233464063,CA 3233464064,3233484799,US 3233484800,3233487359,ES @@ -104306,117 +105807,145 @@ 3234199040,3234201343,CA 3234201344,3234203647,US 3234203648,3234205695,AR -3234205696,3234226175,US -3234226176,3234226263,CA -3234226264,3234226271,US -3234226272,3234226279,CA -3234226280,3234226303,US -3234226304,3234226711,CA -3234226712,3234226751,US -3234226752,3234226847,CA -3234226848,3234226863,US -3234226864,3234226879,CA -3234226880,3234226943,US -3234226944,3234226959,CA -3234226960,3234226967,US -3234226968,3234227007,CA +3234205696,3234226239,US +3234226240,3234226255,CA +3234226256,3234226263,US +3234226264,3234226287,CA +3234226288,3234226303,US +3234226304,3234226359,CA +3234226360,3234226367,US +3234226368,3234226431,CA +3234226432,3234226687,US +3234226688,3234226695,CA +3234226696,3234226711,US +3234226712,3234226719,CA +3234226720,3234226751,US +3234226752,3234226783,CA +3234226784,3234226815,US +3234226816,3234226831,CA +3234226832,3234226839,US +3234226840,3234226847,CA +3234226848,3234226943,US +3234226944,3234227007,CA 3234227008,3234227023,US -3234227024,3234227135,CA -3234227136,3234227143,US -3234227144,3234227191,CA +3234227024,3234227191,CA 3234227192,3234227455,US 3234227456,3234227619,CA -3234227620,3234227623,US -3234227624,3234227711,CA -3234227712,3234227743,US -3234227744,3234227775,CA -3234227776,3234227807,US -3234227808,3234227839,CA -3234227840,3234227879,US -3234227880,3234227903,CA +3234227620,3234227627,US +3234227628,3234227663,CA +3234227664,3234227667,US +3234227668,3234227687,CA +3234227688,3234227691,US +3234227692,3234227699,CA +3234227700,3234227703,US +3234227704,3234227759,CA +3234227760,3234227767,US +3234227768,3234227839,CA +3234227840,3234227871,US +3234227872,3234227887,CA +3234227888,3234227895,US +3234227896,3234227903,CA 3234227904,3234227935,US 3234227936,3234227951,CA 3234227952,3234228223,US 3234228224,3234228287,CA -3234228288,3234228383,US -3234228384,3234228463,CA -3234228464,3234228479,US -3234228480,3234228511,CA -3234228512,3234228543,US -3234228544,3234228607,CA +3234228288,3234228351,US +3234228352,3234228455,CA +3234228456,3234228463,US +3234228464,3234228487,CA +3234228488,3234228495,US +3234228496,3234228503,CA +3234228504,3234228511,US +3234228512,3234228607,CA 3234228608,3234228639,US 3234228640,3234228671,CA -3234228672,3234228735,US -3234228736,3234229039,CA +3234228672,3234228703,US +3234228704,3234228719,CA +3234228720,3234228735,US +3234228736,3234229023,CA +3234229024,3234229031,US +3234229032,3234229039,CA 3234229040,3234229047,US -3234229048,3234229063,CA -3234229064,3234229079,US -3234229080,3234229111,CA -3234229112,3234229119,US -3234229120,3234229191,CA -3234229192,3234229199,US -3234229200,3234229215,CA +3234229048,3234229071,CA +3234229072,3234229079,US +3234229080,3234229207,CA +3234229208,3234229215,US 3234229216,3234229223,SE -3234229224,3234229231,CA -3234229232,3234229239,US -3234229240,3234229247,CA +3234229224,3234229231,US +3234229232,3234229247,CA 3234229248,3234229503,US 3234229504,3234229567,CA 3234229568,3234229599,US -3234229600,3234229607,CA -3234229608,3234229615,US -3234229616,3234229695,CA -3234229696,3234229759,US -3234229760,3234229895,CA -3234229896,3234229903,US -3234229904,3234229911,CA -3234229912,3234229951,US +3234229600,3234229695,CA +3234229696,3234229743,US +3234229744,3234229791,CA +3234229792,3234229795,US +3234229796,3234229811,CA +3234229812,3234229815,US +3234229816,3234229839,CA +3234229840,3234229847,US +3234229848,3234229887,CA +3234229888,3234229895,US +3234229896,3234229919,CA +3234229920,3234229951,US 3234229952,3234230015,CA -3234230016,3234230207,ES +3234230016,3234230051,ES +3234230052,3234230055,US +3234230056,3234230207,ES 3234230208,3234230271,US 3234230272,3234230399,CA -3234230400,3234230431,US -3234230432,3234230527,CA -3234230528,3234230991,US -3234230992,3234231007,CA -3234231008,3234231039,US -3234231040,3234231087,CA +3234230400,3234230495,US +3234230496,3234230527,CA +3234230528,3234230783,US +3234230784,3234230927,CA +3234230928,3234230991,US +3234230992,3234230999,CA +3234231000,3234231047,US +3234231048,3234231087,CA 3234231088,3234231103,US -3234231104,3234231143,CA -3234231144,3234231151,US -3234231152,3234231199,CA -3234231200,3234231215,US -3234231216,3234231231,CA -3234231232,3234231247,US -3234231248,3234231255,CA -3234231256,3234231279,US -3234231280,3234231807,CA -3234231808,3234232159,US -3234232160,3234232247,CA -3234232248,3234232255,US -3234232256,3234232319,CA +3234231104,3234231151,CA +3234231152,3234231159,US +3234231160,3234231191,CA +3234231192,3234231199,US +3234231200,3234231287,CA +3234231288,3234231295,US +3234231296,3234231807,CA +3234231808,3234232111,US +3234232112,3234232127,CA +3234232128,3234232159,US +3234232160,3234232231,CA +3234232232,3234232239,US +3234232240,3234232319,CA 3234232320,3234232575,EG -3234232576,3234233375,US -3234233376,3234233399,CA -3234233400,3234233407,US -3234233408,3234233471,CA +3234232576,3234233343,US +3234233344,3234233391,CA +3234233392,3234233399,US +3234233400,3234233471,CA 3234233472,3234233487,US -3234233488,3234233503,CA -3234233504,3234233599,US -3234233600,3234233631,CA -3234233632,3234233695,US -3234233696,3234233711,AE -3234233712,3234233759,US +3234233488,3234233495,CA +3234233496,3234233503,US +3234233504,3234233519,CA +3234233520,3234233599,US +3234233600,3234233619,CA +3234233620,3234233623,US +3234233624,3234233647,CA +3234233648,3234233663,US +3234233664,3234233727,CA +3234233728,3234233759,US 3234233760,3234233791,CA 3234233792,3234233823,US 3234233824,3234233855,CA -3234233856,3234234199,US +3234233856,3234234127,US +3234234128,3234234143,CA +3234234144,3234234199,US 3234234200,3234234207,CA 3234234208,3234234239,US -3234234240,3234234247,CA -3234234248,3234234271,US +3234234240,3234234255,CA +3234234256,3234234271,US 3234234272,3234234287,CA -3234234288,3234267135,US +3234234288,3234234335,US +3234234336,3234234367,CA +3234234368,3234267135,US 3234267136,3234267391,CA 3234267392,3234268927,US 3234268928,3234269183,SG @@ -104901,69 +106430,51 @@ 3237036064,3237036095,CA 3237036096,3237036127,US 3237036128,3237036135,CA -3237036136,3237036223,US -3237036224,3237036255,CA -3237036256,3237036383,US +3237036136,3237036159,US +3237036160,3237036255,CA +3237036256,3237036351,US +3237036352,3237036367,CA +3237036368,3237036383,US 3237036384,3237036415,CA 3237036416,3237036495,US 3237036496,3237036511,CA 3237036512,3237036543,US 3237036544,3237036799,CN 3237036800,3237037311,US -3237037312,3237037387,CA -3237037388,3237037391,US -3237037392,3237037567,CA +3237037312,3237037567,CA 3237037568,3237037583,US -3237037584,3237037607,CA -3237037608,3237037631,US -3237037632,3237037703,CA -3237037704,3237037711,US -3237037712,3237037815,CA -3237037816,3237037823,US -3237037824,3237037887,CA -3237037888,3237037895,GB -3237037896,3237037935,CA -3237037936,3237037959,US -3237037960,3237037967,CA -3237037968,3237037975,US -3237037976,3237037999,CA -3237038000,3237038007,US -3237038008,3237038031,CA +3237037584,3237037615,CA +3237037616,3237037631,US +3237037632,3237037943,CA +3237037944,3237037959,US +3237037960,3237038031,CA 3237038032,3237038047,US 3237038048,3237038367,CA 3237038368,3237038399,US 3237038400,3237038415,CA 3237038416,3237038431,US -3237038432,3237038463,CA -3237038464,3237038591,US -3237038592,3237038607,CA -3237038608,3237038615,US -3237038616,3237038663,CA -3237038664,3237038671,US -3237038672,3237038679,CA -3237038680,3237038687,US -3237038688,3237038743,CA -3237038744,3237038751,US -3237038752,3237038767,CA -3237038768,3237038775,US -3237038776,3237038783,CA -3237038784,3237038791,US -3237038792,3237038831,CA -3237038832,3237038839,US -3237038840,3237038863,CA +3237038432,3237038495,CA +3237038496,3237038575,US +3237038576,3237038863,CA 3237038864,3237038879,US 3237038880,3237038911,CA -3237038912,3237039055,US -3237039056,3237039103,CA -3237039104,3237039231,US -3237039232,3237039295,CA -3237039296,3237039615,US +3237038912,3237038927,US +3237038928,3237039103,CA +3237039104,3237039183,US +3237039184,3237039199,CA +3237039200,3237039215,US +3237039216,3237039295,CA +3237039296,3237039343,US +3237039344,3237039359,CA +3237039360,3237039615,US 3237039616,3237039935,CA 3237039936,3237040063,US 3237040064,3237040143,CA 3237040144,3237040159,US -3237040160,3237040255,CA -3237040256,3237040335,US +3237040160,3237040287,CA +3237040288,3237040303,US +3237040304,3237040319,CA +3237040320,3237040335,US 3237040336,3237040351,CA 3237040352,3237040511,US 3237040512,3237040639,CA @@ -104971,89 +106482,67 @@ 3237040896,3237041151,CA 3237041152,3237041183,US 3237041184,3237041199,CA -3237041200,3237041823,US -3237041824,3237041935,CA +3237041200,3237041407,US +3237041408,3237041663,CA +3237041664,3237041791,US +3237041792,3237041935,CA 3237041936,3237041983,US -3237041984,3237042047,CA -3237042048,3237042063,GB -3237042064,3237042079,US -3237042080,3237042127,CA +3237041984,3237042127,CA 3237042128,3237042431,US -3237042432,3237042463,CA -3237042464,3237042471,US -3237042472,3237042479,CA +3237042432,3237042479,CA 3237042480,3237042495,US -3237042496,3237042511,CA -3237042512,3237042527,US -3237042528,3237042607,CA +3237042496,3237042607,CA 3237042608,3237042623,US -3237042624,3237042631,CA -3237042632,3237042639,US -3237042640,3237042647,CA -3237042648,3237042655,US -3237042656,3237042679,CA -3237042680,3237043455,US +3237042624,3237042687,CA +3237042688,3237043455,US 3237043456,3237043711,CA 3237043712,3237043967,US 3237043968,3237044223,CH 3237044224,3237044287,US 3237044288,3237044351,CA 3237044352,3237044479,US -3237044480,3237044623,CA -3237044624,3237044631,US -3237044632,3237044639,CA -3237044640,3237044647,US -3237044648,3237044695,CA -3237044696,3237044703,US -3237044704,3237044711,CA -3237044712,3237044719,US -3237044720,3237044727,CA -3237044728,3237044799,US -3237044800,3237044815,CA +3237044480,3237044815,CA 3237044816,3237044831,US 3237044832,3237044887,CA 3237044888,3237044895,US -3237044896,3237045031,CA -3237045032,3237045039,US -3237045040,3237045223,CA -3237045224,3237045231,US -3237045232,3237045247,CA +3237044896,3237045247,CA 3237045248,3237046527,US -3237046528,3237046543,GB -3237046544,3237046559,US -3237046560,3237046607,CA +3237046528,3237046607,CA 3237046608,3237046623,US 3237046624,3237046647,CA 3237046648,3237046655,SE -3237046656,3237046767,US -3237046768,3237046775,CA -3237046776,3237046815,US -3237046816,3237046847,CA -3237046848,3237046943,US -3237046944,3237047039,CA +3237046656,3237046671,CA +3237046672,3237046767,US +3237046768,3237046783,CA +3237046784,3237046815,US +3237046816,3237047039,CA 3237047040,3237047295,FR -3237047296,3237047871,US +3237047296,3237047807,US +3237047808,3237047839,CA +3237047840,3237047871,US 3237047872,3237047935,CA 3237047936,3237048031,US -3237048032,3237048063,CA -3237048064,3237048143,US +3237048032,3237048079,CA +3237048080,3237048111,US +3237048112,3237048127,CA +3237048128,3237048143,US 3237048144,3237048159,CA 3237048160,3237048191,US 3237048192,3237048255,CA 3237048256,3237048575,US 3237048576,3237048767,CA -3237048768,3237048815,US -3237048816,3237049855,CA +3237048768,3237048783,US +3237048784,3237049855,CA 3237049856,3237050111,US 3237050112,3237050159,GB 3237050160,3237050175,US -3237050176,3237050303,GB -3237050304,3237051903,US +3237050176,3237050239,GB +3237050240,3237051903,US 3237051904,3237052159,TR -3237052160,3237052287,CA -3237052288,3237052383,US -3237052384,3237052399,CA -3237052400,3237125295,US +3237052160,3237052319,CA +3237052320,3237052367,US +3237052368,3237052415,CA +3237052416,3237125295,US 3237125296,3237125311,CR 3237125312,3237154815,US 3237154816,3237155839,ES @@ -105391,7 +106880,7 @@ 3237870080,3237870335,IS 3237870336,3237870591,SG 3237870592,3237870847,BN -3237870848,3237871103,KR +3237870848,3237871103,RO 3237871104,3237871231,TH 3237871232,3237871359,TW 3237871360,3237871615,RU @@ -105766,7 +107255,7 @@ 3239173376,3239173631,DE 3239173632,3239173887,AT 3239173888,3239174143,PL -3239174400,3239174655,RO +3239174400,3239174655,US 3239174656,3239174911,GB 3239174912,3239175167,SI 3239175424,3239175679,BG @@ -106427,7 +107916,7 @@ 3240235008,3240236031,FR 3240236032,3240237055,UA 3240237056,3240239103,DE -3240239104,3240240127,FR +3240239104,3240240127,CH 3240240128,3240241151,US 3240241152,3240242175,FI 3240242176,3240243199,PL @@ -107076,13 +108565,17 @@ 3242597088,3242597119,CZ 3242597120,3242597343,FR 3242597344,3242597375,NL -3242597376,3242602823,FR +3242597376,3242598351,FR +3242598352,3242598367,LT +3242598368,3242602823,FR 3242602824,3242602831,ES 3242602832,3242602975,FR 3242602976,3242603007,PL 3242603008,3242603039,FR 3242603040,3242603071,DE -3242603072,3242604095,FR +3242603072,3242603127,FR +3242603128,3242603135,ES +3242603136,3242604095,FR 3242604096,3242604159,PL 3242604160,3242604287,IT 3242604288,3242604671,FR @@ -107111,7 +108604,9 @@ 3242610048,3242610271,FR 3242610272,3242610303,FI 3242610304,3242610431,BE -3242610432,3242614527,FR +3242610432,3242614513,FR +3242614514,3242614514,PL +3242614515,3242614527,FR 3242614528,3242614783,PL 3242614784,3242615167,FR 3242615168,3242615295,IE @@ -107127,16 +108622,22 @@ 3242616960,3242617087,IT 3242617088,3242617599,FR 3242617600,3242617727,GB -3242617728,3242618239,FR +3242617728,3242617911,FR +3242617912,3242617919,ES +3242617920,3242618239,FR 3242618240,3242618367,NL 3242618368,3242618415,FR 3242618416,3242618431,CZ 3242618432,3242618495,PL -3242618496,3242620223,FR +3242618496,3242620199,FR +3242620200,3242620207,ES +3242620208,3242620223,FR 3242620224,3242620239,PT 3242620240,3242620255,ES 3242620256,3242620287,PL -3242620288,3242620367,FR +3242620288,3242620351,FR +3242620352,3242620359,ES +3242620360,3242620367,FR 3242620368,3242620383,PL 3242620384,3242622031,FR 3242622032,3242622047,PL @@ -107873,7 +109374,6 @@ 3245093888,3245094911,RO 3245094912,3245095935,UA 3245095936,3245096959,IT -3245097984,3245098495,FR 3245099008,3245103103,GB 3245105664,3245106175,NL 3245106176,3245106687,AT @@ -108228,31 +109728,46 @@ 3246131712,3246132735,SY 3246132736,3246132991,DE 3246132992,3246134271,RU -3246134784,3246135807,RU +3246134784,3246135551,RU +3246135552,3246135807,ES 3246135808,3246136831,SY -3246136832,3246138879,RU +3246136832,3246137087,RU +3246137088,3246137599,ES +3246137600,3246138623,RU +3246138624,3246138879,ES 3246138880,3246139391,SY -3246139392,3246142463,RU +3246139392,3246140159,RU +3246140160,3246140415,ES +3246140416,3246142207,RU +3246142208,3246142463,ES 3246142464,3246142975,SY -3246142976,3246145023,RU +3246142976,3246144767,RU +3246144768,3246145023,ES 3246145024,3246145535,SY 3246145536,3246146559,RU 3246146560,3246147071,SY -3246147072,3246147583,RU +3246147072,3246147327,ES +3246147328,3246147583,RU 3246147584,3246148607,SY 3246148608,3246149631,DE -3246149632,3246150143,RU +3246149632,3246149887,RU +3246149888,3246150143,ES 3246150144,3246150655,SY 3246150656,3246150911,DE -3246150912,3246151167,RU +3246150912,3246151167,ES 3246151168,3246151679,SY 3246151680,3246153727,RU 3246153728,3246157823,SY -3246157824,3246160383,RU +3246157824,3246159871,RU +3246159872,3246160127,ES +3246160128,3246160383,RU 3246160384,3246160895,SY 3246160896,3246161407,RU 3246161408,3246161919,SY -3246161920,3246163967,RU +3246161920,3246162943,RU +3246162944,3246163199,ES +3246163200,3246163711,RU +3246163712,3246163967,ES 3246163968,3246168063,DE 3246168064,3246169599,SY 3246169600,3246170111,RU @@ -108267,8 +109782,8 @@ 3246191616,3246192639,DE 3246192640,3246193663,PS 3246193664,3246194175,SY -3246194176,3246194687,RU -3246194688,3246260223,ES +3246194176,3246194431,RU +3246194432,3246260223,ES 3246260224,3246325759,PT 3246325760,3246328831,ES 3246329088,3246329855,ES @@ -109063,8 +110578,7 @@ 3250021376,3250022399,FR 3250022400,3250023423,SE 3250023424,3250024447,DE -3250024448,3250024703,CH -3250024704,3250026495,SE +3250024448,3250026495,SE 3250026496,3250027519,FR 3250027520,3250030335,SE 3250030336,3250030591,DK @@ -109679,8 +111193,8 @@ 3252220928,3252221183,SE 3252221184,3252222463,LT 3252222464,3252223487,SE -3252223488,3252226047,LT -3252226048,3252232319,SE +3252223488,3252232191,LT +3252232192,3252232319,SE 3252232320,3252232576,NL 3252232577,3252240383,SE 3252240384,3252286463,HR @@ -109981,9 +111495,7 @@ 3253288704,3253288959,AR 3253288960,3253313535,RU 3253313536,3253313791,NL -3253313792,3253317631,RU -3253317632,3253319679,GB -3253319680,3253338111,RU +3253313792,3253338111,RU 3253338112,3253338367,PL 3253338368,3253380351,SE 3253380352,3253380607,GB @@ -110232,7 +111744,9 @@ 3253741568,3253741679,GB 3253741680,3253741695,RU 3253741696,3253742591,GB -3253742592,3253743615,DE +3253742592,3253742847,DE +3253742848,3253743103,GB +3253743104,3253743615,DE 3253743616,3253744415,GB 3253744416,3253744447,CH 3253744448,3253744511,GB @@ -110372,7 +111886,9 @@ 3253786624,3253786879,GB 3253786880,3253788079,DE 3253788080,3253788082,GB -3253788083,3253788415,DE +3253788083,3253788127,DE +3253788128,3253788143,GB +3253788144,3253788415,DE 3253788416,3253788447,GB 3253788448,3253788479,DE 3253788480,3253788511,GB @@ -110522,11 +112038,7 @@ 3254487200,3254487263,FR 3254487264,3254487295,KM 3254487296,3254487419,CF -3254487420,3254487559,FR -3254487560,3254487567,CI -3254487568,3254487575,FR -3254487576,3254487803,CI -3254487804,3254488431,FR +3254487420,3254488431,FR 3254488432,3254488447,MG 3254488448,3254489087,FR 3254489088,3254489343,DZ @@ -111207,9 +112719,7 @@ 3255743744,3255743999,US 3255744000,3255752959,SE 3255752960,3255753215,LI -3255753216,3255760895,SE -3255760896,3255761151,FO -3255761152,3255762431,SE +3255753216,3255762431,SE 3255762432,3255762943,BE 3255762944,3255771135,DE 3255779328,3255787519,DE @@ -111829,7 +113339,7 @@ 3258362892,3258362892,GB 3258362893,3258363903,IM 3258363904,3258364927,RU -3258364928,3258365951,XK +3258364928,3258365951,RS 3258365952,3258366975,UA 3258366976,3258367999,PL 3258368000,3258384383,KW @@ -111853,12 +113363,19 @@ 3258515456,3258580991,FR 3258580992,3258587135,SY 3258587136,3258588159,US -3258588160,3258593279,RU +3258588160,3258588927,ES +3258588928,3258589951,RU +3258589952,3258590207,ES +3258590208,3258593279,RU 3258593280,3258595327,SY 3258595328,3258597375,RU 3258597888,3258599423,RU 3258599424,3258600959,PS -3258600960,3258613759,RU +3258600960,3258601471,RU +3258601472,3258601983,ES +3258601984,3258602495,RU +3258602496,3258602751,ES +3258602752,3258613759,RU 3258613760,3258619903,SY 3258619904,3258620415,PS 3258620416,3258620927,RU @@ -112109,7 +113626,9 @@ 3259457280,3259457535,IT 3259457536,3259466239,SE 3259466240,3259466495,HU -3259466496,3259470847,SE +3259466496,3259469823,SE +3259469824,3259470335,AX +3259470336,3259470847,SE 3259470848,3259471871,US 3259471872,3259479807,SE 3259479808,3259480063,DK @@ -112535,7 +114054,7 @@ 3262422016,3262422527,SE 3262422528,3262423039,AT 3262423040,3262423551,GB -3262423552,3262424063,US +3262423552,3262424063,UA 3262424064,3262424575,IT 3262424576,3262424831,PL 3262424832,3262425087,GB @@ -114363,8 +115882,7 @@ 3262480181,3262480181,ES 3262480182,3262480184,DE 3262480185,3262480185,FR -3262480186,3262480186,PT -3262480187,3262480187,DE +3262480186,3262480187,DE 3262480188,3262480188,FI 3262480189,3262480189,CH 3262480190,3262480194,DE @@ -114629,7 +116147,9 @@ 3263438592,3263438847,IT 3263438848,3263443455,SE 3263443456,3263443967,NL -3263443968,3263446271,SE +3263443968,3263445759,SE +3263445760,3263446015,GB +3263446016,3263446271,SE 3263446272,3263446527,CH 3263446528,3263447039,DE 3263447040,3263449599,SE @@ -114643,7 +116163,9 @@ 3263460096,3263460351,GB 3263460352,3263461631,SE 3263461632,3263461887,GB -3263461888,3263469567,SE +3263461888,3263467519,SE +3263467520,3263468031,AX +3263468032,3263469567,SE 3263469568,3263469663,SG 3263469664,3263469695,US 3263469696,3263469855,SG @@ -114690,16 +116212,19 @@ 3263527680,3263545343,DE 3263545344,3263561727,US 3263561728,3263627263,NL -3263627264,3263627519,RU +3263627264,3263627519,ES 3263627520,3263628031,UA -3263628032,3263631359,RU +3263628032,3263628287,ES +3263628288,3263631359,RU 3263631360,3263632127,UA -3263632128,3263632383,RU +3263632128,3263632383,ES 3263632384,3263632639,UA 3263632640,3263633151,RU 3263633152,3263633663,UA 3263633664,3263633919,RU -3263634432,3263635455,RU +3263634432,3263634943,ES +3263634944,3263635199,RU +3263635200,3263635455,ES 3263635456,3263636223,UA 3263636224,3263636479,RU 3263636480,3263636991,UA @@ -114710,20 +116235,28 @@ 3263639040,3263639295,RU 3263639296,3263639551,DE 3263639552,3263640575,US -3263640576,3263647743,RU +3263640576,3263641599,RU +3263641600,3263642623,ES +3263642624,3263646719,RU +3263646720,3263647743,ES 3263647744,3263651619,LT 3263651620,3263651620,RU 3263651621,3263651839,LT -3263651840,3263654399,RU +3263651840,3263653119,RU +3263653120,3263653631,ES +3263653632,3263654399,RU 3263654400,3263654911,SY 3263654912,3263656959,RU 3263656960,3263657471,SY 3263657472,3263657727,DE -3263657728,3263660031,RU +3263657728,3263659263,RU +3263659264,3263660031,ES 3263660032,3263661055,DE -3263661568,3263666175,RU +3263661568,3263661823,ES +3263661824,3263666175,RU 3263666176,3263676415,AZ -3263676416,3263678463,RU +3263676416,3263677439,RU +3263677440,3263678463,ES 3263678464,3263680511,DE 3263680512,3263690751,RU 3263690752,3263692799,SY @@ -116727,7 +118260,7 @@ 3273326992,3273327047,DE 3273327104,3273327231,DE 3273327264,3273327295,DE -3273327336,3273327343,DE +3273327336,3273327351,DE 3273327392,3273327407,IE 3273327488,3273327495,GB 3273327520,3273327551,IE @@ -116809,6 +118342,7 @@ 3273349120,3273349631,DE 3273350272,3273350287,DE 3273350336,3273350351,DE +3273351168,3273351423,GB 3273351424,3273351455,DE 3273351504,3273351519,DE 3273351872,3273351903,DE @@ -117629,7 +119163,8 @@ 3275454416,3275455231,GB 3275455248,3275455295,GB 3275455360,3275456407,GB -3275456416,3275458559,GB +3275456416,3275458303,GB +3275458304,3275458559,FK 3275458560,3275459071,IE 3275459840,3275460095,IE 3275460096,3275460223,GB @@ -118658,7 +120193,9 @@ 3276907342,3276907342,NL 3276907343,3276908759,GB 3276908760,3276908760,NL -3276908761,3276911167,GB +3276908761,3276909831,GB +3276909832,3276909835,NL +3276909836,3276911167,GB 3276911168,3276911199,IT 3276911200,3276911249,GB 3276911250,3276911250,IT @@ -118990,7 +120527,11 @@ 3277730560,3277730563,GB 3277730564,3277731103,CH 3277731104,3277731119,DE -3277731120,3277733887,CH +3277731120,3277731223,CH +3277731224,3277731231,DE +3277731232,3277731247,CH +3277731248,3277731255,DE +3277731256,3277733887,CH 3277733888,3277742079,DE 3277742080,3277745151,FI 3277745152,3277746175,CH @@ -122090,7 +123631,8 @@ 3283462144,3283462399,US 3283462400,3283462655,GB 3283462656,3283462911,DE -3283462912,3283463679,GB +3283462912,3283463167,GB +3283463168,3283463679,NL 3283463680,3283464191,DE 3283464192,3283468287,IT 3283468288,3283472383,FI @@ -122561,11 +124103,22 @@ 3284728320,3284728831,UA 3284728832,3284729343,PT 3284729344,3284729855,FR -3284729856,3284795391,RU +3284729856,3284795391,DE 3284795392,3284803583,FR 3284803584,3284811775,DE 3284811776,3284819967,KE -3284819968,3284822447,GB +3284819968,3284822272,GB +3284822273,3284822273,NL +3284822274,3284822274,IT +3284822275,3284822275,CH +3284822276,3284822276,ES +3284822277,3284822277,BE +3284822278,3284822278,RU +3284822279,3284822279,SE +3284822280,3284822280,IT +3284822281,3284822281,GB +3284822282,3284822282,FR +3284822283,3284822447,GB 3284822448,3284822479,NL 3284822480,3284828159,GB 3284828160,3284844543,AT @@ -122696,6 +124249,7 @@ 3285453440,3285453567,GB 3285453664,3285453695,GB 3285458176,3285458431,GB +3285461296,3285461299,NL 3285461432,3285461435,NL 3285461808,3285461839,NL 3285461844,3285461847,NL @@ -122805,6 +124359,7 @@ 3285913656,3285913703,GB 3285913704,3285913711,FI 3285913712,3285913991,GB +3285914624,3285914879,GB 3285915904,3285916159,AT 3285916416,3285916671,YE 3285917696,3285917703,GB @@ -122837,11 +124392,10 @@ 3285930752,3285931007,GB 3285931528,3285931559,DE 3285931560,3285931567,HU -3285931568,3285931579,DE -3285931584,3285931599,DE +3285931568,3285931599,DE 3285935872,3285936127,GB 3285936136,3285936147,FR -3285936152,3285936223,FR +3285936152,3285936227,FR 3285939136,3285939175,GB 3285939184,3285939191,GB 3285939744,3285939759,GB @@ -123726,7 +125280,7 @@ 3288785664,3288785919,TZ 3288785920,3288786175,NG 3288786176,3288786431,KE -3288786688,3288787967,ZA +3288786432,3288787967,ZA 3288787968,3288788223,EG 3288788224,3288792831,ZA 3288792832,3288793087,AO @@ -123886,10 +125440,13 @@ 3289436160,3289437183,AU 3289437184,3289438207,SC 3289438208,3289439231,AU -3289439232,3289440255,SC +3289439232,3289439487,SC +3289439488,3289439743,GB +3289439744,3289440255,SC 3289440256,3289448447,ZA 3289448448,3289465855,US -3289465856,3289473023,SC +3289465856,3289472767,SC +3289472768,3289473023,GB 3289473024,3289475071,US 3289475072,3289475583,HU 3289475584,3289475839,GB @@ -123901,7 +125458,7 @@ 3289490432,3289491455,US 3289491456,3289492479,GB 3289492480,3289493503,US -3289493504,3289494527,SC +3289493504,3289494527,GB 3289494528,3289495551,US 3289495552,3289496575,GB 3289496576,3289499647,US @@ -123918,11 +125475,11 @@ 3289530368,3289538559,NL 3289538560,3289540607,US 3289540608,3289541119,ES -3289541120,3289541631,SC +3289541120,3289541631,AU 3289541632,3289542655,US 3289542656,3289543679,GB 3289543680,3289544703,US -3289544704,3289545727,SC +3289544704,3289545727,AU 3289545728,3289546751,US 3289546752,3289550847,SC 3289550848,3289553919,US @@ -123930,7 +125487,9 @@ 3289554944,3289555967,US 3289555968,3289556991,GB 3289556992,3289558015,US -3289558016,3289559039,NL +3289558016,3289558527,ID +3289558528,3289558783,GB +3289558784,3289559039,NL 3289559040,3289563135,SC 3289563136,3289565183,US 3289565184,3289565439,GB @@ -123946,7 +125505,7 @@ 3289595904,3289604095,NL 3289604096,3289606143,US 3289606144,3289606655,AT -3289606656,3289607167,SC +3289606656,3289607167,HK 3289607168,3289624575,US 3289624576,3289627647,SC 3289627648,3289630719,US @@ -123958,7 +125517,9 @@ 3289634816,3289636863,SC 3289636864,3289637887,CN 3289637888,3289638911,AU -3289638912,3289645055,SC +3289638912,3289640191,SC +3289640192,3289640447,GB +3289640448,3289645055,SC 3289645056,3289653247,NA 3289653248,3289661439,EG 3289661440,3289677823,DZ @@ -124209,8 +125770,8 @@ 3291430912,3291432703,ZA 3291432704,3291432959,NA 3291432960,3291435263,ZA -3291435264,3291436287,NA -3291436288,3291436799,ZA +3291435264,3291436543,NA +3291436544,3291436799,ZA 3291436800,3291437823,NA 3291437824,3291438079,ZA 3291438080,3291438847,NA @@ -124250,6 +125811,7 @@ 3291555840,3291556095,GN 3291556352,3291556607,SN 3291556864,3291557119,TG +3291557376,3291557631,ZW 3291611136,3291611647,ZA 3291611648,3291611903,MU 3291611904,3291612159,ZA @@ -124291,7 +125853,9 @@ 3291755008,3291755263,AU 3291755264,3291755519,US 3291755520,3291755775,AU -3291755776,3291756543,US +3291755776,3291756031,US +3291756032,3291756287,AU +3291756288,3291756543,US 3291756544,3291756799,AU 3291756800,3291757311,US 3291757312,3291757567,GB @@ -124328,7 +125892,9 @@ 3291823104,3291823359,DE 3291823360,3291824127,US 3291824128,3291824639,GB -3291824640,3291826175,US +3291824640,3291824895,US +3291824896,3291824896,MX +3291824897,3291826175,US 3291826176,3291826431,CA 3291826432,3291827199,US 3291827200,3291827455,CA @@ -124336,7 +125902,9 @@ 3291828736,3291829247,CA 3291829248,3291830271,US 3291830272,3291832319,KH -3291832320,3291879935,US +3291832320,3291878655,US +3291878656,3291878911,GB +3291878912,3291879935,US 3291879936,3291880191,AU 3291880192,3291883775,US 3291883776,3291884031,CA @@ -124363,7 +125931,9 @@ 3291939328,3291939583,IN 3291939584,3291943423,US 3291943424,3291943679,FR -3291943680,3291945727,US +3291943680,3291943935,US +3291943936,3291944959,MX +3291944960,3291945727,US 3291945728,3291945983,GB 3291945984,3291971583,US 3291971584,3291972607,JP @@ -124379,8 +125949,8 @@ 3292007424,3292007679,SC 3292007680,3292008191,US 3292008192,3292008447,SC -3292008448,3292009471,US -3292009472,3292009983,SC +3292008448,3292009727,US +3292009728,3292009983,SC 3292009984,3292011519,US 3292011520,3292011775,SC 3292011776,3292013055,US @@ -124433,9 +126003,7 @@ 3292040960,3292041471,SC 3292041472,3292043007,US 3292043008,3292043263,SC -3292043264,3292043519,US -3292043520,3292043775,SC -3292043776,3292044543,US +3292043264,3292044543,US 3292044544,3292045055,SC 3292045056,3292045311,US 3292045312,3292045567,SC @@ -124507,22 +126075,22 @@ 3292079104,3292079359,US 3292079360,3292079615,SC 3292079616,3292080127,US -3292080128,3292080639,SC -3292080640,3292081151,US +3292080128,3292080383,SC +3292080384,3292081151,US 3292081152,3292081407,SC 3292081408,3292082431,US 3292082432,3292082943,SC 3292082944,3292084735,US -3292084736,3292085503,SC +3292084736,3292084991,SC +3292084992,3292085247,US +3292085248,3292085503,SC 3292085504,3292085759,US 3292085760,3292086015,SC 3292086016,3292088063,US 3292088064,3292088319,SC 3292088320,3292089087,US 3292089088,3292089343,SC -3292089344,3292090111,US -3292090112,3292090367,SC -3292090368,3292091903,US +3292089344,3292091903,US 3292091904,3292092159,SC 3292092160,3292093439,US 3292093440,3292093951,SC @@ -124600,8 +126168,8 @@ 3292129792,3292130303,SC 3292130304,3292131327,US 3292131328,3292132095,SC -3292132096,3292133631,US -3292133632,3292134143,SC +3292132096,3292133887,US +3292133888,3292134143,SC 3292134144,3292134399,US 3292134400,3292134911,SC 3292134912,3292135167,DE @@ -124640,15 +126208,11 @@ 3292149504,3292149759,SC 3292149760,3292150271,US 3292150272,3292150527,SC -3292150528,3292151551,US -3292151552,3292151807,SC -3292151808,3292152063,US +3292150528,3292152063,US 3292152064,3292152319,SC 3292152320,3292153343,US 3292153344,3292154623,SC -3292154624,3292155903,US -3292155904,3292156159,SC -3292156160,3292157439,US +3292154624,3292157439,US 3292157440,3292157695,SC 3292157696,3292157951,US 3292157952,3292158463,SC @@ -124659,8 +126223,8 @@ 3292162048,3292162559,US 3292162560,3292163071,SC 3292163072,3292163327,US -3292163328,3292163839,SC -3292163840,3292165887,US +3292163328,3292163583,SC +3292163584,3292165887,US 3292165888,3292166143,SC 3292166144,3292167935,US 3292167936,3292168191,SC @@ -124704,8 +126268,8 @@ 3292188160,3292188671,SC 3292188672,3292190975,US 3292190976,3292191231,SC -3292191232,3292193279,US -3292193280,3292194047,SC +3292191232,3292193791,US +3292193792,3292194047,SC 3292194048,3292195839,US 3292195840,3292196607,SC 3292196608,3292197119,US @@ -124759,9 +126323,7 @@ 3292227072,3292227327,SC 3292227328,3292229887,US 3292229888,3292230143,SC -3292230144,3292230399,US -3292230400,3292230655,SC -3292230656,3292231935,US +3292230144,3292231935,US 3292231936,3292232191,SC 3292232192,3292233215,US 3292233216,3292233727,SC @@ -124772,8 +126334,8 @@ 3292236032,3292237311,US 3292237312,3292237823,SC 3292237824,3292239359,US -3292239360,3292240383,SC -3292240384,3292240639,US +3292239360,3292240127,SC +3292240128,3292240639,US 3292240640,3292240895,SC 3292240896,3292241151,US 3292241152,3292241407,SC @@ -124830,6 +126392,7 @@ 3292276224,3292276479,GN 3292276736,3292276991,SN 3292277248,3292277503,TG +3292277760,3292278015,ZW 3292332032,3292334079,NG 3292334080,3292336127,TZ 3292336128,3292340223,ZA @@ -124873,8 +126436,8 @@ 3301048320,3301081087,PK 3301081088,3301113855,ZA 3301113856,3301117951,AF -3301117952,3301122047,PK -3301122048,3301144319,ZA +3301117952,3301130239,PK +3301130240,3301144319,ZA 3301144320,3301144575,NG 3301144576,3301146623,ZA 3301146624,3301163007,IN @@ -124924,11 +126487,11 @@ 3301254144,3301256191,US 3301256192,3301257215,SC 3301257216,3301259263,US -3301259264,3301261311,SC -3301261312,3301262335,US +3301259264,3301260287,SC +3301260288,3301262335,US 3301262336,3301263359,SC -3301263360,3301264383,US -3301264384,3301266431,SC +3301263360,3301265407,US +3301265408,3301266431,SC 3301266432,3301267455,US 3301267456,3301268479,SC 3301268480,3301272575,US @@ -124941,7 +126504,7 @@ 3301283840,3301284863,US 3301284864,3301286911,SC 3301286912,3301287935,NL -3301287936,3301288959,SC +3301287936,3301288959,CH 3301288960,3301289983,ES 3301289984,3301291007,PT 3301291008,3301292031,PL @@ -124959,12 +126522,19 @@ 3301304320,3301305343,FR 3301305344,3301306367,AT 3301306368,3301307391,IN -3301307392,3301308415,SC +3301307392,3301308415,RU 3301308416,3301309439,SG 3301309440,3301310463,BR -3301310464,3301311487,SC +3301310464,3301310975,US +3301310976,3301311487,SC 3301311488,3301311743,DE -3301311744,3301315583,SC +3301311744,3301313023,SC +3301313024,3301313279,AU +3301313280,3301314303,SC +3301314304,3301314559,NO +3301314560,3301315071,SC +3301315072,3301315327,ES +3301315328,3301315583,SC 3301315584,3301315839,NL 3301315840,3301317375,SC 3301317376,3301317631,PR @@ -125001,7 +126571,9 @@ 3301337088,3301337343,US 3301337344,3301337855,SC 3301337856,3301338111,US -3301338112,3301343487,SC +3301338112,3301340671,SC +3301340672,3301340927,PR +3301340928,3301343487,SC 3301343488,3301343743,US 3301343744,3301344511,SC 3301344512,3301344767,IN @@ -125017,8 +126589,8 @@ 3301351680,3301351935,US 3301351936,3301352703,SC 3301352704,3301352959,US -3301352960,3301353983,SC -3301353984,3301354239,US +3301352960,3301353727,SC +3301353728,3301354239,US 3301354240,3301355263,SC 3301355264,3301355519,US 3301355520,3301356799,SC @@ -125027,7 +126599,8 @@ 3301357824,3301358335,US 3301358336,3301359359,SC 3301359360,3301359615,US -3301359616,3301361407,SC +3301359616,3301361151,SC +3301361152,3301361407,AT 3301361408,3301361663,FR 3301361664,3301361919,DE 3301361920,3301362175,SC @@ -125042,15 +126615,15 @@ 3301365248,3301367551,SC 3301367552,3301367807,PR 3301367808,3301371391,SC -3301371392,3301371903,US -3301371904,3301373183,SC +3301371392,3301372159,US +3301372160,3301373183,SC 3301373184,3301373439,US -3301373440,3301375231,SC +3301373440,3301373695,SC +3301373696,3301373951,US +3301373952,3301375231,SC 3301375232,3301375487,US 3301375488,3301375743,SC -3301375744,3301375999,US -3301376000,3301376255,SC -3301376256,3301376511,US +3301375744,3301376511,US 3301376512,3301377535,SC 3301377536,3301378559,US 3301378560,3301379071,SC @@ -125058,9 +126631,7 @@ 3301379328,3301379583,SC 3301379584,3301379839,US 3301379840,3301380351,SC -3301380352,3301380863,US -3301380864,3301381119,SC -3301381120,3301382655,US +3301380352,3301382655,US 3301382656,3301382911,SC 3301382912,3301383423,US 3301383424,3301383679,SC @@ -125133,7 +126704,8 @@ 3301412864,3301413119,CA 3301413120,3301413375,SC 3301413376,3301416191,US -3301416192,3301416703,SC +3301416192,3301416447,SC +3301416448,3301416703,PR 3301416704,3301418239,US 3301418240,3301418495,SC 3301418496,3301419007,US @@ -125142,7 +126714,7 @@ 3301419776,3301420543,SC 3301420544,3301421311,US 3301421312,3301421567,HU -3301421568,3301421823,US +3301421568,3301421823,HK 3301421824,3301422847,SC 3301422848,3301423615,US 3301423616,3301423871,FR @@ -125161,9 +126733,7 @@ 3301428480,3301428735,SC 3301428736,3301430271,US 3301430272,3301430527,SC -3301430528,3301430783,US -3301430784,3301431039,SC -3301431040,3301432831,US +3301430528,3301432831,US 3301432832,3301433087,PR 3301433088,3301433343,SC 3301433344,3301433855,US @@ -125171,7 +126741,8 @@ 3301434112,3301435391,US 3301435392,3301435647,SC 3301435648,3301435903,NL -3301435904,3301436415,SC +3301435904,3301436159,SC +3301436160,3301436415,ES 3301436416,3301437183,US 3301437184,3301437439,SC 3301437440,3301437695,LU @@ -125375,14 +126946,19 @@ 3303537408,3304022271,TN 3304022272,3304022527,CF 3304022528,3304062975,TN -3304062976,3304066303,SC +3304062976,3304065279,SC +3304065280,3304065535,US +3304065536,3304066303,SC 3304066304,3304066559,US 3304066560,3304066815,CA 3304066816,3304067071,SC 3304067072,3304067327,CA 3304067328,3304071167,SC 3304071168,3304071423,US -3304071424,3304074239,SC +3304071424,3304073215,SC +3304073216,3304073471,GB +3304073472,3304073983,SC +3304073984,3304074239,ES 3304074240,3304074495,PT 3304074496,3304075519,SC 3304075520,3304075775,HU @@ -125390,7 +126966,8 @@ 3304076032,3304076287,AU 3304076288,3304076543,SC 3304076544,3304076799,BE -3304076800,3304077311,SC +3304076800,3304077055,LV +3304077056,3304077311,SC 3304077312,3304077567,DK 3304077568,3304077823,SC 3304077824,3304078079,FR @@ -125408,9 +126985,13 @@ 3304083712,3304083967,US 3304083968,3304084991,SC 3304084992,3304085503,US -3304085504,3304086527,SC +3304085504,3304086015,SC +3304086016,3304086271,US +3304086272,3304086527,SC 3304086528,3304086783,US -3304086784,3304089343,SC +3304086784,3304087295,SC +3304087296,3304087551,US +3304087552,3304089343,SC 3304089344,3304089599,US 3304089600,3304091135,SC 3304091136,3304091391,NO @@ -125432,8 +127013,8 @@ 3304099328,3304099583,CA 3304099584,3304099839,SC 3304099840,3304100095,CA -3304100096,3304100863,SC -3304100864,3304101119,US +3304100096,3304100607,SC +3304100608,3304101119,US 3304101120,3304102143,SC 3304102144,3304102399,US 3304102400,3304102655,SC @@ -125468,15 +127049,18 @@ 3304116736,3304116991,US 3304116992,3304118015,SC 3304118016,3304118271,US -3304118272,3304119039,SC -3304119040,3304119295,US -3304119296,3304119807,SC +3304118272,3304118527,SC +3304118528,3304118783,US +3304118784,3304119039,SC +3304119040,3304119551,US +3304119552,3304119807,SC 3304119808,3304120063,PR 3304120064,3304120575,SC 3304120576,3304120831,US 3304120832,3304122367,SC 3304122368,3304122623,GB -3304122624,3304125183,SC +3304122624,3304122879,NL +3304122880,3304125183,SC 3304125184,3304125439,AU 3304125440,3304125695,AT 3304125696,3304126719,SC @@ -125494,9 +127078,13 @@ 3304199424,3304199679,GB 3304199680,3304201471,SC 3304201472,3304201727,US -3304201728,3304204543,SC +3304201728,3304202751,SC +3304202752,3304203007,US +3304203008,3304204543,SC 3304204544,3304204799,US -3304204800,3304207871,SC +3304204800,3304205567,SC +3304205568,3304205823,US +3304205824,3304207871,SC 3304207872,3304208383,US 3304208384,3304209407,SC 3304209408,3304209663,US @@ -125548,7 +127136,9 @@ 3304237824,3304238079,US 3304238080,3304238591,SC 3304238592,3304239103,US -3304239104,3304240895,SC +3304239104,3304240383,SC +3304240384,3304240639,US +3304240640,3304240895,SC 3304240896,3304241151,US 3304241152,3304241663,SC 3304241664,3304241919,US @@ -125582,7 +127172,7 @@ 3304327424,3304327679,AT 3304327680,3304327935,SC 3304327936,3304328191,HK -3304328192,3304328447,SC +3304328192,3304328447,HU 3304328448,3304328703,LU 3304328704,3304329215,SC 3304329216,3304329471,PL @@ -125590,7 +127180,11 @@ 3304331008,3304331263,US 3304331264,3304332543,SC 3304332544,3304332799,US -3304332800,3304336127,SC +3304332800,3304333055,SC +3304333056,3304333311,PR +3304333312,3304333823,SC +3304333824,3304334079,US +3304334080,3304336127,SC 3304336128,3304336383,US 3304336384,3304337663,SC 3304337664,3304337919,US @@ -125606,7 +127200,9 @@ 3304343808,3304344063,DK 3304344064,3304344319,SC 3304344320,3304344575,LV -3304344576,3304345855,SC +3304344576,3304345343,SC +3304345344,3304345599,HK +3304345600,3304345855,SC 3304345856,3304346111,LU 3304346112,3304347135,SC 3304347136,3304347391,ES @@ -125616,8 +127212,8 @@ 3304349184,3304349439,US 3304349440,3304349695,PR 3304349696,3304350975,SC -3304350976,3304351231,US -3304351232,3304352511,SC +3304350976,3304351487,US +3304351488,3304352511,SC 3304352512,3304352767,US 3304352768,3304353023,SC 3304353024,3304353791,US @@ -125650,7 +127246,9 @@ 3304371200,3304371455,US 3304371456,3304371967,SC 3304371968,3304372223,US -3304372224,3304376063,SC +3304372224,3304373247,SC +3304373248,3304373503,US +3304373504,3304376063,SC 3304376064,3304376319,FR 3304376320,3304376575,SC 3304376576,3304376831,DK @@ -125678,11 +127276,11 @@ 3304400896,3304401919,SC 3304401920,3304402943,PR 3304402944,3304403967,US -3304403968,3304406015,SC -3304406016,3304407039,US +3304403968,3304404991,SC +3304404992,3304407039,US 3304407040,3304408063,SC -3304408064,3304413183,US -3304413184,3304416255,SC +3304408064,3304414207,US +3304414208,3304416255,SC 3304416256,3304421375,US 3304421376,3304424447,SC 3304424448,3304425471,US @@ -125759,27 +127357,20 @@ 3304781824,3304782847,AO 3304782848,3304783871,MU 3304783872,3304801023,ZA -3304801024,3304801535,GH -3304801536,3304801791,SC -3304801792,3304803839,GH -3304803840,3304804095,SC +3304801024,3304804095,GH 3304804096,3304806399,NG 3304806400,3304806655,ZA 3304806656,3304807167,SC 3304807168,3304807423,ZA 3304807424,3304807935,SC -3304807936,3304808447,ZA -3304808448,3304808703,SC -3304808704,3304808959,ZA +3304807936,3304808959,ZA 3304808960,3304809215,SC 3304809216,3304809471,ZA 3304809472,3304812543,KE 3304812544,3304812799,SC 3304812800,3304813055,ZA 3304813056,3304813567,SC -3304813568,3304813823,ZA -3304813824,3304814591,SC -3304814592,3304820735,ZA +3304813568,3304820735,ZA 3304820736,3304821759,KE 3304821760,3304822783,MU 3304822784,3304823807,BJ @@ -126272,13 +127863,9 @@ 3322694896,3322694911,GB 3322694912,3322695423,US 3322695424,3322695679,NL -3322695680,3322695783,US -3322695784,3322695791,CA -3322695792,3322695919,US +3322695680,3322695919,US 3322695920,3322695935,CA -3322695936,3322696263,US -3322696264,3322696271,RO -3322696272,3322697215,US +3322695936,3322697215,US 3322697216,3322697223,RO 3322697224,3322697295,US 3322697296,3322697303,MA @@ -126302,17 +127889,13 @@ 3322700096,3322700127,FR 3322700128,3322700287,US 3322700288,3322700543,NL -3322700544,3322705071,US -3322705072,3322705079,RO -3322705080,3322706575,US +3322700544,3322706575,US 3322706576,3322706591,CA 3322706592,3322706631,US 3322706632,3322706639,GB 3322706640,3322706651,US 3322706652,3322706655,CA -3322706656,3322707359,US -3322707360,3322707391,PK -3322707392,3322707743,US +3322706656,3322707743,US 3322707744,3322707751,CA 3322707752,3322765415,US 3322765416,3322765431,IN @@ -126526,7 +128109,10 @@ 3322962944,3322963455,NL 3322963456,3322964479,GB 3322964480,3322965247,NL -3322965248,3322969343,US +3322965248,3322965503,DE +3322965504,3322965759,US +3322965760,3322966015,NL +3322966016,3322969343,US 3322969344,3322970111,NL 3322970112,3323002879,CA 3323002880,3323013887,US @@ -126559,11 +128145,10 @@ 3323207680,3323215871,CA 3323215872,3323224063,US 3323224064,3323232255,NL -3323232256,3323240447,US -3323240448,3323240703,IN -3323240704,3323241215,US +3323232256,3323240959,US +3323240960,3323241215,CA 3323241216,3323241247,GB -3323241248,3323241279,TR +3323241248,3323241279,EE 3323241280,3323241311,US 3323241312,3323241343,GB 3323241344,3323241351,CA @@ -126579,9 +128164,7 @@ 3323241504,3323241511,US 3323241512,3323241519,CA 3323241520,3323241527,TR -3323241528,3323241535,CA -3323241536,3323241543,US -3323241544,3323241567,CA +3323241528,3323241567,CA 3323241568,3323241575,US 3323241576,3323241583,CA 3323241584,3323241591,CN @@ -126589,23 +128172,36 @@ 3323241608,3323241615,US 3323241616,3323241623,CA 3323241624,3323241631,BR -3323241632,3323241639,US +3323241632,3323241639,CA 3323241640,3323241647,GB -3323241648,3323241655,CA -3323241656,3323241663,US +3323241648,3323241663,CA 3323241664,3323241671,TR 3323241672,3323241679,PH 3323241680,3323241687,TR 3323241688,3323241695,CN -3323241696,3323241703,US +3323241696,3323241703,EE 3323241704,3323241711,CN 3323241712,3323241719,GB 3323241720,3323241727,SA -3323241728,3323242255,CA +3323241728,3323241799,CA +3323241800,3323241803,US +3323241804,3323241827,CA +3323241828,3323241831,US +3323241832,3323241847,CA +3323241848,3323241851,US +3323241852,3323241867,CA +3323241868,3323241871,US +3323241872,3323241931,CA +3323241932,3323241935,US +3323241936,3323241959,CA +3323241960,3323241963,US +3323241964,3323242255,CA 3323242256,3323242271,US 3323242272,3323242287,CA 3323242288,3323242303,US -3323242304,3323242367,CA +3323242304,3323242311,CA +3323242312,3323242319,US +3323242320,3323242367,CA 3323242368,3323242511,US 3323242512,3323242527,BD 3323242528,3323242575,CA @@ -126619,35 +128215,35 @@ 3323243064,3323243087,CA 3323243088,3323243095,IE 3323243096,3323243103,GB -3323243104,3323243119,CA +3323243104,3323243111,US +3323243112,3323243119,CA 3323243120,3323243127,US -3323243128,3323243135,CA -3323243136,3323243143,US -3323243144,3323243159,CA +3323243128,3323243159,CA 3323243160,3323243175,US 3323243176,3323243183,CA -3323243184,3323243199,US -3323243200,3323243207,CN -3323243208,3323243231,US -3323243232,3323243239,CA -3323243240,3323243255,US +3323243184,3323243207,US +3323243208,3323243215,CA +3323243216,3323243223,US +3323243224,3323243231,CA +3323243232,3323243255,US 3323243256,3323243263,CA -3323243264,3323243535,US +3323243264,3323243391,CN +3323243392,3323243455,US +3323243456,3323243503,CA +3323243504,3323243535,US 3323243536,3323243551,BD -3323243552,3323243615,US -3323243616,3323243647,CA -3323243648,3323243711,US +3323243552,3323243583,CA +3323243584,3323243615,US +3323243616,3323243663,CA +3323243664,3323243711,US 3323243712,3323243743,CA 3323243744,3323243791,US 3323243792,3323243799,CA 3323243800,3323243807,US -3323243808,3323243815,CA -3323243816,3323243823,US -3323243824,3323243903,CA -3323243904,3323243967,US -3323243968,3323244031,CA -3323244032,3323244095,IN -3323244096,3323244255,US +3323243808,3323243839,CA +3323243840,3323244159,US +3323244160,3323244175,CA +3323244176,3323244255,US 3323244256,3323244287,CA 3323244288,3323244319,US 3323244320,3323244327,IN @@ -126657,21 +128253,22 @@ 3323244488,3323244503,US 3323244504,3323244511,CA 3323244512,3323244527,US -3323244528,3323244687,CA -3323244688,3323244695,US -3323244696,3323244703,CA +3323244528,3323244579,CA +3323244580,3323244583,US +3323244584,3323244635,CA +3323244636,3323244639,US +3323244640,3323244703,CA 3323244704,3323244735,US 3323244736,3323244767,CA 3323244768,3323244783,US 3323244784,3323244799,CA 3323244800,3323244927,US 3323244928,3323245055,CA -3323245056,3323245207,US -3323245208,3323245215,CA -3323245216,3323245311,US -3323245312,3323245319,IN -3323245320,3323245327,CA -3323245328,3323245383,US +3323245056,3323245087,US +3323245088,3323245119,CA +3323245120,3323245247,US +3323245248,3323245255,CA +3323245256,3323245383,US 3323245384,3323245391,IN 3323245392,3323245399,GB 3323245400,3323245407,TR @@ -126680,18 +128277,16 @@ 3323245424,3323245455,CA 3323245456,3323245463,AZ 3323245464,3323245479,CA -3323245480,3323245487,AE +3323245480,3323245487,US 3323245488,3323245495,BE 3323245496,3323245535,US 3323245536,3323245551,SG 3323245552,3323245559,GB 3323245560,3323245567,CN -3323245568,3323245655,US -3323245656,3323245663,CA -3323245664,3323245855,US -3323245856,3323245951,CA -3323245952,3323245959,US -3323245960,3323245983,CA +3323245568,3323245823,US +3323245824,3323245951,CA +3323245952,3323245967,US +3323245968,3323245983,CA 3323245984,3323246015,US 3323246016,3323246079,CA 3323246080,3323246207,US @@ -126700,11 +128295,11 @@ 3323246464,3323246591,CN 3323246592,3323247359,US 3323247360,3323247423,CA -3323247424,3323247487,US -3323247488,3323247551,CA -3323247552,3323247575,US +3323247424,3323247575,US 3323247576,3323247583,CA -3323247584,3323270420,US +3323247584,3323248383,US +3323248384,3323248639,CA +3323248640,3323270420,US 3323270421,3323270421,CH 3323270422,3323339263,US 3323339776,3323340031,CA @@ -126802,8 +128397,7 @@ 3323678056,3323678059,MX 3323678060,3323678063,CA 3323678064,3323678079,GB -3323678080,3323678087,US -3323678088,3323678095,CA +3323678080,3323678095,CA 3323678096,3323678111,US 3323678112,3323678127,CA 3323678128,3323678143,GB @@ -126840,7 +128434,8 @@ 3323681360,3323681363,FR 3323681364,3323681399,CA 3323681400,3323681403,IT -3323681404,3323681415,CA +3323681404,3323681407,MX +3323681408,3323681415,CA 3323681416,3323681423,BR 3323681424,3323681439,CA 3323681440,3323681455,AE @@ -126873,9 +128468,9 @@ 3323682792,3323682831,CA 3323682832,3323682839,IN 3323682840,3323682843,BD -3323682844,3323682947,CA -3323682948,3323682951,US -3323682952,3323682955,CA +3323682844,3323682871,CA +3323682872,3323682875,US +3323682876,3323682955,CA 3323682956,3323682959,US 3323682960,3323682967,CA 3323682968,3323682971,US @@ -126898,26 +128493,35 @@ 3323683400,3323683403,BR 3323683404,3323683427,CA 3323683428,3323683431,IT -3323683432,3323683439,PL -3323683440,3323683447,CA +3323683432,3323683435,DE +3323683436,3323683447,CA 3323683448,3323683455,US 3323683456,3323683471,CA -3323683472,3323683479,US +3323683472,3323683479,MX 3323683480,3323683487,BR -3323683488,3323683535,CA +3323683488,3323683523,CA +3323683524,3323683527,DE +3323683528,3323683535,CA 3323683536,3323683551,AU 3323683552,3323683583,CA 3323683584,3323683591,PA 3323683592,3323683679,CA 3323683680,3323683683,FR -3323683684,3323683707,CA +3323683684,3323683687,BR +3323683688,3323683703,CA +3323683704,3323683707,CO 3323683708,3323683711,US 3323683712,3323683839,GP -3323683840,3323683871,CA +3323683840,3323683847,CA +3323683848,3323683851,IN +3323683852,3323683855,GB +3323683856,3323683871,CA 3323683872,3323683903,IL 3323683904,3323683935,CA 3323683936,3323683967,US -3323683968,3323684027,CA +3323683968,3323683983,CA +3323683984,3323683991,RO +3323683992,3323684027,CA 3323684028,3323684031,US 3323684032,3323684063,PE 3323684064,3323684223,CA @@ -126933,13 +128537,14 @@ 3323684388,3323684391,MX 3323684392,3323684395,CA 3323684396,3323684399,IN -3323684400,3323684415,CA -3323684416,3323684431,DE +3323684400,3323684431,CA 3323684432,3323684435,US 3323684436,3323684443,CA 3323684444,3323684447,IN -3323684448,3323684451,MA -3323684452,3323684463,CA +3323684448,3323684451,US +3323684452,3323684455,BR +3323684456,3323684459,PE +3323684460,3323684463,CA 3323684464,3323684479,US 3323684480,3323684511,CA 3323684512,3323684515,GB @@ -126947,29 +128552,28 @@ 3323684540,3323684559,US 3323684560,3323684615,CA 3323684616,3323684619,US -3323684620,3323684695,CA -3323684696,3323684703,US -3323684704,3323684735,CA +3323684620,3323684735,CA 3323684736,3323684739,IN 3323684740,3323684783,CA 3323684784,3323684799,CO -3323684800,3323684835,CA +3323684800,3323684831,CA +3323684832,3323684835,PE 3323684836,3323684839,MX 3323684840,3323684843,CA 3323684844,3323684847,US -3323684848,3323684883,CA +3323684848,3323684855,CA +3323684856,3323684863,US +3323684864,3323684883,CA 3323684884,3323684887,US 3323684888,3323684891,CA -3323684892,3323684895,GR +3323684892,3323684895,AR 3323684896,3323684951,CA 3323684952,3323684959,US 3323684960,3323684975,BZ 3323684976,3323684991,US 3323684992,3323685023,CA 3323685024,3323685039,RO -3323685040,3323685079,CA -3323685080,3323685083,IN -3323685084,3323685167,CA +3323685040,3323685167,CA 3323685168,3323685183,MX 3323685184,3323685215,CA 3323685216,3323685231,US @@ -126994,13 +128598,14 @@ 3323685408,3323685411,MX 3323685412,3323685415,CA 3323685416,3323685419,AR -3323685420,3323685551,CA +3323685420,3323685527,CA +3323685528,3323685535,GB +3323685536,3323685551,CA 3323685552,3323685555,BY 3323685556,3323685767,CA 3323685768,3323685775,BR 3323685776,3323685799,CA -3323685800,3323685807,US -3323685808,3323685823,ZA +3323685800,3323685823,US 3323685824,3323685831,BR 3323685832,3323685847,CA 3323685848,3323685855,DE @@ -127014,8 +128619,8 @@ 3323685920,3323685923,CA 3323685924,3323685927,BR 3323685928,3323685931,CA -3323685932,3323685935,US -3323685936,3323685943,JP +3323685932,3323685935,PE +3323685936,3323685943,CA 3323685944,3323685951,NL 3323685952,3323686047,CA 3323686048,3323686051,US @@ -127034,35 +128639,41 @@ 3323686264,3323686271,US 3323686272,3323686287,CA 3323686288,3323686303,US -3323686304,3323686335,IT -3323686336,3323686367,CA +3323686304,3323686367,CA 3323686368,3323686371,IN 3323686372,3323686383,CA 3323686384,3323686391,US 3323686392,3323686439,CA 3323686440,3323686447,BR -3323686448,3323686599,CA +3323686448,3323686591,CA +3323686592,3323686595,FR +3323686596,3323686599,CA 3323686600,3323686607,BR 3323686608,3323686623,CA 3323686624,3323686631,NL 3323686632,3323686639,BR 3323686640,3323686655,US 3323686656,3323686659,PE -3323686660,3323686667,CA +3323686660,3323686663,US +3323686664,3323686667,CA 3323686668,3323686671,FR 3323686672,3323686683,CA 3323686684,3323686687,IN -3323686688,3323686783,CA +3323686688,3323686731,CA +3323686732,3323686735,US +3323686736,3323686783,CA 3323686784,3323686791,BR 3323686792,3323686807,CA -3323686808,3323686815,GB +3323686808,3323686811,CR +3323686812,3323686815,PE 3323686816,3323686823,CA 3323686824,3323686827,US 3323686828,3323686847,CA 3323686848,3323686851,US 3323686852,3323686879,CA 3323686880,3323686887,US -3323686888,3323686911,CA +3323686888,3323686895,MX +3323686896,3323686911,CA 3323686912,3323686943,BR 3323686944,3323686975,IN 3323686976,3323687031,CA @@ -127086,29 +128697,35 @@ 3323687280,3323687287,US 3323687288,3323687427,CA 3323687428,3323687431,BZ -3323687432,3323687451,CA -3323687452,3323687455,GB -3323687456,3323687567,CA +3323687432,3323687567,CA 3323687568,3323687571,PL 3323687572,3323687575,CA 3323687576,3323687583,ES 3323687584,3323687591,CA -3323687592,3323687599,US -3323687600,3323687711,CA +3323687592,3323687595,VE +3323687596,3323687711,CA 3323687712,3323687715,US 3323687716,3323687719,CA 3323687720,3323687727,US -3323687728,3323687815,CA +3323687728,3323687731,VE +3323687732,3323687735,AE +3323687736,3323687743,CA +3323687744,3323687747,ES +3323687748,3323687815,CA 3323687816,3323687819,US 3323687820,3323687855,CA 3323687856,3323687863,US -3323687864,3323687903,CA +3323687864,3323687871,CA +3323687872,3323687887,PK +3323687888,3323687891,BR +3323687892,3323687895,CA +3323687896,3323687903,IN 3323687904,3323687911,BR 3323687912,3323687915,CA 3323687916,3323687919,US 3323687920,3323687923,CA 3323687924,3323687927,VN -3323687928,3323687935,CA +3323687928,3323687935,BR 3323687936,3323687999,US 3323688000,3323688051,CA 3323688052,3323688055,MX @@ -127116,8 +128733,8 @@ 3323688060,3323688063,GB 3323688064,3323688135,CA 3323688136,3323688143,US -3323688144,3323688167,CA -3323688168,3323688175,BR +3323688144,3323688163,CA +3323688164,3323688175,BR 3323688176,3323688207,CA 3323688208,3323688215,AR 3323688216,3323688255,CA @@ -127156,9 +128773,7 @@ 3323688856,3323688863,CL 3323688864,3323688943,CA 3323688944,3323688947,AU -3323688948,3323689043,CA -3323689044,3323689047,EC -3323689048,3323689055,CA +3323688948,3323689055,CA 3323689056,3323689059,FR 3323689060,3323689071,CA 3323689072,3323689079,ID @@ -127177,7 +128792,7 @@ 3323689368,3323689383,CA 3323689384,3323689391,BR 3323689392,3323689399,CA -3323689400,3323689403,DE +3323689400,3323689403,MX 3323689404,3323689407,BR 3323689408,3323689427,CA 3323689428,3323689431,EC @@ -127189,28 +128804,32 @@ 3323689520,3323689527,ES 3323689528,3323689559,CA 3323689560,3323689583,US -3323689584,3323689599,CA -3323689600,3323689663,US -3323689664,3323689715,CA +3323689584,3323689595,CA +3323689596,3323689663,US +3323689664,3323689711,CA +3323689712,3323689715,BR 3323689716,3323689719,US 3323689720,3323689807,CA 3323689808,3323689823,US 3323689824,3323689863,CA 3323689864,3323689871,PE 3323689872,3323689879,IT -3323689880,3323689927,CA +3323689880,3323689903,CA +3323689904,3323689911,BR +3323689912,3323689927,CA 3323689928,3323689935,US 3323689936,3323689983,CA 3323689984,3323690015,RS 3323690016,3323690095,CA 3323690096,3323690111,PK -3323690112,3323690199,CA +3323690112,3323690143,CO +3323690144,3323690199,CA 3323690200,3323690207,US 3323690208,3323690223,CA 3323690224,3323690235,US 3323690236,3323690351,CA 3323690352,3323690359,AE -3323690360,3323690363,ID +3323690360,3323690363,US 3323690364,3323690463,CA 3323690464,3323690495,PE 3323690496,3323741439,US @@ -127803,13 +129422,16 @@ 3324824576,3324824831,DE 3324824832,3324937087,US 3324937088,3324937095,BD -3324937096,3324937999,US +3324937096,3324937103,KH +3324937104,3324937999,US 3324938000,3324938007,PK 3324938008,3324938159,US 3324938160,3324938167,GB 3324938168,3324939415,US 3324939416,3324939423,RO -3324939424,3324939735,US +3324939424,3324939455,US +3324939456,3324939519,IL +3324939520,3324939735,US 3324939736,3324939739,CA 3324939740,3324942855,US 3324942856,3324942863,RO @@ -127817,9 +129439,7 @@ 3324943048,3324943055,CA 3324943056,3324943215,US 3324943216,3324943231,GB -3324943232,3324963535,US -3324963536,3324963543,CA -3324963544,3324963579,US +3324943232,3324963579,US 3324963580,3324963583,RO 3324963584,3324963839,US 3324963840,3324963903,NL @@ -127871,20 +129491,22 @@ 3325198560,3325198575,PA 3325198576,3325198579,CA 3325198580,3325198583,BR -3325198584,3325198587,ES +3325198584,3325198587,CA 3325198588,3325198591,US 3325198592,3325198619,CA 3325198620,3325198623,AR 3325198624,3325198627,ES 3325198628,3325198639,CA -3325198640,3325198643,IN -3325198644,3325198647,NL +3325198640,3325198643,BR +3325198644,3325198647,BD 3325198648,3325198655,CA 3325198656,3325198659,PE 3325198660,3325198695,CA 3325198696,3325198703,IL 3325198704,3325198719,US -3325198720,3325198751,CA +3325198720,3325198727,CA +3325198728,3325198735,FR +3325198736,3325198751,CA 3325198752,3325198755,LK 3325198756,3325198759,US 3325198760,3325198779,CA @@ -127900,16 +129522,15 @@ 3325198896,3325198911,BE 3325198912,3325198943,NP 3325198944,3325198947,AU -3325198948,3325198975,CA -3325198976,3325199039,FR +3325198948,3325198967,CA +3325198968,3325198975,US +3325198976,3325199039,CA 3325199040,3325199043,US 3325199044,3325199055,CA 3325199056,3325199063,US 3325199064,3325199071,CA 3325199072,3325199079,US -3325199080,3325199103,CA -3325199104,3325199119,DE -3325199120,3325199143,CA +3325199080,3325199143,CA 3325199144,3325199147,US 3325199148,3325199151,GT 3325199152,3325199255,CA @@ -127928,8 +129549,7 @@ 3325199492,3325199495,BR 3325199496,3325199559,CA 3325199560,3325199567,US -3325199568,3325199583,BR -3325199584,3325199615,CA +3325199568,3325199615,CA 3325199616,3325199619,BR 3325199620,3325199623,CA 3325199624,3325199627,BE @@ -127963,28 +129583,40 @@ 3325200128,3325200191,BD 3325200192,3325200239,CA 3325200240,3325200255,US -3325200256,3325200279,CA +3325200256,3325200259,PE +3325200260,3325200279,CA 3325200280,3325200287,NL 3325200288,3325200291,CA 3325200292,3325200295,FR -3325200296,3325200311,CA +3325200296,3325200303,IN +3325200304,3325200311,CA 3325200312,3325200315,IN 3325200316,3325200323,CA 3325200324,3325200327,IL -3325200328,3325200455,CA +3325200328,3325200447,CA +3325200448,3325200451,AR +3325200452,3325200455,CA 3325200456,3325200459,US 3325200460,3325200463,CA 3325200464,3325200471,US -3325200472,3325200567,CA +3325200472,3325200527,CA +3325200528,3325200543,MX +3325200544,3325200567,CA 3325200568,3325200571,US 3325200572,3325200575,UA 3325200576,3325200583,CA 3325200584,3325200591,IN -3325200592,3325200727,CA +3325200592,3325200595,CA +3325200596,3325200599,BR +3325200600,3325200695,CA +3325200696,3325200699,BD +3325200700,3325200727,CA 3325200728,3325200731,US 3325200732,3325200739,CA 3325200740,3325200747,US -3325200748,3325200767,CA +3325200748,3325200751,CA +3325200752,3325200759,GB +3325200760,3325200767,CA 3325200768,3325200783,US 3325200784,3325200807,CA 3325200808,3325200811,TR @@ -128004,17 +129636,18 @@ 3325201016,3325201039,CA 3325201040,3325201047,BR 3325201048,3325201055,US -3325201056,3325201059,CA -3325201060,3325201063,RO -3325201064,3325201071,CA +3325201056,3325201071,CA 3325201072,3325201075,US -3325201076,3325201103,CA +3325201076,3325201087,CA +3325201088,3325201103,ID 3325201104,3325201111,US 3325201112,3325201115,CA 3325201116,3325201119,IN 3325201120,3325201163,CA 3325201164,3325201167,US -3325201168,3325201207,CA +3325201168,3325201187,CA +3325201188,3325201191,BR +3325201192,3325201207,CA 3325201208,3325201215,US 3325201216,3325201247,CA 3325201248,3325201255,CL @@ -128070,8 +129703,7 @@ 3325206429,3325206429,US 3325206430,3325206531,CA 3325206532,3325206535,CO -3325206536,3325206543,CA -3325206544,3325206551,DO +3325206536,3325206551,CA 3325206552,3325206555,US 3325206556,3325206559,CZ 3325206560,3325206591,IN @@ -128079,7 +129711,8 @@ 3325206624,3325206625,RO 3325206626,3325206626,CA 3325206627,3325206627,RO -3325206628,3325206639,CA +3325206628,3325206635,CA +3325206636,3325206639,ES 3325206640,3325206671,US 3325206672,3325206679,BR 3325206680,3325206683,CL @@ -128097,15 +129730,15 @@ 3325206916,3325206919,US 3325206920,3325206935,CA 3325206936,3325206943,HR -3325206944,3325207047,CA -3325207048,3325207051,BR +3325206944,3325207023,CA +3325207024,3325207039,US +3325207040,3325207043,CA +3325207044,3325207051,BR 3325207052,3325207055,US 3325207056,3325207059,GB 3325207060,3325207071,CA 3325207072,3325207103,MX -3325207104,3325207115,CA -3325207116,3325207119,US -3325207120,3325207131,CA +3325207104,3325207131,CA 3325207132,3325207135,US 3325207136,3325207167,BD 3325207168,3325207283,CA @@ -128123,7 +129756,9 @@ 3325207700,3325207703,LU 3325207704,3325207775,CA 3325207776,3325207783,US -3325207784,3325207807,CA +3325207784,3325207791,CA +3325207792,3325207795,GB +3325207796,3325207807,CA 3325207808,3325207935,US 3325207936,3325208063,CA 3325208064,3325208095,BS @@ -128138,7 +129773,7 @@ 3325208328,3325208363,CA 3325208364,3325208367,PA 3325208368,3325208375,US -3325208376,3325208383,CA +3325208376,3325208383,BR 3325208384,3325208391,US 3325208392,3325208403,CA 3325208404,3325208415,US @@ -128148,22 +129783,26 @@ 3325208496,3325208499,IN 3325208500,3325208543,CA 3325208544,3325208547,US -3325208548,3325208735,CA +3325208548,3325208643,CA +3325208644,3325208647,IN +3325208648,3325208735,CA 3325208736,3325208743,HK 3325208744,3325208747,CA 3325208748,3325208751,CZ 3325208752,3325208767,CA 3325208768,3325208783,US -3325208784,3325208787,CA -3325208788,3325208799,US +3325208784,3325208791,CA +3325208792,3325208799,US 3325208800,3325208827,CA 3325208828,3325208831,EG -3325208832,3325208939,CA +3325208832,3325208835,CO +3325208836,3325208939,CA 3325208940,3325208943,AU 3325208944,3325208947,BR 3325208948,3325208999,CA 3325209000,3325209003,AU -3325209004,3325209023,CA +3325209004,3325209007,BR +3325209008,3325209023,CA 3325209024,3325209055,US 3325209056,3325209083,CA 3325209084,3325209087,US @@ -128195,7 +129834,7 @@ 3325209448,3325209451,MT 3325209452,3325209475,CA 3325209476,3325209479,US -3325209480,3325209483,IN +3325209480,3325209483,GB 3325209484,3325209543,CA 3325209544,3325209551,US 3325209552,3325209567,CA @@ -128211,11 +129850,13 @@ 3325209696,3325209711,SN 3325209712,3325209727,CA 3325209728,3325209759,IE -3325209760,3325209767,CA +3325209760,3325209767,GB 3325209768,3325209775,US 3325209776,3325209779,CA 3325209780,3325209783,ID -3325209784,3325209915,CA +3325209784,3325209879,CA +3325209880,3325209887,BD +3325209888,3325209915,CA 3325209916,3325209919,FR 3325209920,3325209939,CA 3325209940,3325209943,US @@ -128242,7 +129883,8 @@ 3325210368,3325210399,CA 3325210400,3325210431,SE 3325210432,3325210435,IN -3325210436,3325210447,CA +3325210436,3325210439,CA +3325210440,3325210447,PA 3325210448,3325210451,FR 3325210452,3325210455,ES 3325210456,3325210511,CA @@ -128252,17 +129894,25 @@ 3325210636,3325210639,FR 3325210640,3325210643,BR 3325210644,3325210647,US -3325210648,3325210671,CA -3325210672,3325210687,BR +3325210648,3325210663,CA +3325210664,3325210687,BR 3325210688,3325210703,CA 3325210704,3325210707,US 3325210708,3325210711,CA 3325210712,3325210719,IN 3325210720,3325210751,US -3325210752,3325210791,CA +3325210752,3325210755,CA +3325210756,3325210759,PH +3325210760,3325210767,BR +3325210768,3325210771,AR +3325210772,3325210775,CA +3325210776,3325210779,US +3325210780,3325210787,CA +3325210788,3325210791,BR 3325210792,3325210799,US 3325210800,3325210815,AE -3325210816,3325210847,CA +3325210816,3325210823,BR +3325210824,3325210847,CA 3325210848,3325210851,US 3325210852,3325210863,CA 3325210864,3325210879,US @@ -128270,22 +129920,22 @@ 3325210952,3325210955,BR 3325210956,3325210959,VN 3325210960,3325210975,IN -3325210976,3325211087,CA +3325210976,3325211071,CA +3325211072,3325211087,BD 3325211088,3325211091,US 3325211092,3325211095,CA 3325211096,3325211103,US 3325211104,3325211115,CA 3325211116,3325211119,BR 3325211120,3325211127,US -3325211128,3325211135,CA -3325211136,3325211143,ID -3325211144,3325211151,CA +3325211128,3325211151,CA 3325211152,3325211155,IN 3325211156,3325211175,CA 3325211176,3325211183,US 3325211184,3325211235,CA 3325211236,3325211239,FR -3325211240,3325211295,CA +3325211240,3325211279,CA +3325211280,3325211295,CN 3325211296,3325211299,US 3325211300,3325211303,CA 3325211304,3325211311,PT @@ -128313,12 +129963,14 @@ 3325211896,3325211967,CA 3325211968,3325211999,ES 3325212000,3325212007,US -3325212008,3325212087,CA +3325212008,3325212063,CA +3325212064,3325212071,US +3325212072,3325212087,CA 3325212088,3325212091,BZ 3325212092,3325212095,US 3325212096,3325212119,CA 3325212120,3325212127,US -3325212128,3325212143,IN +3325212128,3325212143,CA 3325212144,3325212151,US 3325212152,3325212155,MX 3325212156,3325212167,CA @@ -128330,13 +129982,17 @@ 3325212216,3325212223,HR 3325212224,3325212295,CA 3325212296,3325212303,IN -3325212304,3325212495,CA +3325212304,3325212407,CA +3325212408,3325212411,PE +3325212412,3325212495,CA 3325212496,3325212503,FR 3325212504,3325212511,HU 3325212512,3325212515,CY 3325212516,3325212559,CA 3325212560,3325212575,BR -3325212576,3325212587,CA +3325212576,3325212579,PE +3325212580,3325212583,CA +3325212584,3325212587,HN 3325212588,3325212591,BR 3325212592,3325212611,CA 3325212612,3325212615,BR @@ -128345,8 +130001,7 @@ 3325212656,3325212719,CA 3325212720,3325212727,ID 3325212728,3325212731,RO -3325212732,3325212735,AE -3325212736,3325212771,CA +3325212732,3325212771,CA 3325212772,3325212775,US 3325212776,3325212927,CA 3325212928,3325212943,LK @@ -128408,7 +130063,9 @@ 3325214192,3325214255,CA 3325214256,3325214259,SA 3325214260,3325214263,US -3325214264,3325214399,CA +3325214264,3325214375,CA +3325214376,3325214383,US +3325214384,3325214399,CA 3325214400,3325214403,PL 3325214404,3325214463,CA 3325214464,3325214479,AU @@ -128418,7 +130075,9 @@ 3325214584,3325214591,US 3325214592,3325214623,CA 3325214624,3325214639,DE -3325214640,3325214703,CA +3325214640,3325214667,CA +3325214668,3325214671,US +3325214672,3325214703,CA 3325214704,3325214719,AU 3325214720,3325214735,CA 3325214736,3325214739,US @@ -128426,14 +130085,13 @@ 3325214784,3325214791,US 3325214792,3325214815,CA 3325214816,3325214819,US -3325214820,3325214823,PE +3325214820,3325214823,IN 3325214824,3325214831,BR -3325214832,3325214847,EG -3325214848,3325215055,CA +3325214832,3325214999,CA +3325215000,3325215007,BZ +3325215008,3325215055,CA 3325215056,3325215059,IT -3325215060,3325215079,CA -3325215080,3325215087,BR -3325215088,3325215131,CA +3325215060,3325215131,CA 3325215132,3325215135,BZ 3325215136,3325215175,CA 3325215176,3325215183,VI @@ -128453,7 +130111,8 @@ 3325215460,3325215467,CA 3325215468,3325215471,BR 3325215472,3325215475,ES -3325215476,3325215495,CA +3325215476,3325215479,PE +3325215480,3325215495,CA 3325215496,3325215503,BR 3325215504,3325215611,CA 3325215612,3325215615,BR @@ -128469,7 +130128,8 @@ 3325215760,3325215767,BR 3325215768,3325215807,CA 3325215808,3325215839,US -3325215840,3325215871,CA +3325215840,3325215863,CA +3325215864,3325215871,BR 3325215872,3325215903,US 3325215904,3325215911,DE 3325215912,3325215915,IN @@ -128496,9 +130156,9 @@ 3325216080,3325216095,BR 3325216096,3325216115,CA 3325216116,3325216119,US -3325216120,3325216239,CA -3325216240,3325216243,BR -3325216244,3325216247,CA +3325216120,3325216127,CA +3325216128,3325216159,MX +3325216160,3325216247,CA 3325216248,3325216251,BR 3325216252,3325216319,CA 3325216320,3325216327,US @@ -128537,23 +130197,30 @@ 3325217404,3325217407,FR 3325217408,3325217471,CA 3325217472,3325217503,IE -3325217504,3325217651,CA +3325217504,3325217527,CA +3325217528,3325217531,HK +3325217532,3325217651,CA 3325217652,3325217655,AE 3325217656,3325217663,CA 3325217664,3325217667,CO 3325217668,3325217695,CA 3325217696,3325217699,US 3325217700,3325217703,BR -3325217704,3325217711,DE +3325217704,3325217707,US +3325217708,3325217711,CA 3325217712,3325217715,US -3325217716,3325217835,CA +3325217716,3325217823,CA +3325217824,3325217831,BR +3325217832,3325217835,CA 3325217836,3325217839,CL 3325217840,3325217855,CA 3325217856,3325217887,BR 3325217888,3325217939,CA 3325217940,3325217943,US 3325217944,3325217951,CO -3325217952,3325217971,CA +3325217952,3325217959,CA +3325217960,3325217963,US +3325217964,3325217971,CA 3325217972,3325217975,US 3325217976,3325217983,CA 3325217984,3325217987,US @@ -128579,7 +130246,8 @@ 3325218488,3325218491,US 3325218492,3325218519,CA 3325218520,3325218523,US -3325218524,3325218531,CA +3325218524,3325218527,CA +3325218528,3325218531,BR 3325218532,3325218535,US 3325218536,3325218559,CA 3325218560,3325218567,US @@ -128591,7 +130259,9 @@ 3325218664,3325218667,US 3325218668,3325218671,CA 3325218672,3325218687,IT -3325218688,3325218783,CA +3325218688,3325218703,CA +3325218704,3325218719,US +3325218720,3325218783,CA 3325218784,3325218815,AU 3325218816,3325219079,CA 3325219080,3325219083,BR @@ -128607,9 +130277,13 @@ 3325219420,3325219423,BR 3325219424,3325219455,CA 3325219456,3325219459,US -3325219460,3325219467,CA -3325219468,3325219475,US -3325219476,3325219503,CA +3325219460,3325219463,BR +3325219464,3325219467,CA +3325219468,3325219471,DE +3325219472,3325219475,US +3325219476,3325219479,CA +3325219480,3325219483,IN +3325219484,3325219503,CA 3325219504,3325219511,VG 3325219512,3325219531,CA 3325219532,3325219535,BR @@ -128641,13 +130315,17 @@ 3325220000,3325220011,CA 3325220012,3325220015,AU 3325220016,3325220023,MX -3325220024,3325220039,CA +3325220024,3325220027,CA +3325220028,3325220031,US +3325220032,3325220039,CA 3325220040,3325220043,US 3325220044,3325220047,BR 3325220048,3325220051,AU 3325220052,3325220055,CA 3325220056,3325220063,GB -3325220064,3325220295,CA +3325220064,3325220107,CA +3325220108,3325220111,PE +3325220112,3325220295,CA 3325220296,3325220303,FR 3325220304,3325220407,CA 3325220408,3325220411,US @@ -128689,19 +130367,25 @@ 3325221452,3325221455,US 3325221456,3325221467,CA 3325221468,3325221471,BR -3325221472,3325221567,CA +3325221472,3325221503,CA +3325221504,3325221535,PT +3325221536,3325221551,CA +3325221552,3325221555,PE +3325221556,3325221567,CA 3325221568,3325221575,AU 3325221576,3325221583,CA 3325221584,3325221599,US 3325221600,3325221615,CA 3325221616,3325221623,GB -3325221624,3325221727,CA +3325221624,3325221627,MX +3325221628,3325221727,CA 3325221728,3325221731,US 3325221732,3325221739,CA 3325221740,3325221743,BR 3325221744,3325221751,CA 3325221752,3325221755,IN -3325221756,3325221779,CA +3325221756,3325221759,PE +3325221760,3325221779,CA 3325221780,3325221783,US 3325221784,3325221787,BR 3325221788,3325221791,VN @@ -128726,12 +130410,10 @@ 3325222208,3325222351,CA 3325222352,3325222359,US 3325222360,3325222391,CA -3325222392,3325222395,BR +3325222392,3325222395,TR 3325222396,3325222399,FR 3325222400,3325222463,US -3325222464,3325222479,CA -3325222480,3325222483,US -3325222484,3325222567,CA +3325222464,3325222567,CA 3325222568,3325222571,US 3325222572,3325222575,LK 3325222576,3325222607,CA @@ -128766,7 +130448,9 @@ 3325223032,3325223039,CA 3325223040,3325223043,AR 3325223044,3325223047,US -3325223048,3325223079,CA +3325223048,3325223059,CA +3325223060,3325223063,PE +3325223064,3325223079,CA 3325223080,3325223083,US 3325223084,3325223087,BY 3325223088,3325223095,NL @@ -128790,7 +130474,9 @@ 3325223400,3325223407,US 3325223408,3325223427,CA 3325223428,3325223431,US -3325223432,3325223463,CA +3325223432,3325223435,CA +3325223436,3325223439,MX +3325223440,3325223463,CA 3325223464,3325223471,US 3325223472,3325223535,CA 3325223536,3325223551,AT @@ -128799,14 +130485,16 @@ 3325223620,3325223631,BR 3325223632,3325223643,CA 3325223644,3325223647,CZ -3325223648,3325223663,DE +3325223648,3325223663,KN 3325223664,3325223723,CA 3325223724,3325223727,US 3325223728,3325223795,CA 3325223796,3325223799,US 3325223800,3325223807,CA 3325223808,3325223811,HK -3325223812,3325223847,CA +3325223812,3325223839,CA +3325223840,3325223843,PE +3325223844,3325223847,CA 3325223848,3325223855,MX 3325223856,3325223871,AU 3325223872,3325223907,CA @@ -128865,9 +130553,12 @@ 3325224880,3325224895,US 3325224896,3325224919,CA 3325224920,3325224927,DJ -3325224928,3325224951,CA +3325224928,3325224943,CA +3325224944,3325224947,DE +3325224948,3325224951,CA 3325224952,3325224955,GB -3325224956,3325225095,CA +3325224956,3325225087,CA +3325225088,3325225095,US 3325225096,3325225103,IN 3325225104,3325225135,CA 3325225136,3325225139,US @@ -128889,8 +130580,7 @@ 3325225416,3325225419,AU 3325225420,3325225439,CA 3325225440,3325225455,HK -3325225456,3325225459,CA -3325225460,3325225463,US +3325225456,3325225463,US 3325225464,3325225467,BR 3325225468,3325225483,CA 3325225484,3325225487,CL @@ -128919,7 +130609,10 @@ 3325225944,3325225951,PL 3325225952,3325225967,MX 3325225968,3325225983,US -3325225984,3325226027,CA +3325225984,3325226003,CA +3325226004,3325226007,MX +3325226008,3325226023,CA +3325226024,3325226027,FR 3325226028,3325226031,BR 3325226032,3325226039,HK 3325226040,3325226071,CA @@ -128947,16 +130640,16 @@ 3325226348,3325226435,CA 3325226436,3325226439,MA 3325226440,3325226443,VN -3325226444,3325226455,CA +3325226444,3325226447,CA +3325226448,3325226451,LT +3325226452,3325226455,CA 3325226456,3325226463,IN 3325226464,3325226495,CA 3325226496,3325227007,US 3325227008,3325227039,CA 3325227040,3325227071,BR 3325227072,3325227087,US -3325227088,3325227099,CA -3325227100,3325227103,US -3325227104,3325227107,CA +3325227088,3325227107,CA 3325227108,3325227111,AR 3325227112,3325227119,US 3325227120,3325227223,CA @@ -128975,7 +130668,8 @@ 3325227400,3325227403,LK 3325227404,3325227455,CA 3325227456,3325227471,US -3325227472,3325227487,CA +3325227472,3325227483,CA +3325227484,3325227487,IT 3325227488,3325227503,RO 3325227504,3325227519,CA 3325227520,3325227527,VG @@ -128994,25 +130688,21 @@ 3325227616,3325227627,CA 3325227628,3325227631,BZ 3325227632,3325227639,BR -3325227640,3325227775,CA -3325227776,3325227779,US -3325227780,3325227791,CA +3325227640,3325227791,CA 3325227792,3325227799,US 3325227800,3325227871,CA 3325227872,3325227875,BR 3325227876,3325227879,US -3325227880,3325228063,CA -3325228064,3325228079,US -3325228080,3325228095,CA -3325228096,3325228159,US +3325227880,3325227999,CA +3325228000,3325228015,IN +3325228016,3325228063,CA +3325228064,3325228159,US 3325228160,3325228175,AE 3325228176,3325228255,CA 3325228256,3325228263,US 3325228264,3325228287,CA 3325228288,3325228415,US -3325228416,3325228551,CA -3325228552,3325228555,PK -3325228556,3325228615,CA +3325228416,3325228615,CA 3325228616,3325228623,US 3325228624,3325228675,CA 3325228676,3325228683,US @@ -129039,8 +130729,8 @@ 3325229084,3325229087,US 3325229088,3325229175,CA 3325229176,3325229183,IN -3325229184,3325229251,US -3325229252,3325229255,CA +3325229184,3325229247,US +3325229248,3325229255,CA 3325229256,3325229263,BR 3325229264,3325229279,CA 3325229280,3325229295,US @@ -129067,7 +130757,9 @@ 3325229592,3325229599,US 3325229600,3325229615,CA 3325229616,3325229619,MX -3325229620,3325229647,CA +3325229620,3325229627,CA +3325229628,3325229631,US +3325229632,3325229647,CA 3325229648,3325229663,FR 3325229664,3325229695,MX 3325229696,3325229747,CA @@ -129087,13 +130779,11 @@ 3325229980,3325229983,BR 3325229984,3325229991,CA 3325229992,3325229999,IN -3325230000,3325230007,CA -3325230008,3325230011,NL -3325230012,3325230047,CA +3325230000,3325230047,CA 3325230048,3325230055,AE 3325230056,3325230059,CA -3325230060,3325230075,US -3325230076,3325230079,CA +3325230060,3325230071,US +3325230072,3325230079,CA 3325230080,3325230095,US 3325230096,3325230103,CA 3325230104,3325230111,US @@ -129113,14 +130803,14 @@ 3325230512,3325230527,CA 3325230528,3325230543,MU 3325230544,3325230559,US -3325230560,3325230583,CA -3325230584,3325230591,SN -3325230592,3325230715,CA +3325230560,3325230715,CA 3325230716,3325230719,AR 3325230720,3325230751,US 3325230752,3325230779,CA 3325230780,3325230783,BR -3325230784,3325230983,CA +3325230784,3325230815,CA +3325230816,3325230847,GB +3325230848,3325230983,CA 3325230984,3325230991,US 3325230992,3325231007,FR 3325231008,3325231071,CA @@ -129161,7 +130851,9 @@ 3325304320,3325304575,US 3325304576,3325304831,AS 3325304832,3325305087,CA -3325305088,3325307903,US +3325305088,3325306111,US +3325306112,3325306367,BR +3325306368,3325307903,US 3325307904,3325308927,GB 3325308928,3325313023,CA 3325313024,3325323687,US @@ -129186,8 +130878,8 @@ 3325452800,3325453311,ZA 3325453312,3325454335,CA 3325454336,3325463807,US -3325463808,3325464319,ZA -3325464320,3325465087,NA +3325463808,3325464063,ZA +3325464064,3325465087,NA 3325465088,3325466623,ZA 3325466624,3325467135,US 3325467136,3325469695,ZA @@ -129589,9 +131281,7 @@ 3331362816,3331365199,CA 3331365200,3331365207,GB 3331365208,3331366911,CA -3331366912,3331371007,US -3331371008,3331371071,NZ -3331371072,3331371327,US +3331366912,3331371327,US 3331371328,3331371343,SE 3331371344,3331372287,US 3331372288,3331372319,FR @@ -129659,20 +131349,27 @@ 3331983104,3331983359,CA 3331983360,3331988479,US 3331988480,3331989503,CA -3331989504,3332002063,US -3332002064,3332002111,CA -3332002112,3332002215,US +3331989504,3332001791,US +3332001792,3332002047,CA +3332002048,3332002063,US +3332002064,3332002071,CA +3332002072,3332002079,US +3332002080,3332002111,CA +3332002112,3332002143,US +3332002144,3332002159,CA +3332002160,3332002215,US 3332002216,3332002223,CA -3332002224,3332002303,US -3332002304,3332002431,CA -3332002432,3332002495,US -3332002496,3332002559,CA -3332002560,3332003711,US +3332002224,3332002367,US +3332002368,3332002431,CA +3332002432,3332002559,US +3332002560,3332002815,IN +3332002816,3332003711,US 3332003712,3332003839,IT 3332003840,3332004607,CA 3332004608,3332004671,US 3332004672,3332004863,CA -3332004864,3332005631,US +3332004864,3332005375,US +3332005376,3332005631,IN 3332005632,3332005632,CA 3332005633,3332005886,US 3332005887,3332005887,CA @@ -130118,53 +131815,55 @@ 3337961496,3337961519,US 3337961520,3337961527,RO 3337961528,3337961535,CA -3337961536,3337961543,AZ -3337961544,3337961551,CA -3337961552,3337961559,KZ -3337961560,3337961567,ID -3337961568,3337961575,PK -3337961576,3337961583,AZ -3337961584,3337961591,US -3337961592,3337961599,CA +3337961536,3337961599,US 3337961600,3337961615,RO 3337961616,3337961623,CA 3337961624,3337961631,US 3337961632,3337961663,GB -3337961664,3337961687,CA -3337961688,3337961695,US -3337961696,3337961983,CA -3337961984,3337961991,US -3337961992,3337962007,CA +3337961664,3337961679,CA +3337961680,3337961695,US +3337961696,3337961711,CA +3337961712,3337961715,US +3337961716,3337961743,CA +3337961744,3337961747,US +3337961748,3337961755,CA +3337961756,3337961759,US +3337961760,3337961867,CA +3337961868,3337961871,US +3337961872,3337961895,CA +3337961896,3337961899,US +3337961900,3337961971,CA +3337961972,3337961975,US +3337961976,3337962007,CA 3337962008,3337962015,US 3337962016,3337962047,CA 3337962048,3337962111,US 3337962112,3337962143,CA 3337962144,3337962151,US -3337962152,3337962167,CA -3337962168,3337962175,US -3337962176,3337962215,CA +3337962152,3337962215,CA 3337962216,3337962223,US 3337962224,3337962239,CA -3337962240,3337962327,US -3337962328,3337962335,CA -3337962336,3337962431,US -3337962432,3337962511,CA -3337962512,3337962519,US -3337962520,3337962599,CA +3337962240,3337962495,US +3337962496,3337962559,CA +3337962560,3337962591,US +3337962592,3337962599,CA 3337962600,3337962623,US -3337962624,3337962799,CA +3337962624,3337962651,CA +3337962652,3337962655,US +3337962656,3337962675,CA +3337962676,3337962679,US +3337962680,3337962795,CA +3337962796,3337962799,US 3337962800,3337962807,GB -3337962808,3337962815,CA -3337962816,3337962943,US -3337962944,3337962967,CA -3337962968,3337962975,US -3337962976,3337962983,CA +3337962808,3337962831,CA +3337962832,3337962943,US +3337962944,3337962951,CA +3337962952,3337962959,US +3337962960,3337962983,CA 3337962984,3337962991,US -3337962992,3337963023,CA -3337963024,3337963039,US -3337963040,3337963071,CA -3337963072,3337963167,US -3337963168,3337963271,CA +3337962992,3337963071,CA +3337963072,3337963135,US +3337963136,3337963271,CA 3337963272,3337963279,US 3337963280,3337963295,CA 3337963296,3337963311,US @@ -130172,44 +131871,49 @@ 3337963320,3337963327,US 3337963328,3337963335,CA 3337963336,3337963343,US -3337963344,3337963359,CA -3337963360,3337963399,US -3337963400,3337963423,CA -3337963424,3337963439,US +3337963344,3337963351,CA +3337963352,3337963391,US +3337963392,3337963431,CA +3337963432,3337963439,US 3337963440,3337963447,CA 3337963448,3337963455,US -3337963456,3337963519,CA -3337963520,3337963631,US -3337963632,3337963647,CA +3337963456,3337963535,CA +3337963536,3337963639,US +3337963640,3337963647,CA 3337963648,3337963743,US 3337963744,3337963759,CA 3337963760,3337963767,US 3337963768,3337963775,CA -3337963776,3337963783,AZ -3337963784,3337963791,US +3337963776,3337963791,US 3337963792,3337963799,AZ -3337963800,3337963807,US -3337963808,3337963847,CA -3337963848,3337963855,BR +3337963800,3337963815,US +3337963816,3337963839,CA +3337963840,3337963855,US 3337963856,3337963863,CA 3337963864,3337963871,MA 3337963872,3337963903,CA 3337963904,3337963911,MA -3337963912,3337963919,CA -3337963920,3337963951,US +3337963912,3337963915,CA +3337963916,3337963951,US 3337963952,3337963967,CA -3337963968,3337964031,IN +3337963968,3337964023,IN +3337964024,3337964027,US +3337964028,3337964031,IN 3337964032,3337964287,US 3337964288,3337964295,CA 3337964296,3337964335,US 3337964336,3337964351,CA 3337964352,3337964415,US -3337964416,3337964543,CA -3337964544,3337964671,US +3337964416,3337964431,CA +3337964432,3337964447,US +3337964448,3337964463,CA +3337964464,3337964479,US +3337964480,3337964495,CA +3337964496,3337964511,US +3337964512,3337964535,CA +3337964536,3337964671,US 3337964672,3337964735,IN -3337964736,3337964751,US -3337964752,3337964759,CA -3337964760,3337969663,US +3337964736,3337969663,US 3337969664,3337973759,PR 3337973760,3337977855,CA 3337977856,3337980671,US @@ -130366,7 +132070,17 @@ 3338601000,3338601007,MX 3338601008,3338601015,JP 3338601016,3338601023,AU -3338601024,3338622463,US +3338601024,3338608175,US +3338608176,3338608183,CN +3338608184,3338608287,US +3338608288,3338608295,CN +3338608296,3338608319,US +3338608320,3338608327,CN +3338608328,3338608335,US +3338608336,3338608343,CN +3338608344,3338608775,US +3338608776,3338608783,CN +3338608784,3338622463,US 3338622464,3338623487,CA 3338623488,3338631679,US 3338631680,3338631935,CA @@ -131134,7 +132848,9 @@ 3343656704,3343656959,VI 3343656960,3343746047,US 3343746048,3343746303,VI -3343746304,3343858687,US +3343746304,3343763903,US +3343763904,3343763935,CA +3343763936,3343858687,US 3343858688,3343859199,VG 3343859200,3343922975,US 3343922976,3343923007,PA @@ -131812,7 +133528,11 @@ 3350648832,3350650623,CA 3350650624,3350650631,US 3350650632,3350650879,CA -3350650880,3350790399,US +3350650880,3350762495,US +3350762496,3350762751,GB +3350762752,3350763263,SG +3350763264,3350763519,HK +3350763520,3350790399,US 3350790400,3350814975,CA 3350814976,3350815231,US 3350815232,3350823423,CA @@ -131910,9 +133630,7 @@ 3351030784,3351031807,CA 3351031808,3351034879,US 3351034880,3351035903,CA -3351035904,3351036927,US -3351036928,3351037951,CA -3351037952,3351043071,US +3351035904,3351043071,US 3351043072,3351043327,CA 3351043328,3351043583,FR 3351043584,3351044095,CA @@ -132725,7 +134443,7 @@ 3354507452,3354507455,AU 3354507456,3354507459,US 3354507460,3354507463,BR -3354507464,3354507467,GH +3354507464,3354507467,US 3354507468,3354507471,CY 3354507472,3354507475,US 3354507476,3354507479,CY @@ -133674,7 +135392,9 @@ 3357424640,3357425663,CL 3357425664,3357442047,CO 3357442048,3357442303,NI -3357442304,3357442655,GT +3357442304,3357442431,GT +3357442432,3357442439,HN +3357442440,3357442655,GT 3357442656,3357442671,NI 3357442672,3357442815,GT 3357442816,3357443071,SV @@ -133692,7 +135412,9 @@ 3357448968,3357448975,HN 3357448976,3357449151,GT 3357449152,3357449727,HN -3357449728,3357451263,GT +3357449728,3357451167,GT +3357451168,3357451175,HN +3357451176,3357451263,GT 3357451264,3357451519,HN 3357451520,3357451775,NI 3357451776,3357452287,GT @@ -133709,7 +135431,9 @@ 3357457920,3357458431,HN 3357458432,3357474815,CL 3357474816,3357475071,US -3357475072,3357476255,AR +3357475072,3357475887,AR +3357475888,3357475903,VE +3357475904,3357476255,AR 3357476256,3357476271,VE 3357476272,3357476351,AR 3357476352,3357476607,EC @@ -133854,7 +135578,9 @@ 3358151680,3358151807,PE 3358151808,3358152063,AR 3358152064,3358152191,PE -3358152192,3358153855,AR +3358152192,3358153679,AR +3358153680,3358153695,PR +3358153696,3358153855,AR 3358153856,3358153983,EC 3358153984,3358154239,AR 3358154240,3358154751,CL @@ -134203,7 +135929,11 @@ 3362705408,3362707455,AR 3362707456,3362708203,CO 3362708204,3362708204,AR -3362708205,3362709503,CO +3362708205,3362708383,CO +3362708384,3362708384,AR +3362708385,3362708413,CO +3362708414,3362708414,AR +3362708415,3362709503,CO 3362709504,3362711551,AR 3362711552,3362713599,EC 3362713600,3362714623,VE @@ -134425,10 +136155,9 @@ 3381947392,3381952511,BR 3381952512,3381960703,MX 3381960704,3381962751,BR -3381962752,3381962991,HN +3381962752,3381962991,US 3381962992,3381962999,FR -3381963000,3381963263,HN -3381963264,3381963559,US +3381963000,3381963559,US 3381963560,3381963567,FR 3381963568,3381963711,US 3381963712,3381963727,CA @@ -136588,7 +138317,8 @@ 3394860032,3394860543,ID 3394860544,3394860799,IN 3394860800,3394861055,CN -3394861056,3394862079,HK +3394861056,3394861311,IN +3394861312,3394862079,HK 3394862080,3394863103,KR 3394863104,3394871295,NZ 3394871296,3394879487,AU @@ -136848,7 +138578,11 @@ 3397338404,3397338415,JP 3397338416,3397338423,HK 3397338424,3397338427,JP -3397338428,3397339647,HK +3397338428,3397338455,HK +3397338456,3397338457,JP +3397338458,3397338459,HK +3397338460,3397338463,JP +3397338464,3397339647,HK 3397339648,3397339687,SG 3397339688,3397340927,HK 3397340928,3397341183,TH @@ -137326,7 +139060,8 @@ 3399921664,3399923711,NC 3399923712,3399923967,IN 3399923968,3399924223,JP -3399924224,3399924735,AU +3399924224,3399924479,US +3399924480,3399924735,AU 3399924736,3399925759,PH 3399925760,3399927257,SG 3399927258,3399927258,NP @@ -137553,7 +139288,9 @@ 3400990720,3400998911,ID 3400998912,3401003007,PH 3401003008,3401007103,JP -3401007104,3401010175,CA +3401007104,3401008143,CA +3401008144,3401008159,MY +3401008160,3401010175,CA 3401010176,3401010183,MY 3401010184,3401010191,CA 3401010192,3401010207,MY @@ -138637,7 +140374,9 @@ 3407565056,3407565311,CN 3407565312,3407566847,AU 3407566848,3407567103,CN -3407567104,3407570431,AU +3407567104,3407568895,AU +3407568896,3407569407,SG +3407569408,3407570431,AU 3407570432,3407570687,CN 3407570688,3407572223,AU 3407572224,3407572479,CN @@ -139108,9 +140847,7 @@ 3409447936,3409448191,CN 3409448192,3409451007,AU 3409451008,3409451263,CN -3409451264,3409453055,AU -3409453056,3409453567,NZ -3409453568,3409454591,AU +3409451264,3409454591,AU 3409454592,3409454847,CN 3409454848,3409455103,AU 3409455104,3409455359,CN @@ -139316,7 +141053,11 @@ 3410959872,3410960383,AU 3410960384,3410960447,GB 3410960448,3410960463,SG -3410960464,3410964479,GB +3410960464,3410962175,GB +3410962176,3410962207,SG +3410962208,3410962431,GB +3410962432,3410964223,HK +3410964224,3410964479,GB 3410964480,3410968575,JP 3410968576,3410984959,NZ 3410984960,3411017727,TW @@ -140096,7 +141837,8 @@ 3415136768,3415137023,PK 3415137024,3415137279,CN 3415137280,3415137535,IN -3415137536,3415138303,AU +3415137536,3415137791,NF +3415137792,3415138303,AU 3415138304,3415146495,CN 3415146496,3415162879,LK 3415162880,3415171071,AU @@ -140563,14 +142305,23 @@ 3418365952,3418374143,TH 3418374144,3418382335,AU 3418382336,3418390527,JP +3418390528,3418393793,AU 3418393794,3418393794,JP -3418393920,3418393927,AU +3418393795,3418394367,AU 3418394368,3418394623,TW +3418394624,3418397483,JP +3418397484,3418397487,PH +3418397488,3418399231,JP 3418399232,3418399247,PH +3418399248,3418400861,JP 3418400862,3418400862,SG +3418400863,3418401455,JP 3418401456,3418401459,TW +3418401460,3418401631,JP 3418401632,3418401647,PH +3418401648,3418405935,JP 3418405936,3418405939,PH +3418405940,3418406911,JP 3418406912,3418423295,IN 3418423296,3418444091,HK 3418444092,3418444095,CN @@ -140972,7 +142723,9 @@ 3426617856,3426618367,CA 3426618368,3426646527,US 3426646528,3426646783,GB -3426646784,3426729471,US +3426646784,3426725375,US +3426725376,3426725887,CA +3426725888,3426729471,US 3426729472,3426729983,CA 3426729984,3426744319,US 3426744320,3426746367,CA @@ -141150,8 +142903,7 @@ 3428306176,3428306431,PE 3428306432,3428318975,US 3428318976,3428319231,CA -3428319232,3428398079,US -3428399104,3428399359,US +3428319232,3428399359,US 3428399360,3428399615,CA 3428399616,3428434943,US 3428434944,3428435199,CA @@ -141445,7 +143197,9 @@ 3432750592,3432807423,US 3432807424,3432808447,CA 3432808448,3433955583,US -3433955584,3433964799,CA +3433955584,3433959423,CA +3433959424,3433963519,US +3433963520,3433964799,CA 3433964800,3433965055,US 3433965056,3433967359,CA 3433967360,3433967615,US @@ -142653,7 +144407,7 @@ 3460763392,3460763647,VG 3460763648,3460794623,US 3460794624,3460794879,CA -3460794880,3460795391,US +3460794880,3460795647,US 3460796416,3460878335,US 3460878336,3460878591,CA 3460878592,3460880383,US @@ -142943,7 +144697,8 @@ 3464202240,3464202495,CA 3464202496,3464203007,US 3464203008,3464203263,RU -3464203264,3464204799,US +3464203264,3464203519,DE +3464203520,3464204799,US 3464204800,3464205055,DK 3464205056,3464205311,NL 3464205312,3464205567,SE @@ -142969,7 +144724,9 @@ 3464208128,3464208255,TN 3464208256,3464208383,DZ 3464208384,3464216575,CA -3464216576,3464340479,US +3464216576,3464261631,US +3464261632,3464265727,CA +3464265728,3464340479,US 3464340480,3464341503,CA 3464341504,3464342287,US 3464342288,3464342295,VN @@ -143039,7 +144796,9 @@ 3465466496,3465466527,GB 3465466528,3465469951,US 3465469952,3465470463,GB -3465470464,3465510911,US +3465470464,3465474047,US +3465474048,3465476095,GB +3465476096,3465510911,US 3465510912,3465543679,JP 3465543680,3465962495,US 3465962496,3465962751,CA @@ -144383,7 +146142,15 @@ 3487891456,3487907839,CA 3487907840,3487913471,US 3487913472,3487913983,CA -3487913984,3487969791,US +3487913984,3487920127,US +3487920128,3487920639,NL +3487920640,3487920895,US +3487920896,3487921407,NL +3487921408,3487921663,US +3487921664,3487922431,NL +3487922432,3487922687,US +3487922688,3487924223,NL +3487924224,3487969791,US 3487969792,3487970047,KW 3487970048,3488014335,US 3488014336,3488022527,CA @@ -145162,7 +146929,9 @@ 3507426304,3507426815,CA 3507426816,3507427583,US 3507427584,3507427839,CA -3507427840,3507430655,US +3507427840,3507428095,US +3507428096,3507428351,GB +3507428352,3507430655,US 3507430656,3507430911,CA 3507430912,3507433215,US 3507433216,3507433727,CA @@ -145184,11 +146953,52 @@ 3507749632,3507765247,CA 3507765248,3507809279,US 3507809280,3507809535,BG -3507809536,3508111359,US +3507809536,3508109311,US +3508109312,3508109583,CA +3508109584,3508109679,US +3508109680,3508110591,CA +3508110592,3508111359,US 3508111360,3508111615,CA -3508111616,3508114431,US +3508111616,3508111871,US +3508111872,3508112895,CA +3508112896,3508113151,US +3508113152,3508113919,CA +3508113920,3508114431,US 3508114432,3508114687,ID -3508114688,3508220927,US +3508114688,3508117759,CA +3508117760,3508118015,US +3508118016,3508119807,CA +3508119808,3508120319,US +3508120320,3508120575,CA +3508120576,3508120831,US +3508120832,3508122111,CA +3508122112,3508122367,US +3508122368,3508122623,CA +3508122624,3508123135,US +3508123136,3508123647,CA +3508123648,3508123903,US +3508123904,3508125439,CA +3508125440,3508125951,US +3508125952,3508126463,CA +3508126464,3508126719,US +3508126720,3508127487,CA +3508127488,3508127743,US +3508127744,3508130047,CA +3508130048,3508130303,US +3508130304,3508130559,CA +3508130560,3508130815,US +3508130816,3508132095,CA +3508132096,3508132351,US +3508132352,3508132607,CA +3508132608,3508132863,US +3508132864,3508134143,CA +3508134144,3508135423,US +3508135424,3508135679,CA +3508135680,3508136447,US +3508136448,3508137375,CA +3508137376,3508137407,US +3508137408,3508142079,CA +3508142080,3508220927,US 3508220928,3508221951,KY 3508221952,3508222975,US 3508222976,3508223999,KY @@ -145348,7 +147158,43 @@ 3508338688,3508404223,CA 3508404224,3508690943,US 3508690944,3508695039,CA -3508695040,3509144575,US +3508695040,3508731903,US +3508731904,3508740095,CA +3508740096,3508745215,US +3508745216,3508745471,CA +3508745472,3508754431,US +3508754432,3508758527,CA +3508758528,3508759551,US +3508759552,3508761343,CA +3508761344,3508762111,US +3508762112,3508762879,CA +3508762880,3508763135,US +3508763136,3508763391,CA +3508763392,3508764159,US +3508764160,3508764415,CA +3508764416,3508764671,US +3508764672,3508772863,CA +3508772864,3508774143,US +3508774144,3508774399,CA +3508774400,3508776447,US +3508776448,3508776703,CA +3508776704,3508777983,US +3508777984,3508778239,CA +3508778240,3508779263,US +3508779264,3508779519,CA +3508779520,3508780031,US +3508780032,3508781055,CA +3508781056,3508782079,US +3508782080,3508782591,CA +3508782592,3508789247,US +3508789248,3508791295,CA +3508791296,3508793343,US +3508793344,3508795391,CA +3508795392,3508796159,US +3508796160,3508796415,CA +3508796416,3508796927,US +3508796928,3508797439,CA +3508797440,3509144575,US 3509144576,3509144831,BR 3509144832,3509157887,US 3509157888,3509166079,CA @@ -145535,7 +147381,11 @@ 3510337280,3510337535,LC 3510337536,3510470927,US 3510470928,3510470935,IL -3510470936,3510479791,US +3510470936,3510478015,US +3510478016,3510478023,CA +3510478024,3510479103,US +3510479104,3510479359,GU +3510479360,3510479791,US 3510479792,3510479799,IE 3510479800,3510546431,US 3510546432,3510550527,CA @@ -145951,7 +147801,11 @@ 3517610176,3517644799,US 3517644800,3517710335,CA 3517710336,3517718527,US -3517718528,3517726719,CA +3517718528,3517720011,CA +3517720012,3517720015,US +3517720016,3517721855,CA +3517721856,3517722111,CR +3517722112,3517726719,CA 3517726720,3517990911,US 3517990912,3517991423,CA 3517991424,3518058495,US @@ -145996,7 +147850,13 @@ 3518929536,3518929599,CA 3518929600,3519234047,US 3519234048,3519250431,CA -3519250432,3519340543,US +3519250432,3519319807,US +3519319808,3519320063,CA +3519320064,3519320319,US +3519320320,3519322623,CA +3519322624,3519322879,US +3519322880,3519323135,CA +3519323136,3519340543,US 3519340544,3519344639,CA 3519344640,3519354909,US 3519354910,3519354910,BR @@ -146025,7 +147885,13 @@ 3519741952,3519758335,ZA 3519758336,3519856639,US 3519856640,3519868927,CA -3519868928,3519873023,US +3519868928,3519869183,US +3519869184,3519869439,GB +3519869440,3519870207,US +3519870208,3519870463,GB +3519870464,3519871231,US +3519871232,3519871487,GB +3519871488,3519873023,US 3519873024,3519874559,CA 3519874560,3519875071,US 3519875072,3519877119,CA @@ -146106,8 +147972,8 @@ 3520937984,3520954367,CA 3520954368,3520994815,US 3520994816,3520995071,GB -3520995072,3520995263,JP -3520995264,3520999423,US +3520995072,3520995327,JP +3520995328,3520999423,US 3520999424,3521003519,CA 3521003520,3521028095,US 3521028096,3521032191,CA @@ -146515,15 +148381,18 @@ 3526954496,3526954751,PH 3526954752,3526955007,JP 3526955008,3526955263,US -3526955264,3526956543,JP -3526956544,3526956799,HK -3526956800,3526971439,JP +3526955264,3526956287,JP +3526956288,3526956799,HK +3526956800,3526966271,JP +3526966272,3526966783,HK +3526966784,3526967295,SG +3526967296,3526971439,JP 3526971440,3526971443,HK 3526971444,3526971531,JP 3526971532,3526971535,HK -3526971536,3526971667,JP -3526971668,3526971671,HK -3526971672,3527002111,JP +3526971536,3526971647,JP +3526971648,3526972159,HK +3526972160,3527002111,JP 3527002112,3527003647,IN 3527003648,3527004159,JP 3527004160,3527008255,ID @@ -146574,7 +148443,9 @@ 3534749696,3534757887,HK 3534757888,3534758143,AU 3534758144,3534758147,JP -3534758148,3534758911,AU +3534758148,3534758399,AU +3534758400,3534758655,HK +3534758656,3534758911,AU 3534758912,3534758927,PH 3534758928,3534758975,AU 3534758976,3534759039,PH @@ -146582,12 +148453,16 @@ 3534759168,3534759215,JP 3534759216,3534759359,AU 3534759360,3534759391,JP -3534759392,3534759963,AU -3534759964,3534759967,US -3534759968,3534760447,AU +3534759392,3534759935,AU +3534759936,3534760447,US 3534760448,3534760959,NZ -3534760960,3534761983,AU -3534761984,3534785043,HK +3534760960,3534761727,AU +3534761728,3534761983,JP +3534761984,3534783487,HK +3534783488,3534783999,US +3534784000,3534784511,HK +3534784512,3534785023,TW +3534785024,3534785043,HK 3534785044,3534785047,SG 3534785048,3534786815,HK 3534786816,3534787327,MY @@ -146929,7 +148804,9 @@ 3558170624,3558178815,GB 3558178816,3558187007,BG 3558187008,3558195199,DE -3558195200,3558196327,GB +3558195200,3558196247,GB +3558196248,3558196255,IT +3558196256,3558196327,GB 3558196328,3558196351,IT 3558196352,3558197247,GB 3558197248,3558199295,US @@ -149534,11 +151411,7 @@ 3563749376,3563765759,PL 3563765760,3563782143,ES 3563790336,3563798527,EE -3563798528,3563800447,FR -3563800448,3563800463,GB -3563800464,3563800495,FR -3563800496,3563800511,GB -3563800512,3563800607,FR +3563798528,3563800607,FR 3563800608,3563800623,GB 3563800624,3563800767,FR 3563800768,3563800783,GB @@ -149620,11 +151493,7 @@ 3563804696,3563804703,GB 3563804704,3563804719,FR 3563804720,3563804727,GB -3563804728,3563806543,FR -3563806544,3563806559,DE -3563806560,3563806687,FR -3563806688,3563806703,DE -3563806704,3563806719,FR +3563804728,3563806719,FR 3563806720,3563814911,SA 3563814912,3563823103,SE 3563823104,3563831295,DE @@ -150066,10 +151935,10 @@ 3567321088,3567338615,GB 3567338616,3567338623,DE 3567338624,3567344447,GB -3567344448,3567344455,ES -3567344456,3567344463,GB -3567344464,3567344479,ES -3567344480,3567350271,GB +3567344448,3567344479,ES +3567344480,3567345623,GB +3567345624,3567345631,IE +3567345632,3567350271,GB 3567350272,3567350527,ES 3567350528,3567353855,GB 3567353856,3567386623,CH @@ -150528,9 +152397,7 @@ 3571515392,3571548159,GB 3571548160,3571580927,ES 3571580928,3571646463,FI -3571646464,3571650318,DE -3571650319,3571650319,SI -3571650320,3571688383,DE +3571646464,3571688383,DE 3571688384,3571689215,ES 3571689216,3571699711,DE 3571699712,3571700735,GB @@ -150782,7 +152649,9 @@ 3575667792,3575667807,FI 3575667808,3575667903,FR 3575667904,3575667967,CZ -3575667968,3575668447,FR +3575667968,3575668271,FR +3575668272,3575668279,ES +3575668280,3575668447,FR 3575668448,3575668479,PL 3575668480,3575669247,FR 3575669248,3575669263,DE @@ -151020,7 +152889,9 @@ 3576242384,3576242391,FR 3576242392,3576248625,GB 3576248626,3576248626,SK -3576248627,3576251711,GB +3576248627,3576248727,GB +3576248728,3576248735,AT +3576248736,3576251711,GB 3576251712,3576251775,FR 3576251776,3576253807,GB 3576253808,3576253815,FR @@ -151322,8 +153193,10 @@ 3580203008,3580203647,SE 3580203648,3580203775,AT 3580203776,3580204031,SE -3580204032,3580204543,LT -3580204544,3580206079,SE +3580204032,3580204544,LT +3580204545,3580204799,SE +3580204800,3580204800,LT +3580204801,3580206079,SE 3580206080,3580207103,HR 3580207104,3580208127,SE 3580208128,3580209151,EE @@ -151333,7 +153206,7 @@ 3580217344,3580219391,SE 3580219392,3580221951,LV 3580221952,3580223487,SE -3580223488,3580231679,LV +3580223488,3580231679,HR 3580231680,3580231935,SE 3580231936,3580232191,LV 3580232192,3580232447,SE @@ -151348,7 +153221,8 @@ 3580246016,3580248063,LV 3580248064,3580254207,EE 3580254208,3580255231,SE -3580255232,3580260351,LV +3580255232,3580259327,LV +3580259328,3580260351,SE 3580260352,3580265471,AT 3580265472,3580265727,SE 3580265728,3580268543,EE @@ -152271,9 +154145,10 @@ 3587244032,3587260415,IT 3587260416,3587278591,DE 3587278592,3587279359,PT -3587279360,3587281919,DE -3587281920,3587282943,PT -3587282944,3587284991,DE +3587279360,3587279615,DE +3587279616,3587280383,PT +3587280384,3587281151,DE +3587281152,3587284991,PT 3587291136,3587292159,FR 3587293184,3587309567,IT 3587309568,3587325951,GB @@ -152741,7 +154616,55 @@ 3625418752,3625426943,CA 3625426944,3625508863,US 3625508864,3625512959,CA -3625512960,3625631743,US +3625512960,3625517055,US +3625517056,3625517311,CA +3625517312,3625517567,US +3625517568,3625518079,CA +3625518080,3625518335,US +3625518336,3625518847,CA +3625518848,3625519103,US +3625519104,3625519871,CA +3625519872,3625520127,US +3625520128,3625520639,CA +3625520640,3625521151,US +3625521152,3625521407,CA +3625521408,3625521663,US +3625521664,3625522687,CA +3625522688,3625522943,US +3625522944,3625523199,CA +3625523200,3625523455,US +3625523456,3625523967,CA +3625523968,3625524223,US +3625524224,3625524735,CA +3625524736,3625524991,US +3625524992,3625525503,CA +3625525504,3625526015,US +3625526016,3625526271,CA +3625526272,3625526527,US +3625526528,3625526783,CA +3625526784,3625527295,US +3625527296,3625528575,CA +3625528576,3625529087,US +3625529088,3625529599,CA +3625529600,3625529855,US +3625529856,3625531391,CA +3625531392,3625531647,US +3625531648,3625531903,CA +3625531904,3625532671,US +3625532672,3625535743,CA +3625535744,3625535999,US +3625536000,3625537535,CA +3625537536,3625538303,US +3625538304,3625538559,CA +3625538560,3625542655,US +3625542656,3625543167,CA +3625543168,3625544191,US +3625544192,3625547263,CA +3625547264,3625547519,US +3625547520,3625548287,CA +3625548288,3625549567,US +3625549568,3625549823,CA +3625549824,3625631743,US 3625631744,3625639935,CA 3625639936,3625959423,US 3625959424,3625963519,GB @@ -152880,10 +154803,11 @@ 3628683264,3628747775,US 3628747776,3628748287,LU 3628748288,3628748799,AU -3628748800,3628753919,US +3628748800,3628753663,US +3628753664,3628753919,FR 3628753920,3628754943,AT 3628754944,3628755967,BE -3628755968,3628756991,US +3628755968,3628756991,AR 3628756992,3628759039,DE 3628759040,3628761087,CN 3628761088,3628834815,US @@ -153076,7 +155000,9 @@ 3630905600,3630905855,CA 3630905856,3630956543,US 3630956544,3631005695,CA -3631005696,3631112191,US +3631005696,3631017983,US +3631017984,3631022079,HK +3631022080,3631112191,US 3631112192,3631112703,VC 3631112704,3631116543,BB 3631116544,3631117567,GD @@ -153192,7 +155118,11 @@ 3633821696,3633821951,CA 3633821952,3633823743,US 3633823744,3633827839,HK -3633827840,3633881087,US +3633827840,3633872895,US +3633872896,3633874431,CA +3633874432,3633874687,US +3633874688,3633876991,CA +3633876992,3633881087,US 3633881088,3633885183,CW 3633885184,3633889279,US 3633889280,3633893375,CA @@ -153216,7 +155146,17 @@ 3634053120,3634061311,CL 3634061312,3634094079,US 3634094080,3634098175,SE -3634098176,3634257919,US +3634098176,3634167807,US +3634167808,3634189055,CA +3634189056,3634189311,US +3634189312,3634193263,CA +3634193264,3634193279,US +3634193280,3634193940,CA +3634193941,3634193941,US +3634193942,3634194367,CA +3634194368,3634194399,US +3634194400,3634196479,CA +3634196480,3634257919,US 3634257920,3634262015,SE 3634262016,3634286079,US 3634286080,3634286335,CA @@ -153331,7 +155271,9 @@ 3635892224,3635896319,CA 3635896320,3635904511,US 3635904512,3635912703,CA -3635912704,3635961855,US +3635912704,3635924991,US +3635924992,3635929087,MV +3635929088,3635961855,US 3635961856,3635963903,SV 3635963904,3635964415,US 3635964416,3635965951,SV @@ -154008,7 +155950,7 @@ 3642050560,3642050815,ES 3642050816,3642051071,IT 3642051072,3642051327,CA -3642051328,3642051583,GB +3642051328,3642051583,US 3642051584,3642051839,AU 3642051840,3642054399,DE 3642054400,3642056703,US @@ -154017,11 +155959,10 @@ 3642064896,3642068991,IT 3642068992,3642073087,AL 3642073088,3642077183,LV -3642077184,3642078975,BE -3642078976,3642079039,NL -3642079040,3642081271,BE +3642077184,3642081271,BE 3642081272,3642081278,US -3642081279,3642085375,NL +3642081279,3642081279,BE +3642081280,3642085375,NL 3642085376,3642089471,RU 3642089472,3642093567,SE 3642093568,3642097663,NL @@ -154473,7 +156414,8 @@ 3645714432,3645718527,RU 3645718528,3645722623,GA 3645722624,3645726719,IT -3645726720,3645734911,RU +3645726720,3645730815,RU +3645730816,3645734911,IR 3645734912,3645743103,NL 3645743104,3645747199,CZ 3645747200,3645751295,GB @@ -155865,8 +157807,8 @@ 3651874816,3651878911,PL 3651878912,3651883007,IT 3651883008,3651884543,CD -3651884544,3651885055,BE -3651885056,3651885311,CD +3651884544,3651884799,BE +3651884800,3651885311,CD 3651885312,3651885839,BE 3651885840,3651885843,CD 3651885844,3651887103,BE @@ -155982,10 +157924,14 @@ 3652589888,3652589919,PL 3652589920,3652590783,FR 3652590784,3652590847,ES -3652590848,3652591615,FR +3652590848,3652591119,FR +3652591120,3652591127,ES +3652591128,3652591615,FR 3652591616,3652591743,GB 3652591744,3652591807,BE -3652591808,3652592543,FR +3652591808,3652592391,FR +3652592392,3652592399,ES +3652592400,3652592543,FR 3652592544,3652592575,PL 3652592576,3652592703,FR 3652592704,3652592767,DE @@ -155999,9 +157945,13 @@ 3652593216,3652593279,IE 3652593280,3652593407,FR 3652593408,3652593471,ES -3652593472,3652593631,FR +3652593472,3652593511,FR +3652593512,3652593519,ES +3652593520,3652593631,FR 3652593632,3652593663,PT -3652593664,3652595007,FR +3652593664,3652593943,FR +3652593944,3652593951,ES +3652593952,3652595007,FR 3652595008,3652595071,DE 3652595072,3652595167,FR 3652595168,3652595183,ES @@ -156015,7 +157965,9 @@ 3652596800,3652596831,CZ 3652596832,3652597183,FR 3652597184,3652597247,DE -3652597248,3652597407,FR +3652597248,3652597375,FR +3652597376,3652597383,ES +3652597384,3652597407,FR 3652597408,3652597439,PL 3652597440,3652597887,FR 3652597888,3652597903,GB @@ -156056,7 +158008,9 @@ 3652612352,3652612479,GB 3652612480,3652612543,IE 3652612544,3652612607,NL -3652612608,3652613375,FR +3652612608,3652613335,FR +3652613336,3652613343,ES +3652613344,3652613375,FR 3652613376,3652613407,FI 3652613408,3652613615,FR 3652613616,3652613623,ES @@ -156103,7 +158057,9 @@ 3652630080,3652630111,PL 3652630112,3652631295,FR 3652631296,3652631359,BE -3652631360,3652631423,FR +3652631360,3652631391,FR +3652631392,3652631407,CH +3652631408,3652631423,FR 3652631424,3652631455,PL 3652631456,3652631551,FR 3652631552,3652631583,CZ @@ -156127,7 +158083,9 @@ 3652639680,3652639807,NL 3652639808,3652640575,FR 3652640576,3652640703,GB -3652640704,3652640767,FR +3652640704,3652640711,FR +3652640712,3652640719,ES +3652640720,3652640767,FR 3652640768,3652640831,ES 3652640832,3652641727,FR 3652641728,3652641791,GB @@ -156286,7 +158244,9 @@ 3654610432,3654610943,FR 3654610944,3654610951,SE 3654610952,3654610959,DE -3654610960,3654612271,SE +3654610960,3654612231,SE +3654612232,3654612239,AT +3654612240,3654612271,SE 3654612272,3654612287,AT 3654612288,3654614047,SE 3654614048,3654614063,GB @@ -156525,7 +158485,7 @@ 3707207680,3707208703,BD 3707208704,3707209727,NZ 3707209728,3707211775,CN -3707211776,3707215871,TW +3707211776,3707215871,NP 3707215872,3707217919,BD 3707217920,3707219967,ID 3707219968,3707222015,AU diff --git a/src/config/geoip6 b/src/config/geoip6 index 4434ebff91..5e6364d53b 100644 --- a/src/config/geoip6 +++ b/src/config/geoip6 @@ -1,4 +1,4 @@ -# Last updated based on October 4 2017 Maxmind GeoLite2 Country +# Last updated based on November 6 2017 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -99,7 +99,9 @@ 2001:470:0:284::1,2001:470:0:284::1,AT 2001:470:0:284::2,2001:470:5:317:ffff:ffff:ffff:ffff,US 2001:470:5:318::,2001:470:5:318:ffff:ffff:ffff:ffff,AR -2001:470:5:319::,2001:470:d:fff:ffff:ffff:ffff:ffff,US +2001:470:5:319::,2001:470:d:11b:ffff:ffff:ffff:ffff,US +2001:470:d:11c::,2001:470:d:11c:ffff:ffff:ffff:ffff,NZ +2001:470:d:11d::,2001:470:d:fff:ffff:ffff:ffff:ffff,US 2001:470:d:1000::,2001:470:d:1fff:ffff:ffff:ffff:ffff,CN 2001:470:d:2000::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US 2001:470:19::,2001:470:19:3ff:ffff:ffff:ffff:ffff,CN @@ -498,7 +500,8 @@ 2001:504:69::,2001:504:69:ffff:ffff:ffff:ffff:ffff,CA 2001:504:70::,2001:504:72:ffff:ffff:ffff:ffff:ffff,US 2001:504:73::,2001:504:73:ffff:ffff:ffff:ffff:ffff,CA -2001:504:74::,2001:504:75:ffff:ffff:ffff:ffff:ffff,US +2001:504:74::,2001:504:76:ffff:ffff:ffff:ffff:ffff,US +2001:504:80::,2001:504:8f:ffff:ffff:ffff:ffff:ffff,US 2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US 2001:506:8::,2001:506:8:ffff:ffff:ffff:ffff:ffff,US 2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA @@ -896,6 +899,16 @@ 2001:678:534::,2001:678:534:ffff:ffff:ffff:ffff:ffff,RU 2001:678:538::,2001:678:538:ffff:ffff:ffff:ffff:ffff,NL 2001:678:53c::,2001:678:53c:ffff:ffff:ffff:ffff:ffff,NL +2001:678:540::,2001:678:540:ffff:ffff:ffff:ffff:ffff,DE +2001:678:544::,2001:678:544:ffff:ffff:ffff:ffff:ffff,IE +2001:678:548::,2001:678:548:ffff:ffff:ffff:ffff:ffff,RU +2001:678:54c::,2001:678:54c:ffff:ffff:ffff:ffff:ffff,SE +2001:678:550::,2001:678:550:ffff:ffff:ffff:ffff:ffff,GB +2001:678:554::,2001:678:554:ffff:ffff:ffff:ffff:ffff,DK +2001:678:558::,2001:678:558:ffff:ffff:ffff:ffff:ffff,DE +2001:678:55c::,2001:678:55c:ffff:ffff:ffff:ffff:ffff,SE +2001:678:560::,2001:678:560:ffff:ffff:ffff:ffff:ffff,DE +2001:678:564::,2001:678:564:ffff:ffff:ffff:ffff:ffff,UA 2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE 2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH @@ -1901,7 +1914,6 @@ 2001:67c:1958::,2001:67c:1958:ffff:ffff:ffff:ffff:ffff,DK 2001:67c:195c::,2001:67c:195c:ffff:ffff:ffff:ffff:ffff,ES 2001:67c:1960::,2001:67c:1960:ffff:ffff:ffff:ffff:ffff,RO -2001:67c:1964::,2001:67c:1964:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:1968::,2001:67c:1968:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:196c::,2001:67c:196c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:1970::,2001:67c:1970:ffff:ffff:ffff:ffff:ffff,RU @@ -1960,6 +1972,7 @@ 2001:67c:1b6c::,2001:67c:1b6c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:1b70::,2001:67c:1b70:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:1b74::,2001:67c:1b74:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1b78::,2001:67c:1b78:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1b7c::,2001:67c:1b7c:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1b80::,2001:67c:1b80:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1b84::,2001:67c:1b84:ffff:ffff:ffff:ffff:ffff,DE @@ -2131,6 +2144,7 @@ 2001:67c:2224::,2001:67c:2224:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2228::,2001:67c:2228:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:222c::,2001:67c:222c:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:2230::,2001:67c:2230:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:2234::,2001:67c:2234:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2238::,2001:67c:2238:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:223c::,2001:67c:223c:ffff:ffff:ffff:ffff:ffff,DE @@ -2387,7 +2401,6 @@ 2001:67c:266c::,2001:67c:266c:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2670::,2001:67c:2670:ffff:ffff:ffff:ffff:ffff,SK 2001:67c:2674::,2001:67c:2674:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:2678::,2001:67c:2678:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:267c::,2001:67c:267c:ffff:ffff:ffff:ffff:ffff,PL 2001:67c:2680::,2001:67c:2680:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2684::,2001:67c:2684:ffff:ffff:ffff:ffff:ffff,DK @@ -2681,6 +2694,7 @@ 2001:67c:2bb8::,2001:67c:2bb8:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2bbc::,2001:67c:2bbc:ffff:ffff:ffff:ffff:ffff,RO 2001:67c:2bc0::,2001:67c:2bc0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2bc4::,2001:67c:2bc4:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2bc8::,2001:67c:2bc8:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2bcc::,2001:67c:2bcc:ffff:ffff:ffff:ffff:ffff,LV 2001:67c:2bd0::,2001:67c:2bd0:ffff:ffff:ffff:ffff:ffff,SE @@ -2876,13 +2890,13 @@ 2001:67c:2f04::,2001:67c:2f04:ffff:ffff:ffff:ffff:ffff,NL 2001:67c:2f08::,2001:67c:2f08:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2f0c::,2001:67c:2f0c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2f10::,2001:67c:2f10:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f14::,2001:67c:2f14:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f18::,2001:67c:2f18:ffff:ffff:ffff:ffff:ffff,CZ 2001:67c:2f1c::,2001:67c:2f1c:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2f20::,2001:67c:2f20:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f24::,2001:67c:2f24:ffff:ffff:ffff:ffff:ffff,HR 2001:67c:2f28::,2001:67c:2f28:ffff:ffff:ffff:ffff:ffff,PL -2001:67c:2f2c::,2001:67c:2f2c:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2f30::,2001:67c:2f30:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f34::,2001:67c:2f34:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:2f38::,2001:67c:2f38:ffff:ffff:ffff:ffff:ffff,GB @@ -3117,7 +3131,6 @@ 2001:7f8:80::,2001:7f8:80:ffff:ffff:ffff:ffff:ffff,UA 2001:7f8:81::,2001:7f8:81:ffff:ffff:ffff:ffff:ffff,FR 2001:7f8:82::,2001:7f8:82:ffff:ffff:ffff:ffff:ffff,RU -2001:7f8:83::,2001:7f8:83:ffff:ffff:ffff:ffff:ffff,PL 2001:7f8:84::,2001:7f8:84:ffff:ffff:ffff:ffff:ffff,RU 2001:7f8:85::,2001:7f8:85:ffff:ffff:ffff:ffff:ffff,HU 2001:7f8:86::,2001:7f8:86:ffff:ffff:ffff:ffff:ffff,NL @@ -3168,6 +3181,9 @@ 2001:7f8:b6::,2001:7f8:b7:ffff:ffff:ffff:ffff:ffff,NL 2001:7f8:b8::,2001:7f8:b8:ffff:ffff:ffff:ffff:ffff,UA 2001:7f8:b9::,2001:7f8:b9:ffff:ffff:ffff:ffff:ffff,IT +2001:7f8:ba::,2001:7f8:ba:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:bb::,2001:7f8:bb:ffff:ffff:ffff:ffff:ffff,AL +2001:7f8:bc::,2001:7f8:bc:ffff:ffff:ffff:ffff:ffff,GB 2001:7f9:4::,2001:7f9:4:ffff:ffff:ffff:ffff:ffff,AL 2001:7f9:8::,2001:7f9:8:ffff:ffff:ffff:ffff:ffff,AM 2001:7f9:c::,2001:7f9:c:ffff:ffff:ffff:ffff:ffff,PL @@ -3185,6 +3201,7 @@ 2001:7fa:f::,2001:7fa:f:ffff:ffff:ffff:ffff:ffff,ID 2001:7fa:10::,2001:7fa:10:ffff:ffff:ffff:ffff:ffff,CN 2001:7fa:11::,2001:7fa:11:ffff:ffff:ffff:ffff:ffff,AU +2001:7fc::,2001:7fc:1:ffff:ffff:ffff:ffff:ffff,RU 2001:7fe::,2001:7fe:ffff:ffff:ffff:ffff:ffff:ffff,SE 2001:808::,2001:80f:ffff:ffff:ffff:ffff:ffff:ffff,PL 2001:810::,2001:810:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -3299,7 +3316,7 @@ 2001:a98::,2001:a98:ffff:ffff:ffff:ffff:ffff:ffff,TR 2001:aa0::,2001:aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:aa8::,2001:ab7:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:ab8::,2001:ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:ab8::,2001:abf:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:ac0::,2001:ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2001:ac8::,2001:ac8:1f:ffff:ffff:ffff:ffff:ffff,GB 2001:ac8:20::,2001:ac8:20:ffff:ffff:ffff:ffff:ffff,DE @@ -3320,7 +3337,9 @@ 2001:ac8:37::,2001:ac8:37:ffff:ffff:ffff:ffff:ffff,DK 2001:ac8:38::,2001:ac8:38:ffff:ffff:ffff:ffff:ffff,NO 2001:ac8:39::,2001:ac8:39:ffff:ffff:ffff:ffff:ffff,IT -2001:ac8:3a::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:ac8:3a::,2001:ac8:3f:ffff:ffff:ffff:ffff:ffff,GB +2001:ac8:40::,2001:ac8:40:ffff:ffff:ffff:ffff:ffff,JP +2001:ac8:41::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:ad0::,2001:ad0:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:ad8::,2001:ae1:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:ae8::,2001:ae8:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -3487,6 +3506,7 @@ 2001:dee::,2001:dee::ffff:ffff:ffff:ffff:ffff,HK 2001:dee:8000::,2001:dee:8001:ffff:ffff:ffff:ffff:ffff,NZ 2001:def::,2001:def::ffff:ffff:ffff:ffff:ffff,HK +2001:def:8000::,2001:def:8001:ffff:ffff:ffff:ffff:ffff,NP 2001:df0::,2001:df0:1:ffff:ffff:ffff:ffff:ffff,NZ 2001:df0:2::,2001:df0:2:ffff:ffff:ffff:ffff:ffff,JP 2001:df0:4::,2001:df0:4:ffff:ffff:ffff:ffff:ffff,NZ @@ -4202,7 +4222,6 @@ 2001:df1:8000::,2001:df1:8000:ffff:ffff:ffff:ffff:ffff,IN 2001:df1:8100::,2001:df1:8100:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:8200::,2001:df1:8200:ffff:ffff:ffff:ffff:ffff,IN -2001:df1:8300::,2001:df1:8300:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:8400::,2001:df1:8400:ffff:ffff:ffff:ffff:ffff,BD 2001:df1:8500::,2001:df1:8500:ffff:ffff:ffff:ffff:ffff,ID 2001:df1:8600::,2001:df1:8600:ffff:ffff:ffff:ffff:ffff,IN @@ -4276,7 +4295,6 @@ 2001:df1:cc00::,2001:df1:cc00:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:cd00::,2001:df1:cd00:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:ce00::,2001:df1:ce00:ffff:ffff:ffff:ffff:ffff,ID -2001:df1:cf00::,2001:df1:cf00:ffff:ffff:ffff:ffff:ffff,HK 2001:df1:d000::,2001:df1:d000:ffff:ffff:ffff:ffff:ffff,AU 2001:df1:d100::,2001:df1:d100:ffff:ffff:ffff:ffff:ffff,CN 2001:df1:d200::,2001:df1:d200:ffff:ffff:ffff:ffff:ffff,SG @@ -4361,7 +4379,7 @@ 2001:df2:2300::,2001:df2:2300:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:2400::,2001:df2:2400:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:2500::,2001:df2:2500:ffff:ffff:ffff:ffff:ffff,ID -2001:df2:2600::,2001:df2:2600:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:2600::,2001:df2:2600:ffff:ffff:ffff:ffff:ffff,SG 2001:df2:2700::,2001:df2:2700:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:2800::,2001:df2:2800:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:2900::,2001:df2:2900:ffff:ffff:ffff:ffff:ffff,AU @@ -4495,47 +4513,91 @@ 2001:df2:ac00::,2001:df2:ac01:ffff:ffff:ffff:ffff:ffff,TH 2001:df2:ad00::,2001:df2:ad00:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:ae00::,2001:df2:ae00:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:af00::,2001:df2:af00:ffff:ffff:ffff:ffff:ffff,JP 2001:df2:b000::,2001:df2:b000:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:b100::,2001:df2:b100:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:b200::,2001:df2:b200:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:b300::,2001:df2:b300:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:b400::,2001:df2:b400:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:b500::,2001:df2:b500:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:b600::,2001:df2:b600:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:b700::,2001:df2:b700:ffff:ffff:ffff:ffff:ffff,NP +2001:df2:b900::,2001:df2:b900:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:ba00::,2001:df2:ba00:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:bb00::,2001:df2:bb00:ffff:ffff:ffff:ffff:ffff,HK 2001:df2:bc00::,2001:df2:bc00:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:bd00::,2001:df2:bd00:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:be00::,2001:df2:be00:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:bf00::,2001:df2:bf00:ffff:ffff:ffff:ffff:ffff,US 2001:df2:c000::,2001:df2:c000:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:c100::,2001:df2:c100:ffff:ffff:ffff:ffff:ffff,VN 2001:df2:c200::,2001:df2:c200:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:c300::,2001:df2:c300:ffff:ffff:ffff:ffff:ffff,JP 2001:df2:c400::,2001:df2:c400:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:c500::,2001:df2:c500:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:c600::,2001:df2:c600:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:c700::,2001:df2:c700:ffff:ffff:ffff:ffff:ffff,HK 2001:df2:c800::,2001:df2:c800:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:c900::,2001:df2:c900:ffff:ffff:ffff:ffff:ffff,JP 2001:df2:ca00::,2001:df2:ca00:ffff:ffff:ffff:ffff:ffff,VN +2001:df2:cb00::,2001:df2:cb00:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:cc00::,2001:df2:cc00:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:cd00::,2001:df2:cd00:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:ce00::,2001:df2:ce00:ffff:ffff:ffff:ffff:ffff,VN +2001:df2:cf00::,2001:df2:cf00:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:d000::,2001:df2:d000:ffff:ffff:ffff:ffff:ffff,HK +2001:df2:d100::,2001:df2:d100:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:d200::,2001:df2:d200:ffff:ffff:ffff:ffff:ffff,HK +2001:df2:d300::,2001:df2:d300:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:d400::,2001:df2:d400:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:d500::,2001:df2:d500:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:d600::,2001:df2:d600:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:d700::,2001:df2:d700:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:d800::,2001:df2:d800:ffff:ffff:ffff:ffff:ffff,JP +2001:df2:d900::,2001:df2:d900:ffff:ffff:ffff:ffff:ffff,VN 2001:df2:da00::,2001:df2:da00:ffff:ffff:ffff:ffff:ffff,JP +2001:df2:db00::,2001:df2:db00:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:dc00::,2001:df2:dc00:ffff:ffff:ffff:ffff:ffff,TH +2001:df2:dd00::,2001:df2:dd00:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:de00::,2001:df2:de00:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:df00::,2001:df2:df00:ffff:ffff:ffff:ffff:ffff,JP +2001:df2:e100::,2001:df2:e100:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:e200::,2001:df2:e200:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:e300::,2001:df2:e300:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:e400::,2001:df2:e400:ffff:ffff:ffff:ffff:ffff,PH +2001:df2:e500::,2001:df2:e500:ffff:ffff:ffff:ffff:ffff,US 2001:df2:e600::,2001:df2:e600:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:e700::,2001:df2:e700:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:e800::,2001:df2:e800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:e900::,2001:df2:e900:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:ea00::,2001:df2:ea00:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:eb00::,2001:df2:eb00:ffff:ffff:ffff:ffff:ffff,MY 2001:df2:ec00::,2001:df2:ec00:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:ed00::,2001:df2:ed00:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:ee00::,2001:df2:ee01:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:ef00::,2001:df2:ef00:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:f000::,2001:df2:f000:ffff:ffff:ffff:ffff:ffff,VN +2001:df2:f100::,2001:df2:f100:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:f200::,2001:df2:f200:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:f300::,2001:df2:f300:ffff:ffff:ffff:ffff:ffff,IN 2001:df2:f400::,2001:df2:f400:ffff:ffff:ffff:ffff:ffff,HK +2001:df2:f500::,2001:df2:f500:ffff:ffff:ffff:ffff:ffff,AU 2001:df2:f600::,2001:df2:f600:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:f700::,2001:df2:f700:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:f800::,2001:df2:f800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:f900::,2001:df2:f900:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:fa00::,2001:df2:fa00:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:fb00::,2001:df2:fb00:ffff:ffff:ffff:ffff:ffff,ID 2001:df2:fc00::,2001:df2:fc00:ffff:ffff:ffff:ffff:ffff,JP +2001:df2:fd00::,2001:df2:fd00:ffff:ffff:ffff:ffff:ffff,NZ 2001:df2:fe00::,2001:df2:fe00:ffff:ffff:ffff:ffff:ffff,US +2001:df2:ff00::,2001:df2:ff00:ffff:ffff:ffff:ffff:ffff,IN 2001:df3::,2001:df3::ffff:ffff:ffff:ffff:ffff,MY +2001:df3:100::,2001:df3:101:ffff:ffff:ffff:ffff:ffff,TH 2001:df3:200::,2001:df3:200:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:300::,2001:df3:300:ffff:ffff:ffff:ffff:ffff,MV 2001:df3:400::,2001:df3:400:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:500::,2001:df3:500:ffff:ffff:ffff:ffff:ffff,BD 2001:df3:600::,2001:df3:600:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:800::,2001:df3:81f:ffff:ffff:ffff:ffff:ffff,US 2001:df3:a00::,2001:df3:a00:ffff:ffff:ffff:ffff:ffff,AU @@ -4587,7 +4649,6 @@ 2001:df3:6c00::,2001:df3:6c00:ffff:ffff:ffff:ffff:ffff,IN 2001:df3:6e00::,2001:df3:6e00:ffff:ffff:ffff:ffff:ffff,TW 2001:df3:7000::,2001:df3:7000:ffff:ffff:ffff:ffff:ffff,ID -2001:df3:7200::,2001:df3:7200:ffff:ffff:ffff:ffff:ffff,PH 2001:df3:7400::,2001:df3:7400:ffff:ffff:ffff:ffff:ffff,SG 2001:df3:7600::,2001:df3:7600:ffff:ffff:ffff:ffff:ffff,AU 2001:df3:7800::,2001:df3:7800:ffff:ffff:ffff:ffff:ffff,SG @@ -4689,7 +4750,6 @@ 2001:df4:4200::,2001:df4:4200:ffff:ffff:ffff:ffff:ffff,IN 2001:df4:4400::,2001:df4:4400:ffff:ffff:ffff:ffff:ffff,ID 2001:df4:4600::,2001:df4:4600:ffff:ffff:ffff:ffff:ffff,IN -2001:df4:4a00::,2001:df4:4a00:ffff:ffff:ffff:ffff:ffff,AU 2001:df4:4c00::,2001:df4:4c00:ffff:ffff:ffff:ffff:ffff,MY 2001:df4:4e00::,2001:df4:4e00:ffff:ffff:ffff:ffff:ffff,AU 2001:df4:5000::,2001:df4:5000:ffff:ffff:ffff:ffff:ffff,ID @@ -4794,7 +4854,6 @@ 2001:df5:2400::,2001:df5:2400:ffff:ffff:ffff:ffff:ffff,NZ 2001:df5:2600::,2001:df5:2600:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:2800::,2001:df5:2800:ffff:ffff:ffff:ffff:ffff,IN -2001:df5:2a00::,2001:df5:2a00:ffff:ffff:ffff:ffff:ffff,CN 2001:df5:2c00::,2001:df5:2c00:ffff:ffff:ffff:ffff:ffff,JP 2001:df5:2e00::,2001:df5:2e00:ffff:ffff:ffff:ffff:ffff,NZ 2001:df5:3000::,2001:df5:3000:ffff:ffff:ffff:ffff:ffff,AU @@ -4817,7 +4876,6 @@ 2001:df5:5600::,2001:df5:5600:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:5800::,2001:df5:5800:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:5a00::,2001:df5:5a00:ffff:ffff:ffff:ffff:ffff,ID -2001:df5:5c00::,2001:df5:5c00:ffff:ffff:ffff:ffff:ffff,TH 2001:df5:5e00::,2001:df5:5e00:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:6000::,2001:df5:6000:ffff:ffff:ffff:ffff:ffff,NZ 2001:df5:6200::,2001:df5:6200:ffff:ffff:ffff:ffff:ffff,ID @@ -4961,7 +5019,6 @@ 2001:df6:8600::,2001:df6:8600:ffff:ffff:ffff:ffff:ffff,NZ 2001:df6:8800::,2001:df6:8800:ffff:ffff:ffff:ffff:ffff,AU 2001:df6:8a00::,2001:df6:8a00:ffff:ffff:ffff:ffff:ffff,ID -2001:df6:8c00::,2001:df6:8c00:ffff:ffff:ffff:ffff:ffff,TH 2001:df6:8e00::,2001:df6:8e00:ffff:ffff:ffff:ffff:ffff,ID 2001:df6:9000::,2001:df6:9000:ffff:ffff:ffff:ffff:ffff,AU 2001:df6:9200::,2001:df6:9200:ffff:ffff:ffff:ffff:ffff,ID @@ -5137,7 +5194,7 @@ 2001:df7:fc00::,2001:df7:fc00:ffff:ffff:ffff:ffff:ffff,SG 2001:df7:fe00::,2001:df7:fe00:ffff:ffff:ffff:ffff:ffff,ID 2001:df8::,2001:df8:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,NP 2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:e00::,2001:e01:ffff:ffff:ffff:ffff:ffff:ffff,ID 2001:e08::,2001:e08:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -5354,7 +5411,7 @@ 2001:1600::,2001:1607:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:1608::,2001:1608:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:1610::,2001:1617:ffff:ffff:ffff:ffff:ffff:ffff,LU -2001:1618::,2001:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT +2001:1618::,2001:161f:ffff:ffff:ffff:ffff:ffff:ffff,AT 2001:1620::,2001:1623:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:1630::,2001:1637:ffff:ffff:ffff:ffff:ffff:ffff,SE 2001:1638::,2001:1638:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -5931,6 +5988,8 @@ 2001:43f8:e00::,2001:43f8:eff:ffff:ffff:ffff:ffff:ffff,MU 2001:43f8:1000::,2001:43f8:1000:ffff:ffff:ffff:ffff:ffff,KE 2001:43f8:1010::,2001:43f8:1010:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:1020::,2001:43f8:1020:ffff:ffff:ffff:ffff:ffff,ZW +2001:43f8:1030::,2001:43f8:1030:ffff:ffff:ffff:ffff:ffff,ZA 2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN 2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ @@ -6375,6 +6434,7 @@ 2001:4de0:600::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:4de8::,2001:4de8:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL +2001:5000::,2001:57ff:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2001:a000::,2001:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:b000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW @@ -6621,8 +6681,8 @@ 2400:6100::,2400:6100:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:6140::,2400:6140: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:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:6180:100::,2400:6180:100:7fff:ffff:ffff:ffff:ffff,IN +2400:6180:100:8000::,2400:6180:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:61c0::,2400:61c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:6200::,2400:6200:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:6240::,2400:6240:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -6798,7 +6858,6 @@ 2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8a40::,2400:8a40:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:8a80::,2400:8a81:ffff:ffff:ffff:ffff:ffff:ffff,PH -2400:8ac0::,2400:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:8b00::,2400:8b00:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:8b40::,2400:8b40:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:8b80::,2400:8b80:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -7039,9 +7098,118 @@ 2400:ca00::,2400:ca00:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:ca40::,2400:ca40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:cac0::,2400:cac0:ffff:ffff:ffff:ffff:ffff:ffff,CN -2400:cb00::,2400:cb00:24:ffff:ffff:ffff:ffff:ffff,US +2400:cb00::,2400:cb00:18:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:19::,2400:cb00:19:ffff:ffff:ffff:ffff:ffff,FR +2400:cb00:1a::,2400:cb00:1f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:20::,2400:cb00:20:ffff:ffff:ffff:ffff:ffff,NL +2400:cb00:21::,2400:cb00:21:ffff:ffff:ffff:ffff:ffff,GB +2400:cb00:22::,2400:cb00:22:ffff:ffff:ffff:ffff:ffff,JP +2400:cb00:23::,2400:cb00:23:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:24::,2400:cb00:24:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:25::,2400:cb00:25:7fff:ffff:ffff:ffff:ffff,GB -2400:cb00:25:8000::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:25:8000::,2400:cb00:25:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:26::,2400:cb00:26:ffff:ffff:ffff:ffff:ffff,AU +2400:cb00:27::,2400:cb00:28:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:29::,2400:cb00:29:ffff:ffff:ffff:ffff:ffff,CA +2400:cb00:2a::,2400:cb00:30:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:31::,2400:cb00:31:ffff:ffff:ffff:ffff:ffff,CZ +2400:cb00:32::,2400:cb00:33:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:34::,2400:cb00:34:ffff:ffff:ffff:ffff:ffff,KR +2400:cb00:35::,2400:cb00:35:ffff:ffff:ffff:ffff:ffff,SG +2400:cb00:36::,2400:cb00:37:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:38::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,CL +2400:cb00:39::,2400:cb00:39:ffff:ffff:ffff:ffff:ffff,IT +2400:cb00:3a::,2400:cb00:3f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:40::,2400:cb00:40:ffff:ffff:ffff:ffff:ffff,ES +2400:cb00:41::,2400:cb00:41:ffff:ffff:ffff:ffff:ffff,CO +2400:cb00:42::,2400:cb00:42:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:43::,2400:cb00:43:ffff:ffff:ffff:ffff:ffff,PE +2400:cb00:44::,2400:cb00:44:ffff:ffff:ffff:ffff:ffff,AR +2400:cb00:45::,2400:cb00:45:ffff:ffff:ffff:ffff:ffff,ZA +2400:cb00:46::,2400:cb00:46:ffff:ffff:ffff:ffff:ffff,NZ +2400:cb00:47::,2400:cb00:47:ffff:ffff:ffff:ffff:ffff,AU +2400:cb00:48::,2400:cb00:48:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:49::,2400:cb00:49:ffff:ffff:ffff:ffff:ffff,FR +2400:cb00:4a::,2400:cb00:4f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:50::,2400:cb00:50:ffff:ffff:ffff:ffff:ffff,RO +2400:cb00:51::,2400:cb00:51:ffff:ffff:ffff:ffff:ffff,JP +2400:cb00:52::,2400:cb00:52:ffff:ffff:ffff:ffff:ffff,IE +2400:cb00:53::,2400:cb00:53:ffff:ffff:ffff:ffff:ffff,KW +2400:cb00:54::,2400:cb00:54:ffff:ffff:ffff:ffff:ffff,QA +2400:cb00:55::,2400:cb00:55:ffff:ffff:ffff:ffff:ffff,OM +2400:cb00:56::,2400:cb00:56:ffff:ffff:ffff:ffff:ffff,MY +2400:cb00:57::,2400:cb00:59:ffff:ffff:ffff:ffff:ffff,IN +2400:cb00:5a::,2400:cb00:5f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:60::,2400:cb00:60:ffff:ffff:ffff:ffff:ffff,AE +2400:cb00:61::,2400:cb00:61:ffff:ffff:ffff:ffff:ffff,KE +2400:cb00:62::,2400:cb00:62:ffff:ffff:ffff:ffff:ffff,EG +2400:cb00:63::,2400:cb00:63:ffff:ffff:ffff:ffff:ffff,GB +2400:cb00:64::,2400:cb00:64:ffff:ffff:ffff:ffff:ffff,CH +2400:cb00:65::,2400:cb00:65:ffff:ffff:ffff:ffff:ffff,DK +2400:cb00:66::,2400:cb00:66:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:67::,2400:cb00:67:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:68::,2400:cb00:68:ffff:ffff:ffff:ffff:ffff,PH +2400:cb00:69::,2400:cb00:69:ffff:ffff:ffff:ffff:ffff,CA +2400:cb00:6a::,2400:cb00:6f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:70::,2400:cb00:70:ffff:ffff:ffff:ffff:ffff,CA +2400:cb00:71::,2400:cb00:71:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:72::,2400:cb00:72:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:73::,2400:cb00:73:ffff:ffff:ffff:ffff:ffff,PL +2400:cb00:74::,2400:cb00:74:ffff:ffff:ffff:ffff:ffff,BG +2400:cb00:75::,2400:cb00:75:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:76::,2400:cb00:76:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:77::,2400:cb00:77:ffff:ffff:ffff:ffff:ffff,PH +2400:cb00:78::,2400:cb00:78:ffff:ffff:ffff:ffff:ffff,BE +2400:cb00:79::,2400:cb00:79:ffff:ffff:ffff:ffff:ffff,FI +2400:cb00:7a::,2400:cb00:7f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:80::,2400:cb00:80:ffff:ffff:ffff:ffff:ffff,TW +2400:cb00:81::,2400:cb00:82:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:83::,2400:cb00:83:ffff:ffff:ffff:ffff:ffff,NO +2400:cb00:84::,2400:cb00:85:ffff:ffff:ffff:ffff:ffff,AU +2400:cb00:86::,2400:cb00:86:ffff:ffff:ffff:ffff:ffff,TH +2400:cb00:87::,2400:cb00:87:ffff:ffff:ffff:ffff:ffff,RU +2400:cb00:88::,2400:cb00:88:ffff:ffff:ffff:ffff:ffff,GR +2400:cb00:89::,2400:cb00:89:ffff:ffff:ffff:ffff:ffff,ES +2400:cb00:8a::,2400:cb00:8f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:90::,2400:cb00:90:ffff:ffff:ffff:ffff:ffff,PA +2400:cb00:91::,2400:cb00:91:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:92::,2400:cb00:92:ffff:ffff:ffff:ffff:ffff,IN +2400:cb00:93::,2400:cb00:94:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:95::,2400:cb00:95:ffff:ffff:ffff:ffff:ffff,EC +2400:cb00:96::,2400:cb00:96:ffff:ffff:ffff:ffff:ffff,AO +2400:cb00:97::,2400:cb00:97:ffff:ffff:ffff:ffff:ffff,BR +2400:cb00:98::,2400:cb00:98:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:99::,2400:cb00:99:ffff:ffff:ffff:ffff:ffff,LU +2400:cb00:9a::,2400:cb00:ff:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:100::,2400:cb00:100:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:101::,2400:cb00:101:ffff:ffff:ffff:ffff:ffff,BR +2400:cb00:102::,2400:cb00:103:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:104::,2400:cb00:104:ffff:ffff:ffff:ffff:ffff,TH +2400:cb00:105::,2400:cb00:105:ffff:ffff:ffff:ffff:ffff,CW +2400:cb00:106::,2400:cb00:106:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:107::,2400:cb00:107:ffff:ffff:ffff:ffff:ffff,PT +2400:cb00:108::,2400:cb00:10f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:110::,2400:cb00:110:ffff:ffff:ffff:ffff:ffff,CL +2400:cb00:111::,2400:cb00:111:ffff:ffff:ffff:ffff:ffff,LK +2400:cb00:112::,2400:cb00:112:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:113::,2400:cb00:113:ffff:ffff:ffff:ffff:ffff,ZA +2400:cb00:114::,2400:cb00:114:ffff:ffff:ffff:ffff:ffff,AT +2400:cb00:115::,2400:cb00:116:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:117::,2400:cb00:117:ffff:ffff:ffff:ffff:ffff,AM +2400:cb00:118::,2400:cb00:11f:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:120::,2400:cb00:120:ffff:ffff:ffff:ffff:ffff,RS +2400:cb00:121::,2400:cb00:121:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:122::,2400:cb00:122:ffff:ffff:ffff:ffff:ffff,DJ +2400:cb00:123::,2400:cb00:123:ffff:ffff:ffff:ffff:ffff,HU +2400:cb00:124::,2400:cb00:124:ffff:ffff:ffff:ffff:ffff,HR +2400:cb00:125::,2400:cb00:125:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:126::,2400:cb00:126:ffff:ffff:ffff:ffff:ffff,IT +2400:cb00:127::,2400:cb00:127:ffff:ffff:ffff:ffff:ffff,TH +2400:cb00:128::,2400:cb00:128:ffff:ffff:ffff:ffff:ffff,SE +2400:cb00:129::,2400:cb00:129:ffff:ffff:ffff:ffff:ffff,TH +2400:cb00:12a::,2400:cb00:131:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:132::,2400:cb00:132:ffff:ffff:ffff:ffff:ffff,UA +2400:cb00:133::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US 2400:cb40::,2400:cb40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:cb80::,2400:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:cbc0::,2400:cbc0:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -7403,7 +7571,6 @@ 2401:2800::,2401:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:2840::,2401:2840:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:2880::,2401:2880:ffff:ffff:ffff:ffff:ffff:ffff,PH -2401:28c0::,2401:28c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:2900::,2401:2900:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:2940::,2401:2940:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:2980::,2401:2980:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -7517,7 +7684,7 @@ 2401:4540::,2401:4540:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:4580::,2401:4580:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:45c0::,2401:45c0:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2401:4600::,2401:4600:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:4600::,2401:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:4640::,2401:4640:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:4680::,2401:4680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:46c0::,2401:46c0:ffff:ffff:ffff:ffff:ffff:ffff,MY @@ -8025,65 +8192,123 @@ 2401:d580::,2401:d580:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:d5c0::,2401:d5c0:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:d600::,2401:d600:ffff:ffff:ffff:ffff:ffff:ffff,MN +2401:d640::,2401:d640:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:d680::,2401:d680:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:d6c0::,2401:d6c0:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:d700::,2401:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:d740::,2401:d740:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:d780::,2401:d780:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:d7c0::,2401:d7c0:ffff:ffff:ffff:ffff:ffff:ffff,FJ 2401:d800::,2401:d800:ffff:ffff:ffff:ffff:ffff:ffff,VN +2401:d840::,2401:d840:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:d880::,2401:d880:ffff:ffff:ffff:ffff:ffff:ffff,TH +2401:d8c0::,2401:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:d900::,2401:d900:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:d940::,2401:d940:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:d980::,2401:d980:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:d9c0::,2401:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:da00::,2401:da00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:da40::,2401:da40:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:da80::,2401:da80:17ff:ffff:ffff:ffff:ffff:ffff,HK 2401:da80:1800::,2401:da80:1800:7fff:ffff:ffff:ffff:ffff,PH 2401:da80:1800:8000::,2401:da80:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:dac0::,2401:dac0:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:db00::,2401:db00:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:db40::,2401:db40:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:db80::,2401:db80:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:dbc0::,2401:dbc0:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:dc00::,2401:dc00:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:dc40::,2401:dc40:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:dc80::,2401:dc80:ffff:ffff:ffff:ffff:ffff:ffff,PF +2401:dcc0::,2401:dcc0:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:dd00::,2401:dd00:ffff:ffff:ffff:ffff:ffff:ffff,LK +2401:dd40::,2401:dd40:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:dd80::,2401:dd80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:ddc0::,2401:ddc0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:de00::,2401:de00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:de40::,2401:de40:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:de80::,2401:de80:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:dec0::,2401:dec0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:df00::,2401:df01:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:df40::,2401:df40:ffff:ffff:ffff:ffff:ffff:ffff,GI 2401:df80::,2401:df80:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:dfc0::,2401:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,KI 2401:e000::,2401:e000:ffff:ffff:ffff:ffff:ffff:ffff,TH +2401:e040::,2401:e040:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:e080::,2401:e080:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:e0c0::,2401:e0c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e100::,2401:e100:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:e140::,2401:e140:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e180::,2401:e180:ffff:ffff:ffff:ffff:ffff:ffff,TW +2401:e1c0::,2401:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:e200::,2401:e200:ffff:ffff:ffff:ffff:ffff:ffff,KR +2401:e240::,2401:e240:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e280::,2401:e280:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:e2c0::,2401:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e300::,2401:e300:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:e340::,2401:e340:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e380::,2401:e380:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:e3c0::,2401:e3c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:e400::,2401:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:e440::,2401:e440:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:e480::,2401:e480:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:e4c0::,2401:e4c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:e500::,2401:e500:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:e540::,2401:e540:ffff:ffff:ffff:ffff:ffff:ffff,US 2401:e580::,2401:e580:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:e5c0::,2401:e5c0:ffff:ffff:ffff:ffff:ffff:ffff,PK 2401:e600::,2401:e600:ffff:ffff:ffff:ffff:ffff:ffff,FJ +2401:e640::,2401:e640:ffff:ffff:ffff:ffff:ffff:ffff,PK 2401:e680::,2401:e680:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:e6c0::,2401:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e700::,2401:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:e740::,2401:e740:ffff:ffff:ffff:ffff:ffff:ffff,PH 2401:e780::,2401:e780:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:e7c0::,2401:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:e800::,2401:e800:ffff:ffff:ffff:ffff:ffff:ffff,VN +2401:e840::,2401:e840:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e880::,2401:e880:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:e8c0::,2401:e8c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e900::,2401:e900:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:e940::,2401:e940:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:e980::,2401:e980:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:e9c0::,2401:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:ea00::,2401:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PK +2401:ea40::,2401:ea40:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:ea80::,2401:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:eac0::,2401:eac0:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:eb00::,2401:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:eb40::,2401:eb40:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:eb80::,2401:eb80:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:ebc0::,2401:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:ec00::,2401:ec00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:ec40::,2401:ec40:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:ec80::,2401:ec80:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2401:ecc0::,2401:ecc0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:ed00::,2401:ed00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:ed40::,2401:ed40:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:ed80::,2401:ed80:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:edc0::,2401:edc0:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:ee00::,2401:ee00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:ee40::,2401:ee40:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:ee80::,2401:ee80:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:eec0::,2401:eec0:ffff:ffff:ffff:ffff:ffff:ffff,IR 2401:ef00::,2401:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:ef40::,2401:ef40:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:ef80::,2401:ef80:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:efc0::,2401:efc0:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:f000::,2401:f000:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2401:f040::,2401:f040:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:f080::,2401:f080:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:f0c0::,2401:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:f100::,2401:f100:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:f140::,2401:f140:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:f180::,2401:f180:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:f1c0::,2401:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:f200::,2401:f200:ffff:ffff:ffff:ffff:ffff:ffff,MM +2401:f240::,2401:f240:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:f280::,2401:f280:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:f2c0::,2401:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,VN 2401:f300::,2401:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:f380::,2401:f380:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:f400::,2401:f400:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -8541,9 +8766,7 @@ 2402:c900::,2402:c900:ffff:ffff:ffff:ffff:ffff:ffff,MN 2402:c980::,2402:c980:ffff:ffff:ffff:ffff:ffff:ffff,TH 2402:ca00::,2402:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2402:ca80::,2402:ca80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:cb00::,2402:cb01:ffff:ffff:ffff:ffff:ffff:ffff,LK -2402:cb80::,2402:cb80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:cc00::,2402:cc00:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2402:cc80::,2402:cc80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2402:cd00::,2402:cd00:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -8904,7 +9127,6 @@ 2403:7700::,2403:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:7780::,2403:7780:ffff:ffff:ffff:ffff:ffff:ffff,HK 2403:7800::,2403:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP -2403:7880::,2403:7880:ffff:ffff:ffff:ffff:ffff:ffff,IN 2403:7900::,2403:7900:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:7980::,2403:7980:ffff:ffff:ffff:ffff:ffff:ffff,PK 2403:7a00::,2403:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -9067,7 +9289,6 @@ 2403:c900::,2403:c900:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2403:c980::,2403:c980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:ca00::,2403:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2403:ca80::,2403:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:cb00::,2403:cb00:ffff:ffff:ffff:ffff:ffff:ffff,SG 2403:cb80::,2403:cb80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2403:cc00::,2403:cc00:4fff:ffff:ffff:ffff:ffff:ffff,SG @@ -9381,7 +9602,6 @@ 2404:5d80:6100::,2404:5d80:ffff:ffff:ffff:ffff:ffff:ffff,JP 2404:5e00::,2404:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:5e80::,2404:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2404:5f00::,2404:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:5f80::,2404:5f80:ffff:ffff:ffff:ffff:ffff:ffff,PH 2404:6000::,2404:6000:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:6080::,2404:6080:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -9463,7 +9683,6 @@ 2404:8680:2000::,2404:8680:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:8700::,2404:8700:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:8780::,2404:8780:ffff:ffff:ffff:ffff:ffff:ffff,HK -2404:8800::,2404:8800:ffff:ffff:ffff:ffff:ffff:ffff,TH 2404:8880::,2404:8880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:8900::,2404:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:8980::,2404:8980:ffff:ffff:ffff:ffff:ffff:ffff,BN @@ -9748,7 +9967,6 @@ 2405:1780::,2405:1780:ffff:ffff:ffff:ffff:ffff:ffff,ID 2405:1800::,2405:1800:ffff:ffff:ffff:ffff:ffff:ffff,JP 2405:1880::,2405:1880:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2405:1980::,2405:1980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:1a00::,2405:1a00:ffff:ffff:ffff:ffff:ffff:ffff,KH 2405:1a80::,2405:1a80:ffff:ffff:ffff:ffff:ffff:ffff,JP 2405:1b00::,2405:1b00:ffff:ffff:ffff:ffff:ffff:ffff,NP @@ -10085,7 +10303,6 @@ 2405:b300::,2405:b300:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:b380::,2405:b380:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:b400::,2405:b400:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2405:b480::,2405:b480:ffff:ffff:ffff:ffff:ffff:ffff,GB 2405:b500::,2405:b500:ffff:ffff:ffff:ffff:ffff:ffff,US 2405:b580::,2405:b580:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:b600::,2405:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -10179,7 +10396,6 @@ 2405:e700::,2405:e700:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:e780::,2405:e780:ffff:ffff:ffff:ffff:ffff:ffff,HK 2405:e800::,2405:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP -2405:e880::,2405:e880:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2405:e980::,2405:e980:ffff:ffff:ffff:ffff:ffff:ffff,MY 2405:ea00::,2405:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:ea80::,2405:ea80:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -10205,7 +10421,6 @@ 2405:f500::,2405:f500:ffff:ffff:ffff:ffff:ffff:ffff,KH 2405:f580::,2405:f580:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:f600::,2405:f600:ffff:ffff:ffff:ffff:ffff:ffff,IN -2405:f680::,2405:f680:ffff:ffff:ffff:ffff:ffff:ffff,VG 2405:f700::,2405:f700:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:f780::,2405:f780:ffff:ffff:ffff:ffff:ffff:ffff,MY 2405:f800::,2405:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -10295,9 +10510,7 @@ 2406:2300::,2406:2300:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2406:2380::,2406:2380:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:2400::,2406:2400:ffff:ffff:ffff:ffff:ffff:ffff,ID -2406:2480::,2406:2480:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:2500::,2406:2500:ffff:ffff:ffff:ffff:ffff:ffff,BD -2406:2580::,2406:2580:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:2600::,2406:2600:ffff:ffff:ffff:ffff:ffff:ffff,JP 2406:2700::,2406:2700:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:2780::,2406:2780:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -10400,7 +10613,6 @@ 2406:5a00::,2406:5a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2406:5a80::,2406:5a80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:5b00::,2406:5b00:ffff:ffff:ffff:ffff:ffff:ffff,MY -2406:5b80::,2406:5b80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2406:5c00::,2406:5c00:ffff:ffff:ffff:ffff:ffff:ffff,ID 2406:5c80::,2406:5c80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2406:5d00::,2406:5d00:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -10784,7 +10996,9 @@ 2406:f280::,2406:f280:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:f300::,2406:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:f380::,2406:f380:ffff:ffff:ffff:ffff:ffff:ffff,HK -2406:f400::,2406:f400:ffff:ffff:ffff:ffff:ffff:ffff,SG +2406:f400::,2406:f400:12f:ffff:ffff:ffff:ffff:ffff,SG +2406:f400:130::,2406:f400:13f:ffff:ffff:ffff:ffff:ffff,JP +2406:f400:140::,2406:f400:ffff:ffff:ffff:ffff:ffff:ffff,SG 2406:f480::,2406:f480:ffff:ffff:ffff:ffff:ffff:ffff,PK 2406:f500::,2406:f500:ffff:ffff:ffff:ffff:ffff:ffff,PK 2406:f580::,2406:f580:ffff:ffff:ffff:ffff:ffff:ffff,PK @@ -11053,7 +11267,6 @@ 2407:7d80::,2407:7d80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7e80::,2407:7e80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7f00::,2407:7f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2407:7f80::,2407:7f80:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:8000::,2407:8001:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:8080::,2407:8080:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:8100::,2407:8100:ffff:ffff:ffff:ffff:ffff:ffff,SG @@ -11083,7 +11296,7 @@ 2407:8e80::,2407:8e80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:8f00::,2407:8f00:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:8f80::,2407:8f80:ffff:ffff:ffff:ffff:ffff:ffff,ID -2407:9000::,2407:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:9000::,2407:9001:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:9080::,2407:9080:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:9100::,2407:9100:ffff:ffff:ffff:ffff:ffff:ffff,KR 2407:9180::,2407:9180:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -11312,7 +11525,7 @@ 240d::,240d:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP 240d:8000::,240d:80ff:ffff:ffff:ffff:ffff:ffff:ffff,CN 240e::,240e:fff:ffff:ffff:ffff:ffff:ffff:ffff,CN -240f::,240f:ff:ffff:ffff:ffff:ffff:ffff:ffff,JP +240f::,240f:1ff:ffff:ffff:ffff:ffff:ffff:ffff,JP 240f:8000::,240f:80ff:ffff:ffff:ffff:ffff:ffff:ffff,CN 2600::,2600:7:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:100::,2600:10f:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11425,6 +11638,12 @@ 2602:233::,2602:233:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2602:feaf::,2602:feaf:fff:ffff:ffff:ffff:ffff:ffff,US +2602:feb0::,2602:feb0:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:feb1::,2602:feb1:fff:ffff:ffff:ffff:ffff:ffff,US +2602:feb2::,2602:feb2:fff:ffff:ffff:ffff:ffff:ffff,US +2602:feb3::,2602:feb3:fff:ffff:ffff:ffff:ffff:ffff,US +2602:feb4::,2602:feb4:fff:ffff:ffff:ffff:ffff:ffff,US 2602:feb5::,2602:feb5:fff:ffff:ffff:ffff:ffff:ffff,US 2602:feb6::,2602:feb6:fff:ffff:ffff:ffff:ffff:ffff,US 2602:feb7::,2602:feb7:fff:ffff:ffff:ffff:ffff:ffff,US @@ -11595,7 +11814,7 @@ 2602:ff70::,2602:ff70:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ff71::,2602:ff72:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff74::,2602:ff74:fff:ffff:ffff:ffff:ffff:ffff,CA -2602:ff75::,2602:ff75:fff:ffff:ffff:ffff:ffff:ffff,AU +2602:ff75::,2602:ff75:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff76::,2602:ff76:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ff77::,2602:ff77:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff79::,2602:ff79:fff:ffff:ffff:ffff:ffff:ffff,US @@ -11737,7 +11956,9 @@ 2603:1016:200::,2603:1016:200:37:ffff:ffff:ffff:ffff,AU 2603:1016:200:38::,2603:1016:200:ffff:ffff:ffff:ffff:ffff,US 2603:1016:201::,2603:1016:201:3f:ffff:ffff:ffff:ffff,AU -2603:1016:201:40::,2603:1016:fff:ffff:ffff:ffff:ffff:ffff,US +2603:1016:201:40::,2603:1016:227:ffff:ffff:ffff:ffff:ffff,US +2603:1016:228::,2603:1016:228:ffff:ffff:ffff:ffff:ffff,AU +2603:1016:229::,2603:1016:fff:ffff:ffff:ffff:ffff:ffff,US 2603:1016:1000::,2603:1016:11ff:ffff:ffff:ffff:ffff:ffff,AU 2603:1016:1200::,2603:1018:ffff:ffff:ffff:ffff:ffff:ffff,US 2603:1019::,2603:1019:100:ffff:ffff:ffff:ffff:ffff,AU @@ -11942,8 +12163,8 @@ 2603:1049:f00::,2603:1049:fff:ffff:ffff:ffff:ffff:ffff,US 2603:1049:1000::,2603:1049:10ff:ffff:ffff:ffff:ffff:ffff,IN 2603:1049:1100::,2603:1050::ffff:ffff:ffff:ffff:ffff,US -2603:1050:1::,2603:1050:2:ffff:ffff:ffff:ffff:ffff,BR -2603:1050:3::,2603:1050:ff:ffff:ffff:ffff:ffff:ffff,US +2603:1050:1::,2603:1050:3:ffff:ffff:ffff:ffff:ffff,BR +2603:1050:4::,2603:1050:ff:ffff:ffff:ffff:ffff:ffff,US 2603:1050:100::,2603:1050:1ff:ffff:ffff:ffff:ffff:ffff,BR 2603:1050:200::,2603:1050:20f:ffff:ffff:ffff:ffff:ffff,US 2603:1050:210::,2603:1050:21f:ffff:ffff:ffff:ffff:ffff,CL @@ -11958,8 +12179,8 @@ 2603:1056:29::,2603:1056:1ff:ffff:ffff:ffff:ffff:ffff,US 2603:1056:200::,2603:1056:20f:ffff:ffff:ffff:ffff:ffff,BR 2603:1056:210::,2603:1056:228:1:ffff:ffff:ffff:ffff,US -2603:1056:228:2::,2603:1056:228:3:ffff:ffff:ffff:ffff,BR -2603:1056:228:4::,2603:1056:3ff:ffff:ffff:ffff:ffff:ffff,US +2603:1056:228:2::,2603:1056:228:4:ffff:ffff:ffff:ffff,BR +2603:1056:228:5::,2603:1056:3ff:ffff:ffff:ffff:ffff:ffff,US 2603:1056:400::,2603:1056:4ff:ffff:ffff:ffff:ffff:ffff,BR 2603:1056:500::,2603:1056:5ff:ffff:ffff:ffff:ffff:ffff,US 2603:1056:600::,2603:1056:6ff:ffff:ffff:ffff:ffff:ffff,CL @@ -12260,7 +12481,7 @@ 2604:4540::,2604:4540:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:4580::,2604:4580:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:45c0::,2604:45c0:ffff:ffff:ffff:ffff:ffff:ffff,CA -2604:4600::,2604:4600:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:4600::,2604:460f:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:4640::,2604:4640:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:4680::,2604:4680:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:46c0::,2604:46c0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12425,29 +12646,55 @@ 2604:7000::,2604:7000:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7040::,2604:7040:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7080::,2604:7080:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:70c0::,2604:70c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7100::,2604:7100:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7140::,2604:7140:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7180::,2604:7180:fff:ffff:ffff:ffff:ffff:ffff,US +2604:71c0::,2604:71c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7200::,2604:7200:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7240::,2604:7240:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7280::,2604:7280:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:72c0::,2604:72c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7300::,2604:7300:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7340::,2604:7340:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:73c0::,2604:73c0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:7400::,2604:7400:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7440::,2604:7440:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7480::,2604:7480:ffff:ffff:ffff:ffff:ffff:ffff,CA +2604:74c0::,2604:74c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7500::,2604:7500:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7540::,2604:7540:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7580::,2604:7580:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:75c0::,2604:75c0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:7600::,2604:7600:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7640::,2604:7640:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7680::,2604:7680:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:76c0::,2604:76c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7700::,2604:7700:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7740::,2604:7740:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7780::,2604:7780:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:77c0::,2604:77c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7800::,2604:7800:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7840::,2604:7840:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7880::,2604:7880:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:78c0::,2604:78c0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:7900::,2604:7900:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7940::,2604:7940:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7980::,2604:7980:ffff:ffff:ffff:ffff:ffff:ffff,CA +2604:79c0::,2604:79c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7a00::,2604:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7a40::,2604:7a40:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:7a80::,2604:7a80:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7ac0::,2604:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7b00::,2604:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7b40::,2604:7b40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7b80::,2604:7b80:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7bc0::,2604:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7c00::,2604:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7c40::,2604:7c40:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7c80::,2604:7c80:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7cc0::,2604:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:7d40::,2604:7d40:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:7d80::,2604:7d80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7e00::,2604:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:7e80::,2604:7e80:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12573,7 +12820,6 @@ 2604:bc00::,2604:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:bc80::,2604:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:bd00::,2604:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US -2604:bd80::,2604:bd80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:be00::,2604:be00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:be80::,2604:be80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:bf00::,2604:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -13327,7 +13573,11 @@ 2606:2e00:8002::,2606:2e00:8002:7fff:ffff:ffff:ffff:ffff,JP 2606:2e00:8002:8000::,2606:2e00:800a:2:ffff:ffff:ffff:ffff,US 2606:2e00:800a:3::,2606:2e00:800a:3:ffff:ffff:ffff:ffff,HK -2606:2e00:800a:4::,2606:2e00:8014:ffff:ffff:ffff:ffff:ffff,US +2606:2e00:800a:4::,2606:2e00:800a:4::41c,US +2606:2e00:800a:4::41d,2606:2e00:800a:4::41e,HK +2606:2e00:800a:4::41f,2606:2e00:800a:4::4f0,US +2606:2e00:800a:4::4f1,2606:2e00:800a:4::4f1,HK +2606:2e00:800a:4::4f2,2606:2e00:8014:ffff:ffff:ffff:ffff:ffff,US 2606:2e00:8015::,2606:2e00:8015::ffff:ffff:ffff:ffff,AU 2606:2e00:8015:1::,2606:2e00:8015:ffff:ffff:ffff:ffff:ffff,US 2606:2e00:8016::,2606:2e00:8016::ffff:ffff:ffff:ffff,JP @@ -13714,7 +13964,9 @@ 2606:f000::,2606:f000:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f080::,2606:f080:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:f100::,2606:f100:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:f180::,2606:f18f:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:f180::,2606:f180:2:ffff:ffff:ffff:ffff:ffff,US +2606:f180:3::,2606:f180:3:ffff:ffff:ffff:ffff:ffff,DE +2606:f180:4::,2606:f18f:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f200::,2606:f200:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f280::,2606:f280:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f300::,2606:f300:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -13895,7 +14147,6 @@ 2607:4b00::,2607:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:4b80::,2607:4b80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:4c00::,2607:4c00:ffff:ffff:ffff:ffff:ffff:ffff,CA -2607:4c80::,2607:4c80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:4d00::,2607:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:4d80::,2607:4d80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:4e00::,2607:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14191,7 +14442,6 @@ 2607:e200::,2607:e200:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:e280::,2607:e280:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:e300::,2607:e300:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:e380::,2607:e380:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:e400::,2607:e400:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:e480::,2607:e480:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:e500::,2607:e500:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14267,7 +14517,6 @@ 2607:f1a0::,2607:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f1a8::,2607:f1a8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f1b0::,2607:f1b0:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:f1b8::,2607:f1b8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f1c0::,2607:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f1c8::,2607:f1c8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f1d0::,2607:f1d0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14312,9 +14561,13 @@ 2607:f340::,2607:f340:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f348::,2607:f348:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f350::,2607:f350:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:f358::,2607:f358:20:467:3b8c:afeb:b1c4:942b,US +2607:f358::,2607:f358:1e:ffff:ffff:ffff:ffff:ffff,US +2607:f358:1f::,2607:f358:1f:ffff:ffff:ffff:ffff:ffff,DE +2607:f358:20::,2607:f358:20:467:3b8c:afeb:b1c4:942b,US 2607:f358:20:467:3b8c:afeb:b1c4:942c,2607:f358:20:467:3b8c:afeb:b1c4:942c,PH -2607:f358:20:467:3b8c:afeb:b1c4:942d,2607:f358:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f358:20:467:3b8c:afeb:b1c4:942d,2607:f358:20:ffff:ffff:ffff:ffff:ffff,US +2607:f358:21::,2607:f358:21:ffff:ffff:ffff:ffff:ffff,DE +2607:f358:22::,2607:f358:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f360::,2607:f360:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f368::,2607:f368:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f370::,2607:f370:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14508,7 +14761,6 @@ 2607:f9d8::,2607:f9d8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f9e0::,2607:f9e0:fff:ffff:ffff:ffff:ffff:ffff,US 2607:f9f0::,2607:f9f1:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:f9f8::,2607:f9f8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fa00::,2607:fa00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fa08::,2607:fa08:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fa10::,2607:fa10:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14555,7 +14807,9 @@ 2607:fb78::,2607:fb78:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fb80::,2607:fb80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fb88::,2607:fb88:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:fb90::,2607:fb90:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fb90::,2607:fb90:75ff:ffff:ffff:ffff:ffff:ffff,US +2607:fb90:7600::,2607:fb90:76ff:ffff:ffff:ffff:ffff:ffff,PR +2607:fb90:7700::,2607:fb90:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fb98::,2607:fb98:1b:ffff:ffff:ffff:ffff:ffff,US 2607:fb98:1c::,2607:fb98:1c:ffff:ffff:ffff:ffff:ffff,CA 2607:fb98:1d::,2607:fb98:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14824,8 +15078,7 @@ 2620:0:660::,2620::660:ffff:ffff:ffff:ffff:ffff,US 2620:0:670::,2620::671:ffff:ffff:ffff:ffff:ffff,US 2620:0:680::,2620::680:ffff:ffff:ffff:ffff:ffff,US -2620:0:690::,2620::691:ffff:ffff:ffff:ffff:ffff,US -2620:0:6a0::,2620::6a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:690::,2620::6a0:ffff:ffff:ffff:ffff:ffff,US 2620:0:6b0::,2620::6b0:ffff:ffff:ffff:ffff:ffff,US 2620:0:6c0::,2620::6c7:ffff:ffff:ffff:ffff:ffff,US 2620:0:6d0::,2620::6d0:ffff:ffff:ffff:ffff:ffff,US @@ -14891,7 +15144,6 @@ 2620:0:ccf::,2620::ccf:ffff:ffff:ffff:ffff:ffff,AU 2620:0:ce0::,2620::ce0:ffff:ffff:ffff:ffff:ffff,US 2620:0:cf0::,2620::cf0:ffff:ffff:ffff:ffff:ffff,US -2620:0:d20::,2620::d20:ffff:ffff:ffff:ffff:ffff,US 2620:0:d30::,2620::d30:ffff:ffff:ffff:ffff:ffff,US 2620:0:d50::,2620::d50:ffff:ffff:ffff:ffff:ffff,US 2620:0:d60::,2620::d63:ffff:ffff:ffff:ffff:ffff,US @@ -14993,7 +15245,6 @@ 2620:0:2830::,2620::2830:ffff:ffff:ffff:ffff:ffff,US 2620:0:2840::,2620::2840:ffff:ffff:ffff:ffff:ffff,US 2620:0:2850::,2620::2850:ffff:ffff:ffff:ffff:ffff,US -2620:0:2860::,2620::2860:ffff:ffff:ffff:ffff:ffff,US 2620:0:2880::,2620::2880:ffff:ffff:ffff:ffff:ffff,US 2620:0:28a0::,2620::28b0:ffff:ffff:ffff:ffff:ffff,US 2620:0:28d0::,2620::28d0:ffff:ffff:ffff:ffff:ffff,US @@ -15422,23 +15673,37 @@ 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:e000:ffff:ffff:ffff:ffff:ffff,US 2620:37::,2620:37::ffff:ffff:ffff:ffff:ffff,US +2620:37:2000::,2620:37:2000:ffff:ffff:ffff:ffff:ffff,US 2620:37:4000::,2620:37:400f:ffff:ffff:ffff:ffff:ffff,US 2620:37:8000::,2620:37:8000:ffff:ffff:ffff:ffff:ffff,US +2620:37:a000::,2620:37:a000:ffff:ffff:ffff:ffff:ffff,US 2620:37:c000::,2620:37:c000:ffff:ffff:ffff:ffff:ffff,US +2620:37:e000::,2620:37:e000:ffff:ffff:ffff:ffff:ffff,US 2620:38::,2620:38::ffff:ffff:ffff:ffff:ffff,US +2620:38:2000::,2620:38:2000:ffff:ffff:ffff:ffff:ffff,US 2620:38:4000::,2620:38:400f:ffff:ffff:ffff:ffff:ffff,US 2620:38:8000::,2620:38:8000:ffff:ffff:ffff:ffff:ffff,US +2620:38:a000::,2620:38:a000:ffff:ffff:ffff:ffff:ffff,US 2620:38:c000::,2620:38:c000:ffff:ffff:ffff:ffff:ffff,US +2620:38:e000::,2620:38:e000:ffff:ffff:ffff:ffff:ffff,US 2620:39::,2620:39::ffff:ffff:ffff:ffff:ffff,US +2620:39:2000::,2620:39:2000:ffff:ffff:ffff:ffff:ffff,US 2620:39:4000::,2620:39:4000:ffff:ffff:ffff:ffff:ffff,US +2620:39:6000::,2620:39:6000:ffff:ffff:ffff:ffff:ffff,US 2620:39:8000::,2620:39:8000:ffff:ffff:ffff:ffff:ffff,US +2620:39:a000::,2620:39:a000:ffff:ffff:ffff:ffff:ffff,US 2620:39:c000::,2620:39:c00f:ffff:ffff:ffff:ffff:ffff,US 2620:3a::,2620:3a::ffff:ffff:ffff:ffff:ffff,US +2620:3a:2000::,2620:3a:2000:ffff:ffff:ffff:ffff:ffff,US 2620:3a:4000::,2620:3a:400f:ffff:ffff:ffff:ffff:ffff,US 2620:3a:8000::,2620:3a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3a:a000::,2620:3a:a000:ffff:ffff:ffff:ffff:ffff,US 2620:3a:c000::,2620:3a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:3a:e000::,2620:3a:e000:ffff:ffff:ffff:ffff:ffff,US 2620:3b::,2620:3b::ffff:ffff:ffff:ffff:ffff,US +2620:3b:2000::,2620:3b:2000:ffff:ffff:ffff:ffff:ffff,US 2620:3b:4000::,2620:3b:4000:ffff:ffff:ffff:ffff:ffff,US 2620:3b:8000::,2620:3b:8000:ffff:ffff:ffff:ffff:ffff,US 2620:3b:c000::,2620:3b:c00f:ffff:ffff:ffff:ffff:ffff,US @@ -15966,7 +16231,6 @@ 2620:c4:c000::,2620:c4:c000:ffff:ffff:ffff:ffff:ffff,CA 2620:c5::,2620:c5::ffff:ffff:ffff:ffff:ffff,US 2620:c5:4000::,2620:c5:4000:ffff:ffff:ffff:ffff:ffff,US -2620:c5:8000::,2620:c5:8000:ffff:ffff:ffff:ffff:ffff,US 2620:c5:c000::,2620:c5:c000:ffff:ffff:ffff:ffff:ffff,US 2620:c6::,2620:c6::ffff:ffff:ffff:ffff:ffff,US 2620:c6:4000::,2620:c6:4000:ffff:ffff:ffff:ffff:ffff,US @@ -16422,7 +16686,6 @@ 2620:10d:c0e1:8000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US 2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA 2620:10d:e000::,2620:10d:e00f:ffff:ffff:ffff:ffff:ffff,CA -2620:10d:f000::,2620:10d:f00f:ffff:ffff:ffff:ffff:ffff,US 2620:10e::,2620:10e:f:ffff:ffff:ffff:ffff:ffff,US 2620:10e:1000::,2620:10e:100f:ffff:ffff:ffff:ffff:ffff,US 2620:10e:2000::,2620:10e:200f:ffff:ffff:ffff:ffff:ffff,US @@ -16512,7 +16775,6 @@ 2620:113:80c0:8000::,2620:113:80ff:ffff:ffff:ffff:ffff:ffff,US 2620:113:9000::,2620:113:900f:ffff:ffff:ffff:ffff:ffff,US 2620:113:a000::,2620:113:a00f:ffff:ffff:ffff:ffff:ffff,US -2620:113:b000::,2620:113:b00f:ffff:ffff:ffff:ffff:ffff,US 2620:113:c000::,2620:113:c0ff:ffff:ffff:ffff:ffff:ffff,US 2620:113:d000::,2620:113:d00f:ffff:ffff:ffff:ffff:ffff,US 2620:113:e000::,2620:113:e00f:ffff:ffff:ffff:ffff:ffff,US @@ -17012,6 +17274,19 @@ 2620:133:2000::,2620:133:20ff:ffff:ffff:ffff:ffff:ffff,US 2620:133:3000::,2620:133:30ff:ffff:ffff:ffff:ffff:ffff,US 2620:133:4000::,2620:133:40ff:ffff:ffff:ffff:ffff:ffff,US +2620:133:5000::,2620:133:500f:ffff:ffff:ffff:ffff:ffff,US +2620:133:6000::,2620:133:600f:ffff:ffff:ffff:ffff:ffff,US +2620:133:7000::,2620:133:70ff:ffff:ffff:ffff:ffff:ffff,US +2620:133:8000::,2620:133:800f:ffff:ffff:ffff:ffff:ffff,US +2620:133:9000::,2620:133:900f:ffff:ffff:ffff:ffff:ffff,US +2620:133:a000::,2620:133:a0ff:ffff:ffff:ffff:ffff:ffff,CA +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:e000::,2620:133:e00f: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:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US 2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US 2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US @@ -17084,7 +17359,7 @@ 2620:18d::,2620:18d:fff:ffff:ffff:ffff:ffff:ffff,US 2620:18e::,2620:18e:fff:ffff:ffff:ffff:ffff:ffff,US 2620:18f::,2620:18f:fff:ffff:ffff:ffff:ffff:ffff,US -2620:190::,2620:190:ffff:ffff:ffff:ffff:ffff:ffff,US +2620:190::,2620:191:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1a0::,2620:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1b0::,2620:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1c0::,2620:1c0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -17458,6 +17733,7 @@ 2801:14:8000::,2801:14:8000:ffff:ffff:ffff:ffff:ffff,CO 2801:14:9000::,2801:14:9000:ffff:ffff:ffff:ffff:ffff,CL 2801:14:a000::,2801:14:a001:ffff:ffff:ffff:ffff:ffff,UY +2801:14:b000::,2801:14:b000:ffff:ffff:ffff:ffff:ffff,AR 2801:14:c000::,2801:14:c000:ffff:ffff:ffff:ffff:ffff,BO 2801:14:d000::,2801:14:d00f:ffff:ffff:ffff:ffff:ffff,PA 2801:14:e000::,2801:14:e000:ffff:ffff:ffff:ffff:ffff,PY @@ -17558,6 +17834,7 @@ 2801:1c:6000::,2801:1c:6000:ffff:ffff:ffff:ffff:ffff,PA 2801:1c:8000::,2801:1c:8000:ffff:ffff:ffff:ffff:ffff,EC 2801:1c:a000::,2801:1c:a000:ffff:ffff:ffff:ffff:ffff,CO +2801:1c:b000::,2801:1c:b000:ffff:ffff:ffff:ffff:ffff,AR 2801:1c:c000::,2801:1c:c000:ffff:ffff:ffff:ffff:ffff,HN 2801:1c:d000::,2801:1c:d000:ffff:ffff:ffff:ffff:ffff,AR 2801:1c:e000::,2801:1c:e000:ffff:ffff:ffff:ffff:ffff,CO @@ -17966,6 +18243,10 @@ 2801:80:2240::,2801:80:2240:ffff:ffff:ffff:ffff:ffff,BR 2801:80:2250::,2801:80:2251:ffff:ffff:ffff:ffff:ffff,BR 2801:80:2260::,2801:80:2260:ffff:ffff:ffff:ffff:ffff,BR +2801:80:2270::,2801:80:2270:ffff:ffff:ffff:ffff:ffff,BR +2801:80:2280::,2801:80:2281:ffff:ffff:ffff:ffff:ffff,BR +2801:80:2290::,2801:80:2290:ffff:ffff:ffff:ffff:ffff,BR +2801:80:22a0::,2801:80:22a0: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 @@ -18078,6 +18359,7 @@ 2803:180::,2803:180:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:1c0::,2803:1c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:200::,2803:200:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:220::,2803:220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:240::,2803:240:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:280::,2803:280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2c0::,2803:2c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18094,6 +18376,7 @@ 2803:580::,2803:580:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5c0::,2803:5c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:600::,2803:600:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:620::,2803:620:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:640::,2803:640:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:680::,2803:680:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6c0::,2803:6c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18111,6 +18394,7 @@ 2803:980::,2803:980:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:9c0::,2803:9c0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:a00::,2803:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:a20::,2803:a20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:a40::,2803:a40:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:a80::,2803:a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:ac0::,2803:ac0:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -18149,6 +18433,7 @@ 2803:1180::,2803:1180:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:11c0::,2803:11c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1200::,2803:1200:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:1220::,2803:1220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1240::,2803:1240:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1280::,2803:1280:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:12c0::,2803:12c0:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -18165,6 +18450,7 @@ 2803:1580::,2803:1580:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:15c0::,2803:15c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ +2803:1620::,2803:1620:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:1640::,2803:1640:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:1680::,2803:1680:ffff:ffff:ffff:ffff:ffff:ffff,GF 2803:16c0::,2803:16c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18179,6 +18465,7 @@ 2803:1940::,2803:1940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:19c0::,2803:19c0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:1a00::,2803:1a00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:1a20::,2803:1a20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1a40::,2803:1a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1a80::,2803:1a80:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:1ac0::,2803:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -18186,6 +18473,7 @@ 2803:1b40::,2803:1b40:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:1b80::,2803:1b80:ffff:ffff:ffff:ffff:ffff:ffff,TT 2803:1bc0::,2803:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:1c20::,2803:1c20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:1c40::,2803:1c40:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:1c80::,2803:1c80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1cc0::,2803:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18210,6 +18498,7 @@ 2803:2180::,2803:2180:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:21c0::,2803:21c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2200::,2803:2200:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:2220::,2803:2220:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:2240::,2803:2240:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2280::,2803:2280:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:22c0::,2803:22c0:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -18227,6 +18516,7 @@ 2803:2580::,2803:2580:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:25c0::,2803:25c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:2600::,2803:2600:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:2620::,2803:2620:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:2640::,2803:2640:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:2680::,2803:2680:ffff:ffff:ffff:ffff:ffff:ffff,UY 2803:26c0::,2803:26c0:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -18244,6 +18534,7 @@ 2803:2980::,2803:2980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:29c0::,2803:29c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2a00::,2803:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PY +2803:2a20::,2803:2a20:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2a40::,2803:2a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2a80::,2803:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:2ac0::,2803:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18277,6 +18568,7 @@ 2803:3180::,2803:3180:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:31c0::,2803:31c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3200::,2803:3200:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:3220::,2803:3220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3240::,2803:3240:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:3280::,2803:3280:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:32c0::,2803:32c0:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -18311,6 +18603,7 @@ 2803:3980::,2803:3980:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:39c0::,2803:39c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3a00::,2803:3a00:ffff:ffff:ffff:ffff:ffff:ffff,GT +2803:3a20::,2803:3a20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3a40::,2803:3a40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3a80::,2803:3a80:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:3ac0::,2803:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18319,6 +18612,7 @@ 2803:3b80::,2803:3b80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3bc0::,2803:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:3c00::,2803:3c00:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:3c20::,2803:3c20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:3c40::,2803:3c40:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:3c80::,2803:3c80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3cc0::,2803:3cc0:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -18344,6 +18638,7 @@ 2803:4180::,2803:4180:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:41c0::,2803:41c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4200::,2803:4200:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:4220::,2803:4220:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:4240::,2803:4240:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:4280::,2803:4280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:42c0::,2803:42c0:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -18361,6 +18656,7 @@ 2803:4580::,2803:4580:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:45c0::,2803:45c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4600::,2803:4600:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:4620::,2803:4620:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:4640::,2803:4640:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4680::,2803:4680:ffff:ffff:ffff:ffff:ffff:ffff,TT 2803:46c0::,2803:46c0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -18377,6 +18673,7 @@ 2803:4940::,2803:4940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4980::,2803:4980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:49c0::,2803:49c0:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:4a20::,2803:4a20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4a40::,2803:4a40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4a80::,2803:4a80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4ac0::,2803:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,BO @@ -18411,6 +18708,7 @@ 2803:5180::,2803:5180:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:51c0::,2803:51c0:ffff:ffff:ffff:ffff:ffff:ffff,SX 2803:5200::,2803:5200:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:5220::,2803:5220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5240::,2803:5240:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5280::,2803:5280:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:52c0::,2803:52c0:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -18428,6 +18726,7 @@ 2803:5580::,2803:5580:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:55c0::,2803:55c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5600::,2803:5600:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:5620::,2803:5620:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5640::,2803:5640:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:5680::,2803:5680:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:56c0::,2803:56c0:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -18444,6 +18743,7 @@ 2803:5980::,2803:5980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:59c0::,2803:59c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:5a00::,2803:5a00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:5a20::,2803:5a20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5a40::,2803:5a40:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:5a80::,2803:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:5ac0::,2803:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -18452,6 +18752,7 @@ 2803:5b80::,2803:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5bc0::,2803:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5c00::,2803:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BO +2803:5c20::,2803:5c20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5c40::,2803:5c40:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:5c80::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5cc0::,2803:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -18476,6 +18777,7 @@ 2803:6180::,2803:6180:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:61c0::,2803:61c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6200::,2803:6200:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:6220::,2803:6220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6240::,2803:6240:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:6280::,2803:6280:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:62c0::,2803:62c0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -18493,6 +18795,7 @@ 2803:6580::,2803:6580:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:65c0::,2803:65c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:6620::,2803:6620:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:6680::,2803:6680:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:66c0::,2803:66c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6700::,2803:6700:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -18509,6 +18812,7 @@ 2803:6980::,2803:6980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:69c0::,2803:69c0:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:6a00::,2803:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:6a20::,2803:6a20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:6a40::,2803:6a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6a80::,2803:6a80:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:6ac0::,2803:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18543,6 +18847,7 @@ 2803:7180::,2803:7180:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:71c0::,2803:71c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7200::,2803:7200:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:7220::,2803:7220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7240::,2803:7240:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7280::,2803:7280:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:72c0::,2803:72c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18577,6 +18882,7 @@ 2803:7980::,2803:7980:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:79c0::,2803:79c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7a00::,2803:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:7a20::,2803:7a20:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:7a40::,2803:7a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7a80::,2803:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:7ac0::,2803:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18585,6 +18891,7 @@ 2803:7b80::,2803:7b80:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:7bc0::,2803:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:7c00::,2803:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:7c20::,2803:7c20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:7c40::,2803:7c40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7c80::,2803:7c80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:7cc0::,2803:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -18610,6 +18917,7 @@ 2803:8180::,2803:8180:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:81c0::,2803:81c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:8200::,2803:8200:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:8220::,2803:8220:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:8240::,2803:8240:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8280::,2803:8280:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:82c0::,2803:82c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18627,6 +18935,7 @@ 2803:8580::,2803:8580:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:85c0::,2803:85c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8600::,2803:8600:ffff:ffff:ffff:ffff:ffff:ffff,HT +2803:8620::,2803:8620:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8640::,2803:8640:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8680::,2803:8680:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:86c0::,2803:86c0:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -18643,6 +18952,7 @@ 2803:8940::,2803:8940:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:8980::,2803:8980:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:89c0::,2803:89c0:ffff:ffff:ffff:ffff:ffff:ffff,HN +2803:8a20::,2803:8a20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8a40::,2803:8a40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8ac0::,2803:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -18677,6 +18987,7 @@ 2803:9180::,2803:9180:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:91c0::,2803:91c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9200::,2803:9200:ffff:ffff:ffff:ffff:ffff:ffff,SV +2803:9220::,2803:9220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9240::,2803:9240:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9280::,2803:9280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:92c0::,2803:92c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18694,6 +19005,7 @@ 2803:9580::,2803:9580:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:95c0::,2803:95c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:9600::,2803:9600:ffff:ffff:ffff:ffff:ffff:ffff,CW +2803:9620::,2803:9620:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9640::,2803:9640:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:9680::,2803:9680:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:96c0::,2803:96c0:ffff:ffff:ffff:ffff:ffff:ffff,PA @@ -18710,6 +19022,7 @@ 2803:9980::,2803:9980:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:99c0::,2803:99c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9a00::,2803:9a00:ffff:ffff:ffff:ffff:ffff:ffff,BZ +2803:9a20::,2803:9a20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9a40::,2803:9a40:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:9a80::,2803:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:9ac0::,2803:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -18718,6 +19031,7 @@ 2803:9b80::,2803:9b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9bc0::,2803:9bc0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:9c00::,2803:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:9c20::,2803:9c20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:9c40::,2803:9c40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9c80::,2803:9c80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9cc0::,2803:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -18743,6 +19057,7 @@ 2803:a180::,2803:a180:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:a1c0::,2803:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:a200::,2803:a200:ffff:ffff:ffff:ffff:ffff:ffff,SR +2803:a220::,2803:a220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a240::,2803:a240:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:a280::,2803:a280:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:a2c0::,2803:a2c0:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -18759,6 +19074,7 @@ 2803:a580::,2803:a580:ffff:ffff:ffff:ffff:ffff:ffff,HT 2803:a5c0::,2803:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:a600::,2803:a600:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:a620::,2803:a620:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a640::,2803:a640:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:a680::,2803:a680:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a6c0::,2803:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,CR @@ -18775,6 +19091,7 @@ 2803:a980::,2803:a980:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:a9c0::,2803:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:aa00::,2803:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:aa20::,2803:aa20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:aa40::,2803:aa40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:aa80::,2803:aa80:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:aac0::,2803:aac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18808,6 +19125,7 @@ 2803:b180::,2803:b180:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:b1c0::,2803:b1c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:b200::,2803:b200:ffff:ffff:ffff:ffff:ffff:ffff,UY +2803:b220::,2803:b220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b240::,2803:b240:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:b280::,2803:b280:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:b2c0::,2803:b2c0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -18841,6 +19159,7 @@ 2803:b940::,2803:b940:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:b9c0::,2803:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT +2803:ba20::,2803:ba20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ba40::,2803:ba40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ba80::,2803:ba80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:bac0::,2803:bac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18849,6 +19168,7 @@ 2803:bb80::,2803:bb80:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:bbc0::,2803:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:bc00::,2803:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:bc20::,2803:bc20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:bc40::,2803:bc40:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:bc80::,2803:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:bcc0::,2803:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18874,6 +19194,7 @@ 2803:c180::,2803:c180:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:c1c0::,2803:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c200::,2803:c200:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:c220::,2803:c220:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c240::,2803:c240:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:c280::,2803:c280:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c2c0::,2803:c2c0:ffff:ffff:ffff:ffff:ffff:ffff,EC @@ -18891,6 +19212,7 @@ 2803:c580::,2803:c580:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c5c0::,2803:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL +2803:c620::,2803:c620:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c640::,2803:c640:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c680::,2803:c680:ffff:ffff:ffff:ffff:ffff:ffff,HT 2803:c6c0::,2803:c6c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18908,6 +19230,7 @@ 2803:c980::,2803:c980:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:c9c0::,2803:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ca00::,2803:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:ca20::,2803:ca20:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:ca40::,2803:ca40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ca80::,2803:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:cac0::,2803:cac0:ffff:ffff:ffff:ffff:ffff:ffff,HT @@ -18944,6 +19267,7 @@ 2803:d180::,2803:d180:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:d1c0::,2803:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:d200::,2803:d200:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:d220::,2803:d220:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:d240::,2803:d240:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:d280::,2803:d280:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:d2c0::,2803:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18977,6 +19301,7 @@ 2803:d980::,2803:d980:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:d9c0::,2803:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:da00::,2803:da00:ffff:ffff:ffff:ffff:ffff:ffff,GY +2803:da20::,2803:da20:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:da40::,2803:da40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:da80::,2803:da80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:dac0::,2803:dac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -18985,6 +19310,7 @@ 2803:db80::,2803:db80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:dbc0::,2803:dbc0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:dc00::,2803:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:dc20::,2803:dc20:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:dc40::,2803:dc40:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:dc80::,2803:dc80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:dcc0::,2803:dcc0:ffff:ffff:ffff:ffff:ffff:ffff,CR @@ -19010,6 +19336,7 @@ 2803:e180::,2803:e180:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:e1c0::,2803:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:e200::,2803:e200:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:e220::,2803:e220:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:e240::,2803:e240:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:e280::,2803:e280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e2c0::,2803:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -19027,6 +19354,7 @@ 2803:e580::,2803:e580:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:e5c0::,2803:e5c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e600::,2803:e600:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:e620::,2803:e620:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:e640::,2803:e640:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:e680::,2803:e680:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:e6c0::,2803:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,SV @@ -19043,6 +19371,7 @@ 2803:e940::,2803:e940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e9c0::,2803:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea00::,2803:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:ea20::,2803:ea20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea40::,2803:ea40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea80::,2803:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:eac0::,2803:eac0:ffff:ffff:ffff:ffff:ffff:ffff,CR @@ -19078,6 +19407,7 @@ 2803:f180::,2803:f180:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:f1c0::,2803:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:f200::,2803:f200:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:f220::,2803:f220:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f240::,2803:f240:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f280::,2803:f280:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:f2c0::,2803:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,PY @@ -19111,6 +19441,7 @@ 2803:f980::,2803:f980:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:f9c0::,2803:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fa00::,2803:fa00:ffff:ffff:ffff:ffff:ffff:ffff,BO +2803:fa20::,2803:fa20:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fa40::,2803:fa40:ffff:ffff:ffff:ffff:ffff:ffff,SV 2803:fa80::,2803:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fac0::,2803:fac0:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -19119,6 +19450,7 @@ 2803:fb80::,2803:fb80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fbc0::,2803:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:fc00::,2803:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PY +2803:fc20::,2803:fc20:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:fc40::,2803:fc40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fc80::,2803:fc80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fcc0::,2803:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -23366,6 +23698,115 @@ 2804:4464::,2804:4464:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:4468::,2804:4468:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:446c::,2804:446c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4470::,2804:4470:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4474::,2804:4474:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4478::,2804:4478:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:447c::,2804:447c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4480::,2804:4480:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4484::,2804:4484:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4488::,2804:4488:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:448c::,2804:448c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4490::,2804:4490:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4494::,2804:4494:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4498::,2804:4498:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:449c::,2804:449c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44a0::,2804:44a0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44a4::,2804:44a4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44a8::,2804:44a8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44ac::,2804:44ac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44b0::,2804:44b0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44b4::,2804:44b4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44b8::,2804:44b8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44bc::,2804:44bc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44c0::,2804:44c0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44c4::,2804:44c4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44c8::,2804:44c8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44cc::,2804:44cc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44d0::,2804:44d0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44d4::,2804:44d4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44d8::,2804:44d8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44dc::,2804:44dc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44e0::,2804:44e0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44e4::,2804:44e4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44e8::,2804:44e8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44ec::,2804:44ec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44f0::,2804:44f0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:44f4::,2804:44f4:ffff:ffff:ffff:ffff:ffff:ffff,BR +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 +2804:4514::,2804:4514:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4518::,2804:4518:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:451c::,2804:451c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4520::,2804:4520:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4524::,2804:4524:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4528::,2804:4528:ffff:ffff:ffff:ffff:ffff:ffff,BR +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:453c::,2804:453c:ffff:ffff:ffff:ffff:ffff:ffff,BR +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 +2804:454c::,2804:454c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4550::,2804:4550:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4554::,2804:4554:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4558::,2804:4558:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:455c::,2804:455c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4560::,2804:4560:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4564::,2804:4564:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4568::,2804:4568:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:456c::,2804:456c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4570::,2804:4570:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4574::,2804:4574:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4578::,2804:4578:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:457c::,2804:457c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4580::,2804:4580:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4584::,2804:4584:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4588::,2804:4588:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:458c::,2804:458c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4590::,2804:4590:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4594::,2804:4594:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4598::,2804:4598:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:459c::,2804:459c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45a0::,2804:45a0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45a4::,2804:45a4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45a8::,2804:45a8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45ac::,2804:45ac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45b0::,2804:45b0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45b4::,2804:45b4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45b8::,2804:45b8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45bc::,2804:45bc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45c0::,2804:45c0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45c4::,2804:45c4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45c8::,2804:45c8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45cc::,2804:45cc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45d0::,2804:45d0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45d4::,2804:45d4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45d8::,2804:45d8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45dc::,2804:45dc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45e0::,2804:45e0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45e4::,2804:45e4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45e8::,2804:45e8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45ec::,2804:45ec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45f0::,2804:45f0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45f4::,2804:45f4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45f8::,2804:45f8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:45fc::,2804:45fc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4600::,2804:4600:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4604::,2804:4604:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4608::,2804:4608:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:460c::,2804:460c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4610::,2804:4610:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4614::,2804:4614:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4618::,2804:4618:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:461c::,2804:461c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:4620::,2804:4620:ffff:ffff:ffff:ffff:ffff:ffff,BR 2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:200::,2806:216::ffff:ffff:ffff:ffff:ffff,MX 2806:217::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX @@ -23736,7 +24177,7 @@ 2a00:1748::,2a00:1748:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1750::,2a00:1750:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:1758::,2a00:1758:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a00:1760::,2a00:1760:ffff:ffff:ffff:ffff:ffff:ffff,BY +2a00:1760::,2a00:1767:ffff:ffff:ffff:ffff:ffff:ffff,BY 2a00:1768::,2a00:176f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:1778::,2a00:1778:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a00:1780::,2a00:1780:ffff:ffff:ffff:ffff:ffff:ffff,LV @@ -23751,7 +24192,7 @@ 2a00:17c8::,2a00:17d0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:17d8::,2a00:17df:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:17e0::,2a00:17e0:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a00:17e8::,2a00:17e8:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a00:17e8::,2a00:17ef:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a00:17f0::,2a00:17f7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:17f8::,2a00:17f8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:1800::,2a00:1800:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -23799,7 +24240,7 @@ 2a00:1968::,2a00:196f:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:1970::,2a00:1970:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1978::,2a00:1978:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:1980::,2a00:1980:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a00:1980::,2a00:1987:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:1988::,2a00:1988:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:1990::,2a00:1990:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:1998::,2a00:1998:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -23983,7 +24424,7 @@ 2a00:1f18::,2a00:1f1f:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a00:1f20::,2a00:1f20:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a00:1f28::,2a00:1f28:ffff:ffff:ffff:ffff:ffff:ffff,AM -2a00:1f30::,2a00:1f30:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a00:1f30::,2a00:1f37:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a00:1f38::,2a00:1f38:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1f40::,2a00:1f47:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:1f48::,2a00:1f4f:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -24337,7 +24778,7 @@ 2a00:68a0::,2a00:68a0:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a00:68c0::,2a00:68c0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:68e0::,2a00:68e0:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a00:6900::,2a00:6900:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:6900::,2a00:6907:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:6920::,2a00:6920:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a00:6940::,2a00:6940:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:6960::,2a00:6960:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -25213,7 +25654,6 @@ 2a00:d540::,2a00:d547:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:d560::,2a00:d567:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:d580::,2a00:d580:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:d5a0::,2a00:d5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:d5c0::,2a00:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:d5e0::,2a00:d5e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:d600::,2a00:d600:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -26443,7 +26883,6 @@ 2a01:5d8::,2a01:5df:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:5e0::,2a01:5e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:5f0::,2a01:5f7:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a01:5f8::,2a01:5f8:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:600::,2a01:600:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a01:608::,2a01:608:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a01:610::,2a01:610:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -26950,7 +27389,7 @@ 2a01:7780::,2a01:7780:ffff:ffff:ffff:ffff:ffff:ffff,KW 2a01:77a0::,2a01:77a0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:77c0::,2a01:77c0:ffff:ffff:ffff:ffff:ffff:ffff,DK -2a01:77e0::,2a01:77e0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a01:77e0::,2a01:77e7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:7800::,2a01:7800:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:7820::,2a01:7820:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7840::,2a01:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -27356,7 +27795,6 @@ 2a01:ab00::,2a01:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:ab20::,2a01:ab20:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:ab40::,2a01:ab40:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:ab60::,2a01:ab60:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:ab80::,2a01:ab80:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:aba0::,2a01:aba0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a01:abc0::,2a01:abc0:ffff:ffff:ffff:ffff:ffff:ffff,MT @@ -27561,7 +27999,6 @@ 2a02:98::,2a02:98:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:a0::,2a02:a0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:a8::,2a02:a8:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:b0::,2a02:b0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:b8::,2a02:b8:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a02:c0::,2a02:c0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:c8::,2a02:c8:ffff:ffff:ffff:ffff:ffff:ffff,BE @@ -28306,7 +28743,6 @@ 2a02:25a0::,2a02:25a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:25a8::,2a02:25af:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:25b0::,2a02:25b0:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a02:25b8::,2a02:25b8:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:25c0::,2a02:25c0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:25c8::,2a02:25c8:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:25d0::,2a02:25d0:ffff:ffff:ffff:ffff:ffff:ffff,LT @@ -28399,7 +28835,6 @@ 2a02:2838::,2a02:2838:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:2840::,2a02:2840:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2848::,2a02:2848:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a02:2850::,2a02:2850:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:2858::,2a02:285f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:2860::,2a02:2867:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:2868::,2a02:2868:ffff:ffff:ffff:ffff:ffff:ffff,IL @@ -28621,7 +29056,9 @@ 2a02:4a60::,2a02:4a60:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:4a80::,2a02:4a80:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:4aa0::,2a02:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a02:4ac0::,2a02:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a02:4ac0::,2a02:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a02:4ac1::,2a02:4ac1:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a02:4ac2::,2a02:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:4ae0::,2a02:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:4b00::,2a02:4b07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:4b40::,2a02:4b40:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -28912,7 +29349,6 @@ 2a02:6ea0:cc00::1,2a02:6ea0:cc00::1,US 2a02:6ea0:cc00::2,2a02:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:6ec0::,2a02:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a02:6ee0::,2a02:6ee0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:6f00::,2a02:6f00:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a02:6f20::,2a02:6f20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:6f40::,2a02:6f40:ffff:ffff:ffff:ffff:ffff:ffff,HU @@ -29584,7 +30020,9 @@ 2a03:1ac0::,2a03:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:1ae0::,2a03:1ae0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:1b00::,2a03:1b00:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:1b20::,2a03:1b20:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:1b20::,2a03:1b20:2:ffff:ffff:ffff:ffff:ffff,SE +2a03:1b20:3::,2a03:1b20:3:ffff:ffff:ffff:ffff:ffff,NL +2a03:1b20:4::,2a03:1b20:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:1b40::,2a03:1b40:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a03:1b60::,2a03:1b60:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:1b80::,2a03:1b87:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -30244,7 +30682,6 @@ 2a03:6b60::,2a03:6b60:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:6b80::,2a03:6b80:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:6ba0::,2a03:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a03:6be0::,2a03:6be0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:6c00::,2a03:6c00:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:6c20::,2a03:6c20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:6c40::,2a03:6c40:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -30344,7 +30781,6 @@ 2a03:7800::,2a03:7800:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a03:7820::,2a03:7820:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a03:7840::,2a03:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a03:7860::,2a03:7860:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a03:7880::,2a03:7880:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:78a0::,2a03:78a0:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a03:78c0::,2a03:78c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -30527,7 +30963,7 @@ 2a03:8f00::,2a03:8f07:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a03:8f40::,2a03:8f40:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:8f60::,2a03:8f60:ffff:ffff:ffff:ffff:ffff:ffff,BG -2a03:8f80::,2a03:8f80:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a03:8f80::,2a03:8f87:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a03:8fa0::,2a03:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:8fc0::,2a03:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:8fe0::,2a03:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -30577,7 +31013,8 @@ 2a03:9320::,2a03:9320:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:9340::,2a03:9340:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:9360::,2a03:9360:ffff:ffff:ffff:ffff:ffff:ffff,HR -2a03:9380::,2a03:9380:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:9380::,2a03:9380:3fff:ffff:ffff:ffff:ffff:ffff,IR +2a03:9380:4000::,2a03:9380:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:93a0::,2a03:93a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:93c0::,2a03:93c0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:93e0::,2a03:93e0:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -30747,7 +31184,7 @@ 2a03:a960::,2a03:a960:1f:ffff:ffff:ffff:ffff:ffff,DE 2a03:a960:20::,2a03:a960:2f:ffff:ffff:ffff:ffff:ffff,US 2a03:a960:30::,2a03:a960:fff:ffff:ffff:ffff:ffff:ffff,DE -2a03:a960:1000::,2a03:a960:1000:ffff:ffff:ffff:ffff:ffff,US +2a03:a960:1000::,2a03:a960:1000:ffff:ffff:ffff:ffff:ffff,RU 2a03:a960:1001::,2a03:a967:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:a980::,2a03:a980:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:a9a0::,2a03:a9a0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -32023,7 +32460,6 @@ 2a03:d900::,2a03:d900:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:d940::,2a03:d940:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:d980::,2a03:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a03:d9c0::,2a03:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:da00::,2a03:da00:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a03:da40::,2a03:da40:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:da80::,2a03:da80:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -32409,7 +32845,7 @@ 2a04:3840::,2a04:3847:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:3880::,2a04:3883:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a04:38a0::,2a04:38a3:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a04:38c0::,2a04:38c7:ffff:ffff:ffff:ffff:ffff:ffff,JE +2a04:38c0::,2a04:38c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:3900::,2a04:3907:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a04:3940::,2a04:3947:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a04:3980::,2a04:3987:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -32996,7 +33432,6 @@ 2a04:c7c0::,2a04:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a04:c800::,2a04:c807:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:c840::,2a04:c847:ffff:ffff:ffff:ffff:ffff:ffff,AZ -2a04:c880::,2a04:c887:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:c8c0::,2a04:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:c900::,2a04:c907:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:c940::,2a04:c947:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -33111,7 +33546,9 @@ 2a04:e4c0:15::,2a04:e4c0:15:ffff:ffff:ffff:ffff:ffff,CZ 2a04:e4c0:16::,2a04:e4c0:16:ffff:ffff:ffff:ffff:ffff,PL 2a04:e4c0:20::,2a04:e4c0:20:ffff:ffff:ffff:ffff:ffff,JP +2a04:e4c0:21::,2a04:e4c0:21:ffff:ffff:ffff:ffff:ffff,AU 2a04:e4c0:30::,2a04:e4c0:30:ffff:ffff:ffff:ffff:ffff,ZA +2a04:e4c0:31::,2a04:e4c0:31:ffff:ffff:ffff:ffff:ffff,AE 2a04:e500::,2a04:e507:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:e540::,2a04:e547:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a04:e580::,2a04:e587:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -33279,7 +33716,6 @@ 2a05:f00::,2a05:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:f40::,2a05:f47:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:f80::,2a05:f87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a05:fc0::,2a05:fc7:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a05:1000::,2a05:1007:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:1040::,2a05:1047:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:10c0::,2a05:10c7:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -33294,7 +33730,6 @@ 2a05:12c0::,2a05:12c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:1300::,2a05:1307:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:1340::,2a05:1347:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a05:1380::,2a05:1387:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a05:13c0::,2a05:13c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:1400::,2a05:1407:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a05:1440::,2a05:1447:ffff:ffff:ffff:ffff:ffff:ffff,IR @@ -33396,7 +33831,6 @@ 2a05:2d40::,2a05:2d47:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a05:2d80::,2a05:2d87:ffff:ffff:ffff:ffff:ffff:ffff,US 2a05:2dc0::,2a05:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a05:2e00::,2a05:2e07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:2e40::,2a05:2e47:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a05:2e80::,2a05:2e87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:2ec0::,2a05:2ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -33512,7 +33946,7 @@ 2a05:4bc0::,2a05:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:4c00::,2a05:4c07:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a05:4c40::,2a05:4c47:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a05:4c80::,2a05:4c87:ffff:ffff:ffff:ffff:ffff:ffff,MD +2a05:4c80::,2a05:4c87:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a05:4cc0::,2a05:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:4d00::,2a05:4d07:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a05:4d40::,2a05:4d47:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -33687,7 +34121,6 @@ 2a05:77c0::,2a05:77c7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a05:7800::,2a05:7807:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a05:7840::,2a05:7847:ffff:ffff:ffff:ffff:ffff:ffff,RS -2a05:7880::,2a05:7887:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a05:78c0::,2a05:78c7:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a05:7900::,2a05:7907:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:7940::,2a05:7947:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -34191,7 +34624,6 @@ 2a05:ea00::,2a05:ea07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:ea40::,2a05:ea47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:ea80::,2a05:ea87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a05:eb00::,2a05:eb01:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a05:eb20::,2a05:eb23:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a05:eb40::,2a05:eb47:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a05:eb80::,2a05:eb87:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -34481,7 +34913,6 @@ 2a06:3300::,2a06:3307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:3340::,2a06:3347:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:3380::,2a06:3387:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a06:33c0::,2a06:33c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:3400::,2a06:3407:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:3480::,2a06:3487:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a06:34c0::,2a06:34c7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -34494,7 +34925,7 @@ 2a06:3680::,2a06:3687:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a06:36c0::,2a06:36c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:3700::,2a06:3707:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a06:3740::,2a06:3747:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a06:3740::,2a06:3747:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a06:3780::,2a06:3787:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:37c0::,2a06:37c7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a06:3800::,2a06:3807:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -34703,7 +35134,6 @@ 2a06:6a40::,2a06:6a47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:6ac0::,2a06:6ac7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a06:6b00::,2a06:6b07:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a06:6b40::,2a06:6b47:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a06:6b80::,2a06:6b87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:6bc0::,2a06:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a06:6c00::,2a06:6c07:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -34937,7 +35367,6 @@ 2a06:9e00::,2a06:9e07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:9e40::,2a06:9e47:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a06:9e80::,2a06:9e87:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a06:9ec0::,2a06:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a06:9f00::,2a06:9f07:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a06:9f40::,2a06:9f47:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:9f80::,2a06:9f87:ff:ffff:ffff:ffff:ffff:ffff,VA @@ -35188,7 +35617,6 @@ 2a06:ddc0::,2a06:ddc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a06:de00::,2a06:de07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:de40::,2a06:de47:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a06:de80::,2a06:de87:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a06:dec0::,2a06:dec7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a06:df00::,2a06:df07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a06:df40::,2a06:df47:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -35261,7 +35689,6 @@ 2a06:ecc0::,2a06:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a06:ed00::,2a06:ed07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:ed40::,2a06:ed47:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a06:ed80::,2a06:ed87:ffff:ffff:ffff:ffff:ffff:ffff,TJ 2a06:edc0::,2a06:edc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:ee00::,2a06:ee07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:ee40::,2a06:ee47:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -35756,7 +36183,6 @@ 2a07:6680::,2a07:6687:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a07:66c0::,2a07:66c7:ffff:ffff:ffff:ffff:ffff:ffff,AM 2a07:6700::,2a07:6707:ffff:ffff:ffff:ffff:ffff:ffff,LU -2a07:6740::,2a07:6747:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a07:6780::,2a07:6787:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a07:67c0::,2a07:67c7:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a07:6800::,2a07:6807:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -36311,7 +36737,6 @@ 2a0a:2240::,2a0a:2247:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0a:2280::,2a0a:2287:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a0a:22c0::,2a0a:22c7:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:2300::,2a0a:2307:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:2340::,2a0a:2347:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:2380::,2a0a:2380:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a0a:23c0::,2a0a:23c7:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -36338,7 +36763,7 @@ 2a0a:2880::,2a0a:2887:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:28c0::,2a0a:28c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:2900::,2a0a:2907:ffff:ffff:ffff:ffff:ffff:ffff,GE -2a0a:2940::,2a0a:2947:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:2940::,2a0a:2947:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:2980::,2a0a:2987:ffff:ffff:ffff:ffff:ffff:ffff,TJ 2a0a:29c0::,2a0a:29c0:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a0a:2a00::,2a0a:2a00:ffff:ffff:ffff:ffff:ffff:ffff,BE @@ -37553,7 +37978,6 @@ 2a0b:5400::,2a0b:5400:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0b:5440::,2a0b:5447:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0b:5480::,2a0b:5487:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a0b:54c0::,2a0b:54c0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:5500::,2a0b:5507:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0b:5540::,2a0b:5547:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:5580::,2a0b:5587:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -37871,7 +38295,6 @@ 2a0b:a340::,2a0b:a347:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a0b:a380::,2a0b:a380:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:a3c0::,2a0b:a3c7:ffff:ffff:ffff:ffff:ffff:ffff,AM -2a0b:a400::,2a0b:a407:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a0b:a440::,2a0b:a447:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:a480::,2a0b:a480:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a0b:a4c0::,2a0b:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,RS @@ -38239,59 +38662,256 @@ 2a0b:ff80::,2a0b:ff87:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:ffc0::,2a0b:ffc7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0c::,2a0c:7:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0c:200::,2a0c:207:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:400::,2a0c:407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:600::,2a0c:607:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0c:800::,2a0c:807:ffff:ffff:ffff:ffff:ffff:ffff,AZ +2a0c:a00::,2a0c:a07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0c:c00::,2a0c:c07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:e00::,2a0c:e07:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a0c:1000::,2a0c:1007:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:1200::,2a0c:1207:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0c:1400::,2a0c:1407:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0c:1600::,2a0c:1600:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a0c:1800::,2a0c:1807:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:1a00::,2a0c:1a00:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:1c00::,2a0c:1c07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0c:1e00::,2a0c:1e07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:2000::,2a0c:2007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:2200::,2a0c:2207:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:2400::,2a0c:2407:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0c:2600::,2a0c:2607:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0c:2800::,2a0c:2800:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:2a00::,2a0c:2a07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0c:2c00::,2a0c:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0c:2e00::,2a0c:2e07:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0c:3000::,2a0c:3000:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:3200::,2a0c:3207:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0c:3400::,2a0c:3407:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0c:3600::,2a0c:3600:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0c:3800::,2a0c:3800:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0c:3a00::,2a0c:3a07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:3c00::,2a0c:3c07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:3e00::,2a0c:3e07:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0c:4000::,2a0c:4000:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0c:4200::,2a0c:4207:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0c:4400::,2a0c:4400:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:4600::,2a0c:4607:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0c:4800::,2a0c:4807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:4a00::,2a0c:4a07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:4c00::,2a0c:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0c:4e00::,2a0c:4e00:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0c:5000::,2a0c:5003:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:5200::,2a0c:5207:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0c:5400::,2a0c:5407:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0c:5600::,2a0c:5607:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0c:5800::,2a0c:5807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:5a00::,2a0c:5a07:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0c:5c00::,2a0c:5c07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0c:5e00::,2a0c:5e00:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a0c:6000::,2a0c:6007:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:6200::,2a0c:6207:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:6400::,2a0c:6400:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:6600::,2a0c:6607:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0c:6800::,2a0c:6800:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a0c:6a00::,2a0c:6a07:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0c:6c00::,2a0c:6c00:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0c:6e00::,2a0c:6e07:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0c:7000::,2a0c:7000:ffff:ffff:ffff:ffff:ffff:ffff,IS +2a0c:7200::,2a0c:7207:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:7400::,2a0c:7407:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a0c:7600::,2a0c:7607:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0c:7800::,2a0c:7807:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0c:7a00::,2a0c:7a07:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0c:7c00::,2a0c:7c07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0c:7e00::,2a0c:7e07:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0c:8000::,2a0c:8007:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0c:8200::,2a0c:8207:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0c:8400::,2a0c:8407:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:8600::,2a0c:8607:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0c:8800::,2a0c:8807:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:8a00::,2a0c:8a07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0c:8c00::,2a0c:8c07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0c:8e00::,2a0c:8e07:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0c:9000::,2a0c:9007:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0c:9200::,2a0c:9207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:9400::,2a0c:9407:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:9600::,2a0c:9607:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a0c:9800::,2a0c:9807:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0c:9a00::,2a0c:9a00:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:9c00::,2a0c:9c07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0c:9e00::,2a0c:9e07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:a000::,2a0c:a007:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:a200::,2a0c:a207:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0c:a400::,2a0c:a407:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:a600::,2a0c:a607:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:a800::,2a0c:a807:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0c:aa00::,2a0c:aa07:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0c:ac00::,2a0c:ac07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:ae00::,2a0c:ae07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0c:b000::,2a0c:b007:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0c:b200::,2a0c:b207:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0c:b400::,2a0c:b407:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a0c:b600::,2a0c:b607:ffff:ffff:ffff:ffff:ffff:ffff,AU 2a0c:b800::,2a0c:b807:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0c:ba00::,2a0c:ba07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:bc00::,2a0c:bc07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:be00::,2a0c:be00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0c:c000::,2a0c:c007:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0c:c200::,2a0c:c200:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a0c:c400::,2a0c:c400:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0c:c600::,2a0c:c600:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0c:c800::,2a0c:c807:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:ca00::,2a0c:ca07:ffff:ffff:ffff:ffff:ffff:ffff,KW +2a0c:cc00::,2a0c:cc00:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0c:ce00::,2a0c:ce07:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a0c:d000::,2a0c:d007:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0c:d200::,2a0c:d207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:d400::,2a0c:d407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:d600::,2a0c:d607:ffff:ffff:ffff:ffff:ffff:ffff,IQ 2a0c:d800::,2a0c:d807:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0c:da00::,2a0c:da07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:dc00::,2a0c:dc00:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a0c:de00::,2a0c:de07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0c:e000::,2a0c:e007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:e200::,2a0c:e207:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0c:e400::,2a0c:e407:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:e600::,2a0c:e607:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0c:e800::,2a0c:e807:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0c:ea00::,2a0c:ea07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0c:ec00::,2a0c:ec07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0c:ee00::,2a0c:ee07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0c:f000::,2a0c:f000:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0c:f200::,2a0c:f207:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:f400::,2a0c:f407:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0c:f600::,2a0c:f607:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a0c:f800::,2a0c:f807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0c:fa00::,2a0c:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0c:fc00::,2a0c:fc07:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0c:fe00::,2a0c:fe07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d::,2a0d:7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0d:200::,2a0d:207:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0d:400::,2a0d:407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:600::,2a0d:607:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0d:800::,2a0d:807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:a00::,2a0d:a07:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0d:c00::,2a0d:c07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:e00::,2a0d:e07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:1000::,2a0d:1007:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:1200::,2a0d:1207:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:1400::,2a0d:1403:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:1600::,2a0d:1600:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:1800::,2a0d:1807:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0d:1a00::,2a0d:1a07:ffff:ffff:ffff:ffff:ffff:ffff,MD +2a0d:1c00::,2a0d:1c07:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0d:1e00::,2a0d:1e07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:2000::,2a0d:2007:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0d:2200::,2a0d:2207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:2400::,2a0d:2407:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:2600::,2a0d:2607:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0d:2800::,2a0d:2807:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a0d:2a00::,2a0d:2a07:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a0d:2c00::,2a0d:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:2e00::,2a0d:2e07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0d:3000::,2a0d:3007:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:3200::,2a0d:3207:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:3400::,2a0d:3400:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:3600::,2a0d:3607:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:3800::,2a0d:3807:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:3a00::,2a0d:3a07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:3c00::,2a0d:3c07:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0d:3e00::,2a0d:3e07:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0d:4000::,2a0d:4007:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:4200::,2a0d:4207:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:4400::,2a0d:4407:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:4600::,2a0d:4607:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:4800::,2a0d:4807:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:4a00::,2a0d:4a00:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a0d:4c00::,2a0d:4c07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:4e00::,2a0d:4e07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0d:5000::,2a0d:5007:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0d:5200::,2a0d:5207:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0d:5400::,2a0d:5407:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:5600::,2a0d:5607:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0d:5800::,2a0d:5807:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0d:5a00::,2a0d:5a07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:5c00::,2a0d:5c07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0d:5e00::,2a0d:5e07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0d:6000::,2a0d:6007:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0d:6200::,2a0d:6207:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0d:6400::,2a0d:6400:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:6600::,2a0d:6607:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0d:6800::,2a0d:6807:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:6a00::,2a0d:6a07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:6c00::,2a0d:6c07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:6e00::,2a0d:6e07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:7000::,2a0d:7000:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a0d:7200::,2a0d:7207:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a0d:7400::,2a0d:7407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:7600::,2a0d:7607:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:7800::,2a0d:7807:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0d:7a00::,2a0d:7a07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:7c00::,2a0d:7c07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0d:7e00::,2a0d:7e00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0d:8000::,2a0d:8007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:8200::,2a0d:8207:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0d:8400::,2a0d:8400:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:8600::,2a0d:8607:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:8800::,2a0d:8807:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0d:8a00::,2a0d:8a00:ffff:ffff:ffff:ffff:ffff:ffff,GE +2a0d:8c00::,2a0d:8c07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0d:8e00::,2a0d:8e07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:9000::,2a0d:9007:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:9200::,2a0d:9207:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0d:9400::,2a0d:9407:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:9600::,2a0d:9600:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0d:9800::,2a0d:9807:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0d:9a00::,2a0d:9a07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0d:9c00::,2a0d:9c00:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0d:9e00::,2a0d:9e07:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0d:a000::,2a0d:a007:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0d:a200::,2a0d:a207:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0d:a400::,2a0d:a407:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a0d:a600::,2a0d:a603:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0d:a800::,2a0d:a807:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:aa00::,2a0d:aa07:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0d:ac00::,2a0d:ac07:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0d:ae00::,2a0d:ae07:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0d:b000::,2a0d:b007:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0d:b200::,2a0d:b207:ffff:ffff:ffff:ffff:ffff:ffff,KZ +2a0d:b400::,2a0d:b407:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0d:b600::,2a0d:b607:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:b800::,2a0d:b807:ffff:ffff:ffff:ffff:ffff:ffff,AM +2a0d:ba00::,2a0d:ba07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:bc00::,2a0d:bc07:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0d:be00::,2a0d:be07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0d:c000::,2a0d:c007:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a0d:c200::,2a0d:c207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:c400::,2a0d:c407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:c600::,2a0d:c607:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:c800::,2a0d:c807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:ca00::,2a0d:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:cc00::,2a0d:cc07:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a0d:ce00::,2a0d:ce07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0d:d000::,2a0d:d007:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:d200::,2a0d:d207:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0d:d400::,2a0d:d407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0d:d600::,2a0d:d607:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0d:d800::,2a0d:d807:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0d:da00::,2a0d:da07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:dc00::,2a0d:dc07:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a0d:de00::,2a0d:de07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0d:e000::,2a0d:e007:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0d:e200::,2a0d:e207:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0d:e400::,2a0d:e400:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0d:e600::,2a0d:e607:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0d:e800::,2a0d:e807:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0d:ea00::,2a0d:ea07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:ec00::,2a0d:ec07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0d:f000::,2a0d:f007:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0d:f400::,2a0d:f407:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:f800::,2a0d:f807:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0d:fc00::,2a0d:fc07:ffff:ffff:ffff:ffff:ffff:ffff,UA 2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG 2c0e:2000::,2c0e:2fff:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0e:4000::,2c0e:40ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA @@ -38338,7 +38958,6 @@ 2c0f:f138::,2c0f:f138:ffff:ffff:ffff:ffff:ffff:ffff,BF 2c0f:f140::,2c0f:f140:ffff:ffff:ffff:ffff:ffff:ffff,MZ 2c0f:f148::,2c0f:f148:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:f150::,2c0f:f150:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f158::,2c0f:f158:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f160::,2c0f:f160:ffff:ffff:ffff:ffff:ffff:ffff,BW 2c0f:f168::,2c0f:f168:ffff:ffff:ffff:ffff:ffff:ffff,RW @@ -38347,6 +38966,17 @@ 2c0f:f180::,2c0f:f180:ffff:ffff:ffff:ffff:ffff:ffff,GN 2c0f:f188::,2c0f:f188:ffff:ffff:ffff:ffff:ffff:ffff,BJ 2c0f:f190::,2c0f:f190:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f198::,2c0f:f198:ffff:ffff:ffff:ffff:ffff:ffff,BI +2c0f:f1a0::,2c0f:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f1a8::,2c0f:f1a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f1b0::,2c0f:f1b0:ffff:ffff:ffff:ffff:ffff:ffff,ZW +2c0f:f1b8::,2c0f:f1b8:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f1c0::,2c0f:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f1c8::,2c0f:f1c8:ffff:ffff:ffff:ffff:ffff:ffff,MG +2c0f:f1d0::,2c0f:f1d0:ffff:ffff:ffff:ffff:ffff:ffff,BJ +2c0f:f1d8::,2c0f:f1d8:ffff:ffff:ffff:ffff:ffff:ffff,LR +2c0f:f1e0::,2c0f:f1e0:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f1e8::,2c0f:f1e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f200::,2c0f:f200:ffff:ffff:ffff:ffff:ffff:ffff,UG 2c0f:f208::,2c0f:f208:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f210::,2c0f:f210:ffff:ffff:ffff:ffff:ffff:ffff,ZA diff --git a/src/or/addressmap.c b/src/or/addressmap.c index 7e92633601..9a2cc26b3b 100644 --- a/src/or/addressmap.c +++ b/src/or/addressmap.c @@ -541,7 +541,7 @@ addressmap_have_mapping(const char *address, int update_expiry) * (virtual address mapping) from the controller.) * * <b>new_address</b> should be a newly dup'ed string, which we'll use or - * free as appropriate. We will leave address alone. + * free as appropriate. We will leave <b>address</b> alone. * * If <b>wildcard_addr</b> is true, then the mapping will match any address * equal to <b>address</b>, or any address ending with a period followed by @@ -554,7 +554,6 @@ addressmap_have_mapping(const char *address, int update_expiry) * <b>wildcard_new_addr</b>, remove any mappings that exist from * <b>address</b>. * - * * It is an error to set <b>wildcard_new_addr</b> if <b>wildcard_addr</b> is * not set. */ void diff --git a/src/or/bridges.c b/src/or/bridges.c index 1c748b4156..320f5ee632 100644 --- a/src/or/bridges.c +++ b/src/or/bridges.c @@ -54,6 +54,8 @@ struct bridge_info_t { }; static void bridge_free(bridge_info_t *bridge); +static void rewrite_node_address_for_bridge(const bridge_info_t *bridge, + node_t *node); /** A list of configured bridges. Whenever we actually get a descriptor * for one, we add it as an entry guard. Note that the order of bridges @@ -574,6 +576,12 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge) return; } + /* If we already have a node_t for this bridge, rewrite its address now. */ + node_t *node = node_get_mutable_by_id(bridge->identity); + if (node) { + rewrite_node_address_for_bridge(bridge, node); + } + tor_addr_port_t bridge_addrport; memcpy(&bridge_addrport.addr, &bridge->addr, sizeof(tor_addr_t)); bridge_addrport.port = bridge->port; diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index b36fed63b3..2e6b63b4d6 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1290,7 +1290,7 @@ circuit_extend(cell_t *cell, circuit_t *circ) const node_t *node = node_get_by_id((const char*)ec.node_id); const ed25519_public_key_t *node_ed_id = NULL; if (node && - node_supports_ed25519_link_authentication(node) && + node_supports_ed25519_link_authentication(node, 1) && (node_ed_id = node_get_ed25519_id(node))) { ed25519_pubkey_copy(&ec.ed_pubkey, node_ed_id); } @@ -2698,7 +2698,7 @@ extend_info_from_node(const node_t *node, int for_direct_connect) /* Don't send the ed25519 pubkey unless the target node actually supports * authenticating with it. */ - if (node_supports_ed25519_link_authentication(node)) { + if (node_supports_ed25519_link_authentication(node, 0)) { log_info(LD_CIRC, "Including Ed25519 ID for %s", node_describe(node)); ed_pubkey = node_get_ed25519_id(node); } else if (node_get_ed25519_id(node)) { @@ -2707,12 +2707,16 @@ extend_info_from_node(const node_t *node, int for_direct_connect) node_describe(node)); } + /* Retrieve the curve25519 pubkey. */ + const curve25519_public_key_t *curve_pubkey = + node_get_curve25519_onion_key(node); + if (valid_addr && node->ri) return extend_info_new(node->ri->nickname, node->identity, ed_pubkey, node->ri->onion_pkey, - node->ri->onion_curve25519_pkey, + curve_pubkey, &ap.addr, ap.port); else if (valid_addr && node->rs && node->md) @@ -2720,7 +2724,7 @@ extend_info_from_node(const node_t *node, int for_direct_connect) node->identity, ed_pubkey, node->md->onion_pkey, - node->md->onion_curve25519_pkey, + curve_pubkey, &ap.addr, ap.port); else diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c index 923a6d794f..b8421a3c7e 100644 --- a/src/or/circuitstats.c +++ b/src/or/circuitstats.c @@ -431,9 +431,14 @@ circuit_build_times_new_consensus_params(circuit_build_times_t *cbt, if (num > 0) { if (num != cbt->liveness.num_recent_circs) { int8_t *recent_circs; - log_notice(LD_CIRC, "The Tor Directory Consensus has changed how many " - "circuits we must track to detect network failures from %d " - "to %d.", cbt->liveness.num_recent_circs, num); + if (cbt->liveness.num_recent_circs > 0) { + log_notice(LD_CIRC, "The Tor Directory Consensus has changed how " + "many circuits we must track to detect network failures " + "from %d to %d.", cbt->liveness.num_recent_circs, num); + } else { + log_notice(LD_CIRC, "Upon receiving a consensus directory, " + "re-enabling circuit-based network failure detection."); + } tor_assert(cbt->liveness.timeouts_after_firsthop || cbt->liveness.num_recent_circs == 0); diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 62cc865f48..aa0df95652 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -543,8 +543,7 @@ circuit_expire_building(void) cutoff = begindir_cutoff; else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) cutoff = close_cutoff; - else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING || - victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) + else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) cutoff = c_intro_cutoff; else if (victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) cutoff = s_intro_cutoff; @@ -661,12 +660,13 @@ circuit_expire_building(void) TO_ORIGIN_CIRCUIT(victim)->path_state = PATH_STATE_USE_FAILED; break; case CIRCUIT_PURPOSE_C_INTRODUCING: - /* We keep old introducing circuits around for - * a while in parallel, and they can end up "opened". - * We decide below if we're going to mark them timed - * out and eventually close them. - */ - break; + /* That purpose means that the intro point circuit has been opened + * succesfully but the INTRODUCE1 cell hasn't been sent yet because + * the client is waiting for the rendezvous point circuit to open. + * Keep this circuit open while waiting for the rendezvous circuit. + * We let the circuit idle timeout take care of cleaning this + * circuit if it never used. */ + continue; case CIRCUIT_PURPOSE_C_ESTABLISH_REND: case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT: @@ -757,8 +757,6 @@ circuit_expire_building(void) NULL) break; /* fallthrough! */ - case CIRCUIT_PURPOSE_C_INTRODUCING: - /* connection_ap_handshake_attach_circuit() will relaunch for us */ case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT: case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: /* If we have reached this line, we want to spare the circ for now. */ diff --git a/src/or/config.c b/src/or/config.c index 6270b795f8..b0a140d23b 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -82,6 +82,7 @@ #include "dirvote.h" #include "dns.h" #include "entrynodes.h" +#include "git_revision.h" #include "geoip.h" #include "hibernate.h" #include "main.h" @@ -169,8 +170,6 @@ static config_abbrev_t option_abbrevs_[] = { { "BridgeAuthoritativeDirectory", "BridgeAuthoritativeDir", 0, 0}, { "HashedControlPassword", "__HashedControlSessionPassword", 1, 0}, { "VirtualAddrNetwork", "VirtualAddrNetworkIPv4", 0, 0}, - { "ClientDNSRejectInternalAddresses", - "TestingClientDNSRejectInternalAddresses", 0, 1, }, { NULL, NULL, 0, 0}, }; @@ -253,6 +252,7 @@ static config_var_t option_vars_[] = { V(BridgePassword, STRING, NULL), V(BridgeRecordUsageByCountry, BOOL, "1"), V(BridgeRelay, BOOL, "0"), + V(BridgeDistribution, STRING, NULL), V(CellStatistics, BOOL, "0"), V(PaddingStatistics, BOOL, "1"), V(LearnCircuitBuildTimeout, BOOL, "1"), @@ -261,7 +261,7 @@ static config_var_t option_vars_[] = { V(CircuitsAvailableTimeout, INTERVAL, "0"), V(CircuitStreamTimeout, INTERVAL, "0"), V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/ - V(TestingClientDNSRejectInternalAddresses, BOOL,"1"), + V(ClientDNSRejectInternalAddresses, BOOL,"1"), V(ClientOnly, BOOL, "0"), V(ClientPreferIPv6ORPort, AUTOBOOL, "auto"), V(ClientPreferIPv6DirPort, AUTOBOOL, "auto"), @@ -484,6 +484,7 @@ static config_var_t option_vars_[] = { V(RendPostPeriod, INTERVAL, "1 hour"), V(RephistTrackTime, INTERVAL, "24 hours"), V(RunAsDaemon, BOOL, "0"), + V(ReducedExitPolicy, BOOL, "0"), OBSOLETE("RunTesting"), // currently unused V(Sandbox, BOOL, "0"), V(SafeLogging, STRING, "1"), @@ -562,6 +563,7 @@ static config_var_t option_vars_[] = { VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword, NULL), VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL), + VAR("__OwningControllerFD",INT,OwningControllerFD, "-1"), V(MinUptimeHidServDirectoryV2, INTERVAL, "96 hours"), V(TestingServerDownloadSchedule, CSV_INTERVAL, "0, 0, 0, 60, 60, 120, " "300, 900, 2147483647"), @@ -647,7 +649,7 @@ static const config_var_t testing_tor_network_defaults[] = { "0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"), V(ClientBootstrapConsensusMaxDownloadTries, UINT, "80"), V(ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries, UINT, "80"), - V(TestingClientDNSRejectInternalAddresses, BOOL,"0"), + V(ClientDNSRejectInternalAddresses, BOOL,"0"), V(ClientRejectInternalAddresses, BOOL, "0"), V(CountPrivateBandwidth, BOOL, "1"), V(ExitPolicyRejectPrivate, BOOL, "0"), @@ -692,7 +694,7 @@ static const config_var_t testing_tor_network_defaults[] = { #undef OBSOLETE static const config_deprecation_t option_deprecation_notes_[] = { - /* Deprecated since 0.3.2.1-alpha. */ + /* Deprecated since 0.3.2.0-alpha. */ { "HTTPProxy", "It only applies to direct unencrypted HTTP connections " "to your directory server, which your Tor probably wasn't using." }, { "HTTPProxyAuthenticator", "HTTPProxy is deprecated in favor of HTTPSProxy " @@ -731,7 +733,6 @@ static int parse_ports(or_options_t *options, int validate_only, static int check_server_ports(const smartlist_t *ports, const or_options_t *options, int *num_low_ports_out); - static int validate_data_directory(or_options_t *options); static int write_configuration_file(const char *fname, const or_options_t *options); @@ -835,9 +836,12 @@ set_options(or_options_t *new_val, char **msg) return -1; } if (options_act(old_options) < 0) { /* acting on the options failed. die. */ - log_err(LD_BUG, - "Acting on config options left us in a broken state. Dying."); - exit(1); // XXXX bad exit + if (! tor_event_loop_shutdown_is_pending()) { + log_err(LD_BUG, + "Acting on config options left us in a broken state. Dying."); + tor_shutdown_event_loop_and_exit(1); + } + return -1; } /* Issues a CONF_CHANGED event to notify controller of the change. If Tor is * just starting up then the old_options will be undefined. */ @@ -879,8 +883,6 @@ set_options(or_options_t *new_val, char **msg) return 0; } -extern const char tor_git_revision[]; /* from tor_main.c */ - /** The version of this Tor process, as parsed. */ static char *the_tor_version = NULL; /** A shorter version of this Tor process's version, for export in our router @@ -935,6 +937,10 @@ or_options_free(or_options_t *options) SMARTLIST_FOREACH(options->SchedulerTypes_, int *, i, tor_free(i)); smartlist_free(options->SchedulerTypes_); } + if (options->FilesOpenedByIncludes) { + SMARTLIST_FOREACH(options->FilesOpenedByIncludes, char *, f, tor_free(f)); + smartlist_free(options->FilesOpenedByIncludes); + } tor_free(options->BridgePassword_AuthDigest_); tor_free(options->command_arg); tor_free(options->master_key_fname); @@ -1030,6 +1036,23 @@ escaped_safe_str(const char *address) return escaped(address); } +/** + * The severity level that should be used for warnings of severity + * LOG_PROTOCOL_WARN. + * + * We keep this outside the options, in case somebody needs to use + * LOG_PROTOCOL_WARN while an option transition is happening. + */ +static int protocol_warning_severity_level = LOG_WARN; + +/** Return the severity level that should be used for warnings of severity + * LOG_PROTOCOL_WARN. */ +int +get_protocol_warning_severity_level(void) +{ + return protocol_warning_severity_level; +} + /** List of default directory authorities */ static const char *default_authorities[] = { @@ -1667,8 +1690,16 @@ options_act(const or_options_t *old_options) return -1; } - if (consider_adding_dir_servers(options, old_options) < 0) + if (options->ProtocolWarnings) + protocol_warning_severity_level = LOG_WARN; + else + protocol_warning_severity_level = LOG_INFO; + + if (consider_adding_dir_servers(options, old_options) < 0) { + // XXXX This should get validated earlier, and committed here, to + // XXXX lower opportunities for reaching an error case. return -1; + } if (rend_non_anonymous_mode_enabled(options)) { log_warn(LD_GENERAL, "This copy of Tor was compiled or configured to run " @@ -1677,6 +1708,7 @@ options_act(const or_options_t *old_options) #ifdef ENABLE_TOR2WEB_MODE /* LCOV_EXCL_START */ + // XXXX This should move into options_validate() if (!options->Tor2webMode) { log_err(LD_CONFIG, "This copy of Tor was compiled to run in " "'tor2web mode'. It can only be run with the Tor2webMode torrc " @@ -1685,6 +1717,7 @@ options_act(const or_options_t *old_options) } /* LCOV_EXCL_STOP */ #else /* !(defined(ENABLE_TOR2WEB_MODE)) */ + // XXXX This should move into options_validate() if (options->Tor2webMode) { log_err(LD_CONFIG, "This copy of Tor was not compiled to run in " "'tor2web mode'. It cannot be run with the Tor2webMode torrc " @@ -1712,9 +1745,11 @@ options_act(const or_options_t *old_options) for (cl = options->Bridges; cl; cl = cl->next) { bridge_line_t *bridge_line = parse_bridge_line(cl->value); if (!bridge_line) { + // LCOV_EXCL_START log_warn(LD_BUG, "Previously validated Bridge line could not be added!"); return -1; + // LCOV_EXCL_STOP } bridge_add_from_config(bridge_line); } @@ -1722,15 +1757,37 @@ options_act(const or_options_t *old_options) } if (running_tor && hs_config_service_all(options, 0)<0) { + // LCOV_EXCL_START log_warn(LD_BUG, "Previously validated hidden services line could not be added!"); return -1; + // LCOV_EXCL_STOP } if (running_tor && rend_parse_service_authorization(options, 0) < 0) { + // LCOV_EXCL_START log_warn(LD_BUG, "Previously validated client authorization for " "hidden services could not be added!"); return -1; + // LCOV_EXCL_STOP + } + + if (running_tor && !old_options && options->OwningControllerFD != -1) { +#ifdef _WIN32 + log_warn(LD_CONFIG, "OwningControllerFD is not supported on Windows. " + "If you need it, tell the Tor developers."); + return -1; +#else + const unsigned ctrl_flags = + CC_LOCAL_FD_IS_OWNER | + CC_LOCAL_FD_IS_AUTHENTICATED; + tor_socket_t ctrl_sock = (tor_socket_t)options->OwningControllerFD; + if (control_connection_add_local_fd(ctrl_sock, ctrl_flags) < 0) { + log_warn(LD_CONFIG, "Could not add local controller connection with " + "given FD."); + return -1; + } +#endif } /* Load state */ @@ -1753,10 +1810,12 @@ options_act(const or_options_t *old_options) if (options->ClientTransportPlugin) { for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { if (parse_transport_line(options, cl->value, 0, 0) < 0) { + // LCOV_EXCL_START log_warn(LD_BUG, "Previously validated ClientTransportPlugin line " "could not be added!"); return -1; + // LCOV_EXCL_STOP } } } @@ -1764,10 +1823,12 @@ options_act(const or_options_t *old_options) if (options->ServerTransportPlugin && server_mode(options)) { for (cl = options->ServerTransportPlugin; cl; cl = cl->next) { if (parse_transport_line(options, cl->value, 0, 1) < 0) { + // LCOV_EXCL_START log_warn(LD_BUG, "Previously validated ServerTransportPlugin line " "could not be added!"); return -1; + // LCOV_EXCL_STOP } } } @@ -1853,8 +1914,10 @@ options_act(const or_options_t *old_options) /* Set up accounting */ if (accounting_parse_options(options, 0)<0) { - log_warn(LD_CONFIG,"Error in accounting options"); + // LCOV_EXCL_START + log_warn(LD_BUG,"Error in previously validated accounting options"); return -1; + // LCOV_EXCL_STOP } if (accounting_is_enabled(options)) configure_accounting(time(NULL)); @@ -1877,6 +1940,7 @@ options_act(const or_options_t *old_options) char *http_authenticator; http_authenticator = alloc_http_authenticator(options->BridgePassword); if (!http_authenticator) { + // XXXX This should get validated in options_validate(). log_warn(LD_BUG, "Unable to allocate HTTP authenticator. Not setting " "BridgePassword."); return -1; @@ -1889,9 +1953,12 @@ options_act(const or_options_t *old_options) } if (parse_outbound_addresses(options, 0, &msg) < 0) { - log_warn(LD_BUG, "Failed parsing outbound bind addresses: %s", msg); + // LCOV_EXCL_START + log_warn(LD_BUG, "Failed parsing previously validated outbound " + "bind addresses: %s", msg); tor_free(msg); return -1; + // LCOV_EXCL_STOP } config_maybe_load_geoip_files_(options, old_options); @@ -3490,6 +3557,15 @@ options_validate(or_options_t *old_options, or_options_t *options, REJECT("Relays cannot set ReducedConnectionPadding. "); } + if (options->BridgeDistribution) { + if (!options->BridgeRelay) { + REJECT("You set BridgeDistribution, but you didn't set BridgeRelay!"); + } + if (check_bridge_distribution_setting(options->BridgeDistribution) < 0) { + REJECT("Invalid BridgeDistribution value."); + } + } + if (options->MinUptimeHidServDirectoryV2 < 0) { log_warn(LD_CONFIG, "MinUptimeHidServDirectoryV2 option must be at " "least 0 seconds. Changing to 0."); @@ -4180,9 +4256,12 @@ options_validate(or_options_t *old_options, or_options_t *options, CHECK_DEFAULT(TestingSigningKeySlop); CHECK_DEFAULT(TestingAuthKeySlop); CHECK_DEFAULT(TestingLinkKeySlop); - CHECK_DEFAULT(TestingClientDNSRejectInternalAddresses); #undef CHECK_DEFAULT + if (!options->ClientDNSRejectInternalAddresses && + !(options->DirAuthorities || + (options->AlternateDirAuthority && options->AlternateBridgeAuthority))) + REJECT("ClientDNSRejectInternalAddresses used for default network."); if (options->SigningKeyLifetime < options->TestingSigningKeySlop*2) REJECT("SigningKeyLifetime is too short."); if (options->TestingLinkCertLifetime < options->TestingAuthKeySlop*2) @@ -4575,6 +4654,12 @@ options_transition_allowed(const or_options_t *old, return -1; } + if (old->OwningControllerFD != new_val->OwningControllerFD) { + *msg = tor_strdup("While Tor is running, changing OwningControllerFD " + "is not allowed."); + return -1; + } + if (sandbox_is_active()) { #define SB_NOCHANGE_STR(opt) \ do { \ @@ -4623,6 +4708,7 @@ options_transition_affects_workers(const or_options_t *old_options, new_options->ServerDNSSearchDomains || old_options->SafeLogging_ != new_options->SafeLogging_ || old_options->ClientOnly != new_options->ClientOnly || + server_mode(old_options) != server_mode(new_options) || public_server_mode(old_options) != public_server_mode(new_options) || !config_lines_eq(old_options->Logs, new_options->Logs) || old_options->LogMessageDomains != new_options->LogMessageDomains) @@ -4664,6 +4750,8 @@ options_transition_affects_descriptor(const or_options_t *old_options, get_effective_bwburst(old_options) != get_effective_bwburst(new_options) || !opt_streq(old_options->ContactInfo, new_options->ContactInfo) || + !opt_streq(old_options->BridgeDistribution, + new_options->BridgeDistribution) || !config_lines_eq(old_options->MyFamily, new_options->MyFamily) || !opt_streq(old_options->AccountingStart, new_options->AccountingStart) || old_options->AccountingMax != new_options->AccountingMax || @@ -4984,7 +5072,8 @@ load_torrc_from_disk(config_line_t *cmd_arg, int defaults_file) /** Read a configuration file into <b>options</b>, finding the configuration * file location based on the command line. After loading the file * call options_init_from_string() to load the config. - * Return 0 if success, -1 if failure. */ + * Return 0 if success, -1 if failure, and 1 if we succeeded but should exit + * anyway. */ int options_init_from_torrc(int argc, char **argv) { @@ -5011,22 +5100,22 @@ options_init_from_torrc(int argc, char **argv) if (config_line_find(cmdline_only_options, "-h") || config_line_find(cmdline_only_options, "--help")) { print_usage(); - exit(0); // XXXX bad exit, though probably harmless + return 1; } if (config_line_find(cmdline_only_options, "--list-torrc-options")) { /* For validating whether we've documented everything. */ list_torrc_options(); - exit(0); // XXXX bad exit, though probably harmless + return 1; } if (config_line_find(cmdline_only_options, "--list-deprecated-options")) { /* For validating whether what we have deprecated really exists. */ list_deprecated_options(); - exit(0); // XXXX bad exit, though probably harmless + return 1; } if (config_line_find(cmdline_only_options, "--version")) { printf("Tor version %s.\n",get_version()); - exit(0); // XXXX bad exit, though probably harmless + return 1; } if (config_line_find(cmdline_only_options, "--library-versions")) { @@ -5054,7 +5143,7 @@ options_init_from_torrc(int argc, char **argv) tor_compress_header_version_str(ZSTD_METHOD)); } //TODO: Hex versions? - exit(0); // XXXX bad exit, though probably harmless + return 1; } command = CMD_RUN_TOR; @@ -5115,7 +5204,8 @@ options_init_from_torrc(int argc, char **argv) get_options_mutable()->keygen_force_passphrase = FORCE_PASSPHRASE_OFF; } else { log_err(LD_CONFIG, "--no-passphrase specified without --keygen!"); - exit(1); // XXXX bad exit + retval = -1; + goto err; } } @@ -5124,7 +5214,8 @@ options_init_from_torrc(int argc, char **argv) get_options_mutable()->change_key_passphrase = 1; } else { log_err(LD_CONFIG, "--newpass specified without --keygen!"); - exit(1); // XXXX bad exit + retval = -1; + goto err; } } @@ -5134,17 +5225,20 @@ options_init_from_torrc(int argc, char **argv) if (fd_line) { if (get_options()->keygen_force_passphrase == FORCE_PASSPHRASE_OFF) { log_err(LD_CONFIG, "--no-passphrase specified with --passphrase-fd!"); - exit(1); // XXXX bad exit + retval = -1; + goto err; } else if (command != CMD_KEYGEN) { log_err(LD_CONFIG, "--passphrase-fd specified without --keygen!"); - exit(1); // XXXX bad exit + retval = -1; + goto err; } else { const char *v = fd_line->value; int ok = 1; long fd = tor_parse_long(v, 10, 0, INT_MAX, &ok, NULL); if (fd < 0 || ok == 0) { log_err(LD_CONFIG, "Invalid --passphrase-fd value %s", escaped(v)); - exit(1); // XXXX bad exit + retval = -1; + goto err; } get_options_mutable()->keygen_passphrase_fd = (int)fd; get_options_mutable()->use_keygen_passphrase_fd = 1; @@ -5159,7 +5253,8 @@ options_init_from_torrc(int argc, char **argv) if (key_line) { if (command != CMD_KEYGEN) { log_err(LD_CONFIG, "--master-key without --keygen!"); - exit(1); // XXXX bad exit + retval = -1; + goto err; } else { get_options_mutable()->master_key_fname = tor_strdup(key_line->value); } @@ -5207,13 +5302,16 @@ options_init_from_string(const char *cf_defaults, const char *cf, newoptions->command = command; newoptions->command_arg = command_arg ? tor_strdup(command_arg) : NULL; + smartlist_t *opened_files = smartlist_new(); for (int i = 0; i < 2; ++i) { const char *body = i==0 ? cf_defaults : cf; if (!body) continue; + /* get config lines, assign them */ retval = config_get_lines_include(body, &cl, 1, - body == cf ? &cf_has_include : NULL); + body == cf ? &cf_has_include : NULL, + opened_files); if (retval < 0) { err = SETOPT_ERR_PARSE; goto err; @@ -5242,6 +5340,7 @@ options_init_from_string(const char *cf_defaults, const char *cf, } newoptions->IncludeUsed = cf_has_include; + newoptions->FilesOpenedByIncludes = opened_files; /* If this is a testing network configuration, change defaults * for a list of dependent config options, re-initialize newoptions @@ -5281,13 +5380,16 @@ options_init_from_string(const char *cf_defaults, const char *cf, newoptions->command_arg = command_arg ? tor_strdup(command_arg) : NULL; /* Assign all options a second time. */ + opened_files = smartlist_new(); for (int i = 0; i < 2; ++i) { const char *body = i==0 ? cf_defaults : cf; if (!body) continue; + /* get config lines, assign them */ retval = config_get_lines_include(body, &cl, 1, - body == cf ? &cf_has_include : NULL); + body == cf ? &cf_has_include : NULL, + opened_files); if (retval < 0) { err = SETOPT_ERR_PARSE; goto err; @@ -5312,6 +5414,7 @@ options_init_from_string(const char *cf_defaults, const char *cf, newoptions->IncludeUsed = cf_has_include; in_option_validation = 1; + newoptions->FilesOpenedByIncludes = opened_files; /* Validate newoptions */ if (options_validate(oldoptions, newoptions, newdefaultoptions, @@ -5338,6 +5441,12 @@ options_init_from_string(const char *cf_defaults, const char *cf, err: in_option_validation = 0; + if (opened_files) { + SMARTLIST_FOREACH(opened_files, char *, f, tor_free(f)); + smartlist_free(opened_files); + } + // may have been set to opened_files, avoid double free + newoptions->FilesOpenedByIncludes = NULL; or_options_free(newoptions); or_options_free(newdefaultoptions); if (*msg) { @@ -6562,6 +6671,55 @@ warn_client_dns_cache(const char *option, int disabling) } /** + * Validate the configured bridge distribution method from a BridgeDistribution + * config line. + * + * The input <b>bd</b>, is a string taken from the BridgeDistribution config + * line (if present). If the option wasn't set, return 0 immediately. The + * BridgeDistribution option is then validated. Currently valid, recognised + * options are: + * + * - "none" + * - "any" + * - "https" + * - "email" + * - "moat" + * - "hyphae" + * + * If the option string is unrecognised, a warning will be logged and 0 is + * returned. If the option string contains an invalid character, -1 is + * returned. + **/ +STATIC int +check_bridge_distribution_setting(const char *bd) +{ + if (bd == NULL) + return 0; + + const char *RECOGNIZED[] = { + "none", "any", "https", "email", "moat", "hyphae" + }; + unsigned i; + for (i = 0; i < ARRAY_LENGTH(RECOGNIZED); ++i) { + if (!strcmp(bd, RECOGNIZED[i])) + return 0; + } + + const char *cp = bd; + // Method = (KeywordChar | "_") + + while (TOR_ISALNUM(*cp) || *cp == '-' || *cp == '_') + ++cp; + + if (*cp == 0) { + log_warn(LD_CONFIG, "Unrecognized BridgeDistribution value %s. I'll " + "assume you know what you are doing...", escaped(bd)); + return 0; // we reached the end of the string; all is well + } else { + return -1; // we found a bad character in the string. + } +} + +/** * Parse port configuration for a single port type. * * Read entries of the "FooPort" type from the list <b>ports</b>. Syntax is @@ -7805,28 +7963,6 @@ write_to_data_subdir(const char* subdir, const char* fname, return return_val; } -/** Given a file name check to see whether the file exists but has not been - * modified for a very long time. If so, remove it. */ -void -remove_file_if_very_old(const char *fname, time_t now) -{ -#define VERY_OLD_FILE_AGE (28*24*60*60) - struct stat st; - - log_debug(LD_FS, "stat()ing %s", fname); - if (stat(sandbox_intern_string(fname), &st)==0 && - st.st_mtime < now-VERY_OLD_FILE_AGE) { - char buf[ISO_TIME_LEN+1]; - format_local_iso_time(buf, st.st_mtime); - log_notice(LD_GENERAL, "Obsolete file %s hasn't been modified since %s. " - "Removing it.", fname, buf); - if (unlink(fname) != 0) { - log_warn(LD_FS, "Failed to unlink %s: %s", - fname, strerror(errno)); - } - } -} - /** Return a smartlist of ports that must be forwarded by * tor-fw-helper. The smartlist contains the ports in a string format * that is understandable by tor-fw-helper. */ diff --git a/src/or/config.h b/src/or/config.h index f69a3c483f..efdd8c59b0 100644 --- a/src/or/config.h +++ b/src/or/config.h @@ -31,6 +31,7 @@ const char *safe_str_client(const char *address); const char *safe_str(const char *address); const char *escaped_safe_str_client(const char *address); const char *escaped_safe_str(const char *address); +int get_protocol_warning_severity_level(void); const char *get_version(void); const char *get_short_version(void); setopt_err_t options_trial_assign(config_line_t *list, unsigned flags, @@ -202,6 +203,8 @@ STATIC int parse_port_config(smartlist_t *out, const char *defaultaddr, int defaultport, const unsigned flags); + +STATIC int check_bridge_distribution_setting(const char *bd); #endif /* defined(CONFIG_PRIVATE) */ #endif /* !defined(TOR_CONFIG_H) */ diff --git a/src/or/connection.c b/src/or/connection.c index 632a833652..92ccd3d5c8 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -118,8 +118,6 @@ static connection_t *connection_listener_new( const port_cfg_t *portcfg); static void connection_init(time_t now, connection_t *conn, int type, int socket_family); -static int connection_init_accepted_conn(connection_t *conn, - const listener_connection_t *listener); static int connection_handle_listener_read(connection_t *conn, int new_type); static int connection_bucket_should_increase(int bucket, or_connection_t *conn); @@ -770,6 +768,10 @@ connection_close_immediate(connection_t *conn) connection_unregister_events(conn); + /* Prevent the event from getting unblocked. */ + conn->read_blocked_on_bw = + conn->write_blocked_on_bw = 0; + if (SOCKET_OK(conn->s)) tor_close_socket(conn->s); conn->s = TOR_INVALID_SOCKET; @@ -1662,11 +1664,15 @@ connection_handle_listener_read(connection_t *conn, int new_type) } /** Initialize states for newly accepted connection <b>conn</b>. + * * If conn is an OR, start the TLS handshake. + * * If conn is a transparent AP, get its original destination * and place it in circuit_wait. + * + * The <b>listener</b> parameter is only used for AP connections. */ -static int +int connection_init_accepted_conn(connection_t *conn, const listener_connection_t *listener) { @@ -1746,7 +1752,11 @@ connection_connect_sockaddr,(connection_t *conn, if (get_options()->DisableNetwork) { /* We should never even try to connect anyplace if DisableNetwork is set. - * Warn if we do, and refuse to make the connection. */ + * Warn if we do, and refuse to make the connection. + * + * We only check DisableNetwork here, not we_are_hibernating(), since + * we'll still try to fulfill client requests sometimes in the latter case + * (if it is soft hibernation) */ static ratelim_t disablenet_violated = RATELIM_INIT(30*60); *socket_error = SOCK_ERRNO(ENETUNREACH); log_fn_ratelim(&disablenet_violated, LOG_WARN, LD_BUG, @@ -4045,6 +4055,68 @@ connection_flush(connection_t *conn) return connection_handle_write(conn, 1); } +/** Helper for connection_write_to_buf_impl and connection_write_buf_to_buf: + * + * Return true iff it is okay to queue bytes on <b>conn</b>'s outbuf for + * writing. + */ +static int +connection_may_write_to_buf(connection_t *conn) +{ + /* if it's marked for close, only allow write if we mean to flush it */ + if (conn->marked_for_close && !conn->hold_open_until_flushed) + return 0; + + return 1; +} + +/** Helper for connection_write_to_buf_impl and connection_write_buf_to_buf: + * + * Called when an attempt to add bytes on <b>conn</b>'s outbuf has failed; + * mark the connection and warn as appropriate. + */ +static void +connection_write_to_buf_failed(connection_t *conn) +{ + if (CONN_IS_EDGE(conn)) { + /* if it failed, it means we have our package/delivery windows set + wrong compared to our max outbuf size. close the whole circuit. */ + log_warn(LD_NET, + "write_to_buf failed. Closing circuit (fd %d).", (int)conn->s); + circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)), + END_CIRC_REASON_INTERNAL); + } else if (conn->type == CONN_TYPE_OR) { + or_connection_t *orconn = TO_OR_CONN(conn); + log_warn(LD_NET, + "write_to_buf failed on an orconn; notifying of error " + "(fd %d)", (int)(conn->s)); + connection_or_close_for_error(orconn, 0); + } else { + log_warn(LD_NET, + "write_to_buf failed. Closing connection (fd %d).", + (int)conn->s); + connection_mark_for_close(conn); + } +} + +/** Helper for connection_write_to_buf_impl and connection_write_buf_to_buf: + * + * Called when an attempt to add bytes on <b>conn</b>'s outbuf has succeeded: + * record the number of bytes added. + */ +static void +connection_write_to_buf_commit(connection_t *conn, size_t len) +{ + /* If we receive optimistic data in the EXIT_CONN_STATE_RESOLVING + * state, we don't want to try to write it right away, since + * conn->write_event won't be set yet. Otherwise, write data from + * this conn as the socket is available. */ + if (conn->write_event) { + connection_start_writing(conn); + } + conn->outbuf_flushlen += len; +} + /** Append <b>len</b> bytes of <b>string</b> onto <b>conn</b>'s * outbuf, and ask it to start writing. * @@ -4059,58 +4131,52 @@ connection_write_to_buf_impl_,(const char *string, size_t len, { /* XXXX This function really needs to return -1 on failure. */ int r; - size_t old_datalen; if (!len && !(zlib<0)) return; - /* if it's marked for close, only allow write if we mean to flush it */ - if (conn->marked_for_close && !conn->hold_open_until_flushed) + + if (!connection_may_write_to_buf(conn)) return; - old_datalen = buf_datalen(conn->outbuf); + size_t written; + if (zlib) { + size_t old_datalen = buf_datalen(conn->outbuf); dir_connection_t *dir_conn = TO_DIR_CONN(conn); int done = zlib < 0; CONN_LOG_PROTECT(conn, r = buf_add_compress(conn->outbuf, - dir_conn->compress_state, - string, len, done)); + dir_conn->compress_state, + string, len, done)); + written = buf_datalen(conn->outbuf) - old_datalen; } else { CONN_LOG_PROTECT(conn, r = buf_add(conn->outbuf, string, len)); + written = len; } if (r < 0) { - if (CONN_IS_EDGE(conn)) { - /* if it failed, it means we have our package/delivery windows set - wrong compared to our max outbuf size. close the whole circuit. */ - log_warn(LD_NET, - "write_to_buf failed. Closing circuit (fd %d).", (int)conn->s); - circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)), - END_CIRC_REASON_INTERNAL); - } else if (conn->type == CONN_TYPE_OR) { - or_connection_t *orconn = TO_OR_CONN(conn); - log_warn(LD_NET, - "write_to_buf failed on an orconn; notifying of error " - "(fd %d)", (int)(conn->s)); - connection_or_close_for_error(orconn, 0); - } else { - log_warn(LD_NET, - "write_to_buf failed. Closing connection (fd %d).", - (int)conn->s); - connection_mark_for_close(conn); - } + connection_write_to_buf_failed(conn); return; } + connection_write_to_buf_commit(conn, written); +} - /* If we receive optimistic data in the EXIT_CONN_STATE_RESOLVING - * state, we don't want to try to write it right away, since - * conn->write_event won't be set yet. Otherwise, write data from - * this conn as the socket is available. */ - if (conn->write_event) { - connection_start_writing(conn); - } - if (zlib) { - conn->outbuf_flushlen += buf_datalen(conn->outbuf) - old_datalen; - } else { - conn->outbuf_flushlen += len; - } +/** + * Add all bytes from <b>buf</b> to <b>conn</b>'s outbuf, draining them + * from <b>buf</b>. (If the connection is marked and will soon be closed, + * nothing is drained.) + */ +void +connection_buf_add_buf(connection_t *conn, buf_t *buf) +{ + tor_assert(conn); + tor_assert(buf); + size_t len = buf_datalen(buf); + if (len == 0) + return; + + if (!connection_may_write_to_buf(conn)) + return; + + buf_move_all(conn->outbuf, buf); + connection_write_to_buf_commit(conn, len); } #define CONN_GET_ALL_TEMPLATE(var, test) \ diff --git a/src/or/connection.h b/src/or/connection.h index 4a5bd6971b..1d41a3c4f5 100644 --- a/src/or/connection.h +++ b/src/or/connection.h @@ -26,7 +26,8 @@ entry_connection_t *entry_connection_new(int type, int socket_family); control_connection_t *control_connection_new(int socket_family); listener_connection_t *listener_connection_new(int type, int socket_family); connection_t *connection_new(int type, int socket_family); - +int connection_init_accepted_conn(connection_t *conn, + const listener_connection_t *listener); void connection_link_connections(connection_t *conn_a, connection_t *conn_b); MOCK_DECL(void,connection_free,(connection_t *conn)); void connection_free_all(void); @@ -155,6 +156,7 @@ connection_buf_add_compress(const char *string, size_t len, { connection_write_to_buf_impl_(string, len, TO_CONN(conn), done ? -1 : 1); } +void connection_buf_add_buf(connection_t *conn, buf_t *buf); /* DOCDOC connection_get_inbuf_len */ static size_t connection_get_inbuf_len(connection_t *conn); @@ -243,7 +245,6 @@ char *alloc_http_authenticator(const char *authenticator); void assert_connection_ok(connection_t *conn, time_t now); int connection_or_nonopen_was_started_here(or_connection_t *conn); void connection_dump_buffer_mem_stats(int severity); -void remove_file_if_very_old(const char *fname, time_t now); void clock_skew_warning(const connection_t *conn, long apparent_skew, int trusted, log_domain_mask_t domain, diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 77dac62b09..41f0fe6a1d 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -999,7 +999,7 @@ connection_ap_mark_as_pending_circuit_(entry_connection_t *entry_conn, * So the fix is to tell it right now that it ought to finish its loop at * its next available opportunity. */ - tell_event_loop_to_finish(); + tell_event_loop_to_run_external_code(); } /** Mark <b>entry_conn</b> as no longer waiting for a circuit. */ @@ -1344,7 +1344,7 @@ connection_ap_handshake_rewrite(entry_connection_t *conn, /* Hang on, did we find an answer saying that this is a reverse lookup for * an internal address? If so, we should reject it if we're configured to * do so. */ - if (options->TestingClientDNSRejectInternalAddresses) { + if (options->ClientDNSRejectInternalAddresses) { /* Don't let clients try to do a reverse lookup on 10.0.0.1. */ tor_addr_t addr; int ok; @@ -1571,10 +1571,10 @@ connection_ap_handle_onion(entry_connection_t *conn, int ret = hs_client_refetch_hsdesc(&edge_conn->hs_ident->identity_pk); switch (ret) { case HS_CLIENT_FETCH_MISSING_INFO: - /* By going to the end, the connection is put in waiting for a circuit - * state which means that it will be retried and consider as a pending - * connection. */ - goto end; + /* Keeping the connection in descriptor wait state is fine because + * once we get enough dirinfo or a new live consensus, the HS client + * subsystem is notified and every connection in that state will + * trigger a fetch for the service key. */ case HS_CLIENT_FETCH_LAUNCHED: case HS_CLIENT_FETCH_PENDING: case HS_CLIENT_FETCH_HAVE_DESC: @@ -1591,7 +1591,6 @@ connection_ap_handle_onion(entry_connection_t *conn, /* We have the descriptor! So launch a connection to the HS. */ log_info(LD_REND, "Descriptor is here. Great."); - end: base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT; /* We'll try to attach it at the next event loop, or whenever * we call connection_ap_attach_pending() */ diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 9e34063609..7af1f2b645 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -886,7 +886,7 @@ connection_or_check_canonicity(or_connection_t *conn, int started_here) const node_t *r = node_get_by_id(id_digest); if (r && - node_supports_ed25519_link_authentication(r) && + node_supports_ed25519_link_authentication(r, 1) && ! node_ed25519_id_matches(r, ed_id)) { /* If this node is capable of proving an ed25519 ID, * we can't call this a canonical connection unless both IDs match. */ diff --git a/src/or/conscache.c b/src/or/conscache.c index 0f3e453eaf..1a15126f97 100644 --- a/src/or/conscache.c +++ b/src/or/conscache.c @@ -539,9 +539,20 @@ consensus_cache_rescan(consensus_cache_t *cache) map = storage_dir_map_labeled(cache->dir, fname, &labels, &body, &bodylen); if (! map) { - /* Can't load this; continue */ - log_warn(LD_FS, "Unable to map file %s from consensus cache: %s", - escaped(fname), strerror(errno)); + /* The ERANGE error might come from tor_mmap_file() -- it means the file + * was empty. EINVAL might come from ..map_labeled() -- it means the + * file was misformatted. In both cases, we should just delete it. + */ + if (errno == ERANGE || errno == EINVAL) { + log_warn(LD_FS, "Found %s file %s in consensus cache; removing it.", + errno == ERANGE ? "empty" : "misformatted", + escaped(fname)); + storage_dir_remove_file(cache->dir, fname); + } else { + /* Can't load this; continue */ + log_warn(LD_FS, "Unable to map file %s from consensus cache: %s", + escaped(fname), strerror(errno)); + } continue; } consensus_cache_entry_t *ent = diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c index 1d63d59577..e539b61484 100644 --- a/src/or/consdiffmgr.c +++ b/src/or/consdiffmgr.c @@ -283,6 +283,10 @@ cdm_diff_ht_set_status(consensus_flavor_t flav, int status, consensus_cache_entry_handle_t *handle) { + if (handle == NULL) { + tor_assert_nonfatal(status != CDM_DIFF_PRESENT); + } + struct cdm_diff_t search, *ent; memset(&search, 0, sizeof(cdm_diff_t)); search.flavor = flav; @@ -1589,8 +1593,13 @@ consensus_diff_worker_replyfn(void *work_) for (u = 0; u < ARRAY_LENGTH(handles); ++u) { compress_method_t method = compress_diffs_with[u]; if (cache) { - cdm_diff_ht_set_status(flav, from_sha3, to_sha3, method, status, - handles[u]); + consensus_cache_entry_handle_t *h = handles[u]; + int this_status = status; + if (h == NULL) { + this_status = CDM_DIFF_ERROR; + } + tor_assert_nonfatal(h != NULL || this_status == CDM_DIFF_ERROR); + cdm_diff_ht_set_status(flav, from_sha3, to_sha3, method, this_status, h); } else { consensus_cache_entry_handle_free(handles[u]); } diff --git a/src/or/control.c b/src/or/control.c index ab164700e6..0d462b2d7d 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -549,6 +549,49 @@ decode_escaped_string(const char *start, size_t in_len_max, return end+1; } +/** Create and add a new controller connection on <b>sock</b>. If + * <b>CC_LOCAL_FD_IS_OWNER</b> is set in <b>flags</b>, this Tor process should + * exit when the connection closes. If <b>CC_LOCAL_FD_IS_AUTHENTICATED</b> + * is set, then the connection does not need to authenticate. + */ +int +control_connection_add_local_fd(tor_socket_t sock, unsigned flags) +{ + if (BUG(! SOCKET_OK(sock))) + return -1; + const int is_owner = !!(flags & CC_LOCAL_FD_IS_OWNER); + const int is_authenticated = !!(flags & CC_LOCAL_FD_IS_AUTHENTICATED); + control_connection_t *control_conn = control_connection_new(AF_UNSPEC); + connection_t *conn = TO_CONN(control_conn); + conn->s = sock; + tor_addr_make_unspec(&conn->addr); + conn->port = 1; + conn->address = tor_strdup("<local socket>"); + + /* We take ownership of this socket so that later, when we close it, + * we don't freak out. */ + tor_take_socket_ownership(sock); + + if (set_socket_nonblocking(sock) < 0 || + connection_add(conn) < 0) { + connection_free(conn); + return -1; + } + + control_conn->is_owning_control_connection = is_owner; + + if (connection_init_accepted_conn(conn, NULL) < 0) { + connection_mark_for_close(conn); + return -1; + } + + if (is_authenticated) { + conn->state = CONTROL_CONN_STATE_OPEN; + } + + return 0; +} + /** Acts like sprintf, but writes its formatted string to the end of * <b>conn</b>-\>outbuf. */ static void @@ -6571,8 +6614,7 @@ monitor_owning_controller_process(const char *process_spec) "owning controller: %s. Exiting.", msg); owning_controller_process_spec = NULL; - tor_cleanup(); - exit(1); // XXXX bad exit: or questionable, at least. + tor_shutdown_event_loop_and_exit(1); } } @@ -7284,7 +7326,7 @@ control_event_hs_descriptor_upload_failed(const char *id_digest, id_digest); return; } - control_event_hs_descriptor_upload_end("UPLOAD_FAILED", onion_address, + control_event_hs_descriptor_upload_end("FAILED", onion_address, id_digest, reason); } diff --git a/src/or/control.h b/src/or/control.h index e957b593a6..7ec182cb78 100644 --- a/src/or/control.h +++ b/src/or/control.h @@ -27,6 +27,10 @@ void control_ports_write_to_file(void); #define LOG_FN_CONN(conn, args) \ CONN_LOG_PROTECT(conn, log_fn args) +#define CC_LOCAL_FD_IS_OWNER (1u<<0) +#define CC_LOCAL_FD_IS_AUTHENTICATED (1u<<1) +int control_connection_add_local_fd(tor_socket_t sock, unsigned flags); + int connection_control_finished_flushing(control_connection_t *conn); int connection_control_reached_eof(control_connection_t *conn); void connection_control_closed(control_connection_t *conn); diff --git a/src/or/directory.c b/src/or/directory.c index 6470723cd8..0c40b2018c 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -116,7 +116,8 @@ static void dir_routerdesc_download_failed(smartlist_t *failed, int was_extrainfo, int was_descriptor_digests); static void dir_microdesc_download_failed(smartlist_t *failed, - int status_code); + int status_code, + const char *dir_id); static int client_likes_consensus(const struct consensus_cache_entry_t *ent, const char *want_url); @@ -469,7 +470,7 @@ directory_pick_generic_dirserver(dirinfo_type_t type, int pds_flags, log_warn(LD_BUG, "Called when we have UseBridges set."); if (should_use_directory_guards(options)) { - const node_t *node = guards_choose_dirguard(guard_state_out); + const node_t *node = guards_choose_dirguard(dir_purpose, guard_state_out); if (node) rs = node->rs; } else { @@ -603,7 +604,7 @@ directory_get_from_dirserver,( * sort of dir fetch we'll be doing, so it won't return a bridge * that can't answer our question. */ - const node_t *node = guards_choose_dirguard(&guard_state); + const node_t *node = guards_choose_dirguard(dir_purpose, &guard_state); if (node && node->ri) { /* every bridge has a routerinfo. */ routerinfo_t *ri = node->ri; @@ -1011,48 +1012,6 @@ directory_must_use_begindir(const or_options_t *options) return !public_server_mode(options); } -struct directory_request_t { - /** - * These fields specify which directory we're contacting. Routerstatus, - * if present, overrides the other fields. - * - * @{ */ - tor_addr_port_t or_addr_port; - tor_addr_port_t dir_addr_port; - char digest[DIGEST_LEN]; - - const routerstatus_t *routerstatus; - /** @} */ - /** One of DIR_PURPOSE_* other than DIR_PURPOSE_SERVER. Describes what - * kind of operation we'll be doing (upload/download), and of what kind - * of document. */ - uint8_t dir_purpose; - /** One of ROUTER_PURPOSE_*; used for uploads and downloads of routerinfo - * and extrainfo docs. */ - uint8_t router_purpose; - /** Enum: determines whether to anonymize, and whether to use dirport or - * orport. */ - dir_indirection_t indirection; - /** Alias to the variable part of the URL for this request */ - const char *resource; - /** Alias to the payload to upload (if any) */ - const char *payload; - /** Number of bytes to upload from payload</b> */ - size_t payload_len; - /** Value to send in an if-modified-since header, or 0 for none. */ - time_t if_modified_since; - /** Hidden-service-specific information v2. */ - const rend_data_t *rend_query; - /** Extra headers to append to the request */ - config_line_t *additional_headers; - /** Hidden-service-specific information for v3+. */ - const hs_ident_dir_conn_t *hs_ident; - /** Used internally to directory.c: gets informed when the attempt to - * connect to the directory succeeds or fails, if that attempt bears on the - * directory's usability as a directory guard. */ - circuit_guard_state_t *guard_state; -}; - /** Evaluate the situation and decide if we should use an encrypted * "begindir-style" connection for this directory request. * 0) If there is no DirPort, yes. @@ -2237,8 +2196,6 @@ load_downloaded_routers(const char *body, smartlist_t *which, return added; } -static int handle_response_fetch_consensus(dir_connection_t *, - const response_handler_args_t *); static int handle_response_fetch_certificate(dir_connection_t *, const response_handler_args_t *); static int handle_response_fetch_status_vote(dir_connection_t *, @@ -2247,8 +2204,6 @@ static int handle_response_fetch_detached_signatures(dir_connection_t *, const response_handler_args_t *); static int handle_response_fetch_desc(dir_connection_t *, const response_handler_args_t *); -static int handle_response_fetch_microdesc(dir_connection_t *, - const response_handler_args_t *); static int handle_response_upload_dir(dir_connection_t *, const response_handler_args_t *); static int handle_response_upload_vote(dir_connection_t *, @@ -2585,7 +2540,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) * consensus document by checking the consensus, storing it, and marking * router requests as reachable. **/ -static int +STATIC int handle_response_fetch_consensus(dir_connection_t *conn, const response_handler_args_t *args) { @@ -2669,11 +2624,11 @@ handle_response_fetch_consensus(dir_connection_t *conn, /* If we launched other fetches for this consensus, cancel them. */ connection_dir_close_consensus_fetches(conn, flavname); - /* launches router downloads as needed */ + /* update the list of routers and directory guards */ routers_update_all_from_networkstatus(now, 3); update_microdescs_from_networkstatus(now); - update_microdesc_downloads(now); directory_info_has_arrived(now, 0, 0); + if (authdir_mode_v3(get_options())) { sr_act_post_consensus( networkstatus_get_latest_consensus_by_flavor(FLAV_NS)); @@ -2889,7 +2844,7 @@ handle_response_fetch_desc(dir_connection_t *conn, conn->router_purpose, conn->base_.address)) { time_t now = approx_time(); - directory_info_has_arrived(now, 0, 0); + directory_info_has_arrived(now, 0, 1); } } } @@ -2916,7 +2871,7 @@ handle_response_fetch_desc(dir_connection_t *conn, * Handler function: processes a response to a request for a group of * microdescriptors **/ -static int +STATIC int handle_response_fetch_microdesc(dir_connection_t *conn, const response_handler_args_t *args) { @@ -2933,6 +2888,7 @@ handle_response_fetch_microdesc(dir_connection_t *conn, conn->base_.port); tor_assert(conn->requested_resource && !strcmpstart(conn->requested_resource, "d/")); + tor_assert_nonfatal(!tor_mem_is_zero(conn->identity_digest, DIGEST_LEN)); which = smartlist_new(); dir_split_resource_into_fingerprints(conn->requested_resource+2, which, NULL, @@ -2943,7 +2899,7 @@ handle_response_fetch_microdesc(dir_connection_t *conn, "soon.", status_code, escaped(reason), conn->base_.address, (int)conn->base_.port, conn->requested_resource); - dir_microdesc_download_failed(which, status_code); + dir_microdesc_download_failed(which, status_code, conn->identity_digest); SMARTLIST_FOREACH(which, char *, cp, tor_free(cp)); smartlist_free(which); return 0; @@ -2955,7 +2911,7 @@ handle_response_fetch_microdesc(dir_connection_t *conn, now, which); if (smartlist_len(which)) { /* Mark remaining ones as failed. */ - dir_microdesc_download_failed(which, status_code); + dir_microdesc_download_failed(which, status_code, conn->identity_digest); } if (mds && smartlist_len(mds)) { control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS, @@ -3339,10 +3295,11 @@ handle_response_upload_hsdesc(dir_connection_t *conn, /* XXX: Trigger control event. */ break; case 400: - log_warn(LD_REND, "Uploading hidden service descriptor: http " - "status 400 (%s) response from dirserver " - "'%s:%d'. Malformed hidden service descriptor?", - escaped(reason), conn->base_.address, conn->base_.port); + log_fn(LOG_PROTOCOL_WARN, LD_REND, + "Uploading hidden service descriptor: http " + "status 400 (%s) response from dirserver " + "'%s:%d'. Malformed hidden service descriptor?", + escaped(reason), conn->base_.address, conn->base_.port); /* XXX: Trigger control event. */ break; default: @@ -3517,63 +3474,47 @@ write_http_response_header_impl(dir_connection_t *conn, ssize_t length, long cache_lifetime) { char date[RFC1123_TIME_LEN+1]; - char tmp[1024]; - char *cp; time_t now = time(NULL); + buf_t *buf = buf_new_with_capacity(1024); tor_assert(conn); format_rfc1123_time(date, now); - cp = tmp; - tor_snprintf(cp, sizeof(tmp), - "HTTP/1.0 200 OK\r\nDate: %s\r\n", - date); - cp += strlen(tmp); + + buf_add_printf(buf, "HTTP/1.0 200 OK\r\nDate: %s\r\n", date); if (type) { - tor_snprintf(cp, sizeof(tmp)-(cp-tmp), "Content-Type: %s\r\n", type); - cp += strlen(cp); + buf_add_printf(buf, "Content-Type: %s\r\n", type); } if (!is_local_addr(&conn->base_.addr)) { /* Don't report the source address for a nearby/private connection. * Otherwise we tend to mis-report in cases where incoming ports are * being forwarded to a Tor server running behind the firewall. */ - tor_snprintf(cp, sizeof(tmp)-(cp-tmp), - X_ADDRESS_HEADER "%s\r\n", conn->base_.address); - cp += strlen(cp); + buf_add_printf(buf, X_ADDRESS_HEADER "%s\r\n", conn->base_.address); } if (encoding) { - tor_snprintf(cp, sizeof(tmp)-(cp-tmp), - "Content-Encoding: %s\r\n", encoding); - cp += strlen(cp); + buf_add_printf(buf, "Content-Encoding: %s\r\n", encoding); } if (length >= 0) { - tor_snprintf(cp, sizeof(tmp)-(cp-tmp), - "Content-Length: %ld\r\n", (long)length); - cp += strlen(cp); + buf_add_printf(buf, "Content-Length: %ld\r\n", (long)length); } if (cache_lifetime > 0) { char expbuf[RFC1123_TIME_LEN+1]; format_rfc1123_time(expbuf, (time_t)(now + cache_lifetime)); /* We could say 'Cache-control: max-age=%d' here if we start doing * http/1.1 */ - tor_snprintf(cp, sizeof(tmp)-(cp-tmp), - "Expires: %s\r\n", expbuf); - cp += strlen(cp); + buf_add_printf(buf, "Expires: %s\r\n", expbuf); } else if (cache_lifetime == 0) { /* We could say 'Cache-control: no-cache' here if we start doing * http/1.1 */ - strlcpy(cp, "Pragma: no-cache\r\n", sizeof(tmp)-(cp-tmp)); - cp += strlen(cp); + buf_add_string(buf, "Pragma: no-cache\r\n"); } if (extra_headers) { - strlcpy(cp, extra_headers, sizeof(tmp)-(cp-tmp)); - cp += strlen(cp); + buf_add_string(buf, extra_headers); } - if (sizeof(tmp)-(cp-tmp) > 3) - memcpy(cp, "\r\n", 3); - else - tor_assert(0); - connection_buf_add(tmp, strlen(tmp), TO_CONN(conn)); + buf_add_string(buf, "\r\n"); + + connection_buf_add_buf(TO_CONN(conn), buf); + buf_free(buf); } /** As write_http_response_header_impl, but sets encoding and content-typed @@ -5421,54 +5362,68 @@ find_dl_min_and_max_delay(download_status_t *dls, const or_options_t *options, *max = INT_MAX; } -/** Advance one delay step. The algorithm is to use the previous delay to - * compute an increment, we construct a value uniformly at random between - * delay+1 and (delay*(DIR_DEFAULT_RANDOM_MULTIPLIER+1))+1 (or - * DIR_TEST_NET_RANDOM_MULTIPLIER in test networks). +/** As next_random_exponential_delay() below, but does not compute a random + * value. Instead, compute the range of values that + * next_random_exponential_delay() should use when computing its random value. + * Store the low bound into *<b>low_bound_out</b>, and the high bound into + * *<b>high_bound_out</b>. Guarantees that the low bound is strictly less + * than the high bound. */ +STATIC void +next_random_exponential_delay_range(int *low_bound_out, + int *high_bound_out, + int delay, + int base_delay) +{ + // This is the "decorrelated jitter" approach, from + // https://www.awsarchitectureblog.com/2015/03/backoff.html + // The formula is + // sleep = min(cap, random_between(base, sleep * 3)) + + const int delay_times_3 = delay < INT_MAX/3 ? delay * 3 : INT_MAX; + *low_bound_out = base_delay; + if (delay_times_3 > base_delay) { + *high_bound_out = delay_times_3; + } else { + *high_bound_out = base_delay+1; + } +} + +/** Advance one delay step. The algorithm will generate a random delay, + * such that each failure is possibly (random) longer than the ones before. + * * We then clamp that value to be no larger than max_delay, and return it. * + * The <b>base_delay</b> parameter is lowest possible delay time (can't be + * zero); the <b>backoff_position</b> parameter is the number of times we've + * generated a delay; and the <b>delay</b> argument is the most recently used + * delay. + * * Requires that delay is less than INT_MAX, and delay is in [0,max_delay]. */ STATIC int -next_random_exponential_delay(int delay, int max_delay) +next_random_exponential_delay(int delay, + int base_delay, + int max_delay) { /* Check preconditions */ if (BUG(max_delay < 0)) max_delay = 0; if (BUG(delay > max_delay)) delay = max_delay; - if (delay == INT_MAX) - return INT_MAX; /* prevent overflow */ if (BUG(delay < 0)) delay = 0; - /* How much are we willing to add to the delay? */ - int max_increment; - int multiplier = DIR_DEFAULT_RANDOM_MULTIPLIER; - if (get_options()->TestingTorNetwork) { - /* Decrease the multiplier in testing networks. This reduces the variance, - * so that bootstrap is more reliable. */ - multiplier = DIR_TEST_NET_RANDOM_MULTIPLIER; - } + if (base_delay < 1) + base_delay = 1; - if (delay && delay < (INT_MAX-1) / multiplier) { - max_increment = delay * multiplier; - } else if (delay) { - max_increment = INT_MAX-1; - } else { - max_increment = 1; - } + int low_bound=0, high_bound=max_delay; - if (BUG(max_increment < 1)) - max_increment = 1; + next_random_exponential_delay_range(&low_bound, &high_bound, + delay, base_delay); - /* the + 1 here is so that we always wait longer than last time. */ - int increment = crypto_rand_int(max_increment)+1; + int rand_delay = crypto_rand_int_range(low_bound, high_bound); - if (increment < max_delay - delay) - return delay + increment; - else - return max_delay; + return MIN(rand_delay, max_delay); } /** Find the current delay for dls based on schedule or min_delay/ @@ -5517,7 +5472,7 @@ download_status_schedule_get_delay(download_status_t *dls, while (dls->last_backoff_position < dls_schedule_position) { /* Do one increment step */ - delay = next_random_exponential_delay(delay, max_delay); + delay = next_random_exponential_delay(delay, min_delay, max_delay); /* Update our position */ ++(dls->last_backoff_position); } @@ -5797,13 +5752,14 @@ dir_routerdesc_download_failed(smartlist_t *failed, int status_code, * every 10 or 60 seconds (FOO_DESCRIPTOR_RETRY_INTERVAL) in main.c. */ } -/** Called when a connection to download microdescriptors has failed in whole - * or in part. <b>failed</b> is a list of every microdesc digest we didn't - * get. <b>status_code</b> is the http status code we received. Reschedule the - * microdesc downloads as appropriate. */ +/** Called when a connection to download microdescriptors from relay with + * <b>dir_id</b> has failed in whole or in part. <b>failed</b> is a list + * of every microdesc digest we didn't get. <b>status_code</b> is the http + * status code we received. Reschedule the microdesc downloads as + * appropriate. */ static void dir_microdesc_download_failed(smartlist_t *failed, - int status_code) + int status_code, const char *dir_id) { networkstatus_t *consensus = networkstatus_get_latest_consensus_by_flavor(FLAV_MICRODESC); @@ -5814,17 +5770,26 @@ dir_microdesc_download_failed(smartlist_t *failed, if (! consensus) return; + + /* We failed to fetch a microdescriptor from 'dir_id', note it down + * so that we don't try the same relay next time... */ + microdesc_note_outdated_dirserver(dir_id); + SMARTLIST_FOREACH_BEGIN(failed, const char *, d) { rs = router_get_mutable_consensus_status_by_descriptor_digest(consensus,d); if (!rs) continue; dls = &rs->dl_status; if (dls->n_download_failures >= - get_options()->TestingMicrodescMaxDownloadTries) + get_options()->TestingMicrodescMaxDownloadTries) { continue; - { + } + + { /* Increment the failure count for this md fetch */ char buf[BASE64_DIGEST256_LEN+1]; digest256_to_base64(buf, d); + log_info(LD_DIR, "Failed to download md %s from %s", + buf, hex_str(dir_id, DIGEST_LEN)); download_status_increment_failure(dls, status_code, buf, server, now); } diff --git a/src/or/directory.h b/src/or/directory.h index 79984be32d..3aef600716 100644 --- a/src/or/directory.h +++ b/src/or/directory.h @@ -183,6 +183,48 @@ typedef struct response_handler_args_t { const char *headers; } response_handler_args_t; +struct directory_request_t { + /** + * These fields specify which directory we're contacting. Routerstatus, + * if present, overrides the other fields. + * + * @{ */ + tor_addr_port_t or_addr_port; + tor_addr_port_t dir_addr_port; + char digest[DIGEST_LEN]; + + const routerstatus_t *routerstatus; + /** @} */ + /** One of DIR_PURPOSE_* other than DIR_PURPOSE_SERVER. Describes what + * kind of operation we'll be doing (upload/download), and of what kind + * of document. */ + uint8_t dir_purpose; + /** One of ROUTER_PURPOSE_*; used for uploads and downloads of routerinfo + * and extrainfo docs. */ + uint8_t router_purpose; + /** Enum: determines whether to anonymize, and whether to use dirport or + * orport. */ + dir_indirection_t indirection; + /** Alias to the variable part of the URL for this request */ + const char *resource; + /** Alias to the payload to upload (if any) */ + const char *payload; + /** Number of bytes to upload from payload</b> */ + size_t payload_len; + /** Value to send in an if-modified-since header, or 0 for none. */ + time_t if_modified_since; + /** Hidden-service-specific information v2. */ + const rend_data_t *rend_query; + /** Extra headers to append to the request */ + config_line_t *additional_headers; + /** Hidden-service-specific information for v3+. */ + const hs_ident_dir_conn_t *hs_ident; + /** Used internally to directory.c: gets informed when the attempt to + * connect to the directory succeeds or fails, if that attempt bears on the + * directory's usability as a directory guard. */ + struct circuit_guard_state_t *guard_state; +}; + struct get_handler_args_t; STATIC int handle_get_hs_descriptor_v3(dir_connection_t *conn, const struct get_handler_args_t *args); @@ -193,6 +235,11 @@ STATIC void warn_disallowed_anonymous_compression_method(compress_method_t); STATIC int handle_response_fetch_hsdesc_v3(dir_connection_t *conn, const response_handler_args_t *args); +STATIC int handle_response_fetch_microdesc(dir_connection_t *conn, + const response_handler_args_t *args); + +STATIC int handle_response_fetch_consensus(dir_connection_t *conn, + const response_handler_args_t *args); #endif /* defined(DIRECTORY_PRIVATE) */ @@ -226,7 +273,15 @@ STATIC const smartlist_t *find_dl_schedule(const download_status_t *dls, STATIC void find_dl_min_and_max_delay(download_status_t *dls, const or_options_t *options, int *min, int *max); -STATIC int next_random_exponential_delay(int delay, int max_delay); + +STATIC int next_random_exponential_delay(int delay, + int base_delay, + int max_delay); + +STATIC void next_random_exponential_delay_range(int *low_bound_out, + int *high_bound_out, + int delay, + int base_delay); STATIC int parse_hs_version_from_post(const char *url, const char *prefix, const char **end_pos); diff --git a/src/or/dirserv.c b/src/or/dirserv.c index ddee92da55..432fe6ae2b 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -1519,15 +1519,21 @@ dirserv_compute_performance_thresholds(digestmap_t *omit_as_sybil) node->ri && node->ri->purpose != ROUTER_PURPOSE_BRIDGE) continue; + + routerinfo_t *ri = node->ri; + if (ri) { + node->is_exit = (!router_exit_policy_rejects_all(ri) && + exit_policy_is_general_exit(ri->exit_policy)); + } + if (router_counts_toward_thresholds(node, now, omit_as_sybil, require_mbw)) { - routerinfo_t *ri = node->ri; const char *id = node->identity; uint32_t bw_kb; + /* resolve spurious clang shallow analysis null pointer errors */ tor_assert(ri); - node->is_exit = (!router_exit_policy_rejects_all(ri) && - exit_policy_is_general_exit(ri->exit_policy)); + uptimes[n_active] = (uint32_t)real_uptime(ri, now); mtbfs[n_active] = rep_hist_get_stability(id, now); tks [n_active] = rep_hist_get_weighted_time_known(id, now); @@ -3284,7 +3290,7 @@ dirserv_orconn_tls_done(const tor_addr_t *addr, ri = node->ri; if (get_options()->AuthDirTestEd25519LinkKeys && - node_supports_ed25519_link_authentication(node) && + node_supports_ed25519_link_authentication(node, 1) && ri->cache_info.signing_key_cert) { /* We allow the node to have an ed25519 key if we haven't been told one in * the routerinfo, but if we *HAVE* been told one in the routerinfo, it @@ -3367,7 +3373,7 @@ dirserv_single_reachability_test(time_t now, routerinfo_t *router) tor_assert(node); if (options->AuthDirTestEd25519LinkKeys && - node_supports_ed25519_link_authentication(node)) { + node_supports_ed25519_link_authentication(node, 1)) { ed_id_key = &router->cache_info.signing_key_cert->signing_key; } else { ed_id_key = NULL; diff --git a/src/or/dirvote.c b/src/or/dirvote.c index ba0ab7a776..fa89653040 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -519,7 +519,7 @@ compute_routerstatus_consensus(smartlist_t *votes, int consensus_method, /* compare_vote_rs_() sorts the items by identity digest (all the same), * then by SD digest. That way, if we have a tie that the published_on - * date cannot tie, we use the descriptor with the smaller digest. + * date cannot break, we use the descriptor with the smaller digest. */ smartlist_sort(votes, compare_vote_rs_); SMARTLIST_FOREACH_BEGIN(votes, vote_routerstatus_t *, rs) { @@ -795,6 +795,9 @@ dirvote_compute_params(smartlist_t *votes, int method, int total_authorities) output = smartlist_new(); SMARTLIST_FOREACH_BEGIN(param_list, const char *, param) { + /* resolve spurious clang shallow analysis null pointer errors */ + tor_assert(param); + const char *next_param; int ok=0; eq = strchr(param, '='); @@ -807,8 +810,7 @@ dirvote_compute_params(smartlist_t *votes, int method, int total_authorities) next_param = NULL; else next_param = smartlist_get(param_list, param_sl_idx+1); - /* resolve spurious clang shallow analysis null pointer errors */ - tor_assert(param); + if (!next_param || strncmp(next_param, param, cur_param_len)) { /* We've reached the end of a series. */ /* Make sure enough authorities voted on this param, unless the @@ -2787,48 +2789,10 @@ dirvote_get_start_of_next_interval(time_t now, int interval, int offset) return next; } -/* Using the time <b>now</b>, return the next voting valid-after time. */ -time_t -get_next_valid_after_time(time_t now) -{ - time_t next_valid_after_time; - const or_options_t *options = get_options(); - voting_schedule_t *new_voting_schedule = - get_voting_schedule(options, now, LOG_INFO); - tor_assert(new_voting_schedule); - - next_valid_after_time = new_voting_schedule->interval_starts; - voting_schedule_free(new_voting_schedule); - - return next_valid_after_time; -} - -static voting_schedule_t voting_schedule; - -/** Set voting_schedule to hold the timing for the next vote we should be - * doing. */ -void -dirvote_recalculate_timing(const or_options_t *options, time_t now) -{ - voting_schedule_t *new_voting_schedule; - - if (!authdir_mode_v3(options)) { - return; - } - - /* get the new voting schedule */ - new_voting_schedule = get_voting_schedule(options, now, LOG_NOTICE); - tor_assert(new_voting_schedule); - - /* Fill in the global static struct now */ - memcpy(&voting_schedule, new_voting_schedule, sizeof(voting_schedule)); - voting_schedule_free(new_voting_schedule); -} - /* Populate and return a new voting_schedule_t that can be used to schedule * voting. The object is allocated on the heap and it's the responsibility of * the caller to free it. Can't fail. */ -voting_schedule_t * +static voting_schedule_t * get_voting_schedule(const or_options_t *options, time_t now, int severity) { int interval, vote_delay, dist_delay; @@ -2883,7 +2847,7 @@ get_voting_schedule(const or_options_t *options, time_t now, int severity) /** Frees a voting_schedule_t. This should be used instead of the generic * tor_free. */ -void +static void voting_schedule_free(voting_schedule_t *voting_schedule_to_free) { if (!voting_schedule_to_free) @@ -2891,13 +2855,53 @@ voting_schedule_free(voting_schedule_t *voting_schedule_to_free) tor_free(voting_schedule_to_free); } +static voting_schedule_t voting_schedule; + +/* Using the time <b>now</b>, return the next voting valid-after time. */ +time_t +dirvote_get_next_valid_after_time(void) +{ + /* This is a safe guard in order to make sure that the voting schedule + * static object is at least initialized. Using this function with a zeroed + * voting schedule can lead to bugs. */ + if (tor_mem_is_zero((const char *) &voting_schedule, + sizeof(voting_schedule))) { + dirvote_recalculate_timing(get_options(), time(NULL)); + voting_schedule.created_on_demand = 1; + } + return voting_schedule.interval_starts; +} + +/** Set voting_schedule to hold the timing for the next vote we should be + * doing. All type of tor do that because HS subsystem needs the timing as + * well to function properly. */ +void +dirvote_recalculate_timing(const or_options_t *options, time_t now) +{ + voting_schedule_t *new_voting_schedule; + + /* get the new voting schedule */ + new_voting_schedule = get_voting_schedule(options, now, LOG_INFO); + tor_assert(new_voting_schedule); + + /* Fill in the global static struct now */ + memcpy(&voting_schedule, new_voting_schedule, sizeof(voting_schedule)); + voting_schedule_free(new_voting_schedule); +} + /** Entry point: Take whatever voting actions are pending as of <b>now</b>. */ void dirvote_act(const or_options_t *options, time_t now) { if (!authdir_mode_v3(options)) return; - if (!voting_schedule.voting_starts) { + tor_assert_nonfatal(voting_schedule.voting_starts); + /* If we haven't initialized this object through this codeflow, we need to + * recalculate the timings to match our vote. The reason to do that is if we + * have a voting schedule initialized 1 minute ago, the voting timings might + * not be aligned to what we should expect with "now". This is especially + * true for TestingTorNetwork using smaller timings. */ + if (voting_schedule.created_on_demand) { char *keys = list_v3_auth_ids(); authority_cert_t *c = get_my_v3_authority_cert(); log_notice(LD_DIR, "Scheduling voting. Known authority IDs are %s. " diff --git a/src/or/dirvote.h b/src/or/dirvote.h index fb3e60f000..72a35fea6d 100644 --- a/src/or/dirvote.h +++ b/src/or/dirvote.h @@ -168,12 +168,14 @@ typedef struct { int have_fetched_missing_signatures; /* True iff we have published our consensus. */ int have_published_consensus; -} voting_schedule_t; - -voting_schedule_t *get_voting_schedule(const or_options_t *options, - time_t now, int severity); -void voting_schedule_free(voting_schedule_t *voting_schedule_to_free); + /* True iff this voting schedule was set on demand meaning not through the + * normal vote operation of a dirauth or when a consensus is set. This only + * applies to a directory authority that needs to recalculate the voting + * timings only for the first vote even though this object was initilized + * prior to voting. */ + int created_on_demand; +} voting_schedule_t; void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out); time_t dirvote_get_start_of_next_interval(time_t now, @@ -181,7 +183,7 @@ time_t dirvote_get_start_of_next_interval(time_t now, int offset); void dirvote_recalculate_timing(const or_options_t *options, time_t now); void dirvote_act(const or_options_t *options, time_t now); -time_t get_next_valid_after_time(time_t now); +time_t dirvote_get_next_valid_after_time(void); /* invoked on timers and by outside triggers. */ struct pending_vote_t * dirvote_add_vote(const char *vote_body, diff --git a/src/or/dns.c b/src/or/dns.c index 078bde3ef2..f140051e81 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -1438,14 +1438,31 @@ configure_nameservers(int force) #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. + // Reducing attempts in the case of just one name server too, because + // it is very likely to be a local one where a network connectivity + // issue should not cause an attempt to fail. if (evdns_base_count_nameservers(the_evdns_base) == 1) { - SET("max-timeouts:", "16"); - SET("timeout:", "10"); + SET("max-timeouts:", "1000000"); + SET("attempts:", "1"); } else { SET("max-timeouts:", "3"); - SET("timeout:", "5"); } + // Elongate the queue of maximum inflight dns requests, so if a bunch + // time out 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"); + + // Time out after 5 seconds if no reply. + SET("timeout:", "5"); + if (options->ServerDNSRandomizeCase) SET("randomize-case:", "1"); else @@ -1561,10 +1578,11 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses, escaped_safe_str(hostname)); tor_free(escaped_address); } else if (count) { - log_warn(LD_EXIT, "eventdns returned only non-IPv4 answers for %s.", + log_info(LD_EXIT, "eventdns returned only unrecognized answer types " + " for %s.", escaped_safe_str(string_address)); } else { - log_warn(LD_BUG, "eventdns returned no addresses or error for %s!", + log_info(LD_EXIT, "eventdns returned no addresses or error for %s.", escaped_safe_str(string_address)); } } @@ -1648,7 +1666,7 @@ launch_resolve,(cached_resolve_t *resolve)) tor_addr_t a; int r; - if (get_options()->DisableNetwork) + if (net_is_disabled()) return -1; /* What? Nameservers not configured? Sounds like a bug. */ @@ -1883,7 +1901,7 @@ launch_test_addresses(evutil_socket_t fd, short event, void *args) (void)event; (void)args; - if (options->DisableNetwork) + if (net_is_disabled()) return; log_info(LD_EXIT, "Launching checks to see whether our nameservers like to " diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c index 9fbf426433..21505ed13a 100644 --- a/src/or/entrynodes.c +++ b/src/or/entrynodes.c @@ -966,7 +966,7 @@ entry_guard_learned_bridge_identity(const tor_addr_port_t *addrport, * violate it. */ STATIC int -num_reachable_filtered_guards(guard_selection_t *gs, +num_reachable_filtered_guards(const guard_selection_t *gs, const entry_guard_restriction_t *rst) { int n_reachable_filtered_guards = 0; @@ -1460,6 +1460,94 @@ guard_in_node_family(const entry_guard_t *guard, const node_t *node) } } +/* Allocate and return a new exit guard restriction (where <b>exit_id</b> is of + * size DIGEST_LEN) */ +STATIC entry_guard_restriction_t * +guard_create_exit_restriction(const uint8_t *exit_id) +{ + entry_guard_restriction_t *rst = NULL; + rst = tor_malloc_zero(sizeof(entry_guard_restriction_t)); + rst->type = RST_EXIT_NODE; + memcpy(rst->exclude_id, exit_id, DIGEST_LEN); + return rst; +} + +/** If we have fewer than this many possible usable guards, don't set + * MD-availability-based restrictions: we might blacklist all of them. */ +#define MIN_GUARDS_FOR_MD_RESTRICTION 10 + +/** Return true if we should set md dirserver restrictions. We might not want + * to set those if our guard options are too restricted, since we don't want + * to blacklist all of them. */ +static int +should_set_md_dirserver_restriction(void) +{ + const guard_selection_t *gs = get_guard_selection_info(); + int num_usable_guards = num_reachable_filtered_guards(gs, NULL); + + /* Don't set restriction if too few reachable filtered guards. */ + if (num_usable_guards < MIN_GUARDS_FOR_MD_RESTRICTION) { + log_info(LD_GUARD, "Not setting md restriction: only %d" + " usable guards.", num_usable_guards); + return 0; + } + + /* We have enough usable guards: set MD restriction */ + return 1; +} + +/** Allocate and return an outdated md guard restriction. Return NULL if no + * such restriction is needed. */ +STATIC entry_guard_restriction_t * +guard_create_dirserver_md_restriction(void) +{ + entry_guard_restriction_t *rst = NULL; + + if (!should_set_md_dirserver_restriction()) { + log_debug(LD_GUARD, "Not setting md restriction: too few " + "filtered guards."); + return NULL; + } + + rst = tor_malloc_zero(sizeof(entry_guard_restriction_t)); + rst->type = RST_OUTDATED_MD_DIRSERVER; + + return rst; +} + +/* Return True if <b>guard</b> obeys the exit restriction <b>rst</b>. */ +static int +guard_obeys_exit_restriction(const entry_guard_t *guard, + const entry_guard_restriction_t *rst) +{ + tor_assert(rst->type == RST_EXIT_NODE); + + // Exclude the exit ID and all of its family. + const node_t *node = node_get_by_id((const char*)rst->exclude_id); + if (node && guard_in_node_family(guard, node)) + return 0; + + return tor_memneq(guard->identity, rst->exclude_id, DIGEST_LEN); +} + +/** Return True if <b>guard</b> should be used as a dirserver for fetching + * microdescriptors. */ +static int +guard_obeys_md_dirserver_restriction(const entry_guard_t *guard) +{ + /* If this guard is an outdated dirserver, don't use it. */ + if (microdesc_relay_is_outdated_dirserver(guard->identity)) { + log_info(LD_GENERAL, "Skipping %s dirserver: outdated", + hex_str(guard->identity, DIGEST_LEN)); + return 0; + } + + log_debug(LD_GENERAL, "%s dirserver obeys md restrictions", + hex_str(guard->identity, DIGEST_LEN)); + + return 1; +} + /** * Return true iff <b>guard</b> obeys the restrictions defined in <b>rst</b>. * (If <b>rst</b> is NULL, there are no restrictions.) @@ -1472,13 +1560,14 @@ entry_guard_obeys_restriction(const entry_guard_t *guard, if (! rst) return 1; // No restriction? No problem. - // Only one kind of restriction exists right now: excluding an exit - // ID and all of its family. - const node_t *node = node_get_by_id((const char*)rst->exclude_id); - if (node && guard_in_node_family(guard, node)) - return 0; + if (rst->type == RST_EXIT_NODE) { + return guard_obeys_exit_restriction(guard, rst); + } else if (rst->type == RST_OUTDATED_MD_DIRSERVER) { + return guard_obeys_md_dirserver_restriction(guard); + } - return tor_memneq(guard->identity, rst->exclude_id, DIGEST_LEN); + tor_assert_nonfatal_unreached(); + return 0; } /** @@ -2105,7 +2194,7 @@ entry_guard_has_higher_priority(entry_guard_t *a, entry_guard_t *b) } /** Release all storage held in <b>restriction</b> */ -static void +STATIC void entry_guard_restriction_free(entry_guard_restriction_t *rst) { tor_free(rst); @@ -2126,9 +2215,9 @@ circuit_guard_state_free(circuit_guard_state_t *state) /** Allocate and return a new circuit_guard_state_t to track the result * of using <b>guard</b> for a given operation. */ -static circuit_guard_state_t * -circuit_guard_state_new(entry_guard_t *guard, unsigned state, - entry_guard_restriction_t *rst) +MOCK_IMPL(STATIC circuit_guard_state_t *, +circuit_guard_state_new,(entry_guard_t *guard, unsigned state, + entry_guard_restriction_t *rst)) { circuit_guard_state_t *result; @@ -3358,8 +3447,8 @@ guards_choose_guard(cpath_build_state_t *state, /* We're building to a targeted exit node, so that node can't be * chosen as our guard for this circuit. Remember that fact in a * restriction. */ - rst = tor_malloc_zero(sizeof(entry_guard_restriction_t)); - memcpy(rst->exclude_id, exit_id, DIGEST_LEN); + rst = guard_create_exit_restriction(exit_id); + tor_assert(rst); } if (entry_guard_pick_for_circuit(get_guard_selection_info(), GUARD_USAGE_TRAFFIC, @@ -3411,12 +3500,20 @@ remove_all_entry_guards(void) /** Helper: pick a directory guard, with whatever algorithm is used. */ const node_t * -guards_choose_dirguard(circuit_guard_state_t **guard_state_out) +guards_choose_dirguard(uint8_t dir_purpose, + circuit_guard_state_t **guard_state_out) { const node_t *r = NULL; + entry_guard_restriction_t *rst = NULL; + + /* If we are fetching microdescs, don't query outdated dirservers. */ + if (dir_purpose == DIR_PURPOSE_FETCH_MICRODESC) { + rst = guard_create_dirserver_md_restriction(); + } + if (entry_guard_pick_for_circuit(get_guard_selection_info(), GUARD_USAGE_DIRGUARD, - NULL, + rst, &r, guard_state_out) < 0) { tor_assert(r == NULL); diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h index 9e1e729930..9d1293d02a 100644 --- a/src/or/entrynodes.h +++ b/src/or/entrynodes.h @@ -272,22 +272,28 @@ struct guard_selection_s { struct entry_guard_handle_t; +/** Types of restrictions we impose when picking guard nodes */ +typedef enum guard_restriction_type_t { + /* Don't pick the same guard node as our exit node (or its family) */ + RST_EXIT_NODE = 0, + /* Don't pick dirguards that have previously shown to be outdated */ + RST_OUTDATED_MD_DIRSERVER = 1 +} guard_restriction_type_t; + /** * A restriction to remember which entry guards are off-limits for a given * circuit. * - * Right now, we only use restrictions to block a single guard and its family - * from being selected; this mechanism is designed to be more extensible in - * the future, however. - * * Note: This mechanism is NOT for recording which guards are never to be * used: only which guards cannot be used on <em>one particular circuit</em>. */ struct entry_guard_restriction_t { - /** - * The guard's RSA identity digest must not equal this; and it must not - * be in the same family as any node with this digest. - */ + /* What type of restriction are we imposing? */ + guard_restriction_type_t type; + + /* In case of restriction type RST_EXIT_NODE, the guard's RSA identity + * digest must not equal this; and it must not be in the same family as any + * node with this digest. */ uint8_t exclude_id[DIGEST_LEN]; }; @@ -316,7 +322,8 @@ struct circuit_guard_state_t { int guards_update_all(void); const node_t *guards_choose_guard(cpath_build_state_t *state, circuit_guard_state_t **guard_state_out); -const node_t *guards_choose_dirguard(circuit_guard_state_t **guard_state_out); +const node_t *guards_choose_dirguard(uint8_t dir_purpose, + circuit_guard_state_t **guard_state_out); #if 1 /* XXXX NM I would prefer that all of this stuff be private to @@ -488,6 +495,10 @@ STATIC entry_guard_t *get_sampled_guard_with_id(guard_selection_t *gs, MOCK_DECL(STATIC time_t, randomize_time, (time_t now, time_t max_backdate)); +MOCK_DECL(STATIC circuit_guard_state_t *, + circuit_guard_state_new,(entry_guard_t *guard, unsigned state, + entry_guard_restriction_t *rst)); + STATIC entry_guard_t *entry_guard_add_to_sample(guard_selection_t *gs, const node_t *node); STATIC entry_guard_t *entry_guards_expand_sample(guard_selection_t *gs); @@ -514,7 +525,7 @@ STATIC void entry_guard_consider_retry(entry_guard_t *guard); STATIC void make_guard_confirmed(guard_selection_t *gs, entry_guard_t *guard); STATIC void entry_guards_update_confirmed(guard_selection_t *gs); STATIC void entry_guards_update_primary(guard_selection_t *gs); -STATIC int num_reachable_filtered_guards(guard_selection_t *gs, +STATIC int num_reachable_filtered_guards(const guard_selection_t *gs, const entry_guard_restriction_t *rst); STATIC void sampled_guards_update_from_consensus(guard_selection_t *gs); /** @@ -550,6 +561,14 @@ STATIC unsigned entry_guards_note_guard_success(guard_selection_t *gs, unsigned old_state); STATIC int entry_guard_has_higher_priority(entry_guard_t *a, entry_guard_t *b); STATIC char *getinfo_helper_format_single_entry_guard(const entry_guard_t *e); + +STATIC entry_guard_restriction_t *guard_create_exit_restriction( + const uint8_t *exit_id); + +STATIC entry_guard_restriction_t *guard_create_dirserver_md_restriction(void); + +STATIC void entry_guard_restriction_free(entry_guard_restriction_t *rst); + #endif /* defined(ENTRYNODES_PRIVATE) */ void remove_all_entry_guards_for_guard_selection(guard_selection_t *gs); diff --git a/src/or/geoip.c b/src/or/geoip.c index 3944b2cf69..c976b8d276 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -30,6 +30,7 @@ #define GEOIP_PRIVATE #include "or.h" #include "ht.h" +#include "buffers.h" #include "config.h" #include "control.h" #include "dnsserv.h" @@ -930,9 +931,9 @@ static char * geoip_get_dirreq_history(dirreq_type_t type) { char *result = NULL; + buf_t *buf = NULL; smartlist_t *dirreq_completed = NULL; uint32_t complete = 0, timeouts = 0, running = 0; - int bufsize = 1024, written; dirreq_map_entry_t **ptr, **next; struct timeval now; @@ -965,13 +966,9 @@ geoip_get_dirreq_history(dirreq_type_t type) DIR_REQ_GRANULARITY); running = round_uint32_to_next_multiple_of(running, DIR_REQ_GRANULARITY); - result = tor_malloc_zero(bufsize); - written = tor_snprintf(result, bufsize, "complete=%u,timeout=%u," - "running=%u", complete, timeouts, running); - if (written < 0) { - tor_free(result); - goto done; - } + buf = buf_new_with_capacity(1024); + buf_add_printf(buf, "complete=%u,timeout=%u," + "running=%u", complete, timeouts, running); #define MIN_DIR_REQ_RESPONSES 16 if (complete >= MIN_DIR_REQ_RESPONSES) { @@ -992,7 +989,7 @@ geoip_get_dirreq_history(dirreq_type_t type) dltimes[ent_sl_idx] = bytes_per_second; } SMARTLIST_FOREACH_END(ent); median_uint32(dltimes, complete); /* sorts as a side effect. */ - written = tor_snprintf(result + written, bufsize - written, + buf_add_printf(buf, ",min=%u,d1=%u,d2=%u,q1=%u,d3=%u,d4=%u,md=%u," "d6=%u,d7=%u,q3=%u,d8=%u,d9=%u,max=%u", dltimes[0], @@ -1008,14 +1005,15 @@ geoip_get_dirreq_history(dirreq_type_t type) dltimes[8*complete/10-1], dltimes[9*complete/10-1], dltimes[complete-1]); - if (written<0) - tor_free(result); tor_free(dltimes); } - done: + + result = buf_extract(buf, NULL); + SMARTLIST_FOREACH(dirreq_completed, dirreq_map_entry_t *, ent, tor_free(ent)); smartlist_free(dirreq_completed); + buf_free(buf); return result; } diff --git a/src/or/git_revision.c b/src/or/git_revision.c new file mode 100644 index 0000000000..8f326b8751 --- /dev/null +++ b/src/or/git_revision.c @@ -0,0 +1,17 @@ +/* Copyright 2001-2004 Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "git_revision.h" + +/** String describing which Tor Git repository version the source was + * built from. This string is generated by a bit of shell kludging in + * src/or/include.am, and is usually right. + */ +const char tor_git_revision[] = +#ifndef _MSC_VER +#include "micro-revision.i" +#endif + ""; + diff --git a/src/or/git_revision.h b/src/or/git_revision.h new file mode 100644 index 0000000000..1ceaeedf16 --- /dev/null +++ b/src/or/git_revision.h @@ -0,0 +1,12 @@ +/* Copyright 2001-2004 Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_GIT_REVISION_H +#define TOR_GIT_REVISION_H + +extern const char tor_git_revision[]; + +#endif + diff --git a/src/or/hibernate.c b/src/or/hibernate.c index be2bc7ce95..4dc35f68d0 100644 --- a/src/or/hibernate.c +++ b/src/or/hibernate.c @@ -34,6 +34,7 @@ hibernating, phase 2: #include "config.h" #include "connection.h" #include "connection_edge.h" +#include "connection_or.h" #include "control.h" #include "hibernate.h" #include "main.h" @@ -818,8 +819,8 @@ hibernate_begin(hibernate_state_t new_state, time_t now) log_notice(LD_GENERAL,"SIGINT received %s; exiting now.", hibernate_state == HIBERNATE_STATE_EXITING ? "a second time" : "while hibernating"); - tor_cleanup(); - exit(0); // XXXX bad exit + tor_shutdown_event_loop_and_exit(0); + return; } if (new_state == HIBERNATE_STATE_LOWBANDWIDTH && @@ -906,20 +907,23 @@ hibernate_go_dormant(time_t now) while ((conn = connection_get_by_type(CONN_TYPE_OR)) || (conn = connection_get_by_type(CONN_TYPE_AP)) || (conn = connection_get_by_type(CONN_TYPE_EXIT))) { - if (CONN_IS_EDGE(conn)) + if (CONN_IS_EDGE(conn)) { connection_edge_end(TO_EDGE_CONN(conn), END_STREAM_REASON_HIBERNATING); + } log_info(LD_NET,"Closing conn type %d", conn->type); - if (conn->type == CONN_TYPE_AP) /* send socks failure if needed */ + if (conn->type == CONN_TYPE_AP) { + /* send socks failure if needed */ connection_mark_unattached_ap(TO_ENTRY_CONN(conn), END_STREAM_REASON_HIBERNATING); - else if (conn->type == CONN_TYPE_OR) { + } else if (conn->type == CONN_TYPE_OR) { if (TO_OR_CONN(conn)->chan) { - channel_mark_for_close(TLS_CHAN_TO_BASE(TO_OR_CONN(conn)->chan)); + connection_or_close_normally(TO_OR_CONN(conn), 0); } else { connection_mark_for_close(conn); } - } else + } else { connection_mark_for_close(conn); + } } if (now < interval_wakeup_time) @@ -980,8 +984,7 @@ consider_hibernation(time_t now) tor_assert(shutdown_time); if (shutdown_time <= now) { log_notice(LD_GENERAL, "Clean shutdown finished. Exiting."); - tor_cleanup(); - exit(0); // XXXX bad exit + tor_shutdown_event_loop_and_exit(0); } return; /* if exiting soon, don't worry about bandwidth limits */ } diff --git a/src/or/hs_circuit.c b/src/or/hs_circuit.c index e1e513c5f4..a232a40c80 100644 --- a/src/or/hs_circuit.c +++ b/src/or/hs_circuit.c @@ -13,6 +13,7 @@ #include "circuitlist.h" #include "circuituse.h" #include "config.h" +#include "nodelist.h" #include "policies.h" #include "relay.h" #include "rendservice.h" @@ -343,6 +344,17 @@ send_establish_intro(const hs_service_t *service, memwipe(payload, 0, sizeof(payload)); } +/* Return a string constant describing the anonymity of service. */ +static const char * +get_service_anonymity_string(const hs_service_t *service) +{ + if (service->config.is_single_onion) { + return "single onion"; + } else { + return "hidden"; + } +} + /* For a given service, the ntor onion key and a rendezvous cookie, launch a * circuit to the rendezvous point specified by the link specifiers. On * success, a circuit identifier is attached to the circuit with the needed @@ -370,7 +382,15 @@ launch_rendezvous_point_circuit(const hs_service_t *service, &data->onion_pk, service->config.is_single_onion); if (info == NULL) { - /* We are done here, we can't extend to the rendezvous point. */ + /* We are done here, we can't extend to the rendezvous point. + * If you're running an IPv6-only v3 single onion service on 0.3.2 or with + * 0.3.2 clients, and somehow disable the option check, it will fail here. + */ + log_fn(LOG_PROTOCOL_WARN, LD_REND, + "Not enough info to open a circuit to a rendezvous point for " + "%s service %s.", + get_service_anonymity_string(service), + safe_str_client(service->onion_address)); goto end; } @@ -392,17 +412,19 @@ launch_rendezvous_point_circuit(const hs_service_t *service, } } if (circ == NULL) { - log_warn(LD_REND, "Giving up on launching rendezvous circuit to %s " - "for service %s", + log_warn(LD_REND, "Giving up on launching a rendezvous circuit to %s " + "for %s service %s", safe_str_client(extend_info_describe(info)), + get_service_anonymity_string(service), safe_str_client(service->onion_address)); goto end; } log_info(LD_REND, "Rendezvous circuit launched to %s with cookie %s " - "for service %s", + "for %s service %s", safe_str_client(extend_info_describe(info)), safe_str_client(hex_str((const char *) data->rendezvous_cookie, REND_COOKIE_LEN)), + get_service_anonymity_string(service), safe_str_client(service->onion_address)); tor_assert(circ->build_state); /* Rendezvous circuit have a specific timeout for the time spent on trying @@ -532,69 +554,99 @@ retry_service_rendezvous_point(const origin_circuit_t *circ) return; } -/* Using an extend info object ei, set all possible link specifiers in lspecs. - * IPv4, legacy ID and ed25519 ID are mandatory thus MUST be present in ei. */ +/* Add all possible link specifiers in node to lspecs. + * legacy ID is mandatory thus MUST be present in node. If the primary address + * is not IPv4, log a BUG() warning, and return an empty smartlist. + * Includes ed25519 id and IPv6 link specifiers if present in the node. */ static void -get_lspecs_from_extend_info(const extend_info_t *ei, smartlist_t *lspecs) +get_lspecs_from_node(const node_t *node, smartlist_t *lspecs) { link_specifier_t *ls; + tor_addr_port_t ap; - tor_assert(ei); + tor_assert(node); tor_assert(lspecs); - /* IPv4 is mandatory. */ + /* Get the relay's IPv4 address. */ + node_get_prim_orport(node, &ap); + + /* We expect the node's primary address to be a valid IPv4 address. + * This conforms to the protocol, which requires either an IPv4 or IPv6 + * address (or both). */ + if (BUG(!tor_addr_is_v4(&ap.addr)) || + BUG(!tor_addr_port_is_valid_ap(&ap, 0))) { + return; + } + ls = link_specifier_new(); link_specifier_set_ls_type(ls, LS_IPV4); - link_specifier_set_un_ipv4_addr(ls, tor_addr_to_ipv4h(&ei->addr)); - link_specifier_set_un_ipv4_port(ls, ei->port); + link_specifier_set_un_ipv4_addr(ls, tor_addr_to_ipv4h(&ap.addr)); + link_specifier_set_un_ipv4_port(ls, ap.port); /* Four bytes IPv4 and two bytes port. */ - link_specifier_set_ls_len(ls, sizeof(ei->addr.addr.in_addr) + - sizeof(ei->port)); + link_specifier_set_ls_len(ls, sizeof(ap.addr.addr.in_addr) + + sizeof(ap.port)); smartlist_add(lspecs, ls); - /* Legacy ID is mandatory. */ + /* Legacy ID is mandatory and will always be present in node. */ ls = link_specifier_new(); link_specifier_set_ls_type(ls, LS_LEGACY_ID); - memcpy(link_specifier_getarray_un_legacy_id(ls), ei->identity_digest, + memcpy(link_specifier_getarray_un_legacy_id(ls), node->identity, link_specifier_getlen_un_legacy_id(ls)); link_specifier_set_ls_len(ls, link_specifier_getlen_un_legacy_id(ls)); smartlist_add(lspecs, ls); - /* ed25519 ID is mandatory. */ - ls = link_specifier_new(); - link_specifier_set_ls_type(ls, LS_ED25519_ID); - memcpy(link_specifier_getarray_un_ed25519_id(ls), &ei->ed_identity, - link_specifier_getlen_un_ed25519_id(ls)); - link_specifier_set_ls_len(ls, link_specifier_getlen_un_ed25519_id(ls)); - smartlist_add(lspecs, ls); + /* ed25519 ID is only included if the node has it. */ + if (!ed25519_public_key_is_zero(&node->ed25519_id)) { + ls = link_specifier_new(); + link_specifier_set_ls_type(ls, LS_ED25519_ID); + memcpy(link_specifier_getarray_un_ed25519_id(ls), &node->ed25519_id, + link_specifier_getlen_un_ed25519_id(ls)); + link_specifier_set_ls_len(ls, link_specifier_getlen_un_ed25519_id(ls)); + smartlist_add(lspecs, ls); + } - /* XXX: IPv6 is not clearly a thing in extend_info_t? */ + /* Check for IPv6. If so, include it as well. */ + if (node_has_ipv6_orport(node)) { + ls = link_specifier_new(); + node_get_pref_ipv6_orport(node, &ap); + link_specifier_set_ls_type(ls, LS_IPV6); + size_t addr_len = link_specifier_getlen_un_ipv6_addr(ls); + const uint8_t *in6_addr = tor_addr_to_in6_addr8(&ap.addr); + uint8_t *ipv6_array = link_specifier_getarray_un_ipv6_addr(ls); + memcpy(ipv6_array, in6_addr, addr_len); + link_specifier_set_un_ipv6_port(ls, ap.port); + /* Sixteen bytes IPv6 and two bytes port. */ + link_specifier_set_ls_len(ls, addr_len + sizeof(ap.port)); + smartlist_add(lspecs, ls); + } } -/* Using the given descriptor intro point ip, the extend information of the - * rendezvous point rp_ei and the service's subcredential, populate the +/* Using the given descriptor intro point ip, the node of the + * rendezvous point rp_node and the service's subcredential, populate the * already allocated intro1_data object with the needed key material and link * specifiers. * - * This can't fail but the ip MUST be a valid object containing the needed - * keys and authentication method. */ + * If rp_node has an invalid primary address, intro1_data->link_specifiers + * will be an empty list. Otherwise, this function can't fail. The ip + * MUST be a valid object containing the needed keys and authentication + * method. */ static void setup_introduce1_data(const hs_desc_intro_point_t *ip, - const extend_info_t *rp_ei, + const node_t *rp_node, const uint8_t *subcredential, hs_cell_introduce1_data_t *intro1_data) { smartlist_t *rp_lspecs; tor_assert(ip); - tor_assert(rp_ei); + tor_assert(rp_node); tor_assert(subcredential); tor_assert(intro1_data); /* Build the link specifiers from the extend information of the rendezvous * circuit that we've picked previously. */ rp_lspecs = smartlist_new(); - get_lspecs_from_extend_info(rp_ei, rp_lspecs); + get_lspecs_from_node(rp_node, rp_lspecs); /* Populate the introduce1 data object. */ memset(intro1_data, 0, sizeof(hs_cell_introduce1_data_t)); @@ -605,7 +657,7 @@ setup_introduce1_data(const hs_desc_intro_point_t *ip, intro1_data->auth_pk = &ip->auth_key_cert->signed_key; intro1_data->enc_pk = &ip->enc_key; intro1_data->subcredential = subcredential; - intro1_data->onion_pk = &rp_ei->curve25519_onion_key; + intro1_data->onion_pk = node_get_curve25519_onion_key(rp_node); intro1_data->link_specifiers = rp_lspecs; } @@ -1049,10 +1101,28 @@ hs_circ_send_introduce1(origin_circuit_t *intro_circ, tor_assert(ip); tor_assert(subcredential); + /* It is undefined behavior in hs_cell_introduce1_data_clear() if intro1_data + * has been declared on the stack but not initialized. Here, we set it to 0. + */ + memset(&intro1_data, 0, sizeof(hs_cell_introduce1_data_t)); + /* This takes various objects in order to populate the introduce1 data * object which is used to build the content of the cell. */ - setup_introduce1_data(ip, rend_circ->build_state->chosen_exit, - subcredential, &intro1_data); + const node_t *exit_node = build_state_get_exit_node(rend_circ->build_state); + if (exit_node == NULL) { + log_info(LD_REND, "Unable to get rendezvous point for circuit %u. " + "Failing.", TO_CIRCUIT(intro_circ)->n_circ_id); + goto done; + } + setup_introduce1_data(ip, exit_node, subcredential, &intro1_data); + /* If we didn't get any link specifiers, it's because our node was + * bad. */ + if (BUG(!intro1_data.link_specifiers) || + !smartlist_len(intro1_data.link_specifiers)) { + log_warn(LD_REND, "Unable to get link specifiers for INTRODUCE1 cell on " + "circuit %u.", TO_CIRCUIT(intro_circ)->n_circ_id); + goto done; + } /* Final step before we encode a cell, we setup the circuit identifier which * will generate both the rendezvous cookie and client keypair for this diff --git a/src/or/hs_client.c b/src/or/hs_client.c index 93a913b34c..9ac653c721 100644 --- a/src/or/hs_client.c +++ b/src/or/hs_client.c @@ -233,6 +233,55 @@ close_all_socks_conns_waiting_for_desc(const ed25519_public_key_t *identity_pk, smartlist_free(conns); } +/* Find all pending SOCKS connection waiting for a descriptor and retry them + * all. This is called when the directory information changed. */ +static void +retry_all_socks_conn_waiting_for_desc(void) +{ + smartlist_t *conns = + connection_list_by_type_state(CONN_TYPE_AP, AP_CONN_STATE_RENDDESC_WAIT); + + SMARTLIST_FOREACH_BEGIN(conns, connection_t *, base_conn) { + hs_client_fetch_status_t status; + const edge_connection_t *edge_conn = + ENTRY_TO_EDGE_CONN(TO_ENTRY_CONN(base_conn)); + + /* Ignore non HS or non v3 connection. */ + if (edge_conn->hs_ident == NULL) { + continue; + } + /* In this loop, we will possibly try to fetch a descriptor for the + * pending connections because we just got more directory information. + * However, the refetch process can cleanup all SOCKS request so the same + * service if an internal error happens. Thus, we can end up with closed + * connections in our list. */ + if (base_conn->marked_for_close) { + continue; + } + + /* XXX: There is an optimization we could do which is that for a service + * key, we could check if we can fetch and remember that decision. */ + + /* Order a refetch in case it works this time. */ + status = hs_client_refetch_hsdesc(&edge_conn->hs_ident->identity_pk); + if (BUG(status == HS_CLIENT_FETCH_HAVE_DESC)) { + /* This case is unique because it can NOT happen in theory. Once we get + * a new descriptor, the HS client subsystem is notified immediately and + * the connections waiting for it are handled which means the state will + * change from renddesc wait state. Log this and continue to next + * connection. */ + continue; + } + /* In the case of an error, either all SOCKS connections have been + * closed or we are still missing directory information. Leave the + * connection in renddesc wait state so when we get more info, we'll be + * able to try it again. */ + } SMARTLIST_FOREACH_END(base_conn); + + /* We don't have ownership of those objects. */ + smartlist_free(conns); +} + /* A v3 HS circuit successfully connected to the hidden service. Update the * stream state at <b>hs_conn_ident</b> appropriately. */ static void @@ -727,15 +776,24 @@ client_get_random_intro(const ed25519_public_key_t *service_pk) const hs_descriptor_t *desc; const hs_desc_encrypted_data_t *enc_data; const or_options_t *options = get_options(); + /* Calculate the onion address for logging purposes */ + char onion_address[HS_SERVICE_ADDR_LEN_BASE32 + 1]; tor_assert(service_pk); desc = hs_cache_lookup_as_client(service_pk); + /* Assume the service is v3 if the descriptor is missing. This is ok, + * because we only use the address in log messages */ + hs_build_address(service_pk, + desc ? desc->plaintext_data.version : HS_VERSION_THREE, + onion_address); if (desc == NULL || !hs_client_any_intro_points_usable(service_pk, desc)) { log_info(LD_REND, "Unable to randomly select an introduction point " - "because descriptor %s.", - (desc) ? "doesn't have usable intro point" : "is missing"); + "for service %s because descriptor %s. We can't connect.", + safe_str_client(onion_address), + (desc) ? "doesn't have any usable intro points" + : "is missing (assuming v3 onion address)"); goto end; } @@ -763,6 +821,10 @@ client_get_random_intro(const ed25519_public_key_t *service_pk) if (ei == NULL) { /* We can get here for instance if the intro point is a private address * and we aren't allowed to extend to those. */ + log_info(LD_REND, "Unable to select introduction point with auth key %s " + "for service %s, because we could not extend to it.", + safe_str_client(ed25519_fmt(&ip->auth_key_cert->signed_key)), + safe_str_client(onion_address)); continue; } @@ -791,14 +853,20 @@ client_get_random_intro(const ed25519_public_key_t *service_pk) * set, we are forced to not use anything. */ ei = ei_excluded; if (options->StrictNodes) { - log_warn(LD_REND, "Every introduction points are in the ExcludeNodes set " - "and StrictNodes is set. We can't connect."); + log_warn(LD_REND, "Every introduction point for service %s is in the " + "ExcludeNodes set and StrictNodes is set. We can't connect.", + safe_str_client(onion_address)); extend_info_free(ei); ei = NULL; + } else { + log_fn(LOG_PROTOCOL_WARN, LD_REND, "Every introduction point for service " + "%s is unusable or we can't extend to it. We can't connect.", + safe_str_client(onion_address)); } end: smartlist_free(usable_ips); + memwipe(onion_address, 0, sizeof(onion_address)); return ei; } @@ -1029,6 +1097,73 @@ handle_rendezvous2(origin_circuit_t *circ, const uint8_t *payload, return ret; } +/* Return true iff the client can fetch a descriptor for this service public + * identity key and status_out if not NULL is untouched. If the client can + * _not_ fetch the descriptor and if status_out is not NULL, it is set with + * the fetch status code. */ +static unsigned int +can_client_refetch_desc(const ed25519_public_key_t *identity_pk, + hs_client_fetch_status_t *status_out) +{ + hs_client_fetch_status_t status; + + tor_assert(identity_pk); + + /* Are we configured to fetch descriptors? */ + if (!get_options()->FetchHidServDescriptors) { + log_warn(LD_REND, "We received an onion address for a hidden service " + "descriptor but we are configured to not fetch."); + status = HS_CLIENT_FETCH_NOT_ALLOWED; + goto cannot; + } + + /* Without a live consensus we can't do any client actions. It is needed to + * compute the hashring for a service. */ + if (!networkstatus_get_live_consensus(approx_time())) { + log_info(LD_REND, "Can't fetch descriptor for service %s because we " + "are missing a live consensus. Stalling connection.", + safe_str_client(ed25519_fmt(identity_pk))); + status = HS_CLIENT_FETCH_MISSING_INFO; + goto cannot; + } + + if (!router_have_minimum_dir_info()) { + log_info(LD_REND, "Can't fetch descriptor for service %s because we " + "dont have enough descriptors. Stalling connection.", + safe_str_client(ed25519_fmt(identity_pk))); + status = HS_CLIENT_FETCH_MISSING_INFO; + goto cannot; + } + + /* Check if fetching a desc for this HS is useful to us right now */ + { + const hs_descriptor_t *cached_desc = NULL; + cached_desc = hs_cache_lookup_as_client(identity_pk); + if (cached_desc && hs_client_any_intro_points_usable(identity_pk, + cached_desc)) { + log_info(LD_GENERAL, "We would fetch a v3 hidden service descriptor " + "but we already have a usable descriptor."); + status = HS_CLIENT_FETCH_HAVE_DESC; + goto cannot; + } + } + + /* Don't try to refetch while we have a pending request for it. */ + if (directory_request_is_pending(identity_pk)) { + log_info(LD_REND, "Already a pending directory request. Waiting on it."); + status = HS_CLIENT_FETCH_PENDING; + goto cannot; + } + + /* Yes, client can fetch! */ + return 1; + cannot: + if (status_out) { + *status_out = status; + } + return 0; +} + /* ========== */ /* Public API */ /* ========== */ @@ -1134,62 +1269,25 @@ hs_client_any_intro_points_usable(const ed25519_public_key_t *service_pk, int hs_client_refetch_hsdesc(const ed25519_public_key_t *identity_pk) { - int ret; + hs_client_fetch_status_t status; tor_assert(identity_pk); - /* Are we configured to fetch descriptors? */ - if (!get_options()->FetchHidServDescriptors) { - log_warn(LD_REND, "We received an onion address for a hidden service " - "descriptor but we are configured to not fetch."); - return HS_CLIENT_FETCH_NOT_ALLOWED; - } - - /* Without a live consensus we can't do any client actions. It is needed to - * compute the hashring for a service. */ - if (!networkstatus_get_live_consensus(approx_time())) { - log_info(LD_REND, "Can't fetch descriptor for service %s because we " - "are missing a live consensus. Stalling connection.", - safe_str_client(ed25519_fmt(identity_pk))); - return HS_CLIENT_FETCH_MISSING_INFO; - } - - if (!router_have_minimum_dir_info()) { - log_info(LD_REND, "Can't fetch descriptor for service %s because we " - "dont have enough descriptors. Stalling connection.", - safe_str_client(ed25519_fmt(identity_pk))); - return HS_CLIENT_FETCH_MISSING_INFO; - } - - /* Check if fetching a desc for this HS is useful to us right now */ - { - const hs_descriptor_t *cached_desc = NULL; - cached_desc = hs_cache_lookup_as_client(identity_pk); - if (cached_desc && hs_client_any_intro_points_usable(identity_pk, - cached_desc)) { - log_info(LD_GENERAL, "We would fetch a v3 hidden service descriptor " - "but we already have a usable descriptor."); - return HS_CLIENT_FETCH_HAVE_DESC; - } - } - - /* Don't try to refetch while we have a pending request for it. */ - if (directory_request_is_pending(identity_pk)) { - log_info(LD_REND, "Already a pending directory request. Waiting on it."); - return HS_CLIENT_FETCH_PENDING; + if (!can_client_refetch_desc(identity_pk, &status)) { + return status; } - /* Try to fetch the desc and if we encounter an unrecoverable error, mark the - * desc as unavailable for now. */ - ret = fetch_v3_desc(identity_pk); - if (fetch_status_should_close_socks(ret)) { - close_all_socks_conns_waiting_for_desc(identity_pk, ret, + /* Try to fetch the desc and if we encounter an unrecoverable error, mark + * the desc as unavailable for now. */ + status = fetch_v3_desc(identity_pk); + if (fetch_status_should_close_socks(status)) { + close_all_socks_conns_waiting_for_desc(identity_pk, status, END_STREAM_REASON_RESOLVEFAILED); /* Remove HSDir fetch attempts so that we can retry later if the user * wants us to regardless of if we closed any connections. */ purge_hid_serv_request(identity_pk); } - return ret; + return status; } /* This is called when we are trying to attach an AP connection to these @@ -1499,3 +1597,13 @@ hs_client_purge_state(void) log_info(LD_REND, "Hidden service client state has been purged."); } +/* Called when our directory information has changed. */ +void +hs_client_dir_info_changed(void) +{ + /* We have possibly reached the minimum directory information or new + * consensus so retry all pending SOCKS connection in + * AP_CONN_STATE_RENDDESC_WAIT state in order to fetch the descriptor. */ + retry_all_socks_conn_waiting_for_desc(); +} + diff --git a/src/or/hs_client.h b/src/or/hs_client.h index 164accc0e6..2523568ad1 100644 --- a/src/or/hs_client.h +++ b/src/or/hs_client.h @@ -41,6 +41,7 @@ int hs_client_decode_descriptor( int hs_client_any_intro_points_usable(const ed25519_public_key_t *service_pk, const hs_descriptor_t *desc); int hs_client_refetch_hsdesc(const ed25519_public_key_t *identity_pk); +void hs_client_dir_info_changed(void); int hs_client_send_introduce1(origin_circuit_t *intro_circ, origin_circuit_t *rend_circ); diff --git a/src/or/hs_common.c b/src/or/hs_common.c index 42c15c80d3..a0f2af29cd 100644 --- a/src/or/hs_common.c +++ b/src/or/hs_common.c @@ -224,7 +224,7 @@ get_time_period_length(void) return sr_state_get_protocol_run_duration() / 60; } - int32_t time_period_length = networkstatus_get_param(NULL, "hsdir-interval", + int32_t time_period_length = networkstatus_get_param(NULL, "hsdir_interval", HS_TIME_PERIOD_LENGTH_DEFAULT, HS_TIME_PERIOD_LENGTH_MIN, HS_TIME_PERIOD_LENGTH_MAX); @@ -1638,24 +1638,22 @@ hs_pick_hsdir(smartlist_t *responsible_dirs, const char *req_key_str) /* From a list of link specifier, an onion key and if we are requesting a * direct connection (ex: single onion service), return a newly allocated - * extend_info_t object. This function checks the firewall policies and if we - * are allowed to extend to the chosen address. + * extend_info_t object. This function always returns an extend info with + * an IPv4 address, or NULL. * - * if either IPv4 or legacy ID is missing, error. - * if not direct_conn, IPv4 is prefered. - * if direct_conn, IPv6 is prefered if we have one available. - * if firewall does not allow the chosen address, error. - * - * Return NULL if we can fulfill the conditions. */ + * It performs the following checks: + * if either IPv4 or legacy ID is missing, return NULL. + * if direct_conn, and we can't reach the IPv4 address, return NULL. + */ extend_info_t * hs_get_extend_info_from_lspecs(const smartlist_t *lspecs, const curve25519_public_key_t *onion_key, int direct_conn) { - int have_v4 = 0, have_v6 = 0, have_legacy_id = 0, have_ed25519_id = 0; + int have_v4 = 0, have_legacy_id = 0, have_ed25519_id = 0; char legacy_id[DIGEST_LEN] = {0}; - uint16_t port_v4 = 0, port_v6 = 0, port = 0; - tor_addr_t addr_v4, addr_v6, *addr = NULL; + uint16_t port_v4 = 0; + tor_addr_t addr_v4; ed25519_public_key_t ed25519_pk; extend_info_t *info = NULL; @@ -1671,14 +1669,6 @@ hs_get_extend_info_from_lspecs(const smartlist_t *lspecs, port_v4 = link_specifier_get_un_ipv4_port(ls); have_v4 = 1; break; - case LS_IPV6: - /* Skip if we already seen a v6. */ - if (have_v6) continue; - tor_addr_from_ipv6_bytes(&addr_v6, - (const char *) link_specifier_getconstarray_un_ipv6_addr(ls)); - port_v6 = link_specifier_get_un_ipv6_port(ls); - have_v6 = 1; - break; case LS_LEGACY_ID: /* Make sure we do have enough bytes for the legacy ID. */ if (link_specifier_getlen_un_legacy_id(ls) < sizeof(legacy_id)) { @@ -1700,55 +1690,45 @@ hs_get_extend_info_from_lspecs(const smartlist_t *lspecs, } } SMARTLIST_FOREACH_END(ls); - /* IPv4 and legacy ID are mandatory. */ + /* Legacy ID is mandatory, and we require IPv4. */ if (!have_v4 || !have_legacy_id) { goto done; } - /* By default, we pick IPv4 but this might change to v6 if certain - * conditions are met. */ - addr = &addr_v4; port = port_v4; - /* If we are NOT in a direct connection, we'll use our Guard and a 3-hop - * circuit so we can't extend in IPv6. And at this point, we do have an IPv4 - * address available so go to validation. */ + /* We know we have IPv4, because we just checked. */ if (!direct_conn) { + /* All clients can extend to any IPv4 via a 3-hop path. */ goto validate; - } - - /* From this point on, we have a request for a direct connection to the - * rendezvous point so make sure we can actually connect through our - * firewall. We'll prefer IPv6. */ - - /* IPv6 test. */ - if (have_v6 && - fascist_firewall_allows_address_addr(&addr_v6, port_v6, - FIREWALL_OR_CONNECTION, 1, 1)) { - /* Direct connection and we can reach it in IPv6 so go for it. */ - addr = &addr_v6; port = port_v6; - goto validate; - } - /* IPv4 test and we are sure we have a v4 because of the check above. */ - if (fascist_firewall_allows_address_addr(&addr_v4, port_v4, - FIREWALL_OR_CONNECTION, 0, 0)) { + } else if (direct_conn && + fascist_firewall_allows_address_addr(&addr_v4, port_v4, + FIREWALL_OR_CONNECTION, + 0, 0)) { /* Direct connection and we can reach it in IPv4 so go for it. */ - addr = &addr_v4; port = port_v4; goto validate; + + /* We will add support for falling back to a 3-hop path in a later + * release. */ + } else { + /* If we can't reach IPv4, return NULL. */ + goto done; } + /* We will add support for IPv6 in a later release. */ + validate: /* We'll validate now that the address we've picked isn't a private one. If * it is, are we allowing to extend to private address? */ - if (!extend_info_addr_is_allowed(addr)) { - log_warn(LD_REND, "Requested address is private and it is not " - "allowed to extend to it: %s:%u", - fmt_addr(&addr_v4), port_v4); + if (!extend_info_addr_is_allowed(&addr_v4)) { + log_fn(LOG_PROTOCOL_WARN, LD_REND, + "Requested address is private and we are not allowed to extend to " + "it: %s:%u", fmt_addr(&addr_v4), port_v4); goto done; } /* 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, addr, port); + onion_key, &addr_v4, port_v4); done: return info; } diff --git a/src/or/hs_config.c b/src/or/hs_config.c index 5f9282ea79..fa5c1ab176 100644 --- a/src/or/hs_config.c +++ b/src/or/hs_config.c @@ -424,11 +424,19 @@ config_generic_service(const config_line_t *line_, } } - /* Check if we are configured in non anonymous mode and single hop mode - * meaning every service become single onion. */ - if (rend_service_allow_non_anonymous_connection(options) && - rend_service_non_anonymous_mode_enabled(options)) { + /* Check if we are configured in non anonymous mode meaning every service + * becomes a single onion service. */ + if (rend_service_non_anonymous_mode_enabled(options)) { config->is_single_onion = 1; + /* We will add support for IPv6-only v3 single onion services in a future + * Tor version. This won't catch "ReachableAddresses reject *4", but that + * option doesn't work anyway. */ + if (options->ClientUseIPv4 == 0 && config->version == HS_VERSION_THREE) { + log_warn(LD_CONFIG, "IPv6-only v3 single onion services are not " + "supported. Set HiddenServiceSingleHopMode 0 and " + "HiddenServiceNonAnonymousMode 0, or set ClientUseIPv4 1."); + goto err; + } } /* Success */ diff --git a/src/or/hs_descriptor.c b/src/or/hs_descriptor.c index 4bc54bdb2d..1708866944 100644 --- a/src/or/hs_descriptor.c +++ b/src/or/hs_descriptor.c @@ -1302,13 +1302,17 @@ encrypted_data_length_is_valid(size_t len) * <b>encrypted_blob_size</b>. Use the descriptor object <b>desc</b> to * generate the right decryption keys; set <b>decrypted_out</b> to the * plaintext. If <b>is_superencrypted_layer</b> is set, this is the outter - * encrypted layer of the descriptor. */ -static size_t -decrypt_desc_layer(const hs_descriptor_t *desc, - const uint8_t *encrypted_blob, - size_t encrypted_blob_size, - int is_superencrypted_layer, - char **decrypted_out) + * encrypted layer of the descriptor. + * + * On any error case, including an empty output, return 0 and set + * *<b>decrypted_out</b> to NULL. + */ +MOCK_IMPL(STATIC size_t, +decrypt_desc_layer,(const hs_descriptor_t *desc, + const uint8_t *encrypted_blob, + size_t encrypted_blob_size, + int is_superencrypted_layer, + char **decrypted_out)) { uint8_t *decrypted = NULL; uint8_t secret_key[HS_DESC_ENCRYPTED_KEY_LEN], secret_iv[CIPHER_IV_LEN]; @@ -1382,6 +1386,11 @@ decrypt_desc_layer(const hs_descriptor_t *desc, } } + if (result_len == 0) { + /* Treat this as an error, so that somebody will free the output. */ + goto err; + } + /* Make sure to NUL terminate the string. */ decrypted[encrypted_len] = '\0'; *decrypted_out = (char *) decrypted; diff --git a/src/or/hs_descriptor.h b/src/or/hs_descriptor.h index 971e856647..52bec8e244 100644 --- a/src/or/hs_descriptor.h +++ b/src/or/hs_descriptor.h @@ -261,6 +261,12 @@ STATIC size_t decode_superencrypted(const char *message, size_t message_len, uint8_t **encrypted_out); STATIC void desc_plaintext_data_free_contents(hs_desc_plaintext_data_t *desc); +MOCK_DECL(STATIC size_t, decrypt_desc_layer,(const hs_descriptor_t *desc, + const uint8_t *encrypted_blob, + size_t encrypted_blob_size, + int is_superencrypted_layer, + char **decrypted_out)); + #endif /* defined(HS_DESCRIPTOR_PRIVATE) */ #endif /* !defined(TOR_HS_DESCRIPTOR_H) */ diff --git a/src/or/hs_service.c b/src/or/hs_service.c index 3d1945aa95..8e2f52dcf0 100644 --- a/src/or/hs_service.c +++ b/src/or/hs_service.c @@ -375,7 +375,14 @@ service_intro_point_free_(void *obj) /* Return a newly allocated service intro point and fully initialized from the * given extend_info_t ei if non NULL. If is_legacy is true, we also generate - * the legacy key. On error, NULL is returned. */ + * the legacy key. On error, NULL is returned. + * + * If ei is NULL, returns a hs_service_intro_point_t with an empty link + * specifier list and no onion key. (This is used for testing.) + * + * ei must be an extend_info_t containing an IPv4 address. (We will add supoort + * for IPv6 in a later release.) When calling extend_info_from_node(), pass + * 0 in for_direct_connection to make sure ei always has an IPv4 address. */ STATIC hs_service_intro_point_t * service_intro_point_new(const extend_info_t *ei, unsigned int is_legacy) { @@ -427,8 +434,8 @@ service_intro_point_new(const extend_info_t *ei, unsigned int is_legacy) goto done; } - /* We'll try to add all link specifier. Legacy, IPv4 and ed25519 are - * mandatory. */ + /* We'll try to add all link specifiers. Legacy is mandatory. + * IPv4 or IPv6 is required, and we always send IPv4. */ ls = hs_desc_link_specifier_new(ei, LS_IPV4); /* It is impossible to have an extend info object without a v4. */ if (BUG(!ls)) { @@ -450,11 +457,7 @@ service_intro_point_new(const extend_info_t *ei, unsigned int is_legacy) smartlist_add(ip->base.link_specifiers, ls); } - /* IPv6 is optional. */ - ls = hs_desc_link_specifier_new(ei, LS_IPV6); - if (ls) { - smartlist_add(ip->base.link_specifiers, ls); - } + /* IPv6 is not supported in this release. */ /* Finally, copy onion key from the extend_info_t object. */ memcpy(&ip->onion_key, &ei->curve25519_onion_key, sizeof(ip->onion_key)); @@ -1520,10 +1523,17 @@ build_all_descriptors(time_t now) /* Randomly pick a node to become an introduction point but not present in the * given exclude_nodes list. The chosen node is put in the exclude list * regardless of success or not because in case of failure, the node is simply - * unsusable from that point on. If direct_conn is set, try to pick a node - * that our local firewall/policy allows to directly connect to and if not, - * fallback to a normal 3-hop node. Return a newly allocated service intro - * point ready to be used for encoding. NULL on error. */ + * unsusable from that point on. + * + * If direct_conn is set, try to pick a node that our local firewall/policy + * allows us to connect to directly. If we can't find any, return NULL. + * This function supports selecting dual-stack nodes for direct single onion + * service IPv6 connections. But it does not send IPv6 addresses in link + * specifiers. (Current clients don't use IPv6 addresses to extend, and + * direct client connections to intro points are not supported.) + * + * Return a newly allocated service intro point ready to be used for encoding. + * Return NULL on error. */ static hs_service_intro_point_t * pick_intro_point(unsigned int direct_conn, smartlist_t *exclude_nodes) { @@ -1537,12 +1547,9 @@ pick_intro_point(unsigned int direct_conn, smartlist_t *exclude_nodes) node = router_choose_random_node(exclude_nodes, get_options()->ExcludeNodes, direct_conn ? direct_flags : flags); - if (node == NULL && direct_conn) { - /* Unable to find a node for direct connection, let's fall back to a - * normal 3-hop node. */ - node = router_choose_random_node(exclude_nodes, - get_options()->ExcludeNodes, flags); - } + /* Unable to find a node. When looking for a node for a direct connection, + * we could try a 3-hop path instead. We'll add support for this in a later + * release. */ if (!node) { goto err; } @@ -1553,8 +1560,11 @@ pick_intro_point(unsigned int direct_conn, smartlist_t *exclude_nodes) smartlist_add(exclude_nodes, (void *) node); /* We do this to ease our life but also this call makes appropriate checks - * of the node object such as validating ntor support for instance. */ - info = extend_info_from_node(node, direct_conn); + * of the node object such as validating ntor support for instance. + * + * We must provide an extend_info for clients to connect over a 3-hop path, + * so we don't pass direct_conn here. */ + info = extend_info_from_node(node, 0); if (BUG(info == NULL)) { goto err; } @@ -1562,8 +1572,12 @@ pick_intro_point(unsigned int direct_conn, smartlist_t *exclude_nodes) /* Let's do a basic sanity check here so that we don't end up advertising the * ed25519 identity key of relays that don't actually support the link * protocol */ - if (!node_supports_ed25519_link_authentication(node)) { + if (!node_supports_ed25519_link_authentication(node, 0)) { tor_assert_nonfatal(ed25519_public_key_is_zero(&info->ed_identity)); + } else { + /* Make sure we *do* have an ed key if we support the link authentication. + * Sending an empty key would result in a failure to extend. */ + tor_assert_nonfatal(!ed25519_public_key_is_zero(&info->ed_identity)); } /* Create our objects and populate them with the node information. */ diff --git a/src/or/include.am b/src/or/include.am index 7216aba9af..b783f4855a 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -51,6 +51,7 @@ LIBTOR_A_SOURCES = \ src/or/geoip.c \ src/or/entrynodes.c \ src/or/ext_orport.c \ + src/or/git_revision.c \ src/or/hibernate.c \ src/or/hs_cache.c \ src/or/hs_cell.c \ @@ -78,6 +79,7 @@ LIBTOR_A_SOURCES = \ src/or/parsecommon.c \ src/or/periodic.c \ src/or/protover.c \ + src/or/protover_rust.c \ src/or/proto_cell.c \ src/or/proto_control0.c \ src/or/proto_ext_or.c \ @@ -104,6 +106,7 @@ LIBTOR_A_SOURCES = \ src/or/statefile.c \ src/or/status.c \ src/or/torcert.c \ + src/or/tor_api.c \ src/or/onion_ntor.c \ $(tor_platform_source) @@ -189,6 +192,7 @@ ORHEADERS = \ src/or/fp_pair.h \ src/or/geoip.h \ src/or/entrynodes.h \ + src/or/git_revision.h \ src/or/hibernate.h \ src/or/hs_cache.h \ src/or/hs_cell.h \ @@ -243,9 +247,13 @@ ORHEADERS = \ src/or/scheduler.h \ src/or/statefile.h \ src/or/status.h \ - src/or/torcert.h + src/or/torcert.h \ + src/or/tor_api_internal.h -noinst_HEADERS+= $(ORHEADERS) micro-revision.i +# This may someday want to be an installed file? +noinst_HEADERS += src/or/tor_api.h + +noinst_HEADERS += $(ORHEADERS) micro-revision.i micro-revision.i: FORCE $(AM_V_at)rm -f micro-revision.tmp; \ diff --git a/src/or/main.c b/src/or/main.c index be61628341..e349703918 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -60,7 +60,6 @@ #include "circuitlist.h" #include "circuituse.h" #include "command.h" -#include "compat_rust.h" #include "compress.h" #include "config.h" #include "confparse.h" @@ -106,6 +105,8 @@ #include "shared_random.h" #include "statefile.h" #include "status.h" +#include "tor_api.h" +#include "tor_api_internal.h" #include "util_process.h" #include "ext_orport.h" #ifdef USE_DMALLOC @@ -128,6 +129,12 @@ void evdns_shutdown(int); +#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 +char *rust_welcome_string(void); +#endif + /********* PROTOTYPES **********/ static void dumpmemusage(int severity); @@ -140,6 +147,8 @@ static void connection_start_reading_from_linked_conn(connection_t *conn); static int connection_should_read_from_linked_conn(connection_t *conn); static int run_main_loop_until_done(void); static void process_signal(int sig); +static void shutdown_did_not_work_callback(evutil_socket_t fd, short event, + void *arg) ATTR_NORETURN; /********* START VARIABLES **********/ int global_read_bucket; /**< Max number of bytes I can read this second. */ @@ -192,6 +201,14 @@ static smartlist_t *active_linked_connection_lst = NULL; * <b>loop_once</b>. If so, there's no need to trigger a loopexit in order * to handle linked connections. */ static int called_loop_once = 0; +/** Flag: if true, it's time to shut down, so the main loop should exit as + * soon as possible. + */ +static int main_loop_should_exit = 0; +/** The return value that the main loop should yield when it exits, if + * main_loop_should_exit is true. + */ +static int main_loop_exit_value = 0; /** We set this to 1 when we've opened a circuit, so we can print a log * entry to inform the user that Tor is working. We set it to 0 when @@ -637,9 +654,10 @@ connection_should_read_from_linked_conn(connection_t *conn) /** If we called event_base_loop() and told it to never stop until it * runs out of events, now we've changed our mind: tell it we want it to - * finish. */ + * exit once the current round of callbacks is done, so that we can + * run external code, and then return to the main loop. */ void -tell_event_loop_to_finish(void) +tell_event_loop_to_run_external_code(void) { if (!called_loop_once) { struct timeval tv = { 0, 0 }; @@ -648,6 +666,54 @@ tell_event_loop_to_finish(void) } } +/** Failsafe measure that should never actually be necessary: If + * tor_shutdown_event_loop_and_exit() somehow doesn't successfully exit the + * event loop, then this callback will kill Tor with an assertion failure + * seconds later + */ +static void +shutdown_did_not_work_callback(evutil_socket_t fd, short event, void *arg) +{ + // LCOV_EXCL_START + (void) fd; + (void) event; + (void) arg; + tor_assert_unreached(); + // LCOV_EXCL_STOP +} + +/** + * After finishing the current callback (if any), shut down the main loop, + * clean up the process, and exit with <b>exitcode</b>. + */ +void +tor_shutdown_event_loop_and_exit(int exitcode) +{ + if (main_loop_should_exit) + return; /* Ignore multiple calls to this function. */ + + main_loop_should_exit = 1; + main_loop_exit_value = exitcode; + + /* Die with an assertion failure in ten seconds, if for some reason we don't + * exit normally. */ + /* XXXX We should consider this code if it's never used. */ + struct timeval ten_seconds = { 10, 0 }; + event_base_once(tor_libevent_get_base(), -1, EV_TIMEOUT, + shutdown_did_not_work_callback, NULL, + &ten_seconds); + + /* Unlike loopexit, loopbreak prevents other callbacks from running. */ + tor_event_base_loopbreak(tor_libevent_get_base()); +} + +/** Return true iff tor_shutdown_event_loop_and_exit() has been called. */ +int +tor_event_loop_shutdown_is_pending(void) +{ + return main_loop_should_exit; +} + /** Helper: Tell the main loop to begin reading bytes into <b>conn</b> from * its linked connection, if it is not doing so already. Called by * connection_start_reading and connection_start_writing as appropriate. */ @@ -663,7 +729,7 @@ connection_start_reading_from_linked_conn(connection_t *conn) /* make sure that the event_base_loop() function exits at * the end of its run through the current connections, so we can * activate read events for linked connections. */ - tell_event_loop_to_finish(); + tell_event_loop_to_run_external_code(); } else { tor_assert(smartlist_contains(active_linked_connection_lst, conn)); } @@ -971,6 +1037,15 @@ directory_info_has_arrived(time_t now, int from_cache, int suppress_logs) { const or_options_t *options = get_options(); + /* if we have enough dir info, then update our guard status with + * whatever we just learned. */ + int invalidate_circs = guards_update_all(); + + if (invalidate_circs) { + circuit_mark_all_unused_circs(); + circuit_mark_all_dirty_circs_as_unusable(); + } + if (!router_have_minimum_dir_info()) { int quiet = suppress_logs || from_cache || directory_too_idle_to_fetch_descriptors(options, now); @@ -984,15 +1059,6 @@ directory_info_has_arrived(time_t now, int from_cache, int suppress_logs) update_all_descriptor_downloads(now); } - /* if we have enough dir info, then update our guard status with - * whatever we just learned. */ - int invalidate_circs = guards_update_all(); - - if (invalidate_circs) { - circuit_mark_all_unused_circs(); - circuit_mark_all_dirty_circs_as_unusable(); - } - /* Don't even bother trying to get extrainfo until the rest of our * directory info is up-to-date */ if (options->DownloadExtraInfo) @@ -1405,7 +1471,9 @@ run_scheduled_events(time_t now) /* Maybe enough time elapsed for us to reconsider a circuit. */ circuit_upgrade_circuits_from_guard_wait(); - if (options->UseBridges && !options->DisableNetwork) { + if (options->UseBridges && !net_is_disabled()) { + /* Note: this check uses net_is_disabled(), not should_delay_dir_fetches() + * -- the latter is only for fetching consensus-derived directory info. */ fetch_bridge_descriptors(options, now); } @@ -1511,7 +1579,7 @@ rotate_onion_key_callback(time_t now, const or_options_t *options) if (router_rebuild_descriptor(1)<0) { log_info(LD_CONFIG, "Couldn't rebuild router descriptor"); } - if (advertised_server_mode() && !options->DisableNetwork) + if (advertised_server_mode() && !net_is_disabled()) router_upload_dir_desc_to_dirservers(0); return ONION_KEY_CONSENSUS_CHECK_INTERVAL; } @@ -1554,8 +1622,7 @@ check_ed_keys_callback(time_t now, const or_options_t *options) if (new_signing_key < 0 || generate_ed_link_cert(options, now, new_signing_key > 0)) { log_err(LD_OR, "Unable to update Ed25519 keys! Exiting."); - tor_cleanup(); - exit(1); // XXXX bad exit + tor_shutdown_event_loop_and_exit(1); } } return 30; @@ -1877,9 +1944,11 @@ check_descriptor_callback(time_t now, const or_options_t *options) * address has changed. */ #define CHECK_DESCRIPTOR_INTERVAL (60) + (void)options; + /* 2b. Once per minute, regenerate and upload the descriptor if the old * one is inaccurate. */ - if (!options->DisableNetwork) { + if (!net_is_disabled()) { check_descriptor_bandwidth_changed(now); check_descriptor_ipaddress_changed(now); mark_my_descriptor_dirty_if_too_old(now); @@ -1911,7 +1980,7 @@ check_for_reachability_bw_callback(time_t now, const or_options_t *options) * 20 minutes of our uptime. */ if (server_mode(options) && (have_completed_a_circuit() || !any_predicted_circuits(now)) && - !we_are_hibernating()) { + !net_is_disabled()) { if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) { consider_testing_reachability(1, dirport_reachability_count==0); if (++dirport_reachability_count > 5) @@ -2366,10 +2435,18 @@ do_hup(void) /* first, reload config variables, in case they've changed */ if (options->ReloadTorrcOnSIGHUP) { /* no need to provide argc/v, they've been cached in init_from_config */ - if (options_init_from_torrc(0, NULL) < 0) { + int init_rv = options_init_from_torrc(0, NULL); + if (init_rv < 0) { log_err(LD_CONFIG,"Reading config failed--see warnings above. " "For usage, try -h."); return -1; + } else if (BUG(init_rv > 0)) { + // LCOV_EXCL_START + /* This should be impossible: the only "return 1" cases in + * options_init_from_torrc are ones caused by command-line arguments; + * but they can't change while Tor is running. */ + return -1; + // LCOV_EXCL_STOP } options = get_options(); /* they have changed now */ /* Logs are only truncated the first time they are opened, but were @@ -2405,7 +2482,7 @@ do_hup(void) /* retry appropriate downloads */ router_reset_status_download_failures(); router_reset_descriptor_download_failures(); - if (!options->DisableNetwork) + if (!net_is_disabled()) update_networkstatus_downloads(time(NULL)); /* We'll retry routerstatus downloads in about 10 seconds; no need to @@ -2595,6 +2672,9 @@ do_main_loop(void) } #endif /* defined(HAVE_SYSTEMD) */ + main_loop_should_exit = 0; + main_loop_exit_value = 0; + return run_main_loop_until_done(); } @@ -2610,6 +2690,9 @@ run_main_loop_once(void) if (nt_service_is_stopping()) return 0; + if (main_loop_should_exit) + return 0; + #ifndef _WIN32 /* Make it easier to tell whether libevent failure is our fault or not. */ errno = 0; @@ -2656,6 +2739,9 @@ run_main_loop_once(void) } } + if (main_loop_should_exit) + return 0; + /* And here is where we put callbacks that happen "every time the event loop * runs." They must be very fast, or else the whole Tor process will get * slowed down. @@ -2684,7 +2770,11 @@ run_main_loop_until_done(void) do { loop_result = run_main_loop_once(); } while (loop_result == 1); - return loop_result; + + if (main_loop_should_exit) + return main_loop_exit_value; + else + return loop_result; } /** Libevent callback: invoked when we get a signal. @@ -2708,14 +2798,13 @@ process_signal(int sig) { case SIGTERM: log_notice(LD_GENERAL,"Catching signal TERM, exiting cleanly."); - tor_cleanup(); - exit(0); // XXXX bad exit + tor_shutdown_event_loop_and_exit(0); break; case SIGINT: if (!server_mode(get_options())) { /* do it now */ log_notice(LD_GENERAL,"Interrupt: exiting cleanly."); - tor_cleanup(); - exit(0); // XXXX bad exit + tor_shutdown_event_loop_and_exit(0); + return; } #ifdef HAVE_SYSTEMD sd_notify(0, "STOPPING=1"); @@ -2744,8 +2833,8 @@ process_signal(int sig) #endif if (do_hup() < 0) { log_warn(LD_CONFIG,"Restart failed (config error?). Exiting."); - tor_cleanup(); - exit(1); // XXXX bad exit + tor_shutdown_event_loop_and_exit(1); + return; } #ifdef HAVE_SYSTEMD sd_notify(0, "READY=1"); @@ -3019,7 +3108,8 @@ activate_signal(int signal_num) } } -/** Main entry point for the Tor command-line client. +/** Main entry point for the Tor command-line client. Return 0 on "success", + * negative on "failure", and positive on "success and exit". */ int tor_init(int argc, char *argv[]) @@ -3111,14 +3201,13 @@ tor_init(int argc, char *argv[]) "Expect more bugs than usual."); } - { - rust_str_t rust_str = rust_welcome_string(); - const char *s = rust_str_get(rust_str); - if (strlen(s) > 0) { - log_notice(LD_GENERAL, "%s", s); - } - rust_str_free(rust_str); +#ifdef HAVE_RUST + char *rust_str = rust_welcome_string(); + if (rust_str != NULL && strlen(rust_str) > 0) { + log_notice(LD_GENERAL, "%s", rust_str); } + tor_free(rust_str); +#endif if (network_init()<0) { log_err(LD_BUG,"Error initializing network; exiting."); @@ -3126,9 +3215,14 @@ tor_init(int argc, char *argv[]) } atexit(exit_function); - if (options_init_from_torrc(argc,argv) < 0) { + int init_rv = options_init_from_torrc(argc,argv); + if (init_rv < 0) { log_err(LD_CONFIG,"Reading config failed--see warnings above."); return -1; + } else if (init_rv > 0) { + // We succeeded, and should exit anyway -- probably the user just said + // "--version" or something like that. + return 1; } /* The options are now initialised */ @@ -3198,7 +3292,7 @@ try_locking(const or_options_t *options, int err_if_locked) r = try_locking(options, 0); if (r<0) { log_err(LD_GENERAL, "No, it's still there. Exiting."); - exit(1); // XXXX bad exit + return -1; } return r; } @@ -3521,6 +3615,10 @@ sandbox_init_filter(void) } } + SMARTLIST_FOREACH(options->FilesOpenedByIncludes, char *, f, { + OPEN(f); + }); + #define RENAME_SUFFIX(name, suffix) \ sandbox_cfg_allow_rename(&cfg, \ get_datadir_fname(name suffix), \ @@ -3703,14 +3801,16 @@ sandbox_init_filter(void) return cfg; } -/** Main entry point for the Tor process. Called from main(). */ -/* This function is distinct from main() only so we can link main.c into - * the unittest binary without conflicting with the unittests' main. */ +/* Main entry point for the Tor process. Called from tor_main(), and by + * anybody embedding Tor. */ int -tor_main(int argc, char *argv[]) +tor_run_main(const tor_main_configuration_t *tor_cfg) { int result = 0; + int argc = tor_cfg->argc; + char **argv = tor_cfg->argv; + #ifdef _WIN32 #ifndef HeapEnableTerminationOnCorruption #define HeapEnableTerminationOnCorruption 1 @@ -3754,8 +3854,13 @@ tor_main(int argc, char *argv[]) if (done) return result; } #endif /* defined(NT_SERVICE) */ - if (tor_init(argc, argv)<0) - return -1; + { + int init_rv = tor_init(argc, argv); + if (init_rv < 0) + return -1; + else if (init_rv > 0) + return 0; + } if (get_options()->Sandbox && get_options()->command == CMD_RUN_TOR) { sandbox_cfg_t* cfg = sandbox_init_filter(); diff --git a/src/or/main.h b/src/or/main.h index 132ab12bbb..8eb977575e 100644 --- a/src/or/main.h +++ b/src/or/main.h @@ -45,7 +45,9 @@ int connection_is_writing(connection_t *conn); MOCK_DECL(void,connection_stop_writing,(connection_t *conn)); MOCK_DECL(void,connection_start_writing,(connection_t *conn)); -void tell_event_loop_to_finish(void); +void tell_event_loop_to_run_external_code(void); +void tor_shutdown_event_loop_and_exit(int exitcode); +int tor_event_loop_shutdown_is_pending(void); void connection_stop_reading_from_linked_conn(connection_t *conn); @@ -74,8 +76,6 @@ void release_lockfile(void); void tor_cleanup(void); void tor_free_all(int postfork); -int tor_main(int argc, char *argv[]); - int do_main_loop(void); int tor_init(int argc, char **argv); diff --git a/src/or/microdesc.c b/src/or/microdesc.c index 18a6fbded7..fe327c6c82 100644 --- a/src/or/microdesc.c +++ b/src/or/microdesc.c @@ -74,6 +74,102 @@ HT_GENERATE2(microdesc_map, microdesc_t, node, microdesc_hash_, microdesc_eq_, 0.6, tor_reallocarray_, tor_free_) +/************************* md fetch fail cache *****************************/ + +/* If we end up with too many outdated dirservers, something probably went + * wrong so clean up the list. */ +#define TOO_MANY_OUTDATED_DIRSERVERS 30 + +/** List of dirservers with outdated microdesc information. The smartlist is + * filled with the hex digests of outdated dirservers. */ +static smartlist_t *outdated_dirserver_list = NULL; + +/** Note that we failed to fetch a microdescriptor from the relay with + * <b>relay_digest</b> (of size DIGEST_LEN). */ +void +microdesc_note_outdated_dirserver(const char *relay_digest) +{ + char relay_hexdigest[HEX_DIGEST_LEN+1]; + + /* Don't register outdated dirservers if we don't have a live consensus, + * since we might be trying to fetch microdescriptors that are not even + * currently active. */ + if (!networkstatus_get_live_consensus(approx_time())) { + return; + } + + if (!outdated_dirserver_list) { + outdated_dirserver_list = smartlist_new(); + } + + tor_assert(outdated_dirserver_list); + + /* If the list grows too big, clean it up */ + if (BUG(smartlist_len(outdated_dirserver_list) > + TOO_MANY_OUTDATED_DIRSERVERS)) { + microdesc_reset_outdated_dirservers_list(); + } + + /* Turn the binary relay digest to a hex since smartlists have better support + * for strings than digests. */ + base16_encode(relay_hexdigest,sizeof(relay_hexdigest), + relay_digest, DIGEST_LEN); + + /* Make sure we don't add a dirauth as an outdated dirserver */ + if (router_get_trusteddirserver_by_digest(relay_digest)) { + log_info(LD_GENERAL, "Auth %s gave us outdated dirinfo.", relay_hexdigest); + return; + } + + /* Don't double-add outdated dirservers */ + if (smartlist_contains_string(outdated_dirserver_list, relay_hexdigest)) { + return; + } + + /* Add it to the list of outdated dirservers */ + smartlist_add_strdup(outdated_dirserver_list, relay_hexdigest); + + log_info(LD_GENERAL, "Noted %s as outdated md dirserver", relay_hexdigest); +} + +/** Return True if the relay with <b>relay_digest</b> (size DIGEST_LEN) is an + * outdated dirserver */ +int +microdesc_relay_is_outdated_dirserver(const char *relay_digest) +{ + char relay_hexdigest[HEX_DIGEST_LEN+1]; + + if (!outdated_dirserver_list) { + return 0; + } + + /* Convert identity digest to hex digest */ + base16_encode(relay_hexdigest, sizeof(relay_hexdigest), + relay_digest, DIGEST_LEN); + + /* Last time we tried to fetch microdescs, was this directory mirror missing + * any mds we asked for? */ + if (smartlist_contains_string(outdated_dirserver_list, relay_hexdigest)) { + return 1; + } + + return 0; +} + +/** Reset the list of outdated dirservers. */ +void +microdesc_reset_outdated_dirservers_list(void) +{ + if (!outdated_dirserver_list) { + return; + } + + SMARTLIST_FOREACH(outdated_dirserver_list, char *, cp, tor_free(cp)); + smartlist_clear(outdated_dirserver_list); +} + +/****************************************************************************/ + /** Write the body of <b>md</b> into <b>f</b>, with appropriate annotations. * On success, return the total number of bytes written, and set * *<b>annotation_len_out</b> to the number of bytes written as @@ -789,6 +885,11 @@ microdesc_free_all(void) tor_free(the_microdesc_cache->journal_fname); tor_free(the_microdesc_cache); } + + if (outdated_dirserver_list) { + SMARTLIST_FOREACH(outdated_dirserver_list, char *, cp, tor_free(cp)); + smartlist_free(outdated_dirserver_list); + } } /** If there is a microdescriptor in <b>cache</b> whose sha256 digest is diff --git a/src/or/microdesc.h b/src/or/microdesc.h index b40d66b3e3..1be12156a4 100644 --- a/src/or/microdesc.h +++ b/src/or/microdesc.h @@ -50,5 +50,9 @@ int we_fetch_microdescriptors(const or_options_t *options); int we_fetch_router_descriptors(const or_options_t *options); int we_use_microdescriptors_for_circuits(const or_options_t *options); +void microdesc_note_outdated_dirserver(const char *relay_digest); +int microdesc_relay_is_outdated_dirserver(const char *relay_digest); +void microdesc_reset_outdated_dirservers_list(void); + #endif /* !defined(TOR_MICRODESC_H) */ diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 3a4f06fb7b..10d9b7542a 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -52,6 +52,7 @@ #include "dirserv.h" #include "dirvote.h" #include "entrynodes.h" +#include "hibernate.h" #include "main.h" #include "microdesc.h" #include "networkstatus.h" @@ -1208,6 +1209,14 @@ should_delay_dir_fetches(const or_options_t *options, const char **msg_out) return 1; } + if (we_are_hibernating()) { + if (msg_out) { + *msg_out = "We are hibernating or shutting down."; + } + log_info(LD_DIR, "Delaying dir fetches (Hibernating or shutting down)"); + return 1; + } + if (options->UseBridges) { if (!any_bridge_descriptors_known()) { if (msg_out) { @@ -1720,7 +1729,7 @@ networkstatus_set_current_consensus(const char *consensus, { networkstatus_t *c=NULL; int r, result = -1; - time_t now = time(NULL); + time_t now = approx_time(); const or_options_t *options = get_options(); char *unverified_fname = NULL, *consensus_fname = NULL; int flav = networkstatus_parse_flavor_name(flavor); @@ -1939,13 +1948,17 @@ networkstatus_set_current_consensus(const char *consensus, } if (is_usable_flavor) { + /* The "current" consensus has just been set and it is a usable flavor so + * the first thing we need to do is recalculate the voting schedule static + * object so we can use the timings in there needed by some subsystems + * such as hidden service and shared random. */ + dirvote_recalculate_timing(options, now); + nodelist_set_consensus(c); /* XXXXNM Microdescs: needs a non-ns variant. ???? NM*/ update_consensus_networkstatus_fetch_time(now); - dirvote_recalculate_timing(options, now); - /* Update ewma and adjust policy if needed; first cache the old value */ old_ewma_enabled = cell_ewma_enabled(); /* Change the cell EWMA settings */ @@ -2010,6 +2023,9 @@ networkstatus_set_current_consensus(const char *consensus, tor_free(flavormsg); } + /* We got a new consesus. Reset our md fetch fail cache */ + microdesc_reset_outdated_dirservers_list(); + router_dir_info_changed(); result = 0; diff --git a/src/or/nodelist.c b/src/or/nodelist.c index eae74e18b5..1ab385cd35 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -48,6 +48,7 @@ #include "entrynodes.h" #include "geoip.h" #include "hs_common.h" +#include "hs_client.h" #include "main.h" #include "microdesc.h" #include "networkstatus.h" @@ -923,7 +924,10 @@ node_get_ed25519_id(const node_t *node) if (ed25519_pubkey_eq(ri_pk, md_pk)) { return ri_pk; } else { - log_warn(LD_GENERAL, "Inconsistent ed25519 identities in the nodelist"); + /* This can happen if the relay gets flagged NoEdConsensus which will be + * triggered on all relays of the network. Thus a protocol warning. */ + log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, + "Inconsistent ed25519 identities in the nodelist"); return NULL; } } else if (ri_pk) { @@ -947,23 +951,29 @@ node_ed25519_id_matches(const node_t *node, const ed25519_public_key_t *id) } /** Return true iff <b>node</b> supports authenticating itself - * by ed25519 ID during the link handshake in a way that we can understand - * when we probe it. */ + * by ed25519 ID during the link handshake. If <b>compatible_with_us</b>, + * it needs to be using a link authentication method that we understand. + * If not, any plausible link authentication method will do. */ int -node_supports_ed25519_link_authentication(const node_t *node) +node_supports_ed25519_link_authentication(const node_t *node, + int compatible_with_us) { - /* XXXX Oh hm. What if some day in the future there are link handshake - * versions that aren't 3 but which are ed25519 */ if (! node_get_ed25519_id(node)) return 0; if (node->ri) { const char *protos = node->ri->protocol_list; if (protos == NULL) return 0; - return protocol_list_supports_protocol(protos, PRT_LINKAUTH, 3); + if (compatible_with_us) + return protocol_list_supports_protocol(protos, PRT_LINKAUTH, 3); + else + return protocol_list_supports_protocol_or_later(protos, PRT_LINKAUTH, 3); } if (node->rs) { - return node->rs->supports_ed25519_link_handshake; + if (compatible_with_us) + return node->rs->supports_ed25519_link_handshake_compat; + else + return node->rs->supports_ed25519_link_handshake_any; } tor_assert_nonfatal_unreached_once(); return 0; @@ -1435,6 +1445,11 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out) node_assert_ok(node); tor_assert(ap_out); + /* Clear the address, as a safety precaution if calling functions ignore the + * return value */ + tor_addr_make_null(&ap_out->addr, AF_INET); + ap_out->port = 0; + /* Check ri first, because rewrite_node_address_for_bridge() updates * node->ri with the configured bridge address. */ @@ -1624,6 +1639,18 @@ node_has_curve25519_onion_key(const node_t *node) return 0; } +/** Return the curve25519 key of <b>node</b>, or NULL if none. */ +const curve25519_public_key_t * +node_get_curve25519_onion_key(const node_t *node) +{ + if (node->ri) + return node->ri->onion_curve25519_pkey; + else if (node->md) + return node->md->onion_curve25519_pkey; + else + return NULL; +} + /** Refresh the country code of <b>ri</b>. This function MUST be called on * each router when the GeoIP database is reloaded, and on all new routers. */ void @@ -1973,6 +2000,7 @@ router_dir_info_changed(void) need_to_update_have_min_dir_info = 1; rend_hsdir_routers_changed(); hs_service_dir_info_changed(); + hs_client_dir_info_changed(); } /** Return a string describing what we're missing before we have enough diff --git a/src/or/nodelist.h b/src/or/nodelist.h index 754990ac8d..e879b4e8ff 100644 --- a/src/or/nodelist.h +++ b/src/or/nodelist.h @@ -65,7 +65,8 @@ const smartlist_t *node_get_declared_family(const node_t *node); const ed25519_public_key_t *node_get_ed25519_id(const node_t *node); int node_ed25519_id_matches(const node_t *node, const ed25519_public_key_t *id); -int node_supports_ed25519_link_authentication(const node_t *node); +int node_supports_ed25519_link_authentication(const node_t *node, + int compatible_with_us); int node_supports_v3_hsdir(const node_t *node); int node_supports_ed25519_hs_intro(const node_t *node); int node_supports_v3_rendezvous_point(const node_t *node); @@ -85,6 +86,8 @@ int node_get_prim_dirport(const node_t *node, tor_addr_port_t *ap_out); void node_get_pref_dirport(const node_t *node, tor_addr_port_t *ap_out); void node_get_pref_ipv6_dirport(const node_t *node, tor_addr_port_t *ap_out); int node_has_curve25519_onion_key(const node_t *node); +const curve25519_public_key_t *node_get_curve25519_onion_key( + const node_t *node); MOCK_DECL(smartlist_t *, nodelist_get_list, (void)); diff --git a/src/or/ntmain.c b/src/or/ntmain.c index 9ce03e1f5a..ebbe0018bd 100644 --- a/src/or/ntmain.c +++ b/src/or/ntmain.c @@ -318,7 +318,7 @@ nt_service_main(void) printf("Service error %d : %s\n", (int) result, errmsg); tor_free(errmsg); if (result == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) { - if (tor_init(backup_argc, backup_argv) < 0) + if (tor_init(backup_argc, backup_argv)) return; switch (get_options()->command) { case CMD_RUN_TOR: diff --git a/src/or/or.h b/src/or/or.h index 5bd07ba6a3..fa5268ac59 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2234,18 +2234,18 @@ typedef struct { * uploaded it. */ #define ROUTER_PURPOSE_GENERAL 0 /** Tor should avoid using this router for circuit-building: we got it - * from a crontroller. If the controller wants to use it, it'll have to + * from a controller. If the controller wants to use it, it'll have to * ask for it by identity. */ #define ROUTER_PURPOSE_CONTROLLER 1 /** Tor should use this router only for bridge positions in circuits: we got * it via a directory request from the bridge itself, or a bridge - * authority. x*/ + * authority. */ #define ROUTER_PURPOSE_BRIDGE 2 /** Tor should not use this router; it was marked in cached-descriptors with * a purpose we didn't recognize. */ #define ROUTER_PURPOSE_UNKNOWN 255 - /* In what way did we find out about this router? One of ROUTER_PURPOSE_*. + /** In what way did we find out about this router? One of ROUTER_PURPOSE_*. * Routers of different purposes are kept segregated and used for different * things; see notes on ROUTER_PURPOSE_* macros above. */ @@ -2316,8 +2316,12 @@ typedef struct routerstatus_t { unsigned int supports_extend2_cells:1; /** True iff this router has a protocol list that allows it to negotiate - * ed25519 identity keys on a link handshake. */ - unsigned int supports_ed25519_link_handshake:1; + * ed25519 identity keys on a link handshake with us. */ + unsigned int supports_ed25519_link_handshake_compat:1; + + /** True iff this router has a protocol list that allows it to negotiate + * ed25519 identity keys on a link handshake, at all. */ + unsigned int supports_ed25519_link_handshake_any:1; /** True iff this router has a protocol list that allows it to be an * introduction point supporting ed25519 authentication key which is part of @@ -3674,6 +3678,7 @@ typedef struct { * interface addresses? * Includes OutboundBindAddresses and * configured ports. */ + int ReducedExitPolicy; /**<Should we use the Reduced Exit Policy? */ config_line_t *SocksPolicy; /**< Lists of socks policy components */ config_line_t *DirPolicy; /**< Lists of dir policy components */ /** Local address to bind outbound sockets */ @@ -3770,6 +3775,10 @@ typedef struct { int BridgeAuthoritativeDir; /**< Boolean: is this an authoritative directory * that aggregates bridge descriptors? */ + /** If set on a bridge relay, it will include this value on a new + * "bridge-distribution-request" line in its bridge descriptor. */ + char *BridgeDistribution; + /** If set on a bridge authority, it will answer requests on its dirport * for bridge statuses -- but only if the requests use this password. */ char *BridgePassword; @@ -4066,6 +4075,8 @@ typedef struct { /** Process specifier for a controller that ‘owns’ this Tor * instance. Tor will terminate if its owning controller does. */ char *OwningControllerProcess; + /** FD specifier for a controller that owns this Tor instance. */ + int OwningControllerFD; int ShutdownWaitLength; /**< When we get a SIGINT and we're a server, how * long do we wait before exiting? */ @@ -4079,8 +4090,6 @@ typedef struct { int Sandbox; /**< Boolean: should sandboxing be enabled? */ int SafeSocks; /**< Boolean: should we outright refuse application * connections that use socks4 or socks5-with-local-dns? */ -#define LOG_PROTOCOL_WARN (get_options()->ProtocolWarnings ? \ - LOG_WARN : LOG_INFO) int ProtocolWarnings; /**< Boolean: when other parties screw up the Tor * protocol, is it a warn or an info in our logs? */ int TestSocks; /**< Boolean: when we get a socks connection, do we loudly @@ -4202,7 +4211,7 @@ typedef struct { /** If true, do not believe anybody who tells us that a domain resolves * to an internal address, or that an internal address has a PTR mapping. * Helps avoid some cross-site attacks. */ - int TestingClientDNSRejectInternalAddresses; + int ClientDNSRejectInternalAddresses; /** If true, do not accept any requests to connect to internal addresses * over randomly chosen exits. */ @@ -4625,8 +4634,13 @@ typedef struct { smartlist_t *Schedulers; /* An ordered list of scheduler_types mapped from Schedulers. */ smartlist_t *SchedulerTypes_; + + /** List of files that were opened by %include in torrc and torrc-defaults */ + smartlist_t *FilesOpenedByIncludes; } or_options_t; +#define LOG_PROTOCOL_WARN (get_protocol_warning_severity_level()) + /** Persistent state for an onion router, as saved to disk. */ typedef struct { uint32_t magic_; diff --git a/src/or/policies.c b/src/or/policies.c index 4c24bfbc32..1f80130710 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -81,7 +81,8 @@ static int policies_parse_exit_policy_internal( const smartlist_t *configured_addresses, int reject_interface_addresses, int reject_configured_port_addresses, - int add_default_policy); + int add_default_policy, + int add_reduced_policy); /** Replace all "private" entries in *<b>policy</b> with their expanded * equivalents. */ @@ -1144,7 +1145,7 @@ validate_addr_policies(const or_options_t *options, char **msg) "to 1 to disable this warning, and for forward compatibility.", options->ExitPolicy == NULL ? " with the default exit policy" : ""); - if (options->ExitPolicy == NULL) { + if (options->ExitPolicy == NULL && options->ReducedExitPolicy == 0) { log_warn(LD_CONFIG, "In a future version of Tor, ExitRelay 0 may become the " "default when no ExitPolicy is given."); @@ -1877,6 +1878,24 @@ policies_log_first_redundant_entry(const smartlist_t *policy) "reject *:563,reject *:1214,reject *:4661-4666," \ "reject *:6346-6429,reject *:6699,reject *:6881-6999,accept *:*" +#define REDUCED_EXIT_POLICY \ + "accept *:20-23,accept *:43,accept *:53,accept *:79-81,accept *:88," \ + "accept *:110,accept *:143,accept *:194,accept *:220,accept *:389," \ + "accept *:443,accept *:464,accept *:465,accept *:531,accept *:543-544," \ + "accept *:554,accept *:563,accept *:587,accept *:636,accept *:706," \ + "accept *:749,accept *:873,accept *:902-904,accept *:981,accept *:989-995," \ + "accept *:1194,accept *:1220,accept *:1293,accept *:1500,accept *:1533," \ + "accept *:1677,accept *:1723,accept *:1755,accept *:1863," \ + "accept *:2082-2083,accept *:2086-2087,accept *:2095-2096," \ + "accept *:2102-2104,accept *:3128,accept *:3389,accept *:3690," \ + "accept *:4321,accept *:4643,accept *:5050,accept *:5190," \ + "accept *:5222-5223,accept *:5228,accept *:5900,accept *:6660-6669," \ + "accept *:6679,accept *:6697,accept *:8000,accept *:8008,accept *:8074," \ + "accept *:8080,accept *:8082,accept *:8087-8088,accept *:8232-8233," \ + "accept *:8332-8333,accept *:8443,accept *:8888,accept *:9418," \ + "accept *:9999,accept *:10000,accept *:11371,accept *:19294," \ + "accept *:19638,accept *:50002,accept *:64738,reject *:*" + /** Parse the exit policy <b>cfg</b> into the linked list *<b>dest</b>. * * If <b>ipv6_exit</b> is false, prepend "reject *6:*" to the policy. @@ -1912,7 +1931,8 @@ policies_parse_exit_policy_internal(config_line_t *cfg, const smartlist_t *configured_addresses, int reject_interface_addresses, int reject_configured_port_addresses, - int add_default_policy) + int add_default_policy, + int add_reduced_policy) { if (!ipv6_exit) { append_exit_policy_string(dest, "reject *6:*"); @@ -1938,7 +1958,9 @@ policies_parse_exit_policy_internal(config_line_t *cfg, * effect, and are most likely an error. */ policies_log_first_redundant_entry(*dest); - if (add_default_policy) { + if (add_reduced_policy) { + append_exit_policy_string(dest, REDUCED_EXIT_POLICY); + } else if (add_default_policy) { append_exit_policy_string(dest, DEFAULT_EXIT_POLICY); } else { append_exit_policy_string(dest, "reject *4:*"); @@ -1979,13 +2001,15 @@ policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest, int add_default = (options & EXIT_POLICY_ADD_DEFAULT) ? 1 : 0; int reject_local_interfaces = (options & EXIT_POLICY_REJECT_LOCAL_INTERFACES) ? 1 : 0; + int add_reduced = (options & EXIT_POLICY_ADD_REDUCED) ? 1 : 0; return policies_parse_exit_policy_internal(cfg,dest,ipv6_enabled, reject_private, configured_addresses, reject_local_interfaces, reject_local_interfaces, - add_default); + add_default, + add_reduced); } /** Helper function that adds a copy of addr to a smartlist as long as it is @@ -2095,7 +2119,10 @@ policies_parse_exit_policy_from_options(const or_options_t *or_options, } if (!or_options->BridgeRelay) { - parser_cfg |= EXIT_POLICY_ADD_DEFAULT; + if (or_options->ReducedExitPolicy) + parser_cfg |= EXIT_POLICY_ADD_REDUCED; + else + parser_cfg |= EXIT_POLICY_ADD_DEFAULT; } if (or_options->ExitPolicyRejectLocalInterfaces) { @@ -2186,21 +2213,16 @@ exit_policy_is_general_exit_helper(smartlist_t *policy, int port) } /** Return true iff <b>ri</b> is "useful as an exit node", meaning - * it allows exit to at least one /8 address space for at least - * two of ports 80, 443, and 6667. */ + * it allows exit to at least one /8 address space for each of ports 80 + * and 443. */ int exit_policy_is_general_exit(smartlist_t *policy) { - static const int ports[] = { 80, 443, 6667 }; - int n_allowed = 0; - int i; if (!policy) /*XXXX disallow NULL policies? */ return 0; - for (i = 0; i < 3; ++i) { - n_allowed += exit_policy_is_general_exit_helper(policy, ports[i]); - } - return n_allowed >= 2; + return (exit_policy_is_general_exit_helper(policy, 80) && + exit_policy_is_general_exit_helper(policy, 443)); } /** Return false if <b>policy</b> might permit access to some addr:port; diff --git a/src/or/policies.h b/src/or/policies.h index 52ff4e2f99..cd97ee7f59 100644 --- a/src/or/policies.h +++ b/src/or/policies.h @@ -22,7 +22,8 @@ #define EXIT_POLICY_REJECT_PRIVATE (1 << 1) #define EXIT_POLICY_ADD_DEFAULT (1 << 2) #define EXIT_POLICY_REJECT_LOCAL_INTERFACES (1 << 3) -#define EXIT_POLICY_OPTION_MAX EXIT_POLICY_REJECT_LOCAL_INTERFACES +#define EXIT_POLICY_ADD_REDUCED (1 << 4) +#define EXIT_POLICY_OPTION_MAX EXIT_POLICY_ADD_REDUCED /* All options set: used for unit testing */ #define EXIT_POLICY_OPTION_ALL ((EXIT_POLICY_OPTION_MAX << 1) - 1) diff --git a/src/or/protover.c b/src/or/protover.c index 1a3e69be10..ae955296e6 100644 --- a/src/or/protover.c +++ b/src/or/protover.c @@ -27,11 +27,14 @@ #include "protover.h" #include "routerparse.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); /** Mapping between protocol type string and protocol type. */ +/// C_RUST_COUPLED: src/rust/protover/protover.rs `PROTOCOL_NAMES` static const struct { protocol_type_t protover_type; const char *name; @@ -280,8 +283,45 @@ protocol_list_supports_protocol(const char *list, protocol_type_t tp, return contains; } +/** + * Return true iff "list" encodes a protocol list that includes support for + * the indicated protocol and version, or some later version. + */ +int +protocol_list_supports_protocol_or_later(const char *list, + protocol_type_t tp, + uint32_t version) +{ + /* NOTE: This is a pretty inefficient implementation. If it ever shows + * up in profiles, we should memoize it. + */ + smartlist_t *protocols = parse_protocol_list(list); + if (!protocols) { + return 0; + } + const char *pr_name = protocol_type_to_str(tp); + + int contains = 0; + SMARTLIST_FOREACH_BEGIN(protocols, proto_entry_t *, proto) { + if (strcasecmp(proto->name, pr_name)) + continue; + SMARTLIST_FOREACH_BEGIN(proto->ranges, const proto_range_t *, range) { + if (range->high >= version) { + contains = 1; + goto found; + } + } SMARTLIST_FOREACH_END(range); + } SMARTLIST_FOREACH_END(proto); + + found: + SMARTLIST_FOREACH(protocols, proto_entry_t *, ent, proto_entry_free(ent)); + smartlist_free(protocols); + return contains; +} + /** Return the canonical string containing the list of protocols * that we support. */ +/// C_RUST_COUPLED: src/rust/protover/protover.rs `SUPPORTED_PROTOCOLS` const char * protover_get_supported_protocols(void) { @@ -365,6 +405,8 @@ encode_protocol_list(const smartlist_t *sl) /* We treat any protocol list with more than this many subprotocols in it * as a DoS attempt. */ +/// C_RUST_COUPLED: src/rust/protover/protover.rs +/// `MAX_PROTOCOLS_TO_EXPAND` static const int MAX_PROTOCOLS_TO_EXPAND = (1<<16); /** Voting helper: Given a list of proto_entry_t, return a newly allocated @@ -691,6 +733,7 @@ protocol_list_contains(const smartlist_t *protos, * Note that this is only used to infer protocols for Tor versions that * can't declare their own. **/ +/// C_RUST_COUPLED: src/rust/protover/protover.rs `compute_for_old_tor` const char * protover_compute_for_old_tor(const char *version) { @@ -735,3 +778,5 @@ protover_free_all(void) } } +#endif + diff --git a/src/or/protover.h b/src/or/protover.h index 657977279e..a4dbc8bfc2 100644 --- a/src/or/protover.h +++ b/src/or/protover.h @@ -15,6 +15,8 @@ * descriptors. Authorities should use this to decide whether to * guess proto lines. */ /* This is a guess. */ +/// C_RUST_COUPLED: src/rust/protover/protover.rs +/// `FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS` #define FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS "0.2.9.3-alpha" /** The protover version number that signifies HSDir support for HSv3 */ @@ -25,6 +27,8 @@ #define PROTOVER_HS_RENDEZVOUS_POINT_V3 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` typedef enum protocol_type_t { PRT_LINK, PRT_LINKAUTH, @@ -47,6 +51,9 @@ char *protover_compute_vote(const smartlist_t *list_of_proto_strings, const char *protover_compute_for_old_tor(const char *version); int protocol_list_supports_protocol(const char *list, protocol_type_t tp, uint32_t version); +int protocol_list_supports_protocol_or_later(const char *list, + protocol_type_t tp, + uint32_t version); void protover_free_all(void); @@ -70,11 +77,15 @@ typedef struct proto_entry_t { smartlist_t *ranges; } proto_entry_t; +#if !defined(HAVE_RUST) && defined(TOR_UNIT_TESTS) STATIC smartlist_t *parse_protocol_list(const char *s); -STATIC void proto_entry_free(proto_entry_t *entry); STATIC char *encode_protocol_list(const 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 + #endif /* defined(PROTOVER_PRIVATE) */ #endif /* !defined(TOR_PROTOVER_H) */ diff --git a/src/or/protover_rust.c b/src/or/protover_rust.c new file mode 100644 index 0000000000..0c409b1681 --- /dev/null +++ b/src/or/protover_rust.c @@ -0,0 +1,19 @@ +/* Copyright (c) 2016-2017, 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 "or.h" +#include "protover.h" + +#ifdef HAVE_RUST + +/* Define for compatibility, used in main.c */ +void protover_free_all(void) {} + +#endif + diff --git a/src/or/relay.c b/src/or/relay.c index 48c1dd6f8d..09f70793d3 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -949,7 +949,7 @@ connection_ap_process_end_not_open( connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); return 0; } - if (get_options()->TestingClientDNSRejectInternalAddresses && + if (get_options()->ClientDNSRejectInternalAddresses && tor_addr_is_internal(&addr, 0)) { log_info(LD_APP,"Address '%s' resolved to internal. Closing,", safe_str(conn->socks_request->address)); @@ -1366,7 +1366,7 @@ connection_edge_process_resolved_cell(edge_connection_t *conn, goto done; } - if (get_options()->TestingClientDNSRejectInternalAddresses) { + if (get_options()->ClientDNSRejectInternalAddresses) { int orig_len = smartlist_len(resolved_addresses); SMARTLIST_FOREACH_BEGIN(resolved_addresses, address_ttl_t *, addr) { if (addr->hostname == NULL && tor_addr_is_internal(&addr->addr, 0)) { @@ -1459,7 +1459,7 @@ connection_edge_process_relay_cell_not_open( if (tor_addr_family(&addr) != AF_UNSPEC) { const sa_family_t family = tor_addr_family(&addr); if (tor_addr_is_null(&addr) || - (get_options()->TestingClientDNSRejectInternalAddresses && + (get_options()->ClientDNSRejectInternalAddresses && tor_addr_is_internal(&addr, 0))) { log_info(LD_APP, "...but it claims the IP address was %s. Closing.", fmt_addr(&addr)); diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 74646c78d1..60234a5c1f 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -475,6 +475,30 @@ rend_service_port_config_free(rend_service_port_config_t *p) tor_free(p); } +/* Copy relevant data from service src to dst while pruning the service lists. + * This should only be called during the pruning process which takes existing + * services and copy their data to the newly configured services. The src + * service replaycache will be set to NULL after this call. */ +static void +copy_service_on_prunning(rend_service_t *dst, rend_service_t *src) +{ + tor_assert(dst); + tor_assert(src); + + /* Keep the timestamps for when the content changed and the next upload + * time so we can properly upload the descriptor if needed for the new + * service object. */ + dst->desc_is_dirty = src->desc_is_dirty; + dst->next_upload_time = src->next_upload_time; + /* Move the replaycache to the new object. */ + dst->accepted_intro_dh_parts = src->accepted_intro_dh_parts; + src->accepted_intro_dh_parts = NULL; + /* Copy intro point information to destination service. */ + dst->intro_period_started = src->intro_period_started; + dst->n_intro_circuits_launched = src->n_intro_circuits_launched; + dst->n_intro_points_wanted = src->n_intro_points_wanted; +} + /* Helper: Actual implementation of the pruning on reload which we've * decoupled in order to make the unit test workeable without ugly hacks. * Furthermore, this function does NOT free any memory but will nullify the @@ -548,6 +572,10 @@ rend_service_prune_list_impl_(void) smartlist_clear(old->intro_nodes); smartlist_add_all(new->expiring_nodes, old->expiring_nodes); smartlist_clear(old->expiring_nodes); + + /* Copy needed information from old to new. */ + copy_service_on_prunning(new, old); + /* This regular service will survive the closing IPs step after. */ smartlist_add(surviving_services, old); break; diff --git a/src/or/router.c b/src/or/router.c index 172531e70e..8ad5d038ef 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -2956,6 +2956,18 @@ router_dump_router_to_string(routerinfo_t *router, smartlist_add_asprintf(chunks, "contact %s\n", ci); } + if (options->BridgeRelay) { + const char *bd; + if (options->BridgeDistribution && strlen(options->BridgeDistribution)) { + bd = options->BridgeDistribution; + } else { + bd = "any"; + } + if (strchr(bd, '\n') || strchr(bd, '\r')) + bd = escaped(bd); + smartlist_add_asprintf(chunks, "bridge-distribution-request %s\n", bd); + } + if (router->onion_curve25519_pkey) { char kbuf[128]; base64_encode(kbuf, sizeof(kbuf), diff --git a/src/or/routerlist.c b/src/or/routerlist.c index b59f318fc8..fb8225e0d6 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -150,7 +150,8 @@ typedef struct cert_list_t cert_list_t; /* static function prototypes */ static int compute_weighted_bandwidths(const smartlist_t *sl, bandwidth_weight_rule_t rule, - double **bandwidths_out); + double **bandwidths_out, + double *total_bandwidth_out); static const routerstatus_t *router_pick_trusteddirserver_impl( const smartlist_t *sourcelist, dirinfo_type_t auth, int flags, int *n_busy_out); @@ -2506,7 +2507,7 @@ smartlist_choose_node_by_bandwidth_weights(const smartlist_t *sl, double *bandwidths_dbl=NULL; uint64_t *bandwidths_u64=NULL; - if (compute_weighted_bandwidths(sl, rule, &bandwidths_dbl) < 0) + if (compute_weighted_bandwidths(sl, rule, &bandwidths_dbl, NULL) < 0) return NULL; bandwidths_u64 = tor_calloc(smartlist_len(sl), sizeof(uint64_t)); @@ -2526,18 +2527,24 @@ smartlist_choose_node_by_bandwidth_weights(const smartlist_t *sl, * smartlist_choose_node_by_bandwidth_weights, compute weighted bandwidth * values for each node and store them in a freshly allocated * *<b>bandwidths_out</b> of the same length as <b>sl</b>, and holding results - * as doubles. Return 0 on success, -1 on failure. */ + * as doubles. If <b>total_bandwidth_out</b> is non-NULL, set it to the total + * of all the bandwidths. + * Return 0 on success, -1 on failure. */ static int compute_weighted_bandwidths(const smartlist_t *sl, bandwidth_weight_rule_t rule, - double **bandwidths_out) + double **bandwidths_out, + double *total_bandwidth_out) { int64_t weight_scale; double Wg = -1, Wm = -1, We = -1, Wd = -1; double Wgb = -1, Wmb = -1, Web = -1, Wdb = -1; - uint64_t weighted_bw = 0; guardfraction_bandwidth_t guardfraction_bw; - double *bandwidths; + double *bandwidths = NULL; + double total_bandwidth = 0.0; + + tor_assert(sl); + tor_assert(bandwidths_out); /* Can't choose exit and guard at same time */ tor_assert(rule == NO_WEIGHTING || @@ -2546,6 +2553,12 @@ compute_weighted_bandwidths(const smartlist_t *sl, rule == WEIGHT_FOR_MID || rule == WEIGHT_FOR_DIR); + *bandwidths_out = NULL; + + if (total_bandwidth_out) { + *total_bandwidth_out = 0.0; + } + if (smartlist_len(sl) == 0) { log_info(LD_CIRC, "Empty routerlist passed in to consensus weight node " @@ -2706,17 +2719,22 @@ compute_weighted_bandwidths(const smartlist_t *sl, final_weight = weight*this_bw; } - bandwidths[node_sl_idx] = final_weight + 0.5; + bandwidths[node_sl_idx] = final_weight; + total_bandwidth += final_weight; } SMARTLIST_FOREACH_END(node); log_debug(LD_CIRC, "Generated weighted bandwidths for rule %s based " "on weights " - "Wg=%f Wm=%f We=%f Wd=%f with total bw "U64_FORMAT, + "Wg=%f Wm=%f We=%f Wd=%f with total bw %f", bandwidth_weight_rule_to_string(rule), - Wg, Wm, We, Wd, U64_PRINTF_ARG(weighted_bw)); + Wg, Wm, We, Wd, total_bandwidth); *bandwidths_out = bandwidths; + if (total_bandwidth_out) { + *total_bandwidth_out = total_bandwidth; + } + return 0; } @@ -2733,7 +2751,8 @@ frac_nodes_with_descriptors(const smartlist_t *sl, if (smartlist_len(sl) == 0) return 0.0; - if (compute_weighted_bandwidths(sl, rule, &bandwidths) < 0) { + if (compute_weighted_bandwidths(sl, rule, &bandwidths, &total) < 0 || + total <= 0.0) { int n_with_descs = 0; SMARTLIST_FOREACH(sl, const node_t *, node, { if (node_has_descriptor(node)) @@ -2742,19 +2761,14 @@ frac_nodes_with_descriptors(const smartlist_t *sl, return ((double)n_with_descs) / (double)smartlist_len(sl); } - total = present = 0.0; + present = 0.0; SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) { - const double bw = bandwidths[node_sl_idx]; - total += bw; if (node_has_descriptor(node)) - present += bw; + present += bandwidths[node_sl_idx]; } SMARTLIST_FOREACH_END(node); tor_free(bandwidths); - if (total < 1.0) - return 0; - return present / total; } @@ -4531,7 +4545,7 @@ signed_desc_digest_is_recognized(signed_descriptor_t *desc) void update_all_descriptor_downloads(time_t now) { - if (get_options()->DisableNetwork) + if (should_delay_dir_fetches(get_options(), NULL)) return; update_router_descriptor_downloads(now); update_microdesc_downloads(now); @@ -5010,6 +5024,11 @@ launch_descriptor_downloads(int purpose, log_debug(LD_DIR, "There are enough downloadable %ss to launch requests.", descname); + } else if (! router_have_minimum_dir_info()) { + log_debug(LD_DIR, + "We are only missing %d %ss, but we'll fetch anyway, since " + "we don't yet have enough directory info.", + n_downloadable, descname); } else { /* should delay */ diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 15cdb0bbde..f1895ce313 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -2701,8 +2701,10 @@ routerstatus_parse_entry_from_string(memarea_t *area, rs->protocols_known = 1; rs->supports_extend2_cells = protocol_list_supports_protocol(tok->args[0], PRT_RELAY, 2); - rs->supports_ed25519_link_handshake = + rs->supports_ed25519_link_handshake_compat = protocol_list_supports_protocol(tok->args[0], PRT_LINKAUTH, 3); + rs->supports_ed25519_link_handshake_any = + protocol_list_supports_protocol_or_later(tok->args[0], PRT_LINKAUTH, 3); rs->supports_ed25519_hs_intro = protocol_list_supports_protocol(tok->args[0], PRT_HSINTRO, 4); rs->supports_v3_hsdir = @@ -4027,7 +4029,7 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out, /** Return the common_digests_t that holds the digests of the * <b>flavor_name</b>-flavored networkstatus according to the detached * signatures document <b>sigs</b>, allocating a new common_digests_t as - * neeeded. */ + * needed. */ static common_digests_t * detached_get_digests(ns_detached_signatures_t *sigs, const char *flavor_name) { @@ -4041,7 +4043,7 @@ detached_get_digests(ns_detached_signatures_t *sigs, const char *flavor_name) /** Return the list of signatures of the <b>flavor_name</b>-flavored * networkstatus according to the detached signatures document <b>sigs</b>, - * allocating a new common_digests_t as neeeded. */ + * allocating a new common_digests_t as needed. */ static smartlist_t * detached_get_signatures(ns_detached_signatures_t *sigs, const char *flavor_name) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 3ac3f406af..cd047d5a75 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -9,6 +9,9 @@ #define SCHEDULER_KIST_PRIVATE #include "scheduler.h" #include "main.h" +#include "buffers.h" +#define TOR_CHANNEL_INTERNAL_ +#include "channeltls.h" #include <event2/event.h> @@ -168,6 +171,8 @@ STATIC smartlist_t *channels_pending = NULL; */ STATIC struct event *run_sched_ev = NULL; +static int have_logged_kist_suddenly_disabled = 0; + /***************************************************************************** * Scheduling system static function definitions * @@ -249,13 +254,32 @@ select_scheduler(void) case SCHEDULER_KIST: if (!scheduler_can_use_kist()) { #ifdef HAVE_KIST_SUPPORT - log_notice(LD_SCHED, "Scheduler type KIST has been disabled by " - "the consensus or no kernel support."); + if (!have_logged_kist_suddenly_disabled) { + /* We should only log this once in most cases. If it was the kernel + * losing support for kist that caused scheduler_can_use_kist() to + * return false, then this flag makes sure we only log this message + * once. If it was the consensus that switched from "yes use kist" + * to "no don't use kist", then we still set the flag so we log + * once, but we unset the flag elsewhere if we ever can_use_kist() + * again. + */ + have_logged_kist_suddenly_disabled = 1; + log_notice(LD_SCHED, "Scheduler type KIST has been disabled by " + "the consensus or no kernel support."); + } #else /* !(defined(HAVE_KIST_SUPPORT)) */ log_info(LD_SCHED, "Scheduler type KIST not built in"); #endif /* defined(HAVE_KIST_SUPPORT) */ continue; } + /* This flag will only get set in one of two cases: + * 1 - the kernel lost support for kist. In that case, we don't expect to + * ever end up here + * 2 - the consensus went from "yes use kist" to "no don't use kist". + * We might end up here if the consensus changes back to "yes", in which + * case we might want to warn the user again if it goes back to "no" + * yet again. Thus we unset the flag */ + have_logged_kist_suddenly_disabled = 0; new_scheduler = get_kist_scheduler(); scheduler_kist_set_full_mode(); goto end; @@ -604,7 +628,7 @@ scheduler_release_channel,(channel_t *chan)) } if (chan->scheduler_state == SCHED_CHAN_PENDING) { - if (smartlist_pos(channels_pending, chan) == -1) { + if (SCHED_BUG(smartlist_pos(channels_pending, chan) == -1, chan)) { log_warn(LD_SCHED, "Scheduler asked to release channel %" PRIu64 " " "but it wasn't in channels_pending", chan->global_identifier); @@ -667,6 +691,43 @@ scheduler_channel_wants_writes(channel_t *chan) } } +/* Log warn the given channel and extra scheduler context as well. This is + * used by SCHED_BUG() in order to be able to extract as much information as + * we can when we hit a bug. Channel chan can be NULL. */ +void +scheduler_bug_occurred(const channel_t *chan) +{ + char buf[128]; + + if (chan != NULL) { + const size_t outbuf_len = + buf_datalen(TO_CONN(BASE_CHAN_TO_TLS((channel_t *) chan)->conn)->outbuf); + tor_snprintf(buf, sizeof(buf), + "Channel %" PRIu64 " in state %s and scheduler state %d." + " Num cells on cmux: %d. Connection outbuf len: %lu.", + chan->global_identifier, + channel_state_to_string(chan->state), + chan->scheduler_state, circuitmux_num_cells(chan->cmux), + (unsigned long)outbuf_len); + } + + { + char *msg; + /* Rate limit every 60 seconds. If we start seeing this every 60 sec, we + * know something is stuck/wrong. It *should* be loud but not too much. */ + static ratelim_t rlimit = RATELIM_INIT(60); + if ((msg = rate_limit_log(&rlimit, approx_time()))) { + log_warn(LD_BUG, "%s Num pending channels: %d. " + "Channel in pending list: %s.%s", + (chan != NULL) ? buf : "No channel in bug context.", + smartlist_len(channels_pending), + (smartlist_pos(channels_pending, chan) == -1) ? "no" : "yes", + msg); + tor_free(msg); + } + } +} + #ifdef TOR_UNIT_TESTS /* diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 0ec24db931..47c98f096a 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -143,6 +143,14 @@ MOCK_DECL(void, scheduler_channel_has_waiting_cells, (channel_t *chan)); /********************************* * Defined in scheduler.c *********************************/ + +/* Triggers a BUG() and extra information with chan if available. */ +#define SCHED_BUG(cond, chan) \ + (PREDICT_UNLIKELY(cond) ? \ + ((BUG(cond)) ? (scheduler_bug_occurred(chan), 1) : 0) : 0) + +void scheduler_bug_occurred(const channel_t *chan); + smartlist_t *get_channels_pending(void); MOCK_DECL(int, scheduler_compare_channels, (const void *c1_v, const void *c2_v)); diff --git a/src/or/scheduler_kist.c b/src/or/scheduler_kist.c index d269fb49b8..d1726ba345 100644 --- a/src/or/scheduler_kist.c +++ b/src/or/scheduler_kist.c @@ -116,7 +116,7 @@ channel_outbuf_length(channel_t *chan) /* In theory, this can not happen because we can not scheduler a channel * without a connection that has its outbuf initialized. Just in case, bug * on this so we can understand a bit more why it happened. */ - if (BUG(BASE_CHAN_TO_TLS(chan)->conn == NULL)) { + if (SCHED_BUG(BASE_CHAN_TO_TLS(chan)->conn == NULL, chan)) { return 0; } return buf_datalen(TO_CONN(BASE_CHAN_TO_TLS(chan)->conn)->outbuf); @@ -158,6 +158,7 @@ static void free_all_socket_info(void) { HT_FOREACH_FN(socket_table_s, &socket_table, free_socket_info_by_ent, NULL); + HT_CLEAR(socket_table_s, &socket_table); } static socket_table_ent_t * @@ -370,7 +371,7 @@ socket_can_write(socket_table_t *table, const channel_t *chan) { socket_table_ent_t *ent = NULL; ent = socket_table_search(table, chan); - IF_BUG_ONCE(!ent) { + if (SCHED_BUG(!ent, chan)) { return 1; // Just return true, saying that kist wouldn't limit the socket } @@ -390,7 +391,7 @@ update_socket_info(socket_table_t *table, const channel_t *chan) { socket_table_ent_t *ent = NULL; ent = socket_table_search(table, chan); - IF_BUG_ONCE(!ent) { + if (SCHED_BUG(!ent, chan)) { return; // Whelp. Entry didn't exist for some reason so nothing to do. } update_socket_info_impl(ent); @@ -402,7 +403,7 @@ update_socket_written(socket_table_t *table, channel_t *chan, size_t bytes) { socket_table_ent_t *ent = NULL; ent = socket_table_search(table, chan); - IF_BUG_ONCE(!ent) { + if (SCHED_BUG(!ent, chan)) { return; // Whelp. Entry didn't exist so nothing to do. } @@ -572,7 +573,7 @@ kist_scheduler_run(void) /* get best channel */ chan = smartlist_pqueue_pop(cp, scheduler_compare_channels, offsetof(channel_t, sched_heap_idx)); - IF_BUG_ONCE(!chan) { + if (SCHED_BUG(!chan, NULL)) { /* Some-freaking-how a NULL got into the channels_pending. That should * never happen, but it should be harmless to ignore it and keep looping. */ @@ -597,6 +598,15 @@ kist_scheduler_run(void) if (socket_can_write(&socket_table, chan)) { /* flush to channel queue/outbuf */ flush_result = (int)channel_flush_some_cells(chan, 1); // 1 for num cells + /* XXX: While flushing cells, it is possible that the connection write + * fails leading to the channel to be closed which triggers a release + * and free its entry in the socket table. And because of a engineering + * design issue, the error is not propagated back so we don't get an + * error at this poin. So before we continue, make sure the channel is + * open and if not just ignore it. See #23751. */ + if (!CHANNEL_IS_OPEN(chan)) { + continue; + } /* flush_result has the # cells flushed */ if (flush_result > 0) { update_socket_written(&socket_table, chan, flush_result * diff --git a/src/or/shared_random.c b/src/or/shared_random.c index bbb7af0a33..b3f62a8fd8 100644 --- a/src/or/shared_random.c +++ b/src/or/shared_random.c @@ -1333,13 +1333,7 @@ sr_act_post_consensus(const networkstatus_t *consensus) } /* Prepare our state so that it's ready for the next voting period. */ - { - voting_schedule_t *voting_schedule = - get_voting_schedule(options,time(NULL), LOG_NOTICE); - time_t interval_starts = voting_schedule->interval_starts; - sr_state_update(interval_starts); - voting_schedule_free(voting_schedule); - } + sr_state_update(dirvote_get_next_valid_after_time()); } /* Initialize shared random subsystem. This MUST be called early in the boot diff --git a/src/or/shared_random_state.c b/src/or/shared_random_state.c index f74cb70a18..ae904cfda3 100644 --- a/src/or/shared_random_state.c +++ b/src/or/shared_random_state.c @@ -139,25 +139,18 @@ get_voting_interval(void) * the SR protocol. For example, if it's 23:47:08, the current round thus * started at 23:47:00 for a voting interval of 10 seconds. */ STATIC time_t -get_start_time_of_current_round(time_t now) +get_start_time_of_current_round(void) { const or_options_t *options = get_options(); int voting_interval = get_voting_interval(); - voting_schedule_t *new_voting_schedule = - get_voting_schedule(options, now, LOG_DEBUG); - tor_assert(new_voting_schedule); - /* First, get the start time of the next round */ - time_t next_start = new_voting_schedule->interval_starts; + time_t next_start = dirvote_get_next_valid_after_time(); /* Now roll back next_start by a voting interval to find the start time of the current round. */ time_t curr_start = dirvote_get_start_of_next_interval( next_start - voting_interval - 1, voting_interval, options->TestingV3AuthVotingStartOffset); - - voting_schedule_free(new_voting_schedule); - return curr_start; } @@ -170,7 +163,7 @@ sr_state_get_start_time_of_current_protocol_run(time_t now) int total_rounds = SHARED_RANDOM_N_ROUNDS * SHARED_RANDOM_N_PHASES; int voting_interval = get_voting_interval(); /* Find the time the current round started. */ - time_t beginning_of_current_round = get_start_time_of_current_round(now); + time_t beginning_of_current_round = get_start_time_of_current_round(); /* Get current SR protocol round */ int current_round = (now / voting_interval) % total_rounds; @@ -208,7 +201,7 @@ get_state_valid_until_time(time_t now) voting_interval = get_voting_interval(); /* Find the time the current round started. */ - beginning_of_current_round = get_start_time_of_current_round(now); + beginning_of_current_round = get_start_time_of_current_round(); /* Find how many rounds are left till the end of the protocol run */ current_round = (now / voting_interval) % total_rounds; @@ -1370,7 +1363,7 @@ sr_state_init(int save_to_disk, int read_from_disk) /* We have a state in memory, let's make sure it's updated for the current * and next voting round. */ { - time_t valid_after = get_next_valid_after_time(now); + time_t valid_after = dirvote_get_next_valid_after_time(); sr_state_update(valid_after); } return 0; diff --git a/src/or/shared_random_state.h b/src/or/shared_random_state.h index b6af6e1721..866725c435 100644 --- a/src/or/shared_random_state.h +++ b/src/or/shared_random_state.h @@ -130,7 +130,7 @@ unsigned int sr_state_get_protocol_run_duration(void); STATIC int disk_state_load_from_disk_impl(const char *fname); STATIC sr_phase_t get_sr_protocol_phase(time_t valid_after); -STATIC time_t get_start_time_of_current_round(time_t now); +STATIC time_t get_start_time_of_current_round(void); STATIC time_t get_state_valid_until_time(time_t now); STATIC const char *get_phase_str(sr_phase_t phase); diff --git a/src/or/tor_api.c b/src/or/tor_api.c new file mode 100644 index 0000000000..4260cc88f4 --- /dev/null +++ b/src/or/tor_api.c @@ -0,0 +1,88 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file tor_api.c + **/ + +#include "tor_api.h" +#include "tor_api_internal.h" + +// Include this after the above headers, to insure that they don't +// depend on anything else. +#include "orconfig.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +// We don't want to use tor_malloc and tor_free here, since this needs +// to run before anything is initialized at all, and ought to run when +// we're not linked to anything at all. + +#define raw_malloc malloc +#define raw_free free + +tor_main_configuration_t * +tor_main_configuration_new(void) +{ + static const char *fake_argv[] = { "tor" }; + tor_main_configuration_t *cfg = raw_malloc(sizeof(*cfg)); + if (cfg == NULL) + return NULL; + + memset(cfg, 0, sizeof(*cfg)); + + cfg->argc = 1; + cfg->argv = (char **) fake_argv; + + return cfg; +} + +int +tor_main_configuration_set_command_line(tor_main_configuration_t *cfg, + int argc, char *argv[]) +{ + if (cfg == NULL) + return -1; + cfg->argc = argc; + cfg->argv = argv; + return 0; +} + +void +tor_main_configuration_free(tor_main_configuration_t *cfg) +{ + if (cfg == NULL) + return; + raw_free(cfg); +} + +/* Main entry point for the Tor process. Called from main(). + * + * This function is distinct from main() only so we can link main.c into + * the unittest binary without conflicting with the unittests' main. + * + * Some embedders have historically called this function; but that usage is + * deprecated: they should use tor_run_main() instead. + */ +int +tor_main(int argc, char *argv[]) +{ + tor_main_configuration_t *cfg = tor_main_configuration_new(); + if (!cfg) { + puts("INTERNAL ERROR: Allocation failure. Cannot proceed"); + return 1; + } + if (tor_main_configuration_set_command_line(cfg, argc, argv) < 0) { + puts("INTERNAL ERROR: Can't set command line. Cannot proceed."); + return 1; + } + int rv = tor_run_main(cfg); + tor_main_configuration_free(cfg); + return rv; +} + diff --git a/src/or/tor_api.h b/src/or/tor_api.h new file mode 100644 index 0000000000..b12ed718c1 --- /dev/null +++ b/src/or/tor_api.h @@ -0,0 +1,102 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file tor_api.h + * \brief Public C API for the Tor network service. + * + * This interface is intended for use by programs that need to link Tor as + * a library, and launch it in a separate thread. If you have the ability + * to run Tor as a separate executable, you should probably do that instead + * of embedding it as a library. + * + * To use this API, first construct a tor_main_configuration_t object using + * tor_main_configuration_new(). Then, you use one or more other function + * calls (such as tor_main_configuration_set_command_line() to configure how + * Tor should be run. Finally, you pass the configuration object to + * tor_run_main(). + * + * At this point, tor_run_main() will block its thread to run a Tor daemon; + * when the Tor daemon exits, it will return. See notes on bugs and + * limitations below. + * + * There is no other public C API to Tor: calling any C Tor function not + * documented in this file is not guaranteed to be stable. + **/ + +#ifndef TOR_API_H +#define TOR_API_H + +typedef struct tor_main_configuration_t tor_main_configuration_t; + +/** + * Create and return a new tor_main_configuration(). + */ +tor_main_configuration_t *tor_main_configuration_new(void); + +/** + * Set the command-line arguments in <b>cfg</b>. + * + * The <b>argc</b> and <b>argv</b> values here are as for main(). The + * contents of the argv pointer must remain unchanged until tor_run_main() has + * finished and you call tor_main_configuration_free(). + * + * Return 0 on success, -1 on failure. + */ +int tor_main_configuration_set_command_line(tor_main_configuration_t *cfg, + int argc, char *argv[]); + +/** + * Release all storage held in <b>cfg</b>. + * + * Once you have passed a tor_main_configuration_t to tor_run_main(), you + * must not free it until tor_run_main() has finished. + */ +void tor_main_configuration_free(tor_main_configuration_t *cfg); + +/** + * Run the tor process, as if from the command line. + * + * The command line arguments from tor_main_configuration_set_command_line() + * are taken as if they had been passed to main(). + * + * This function will not return until Tor is done running. It returns zero + * on success, and nonzero on failure. + * + * BUG 23848: In many cases, tor_main will call exit() or abort() instead of + * returning. This is not the intended long-term behavior; we are trying to + * fix it. + * + * BUG 23847: You can only call tor_main() once in a single process; if it + * returns and you call it again, you may crash. This is not intended + * long-term behavior; we are trying to fix it. + * + * LIMITATION: You cannot run more than one instance of Tor in the same + * process at the same time. Concurrent calls will cause undefined behavior. + * We do not currently have plans to change this. + * + * LIMITATION: While we will try to fix any problems found here, you + * should be aware that Tor was originally written to run as its own + * process, and that the functionality of this file was added later. If + * you find any bugs or strange behavior, please report them, and we'll + * try to straighten them out. + */ +int tor_run_main(const tor_main_configuration_t *); + +/** + * Run the tor process, as if from the command line. + * + * @deprecated Using this function from outside Tor is deprecated; you should + * use tor_run_main() instead. + * + * BUGS: This function has all the same bugs as tor_run_main(). + * + * LIMITATIONS: This function has all the limitations of tor_run_main(). + */ +int tor_main(int argc, char **argv); + +#endif /* !defined(TOR_API_H) */ + diff --git a/src/or/tor_api_internal.h b/src/or/tor_api_internal.h new file mode 100644 index 0000000000..a69ba76420 --- /dev/null +++ b/src/or/tor_api_internal.h @@ -0,0 +1,20 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_API_INTERNAL_H +#define TOR_API_INTERNAL_H + +/* The contents of this type are private; don't mess with them from outside + * Tor. */ +struct tor_main_configuration_t { + /** As in main() */ + int argc; + /** As in main(). This pointer is owned by the caller */ + char **argv; +}; + +#endif + diff --git a/src/or/tor_main.c b/src/or/tor_main.c index a3a8838602..c203d8248f 100644 --- a/src/or/tor_main.c +++ b/src/or/tor_main.c @@ -3,18 +3,6 @@ * Copyright (c) 2007-2017, The Tor Project, Inc. */ /* See LICENSE for licensing information */ -extern const char tor_git_revision[]; - -/** String describing which Tor Git repository version the source was - * built from. This string is generated by a bit of shell kludging in - * src/or/include.am, and is usually right. - */ -const char tor_git_revision[] = -#ifndef _MSC_VER -#include "micro-revision.i" -#endif - ""; - /** * \file tor_main.c * \brief Stub module containing a main() function. @@ -26,7 +14,7 @@ const char tor_git_revision[] = int tor_main(int argc, char *argv[]); /** We keep main() in a separate file so that our unit tests can use - * functions from main.c) + * functions from main.c. */ int main(int argc, char *argv[]) diff --git a/src/rust/.cargo/config.in b/src/rust/.cargo/config.in index 414b253a57..301e7fdbe7 100644 --- a/src/rust/.cargo/config.in +++ b/src/rust/.cargo/config.in @@ -5,4 +5,4 @@ @RUST_DL@ replace-with = 'vendored-sources' @RUST_DL@ [source.vendored-sources] -@RUST_DL@ directory = '@RUST_DEPENDENCIES@' +@RUST_DL@ directory = '@TOR_RUST_DEPENDENCIES@' diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock index 4ac9606ce8..224d2135bf 100644 --- a/src/rust/Cargo.lock +++ b/src/rust/Cargo.lock @@ -3,6 +3,14 @@ name = "tor_util" version = "0.0.1" dependencies = [ "libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)", + "tor_allocate 0.0.1", +] + +[[package]] +name = "external" +version = "0.0.1" +dependencies = [ + "libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -10,5 +18,38 @@ name = "libc" version = "0.2.22" 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.22 (registry+https://github.com/rust-lang/crates.io-index)", + "smartlist 0.0.1", + "tor_allocate 0.0.1", + "tor_util 0.0.1", +] + +[[package]] +name = "smartlist" +version = "0.0.1" +dependencies = [ + "libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tor_allocate" +version = "0.0.1" +dependencies = [ + "libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "tor_rust" +version = "0.1.0" +dependencies = [ + "protover 0.0.1", + "tor_util 0.0.1", +] + [metadata] "checksum libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)" = "babb8281da88cba992fa1f4ddec7d63ed96280a1a53ec9b919fd37b53d71e502" diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml index fc4377e8b4..953c9b96b7 100644 --- a/src/rust/Cargo.toml +++ b/src/rust/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["tor_util"] +members = ["tor_util", "protover", "smartlist", "external", "tor_allocate", "tor_rust"] [profile.release] debug = true diff --git a/src/rust/external/Cargo.toml b/src/rust/external/Cargo.toml new file mode 100644 index 0000000000..bccd7033a7 --- /dev/null +++ b/src/rust/external/Cargo.toml @@ -0,0 +1,13 @@ +[package] +authors = ["The Tor Project"] +version = "0.0.1" +name = "external" + +[dependencies] +libc = "0.2.22" + +[lib] +name = "external" +path = "lib.rs" +crate_type = ["rlib", "staticlib"] + diff --git a/src/rust/external/external.rs b/src/rust/external/external.rs new file mode 100644 index 0000000000..b9e17f021d --- /dev/null +++ b/src/rust/external/external.rs @@ -0,0 +1,33 @@ +// Copyright (c) 2016-2017, 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 src/or/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 +} diff --git a/src/rust/external/lib.rs b/src/rust/external/lib.rs new file mode 100644 index 0000000000..0af0d6452d --- /dev/null +++ b/src/rust/external/lib.rs @@ -0,0 +1,14 @@ +//! Copyright (c) 2016-2017, 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; + +mod external; + +pub use external::*; diff --git a/src/rust/include.am b/src/rust/include.am index 20afc6c4db..9c4337484a 100644 --- a/src/rust/include.am +++ b/src/rust/include.am @@ -1,6 +1,26 @@ -include src/rust/tor_util/include.am +include src/rust/tor_rust/include.am EXTRA_DIST +=\ src/rust/Cargo.toml \ src/rust/Cargo.lock \ - src/rust/.cargo/config.in + src/rust/.cargo/config.in \ + src/rust/external/Cargo.toml \ + src/rust/external/external.rs \ + src/rust/external/lib.rs \ + src/rust/protover/Cargo.toml \ + 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_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 diff --git a/src/rust/protover/Cargo.toml b/src/rust/protover/Cargo.toml new file mode 100644 index 0000000000..04d2f2ed7d --- /dev/null +++ b/src/rust/protover/Cargo.toml @@ -0,0 +1,25 @@ +[package] +authors = ["The Tor Project"] +version = "0.0.1" +name = "protover" + +[dependencies] +libc = "0.2.22" + +[dependencies.smartlist] +path = "../smartlist" + +[dependencies.external] +path = "../external" + +[dependencies.tor_util] +path = "../tor_util" + +[dependencies.tor_allocate] +path = "../tor_allocate" + +[lib] +name = "protover" +path = "lib.rs" +crate_type = ["rlib", "staticlib"] + diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs new file mode 100644 index 0000000000..3eb22c933e --- /dev/null +++ b/src/rust/protover/ffi.rs @@ -0,0 +1,219 @@ +// Copyright (c) 2016-2017, 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 `src/or/protover.c` + +use libc::{c_char, c_int, uint32_t}; +use std::ffi::CStr; +use std::ffi::CString; + +use protover::*; +use smartlist::*; +use tor_allocate::allocate_and_copy_string; + +/// 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: src/or/protover.h `protocol_type_t` +fn translate_to_rust(c_proto: uint32_t) -> Result<Proto, &'static str> { + match c_proto { + 0 => Ok(Proto::Link), + 1 => Ok(Proto::LinkAuth), + 2 => Ok(Proto::Relay), + 3 => Ok(Proto::DirCache), + 4 => Ok(Proto::HSDir), + 5 => Ok(Proto::HSIntro), + 6 => Ok(Proto::HSRend), + 7 => Ok(Proto::Desc), + 8 => Ok(Proto::Microdesc), + 9 => Ok(Proto::Cons), + _ => Err("Invalid protocol type"), + } +} + +/// 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 (is_supported, unsupported) = all_supported(relay_version); + + if unsupported.len() > 0 { + let c_unsupported = match CString::new(unsupported) { + Ok(n) => n, + Err(_) => return 1, + }; + + let ptr = c_unsupported.into_raw(); + unsafe { *missing_out = ptr }; + } + + return if is_supported { 1 } else { 0 }; +} + +/// 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 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, + }; + + let protocol = match translate_to_rust(c_protocol) { + Ok(n) => n, + Err(_) => return 0, + }; + + let is_supported = + protover_string_supports_protocol(protocol_list, protocol, version); + + return if is_supported { 1 } else { 0 }; +} + +/// 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 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, + }; + + let protocol = match translate_to_rust(c_protocol) { + Ok(n) => n, + Err(_) => return 0, + }; + + let is_supported = + protover_string_supports_protocol_or_later( + protocol_list, protocol, version); + + return if is_supported { 1 } else { 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() -> *mut c_char { + // Not handling errors when unwrapping as the content is controlled + // and is an empty string + let empty = CString::new("").unwrap(); + + let supported = get_supported_protocols(); + let c_supported = match CString::new(supported) { + Ok(n) => n, + Err(_) => return empty.into_raw(), + }; + + c_supported.into_raw() +} + +/// Provide an interface for C to translate arguments and return types for +/// protover::compute_vote +#[no_mangle] +pub extern "C" fn protover_compute_vote( + list: *const Stringlist, + threshold: c_int, +) -> *mut c_char { + + if list.is_null() { + let empty = String::new(); + return allocate_and_copy_string(&empty); + } + + // 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 vote = compute_vote(data, threshold); + + allocate_and_copy_string(&vote) +} + +/// 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, +) -> *mut c_char { + // Not handling errors when unwrapping as the content is controlled + // and is an empty string + let empty = String::new(); + + if version.is_null() { + return allocate_and_copy_string(&empty); + } + + // 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 allocate_and_copy_string(&empty), + }; + + let supported = compute_for_old_tor(&version); + + allocate_and_copy_string(&supported) +} diff --git a/src/rust/protover/lib.rs b/src/rust/protover/lib.rs new file mode 100644 index 0000000000..5a5dea4408 --- /dev/null +++ b/src/rust/protover/lib.rs @@ -0,0 +1,33 @@ +//! Copyright (c) 2016-2017, 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. + +extern crate libc; +extern crate smartlist; +extern crate external; +extern crate tor_allocate; + +mod protover; +pub mod ffi; + +pub use protover::*; diff --git a/src/rust/protover/protover.rs b/src/rust/protover/protover.rs new file mode 100644 index 0000000000..7d5947ca2f --- /dev/null +++ b/src/rust/protover/protover.rs @@ -0,0 +1,906 @@ +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ + +use external::c_tor_version_as_new_as; + +use std::str::FromStr; +use std::fmt; +use std::collections::{HashMap, HashSet}; +use std::string::String; + +/// 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: +/// src/or/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: src/or/protover.c `MAX_PROTOCOLS_TO_EXPAND` +const MAX_PROTOCOLS_TO_EXPAND: u32 = 500; + +/// Currently supported protocols and their versions +/// +/// C_RUST_COUPLED: src/or/protover.c `protover_get_supported_protocols` +const SUPPORTED_PROTOCOLS: &'static [&'static str] = &[ + "Cons=1-2", + "Desc=1-2", + "DirCache=1-2", + "HSDir=1-2", + "HSIntro=3-4", + "HSRend=1-2", + "Link=1-4", + "LinkAuth=1,3", + "Microdesc=1-2", + "Relay=1-2", +]; + +/// Known subprotocols in Tor. Indicates which subprotocol a relay supports. +/// +/// C_RUST_COUPLED: src/or/protover.h `protocol_type_t` +#[derive(Hash, Eq, PartialEq, Debug)] +pub enum Proto { + Cons, + Desc, + DirCache, + HSDir, + HSIntro, + HSRend, + Link, + LinkAuth, + Microdesc, + Relay, +} + +impl fmt::Display for Proto { + 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: src/or/protover.c `PROTOCOL_NAMES` +impl FromStr for Proto { + type Err = &'static str; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "Cons" => Ok(Proto::Cons), + "Desc" => Ok(Proto::Desc), + "DirCache" => Ok(Proto::DirCache), + "HSDir" => Ok(Proto::HSDir), + "HSIntro" => Ok(Proto::HSIntro), + "HSRend" => Ok(Proto::HSRend), + "Link" => Ok(Proto::Link), + "LinkAuth" => Ok(Proto::LinkAuth), + "Microdesc" => Ok(Proto::Microdesc), + "Relay" => Ok(Proto::Relay), + _ => Err("Not a valid protocol type"), + } + } +} + +/// Get the string representation of current supported protocols +/// +/// # Returns +/// +/// A `String` whose value is the existing protocols supported by tor. +/// Returned data is in the format as follows: +/// +/// "HSDir=1-1 LinkAuth=1" +/// +pub fn get_supported_protocols() -> String { + SUPPORTED_PROTOCOLS.join(" ") +} + +/// Translates a vector representation of a protocol list into a HashMap +fn parse_protocols( + protocols: &[&str], +) -> Result<HashMap<Proto, HashSet<u32>>, &'static str> { + let mut parsed = HashMap::new(); + + for subproto in protocols { + let (name, version) = get_proto_and_vers(subproto)?; + parsed.insert(name, version); + } + Ok(parsed) +} + +/// Translates a string representation of a protocol list to a HashMap +fn parse_protocols_from_string<'a>( + protocol_string: &'a str, +) -> Result<HashMap<Proto, HashSet<u32>>, &'static str> { + let protocols: &[&'a str] = + &protocol_string.split(" ").collect::<Vec<&'a str>>()[..]; + + parse_protocols(protocols) +} + +/// Translates supported tor versions from a string into a HashMap, which is +/// useful when looking up a specific subprotocol. +/// +/// # Returns +/// +/// A `Result` whose `Ok` value is a `HashMap<Proto, <u32>>` holding all +/// subprotocols and versions currently supported by tor. +/// +/// The returned `Result`'s `Err` value is an `&'static str` with a description +/// of the error. +/// +fn tor_supported() -> Result<HashMap<Proto, HashSet<u32>>, &'static str> { + parse_protocols(&SUPPORTED_PROTOCOLS) +} + +/// Get the unique version numbers supported by a subprotocol. +/// +/// # Inputs +/// +/// * `version_string`, a string comprised of "[0-9,-]" +/// +/// # Returns +/// +/// A `Result` whose `Ok` value is a `HashSet<u32>` holding all of the unique +/// version numbers. If there were ranges in the `version_string`, then these +/// are expanded, i.e. `"1-3"` would expand to `HashSet<u32>::new([1, 2, 3])`. +/// The returned HashSet is *unordered*. +/// +/// The returned `Result`'s `Err` value is an `&'static str` with a description +/// of the error. +/// +/// # Errors +/// +/// This function will error if: +/// +/// * the `version_string` is empty or contains 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. +/// +fn get_versions(version_string: &str) -> Result<HashSet<u32>, &'static str> { + if version_string.is_empty() { + return Err("version string is empty"); + } + + let mut versions = HashSet::<u32>::new(); + + for piece in version_string.split(",") { + if piece.contains("-") { + for p in expand_version_range(piece)? { + versions.insert(p); + } + } else { + versions.insert(u32::from_str(piece).or( + Err("invalid protocol entry"), + )?); + } + + if versions.len() > MAX_PROTOCOLS_TO_EXPAND as usize { + return Err("Too many versions to expand"); + } + } + Ok(versions) +} + + +/// Parse the subprotocol type and its version numbers. +/// +/// # Inputs +/// +/// * A `protocol_entry` string, comprised of a keyword, an "=" sign, and one +/// or more version numbers. +/// +/// # Returns +/// +/// A `Result` whose `Ok` value is a tuple of `(Proto, HashSet<u32>)`, where the +/// first element is the subprotocol type (see `protover::Proto`) and the last +/// element is a(n unordered) set of unique version numbers which are supported. +/// Otherwise, the `Err` value of this `Result` is a description of the error +/// +fn get_proto_and_vers<'a>( + protocol_entry: &'a str, +) -> Result<(Proto, HashSet<u32>), &'static str> { + let mut parts = protocol_entry.splitn(2, "="); + + let proto = match parts.next() { + Some(n) => n, + None => return Err("invalid protover entry"), + }; + + let vers = match parts.next() { + Some(n) => n, + None => return Err("invalid protover entry"), + }; + + let versions = get_versions(vers)?; + let proto_name = proto.parse()?; + + Ok((proto_name, versions)) +} + +/// Parses a single subprotocol entry string into subprotocol and version +/// parts, and then checks whether any of those versions are unsupported. +/// Helper for protover::all_supported +/// +/// # Inputs +/// +/// Accepted data is in the string format as follows: +/// +/// "HSDir=1-1" +/// +/// # Returns +/// +/// Returns `true` if the protocol entry is well-formatted and only contains +/// versions that are also supported in tor. Otherwise, returns false +/// +fn contains_only_supported_protocols(proto_entry: &str) -> bool { + let (name, mut vers) = match get_proto_and_vers(proto_entry) { + Ok(n) => n, + Err(_) => return false, + }; + + let currently_supported: HashMap<Proto, HashSet<u32>> = + match tor_supported() { + Ok(n) => n, + Err(_) => return false, + }; + + let supported_versions = match currently_supported.get(&name) { + Some(n) => n, + None => return false, + }; + + vers.retain(|x| !supported_versions.contains(x)); + vers.is_empty() +} + +/// Determine if we support every protocol a client supports, and if not, +/// determine which protocols we do not have support for. +/// +/// # Inputs +/// +/// Accepted data is in the string format as follows: +/// +/// "HSDir=1-1 LinkAuth=1-2" +/// +/// # Returns +/// +/// Return `true` if every protocol version is one that we support. +/// Otherwise, return `false`. +/// Optionally, return parameters which the client supports but which we do not +/// +/// # Examples +/// ``` +/// use protover::all_supported; +/// +/// let (is_supported, unsupported) = all_supported("Link=1"); +/// assert_eq!(true, is_supported); +/// +/// let (is_supported, unsupported) = all_supported("Link=5-6"); +/// assert_eq!(false, is_supported); +/// assert_eq!("Link=5-6", unsupported); +/// +pub fn all_supported(protocols: &str) -> (bool, String) { + let unsupported = protocols + .split_whitespace() + .filter(|v| !contains_only_supported_protocols(v)) + .collect::<Vec<&str>>(); + + (unsupported.is_empty(), unsupported.join(" ")) +} + +/// Return true iff the provided protocol list includes support for the +/// indicated protocol and version. +/// Otherwise, return false +/// +/// # Inputs +/// +/// * `list`, a string representation of a list of protocol entries. +/// * `proto`, a `Proto` to test support for +/// * `vers`, a `u32` version which we will go on to determine whether the +/// specified protocol supports. +/// +/// # Examples +/// ``` +/// use protover::*; +/// +/// let is_supported = protover_string_supports_protocol("Link=3-4 Cons=1", +/// Proto::Cons,1); +/// assert_eq!(true, is_supported); +/// +/// let is_not_supported = protover_string_supports_protocol("Link=3-4 Cons=1", +/// Proto::Cons,5); +/// assert_eq!(false, is_not_supported) +/// ``` +pub fn protover_string_supports_protocol( + list: &str, + proto: Proto, + vers: u32, +) -> bool { + let supported: HashMap<Proto, HashSet<u32>>; + + match parse_protocols_from_string(list) { + Ok(result) => supported = result, + Err(_) => return false, + } + + let supported_versions = match supported.get(&proto) { + Some(n) => n, + None => return false, + }; + + supported_versions.contains(&vers) +} + +/// As protover_string_supports_protocol(), but also returns True if +/// any later version of the protocol is supported. +/// +/// # Examples +/// ``` +/// use protover::*; +/// +/// let is_supported = protover_string_supports_protocol_or_later( +/// "Link=3-4 Cons=5", Proto::Cons, 5); +/// +/// assert_eq!(true, is_supported); +/// +/// let is_supported = protover_string_supports_protocol_or_later( +/// "Link=3-4 Cons=5", Proto::Cons, 4); +/// +/// assert_eq!(true, is_supported); +/// +/// let is_supported = protover_string_supports_protocol_or_later( +/// "Link=3-4 Cons=5", Proto::Cons, 6); +/// +/// assert_eq!(false, is_supported); +/// ``` +pub fn protover_string_supports_protocol_or_later( + list: &str, + proto: Proto, + vers: u32, +) -> bool { + let supported: HashMap<Proto, HashSet<u32>>; + + match parse_protocols_from_string(list) { + Ok(result) => supported = result, + Err(_) => return false, + } + + let supported_versions = match supported.get(&proto) { + Some(n) => n, + None => return false, + }; + + supported_versions.iter().any(|v| v >= &vers) +} + +/// Fully expand a version range. For example, 1-3 expands to 1,2,3 +/// Helper for get_versions +/// +/// # Inputs +/// +/// `range`, a string comprised of "[0-9,-]" +/// +/// # Returns +/// +/// A `Result` whose `Ok` value a vector of unsigned integers representing the +/// expanded range of supported versions by a single protocol. +/// Otherwise, the `Err` value of this `Result` is a description of the error +/// +/// # Errors +/// +/// This function will error if: +/// +/// * the specified range is empty +/// * the version range does not contain both a valid lower and upper bound. +/// +fn expand_version_range(range: &str) -> Result<Vec<u32>, &'static str> { + if range.is_empty() { + return Err("version string empty"); + } + + let mut parts = range.split("-"); + + let lower_string = parts.next().ok_or( + "cannot parse protocol range lower bound", + )?; + + let lower = u32::from_str_radix(lower_string, 10).or(Err( + "cannot parse protocol range lower bound", + ))?; + + let higher_string = parts.next().ok_or( + "cannot parse protocol range upper bound", + )?; + + let higher = u32::from_str_radix(higher_string, 10).or(Err( + "cannot parse protocol range upper bound", + ))?; + + // We can use inclusive range syntax when it becomes stable. + Ok((lower..higher + 1).collect()) +} + +/// 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. +/// Helper for compute_vote +/// +/// # 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, and an `u32` of the last integer in the range. +/// +/// 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. +/// +fn find_range(list: &Vec<u32>) -> (bool, u32) { + if list.len() == 0 { + return (false, 0); + } + + let mut iterable = list.iter().peekable(); + let mut range_end = match iterable.next() { + Some(n) => *n, + None => return (false, 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; + } + + (has_range, range_end) +} + +/// Contracts a HashSet representation of supported versions into a string. +/// Helper for compute_vote +/// +/// # Inputs +/// +/// `supported_set`, a set of integers of "[0-9,-]" representing the +/// supported versions for a single protocol. +/// +/// # Returns +/// +/// A `String` representation of this set in ascending order. +/// +fn contract_protocol_list<'a>(supported_set: &'a HashSet<u32>) -> String { + let mut supported: Vec<u32> = supported_set.iter() + .map(|x| *x) + .collect(); + supported.sort(); + + let mut final_output: Vec<String> = Vec::new(); + + while supported.len() != 0 { + let (has_range, end) = find_range(&supported); + let current = supported.remove(0); + + if has_range { + final_output.push(format!( + "{}-{}", + current.to_string(), + &end.to_string(), + )); + supported.retain(|&x| x > end); + } else { + final_output.push(current.to_string()); + } + } + + final_output.join(",") +} + +/// 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 Proto types +/// +/// # Returns +/// +/// A `Result` whose `Ok` value is a `HashSet<u32>` holding all of the unique +/// version numbers. +/// +/// The returned `Result`'s `Err` value is an `&'static str` with a description +/// of the error. +/// +/// # Errors +/// +/// This function will error if: +/// +/// * The protocol string does not follow the "protocol_name=version_list" +/// expected format +/// * If the version string is malformed. See `get_versions`. +/// +fn parse_protocols_from_string_with_no_validation<'a>( + protocol_string: &'a str, +) -> Result<HashMap<String, HashSet<u32>>, &'static str> { + let protocols = &protocol_string.split(" ").collect::<Vec<&'a str>>()[..]; + + let mut parsed: HashMap<String, HashSet<u32>> = HashMap::new(); + + for subproto in protocols { + let mut parts = subproto.splitn(2, "="); + + let name = match parts.next() { + Some(n) => n, + None => return Err("invalid protover entry"), + }; + + let vers = match parts.next() { + Some(n) => n, + None => return Err("invalid protover entry"), + }; + + let versions = get_versions(vers)?; + + parsed.insert(String::from(name), versions); + } + Ok(parsed) +} + +/// Protocol voting implementation. +/// +/// Given a list of strings describing protocol versions, return a new +/// string encoding all of the protocols that are listed by at +/// least threshold of the inputs. +/// +/// The string is sorted according to the following conventions: +/// - Protocols names are alphabetized +/// - Protocols are in order low to high +/// - Individual and ranges are listed together. For example, +/// "3, 5-10,13" +/// - All entries are unique +/// +/// # Examples +/// ``` +/// use protover::compute_vote; +/// +/// let protos = vec![String::from("Link=3-4"), String::from("Link=3")]; +/// let vote = compute_vote(protos, 2); +/// assert_eq!("Link=3", vote) +/// ``` +pub fn compute_vote( + list_of_proto_strings: Vec<String>, + threshold: i32, +) -> String { + let empty = String::from(""); + + if list_of_proto_strings.is_empty() { + return empty; + } + + // all_count is a structure to represent the count of the number of + // supported versions for a specific protocol. For example, in JSON format: + // { + // "FirstSupportedProtocol": { + // "1": "3", + // "2": "1" + // } + // } + // means that FirstSupportedProtocol has three votes which support version + // 1, and one vote that supports version 2 + let mut all_count: HashMap<String, HashMap<u32, usize>> = HashMap::new(); + + // parse and collect all of the protos and their versions and collect them + for vote in list_of_proto_strings { + let this_vote: HashMap<String, HashSet<u32>> = + match parse_protocols_from_string_with_no_validation(&vote) { + Ok(result) => result, + Err(_) => continue, + }; + + for (protocol, versions) in this_vote { + let supported_vers: &mut HashMap<u32, usize> = + all_count.entry(protocol).or_insert(HashMap::new()); + + for version in versions { + let counter: &mut usize = + supported_vers.entry(version).or_insert(0); + *counter += 1; + } + } + } + + let mut final_output: HashMap<String, String> = + HashMap::with_capacity(SUPPORTED_PROTOCOLS.len()); + + // Go through and remove verstions that are less than the threshold + for (protocol, versions) in all_count { + let mut meets_threshold = HashSet::new(); + for (version, count) in versions { + if count >= threshold as usize { + meets_threshold.insert(version); + } + } + + // For each protocol, compress its version list into the expected + // protocol version string format + let contracted = contract_protocol_list(&meets_threshold); + if !contracted.is_empty() { + final_output.insert(protocol, contracted); + } + } + + write_vote_to_string(&final_output) +} + +/// Return a String comprised of protocol entries in alphabetical order +/// +/// # Inputs +/// +/// * `vote`, a `HashMap` 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. +/// +/// # Returns +/// +/// A `String` whose value is series of pairs, comprising of the protocol name +/// and versions that it supports. The string takes the following format: +/// +/// "first_protocol_name=1,2-5, second_protocol_name=4,5" +/// +/// Sorts the keys in alphabetical order and creates the expected subprotocol +/// entry format. +/// +fn write_vote_to_string(vote: &HashMap<String, String>) -> String { + let mut keys: Vec<&String> = vote.keys().collect(); + keys.sort(); + + let mut output = Vec::new(); + for key in keys { + // TODO error in indexing here? + output.push(format!("{}={}", key, vote[key])); + } + output.join(" ") +} + +/// Returns a boolean indicating whether the given protocol and version is +/// supported in any of the existing Tor protocols +/// +/// # Examples +/// ``` +/// use protover::*; +/// +/// let is_supported = is_supported_here(Proto::Link, 5); +/// assert_eq!(false, is_supported); +/// +/// let is_supported = is_supported_here(Proto::Link, 1); +/// assert_eq!(true, is_supported); +/// ``` +pub fn is_supported_here(proto: Proto, vers: u32) -> bool { + let currently_supported: HashMap<Proto, HashSet<u32>>; + + match tor_supported() { + Ok(result) => currently_supported = result, + Err(_) => return false, + } + + let supported_versions = match currently_supported.get(&proto) { + Some(n) => n, + None => return false, + }; + + supported_versions.contains(&vers) +} + +/// Older versions of Tor cannot infer their own subprotocols +/// Used to determine which subprotocols are supported by older Tor versions. +/// +/// # Inputs +/// +/// * `version`, a string comprised of "[0-9,-]" +/// +/// # Returns +/// +/// A `String` whose value is series of pairs, comprising of the protocol name +/// and versions that it supports. 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. +/// +/// C_RUST_COUPLED: src/rust/protover.c `compute_for_old_tor` +pub fn compute_for_old_tor(version: &str) -> String { + if c_tor_version_as_new_as( + version, + FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS, + ) + { + return String::new(); + } + + if c_tor_version_as_new_as(version, "0.2.9.1-alpha") { + let ret = "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"; + return String::from(ret); + } + + if c_tor_version_as_new_as(version, "0.2.7.5") { + let ret = "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"; + return String::from(ret); + } + + if c_tor_version_as_new_as(version, "0.2.4.19") { + let ret = "Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 \ + Link=1-4 LinkAuth=1 Microdesc=1 Relay=1-2"; + return String::from(ret); + } + String::new() +} + +#[cfg(test)] +mod test { + #[test] + fn test_get_versions() { + use std::collections::HashSet; + + use super::get_versions; + + assert_eq!(Err("version string is empty"), get_versions("")); + assert_eq!(Err("invalid protocol entry"), get_versions("a,b")); + assert_eq!(Err("invalid protocol entry"), get_versions("1,!")); + + { + let mut versions: HashSet<u32> = HashSet::new(); + versions.insert(1); + assert_eq!(Ok(versions), get_versions("1")); + } + { + let mut versions: HashSet<u32> = HashSet::new(); + versions.insert(1); + versions.insert(2); + assert_eq!(Ok(versions), get_versions("1,2")); + } + { + let mut versions: HashSet<u32> = HashSet::new(); + versions.insert(1); + versions.insert(2); + versions.insert(3); + assert_eq!(Ok(versions), get_versions("1-3")); + } + { + let mut versions: HashSet<u32> = HashSet::new(); + versions.insert(1); + versions.insert(2); + versions.insert(5); + assert_eq!(Ok(versions), get_versions("1-2,5")); + } + { + let mut versions: HashSet<u32> = HashSet::new(); + versions.insert(1); + versions.insert(3); + versions.insert(4); + versions.insert(5); + assert_eq!(Ok(versions), get_versions("1,3-5")); + } + } + + #[test] + fn test_contains_only_supported_protocols() { + use super::contains_only_supported_protocols; + + assert_eq!(false, contains_only_supported_protocols("")); + assert_eq!(false, contains_only_supported_protocols("Cons=")); + assert_eq!(true, contains_only_supported_protocols("Cons=1")); + assert_eq!(false, contains_only_supported_protocols("Cons=0")); + assert_eq!(false, contains_only_supported_protocols("Cons=0-1")); + assert_eq!(false, contains_only_supported_protocols("Cons=5")); + assert_eq!(false, contains_only_supported_protocols("Cons=1-5")); + assert_eq!(false, contains_only_supported_protocols("Cons=1,5")); + assert_eq!(false, contains_only_supported_protocols("Cons=5,6")); + assert_eq!(false, contains_only_supported_protocols("Cons=1,5,6")); + assert_eq!(true, contains_only_supported_protocols("Cons=1,2")); + assert_eq!(true, contains_only_supported_protocols("Cons=1-2")); + } + + #[test] + fn test_find_range() { + use super::find_range; + + assert_eq!((false, 0), find_range(&vec![])); + assert_eq!((false, 1), find_range(&vec![1])); + assert_eq!((true, 2), find_range(&vec![1, 2])); + assert_eq!((true, 3), find_range(&vec![1, 2, 3])); + assert_eq!((true, 3), find_range(&vec![1, 2, 3, 5])); + } + + #[test] + fn test_expand_version_range() { + use super::expand_version_range; + + assert_eq!(Err("version string empty"), expand_version_range("")); + assert_eq!(Ok(vec![1, 2]), expand_version_range("1-2")); + assert_eq!(Ok(vec![1, 2, 3, 4]), expand_version_range("1-4")); + assert_eq!( + Err("cannot parse protocol range lower bound"), + expand_version_range("a") + ); + assert_eq!( + Err("cannot parse protocol range upper bound"), + expand_version_range("1-a") + ); + } + + #[test] + fn test_contract_protocol_list() { + use std::collections::HashSet; + use super::contract_protocol_list; + + { + let mut versions = HashSet::<u32>::new(); + assert_eq!(String::from(""), contract_protocol_list(&versions)); + + versions.insert(1); + assert_eq!(String::from("1"), contract_protocol_list(&versions)); + + versions.insert(2); + assert_eq!(String::from("1-2"), contract_protocol_list(&versions)); + } + + { + let mut versions = HashSet::<u32>::new(); + versions.insert(1); + versions.insert(3); + assert_eq!(String::from("1,3"), contract_protocol_list(&versions)); + } + + { + let mut versions = HashSet::<u32>::new(); + versions.insert(1); + versions.insert(2); + versions.insert(3); + versions.insert(4); + assert_eq!(String::from("1-4"), contract_protocol_list(&versions)); + } + + { + let mut versions = HashSet::<u32>::new(); + versions.insert(1); + versions.insert(3); + versions.insert(5); + versions.insert(6); + versions.insert(7); + assert_eq!( + String::from("1,3,5-7"), + contract_protocol_list(&versions) + ); + } + + { + let mut versions = HashSet::<u32>::new(); + versions.insert(1); + versions.insert(2); + versions.insert(3); + versions.insert(500); + assert_eq!( + String::from("1-3,500"), + contract_protocol_list(&versions) + ); + } + } +} diff --git a/src/rust/protover/tests/protover.rs b/src/rust/protover/tests/protover.rs new file mode 100644 index 0000000000..f4e394b3e2 --- /dev/null +++ b/src/rust/protover/tests/protover.rs @@ -0,0 +1,291 @@ +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ + +extern crate protover; + +#[test] +fn parse_protocol_list_with_single_proto_and_single_version() { + let protocol = "Cons=1"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn parse_protocol_list_with_single_protocol_and_multiple_versions() { + let protocol = "Cons=1-2"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn parse_protocol_list_with_different_single_protocol_and_single_version() { + let protocol = "HSDir=1"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn parse_protocol_list_with_single_protocol_and_supported_version() { + let protocol = "Desc=2"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn parse_protocol_list_with_two_protocols_and_single_version() { + let protocols = "Cons=1 HSDir=1"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + + +#[test] +fn parse_protocol_list_with_single_protocol_and_two_nonsequential_versions() { + let protocol = "Desc=1,2"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + + +#[test] +fn parse_protocol_list_with_single_protocol_and_two_sequential_versions() { + let protocol = "Desc=1-2"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn parse_protocol_list_with_single_protocol_and_protocol_range_returns_set() { + let protocol = "Link=1-4"; + let (is_supported, unsupported) = protover::all_supported(protocol); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn parse_protocol_list_with_single_protocol_and_protocol_set() { + let protocols = "Link=3-4 Desc=2"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn protover_all_supported_with_two_values() { + let protocols = "Microdesc=1-2 Relay=2"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!("", &unsupported); + assert_eq!(true, is_supported); +} + +#[test] +fn protover_all_supported_with_one_value() { + let protocols = "Microdesc=1-2"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!("", &unsupported); + assert_eq!(true, is_supported); +} + +#[test] +fn protover_all_supported_with_empty() { + let protocols = ""; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(true, is_supported); + assert_eq!("", &unsupported); +} + +#[test] +fn protover_all_supported_with_three_values() { + let protocols = "LinkAuth=1 Microdesc=1-2 Relay=2"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!("", &unsupported); + assert_eq!(true, is_supported); +} + +#[test] +fn protover_all_supported_with_unsupported_protocol() { + let protocols = "Wombat=9"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(false, is_supported); + assert_eq!("Wombat=9", &unsupported); +} + +#[test] +fn protover_all_supported_with_unsupported_versions() { + let protocols = "Link=3-999"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(false, is_supported); + assert_eq!("Link=3-999", &unsupported); +} + +#[test] +fn protover_all_supported_with_unsupported_low_version() { + let protocols = "Cons=0-1"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(false, is_supported); + assert_eq!("Cons=0-1", &unsupported); +} + +#[test] +fn protover_all_supported_with_unsupported_high_version() { + let protocols = "Cons=1-3"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(false, is_supported); + assert_eq!("Cons=1-3", &unsupported); +} + +#[test] +fn protover_all_supported_with_mix_of_supported_and_unsupproted() { + let protocols = "Link=3-4 Wombat=9"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(false, is_supported); + assert_eq!("Wombat=9", &unsupported); +} + +#[test] +fn protover_string_supports_protocol_returns_true_for_single_supported() { + let protocols = "Link=3-4 Cons=1"; + let is_supported = protover::protover_string_supports_protocol( + protocols, + protover::Proto::Cons, + 1, + ); + assert_eq!(true, is_supported); +} + +#[test] +fn protover_string_supports_protocol_returns_false_for_single_unsupported() { + let protocols = "Link=3-4 Cons=1"; + let is_supported = protover::protover_string_supports_protocol( + protocols, + protover::Proto::Cons, + 2, + ); + assert_eq!(false, is_supported); +} + +#[test] +fn protover_string_supports_protocol_returns_false_for_unsupported() { + let protocols = "Link=3-4"; + let is_supported = protover::protover_string_supports_protocol( + protocols, + protover::Proto::Cons, + 2, + ); + assert_eq!(false, is_supported); +} + +#[test] +fn protover_all_supported_with_unexpected_characters() { + let protocols = "Cons=*-%"; + let (is_supported, unsupported) = protover::all_supported(protocols); + assert_eq!(false, is_supported); + assert_eq!("Cons=*-%", &unsupported); +} + +#[test] +fn protover_compute_vote_returns_empty_for_empty_string() { + let protocols = vec![String::from("")]; + let listed = protover::compute_vote(protocols, 1); + assert_eq!("", listed); +} + +#[test] +fn protover_compute_vote_returns_single_protocol_for_matching() { + let protocols = vec![String::from("Cons=1")]; + let listed = protover::compute_vote(protocols, 1); + assert_eq!("Cons=1", listed); +} + +#[test] +fn protover_compute_vote_returns_two_protocols_for_two_matching() { + let protocols = vec![String::from("Link=1 Cons=1")]; + let listed = protover::compute_vote(protocols, 1); + assert_eq!("Cons=1 Link=1", listed); +} + +#[test] +fn protover_compute_vote_returns_one_protocol_when_one_out_of_two_matches() { + let protocols = vec![String::from("Cons=1 Link=2"), String::from("Cons=1")]; + let listed = protover::compute_vote(protocols, 2); + assert_eq!("Cons=1", listed); +} + +#[test] +fn protover_compute_vote_returns_protocols_that_it_doesnt_currently_support() { + let protocols = vec![String::from("Foo=1 Cons=2"), String::from("Bar=1")]; + let listed = protover::compute_vote(protocols, 1); + assert_eq!("Bar=1 Cons=2 Foo=1", listed); +} + +#[test] +fn protover_compute_vote_returns_matching_for_mix() { + let protocols = vec![String::from("Link=1-10,500 Cons=1,3-7,8")]; + let listed = protover::compute_vote(protocols, 1); + assert_eq!("Cons=1,3-8 Link=1-10,500", listed); +} + +#[test] +fn protover_compute_vote_returns_matching_for_longer_mix() { + let protocols = vec![ + String::from("Desc=1-10,500 Cons=1,3-7,8"), + String::from("Link=123-456,78 Cons=2-6,8 Desc=9"), + ]; + + let listed = protover::compute_vote(protocols, 1); + assert_eq!("Cons=1-8 Desc=1-10,500 Link=78,123-456", listed); +} + +#[test] +fn protover_compute_vote_returns_matching_for_longer_mix_with_threshold_two() { + let protocols = vec![ + String::from("Desc=1-10,500 Cons=1,3-7,8"), + String::from("Link=123-456,78 Cons=2-6,8 Desc=9"), + ]; + + let listed = protover::compute_vote(protocols, 2); + assert_eq!("Cons=3-6,8 Desc=9", listed); +} + +#[test] +fn protover_compute_vote_handles_duplicated_versions() { + let protocols = vec![String::from("Cons=1"), String::from("Cons=1")]; + assert_eq!("Cons=1", protover::compute_vote(protocols, 2)); + + let protocols = vec![String::from("Cons=1-2"), String::from("Cons=1-2")]; + assert_eq!("Cons=1-2", protover::compute_vote(protocols, 2)); +} + +#[test] +fn protover_compute_vote_handles_invalid_proto_entries() { + let protocols = vec![ + String::from("Cons=1"), + String::from("Cons=1"), + String::from("Link=a"), + ]; + assert_eq!("Cons=1", protover::compute_vote(protocols, 2)); + + let protocols = vec![ + String::from("Cons=1"), + String::from("Cons=1"), + String::from("Link=1-%"), + ]; + assert_eq!("Cons=1", protover::compute_vote(protocols, 2)); +} + +#[test] +fn protover_is_supported_here_returns_true_for_supported_protocol() { + assert_eq!(true, protover::is_supported_here(protover::Proto::Cons, 1)); +} + +#[test] +fn protover_is_supported_here_returns_false_for_unsupported_protocol() { + assert_eq!(false, protover::is_supported_here(protover::Proto::Cons, 5)); +} diff --git a/src/rust/smartlist/Cargo.toml b/src/rust/smartlist/Cargo.toml new file mode 100644 index 0000000000..51f486c4d7 --- /dev/null +++ b/src/rust/smartlist/Cargo.toml @@ -0,0 +1,13 @@ +[package] +authors = ["The Tor Project"] +version = "0.0.1" +name = "smartlist" + +[dependencies] +libc = "0.2.22" + +[lib] +name = "smartlist" +path = "lib.rs" +crate_type = ["rlib", "staticlib"] + diff --git a/src/rust/smartlist/lib.rs b/src/rust/smartlist/lib.rs new file mode 100644 index 0000000000..14a8148315 --- /dev/null +++ b/src/rust/smartlist/lib.rs @@ -0,0 +1,8 @@ +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ + +extern crate libc; + +mod smartlist; + +pub use smartlist::*; diff --git a/src/rust/smartlist/smartlist.rs b/src/rust/smartlist/smartlist.rs new file mode 100644 index 0000000000..ec5d7a57f5 --- /dev/null +++ b/src/rust/smartlist/smartlist.rs @@ -0,0 +1,115 @@ +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ + +use std::slice; +use libc::{c_char, c_int}; +use std::ffi::CStr; + +/// 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 i8] = + 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 std::ffi::CString; + use libc::c_char; + + 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 new file mode 100644 index 0000000000..ceb08b78ab --- /dev/null +++ b/src/rust/tor_allocate/Cargo.toml @@ -0,0 +1,13 @@ +[package] +authors = ["The Tor Project"] +version = "0.0.1" +name = "tor_allocate" + +[dependencies] +libc = "0.2.22" + +[lib] +name = "tor_allocate" +path = "lib.rs" +crate_type = ["rlib", "staticlib"] + diff --git a/src/rust/tor_allocate/lib.rs b/src/rust/tor_allocate/lib.rs new file mode 100644 index 0000000000..937a5dcf63 --- /dev/null +++ b/src/rust/tor_allocate/lib.rs @@ -0,0 +1,15 @@ +// Copyright (c) 2016-2017, 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; + +mod tor_allocate; +pub use tor_allocate::*; diff --git a/src/rust/tor_allocate/tor_allocate.rs b/src/rust/tor_allocate/tor_allocate.rs new file mode 100644 index 0000000000..359df1cd7a --- /dev/null +++ b/src/rust/tor_allocate/tor_allocate.rs @@ -0,0 +1,97 @@ +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ + +use libc::{c_char, c_void}; +use std::{ptr, slice, mem}; + +#[cfg(not(test))] +extern "C" { + fn tor_malloc_(size: usize) -> *mut c_void; +} + +// 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) +} + +/// 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 +/// +pub fn allocate_and_copy_string(src: &String) -> *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 arithmatic + 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 std::ffi::CStr; + use libc::{free, c_void}; + + use tor_allocate::allocate_and_copy_string; + + let empty = String::new(); + let allocated_empty = allocate_and_copy_string(&empty); + + 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 std::ffi::CStr; + use libc::{free, c_void}; + + use tor_allocate::allocate_and_copy_string; + + let empty = String::from("foo bar biz"); + let allocated_empty = allocate_and_copy_string(&empty); + + 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_rust/Cargo.toml b/src/rust/tor_rust/Cargo.toml new file mode 100644 index 0000000000..86fad3ee76 --- /dev/null +++ b/src/rust/tor_rust/Cargo.toml @@ -0,0 +1,16 @@ +[package] +authors = ["The Tor Project"] +name = "tor_rust" +version = "0.1.0" + +[lib] +name = "tor_rust" +path = "lib.rs" +crate_type = ["rlib", "staticlib"] + +[dependencies.tor_util] +path = "../tor_util" + +[dependencies.protover] +path = "../protover" + diff --git a/src/rust/tor_rust/include.am b/src/rust/tor_rust/include.am new file mode 100644 index 0000000000..90f37a9f1b --- /dev/null +++ b/src/rust/tor_rust/include.am @@ -0,0 +1,24 @@ +EXTRA_DIST +=\ + src/rust/tor_rust/Cargo.toml \ + src/rust/tor_rust/lib.rs + +src/rust/target/release/@TOR_RUST_STATIC_NAME@: FORCE + ( cd "$(abs_top_srcdir)/src/rust/tor_rust" ; \ + CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \ + CARGO_HOME="$(abs_top_builddir)/src/rust" \ + $(CARGO) build --release --quiet $(CARGO_ONLINE) ) + +distclean-rust: + ( cd "$(abs_top_srcdir)/src/rust/tor_rust" ; \ + CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \ + CARGO_HOME="$(abs_top_builddir)/src/rust" \ + $(CARGO) clean --quiet $(CARGO_ONLINE) ) + rm -rf "$(abs_top_builddir)/src/rust/registry" + +if USE_RUST +build-rust: src/rust/target/release/@TOR_RUST_STATIC_NAME@ +else +build-rust: +endif + +FORCE: diff --git a/src/rust/tor_rust/lib.rs b/src/rust/tor_rust/lib.rs new file mode 100644 index 0000000000..c1585c0480 --- /dev/null +++ b/src/rust/tor_rust/lib.rs @@ -0,0 +1,5 @@ +extern crate tor_util; +extern crate protover; + +pub use tor_util::*; +pub use protover::*; diff --git a/src/rust/tor_util/Cargo.toml b/src/rust/tor_util/Cargo.toml index f175fbdfb0..d7379a5988 100644 --- a/src/rust/tor_util/Cargo.toml +++ b/src/rust/tor_util/Cargo.toml @@ -8,6 +8,9 @@ name = "tor_util" path = "lib.rs" crate_type = ["rlib", "staticlib"] +[dependencies.tor_allocate] +path = "../tor_allocate" + [dependencies] -libc = "*" +libc = "0.2.22" diff --git a/src/rust/tor_util/ffi.rs b/src/rust/tor_util/ffi.rs index af4bfc41af..5c3cdba4be 100644 --- a/src/rust/tor_util/ffi.rs +++ b/src/rust/tor_util/ffi.rs @@ -1,56 +1,26 @@ -//! FFI functions, only to be called from C. -//! -//! Equivalent C versions of these live in `src/common/compat_rust.c` - -use std::mem::forget; -use std::ffi::CString; +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ -use libc; -use rust_string::RustString; - -/// Free the passed `RustString` (`rust_str_t` in C), to be used in place of -/// `tor_free`(). -/// -/// # Examples -/// ```c -/// rust_str_t r_s = rust_welcome_string(); -/// rust_str_free(r_s); -/// ``` -#[no_mangle] -#[cfg_attr(feature = "cargo-clippy", allow(needless_pass_by_value))] -pub unsafe extern "C" fn rust_str_free(_str: RustString) { - // Empty body: Just drop _str and we're done (Drop takes care of it). -} +//! FFI functions to announce Rust support during tor startup, only to be +//! called from C. +//! -/// Lends an immutable, NUL-terminated C String. -/// -/// # Examples -/// ```c -/// rust_str_t r_s = rust_welcome_string(); -/// const char *s = rust_str_get(r_s); -/// printf("%s", s); -/// rust_str_free(r_s); -/// ``` -#[no_mangle] -pub unsafe extern "C" fn rust_str_get(str: RustString) -> *const libc::c_char { - let res = str.as_ptr(); - forget(str); - res -} +use libc::c_char; +use tor_allocate::allocate_and_copy_string; /// Returns a short string to announce Rust support during startup. /// /// # Examples /// ```c -/// rust_str_t r_s = rust_welcome_string(); -/// const char *s = rust_str_get(r_s); -/// printf("%s", s); -/// rust_str_free(r_s); +/// char *rust_str = rust_welcome_string(); +/// printf("%s", rust_str); +/// tor_free(rust_str); /// ``` #[no_mangle] -pub extern "C" fn rust_welcome_string() -> RustString { - let s = CString::new("Tor is running with Rust integration. Please report \ - any bugs you encouter.") - .unwrap(); - RustString::from(s) +pub extern "C" fn rust_welcome_string() -> *mut c_char { + let rust_welcome = String::from( + "Tor is running with Rust integration. Please report \ + any bugs you encounter.", + ); + allocate_and_copy_string(&rust_welcome) } diff --git a/src/rust/tor_util/include.am b/src/rust/tor_util/include.am deleted file mode 100644 index ec3898577b..0000000000 --- a/src/rust/tor_util/include.am +++ /dev/null @@ -1,13 +0,0 @@ -EXTRA_DIST +=\ - src/rust/tor_util/Cargo.toml \ - src/rust/tor_util/lib.rs \ - src/rust/tor_util/ffi.rs \ - src/rust/tor_util/rust_string.rs - -src/rust/target/release/@TOR_RUST_UTIL_STATIC_NAME@: FORCE - ( cd "$(abs_top_srcdir)/src/rust/tor_util" ; \ - CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \ - CARGO_HOME="$(abs_top_builddir)/src/rust" \ - $(CARGO) build --release --quiet $(CARGO_ONLINE) ) - -FORCE: diff --git a/src/rust/tor_util/lib.rs b/src/rust/tor_util/lib.rs index 79d583d1ae..42fa9d5ad0 100644 --- a/src/rust/tor_util/lib.rs +++ b/src/rust/tor_util/lib.rs @@ -1,13 +1,11 @@ -//! C <-> Rust compatibility helpers and types. +// Copyright (c) 2016-2017, The Tor Project, Inc. */ +// See LICENSE for licensing information */ + +//! Small module to announce Rust support during startup for demonstration +//! purposes. //! -//! Generically useful, small scale helpers should go here. This goes for both -//! the C side (in the form of the ffi module) as well as the Rust side -//! (individual modules per functionality). The corresponding C stuff lives in -//! `src/common/compat_rust.{c,h}`. extern crate libc; +extern crate tor_allocate; -mod rust_string; pub mod ffi; - -pub use rust_string::*; diff --git a/src/rust/tor_util/rust_string.rs b/src/rust/tor_util/rust_string.rs deleted file mode 100644 index 46ec3fd7a8..0000000000 --- a/src/rust/tor_util/rust_string.rs +++ /dev/null @@ -1,101 +0,0 @@ -use std::ffi::CString; -use std::mem::forget; -use libc; - -/// Compatibility wrapper for strings allocated in Rust and passed to C. -/// -/// Rust doesn't ensure the safety of freeing memory across an FFI boundary, so -/// we need to take special care to ensure we're not accidentally calling -/// `tor_free`() on any string allocated in Rust. To more easily differentiate -/// between strings that possibly (if Rust support is enabled) were allocated -/// in Rust, C has the `rust_str_t` helper type. The equivalent on the Rust -/// side is `RustString`. -/// -/// Note: This type must not be used for strings allocated in C. -#[repr(C)] -#[derive(Debug)] -pub struct RustString(*mut libc::c_char); - -impl RustString { - /// Returns a pointer to the underlying NUL-terminated byte array. - /// - /// Note that this function is not typically useful for Rust callers, - /// except in a direct FFI context. - /// - /// # Examples - /// ``` - /// # use tor_util::RustString; - /// use std::ffi::CString; - /// - /// let r = RustString::from(CString::new("asdf").unwrap()); - /// let c_str = r.as_ptr(); - /// assert_eq!(b'a', unsafe { *c_str as u8}); - /// ``` - pub fn as_ptr(&self) -> *const libc::c_char { - self.0 as *const libc::c_char - } -} - -impl From<CString> for RustString { - /// Constructs a new `RustString` - /// - /// # Examples - /// ``` - /// # use tor_util::RustString; - /// use std::ffi::CString; - /// - /// let r = RustString::from(CString::new("asdf").unwrap()); - /// ``` - fn from(str: CString) -> RustString { - RustString(str.into_raw()) - } -} - -impl Into<CString> for RustString { - /// Reconstructs a `CString` from this `RustString`. - /// - /// Useful to take ownership back from a `RustString` that was given to C - /// code. - /// - /// # Examples - /// ``` - /// # use tor_util::RustString; - /// use std::ffi::CString; - /// - /// let cs = CString::new("asdf").unwrap(); - /// let r = RustString::from(cs.clone()); - /// let cs2 = r.into(); - /// assert_eq!(cs, cs2); - /// ``` - fn into(self) -> CString { - // Calling from_raw is always OK here: We only construct self using - // valid CStrings and don't expose anything that could mutate it - let ret = unsafe { CString::from_raw(self.0) }; - forget(self); - ret - } -} - -impl Drop for RustString { - fn drop(&mut self) { - // Don't use into() here, because we would need to move out of - // self. Same safety consideration. Immediately drop the created - // CString, which takes care of freeing the wrapped string. - unsafe { CString::from_raw(self.0) }; - } -} - -#[cfg(test)] -mod test { - use std::mem; - use super::*; - - use libc; - - /// Ensures we're not adding overhead by using RustString. - #[test] - fn size_of() { - assert_eq!(mem::size_of::<*mut libc::c_char>(), - mem::size_of::<RustString>()) - } -} diff --git a/src/rust/tor_util/tests/rust_string.rs b/src/rust/tor_util/tests/rust_string.rs deleted file mode 100644 index 1ff605a43c..0000000000 --- a/src/rust/tor_util/tests/rust_string.rs +++ /dev/null @@ -1,37 +0,0 @@ -extern crate tor_util; -extern crate libc; - -use std::ffi::CString; -use tor_util::RustString; - -#[test] -fn rust_string_conversions_preserve_c_string() { - let s = CString::new("asdf foo").unwrap(); - let r = RustString::from(s.clone()); - let r2 = RustString::from(s.clone()); - let c = r2.as_ptr(); - assert_eq!(unsafe { libc::strlen(c) }, 8); - let c_str = r.into(); - assert_eq!(s, c_str); -} - -#[test] -fn empty_string() { - let s = CString::new("").unwrap(); - let r = RustString::from(s.clone()); - let c = r.as_ptr(); - assert_eq!(unsafe { libc::strlen(c) }, 0); - let c_str = r.into(); - assert_eq!(s, c_str); -} - -#[test] -fn c_string_with_unicode() { - // The euro sign is three bytes - let s = CString::new("asd€asd").unwrap(); - let r = RustString::from(s.clone()); - let c = r.as_ptr(); - assert_eq!(unsafe { libc::strlen(c) }, 9); - let c_str = r.into(); - assert_eq!(s, c_str); -} diff --git a/src/test/bench.c b/src/test/bench.c index b7b123eee2..f30b609900 100644 --- a/src/test/bench.c +++ b/src/test/bench.c @@ -3,11 +3,6 @@ * Copyright (c) 2007-2017, The Tor Project, Inc. */ /* See LICENSE for licensing information */ -extern const char tor_git_revision[]; -/* Ordinarily defined in tor_main.c; this bit is just here to provide one - * since we're not linking to tor_main.c */ -const char tor_git_revision[] = ""; - /** * \file bench.c * \brief Benchmarks for lower level Tor modules. diff --git a/src/test/fuzz/fuzz_hsdescv3.c b/src/test/fuzz/fuzz_hsdescv3.c index 3fd21148f4..428774e330 100644 --- a/src/test/fuzz/fuzz_hsdescv3.c +++ b/src/test/fuzz/fuzz_hsdescv3.c @@ -35,12 +35,37 @@ mock_rsa_ed25519_crosscert_check(const uint8_t *crosscert, return 0; } +static size_t +mock_decrypt_desc_layer(const hs_descriptor_t *desc, + const uint8_t *encrypted_blob, + size_t encrypted_blob_size, + int is_superencrypted_layer, + char **decrypted_out) +{ + (void)is_superencrypted_layer; + (void)desc; + const size_t overhead = HS_DESC_ENCRYPTED_SALT_LEN + DIGEST256_LEN; + 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; + } +} + 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); ed25519_init(); return 0; } @@ -55,10 +80,12 @@ int fuzz_main(const uint8_t *data, size_t sz) { hs_descriptor_t *desc = NULL; + uint8_t subcredential[DIGEST256_LEN]; char *fuzzing_data = tor_memdup_nulterm(data, sz); + memset(subcredential, 'A', sizeof(subcredential)); - hs_desc_decode_descriptor(fuzzing_data, NULL, &desc); + hs_desc_decode_descriptor(fuzzing_data, subcredential, &desc); if (desc) { log_debug(LD_GENERAL, "Decoding okay"); hs_descriptor_free(desc); diff --git a/src/test/fuzz/fuzzing_common.c b/src/test/fuzz/fuzzing_common.c index 7aee92df63..1d54e41dbd 100644 --- a/src/test/fuzz/fuzzing_common.c +++ b/src/test/fuzz/fuzzing_common.c @@ -9,9 +9,6 @@ #include "crypto.h" #include "crypto_ed25519.h" -extern const char tor_git_revision[]; -const char tor_git_revision[] = ""; - static or_options_t *mock_options = NULL; static const or_options_t * mock_get_options(void) @@ -28,8 +25,9 @@ mock_crypto_pk_public_checksig__nocheck(const crypto_pk_t *env, char *to, (void)fromlen; /* We could look at from[0..fromlen-1] ... */ tor_assert(tolen >= crypto_pk_keysize(env)); - memset(to, 0x01, 20); - return 20; + size_t siglen = MIN(20, crypto_pk_keysize(env)); + memset(to, 0x01, siglen); + return (int)siglen; } static int @@ -107,7 +105,7 @@ global_init(void) configure_backtrace_handler(get_version()); /* set up the options. */ - mock_options = tor_malloc(sizeof(or_options_t)); + mock_options = tor_malloc_zero(sizeof(or_options_t)); MOCK(get_options, mock_get_options); /* Make BUG() and nonfatal asserts crash */ diff --git a/src/test/fuzz/include.am b/src/test/fuzz/include.am index 472cbfc8a5..cd16dc05be 100644 --- a/src/test/fuzz/include.am +++ b/src/test/fuzz/include.am @@ -17,9 +17,8 @@ FUZZING_LIBS = \ src/trunnel/libor-trunnel-testing.a \ $(rust_ldadd) \ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \ - @TOR_LIBEVENT_LIBS@ \ - @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \ - @CURVE25519_LIBS@ \ + @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \ + @TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ @CURVE25519_LIBS@ \ @TOR_SYSTEMD_LIBS@ \ @TOR_LZMA_LIBS@ \ @TOR_ZSTD_LIBS@ @@ -95,6 +94,14 @@ src_test_fuzz_fuzz_hsdescv2_CFLAGS = $(FUZZING_CFLAGS) src_test_fuzz_fuzz_hsdescv2_LDFLAGS = $(FUZZING_LDFLAG) src_test_fuzz_fuzz_hsdescv2_LDADD = $(FUZZING_LIBS) +src_test_fuzz_fuzz_hsdescv3_SOURCES = \ + src/test/fuzz/fuzzing_common.c \ + src/test/fuzz/fuzz_hsdescv3.c +src_test_fuzz_fuzz_hsdescv3_CPPFLAGS = $(FUZZING_CPPFLAGS) +src_test_fuzz_fuzz_hsdescv3_CFLAGS = $(FUZZING_CFLAGS) +src_test_fuzz_fuzz_hsdescv3_LDFLAGS = $(FUZZING_LDFLAG) +src_test_fuzz_fuzz_hsdescv3_LDADD = $(FUZZING_LIBS) + src_test_fuzz_fuzz_http_SOURCES = \ src/test/fuzz/fuzzing_common.c \ src/test/fuzz/fuzz_http.c @@ -142,6 +149,7 @@ FUZZERS = \ src/test/fuzz/fuzz-diff-apply \ src/test/fuzz/fuzz-extrainfo \ src/test/fuzz/fuzz-hsdescv2 \ + src/test/fuzz/fuzz-hsdescv3 \ src/test/fuzz/fuzz-http \ src/test/fuzz/fuzz-http-connect \ src/test/fuzz/fuzz-iptsv2 \ @@ -193,6 +201,13 @@ src_test_fuzz_lf_fuzz_hsdescv2_CFLAGS = $(LIBFUZZER_CFLAGS) src_test_fuzz_lf_fuzz_hsdescv2_LDFLAGS = $(LIBFUZZER_LDFLAG) src_test_fuzz_lf_fuzz_hsdescv2_LDADD = $(LIBFUZZER_LIBS) +src_test_fuzz_lf_fuzz_hsdescv3_SOURCES = \ + $(src_test_fuzz_fuzz_hsdescv3_SOURCES) +src_test_fuzz_lf_fuzz_hsdescv3_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) +src_test_fuzz_lf_fuzz_hsdescv3_CFLAGS = $(LIBFUZZER_CFLAGS) +src_test_fuzz_lf_fuzz_hsdescv3_LDFLAGS = $(LIBFUZZER_LDFLAG) +src_test_fuzz_lf_fuzz_hsdescv3_LDADD = $(LIBFUZZER_LIBS) + src_test_fuzz_lf_fuzz_http_SOURCES = \ $(src_test_fuzz_fuzz_http_SOURCES) src_test_fuzz_lf_fuzz_http_CPPFLAGS = $(LIBFUZZER_CPPFLAGS) @@ -235,6 +250,7 @@ LIBFUZZER_FUZZERS = \ src/test/fuzz/lf-fuzz-diff-apply \ src/test/fuzz/lf-fuzz-extrainfo \ src/test/fuzz/lf-fuzz-hsdescv2 \ + src/test/fuzz/lf-fuzz-hsdescv3 \ src/test/fuzz/lf-fuzz-http \ src/test/fuzz/lf-fuzz-http-connect \ src/test/fuzz/lf-fuzz-iptsv2 \ @@ -278,6 +294,11 @@ src_test_fuzz_liboss_fuzz_hsdescv2_a_SOURCES = \ src_test_fuzz_liboss_fuzz_hsdescv2_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) src_test_fuzz_liboss_fuzz_hsdescv2_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) +src_test_fuzz_liboss_fuzz_hsdescv3_a_SOURCES = \ + $(src_test_fuzz_fuzz_hsdescv3_SOURCES) +src_test_fuzz_liboss_fuzz_hsdescv3_a_CPPFLAGS = $(LIBOSS_FUZZ_CPPFLAGS) +src_test_fuzz_liboss_fuzz_hsdescv3_a_CFLAGS = $(LIBOSS_FUZZ_CFLAGS) + 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) @@ -310,6 +331,7 @@ OSS_FUZZ_FUZZERS = \ src/test/fuzz/liboss-fuzz-diff-apply.a \ src/test/fuzz/liboss-fuzz-extrainfo.a \ src/test/fuzz/liboss-fuzz-hsdescv2.a \ + src/test/fuzz/liboss-fuzz-hsdescv3.a \ src/test/fuzz/liboss-fuzz-http.a \ src/test/fuzz/liboss-fuzz-http-connect.a \ src/test/fuzz/liboss-fuzz-iptsv2.a \ diff --git a/src/test/include.am b/src/test/include.am index 4cc2fae4ca..bbf8a370e2 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -42,8 +42,10 @@ TESTS += src/test/test src/test/test-slow src/test/test-memwipe \ TEST_CHUTNEY_FLAVORS = basic-min bridges-min hs-v2-min hs-v3-min \ single-onion-v23 # only run if we can ping6 ::1 (localhost) -TEST_CHUTNEY_FLAVORS_IPV6 = bridges+ipv6-min ipv6-exit-min hs-v23-ipv6 \ - single-onion-v23-ipv6 +# IPv6-only v3 single onion services don't work yet, so we don't test the +# single-onion-v23-ipv6-md flavor +TEST_CHUTNEY_FLAVORS_IPV6 = bridges+ipv6-min ipv6-exit-min hs-v23-ipv6-md \ + single-onion-ipv6-md # only run if we can find a stable (or simply another) version of tor TEST_CHUTNEY_FLAVORS_MIXED = mixed+hs-v23 @@ -146,10 +148,10 @@ src_test_test_SOURCES = \ src/test/test_relaycell.c \ src/test/test_rendcache.c \ src/test/test_replay.c \ + src/test/test_router.c \ src/test/test_routerkeys.c \ src/test/test_routerlist.c \ src/test/test_routerset.c \ - src/test/test_rust.c \ src/test/test_scheduler.c \ src/test/test_shared_random.c \ src/test/test_socks.c \ diff --git a/src/test/test-memwipe.c b/src/test/test-memwipe.c index 484f13dd05..89d946d506 100644 --- a/src/test/test-memwipe.c +++ b/src/test/test-memwipe.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2015-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #include "orconfig.h" #include <string.h> #include <stdio.h> diff --git a/src/test/test.c b/src/test/test.c index 368d874be9..00857c2386 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1223,10 +1223,10 @@ struct testgroup_t testgroups[] = { { "relaycell/", relaycell_tests }, { "rend_cache/", rend_cache_tests }, { "replaycache/", replaycache_tests }, + { "router/", router_tests }, { "routerkeys/", routerkeys_tests }, { "routerlist/", routerlist_tests }, { "routerset/" , routerset_tests }, - { "rust/", rust_tests }, { "scheduler/", scheduler_tests }, { "socks/", socks_tests }, { "shared-random/", sr_tests }, diff --git a/src/test/test.h b/src/test/test.h index 634f3e7b02..b1a3366a80 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -239,7 +239,6 @@ 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 rust_tests[]; extern struct testcase_t scheduler_tests[]; extern struct testcase_t storagedir_tests[]; extern struct testcase_t socks_tests[]; diff --git a/src/test/test_accounting.c b/src/test/test_accounting.c index 7edba988a6..b0d37b2989 100644 --- a/src/test/test_accounting.c +++ b/src/test/test_accounting.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2014-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #include "or.h" #include "test.h" #define HIBERNATE_PRIVATE diff --git a/src/test/test_channelpadding.c b/src/test/test_channelpadding.c index d54c9cc52c..4346ee343f 100644 --- a/src/test/test_channelpadding.c +++ b/src/test/test_channelpadding.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2016-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #define TOR_CHANNEL_INTERNAL_ #define MAIN_PRIVATE #define NETWORKSTATUS_PRIVATE @@ -193,7 +196,8 @@ static void setup_mock_network(void) { routerstatus_t *relay; - connection_array = smartlist_new(); + if (!connection_array) + connection_array = smartlist_new(); relay1_relay2 = (channel_t*)new_fake_channeltls(2); relay1_relay2->write_cell = mock_channel_write_cell_relay1; @@ -280,7 +284,8 @@ test_channelpadding_timers(void *arg) tor_libevent_postfork(); - connection_array = smartlist_new(); + if (!connection_array) + connection_array = smartlist_new(); monotime_init(); monotime_enable_test_mocking(); @@ -570,7 +575,8 @@ test_channelpadding_consensus(void *arg) monotime_coarse_set_mock_time_nsec(1); timers_initialize(); - connection_array = smartlist_new(); + if (!connection_array) + connection_array = smartlist_new(); chan = (channel_t*)new_fake_channeltls(0); channel_timestamp_active(chan); @@ -928,7 +934,8 @@ test_channelpadding_decide_to_pad_channel(void *arg) */ channel_t *chan; int64_t new_time; - connection_array = smartlist_new(); + if (!connection_array) + connection_array = smartlist_new(); (void)arg; tor_libevent_postfork(); diff --git a/src/test/test_config.c b/src/test/test_config.c index 58268705ea..efa14af4b6 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -4833,7 +4833,7 @@ test_config_include_limit(void *data) torrc_path); tt_int_op(write_str_to_file(torrc_path, torrc_contents, 0), OP_EQ, 0); - tt_int_op(config_get_lines_include(torrc_contents, &result, 0, NULL), + tt_int_op(config_get_lines_include(torrc_contents, &result, 0, NULL, NULL), OP_EQ, -1); done: @@ -4863,7 +4863,7 @@ test_config_include_does_not_exist(void *data) tor_snprintf(torrc_contents, sizeof(torrc_contents), "%%include %s", missing_path); - tt_int_op(config_get_lines_include(torrc_contents, &result, 0, NULL), + tt_int_op(config_get_lines_include(torrc_contents, &result, 0, NULL, NULL), OP_EQ, -1); done: @@ -4895,7 +4895,7 @@ test_config_include_error_in_included_file(void *data) tor_snprintf(torrc_contents, sizeof(torrc_contents), "%%include %s", invalid_path); - tt_int_op(config_get_lines_include(torrc_contents, &result, 0, NULL), + tt_int_op(config_get_lines_include(torrc_contents, &result, 0, NULL, NULL), OP_EQ, -1); done: @@ -4937,8 +4937,8 @@ test_config_include_empty_file_folder(void *data) folder_path, file_path); int include_used; - tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used, + NULL), OP_EQ, 0); tt_ptr_op(result, OP_EQ, NULL); tt_int_op(include_used, OP_EQ, 1); @@ -4975,7 +4975,8 @@ test_config_include_no_permission(void *data) folder_path); int include_used; - tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used), + tt_int_op(config_get_lines_include(torrc_contents, &result, 0, + &include_used, NULL), OP_EQ, -1); tt_ptr_op(result, OP_EQ, NULL); @@ -5031,8 +5032,8 @@ test_config_include_recursion_before_after(void *data) } int include_used; - tt_int_op(config_get_lines_include(file_contents, &result, 0, &include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(file_contents, &result, 0, &include_used, + NULL), OP_EQ, 0); tt_ptr_op(result, OP_NE, NULL); tt_int_op(include_used, OP_EQ, 1); @@ -5096,8 +5097,8 @@ test_config_include_recursion_after_only(void *data) } int include_used; - tt_int_op(config_get_lines_include(file_contents, &result, 0, &include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(file_contents, &result, 0, &include_used, + NULL), OP_EQ, 0); tt_ptr_op(result, OP_NE, NULL); tt_int_op(include_used, OP_EQ, 1); @@ -5185,8 +5186,8 @@ test_config_include_folder_order(void *data) torrcd); int include_used; - tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(torrc_contents, &result, 0, &include_used, + NULL), OP_EQ, 0); tt_ptr_op(result, OP_NE, NULL); tt_int_op(include_used, OP_EQ, 1); @@ -5239,8 +5240,8 @@ test_config_include_path_syntax(void *data) esc_dir_with_pathsep); int include_used; - tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used, + NULL), OP_EQ, 0); tt_ptr_op(result, OP_EQ, NULL); tt_int_op(include_used, OP_EQ, 1); @@ -5294,14 +5295,14 @@ test_config_include_has_include(void *data) char torrc_contents[1000] = "Test 1\n"; int include_used; - tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used, + NULL), OP_EQ, 0); tt_int_op(include_used, OP_EQ, 0); config_free_lines(result); tor_snprintf(torrc_contents, sizeof(torrc_contents), "%%include %s\n", dir); - tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used), - OP_EQ, 0); + tt_int_op(config_get_lines_include(torrc_contents, &result, 0,&include_used, + NULL), OP_EQ, 0); tt_int_op(include_used, OP_EQ, 1); done: @@ -5446,6 +5447,155 @@ test_config_dup_and_filter(void *arg) config_free_lines(line_dup); } +/* If we're not configured to be a bridge, but we set + * BridgeDistribution, then options_validate () should return -1. */ +static void +test_config_check_bridge_distribution_setting_not_a_bridge(void *arg) +{ + or_options_t* options = get_options_mutable(); + or_options_t* old_options = options; + or_options_t* default_options = options; + char* message = NULL; + int ret; + + (void)arg; + + options->BridgeRelay = 0; + options->BridgeDistribution = (char*)("https"); + + ret = options_validate(old_options, options, default_options, 0, &message); + + tt_int_op(ret, OP_EQ, -1); + tt_str_op(message, OP_EQ, "You set BridgeDistribution, but you " + "didn't set BridgeRelay!"); + done: + tor_free(message); + options->BridgeDistribution = NULL; +} + +/* If the BridgeDistribution setting was valid, 0 should be returned. */ +static void +test_config_check_bridge_distribution_setting_valid(void *arg) +{ + int ret = check_bridge_distribution_setting("https"); + + (void)arg; + + tt_int_op(ret, OP_EQ, 0); + done: + return; +} + +/* If the BridgeDistribution setting was invalid, -1 should be returned. */ +static void +test_config_check_bridge_distribution_setting_invalid(void *arg) +{ + int ret = check_bridge_distribution_setting("hyphens-are-allowed"); + + (void)arg; + + tt_int_op(ret, OP_EQ, 0); + + ret = check_bridge_distribution_setting("asterisks*are*forbidden"); + + tt_int_op(ret, OP_EQ, -1); + done: + return; +} + +/* If the BridgeDistribution setting was unrecognised, a warning should be + * logged and 0 should be returned. */ +static void +test_config_check_bridge_distribution_setting_unrecognised(void *arg) +{ + int ret = check_bridge_distribution_setting("unicorn"); + + (void)arg; + + tt_int_op(ret, OP_EQ, 0); + done: + return; +} + +static void +test_config_include_opened_file_list(void *data) +{ + (void)data; + + config_line_t *result = NULL; + smartlist_t *opened_files = smartlist_new(); + char *dir = tor_strdup(get_fname("test_include_opened_file_list")); + tt_ptr_op(dir, OP_NE, NULL); + +#ifdef _WIN32 + tt_int_op(mkdir(dir), OP_EQ, 0); +#else + tt_int_op(mkdir(dir, 0700), OP_EQ, 0); +#endif + + char torrcd[PATH_MAX+1]; + tor_snprintf(torrcd, sizeof(torrcd), "%s"PATH_SEPARATOR"%s", dir, "torrc.d"); + +#ifdef _WIN32 + tt_int_op(mkdir(torrcd), OP_EQ, 0); +#else + tt_int_op(mkdir(torrcd, 0700), OP_EQ, 0); +#endif + + char subfolder[PATH_MAX+1]; + tor_snprintf(subfolder, sizeof(subfolder), "%s"PATH_SEPARATOR"%s", torrcd, + "subfolder"); + +#ifdef _WIN32 + tt_int_op(mkdir(subfolder), OP_EQ, 0); +#else + tt_int_op(mkdir(subfolder, 0700), OP_EQ, 0); +#endif + + char path[PATH_MAX+1]; + tor_snprintf(path, sizeof(path), "%s"PATH_SEPARATOR"%s", subfolder, + "01_file_in_subfolder"); + tt_int_op(write_str_to_file(path, "Test 1\n", 0), OP_EQ, 0); + + char empty[PATH_MAX+1]; + tor_snprintf(empty, sizeof(empty), "%s"PATH_SEPARATOR"%s", torrcd, "empty"); + tt_int_op(write_str_to_file(empty, "", 0), OP_EQ, 0); + + char file[PATH_MAX+1]; + tor_snprintf(file, sizeof(file), "%s"PATH_SEPARATOR"%s", torrcd, "file"); + tt_int_op(write_str_to_file(file, "Test 2\n", 0), OP_EQ, 0); + + char dot[PATH_MAX+1]; + tor_snprintf(dot, sizeof(dot), "%s"PATH_SEPARATOR"%s", torrcd, ".dot"); + tt_int_op(write_str_to_file(dot, "Test 3\n", 0), OP_EQ, 0); + + char torrc_contents[1000]; + tor_snprintf(torrc_contents, sizeof(torrc_contents), + "%%include %s\n", + torrcd); + + int include_used; + tt_int_op(config_get_lines_include(torrc_contents, &result, 0, &include_used, + opened_files), OP_EQ, 0); + tt_ptr_op(result, OP_NE, NULL); + tt_int_op(include_used, OP_EQ, 1); + + tt_int_op(smartlist_len(opened_files), OP_EQ, 4); + tt_int_op(smartlist_contains_string(opened_files, torrcd), OP_EQ, 1); + tt_int_op(smartlist_contains_string(opened_files, subfolder), OP_EQ, 1); + // files inside subfolders are not opended, only the subfolder is opened + tt_int_op(smartlist_contains_string(opened_files, empty), OP_EQ, 1); + tt_int_op(smartlist_contains_string(opened_files, file), OP_EQ, 1); + // dot files are not opened as we ignore them when we get their name from + // their parent folder + + done: + SMARTLIST_FOREACH(opened_files, char *, f, tor_free(f)); + smartlist_free(opened_files); + config_free_lines(result); + tor_free(dir); +} + #define CONFIG_TEST(name, flags) \ { #name, test_config_ ## name, flags, NULL, NULL } @@ -5489,6 +5639,11 @@ struct testcase_t config_tests[] = { CONFIG_TEST(include_flag_torrc_only, TT_FORK), CONFIG_TEST(include_flag_defaults_only, TT_FORK), CONFIG_TEST(dup_and_filter, 0), + CONFIG_TEST(check_bridge_distribution_setting_not_a_bridge, TT_FORK), + CONFIG_TEST(check_bridge_distribution_setting_valid, 0), + CONFIG_TEST(check_bridge_distribution_setting_invalid, 0), + CONFIG_TEST(check_bridge_distribution_setting_unrecognised, 0), + CONFIG_TEST(include_opened_file_list, 0), END_OF_TESTCASES }; diff --git a/src/test/test_dir.c b/src/test/test_dir.c index b920655db5..ee4a9780b1 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -2379,6 +2379,7 @@ test_a_networkstatus( sign_skey_2 = crypto_pk_new(); sign_skey_3 = crypto_pk_new(); sign_skey_leg1 = pk_generate(4); + dirvote_recalculate_timing(get_options(), now); sr_state_init(0, 0); tt_assert(!crypto_pk_read_private_key_from_string(sign_skey_1, @@ -4125,9 +4126,9 @@ download_status_random_backoff_helper(int min_delay, int max_delay) int increment = -1; int old_increment = -1; time_t current_time = time(NULL); - const int exponent = DIR_DEFAULT_RANDOM_MULTIPLIER + 1; /* Check the random backoff cases */ + int n_attempts = 0; do { increment = download_status_schedule_get_delay(&dls_random, NULL, @@ -4147,40 +4148,16 @@ download_status_random_backoff_helper(int min_delay, int max_delay) /* Test */ tt_int_op(increment, OP_GE, min_delay); tt_int_op(increment, OP_LE, max_delay); - if (dls_random.last_backoff_position == 0) { - /* regression tests for 17750 - * Always use the minimum delay for the first increment */ - tt_int_op(increment, OP_EQ, min_delay); - } else { - /* It's times like these I'd love a good saturating arithmetic - * implementation */ - int min_inc = INT_MAX; - if (old_increment <= INT_MAX - 1) { - min_inc = old_increment + 1; - } - - int max_inc = INT_MAX; - if (old_increment <= (INT_MAX - 1)/exponent) { - max_inc = (exponent * old_increment) + 1; - } - - /* Regression test for 20534 and friends: - * increment must always increase after the first */ - tt_int_op(increment, OP_GE, min_inc); - /* We at most quadruple, and always add one */ - tt_int_op(increment, OP_LE, max_inc); - } /* Advance */ - ++(dls_random.n_download_attempts); - ++(dls_random.n_download_failures); + if (dls_random.n_download_attempts < IMPOSSIBLE_TO_DOWNLOAD - 1) { + ++(dls_random.n_download_attempts); + ++(dls_random.n_download_failures); + } /* Try another maybe */ old_increment = increment; - if (increment >= max_delay) - current_time += increment; - - } while (increment < max_delay); + } while (increment < max_delay && ++n_attempts < 1000); done: return; @@ -4208,6 +4185,38 @@ test_dir_download_status_random_backoff(void *arg) } static void +test_dir_download_status_random_backoff_ranges(void *arg) +{ + (void)arg; + int lo, hi; + next_random_exponential_delay_range(&lo, &hi, 0, 10); + tt_int_op(lo, OP_EQ, 10); + tt_int_op(hi, OP_EQ, 11); + + next_random_exponential_delay_range(&lo, &hi, 6, 10); + tt_int_op(lo, OP_EQ, 10); + tt_int_op(hi, OP_EQ, 6*3); + + next_random_exponential_delay_range(&lo, &hi, 13, 10); + tt_int_op(lo, OP_EQ, 10); + tt_int_op(hi, OP_EQ, 13 * 3); + + next_random_exponential_delay_range(&lo, &hi, 37, 10); + tt_int_op(lo, OP_EQ, 10); + tt_int_op(hi, OP_EQ, 111); + + next_random_exponential_delay_range(&lo, &hi, 123, 10); + tt_int_op(lo, OP_EQ, 10); + tt_int_op(hi, OP_EQ, 369); + + next_random_exponential_delay_range(&lo, &hi, INT_MAX-5, 10); + tt_int_op(lo, OP_EQ, 10); + tt_int_op(hi, OP_EQ, INT_MAX); + done: + ; +} + +static void test_dir_download_status_increment(void *arg) { (void)arg; @@ -6207,6 +6216,7 @@ struct testcase_t dir_tests[] = { DIR(packages, 0), DIR(download_status_schedule, 0), DIR(download_status_random_backoff, 0), + DIR(download_status_random_backoff_ranges, 0), DIR(download_status_increment, 0), DIR(authdir_type_to_string, 0), DIR(conn_purpose_to_string, 0), diff --git a/src/test/test_dns.c b/src/test/test_dns.c index 19dcb02931..66b231b6da 100644 --- a/src/test/test_dns.c +++ b/src/test/test_dns.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2015-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #include "or.h" #include "test.h" diff --git a/src/test/test_entryconn.c b/src/test/test_entryconn.c index 86c0c3dca4..c29b1a7126 100644 --- a/src/test/test_entryconn.c +++ b/src/test/test_entryconn.c @@ -790,8 +790,9 @@ test_entryconn_rewrite_onion_v3(void *arg) retval = connection_ap_handshake_rewrite_and_attach(conn, NULL, NULL); tt_int_op(retval, OP_EQ, 0); - /* Check connection state after rewrite */ - tt_int_op(ENTRY_TO_CONN(conn)->state, OP_EQ, AP_CONN_STATE_CIRCUIT_WAIT); + /* Check connection state after rewrite. It should be in waiting for + * descriptor state. */ + tt_int_op(ENTRY_TO_CONN(conn)->state, OP_EQ, AP_CONN_STATE_RENDDESC_WAIT); /* check that the address got rewritten */ tt_str_op(conn->socks_request->address, OP_EQ, "25njqamcweflpvkl73j4szahhihoc4xt3ktcgjnpaingr5yhkenl5sid"); diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c index f9d981953d..80ebebe3f8 100644 --- a/src/test/test_entrynodes.c +++ b/src/test/test_entrynodes.c @@ -7,6 +7,7 @@ #define STATEFILE_PRIVATE #define ENTRYNODES_PRIVATE #define ROUTERLIST_PRIVATE +#define DIRECTORY_PRIVATE #include "or.h" #include "test.h" @@ -15,6 +16,7 @@ #include "circuitlist.h" #include "config.h" #include "confparse.h" +#include "directory.h" #include "entrynodes.h" #include "nodelist.h" #include "networkstatus.h" @@ -129,6 +131,14 @@ big_fake_network_setup(const struct testcase_t *testcase) n->rs->has_bandwidth = 1; n->rs->bandwidth_kb = 30; + /* Make a random nickname for each node */ + { + char nickname_binary[8]; + crypto_rand(nickname_binary, sizeof(nickname_binary)); + base64_encode(n->rs->nickname, sizeof(n->rs->nickname), + nickname_binary, sizeof(nickname_binary), 0); + } + /* Call half of the nodes a possible guard. */ if (i % 2 == 0) { n->is_possible_guard = 1; @@ -1719,6 +1729,7 @@ test_entry_guard_select_for_circuit_no_confirmed(void *arg) /* Simpler cases: no gaurds are confirmed yet. */ (void)arg; guard_selection_t *gs = guard_selection_new("default", GS_TYPE_NORMAL); + entry_guard_restriction_t *rst = NULL; /* simple starting configuration */ entry_guards_update_primary(gs); @@ -1800,14 +1811,13 @@ test_entry_guard_select_for_circuit_no_confirmed(void *arg) tt_ptr_op(g2, OP_EQ, g); /* But if we impose a restriction, we don't get the same guard */ - entry_guard_restriction_t rst; - memset(&rst, 0, sizeof(rst)); - memcpy(rst.exclude_id, g->identity, DIGEST_LEN); - g2 = select_entry_guard_for_circuit(gs, GUARD_USAGE_TRAFFIC, &rst, &state); + rst = guard_create_exit_restriction((uint8_t*)g->identity); + g2 = select_entry_guard_for_circuit(gs, GUARD_USAGE_TRAFFIC, rst, &state); tt_ptr_op(g2, OP_NE, g); done: guard_selection_free(gs); + entry_guard_restriction_free(rst); } static void @@ -1817,6 +1827,7 @@ test_entry_guard_select_for_circuit_confirmed(void *arg) guards, we use a confirmed guard. */ (void)arg; int i; + entry_guard_restriction_t *rst = NULL; guard_selection_t *gs = guard_selection_new("default", GS_TYPE_NORMAL); const int N_CONFIRMED = 10; @@ -1877,10 +1888,8 @@ test_entry_guard_select_for_circuit_confirmed(void *arg) get_options_mutable()->EnforceDistinctSubnets = 0; g = smartlist_get(gs->confirmed_entry_guards, smartlist_len(gs->primary_entry_guards)+2); - entry_guard_restriction_t rst; - memset(&rst, 0, sizeof(rst)); - memcpy(rst.exclude_id, g->identity, DIGEST_LEN); - g2 = select_entry_guard_for_circuit(gs, GUARD_USAGE_TRAFFIC, &rst, &state); + rst = guard_create_exit_restriction((uint8_t*)g->identity); + g2 = select_entry_guard_for_circuit(gs, GUARD_USAGE_TRAFFIC, rst, &state); tt_ptr_op(g2, OP_NE, NULL); tt_ptr_op(g2, OP_NE, g); tt_int_op(g2->confirmed_idx, OP_EQ, @@ -1906,13 +1915,13 @@ test_entry_guard_select_for_circuit_confirmed(void *arg) // Regression test for bug 22753/TROVE-2017-006. get_options_mutable()->EnforceDistinctSubnets = 1; g = smartlist_get(gs->confirmed_entry_guards, 0); - memset(&rst, 0, sizeof(rst)); - memcpy(rst.exclude_id, g->identity, DIGEST_LEN); - g2 = select_entry_guard_for_circuit(gs, GUARD_USAGE_TRAFFIC, &rst, &state); + memcpy(rst->exclude_id, g->identity, DIGEST_LEN); + g2 = select_entry_guard_for_circuit(gs, GUARD_USAGE_TRAFFIC, rst, &state); tt_ptr_op(g2, OP_EQ, NULL); done: guard_selection_free(gs); + entry_guard_restriction_free(rst); } static void @@ -2493,9 +2502,7 @@ test_entry_guard_upgrade_not_blocked_by_restricted_circ_complete(void *arg) /* Once more, let circ1 become complete. But this time, we'll claim * that circ2 was restricted to not use the same guard as circ1. */ data->guard2_state->restrictions = - tor_malloc_zero(sizeof(entry_guard_restriction_t)); - memcpy(data->guard2_state->restrictions->exclude_id, - data->guard1->identity, DIGEST_LEN); + guard_create_exit_restriction((uint8_t*)data->guard1->identity); smartlist_t *result = smartlist_new(); int r; @@ -2604,9 +2611,7 @@ test_entry_guard_upgrade_not_blocked_by_restricted_circ_pending(void *arg) } data->guard2_state->restrictions = - tor_malloc_zero(sizeof(entry_guard_restriction_t)); - memcpy(data->guard2_state->restrictions->exclude_id, - data->guard1->identity, DIGEST_LEN); + guard_create_exit_restriction((uint8_t*)data->guard1->identity); smartlist_t *result = smartlist_new(); int r; @@ -2674,6 +2679,114 @@ test_enty_guard_should_expire_waiting(void *arg) tor_free(fake_state); } +static void +mock_directory_initiate_request(directory_request_t *req) +{ + if (req->guard_state) { + circuit_guard_state_free(req->guard_state); + } +} + +static networkstatus_t *mock_ns_val = NULL; +static networkstatus_t * +mock_ns_get_by_flavor(consensus_flavor_t f) +{ + (void)f; + return mock_ns_val; +} + +/** Test that when we fetch microdescriptors we skip guards that have + * previously failed to serve us needed microdescriptors. */ +static void +test_entry_guard_outdated_dirserver_exclusion(void *arg) +{ + int retval; + response_handler_args_t *args = NULL; + dir_connection_t *conn = NULL; + (void) arg; + + /* Test prep: Make a new guard selection */ + guard_selection_t *gs = get_guard_selection_by_name("default", + GS_TYPE_NORMAL, 1); + + /* ... we want to use entry guards */ + or_options_t *options = get_options_mutable(); + options->UseEntryGuards = 1; + options->UseBridges = 0; + + /* ... prepare some md digests we want to download in the future */ + smartlist_t *digests = smartlist_new(); + const char *prose = "unhurried and wise, we perceive."; + for (int i = 0; i < 20; i++) { + smartlist_add(digests, (char*)prose); + } + + tt_int_op(smartlist_len(digests), OP_EQ, 20); + + /* ... now mock some functions */ + mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t)); + MOCK(networkstatus_get_latest_consensus_by_flavor, mock_ns_get_by_flavor); + MOCK(directory_initiate_request, mock_directory_initiate_request); + + /* Test logic: + * 0. Create a proper guard set and primary guard list. + * 1. Pretend to fail microdescriptor fetches from all the primary guards. + * 2. Order another microdescriptor fetch and make sure that primary guards + * get skipped since they failed previous fetches. + */ + + { /* Setup primary guard list */ + int i; + entry_guards_update_primary(gs); + for (i = 0; i < DFLT_N_PRIMARY_GUARDS; ++i) { + entry_guard_t *guard = smartlist_get(gs->sampled_entry_guards, i); + make_guard_confirmed(gs, guard); + } + entry_guards_update_primary(gs); + } + + { + /* Fail microdesc fetches with all the primary guards */ + args = tor_malloc_zero(sizeof(response_handler_args_t)); + args->status_code = 404; + args->reason = NULL; + args->body = NULL; + args->body_len = 0; + + conn = tor_malloc_zero(sizeof(dir_connection_t)); + conn->requested_resource = tor_strdup("d/jlinblackorigami"); + conn->base_.purpose = DIR_PURPOSE_FETCH_MICRODESC; + + /* Pretend to fail fetches with all primary guards */ + SMARTLIST_FOREACH_BEGIN(gs->primary_entry_guards,const entry_guard_t *,g) { + memcpy(conn->identity_digest, g->identity, DIGEST_LEN); + + retval = handle_response_fetch_microdesc(conn, args); + tt_int_op(retval, OP_EQ, 0); + } SMARTLIST_FOREACH_END(g); + } + + { + /* Now order the final md download */ + setup_full_capture_of_logs(LOG_INFO); + initiate_descriptor_downloads(NULL, DIR_PURPOSE_FETCH_MICRODESC, + digests, 3, 7, 0); + + /* ... and check that because we failed to fetch microdescs from all our + * primaries, we didnt end up selecting a primary for fetching dir info */ + expect_log_msg_containing("No primary or confirmed guards available."); + teardown_capture_of_logs(); + } + + done: + smartlist_free(digests); + tor_free(args); + if (conn) { + tor_free(conn->requested_resource); + tor_free(conn); + } +} + static const struct testcase_setup_t big_fake_network = { big_fake_network_setup, big_fake_network_cleanup }; @@ -2734,6 +2847,7 @@ struct testcase_t entrynodes_tests[] = { BFN_TEST(select_for_circuit_highlevel_primary_retry), BFN_TEST(select_and_cancel), BFN_TEST(drop_guards), + BFN_TEST(outdated_dirserver_exclusion), UPGRADE_TEST(upgrade_a_circuit, "c1-done c2-done"), UPGRADE_TEST(upgrade_blocked_by_live_primary_guards, "c1-done c2-done"), diff --git a/src/test/test_hs_common.c b/src/test/test_hs_common.c index 22fed12f1e..b435a93e33 100644 --- a/src/test/test_hs_common.c +++ b/src/test/test_hs_common.c @@ -23,6 +23,7 @@ #include "config.h" #include "networkstatus.h" #include "directory.h" +#include "dirvote.h" #include "nodelist.h" #include "routerlist.h" #include "statefile.h" @@ -808,26 +809,41 @@ test_time_between_tp_and_srv(void *arg) ret = parse_rfc1123_time("Sat, 26 Oct 1985 00:00:00 UTC", &ns.valid_after); tt_int_op(ret, OP_EQ, 0); + ret = parse_rfc1123_time("Sat, 26 Oct 1985 01:00:00 UTC", &ns.fresh_until); + tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), ns.valid_after); ret = hs_in_period_between_tp_and_srv(&ns, 0); tt_int_op(ret, OP_EQ, 0); ret = parse_rfc1123_time("Sat, 26 Oct 1985 11:00:00 UTC", &ns.valid_after); tt_int_op(ret, OP_EQ, 0); + ret = parse_rfc1123_time("Sat, 26 Oct 1985 12:00:00 UTC", &ns.fresh_until); + tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), ns.valid_after); ret = hs_in_period_between_tp_and_srv(&ns, 0); tt_int_op(ret, OP_EQ, 0); ret = parse_rfc1123_time("Sat, 26 Oct 1985 12:00:00 UTC", &ns.valid_after); tt_int_op(ret, OP_EQ, 0); + ret = parse_rfc1123_time("Sat, 26 Oct 1985 13:00:00 UTC", &ns.fresh_until); + tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), ns.valid_after); ret = hs_in_period_between_tp_and_srv(&ns, 0); tt_int_op(ret, OP_EQ, 1); ret = parse_rfc1123_time("Sat, 26 Oct 1985 23:00:00 UTC", &ns.valid_after); tt_int_op(ret, OP_EQ, 0); + ret = parse_rfc1123_time("Sat, 27 Oct 1985 00:00:00 UTC", &ns.fresh_until); + tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), ns.valid_after); ret = hs_in_period_between_tp_and_srv(&ns, 0); tt_int_op(ret, OP_EQ, 1); - ret = parse_rfc1123_time("Sat, 26 Oct 1985 00:00:00 UTC", &ns.valid_after); + ret = parse_rfc1123_time("Sat, 27 Oct 1985 00:00:00 UTC", &ns.valid_after); + tt_int_op(ret, OP_EQ, 0); + ret = parse_rfc1123_time("Sat, 27 Oct 1985 01:00:00 UTC", &ns.fresh_until); tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), ns.valid_after); ret = hs_in_period_between_tp_and_srv(&ns, 0); tt_int_op(ret, OP_EQ, 0); @@ -1314,6 +1330,7 @@ run_reachability_scenario(const reachability_cfg_t *cfg, int num_scenario) &mock_service_ns->valid_until); set_consensus_times(cfg->service_valid_until, &mock_service_ns->fresh_until); + dirvote_recalculate_timing(get_options(), mock_service_ns->valid_after); /* Set client consensus time. */ set_consensus_times(cfg->client_valid_after, &mock_client_ns->valid_after); @@ -1321,6 +1338,7 @@ run_reachability_scenario(const reachability_cfg_t *cfg, int num_scenario) &mock_client_ns->valid_until); set_consensus_times(cfg->client_valid_until, &mock_client_ns->fresh_until); + dirvote_recalculate_timing(get_options(), mock_client_ns->valid_after); /* New time period checks for this scenario. */ tt_int_op(hs_in_period_between_tp_and_srv(mock_service_ns, 0), OP_EQ, @@ -1544,6 +1562,7 @@ helper_set_consensus_and_system_time(networkstatus_t *ns, int position) } else { tt_assert(0); } + dirvote_recalculate_timing(get_options(), ns->valid_after); /* Set system time: pretend to be just 2 minutes before consensus expiry */ real_time = ns->valid_until - 120; diff --git a/src/test/test_hs_service.c b/src/test/test_hs_service.c index 462c860a9a..3084c6b958 100644 --- a/src/test/test_hs_service.c +++ b/src/test/test_hs_service.c @@ -33,6 +33,7 @@ #include "circuitlist.h" #include "circuituse.h" #include "crypto.h" +#include "dirvote.h" #include "networkstatus.h" #include "nodelist.h" #include "relay.h" @@ -967,6 +968,7 @@ test_rotate_descriptors(void *arg) ret = parse_rfc1123_time("Sat, 26 Oct 1985 14:00:00 UTC", &mock_ns.fresh_until); tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), mock_ns.valid_after); /* Create a service with a default descriptor and state. It's added to the * global map. */ @@ -1004,6 +1006,7 @@ test_rotate_descriptors(void *arg) ret = parse_rfc1123_time("Sat, 27 Oct 1985 02:00:00 UTC", &mock_ns.fresh_until); tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), mock_ns.valid_after); /* Note down what to expect for the next rotation time which is 01:00 + 23h * meaning 00:00:00. */ @@ -1065,6 +1068,7 @@ test_build_update_descriptors(void *arg) ret = parse_rfc1123_time("Sat, 26 Oct 1985 04:00:00 UTC", &mock_ns.fresh_until); tt_int_op(ret, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), mock_ns.valid_after); /* Create a service without a current descriptor to trigger a build. */ service = helper_create_service(); diff --git a/src/test/test_keygen.sh b/src/test/test_keygen.sh index 87012cd283..b3d4d8e39a 100755 --- a/src/test/test_keygen.sh +++ b/src/test/test_keygen.sh @@ -40,6 +40,12 @@ fi CASE8=$dflt CASE9=$dflt CASE10=$dflt + CASE11A=$dflt + CASE11B=$dflt + CASE11C=$dflt + CASE11D=$dflt + CASE11E=$dflt + CASE11F=$dflt if [ $# -ge 1 ]; then eval "CASE${1}"=1 @@ -363,6 +369,109 @@ echo "==== Case 10 ok" fi +# Case 11a: -passphrase-fd without --keygen + +if [ "$CASE11A" = 1 ]; then + +ME="${DATA_DIR}/case11a" + +mkdir -p "${ME}/keys" + +${TOR} --DataDirectory "${ME}" --passphrase-fd 1 > "${ME}/stdout" && die "Successfully started with passphrase-fd but no keygen?" || true + +grep "passphrase-fd specified without --keygen" "${ME}/stdout" >/dev/null || die "Tor didn't declare that there was a problem with the arguments." + +echo "==== Case 11A ok" + +fi + +# Case 11b: --no-passphrase without --keygen + +if [ "$CASE11B" = 1 ]; then + +ME="${DATA_DIR}/case11b" + +mkdir -p "${ME}/keys" + +${TOR} --DataDirectory "${ME}" --no-passphrase > "${ME}/stdout" && die "Successfully started with no-passphrase but no keygen?" || true + +grep "no-passphrase specified without --keygen" "${ME}/stdout" >/dev/null || die "Tor didn't declare that there was a problem with the arguments." + +echo "==== Case 11B ok" + +fi + +# Case 11c: --newpass without --keygen + +if [ "$CASE11C" = 1 ]; then + +ME="${DATA_DIR}/case11C" + +mkdir -p "${ME}/keys" + +${TOR} --DataDirectory "${ME}" --newpass > "${ME}/stdout" && die "Successfully started with newpass but no keygen?" || true + +grep "newpass specified without --keygen" "${ME}/stdout" >/dev/null || die "Tor didn't declare that there was a problem with the arguments." + +echo "==== Case 11C ok" + +fi + +######## --master-key does not work yet, but this will test the error case +######## when it does. +# +# Case 11d: --master-key without --keygen +# +if [ "$CASE11D" = 1 ]; then +# +# ME="${DATA_DIR}/case11d" +# +# mkdir -p "${ME}/keys" +# +# ${TOR} --DataDirectory "${ME}" --master-key "${ME}/foobar" > "${ME}/stdout" && die "Successfully started with master-key but no keygen?" || true +# +# cat "${ME}/stdout" +# +# grep "master-key without --keygen" "${ME}/stdout" >/dev/null || die "Tor didn't declare that there was a problem with the arguments." + + echo "==== Case 11D skipped" + +fi + + +# Case 11E: Silly passphrase-fd + +if [ "$CASE11E" = 1 ]; then + +ME="${DATA_DIR}/case11E" + +mkdir -p "${ME}/keys" + +${TOR} --DataDirectory "${ME}" --keygen --passphrase-fd ewigeblumenkraft > "${ME}/stdout" && die "Successfully started with bogus passphrase-fd?" || true + +grep "Invalid --passphrase-fd value" "${ME}/stdout" >/dev/null || die "Tor didn't declare that there was a problem with the arguments." + +echo "==== Case 11E ok" + +fi + + +# Case 11F: --no-passphrase with --passphrase-fd + +if [ "$CASE11F" = 1 ]; then + +ME="${DATA_DIR}/case11F" + +mkdir -p "${ME}/keys" + +${TOR} --DataDirectory "${ME}" --keygen --passphrase-fd 1 --no-passphrase > "${ME}/stdout" && die "Successfully started with bogus passphrase-fd combination?" || true + +grep "no-passphrase specified with --passphrase-fd" "${ME}/stdout" >/dev/null || die "Tor didn't declare that there was a problem with the arguments." + +echo "==== Case 11F ok" + +fi + # Check cert-only. diff --git a/src/test/test_options.c b/src/test/test_options.c index c55be35845..62732cabf7 100644 --- a/src/test/test_options.c +++ b/src/test/test_options.c @@ -398,11 +398,12 @@ fixed_get_uname(void) "V3AuthVoteDelay 20\n" \ "V3AuthDistDelay 20\n" \ "V3AuthNIntervalsValid 3\n" \ - "ClientUseIPv4 1\n" \ + "ClientUseIPv4 1\n" \ "VirtualAddrNetworkIPv4 127.192.0.0/10\n" \ "VirtualAddrNetworkIPv6 [FE80::]/10\n" \ "UseEntryGuards 1\n" \ - "Schedulers Vanilla\n" + "Schedulers Vanilla\n" \ + "ClientDNSRejectInternalAddresses 1\n" typedef struct { or_options_t *old_opt; diff --git a/src/test/test_protover.c b/src/test/test_protover.c index 6ce54890d6..6865362115 100644 --- a/src/test/test_protover.c +++ b/src/test/test_protover.c @@ -12,6 +12,13 @@ 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 char *re_encoded = NULL; const char *orig = "Foo=1,3 Bar=3 Baz= Quux=9-12,14,15-16,900"; @@ -78,12 +85,18 @@ test_protover_parse(void *arg) SMARTLIST_FOREACH(elts, proto_entry_t *, ent, proto_entry_free(ent)); smartlist_free(elts); tor_free(re_encoded); +#endif } 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 */ @@ -109,7 +122,7 @@ test_protover_parse_fail(void *arg) /* Broken range */ elts = parse_protocol_list("Link=1,9-8,3"); tt_ptr_op(elts, OP_EQ, NULL); - +#endif done: ; } @@ -182,6 +195,61 @@ test_protover_all_supported(void *arg) tor_free(msg); } +static void +test_protover_list_supports_protocol_returns_true(void *arg) +{ + (void)arg; + + const char *protocols = "Link=1"; + int is_supported = protocol_list_supports_protocol(protocols, PRT_LINK, 1); + tt_int_op(is_supported, OP_EQ, 1); + + done: + ; +} + +static void +test_protover_list_supports_protocol_for_unsupported_returns_false(void *arg) +{ + (void)arg; + + const char *protocols = "Link=1"; + int is_supported = protocol_list_supports_protocol(protocols, PRT_LINK, 10); + tt_int_op(is_supported, OP_EQ, 0); + + done: + ; +} + +static void +test_protover_supports_version(void *arg) +{ + (void)arg; + + tt_assert(protocol_list_supports_protocol("Link=3-6", PRT_LINK, 3)); + tt_assert(protocol_list_supports_protocol("Link=3-6", PRT_LINK, 6)); + tt_assert(!protocol_list_supports_protocol("Link=3-6", PRT_LINK, 7)); + tt_assert(!protocol_list_supports_protocol("Link=3-6", PRT_LINKAUTH, 3)); + + tt_assert(!protocol_list_supports_protocol("Link=4-6 LinkAuth=3", + PRT_LINKAUTH, 2)); + tt_assert(protocol_list_supports_protocol("Link=4-6 LinkAuth=3", + PRT_LINKAUTH, 3)); + tt_assert(!protocol_list_supports_protocol("Link=4-6 LinkAuth=3", + PRT_LINKAUTH, 4)); + tt_assert(!protocol_list_supports_protocol_or_later("Link=4-6 LinkAuth=3", + PRT_LINKAUTH, 4)); + tt_assert(protocol_list_supports_protocol_or_later("Link=4-6 LinkAuth=3", + PRT_LINKAUTH, 3)); + tt_assert(protocol_list_supports_protocol_or_later("Link=4-6 LinkAuth=3", + PRT_LINKAUTH, 2)); + + tt_assert(!protocol_list_supports_protocol_or_later("Link=4-6 LinkAuth=3", + PRT_DESC, 2)); + done: + ; +} + #define PV_TEST(name, flags) \ { #name, test_protover_ ##name, (flags), NULL, NULL } @@ -190,6 +258,9 @@ struct testcase_t protover_tests[] = { PV_TEST(parse_fail, 0), PV_TEST(vote, 0), PV_TEST(all_supported, 0), + PV_TEST(list_supports_protocol_for_unsupported_returns_false, 0), + PV_TEST(list_supports_protocol_returns_true, 0), + PV_TEST(supports_version, 0), END_OF_TESTCASES }; diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c index 9c010deece..eea1f5dc80 100644 --- a/src/test/test_relaycell.c +++ b/src/test/test_relaycell.c @@ -112,7 +112,7 @@ test_relaycell_resolved(void *arg) MOCK(connection_mark_unattached_ap_, mark_unattached_mock); MOCK(connection_ap_handshake_socks_resolved, socks_resolved_mock); - options->TestingClientDNSRejectInternalAddresses = 0; + options->ClientDNSRejectInternalAddresses = 0; SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */ "\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00" @@ -151,7 +151,7 @@ test_relaycell_resolved(void *arg) /* But we may be discarding private answers. */ MOCK_RESET(); - options->TestingClientDNSRejectInternalAddresses = 1; + options->ClientDNSRejectInternalAddresses = 1; r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| diff --git a/src/test/test_router.c b/src/test/test_router.c new file mode 100644 index 0000000000..4e96e24534 --- /dev/null +++ b/src/test/test_router.c @@ -0,0 +1,112 @@ +/* Copyright (c) 2017, The Tor Project, Inc. */ +/* Copyright (c) 2017, isis agora lovecruft */ +/* See LICENSE for licensing information */ + +/** + * \file test_router.c + * \brief Unittests for code in src/or/router.c + **/ + +#include "or.h" +#include "config.h" +#include "crypto_curve25519.h" +#include "crypto_ed25519.h" +#include "router.h" +#include "routerlist.h" + +/* Test suite stuff */ +#include "test.h" + +NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void)); + +static routerinfo_t* mock_routerinfo; + +static const routerinfo_t* +NS(router_get_my_routerinfo)(void) +{ + crypto_pk_t* ident_key; + crypto_pk_t* tap_key; + time_t now; + + if (!mock_routerinfo) { + /* Mock the published timestamp, otherwise router_dump_router_to_string() + * will poop its pants. */ + time(&now); + + /* We'll need keys, or router_dump_router_to_string() would return NULL. */ + ident_key = pk_generate(0); + tap_key = pk_generate(0); + + tor_assert(ident_key != NULL); + tor_assert(tap_key != NULL); + + mock_routerinfo = tor_malloc_zero(sizeof(routerinfo_t)); + mock_routerinfo->nickname = tor_strdup("ConlonNancarrow"); + mock_routerinfo->addr = 123456789; + mock_routerinfo->or_port = 443; + mock_routerinfo->platform = tor_strdup("unittest"); + mock_routerinfo->cache_info.published_on = now; + mock_routerinfo->identity_pkey = crypto_pk_dup_key(ident_key); + mock_routerinfo->onion_pkey = crypto_pk_dup_key(tap_key); + mock_routerinfo->bandwidthrate = 9001; + mock_routerinfo->bandwidthburst = 9002; + } + + return mock_routerinfo; +} + +/* If no distribution option was set, then check_bridge_distribution_setting() + * should have set it to "any". */ +static void +test_router_dump_router_to_string_no_bridge_distribution_method(void *arg) +{ + const char* needle = "bridge-distribution-request any"; + or_options_t* options = get_options_mutable(); + routerinfo_t* router = NULL; + curve25519_keypair_t ntor_keypair; + ed25519_keypair_t signing_keypair; + char* desc = NULL; + char* found = NULL; + (void)arg; + + NS_MOCK(router_get_my_routerinfo); + + options->ORPort_set = 1; + options->BridgeRelay = 1; + + /* Generate keys which router_dump_router_to_string() expects to exist. */ + tt_int_op(0, ==, curve25519_keypair_generate(&ntor_keypair, 0)); + tt_int_op(0, ==, ed25519_keypair_generate(&signing_keypair, 0)); + + /* Set up part of our routerinfo_t so that we don't trigger any other + * assertions in router_dump_router_to_string(). */ + router = (routerinfo_t*)router_get_my_routerinfo(); + tt_ptr_op(router, !=, NULL); + + router->onion_curve25519_pkey = &ntor_keypair.pubkey; + + /* Generate our server descriptor and ensure that the substring + * "bridge-distribution-request any" occurs somewhere within it. */ + desc = router_dump_router_to_string(router, + router->identity_pkey, + router->onion_pkey, + &ntor_keypair, + &signing_keypair); + tt_ptr_op(desc, !=, NULL); + found = strstr(desc, needle); + tt_ptr_op(found, !=, NULL); + + done: + NS_UNMOCK(router_get_my_routerinfo); + + tor_free(desc); +} + +#define ROUTER_TEST(name, flags) \ + { #name, test_router_ ## name, flags, NULL, NULL } + +struct testcase_t router_tests[] = { + ROUTER_TEST(dump_router_to_string_no_bridge_distribution_method, TT_FORK), + END_OF_TESTCASES +}; + diff --git a/src/test/test_routerlist.c b/src/test/test_routerlist.c index 3b0e943ce5..fd29e8f172 100644 --- a/src/test/test_routerlist.c +++ b/src/test/test_routerlist.c @@ -5,7 +5,11 @@ #include <math.h> #include <time.h> +#define CONNECTION_PRIVATE +#define DIRECTORY_PRIVATE #define DIRVOTE_PRIVATE +#define ENTRYNODES_PRIVATE +#define HIBERNATE_PRIVATE #define NETWORKSTATUS_PRIVATE #define ROUTERLIST_PRIVATE #define TOR_UNIT_TESTING @@ -13,19 +17,24 @@ #include "config.h" #include "connection.h" #include "container.h" +#include "control.h" #include "directory.h" #include "dirvote.h" #include "entrynodes.h" +#include "hibernate.h" #include "microdesc.h" #include "networkstatus.h" #include "nodelist.h" #include "policies.h" #include "router.h" #include "routerlist.h" +#include "routerset.h" #include "routerparse.h" #include "shared_random.h" +#include "statefile.h" #include "test.h" #include "test_dir_common.h" +#include "log_test_helpers.h" void construct_consensus(char **consensus_text_md); @@ -411,6 +420,111 @@ test_router_pick_directory_server_impl(void *arg) networkstatus_vote_free(con_md); } +static or_state_t *dummy_state = NULL; +static or_state_t * +get_or_state_replacement(void) +{ + return dummy_state; +} + +static void +mock_directory_initiate_request(directory_request_t *req) +{ + (void)req; + return; +} + +static circuit_guard_state_t * +mock_circuit_guard_state_new(entry_guard_t *guard, unsigned state, + entry_guard_restriction_t *rst) +{ + (void) guard; + (void) state; + (void) rst; + return NULL; +} + +/** Test that we will use our directory guards to fetch mds even if we don't + * have any dirinfo (tests bug #23862). */ +static void +test_directory_guard_fetch_with_no_dirinfo(void *arg) +{ + int retval; + char *consensus_text_md = NULL; + or_options_t *options = get_options_mutable(); + + (void) arg; + + hibernate_set_state_for_testing_(HIBERNATE_STATE_LIVE); + + /* Initialize the SRV subsystem */ + MOCK(get_my_v3_authority_cert, get_my_v3_authority_cert_m); + mock_cert = authority_cert_parse_from_string(AUTHORITY_CERT_1, NULL); + sr_init(0); + UNMOCK(get_my_v3_authority_cert); + + /* Initialize the entry node configuration from the ticket */ + options->UseEntryGuards = 1; + options->StrictNodes = 1; + get_options_mutable()->EntryNodes = routerset_new(); + routerset_parse(get_options_mutable()->EntryNodes, + "2121212121212121212121212121212121212121", "foo"); + + /* Mock some functions */ + dummy_state = tor_malloc_zero(sizeof(or_state_t)); + MOCK(get_or_state, get_or_state_replacement); + MOCK(directory_initiate_request, mock_directory_initiate_request); + /* we need to mock this one to avoid memleaks */ + MOCK(circuit_guard_state_new, mock_circuit_guard_state_new); + + /* Call guards_update_all() to simulate loading our state file (see + * entry_guards_load_guards_from_state() and ticket #23989). */ + guards_update_all(); + + /* Test logic: Simulate the arrival of a new consensus when we have no + * dirinfo at all. Tor will need to fetch the mds from the consensus. Make + * sure that Tor will use the specified entry guard instead of relying on the + * fallback directories. */ + + /* Fixup the dirconn that will deliver the consensus */ + dir_connection_t *conn = dir_connection_new(AF_INET); + tor_addr_from_ipv4h(&conn->base_.addr, 0x7f000001); + conn->base_.port = 8800; + TO_CONN(conn)->address = tor_strdup("127.0.0.1"); + conn->base_.purpose = DIR_PURPOSE_FETCH_CONSENSUS; + conn->requested_resource = tor_strdup("ns"); + + /* Construct a consensus */ + construct_consensus(&consensus_text_md); + tt_assert(consensus_text_md); + + /* Place the consensus in the dirconn */ + response_handler_args_t args; + memset(&args, 0, sizeof(response_handler_args_t)); + args.status_code = 200; + args.body = consensus_text_md; + args.body_len = strlen(consensus_text_md); + + /* Update approx time so that the consensus is considered live */ + update_approx_time(time(NULL)+1010); + + setup_capture_of_logs(LOG_DEBUG); + + /* Now handle the consensus */ + retval = handle_response_fetch_consensus(conn, &args); + tt_int_op(retval, OP_EQ, 0); + + /* Make sure that our primary guard was chosen */ + expect_log_msg_containing("Selected primary guard router3"); + + done: + tor_free(consensus_text_md); + tor_free(dummy_state); + connection_free_(TO_CONN(conn)); + entry_guards_free_all(); + teardown_capture_of_logs(); +} + static connection_t *mocked_connection = NULL; /* Mock connection_get_by_type_addr_port_purpose by returning @@ -494,6 +608,8 @@ struct testcase_t routerlist_tests[] = { NODE(launch_descriptor_downloads, 0), NODE(router_is_already_dir_fetching, TT_FORK), ROUTER(pick_directory_server_impl, TT_FORK), + { "directory_guard_fetch_with_no_dirinfo", + test_directory_guard_fetch_with_no_dirinfo, TT_FORK, NULL, NULL }, END_OF_TESTCASES }; diff --git a/src/test/test_routerset.c b/src/test/test_routerset.c index c9c69911da..6da2275c35 100644 --- a/src/test/test_routerset.c +++ b/src/test/test_routerset.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2014-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #define ROUTERSET_PRIVATE #include "or.h" diff --git a/src/test/test_rust.c b/src/test/test_rust.c deleted file mode 100644 index 6ad57d6fcb..0000000000 --- a/src/test/test_rust.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (c) 2017, The Tor Project, Inc. */ -/* See LICENSE for licensing information */ - -#include "orconfig.h" -#include "compat_rust.h" -#include "test.h" -#include "util.h" - -static void -test_welcome_string(void *arg) -{ - (void)arg; - rust_str_t s = rust_welcome_string(); - const char *c_str = rust_str_get(s); - tt_assert(c_str); - size_t len = strlen(c_str); -#ifdef HAVE_RUST - tt_assert(len > 0); -#else - tt_assert(len == 0); -#endif - - done: - rust_str_free(s); -} - -struct testcase_t rust_tests[] = { - { "welcome_string", test_welcome_string, 0, NULL, NULL }, - END_OF_TESTCASES -}; - diff --git a/src/test/test_rust.sh b/src/test/test_rust.sh index d559f94ce0..8d7900e1df 100755 --- a/src/test/test_rust.sh +++ b/src/test/test_rust.sh @@ -1,13 +1,16 @@ #!/bin/sh -# Test all the Rust crates we're using +# Test all Rust crates -crates=tor_util +crates="protover tor_util smartlist tor_allocate" exitcode=0 +set -e + for crate in $crates; do cd "${abs_top_srcdir:-.}/src/rust/${crate}" - CARGO_TARGET_DIR="${abs_top_builddir}/src/rust/target" CARGO_HOME="${abs_top_builddir}/src/rust" "${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} || exitcode=1 + CARGO_TARGET_DIR="${abs_top_builddir:-../../..}/src/rust/target" CARGO_HOME="${abs_top_builddir:-../../..}/src/rust" "${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} || exitcode=1 + cd - done exit $exitcode diff --git a/src/test/test_shared_random.c b/src/test/test_shared_random.c index a9d58e6b8b..b0278e8a1d 100644 --- a/src/test/test_shared_random.c +++ b/src/test/test_shared_random.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2016-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #define SHARED_RANDOM_PRIVATE #define SHARED_RANDOM_STATE_PRIVATE #define CONFIG_PRIVATE @@ -131,7 +134,15 @@ test_get_sr_protocol_phase(void *arg) ; } -static networkstatus_t *mock_consensus = NULL; +static networkstatus_t mock_consensus; + +/* Mock function to immediately return our local 'mock_consensus'. */ +static networkstatus_t * +mock_networkstatus_get_live_consensus(time_t now) +{ + (void) now; + return &mock_consensus; +} static void test_get_state_valid_until_time(void *arg) @@ -143,11 +154,23 @@ test_get_state_valid_until_time(void *arg) (void) arg; + MOCK(networkstatus_get_live_consensus, + mock_networkstatus_get_live_consensus); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 01:00:00 UTC", + &mock_consensus.fresh_until); + tt_int_op(retval, OP_EQ, 0); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", + &mock_consensus.valid_after); + tt_int_op(retval, OP_EQ, 0); + { /* Get the valid until time if called at 00:00:01 */ retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:01 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time); /* Compare it with the correct result */ @@ -159,6 +182,7 @@ test_get_state_valid_until_time(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 19:22:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time); format_iso_time(tbuf, valid_until_time); @@ -169,6 +193,7 @@ test_get_state_valid_until_time(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 23:59:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time); format_iso_time(tbuf, valid_until_time); @@ -179,6 +204,7 @@ test_get_state_valid_until_time(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); valid_until_time = get_state_valid_until_time(current_time); format_iso_time(tbuf, valid_until_time); @@ -186,7 +212,7 @@ test_get_state_valid_until_time(void *arg) } done: - ; + UNMOCK(networkstatus_get_live_consensus); } /** Test the function that calculates the start time of the current SRV @@ -200,11 +226,23 @@ test_get_start_time_of_current_run(void *arg) (void) arg; + MOCK(networkstatus_get_live_consensus, + mock_networkstatus_get_live_consensus); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 01:00:00 UTC", + &mock_consensus.fresh_until); + tt_int_op(retval, OP_EQ, 0); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", + &mock_consensus.valid_after); + tt_int_op(retval, OP_EQ, 0); + { /* Get start time if called at 00:00:01 */ retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:01 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time); @@ -217,6 +255,7 @@ test_get_start_time_of_current_run(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 23:59:59 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time); @@ -229,6 +268,7 @@ test_get_start_time_of_current_run(void *arg) retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", ¤t_time); tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time); @@ -237,6 +277,10 @@ test_get_start_time_of_current_run(void *arg) tt_str_op("2015-04-20 00:00:00", OP_EQ, tbuf); } + /* Next test is testing it without a consensus to use the testing voting + * interval . */ + UNMOCK(networkstatus_get_live_consensus); + /* Now let's alter the voting schedule and check the correctness of the * function. Voting interval of 10 seconds, means that an SRV protocol run * takes 10 seconds * 24 rounds = 4 mins */ @@ -246,8 +290,8 @@ test_get_start_time_of_current_run(void *arg) options->TestingV3AuthInitialVotingInterval = 10; retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:15:32 UTC", ¤t_time); - tt_int_op(retval, OP_EQ, 0); + dirvote_recalculate_timing(get_options(), current_time); run_start_time = sr_state_get_start_time_of_current_protocol_run(current_time); @@ -266,22 +310,31 @@ static void test_get_start_time_functions(void *arg) { (void) arg; - time_t now = approx_time(); + int retval; + + MOCK(networkstatus_get_live_consensus, + mock_networkstatus_get_live_consensus); + retval = parse_rfc1123_time("Mon, 20 Apr 2015 01:00:00 UTC", + &mock_consensus.fresh_until); + tt_int_op(retval, OP_EQ, 0); + + retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", + &mock_consensus.valid_after); + tt_int_op(retval, OP_EQ, 0); + time_t now = mock_consensus.valid_after; + + dirvote_recalculate_timing(get_options(), now); time_t start_time_of_protocol_run = sr_state_get_start_time_of_current_protocol_run(now); tt_assert(start_time_of_protocol_run); /* Check that the round start time of the beginning of the run, is itself */ - tt_int_op(get_start_time_of_current_round(start_time_of_protocol_run), OP_EQ, + tt_int_op(get_start_time_of_current_round(), OP_EQ, start_time_of_protocol_run); - /* Check that even if we increment the start time, we still get the start - time of the run as the beginning of the round. */ - tt_int_op(get_start_time_of_current_round(start_time_of_protocol_run+1), - OP_EQ, start_time_of_protocol_run); - - done: ; + done: + UNMOCK(networkstatus_get_live_consensus); } static void @@ -303,81 +356,6 @@ test_get_sr_protocol_duration(void *arg) done: ; } -/* Mock function to immediately return our local 'mock_consensus'. */ -static networkstatus_t * -mock_networkstatus_get_live_consensus(time_t now) -{ - (void) now; - return mock_consensus; -} - -/** Test the get_next_valid_after_time() function. */ -static void -test_get_next_valid_after_time(void *arg) -{ - time_t current_time; - time_t valid_after_time; - char tbuf[ISO_TIME_LEN + 1]; - int retval; - - (void) arg; - - { - /* Setup a fake consensus just to get the times out of it, since - get_next_valid_after_time() needs them. */ - mock_consensus = tor_malloc_zero(sizeof(networkstatus_t)); - - retval = parse_rfc1123_time("Mon, 13 Jan 2016 16:00:00 UTC", - &mock_consensus->fresh_until); - tt_int_op(retval, OP_EQ, 0); - - retval = parse_rfc1123_time("Mon, 13 Jan 2016 15:00:00 UTC", - &mock_consensus->valid_after); - tt_int_op(retval, OP_EQ, 0); - - MOCK(networkstatus_get_live_consensus, - mock_networkstatus_get_live_consensus); - } - - { - /* Get the valid after time if called at 00:00:00 */ - retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:00 UTC", - ¤t_time); - tt_int_op(retval, OP_EQ, 0); - valid_after_time = get_next_valid_after_time(current_time); - - /* Compare it with the correct result */ - format_iso_time(tbuf, valid_after_time); - tt_str_op("2015-04-20 01:00:00", OP_EQ, tbuf); - } - - { - /* Get the valid until time if called at 00:00:01 */ - retval = parse_rfc1123_time("Mon, 20 Apr 2015 00:00:01 UTC", - ¤t_time); - tt_int_op(retval, OP_EQ, 0); - valid_after_time = get_next_valid_after_time(current_time); - - /* Compare it with the correct result */ - format_iso_time(tbuf, valid_after_time); - tt_str_op("2015-04-20 01:00:00", OP_EQ, tbuf); - } - - { - retval = parse_rfc1123_time("Mon, 20 Apr 2015 23:30:01 UTC", - ¤t_time); - tt_int_op(retval, OP_EQ, 0); - valid_after_time = get_next_valid_after_time(current_time); - - /* Compare it with the correct result */ - format_iso_time(tbuf, valid_after_time); - tt_str_op("2015-04-21 00:00:00", OP_EQ, tbuf); - } - - done: - networkstatus_vote_free(mock_consensus); -} - /* In this test we are going to generate a sr_commit_t object and validate * it. We first generate our values, and then we parse them as if they were * received from the network. After we parse both the commit and the reveal, @@ -1386,8 +1364,6 @@ struct testcase_t sr_tests[] = { NULL, NULL }, { "encoding", test_encoding, TT_FORK, NULL, NULL }, - { "get_next_valid_after_time", test_get_next_valid_after_time, TT_FORK, - NULL, NULL }, { "get_start_time_of_current_run", test_get_start_time_of_current_run, TT_FORK, NULL, NULL }, { "get_start_time_functions", test_get_start_time_functions, diff --git a/src/test/test_status.c b/src/test/test_status.c index f86f8e3b9e..50ea203e4d 100644 --- a/src/test/test_status.c +++ b/src/test/test_status.c @@ -1,3 +1,6 @@ +/* Copyright (c) 2014-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + #define STATUS_PRIVATE #define HIBERNATE_PRIVATE #define LOG_PRIVATE diff --git a/src/test/testing_common.c b/src/test/testing_common.c index 7e9c47b48d..e43fa46c84 100644 --- a/src/test/testing_common.c +++ b/src/test/testing_common.c @@ -3,12 +3,6 @@ * Copyright (c) 2007-2017, The Tor Project, Inc. */ /* See LICENSE for licensing information */ -extern const char tor_git_revision[]; - -/* Ordinarily defined in tor_main.c; this bit is just here to provide one - * since we're not linking to tor_main.c */ -const char tor_git_revision[] = ""; - /** * \file test_common.c * \brief Common pieces to implement unit tests. diff --git a/src/tools/include.am b/src/tools/include.am index 37936c742f..92cc3f10a2 100644 --- a/src/tools/include.am +++ b/src/tools/include.am @@ -45,3 +45,8 @@ src_tools_tor_cov_gencert_LDADD = src/common/libor-testing.a \ endif EXTRA_DIST += src/tools/tor-fw-helper/README + +if BUILD_LIBTORRUNNER +noinst_LIBRARIES += src/tools/libtorrunner.a +src_tools_libtorrunner_a_SOURCES = src/tools/tor_runner.c src/or/tor_api.c +endif diff --git a/src/tools/tor_runner.c b/src/tools/tor_runner.c new file mode 100644 index 0000000000..9ed2ee5775 --- /dev/null +++ b/src/tools/tor_runner.c @@ -0,0 +1,101 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * @file tor_runner.c + * @brief Experimental module to emulate tor_run_main() API with fork+exec + * + * The functions here are meant to allow the application developer to + * use the tor_run_main() API without having to care whether Tor is + * running in-process or out-of-process. For in-process usage, the + * developer can link Tor as a library and call tor_run_main(); for + * out-of-process usage, the developer can link this library instead. + * + * This interface is EXPERIMENTAL; please let us know if you would like + * to depend on it. We don't know yet whether it will be reliable in + * practice. + */ + +/* NOTE: This module is supposed to work without the standard Tor utility + * functions. Don't add more dependencies! + */ + +#include "tor_api.h" +#include "tor_api_internal.h" + +#include "orconfig.h" +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#ifdef HAVE_SYS_WAIT_H +#include <sys/wait.h> +#endif +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#include <stdlib.h> +#include <string.h> + +#ifndef __GNUC__ +#define __attribute__(x) +#endif + +static void child(const tor_main_configuration_t *cfg) + __attribute__((noreturn)); + +int +tor_run_main(const tor_main_configuration_t *cfg) +{ + pid_t pid = fork(); + if (pid == 0) { + child(cfg); + exit(0); /* Unreachable */ + } + + pid_t stopped_pid; + int status = 0; + do { + stopped_pid = waitpid(pid, &status, 0); + } while (stopped_pid == -1); + + /* Note: these return values are not documented. No return value is + * documented! */ + + if (stopped_pid != pid) { + return -99999; + } + if (WIFSTOPPED(status)) { + return WEXITSTATUS(status); + } + if (WIFSIGNALED(status)) { + return -WTERMSIG(status); + } + + return -999988; +} + +/* circumlocution to avoid getting warned about calling calloc instead of + * tor_calloc. */ +#define real_calloc calloc + +static void +child(const tor_main_configuration_t *cfg) +{ + /* XXXX Close unused file descriptors. */ + + char **args = real_calloc(cfg->argc+1, sizeof(char *)); + memcpy(args, cfg->argv, cfg->argc * sizeof(char *)); + args[cfg->argc] = NULL; + + int rv = execv(BINDIR "/tor", args); + + if (rv < 0) { + exit(254); + } else { + abort(); /* Unreachable */ + } +} + |