diff options
author | evuez <julien@mulga.net> | 2022-11-26 15:38:06 -0500 |
---|---|---|
committer | evuez <julien@mulga.net> | 2024-04-03 22:44:12 +0200 |
commit | 86098797034cbc7eb6db0cee54e17f8dcaedbc5d (patch) | |
tree | 29b6225ead843eb9022296a54657bbadfa1c4da0 | |
download | blom-86098797034cbc7eb6db0cee54e17f8dcaedbc5d.tar.gz |
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Cargo.lock | 207 | ||||
-rw-r--r-- | Cargo.toml | 13 | ||||
-rw-r--r-- | Makefile | 50 | ||||
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | expected | 25 | ||||
-rw-r--r-- | query.bl | 115 | ||||
-rw-r--r-- | samples/ip-prefixes | 8814 | ||||
-rw-r--r-- | src/common/db.rs | 89 | ||||
-rw-r--r-- | src/common/expr.rs | 364 | ||||
-rw-r--r-- | src/common/ip.rs | 195 | ||||
-rw-r--r-- | src/common/mod.rs | 7 | ||||
-rw-r--r-- | src/common/query.rs | 252 | ||||
-rw-r--r-- | src/common/sized_buffer.rs | 113 | ||||
-rw-r--r-- | src/common/term.rs | 517 | ||||
-rw-r--r-- | src/common/trie.rs | 151 | ||||
-rw-r--r-- | src/help.rs | 43 | ||||
-rw-r--r-- | src/main.rs | 37 | ||||
-rw-r--r-- | src/query.rs | 97 | ||||
-rw-r--r-- | src/repl.rs | 134 | ||||
-rw-r--r-- | src/server.rs | 291 | ||||
-rw-r--r-- | src/server/conn.rs | 230 | ||||
-rw-r--r-- | src/server/parser.rs | 118 |
23 files changed, 11873 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..f1c0dea --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,207 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +dependencies = [ + "memchr", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "blom" +version = "0.1.0" +dependencies = [ + "env_logger", + "libc", + "log", + "memchr", + "mio", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "libc" +version = "0.2.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "regex" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..85e2f7f --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "blom" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +mio = { version = "^0.8", features = ["os-poll", "net"] } +memchr = "2" +log = "0.4" +env_logger = "0.9.0" +libc = "0.2" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c097d9b --- /dev/null +++ b/Makefile @@ -0,0 +1,50 @@ +.PHONY: help +help: # HELP: This output + @awk -F: '/HELP: [A-Za-z]/{print "\033[1m" $$1 "\033[0m:" $$3}' Makefile + +.PHONY: format +format: # HELP: Format every file in the project + @cargo fmt + +.PHONY: server +server: # HELP: Start the server + @cargo run server + +.PHONY: server.debug +server.debug: # HELP: Start the server with log level set to "debug" + @RUST_LOG=debug cargo run server + +.PHONY: server.daemon +server.daemon: # HELP: Start the server in the background + @cargo run server > /dev/null & + @sleep 1 + +.PHONY: test +test: server.daemon # HELP: Run the tests + @awk -v RS= '{print $$0; system("sleep .1")}' query.bl | nc 127.0.0.1 4902 > result + @diff -c expected result + @killall blom + +.PHONY: server.seed +server.seed: # HELP: Seed the server with some IP blocks + @awk '{print "SET "$$0" Foo"}' samples/ip-prefixes | xargs -I{} -n1 -P8 ./target/release/blom query "{}" + +.PHONY: server.seed.tiny +server.seed.tiny: # HELP: Seed the server with less IP blocks + @head -n20 samples/ip-prefixes | awk '{print "SET "$$0" Foo"}' | xargs -I{} ./target/release/blom query "{}" + +.PHONY: flamegraph +flamegraph: # HELP: Generate a flamegraph + @CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -- server > /dev/null & + @sleep 1 + @awk '{print "SET "$$0" Foo"}' samples/ip-prefixes | xargs -I{} -n1 -P8 ./target/release/blom query "{}" > /dev/null + @killall blom + +.PHONY: memprof +memprof: # HELP: Generate a memory profile + @cargo build --release --features debug-logs + @env MEMORY_PROFILER_LOG=warn LD_PRELOAD=./bin/libbytehound.so ./target/release/blom server > /dev/null & + @sleep 1 + @awk '{print "SET "$$0" Foo"}' samples/ip-prefixes | xargs -I{} -n1 -P8 ./target/release/blom query "{}" > /dev/null + @killall blom + @./bin/bytehound server memory-profiling_*.dat diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5eb7a2 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# blom + +A small, Redis-inspired, IP blocks database. + +- The communication protocol is [RESP3](https://github.com/antirez/RESP3/blob/master/spec.md) +- There's the start of a VT100 repl (readline, just bad) with `blom repl`, +- `blom query` to send queries directly with no repl, +- Currently the blocks are stored in a simple trie, the goal is to implement a [Tree Bitmap](https://cseweb.ucsd.edu/~varghese/PAPERS/willpaper.pdf) + + diff --git a/expected b/expected new file mode 100644 index 0000000..6cab734 --- /dev/null +++ b/expected @@ -0,0 +1,25 @@ +$2 +OK +#t ++1.2.3.4/24 +_ +$12 +Hello +World! +#t +$2 +OK +_ +$2 +OK ++1.2.3.4/24 +_ +_ +!33 +PROTOCOL Expected string, got '*'. +!33 +PROTOCOL Expected string, got '*'. +!33 +PROTOCOL Expected string, got '*'. +!33 +PROTOCOL Expected string, got '*'. diff --git a/query.bl b/query.bl new file mode 100644 index 0000000..35dbbe0 --- /dev/null +++ b/query.bl @@ -0,0 +1,115 @@ +*3 +$3 +SET +$10 +1.2.3.4/24 +$3 +Bar + +*2 +$6 +EXISTS +$10 +1.2.3.4/24 + +*2 +$3 +GET +$10 +1.2.3.4/24 + +*2 +$3 +DEL +$10 +1.2.3.4/24 + +*2 +$4 +ECHO +$12 +Hello +World! + +*2 +$6 +EXISTS +$10 +1.2.3.4/24 + +*3 +$3 +SET +$10 +1.2.3.4/24 +$3 +Foo + +*2 +$3 +DEL +$10 +1.2.3.4/24 + +*3 +$3 +SET +$10 +1.2.3.4/24 +$3 +Foo + +*2 +$3 +GET +$10 +1.2.3.4/24 + +*2 +$3 +DEL +$10 +1.2.3.4/24 + + + + + + + + +*2 +$3 +GET +$4 +::/8 + +*3 +$3 +GET +*2 ++ffffffff +:24 +$3 +Bar + +*2 +$3 +GET +$3 +Foo +bar + +*2 +$3 +GET +*2 ++ffffffff +:24 + +*2 +$3 +DEL +*2 ++ffffffff +:24 diff --git a/samples/ip-prefixes b/samples/ip-prefixes new file mode 100644 index 0000000..1e6127d --- /dev/null +++ b/samples/ip-prefixes @@ -0,0 +1,8814 @@ +3.2.34.0/26 +3.5.140.0/22 +13.34.37.64/27 +13.34.65.64/27 +13.34.66.0/27 +13.34.78.160/27 +15.230.221.0/24 +35.180.0.0/16 +43.224.79.154/31 +43.224.79.174/31 +52.93.153.170/32 +52.93.178.234/32 +52.94.76.0/22 +52.95.36.0/22 +52.219.170.0/23 +99.87.32.0/22 +120.52.22.96/27 +150.222.11.86/31 +150.222.81.0/24 +150.222.234.54/31 +3.2.35.64/26 +13.34.11.32/27 +13.34.24.160/27 +13.34.50.32/27 +13.34.52.96/27 +13.34.69.64/27 +15.230.39.60/31 +43.224.79.48/31 +43.224.79.212/31 +52.46.188.68/30 +52.46.189.248/30 +52.94.152.9/32 +52.219.168.0/24 +150.222.78.0/24 +3.108.0.0/14 +13.34.43.192/27 +13.34.52.0/27 +13.34.64.32/27 +15.181.232.0/21 +15.230.39.208/31 +52.93.17.0/24 +52.93.127.163/32 +52.93.240.164/31 +52.95.150.0/24 +52.219.60.0/23 +142.4.160.136/29 +150.222.230.102/31 +3.2.0.0/24 +13.34.43.96/27 +13.34.48.0/27 +13.34.62.160/27 +13.34.64.96/27 +13.248.56.0/22 +13.248.117.0/24 +15.221.34.0/24 +15.230.137.0/24 +52.93.126.135/32 +52.93.178.219/32 +52.93.240.186/31 +52.94.24.0/23 +96.0.80.0/22 +150.222.3.187/32 +150.222.199.0/25 +150.222.252.248/31 +161.188.154.0/23 +13.34.71.0/27 +13.34.83.128/27 +15.230.39.44/31 +43.249.45.0/24 +52.4.0.0/14 +52.46.191.174/31 +52.93.92.68/31 +52.93.127.27/32 +52.144.227.192/26 +52.144.229.64/26 +54.222.88.0/24 +64.252.81.0/24 +142.4.160.80/29 +13.34.70.224/27 +13.248.70.0/24 +15.230.73.192/26 +43.224.76.28/30 +50.16.0.0/15 +52.46.189.108/30 +52.93.116.148/32 +52.93.127.133/32 +52.93.198.0/25 +52.95.208.0/22 +52.95.224.0/24 +104.255.59.104/32 +104.255.59.114/32 +150.222.84.0/24 +150.222.129.244/31 +150.222.208.82/31 +150.222.234.50/31 +205.251.249.0/24 +13.34.32.128/27 +13.34.49.0/27 +13.34.73.96/27 +15.193.3.0/24 +15.220.196.0/22 +15.220.216.0/22 +35.71.115.0/24 +43.224.76.152/30 +52.93.127.169/32 +52.93.153.148/32 +52.94.244.0/22 +52.119.208.0/23 +54.117.0.0/16 +54.240.236.26/32 +142.4.160.224/29 +150.222.3.190/32 +150.222.228.0/24 +13.34.34.192/27 +15.197.34.0/23 +15.205.0.0/16 +15.230.39.10/31 +15.230.254.2/31 +16.12.6.0/23 +52.46.190.68/30 +52.82.169.16/28 +52.93.34.56/32 +52.94.198.16/28 +52.144.225.128/26 +64.252.69.0/24 +71.131.192.0/18 +150.222.122.104/31 +13.34.17.64/27 +13.236.0.0/14 +15.177.100.0/24 +15.197.36.0/22 +15.230.158.0/23 +16.12.32.0/22 +43.206.0.0/15 +43.224.77.192/30 +52.46.220.0/22 +52.93.50.128/32 +52.93.50.140/31 +52.93.56.0/24 +52.93.178.152/32 +52.95.41.0/24 +52.95.100.0/22 +52.95.226.0/24 +52.219.204.0/22 +99.78.152.0/22 +142.4.160.56/29 +142.4.160.184/29 +150.222.135.0/24 +150.222.202.0/24 +176.32.125.244/31 +3.4.0.0/24 +13.34.53.192/27 +13.34.60.128/27 +15.177.83.0/24 +15.185.0.0/16 +15.220.252.0/22 +15.221.35.0/24 +15.230.39.28/31 +15.248.28.0/22 +52.46.190.0/30 +52.93.35.212/32 +52.93.127.118/32 +52.93.178.205/32 +52.94.26.0/23 +52.94.152.44/32 +52.95.182.0/23 +54.240.236.54/32 +54.247.0.0/16 +54.248.0.0/15 +3.2.40.0/25 +13.34.41.192/27 +13.34.83.160/27 +13.248.72.0/24 +15.230.39.196/31 +15.251.0.9/32 +16.155.0.0/16 +18.34.248.0/22 +35.71.99.0/24 +43.224.76.76/30 +43.224.79.70/31 +43.224.79.200/31 +52.46.188.192/30 +52.119.252.0/22 +54.148.0.0/15 +69.107.7.16/29 +99.77.130.0/24 +150.222.3.185/32 +150.222.11.78/31 +150.222.27.12/32 +150.222.234.52/31 +150.222.234.68/31 +180.163.57.128/26 +13.34.50.224/27 +15.230.68.192/26 +18.200.0.0/16 +43.224.76.144/30 +52.93.91.102/32 +52.93.141.212/32 +54.21.0.0/16 +54.206.0.0/16 +54.240.236.69/32 +99.150.56.0/21 +108.175.56.0/22 +150.222.96.0/24 +13.34.15.32/27 +13.34.29.224/27 +13.34.68.160/27 +13.34.69.224/27 +13.34.70.64/27 +13.248.124.0/24 +15.193.2.0/24 +15.220.222.0/23 +15.230.67.64/26 +15.230.212.0/23 +43.224.76.32/30 +43.224.79.94/31 +43.224.79.222/31 +52.93.178.136/32 +52.219.192.0/23 +99.77.132.0/24 +104.255.59.82/32 +150.222.120.242/31 +161.188.146.0/23 +13.34.83.192/27 +13.204.0.0/14 +15.181.247.0/24 +15.230.200.0/24 +16.12.24.0/21 +18.232.0.0/14 +43.224.77.0/29 +52.82.169.0/28 +52.93.112.0/24 +52.93.178.138/32 +54.239.0.224/28 +54.239.48.0/22 +64.252.118.0/24 +99.77.244.0/24 +142.4.160.144/29 +13.34.54.224/27 +13.34.79.192/27 +13.248.119.0/24 +15.220.120.0/21 +15.230.39.254/31 +15.230.179.16/29 +51.24.0.0/13 +52.93.81.0/24 +52.93.240.170/31 +54.74.0.0/15 +150.222.15.124/32 +150.222.114.0/24 +150.222.242.214/31 +13.34.27.32/27 +13.34.39.32/27 +15.220.207.0/24 +15.230.39.206/31 +15.230.39.244/31 +18.102.0.0/16 +52.46.190.144/30 +52.46.191.98/31 +52.83.0.0/16 +52.93.14.18/32 +52.94.6.0/24 +52.144.197.192/26 +64.252.122.0/24 +69.107.7.56/29 +150.222.2.0/24 +150.222.3.234/31 +150.222.27.18/31 +150.222.164.220/31 +13.34.23.0/27 +13.248.67.0/24 +15.230.138.0/24 +15.230.169.6/31 +43.224.79.254/31 +52.46.190.32/30 +52.47.0.0/16 +52.93.16.0/24 +52.94.249.144/28 +52.95.136.0/23 +52.95.255.64/28 +52.144.199.128/26 +52.144.225.64/26 +52.219.143.0/24 +54.240.236.22/32 +150.222.51.160/27 +151.148.40.0/24 +204.246.168.0/22 +13.34.25.248/29 +13.34.38.64/27 +13.34.72.160/27 +13.208.0.0/16 +15.193.7.0/24 +15.230.39.108/31 +15.230.70.0/26 +15.230.74.128/26 +15.230.76.0/26 +15.230.253.0/24 +43.224.79.96/31 +52.46.191.64/31 +52.93.50.136/31 +52.93.50.166/31 +52.93.96.0/24 +52.93.122.203/32 +52.93.127.194/32 +54.156.0.0/14 +54.222.90.0/24 +54.236.0.0/15 +96.0.32.0/22 +99.150.8.0/21 +150.222.234.18/31 +150.222.234.98/31 +3.5.40.0/22 +3.5.136.0/22 +13.34.3.160/27 +15.181.160.0/20 +15.230.29.0/24 +15.230.39.14/31 +18.191.0.0/16 +43.224.79.56/31 +52.144.210.0/26 +98.131.0.0/16 +99.77.159.0/24 +99.83.97.0/24 +150.222.232.88/32 +13.34.21.128/27 +13.34.55.0/27 +15.177.82.0/24 +15.181.80.0/20 +15.230.241.0/24 +16.55.0.0/16 +47.128.0.0/14 +52.46.191.60/31 +52.46.191.156/31 +52.93.127.112/32 +52.93.178.134/32 +52.93.240.160/31 +52.144.211.196/31 +52.219.72.0/22 +54.153.128.0/17 +54.222.58.0/28 +122.248.192.0/18 +150.222.119.0/24 +13.34.19.64/27 +13.34.22.160/27 +13.34.39.64/27 +13.247.0.0/16 +15.230.9.12/31 +15.230.39.34/31 +15.230.218.0/24 +18.192.0.0/15 +35.71.114.0/24 +52.46.191.68/31 +52.46.191.234/31 +52.93.126.132/32 +52.93.127.126/32 +52.93.133.177/32 +52.93.178.183/32 +52.144.215.192/31 +52.219.68.0/22 +54.229.0.0/16 +54.239.1.96/28 +54.239.102.234/31 +104.255.59.103/32 +150.222.28.136/31 +3.2.34.128/26 +13.34.59.96/27 +13.34.67.224/27 +13.34.74.64/27 +13.248.100.0/24 +15.230.130.0/24 +15.230.183.0/24 +18.160.0.0/15 +52.46.190.204/31 +52.93.5.0/24 +52.93.50.146/31 +52.93.50.156/31 +52.93.55.146/31 +52.93.71.30/32 +52.93.120.178/32 +52.93.127.124/32 +52.144.193.128/26 +54.20.0.0/16 +54.250.0.0/16 +64.252.89.0/24 +69.107.7.136/29 +76.223.168.0/24 +107.20.0.0/14 +150.222.28.130/31 +150.222.28.140/31 +150.222.129.62/31 +3.5.160.0/22 +13.34.7.0/27 +13.34.13.0/27 +15.221.36.0/22 +15.230.9.47/32 +15.230.40.0/24 +46.51.192.0/20 +52.93.50.174/31 +52.93.115.0/24 +52.93.178.161/32 +52.93.193.200/32 +52.95.174.0/24 +99.77.149.0/24 +99.78.156.0/22 +150.222.120.20/31 +150.222.220.0/24 +3.132.0.0/14 +13.34.3.224/27 +13.34.5.46/32 +13.34.39.192/27 +15.221.7.0/24 +15.230.4.164/31 +15.230.132.0/24 +15.230.202.0/30 +15.251.0.27/32 +43.210.0.0/15 +43.224.79.194/31 +52.46.208.0/21 +52.93.51.28/32 +52.94.12.0/24 +52.95.187.0/24 +63.32.0.0/14 +64.252.85.0/24 +150.222.3.240/31 +150.222.129.134/31 +13.34.45.160/27 +13.34.71.224/27 +13.36.0.0/14 +15.230.36.0/23 +15.230.39.54/31 +16.12.48.0/21 +52.93.91.101/32 +52.93.240.188/31 +70.232.80.0/21 +99.82.184.0/22 +150.222.28.108/31 +150.222.121.0/24 +150.222.234.34/31 +172.96.98.0/24 +13.34.20.0/27 +13.34.35.160/27 +15.177.94.0/24 +43.224.76.188/30 +43.224.77.136/30 +52.46.189.140/30 +52.46.252.0/22 +52.93.126.198/32 +52.94.152.67/32 +52.95.255.16/28 +52.219.141.0/24 +54.240.236.38/32 +96.0.40.0/21 +150.222.3.198/31 +13.34.55.64/27 +13.34.71.32/27 +15.230.0.12/31 +15.230.87.0/24 +18.236.0.0/15 +51.20.0.0/14 +52.46.188.72/30 +52.46.188.244/30 +52.46.191.230/31 +52.93.50.142/31 +52.93.127.104/32 +52.93.240.192/31 +52.94.249.80/28 +52.95.139.0/24 +54.240.198.0/24 +64.252.74.0/24 +99.77.183.0/24 +150.222.227.0/24 +150.222.230.130/31 +13.34.29.128/27 +13.34.52.64/27 +13.248.32.0/20 +52.94.199.0/24 +52.95.128.0/21 +52.119.206.0/23 +64.252.79.0/24 +150.222.28.106/31 +161.188.148.0/23 +176.32.125.230/31 +205.251.252.0/23 +13.34.11.128/27 +13.34.20.64/27 +13.34.23.224/27 +13.34.67.64/27 +13.248.113.0/24 +15.188.0.0/16 +15.230.39.220/31 +15.230.251.4/31 +18.116.0.0/14 +52.46.189.16/30 +52.93.126.235/32 +52.93.127.218/32 +52.93.127.239/32 +52.93.133.153/32 +52.93.178.231/32 +52.95.178.0/23 +54.200.0.0/15 +54.239.1.16/28 +185.143.16.0/24 +205.251.244.0/23 +3.5.36.0/22 +13.34.38.160/27 +13.34.65.0/27 +13.34.68.0/27 +15.230.251.0/31 +18.34.32.0/20 +43.224.77.28/30 +52.46.92.0/22 +52.46.190.104/30 +52.46.191.158/31 +52.93.50.178/31 +52.93.50.188/31 +52.93.236.0/24 +54.239.98.0/24 +99.77.238.0/24 +176.32.125.228/31 +13.34.30.128/27 +43.224.77.152/30 +52.46.188.84/30 +52.46.189.32/30 +52.46.189.156/30 +52.46.190.100/30 +52.93.178.187/32 +52.119.176.0/21 +54.144.0.0/14 +54.169.0.0/16 +54.240.236.74/32 +63.246.113.0/24 +99.77.136.0/24 +150.222.230.104/31 +161.188.158.0/23 +13.34.26.96/27 +13.34.83.0/27 +15.230.74.192/26 +15.230.78.192/26 +15.230.95.0/24 +35.71.118.0/24 +43.224.76.184/30 +52.93.127.69/32 +52.93.193.199/32 +52.93.240.148/31 +52.95.104.0/22 +52.119.249.0/24 +54.222.91.0/24 +64.252.72.0/24 +150.222.85.0/24 +150.222.245.122/31 +13.34.35.224/27 +13.34.69.0/27 +15.230.178.0/24 +15.230.192.0/24 +43.224.79.58/31 +52.46.188.120/30 +52.93.127.121/32 +52.93.240.194/31 +52.95.168.0/24 +52.144.224.128/26 +54.192.0.0/16 +54.239.0.16/28 +54.239.0.96/28 +99.77.148.0/24 +13.34.37.0/27 +13.34.82.96/27 +13.248.110.0/24 +15.197.32.0/23 +15.230.39.40/31 +15.251.0.7/32 +43.224.76.104/30 +43.224.76.212/30 +43.224.77.40/30 +52.46.188.228/30 +52.93.71.38/32 +52.95.240.0/24 +52.219.16.0/22 +75.101.128.0/17 +96.0.16.0/21 +150.222.3.242/31 +150.222.129.122/31 +176.32.125.234/31 +204.246.173.0/24 +3.4.3.0/24 +13.34.81.160/27 +15.222.0.0/15 +43.224.79.198/31 +52.93.62.0/24 +52.93.127.127/32 +52.94.176.0/20 +69.235.128.0/18 +99.77.240.0/24 +150.222.129.149/32 +150.222.234.142/31 +3.2.41.0/26 +13.34.6.224/27 +13.34.24.96/27 +13.34.43.128/27 +13.34.61.224/27 +13.34.73.192/27 +15.221.50.0/24 +52.93.20.0/24 +52.93.127.96/32 +52.144.192.0/26 +150.222.112.0/24 +204.236.128.0/18 +3.5.208.0/22 +13.34.30.160/27 +13.34.34.64/27 +13.34.45.64/27 +13.34.46.0/27 +15.177.76.0/24 +15.230.135.0/24 +43.224.77.96/30 +43.224.77.180/30 +43.224.79.52/31 +52.30.0.0/15 +52.46.188.76/30 +52.46.189.80/30 +52.93.71.27/32 +52.94.8.0/24 +52.94.249.64/28 +54.92.0.0/17 +54.154.0.0/16 +64.252.76.0/24 +67.202.0.0/18 +99.77.251.0/24 +103.246.148.0/23 +150.222.120.230/31 +150.222.230.92/32 +150.222.232.123/32 +150.222.234.56/31 +161.188.156.0/23 +3.3.24.0/22 +3.30.0.0/15 +13.34.23.64/27 +13.34.32.0/27 +15.181.253.0/24 +15.197.0.0/23 +18.34.0.0/19 +35.71.119.0/24 +43.249.47.0/24 +52.46.188.48/30 +52.93.55.156/31 +54.226.0.0/15 +54.230.200.0/21 +162.250.237.0/24 +3.112.0.0/14 +3.144.0.0/13 +13.34.5.14/32 +13.34.49.224/27 +13.34.77.192/27 +15.220.168.0/21 +52.46.191.24/31 +52.93.178.166/32 +52.94.128.0/22 +52.95.244.0/24 +64.187.128.0/20 +64.252.111.0/24 +99.82.188.0/22 +136.9.0.0/16 +172.96.110.0/24 +3.2.37.128/26 +13.34.56.224/27 +13.34.71.96/27 +13.34.79.128/27 +15.230.18.0/24 +15.230.149.11/32 +18.231.0.0/16 +43.224.79.136/31 +52.46.191.8/31 +52.93.127.201/32 +52.93.141.234/31 +52.94.152.182/32 +54.252.0.0/16 +120.253.240.192/26 +150.222.3.182/32 +150.222.28.142/31 +150.222.79.0/24 +3.224.0.0/12 +13.34.40.160/27 +13.248.68.0/24 +15.230.39.2/31 +16.157.0.0/16 +35.71.104.0/24 +35.71.117.0/24 +43.224.79.208/31 +52.93.50.162/31 +52.93.50.184/31 +52.93.229.149/32 +52.93.240.178/31 +52.94.216.0/21 +52.144.192.192/26 +52.144.196.192/26 +54.221.0.0/16 +54.240.202.0/24 +54.255.0.0/16 +150.222.230.106/31 +13.34.45.224/27 +15.230.72.0/26 +52.46.190.40/30 +52.46.191.62/31 +52.93.34.126/31 +52.93.127.159/32 +52.93.141.220/31 +52.119.248.0/24 +52.144.205.0/26 +54.239.0.144/28 +99.77.56.0/21 +142.4.160.40/29 +150.222.120.248/31 +150.222.129.132/31 +13.34.25.96/27 +13.34.84.64/27 +15.228.0.0/15 +15.230.14.18/31 +52.46.189.128/30 +52.46.189.192/30 +52.93.57.0/24 +52.93.127.93/32 +52.93.127.254/32 +52.95.63.0/24 +69.107.7.40/29 +99.83.102.0/24 +142.4.160.8/29 +150.222.3.212/31 +157.241.0.0/16 +13.34.32.32/27 +13.34.40.192/27 +13.34.57.64/27 +15.181.112.0/22 +15.230.16.20/31 +15.230.189.128/25 +16.12.15.0/24 +43.224.79.50/31 +52.46.190.108/30 +52.46.191.216/31 +52.93.34.40/32 +52.93.126.215/32 +52.93.127.177/32 +52.93.127.196/32 +52.93.127.217/32 +52.93.240.180/31 +52.94.249.208/28 +54.233.0.0/18 +68.66.112.0/20 +69.231.128.0/18 +99.77.248.0/24 +99.82.172.0/24 +99.151.120.0/21 +108.136.0.0/15 +116.129.226.128/26 +150.222.82.0/24 +13.34.28.160/27 +13.34.35.0/27 +13.34.38.0/27 +13.34.51.192/27 +13.34.72.0/27 +13.34.74.224/27 +18.34.72.0/21 +35.176.0.0/15 +43.224.79.234/31 +52.93.193.195/32 +54.239.112.0/24 +70.224.192.0/18 +99.77.153.0/24 +150.222.105.0/24 +161.188.136.0/23 +3.4.7.0/24 +13.34.5.80/32 +13.34.43.160/27 +13.34.53.32/27 +13.34.56.32/27 +13.34.61.32/27 +15.221.6.0/24 +15.230.19.248/31 +15.230.79.64/26 +16.12.10.0/23 +52.219.148.0/23 +69.107.7.88/29 +99.77.155.0/24 +142.4.160.192/29 +150.222.3.176/32 +150.222.252.250/31 +151.148.39.0/24 +13.34.40.96/27 +13.34.46.32/27 +13.34.53.160/27 +13.34.57.0/27 +13.34.75.96/27 +13.34.80.0/27 +15.230.67.0/26 +43.224.76.16/30 +43.224.79.82/31 +52.46.189.220/30 +52.93.127.179/32 +52.93.178.206/32 +52.93.178.230/32 +52.95.255.32/28 +52.144.229.0/26 +69.230.192.0/18 +130.176.0.0/17 +150.222.11.84/31 +150.222.232.176/28 +150.222.234.112/31 +150.222.234.128/31 +160.1.0.0/16 +3.5.128.0/22 +13.34.79.96/27 +15.181.241.0/24 +15.230.21.0/24 +15.230.67.128/26 +18.216.0.0/14 +34.192.0.0/12 +43.224.76.108/30 +43.224.79.76/31 +43.224.79.214/31 +52.46.191.76/31 +52.93.37.222/32 +52.93.178.220/32 +52.94.64.0/22 +99.83.100.0/24 +150.222.234.78/31 +3.104.0.0/14 +13.34.62.192/27 +13.34.76.160/27 +15.177.99.0/24 +15.193.5.0/24 +15.197.16.0/23 +15.220.32.0/21 +15.230.39.24/31 +15.230.39.162/31 +15.230.184.0/24 +43.224.79.106/31 +52.46.188.176/30 +52.80.0.0/16 +52.93.71.46/32 +52.94.250.16/28 +52.95.216.0/22 +52.119.232.0/21 +52.144.201.128/26 +64.252.121.0/24 +99.150.32.0/21 +108.156.0.0/14 +150.222.99.0/24 +150.222.218.0/24 +150.222.234.104/31 +175.41.128.0/18 +176.32.125.250/31 +13.34.59.128/27 +15.230.39.194/31 +15.230.152.0/24 +51.118.0.0/15 +52.46.189.68/30 +52.93.127.167/32 +52.93.178.215/32 +54.239.108.0/22 +64.252.68.0/24 +150.222.133.0/24 +161.188.130.0/23 +13.34.37.96/27 +13.34.76.96/27 +15.230.193.0/24 +18.229.0.0/16 +52.46.189.72/30 +52.93.50.148/31 +52.93.127.174/32 +52.93.127.238/32 +52.93.178.182/32 +52.94.68.0/24 +52.95.192.0/20 +52.144.230.204/31 +52.219.195.0/24 +54.219.0.0/16 +150.222.28.122/31 +150.222.232.122/32 +3.32.0.0/16 +13.34.81.224/27 +15.230.0.6/31 +35.182.0.0/15 +43.224.76.24/30 +43.224.77.44/30 +52.46.191.178/31 +52.93.122.255/32 +54.230.192.0/21 +70.232.124.0/22 +99.77.191.0/24 +3.5.72.0/23 +13.34.26.0/27 +13.34.62.32/27 +13.250.0.0/15 +15.230.39.104/31 +43.224.79.80/31 +44.192.0.0/11 +52.46.189.132/30 +52.46.190.168/30 +52.93.127.17/32 +52.93.127.99/32 +52.95.166.0/23 +52.144.216.2/31 +150.222.129.148/32 +150.222.208.66/31 +13.34.26.64/27 +13.34.58.32/27 +13.34.70.0/27 +15.230.39.136/31 +15.230.39.226/31 +15.251.0.10/32 +16.12.20.0/24 +52.144.215.0/31 +52.144.215.196/31 +54.240.236.78/32 +64.252.102.0/24 +64.252.108.0/24 +69.107.6.200/29 +87.238.80.0/21 +99.77.156.0/24 +99.77.233.0/24 +161.188.140.0/23 +13.34.2.0/27 +13.34.12.64/27 +13.34.46.192/27 +13.34.60.224/27 +15.230.78.64/26 +15.230.243.0/24 +52.46.191.2/31 +52.93.50.129/32 +52.93.178.147/32 +52.95.169.0/24 +54.222.0.0/19 +54.239.0.112/28 +54.239.8.0/21 +54.240.204.0/22 +99.86.0.0/16 +150.222.203.0/24 +207.171.176.0/20 +13.34.13.160/27 +13.34.21.96/27 +15.168.0.0/16 +15.230.14.252/31 +15.230.32.0/24 +15.230.39.192/31 +15.230.79.0/26 +43.224.77.184/30 +52.46.189.160/30 +52.93.178.179/32 +54.240.236.18/32 +99.77.138.0/24 +150.222.5.0/24 +150.222.120.62/31 +162.250.238.0/23 +178.236.0.0/20 +3.5.152.0/21 +13.34.37.160/27 +15.230.39.72/31 +18.224.0.0/14 +43.224.76.180/30 +43.224.79.74/31 +52.56.0.0/16 +52.93.55.162/31 +52.93.92.74/31 +52.93.127.248/32 +52.93.153.149/32 +52.93.178.170/32 +52.93.178.223/32 +52.144.233.70/31 +54.240.212.0/22 +54.245.0.0/16 +142.4.160.0/29 +150.222.100.0/24 +13.34.21.160/27 +13.34.24.64/27 +13.34.27.0/27 +13.34.33.64/27 +13.34.48.192/27 +13.34.72.64/27 +13.248.105.0/24 +16.12.16.0/23 +18.230.0.0/16 +52.46.189.88/30 +52.46.190.188/31 +52.58.0.0/15 +52.93.50.130/32 +52.93.121.195/32 +52.93.127.25/32 +52.218.0.0/17 +150.222.176.0/22 +13.34.30.96/27 +13.34.40.128/27 +13.34.62.224/27 +13.34.74.32/27 +13.248.0.0/20 +15.230.39.174/31 +15.230.39.240/31 +51.96.0.0/14 +52.93.127.219/32 +52.93.153.177/32 +52.94.152.63/32 +52.95.29.0/26 +52.144.228.0/31 +52.219.142.0/24 +99.77.152.0/24 +150.222.217.248/31 +3.131.0.0/16 +13.34.29.96/27 +13.34.53.224/27 +13.34.59.64/27 +13.34.63.0/27 +13.34.74.96/27 +15.220.80.0/20 +15.230.9.10/31 +15.230.39.158/31 +15.230.73.128/26 +52.46.191.88/31 +52.46.191.236/31 +52.93.122.202/32 +52.93.127.18/32 +52.93.127.195/32 +52.219.0.0/20 +54.240.248.0/21 +69.107.6.120/29 +150.222.208.74/31 +150.222.234.1/32 +176.32.125.252/31 +13.34.7.32/27 +15.230.133.26/31 +52.46.189.100/30 +52.46.190.124/30 +52.93.178.130/32 +52.95.0.0/20 +98.80.0.0/12 +99.77.235.0/24 +150.222.234.5/32 +157.152.0.0/16 +205.251.246.0/24 +3.96.0.0/15 +13.34.10.128/27 +13.34.78.224/27 +15.220.48.0/21 +15.230.197.0/24 +43.224.79.190/31 +52.46.191.176/31 +52.93.127.108/32 +52.93.178.157/32 +52.93.178.168/32 +52.94.32.0/20 +54.216.0.0/15 +69.107.3.184/29 +150.222.3.232/31 +150.222.122.106/31 +150.222.232.126/32 +150.222.234.6/31 +3.5.252.0/22 +13.34.18.192/27 +13.34.81.64/27 +15.220.232.0/24 +23.20.0.0/14 +52.46.168.0/23 +52.46.190.228/31 +52.93.91.115/32 +52.93.151.0/24 +52.94.248.80/28 +64.252.64.0/24 +99.77.143.0/24 +104.255.59.133/32 +3.4.1.0/24 +13.34.42.192/27 +13.34.62.64/27 +13.56.0.0/16 +15.220.184.0/21 +15.230.16.196/31 +15.230.39.4/31 +15.230.39.30/31 +15.251.0.28/32 +18.184.0.0/15 +52.46.190.212/31 +52.93.125.43/32 +52.93.127.131/32 +52.93.178.185/32 +52.93.240.154/31 +54.240.236.45/32 +72.21.192.0/19 +161.188.128.0/23 +205.251.200.0/21 +13.34.13.32/27 +13.34.79.0/27 +15.230.39.12/31 +15.230.39.242/31 +15.230.141.0/24 +15.230.162.0/24 +15.230.168.0/24 +15.230.251.6/32 +35.160.0.0/13 +43.194.0.0/16 +52.46.191.148/31 +52.48.0.0/14 +52.93.124.97/32 +52.94.152.11/32 +52.94.198.80/28 +99.77.137.0/24 +150.222.232.116/31 +223.71.71.128/25 +3.2.38.128/26 +13.32.0.0/15 +13.34.75.0/27 +13.34.77.64/27 +13.112.0.0/14 +15.181.144.0/20 +15.230.39.66/31 +15.230.89.0/24 +35.71.96.0/24 +43.200.0.0/14 +43.224.77.92/30 +52.46.191.96/31 +52.68.0.0/15 +52.144.231.64/26 +54.67.0.0/16 +99.82.173.0/24 +13.34.59.224/27 +15.181.254.0/24 +15.230.72.192/26 +16.156.0.0/16 +18.60.0.0/15 +52.57.0.0/16 +52.93.126.123/32 +52.94.124.0/22 +52.144.211.192/31 +99.151.80.0/21 +120.253.245.128/26 +150.222.3.180/32 +150.222.98.0/24 +150.222.101.0/24 +150.222.120.234/31 +3.36.0.0/14 +13.34.1.0/27 +13.34.5.110/32 +13.224.0.0/14 +43.224.76.88/30 +52.93.32.184/32 +52.93.50.176/31 +52.93.121.197/32 +52.93.127.24/32 +52.93.178.209/32 +52.119.240.0/21 +54.239.0.80/28 +54.240.216.0/22 +99.82.128.0/20 +99.82.166.0/24 +142.4.160.200/29 +150.222.234.110/31 +161.188.142.0/23 +13.34.51.32/27 +13.34.73.160/27 +13.248.97.0/24 +18.190.0.0/16 +52.82.168.0/24 +52.93.55.152/31 +52.93.178.143/32 +54.222.58.48/28 +104.255.59.119/32 +150.222.129.252/32 +150.222.213.40/32 +150.222.242.84/31 +162.213.232.0/24 +13.34.63.32/27 +15.230.39.18/31 +15.230.204.2/32 +43.224.79.30/31 +43.224.79.250/31 +52.46.190.92/30 +52.46.190.236/31 +52.46.191.218/31 +52.93.91.96/32 +104.255.59.134/32 +150.222.11.92/31 +13.34.5.224/27 +13.34.22.96/27 +13.34.31.192/27 +13.34.39.96/27 +13.34.56.160/27 +13.34.62.0/27 +13.34.82.0/27 +15.197.8.0/22 +15.230.39.154/31 +15.230.70.192/26 +35.71.72.0/22 +43.224.77.176/30 +43.224.79.72/31 +52.46.190.152/30 +52.93.73.0/26 +52.93.91.105/32 +52.93.92.72/31 +52.93.178.137/32 +52.94.198.144/28 +52.94.208.0/21 +52.95.227.0/24 +54.68.0.0/14 +54.93.0.0/16 +70.132.0.0/18 +150.222.11.90/31 +150.222.230.124/31 +150.222.234.26/31 +13.34.56.0/27 +13.34.58.0/27 +13.34.66.128/27 +13.34.68.32/27 +13.50.0.0/16 +15.230.63.2/31 +15.251.0.12/32 +52.44.0.0/15 +52.76.128.0/17 +52.93.55.144/31 +52.219.32.0/21 +54.95.0.0/16 +54.212.0.0/15 +99.87.4.0/22 +150.222.3.177/32 +150.222.69.0/24 +150.222.234.84/31 +150.222.252.246/31 +184.32.0.0/12 +3.2.49.0/24 +3.5.228.0/22 +13.34.3.128/27 +13.34.30.64/27 +13.34.63.128/27 +13.34.65.160/27 +15.158.0.0/16 +15.181.176.0/20 +15.220.202.0/23 +15.230.19.12/32 +15.230.133.16/32 +15.230.149.8/31 +43.224.79.196/31 +52.93.8.0/22 +52.93.91.111/32 +52.93.123.255/32 +52.93.124.213/32 +52.94.152.65/32 +96.0.0.0/21 +142.4.160.128/29 +150.222.3.236/31 +151.148.37.0/24 +3.124.0.0/14 +13.34.47.0/27 +15.181.48.0/20 +15.230.4.19/32 +43.224.76.136/30 +43.224.77.116/30 +52.82.176.0/22 +52.93.240.150/31 +52.144.194.192/26 +54.183.0.0/16 +54.240.236.33/32 +54.240.236.49/32 +99.83.120.0/22 +142.4.160.64/29 +3.24.0.0/14 +13.34.58.64/27 +13.34.68.96/27 +15.197.18.0/23 +15.230.219.0/24 +51.112.0.0/15 +52.46.190.202/31 +52.46.191.210/31 +52.93.133.133/32 +52.95.34.0/24 +52.144.225.0/26 +54.240.236.10/32 +104.255.59.130/32 +150.222.13.0/24 +150.222.120.252/32 +151.148.41.0/24 +205.251.247.0/24 +3.2.39.0/26 +13.34.77.96/27 +13.34.82.160/27 +13.249.0.0/16 +15.193.6.0/24 +15.230.39.212/31 +15.230.65.0/26 +35.71.113.0/24 +43.224.79.38/31 +52.93.127.182/32 +52.94.152.177/32 +64.252.103.0/24 +142.4.160.24/29 +150.222.28.126/31 +150.222.122.102/31 +150.222.234.132/31 +13.34.56.96/27 +13.34.82.32/27 +15.177.86.0/24 +15.221.8.0/21 +15.221.49.0/24 +15.230.76.128/26 +15.230.91.0/24 +15.230.208.0/24 +16.52.0.0/16 +18.144.0.0/15 +18.238.0.0/15 +18.244.0.0/15 +52.46.188.36/30 +52.90.0.0/15 +52.93.91.114/32 +52.93.123.6/32 +52.93.127.105/32 +52.93.138.253/32 +52.93.178.213/32 +52.94.144.0/23 +52.95.157.0/24 +52.144.208.192/26 +108.175.52.0/22 +136.18.18.0/24 +150.222.3.226/31 +150.222.208.88/31 +150.222.232.224/31 +13.34.30.0/27 +13.34.34.0/27 +13.34.76.0/27 +15.220.64.0/20 +15.220.176.0/21 +15.230.4.166/31 +15.230.173.0/24 +15.230.190.128/25 +15.251.0.0/32 +52.0.0.0/15 +52.46.188.88/30 +52.82.184.0/23 +52.93.193.198/32 +52.93.250.0/23 +52.95.176.0/24 +52.95.253.0/24 +54.239.120.0/21 +140.179.0.0/16 +142.4.160.120/29 +150.222.3.200/31 +205.251.208.0/20 +208.110.48.0/20 +3.2.37.0/26 +3.33.35.0/24 +13.34.45.128/27 +15.230.254.4/32 +52.46.189.96/30 +52.46.191.184/31 +52.93.12.12/32 +52.95.255.128/28 +52.208.0.0/13 +54.239.0.208/28 +99.77.0.0/20 +99.77.234.0/24 +103.246.150.0/23 +150.222.10.0/24 +150.222.234.14/31 +150.222.234.126/31 +151.148.36.0/24 +3.3.28.0/22 +13.34.22.192/27 +13.34.48.224/27 +13.248.120.0/24 +15.230.9.45/32 +15.230.39.170/31 +15.230.76.64/26 +16.62.0.0/15 +43.224.77.108/30 +43.224.79.226/31 +52.46.191.136/31 +52.54.0.0/15 +52.93.3.0/24 +52.93.55.158/31 +52.93.153.179/32 +52.95.230.0/24 +54.222.80.0/21 +54.240.225.0/24 +54.240.236.85/32 +99.78.212.0/22 +104.255.59.138/32 +150.222.3.208/31 +150.222.106.0/24 +150.222.129.118/31 +150.222.230.108/31 +3.5.48.0/22 +15.220.152.0/21 +15.230.77.64/26 +15.230.165.0/24 +15.230.177.0/31 +15.251.0.5/32 +43.224.79.128/31 +52.74.0.0/16 +52.93.50.182/31 +54.168.0.0/16 +54.239.54.0/23 +150.222.129.154/31 +150.222.217.250/31 +13.34.11.192/27 +13.34.31.160/27 +13.34.54.96/27 +13.34.64.64/27 +15.177.89.0/24 +15.230.4.156/31 +15.230.14.17/32 +18.156.0.0/14 +43.224.76.92/30 +52.46.190.214/31 +52.46.191.10/31 +52.46.191.144/31 +52.82.170.0/24 +52.93.126.244/32 +52.93.133.129/32 +52.95.24.0/22 +52.95.140.0/23 +52.119.196.0/22 +52.144.218.64/26 +64.252.113.0/24 +79.125.0.0/17 +99.77.134.0/24 +99.78.144.0/21 +3.2.41.128/26 +13.34.22.88/29 +13.34.35.192/27 +13.214.0.0/15 +15.177.77.0/24 +15.177.90.0/24 +16.26.0.0/16 +43.224.79.34/31 +52.46.189.84/30 +52.46.224.0/20 +52.93.91.100/32 +52.93.126.146/32 +52.95.156.0/24 +54.180.0.0/15 +99.77.253.0/24 +150.222.71.0/24 +150.222.120.228/31 +3.4.6.0/24 +13.34.16.128/27 +13.34.60.160/27 +15.177.79.0/24 +15.220.208.128/26 +15.230.39.122/31 +15.230.133.18/31 +15.230.210.0/23 +16.12.2.0/24 +43.224.77.24/30 +43.224.77.112/30 +43.224.79.118/31 +52.93.50.190/31 +52.95.160.0/23 +54.64.0.0/15 +56.156.0.0/16 +103.8.172.0/22 +150.222.122.92/31 +150.222.230.98/31 +176.34.0.0/19 +13.34.25.64/27 +13.34.36.224/27 +13.34.44.0/27 +13.34.81.128/27 +15.230.39.152/31 +15.230.39.184/31 +15.230.215.0/24 +35.71.120.0/24 +35.80.0.0/12 +52.46.191.80/31 +52.93.178.194/32 +52.93.178.210/32 +52.219.62.0/23 +69.107.6.216/29 +99.77.147.0/24 +99.77.236.0/24 +150.222.208.76/31 +13.34.28.224/27 +13.34.29.160/27 +13.34.36.160/27 +13.34.45.0/27 +13.34.66.160/27 +13.34.71.160/27 +13.34.73.0/27 +13.34.79.160/27 +13.34.84.32/27 +15.220.144.0/23 +15.230.39.118/31 +15.230.65.64/26 +16.54.0.0/16 +43.224.79.42/31 +43.224.79.64/31 +43.224.79.144/31 +43.224.79.176/31 +52.46.190.148/30 +52.93.178.184/32 +52.93.240.182/31 +54.223.0.0/16 +54.239.0.48/28 +54.239.1.224/28 +54.239.64.0/21 +65.9.128.0/18 +99.77.129.0/24 +108.175.60.0/22 +150.222.3.186/32 +150.222.122.94/31 +150.222.234.108/31 +13.34.64.192/27 +15.220.200.0/23 +15.230.39.46/31 +15.230.39.68/31 +15.230.133.22/31 +35.71.128.0/17 +43.204.0.0/15 +43.224.79.162/31 +46.51.224.0/19 +51.84.0.0/14 +52.46.190.76/30 +52.93.71.40/32 +52.93.124.96/32 +52.93.124.212/32 +52.95.111.0/24 +54.179.0.0/16 +54.240.203.0/24 +67.220.240.0/20 +130.176.128.0/18 +150.222.134.0/24 +3.2.38.192/26 +3.3.8.0/21 +13.34.16.96/27 +13.34.50.0/27 +13.34.53.0/27 +13.248.127.0/24 +52.46.189.200/30 +52.46.191.66/31 +52.144.224.64/26 +54.170.0.0/15 +99.82.171.0/24 +151.148.33.0/24 +3.5.164.0/22 +15.220.96.0/20 +15.221.33.0/24 +15.230.39.92/31 +15.230.51.0/24 +15.230.64.0/26 +15.230.75.192/26 +15.230.81.0/24 +35.71.98.0/24 +52.46.191.128/31 +52.93.178.159/32 +52.93.178.189/32 +52.93.240.166/31 +52.95.151.0/24 +52.144.200.64/26 +52.144.211.128/26 +52.144.233.192/26 +70.232.88.0/22 +99.77.131.0/24 +104.255.59.122/32 +150.222.3.178/32 +150.222.129.112/31 +3.5.240.0/22 +13.34.31.64/27 +15.230.39.134/31 +15.230.49.0/24 +35.71.112.0/24 +35.153.0.0/16 +43.224.76.148/30 +52.46.191.78/31 +52.61.0.0/16 +52.79.0.0/16 +52.93.71.44/32 +52.93.127.113/32 +52.93.137.0/24 +54.231.0.0/16 +99.150.48.0/21 +150.222.89.0/24 +150.222.164.222/32 +13.34.45.96/27 +13.248.96.0/24 +15.221.32.0/24 +15.230.39.126/31 +15.230.65.128/25 +15.230.185.0/24 +15.230.188.128/25 +52.46.191.104/31 +52.46.191.182/31 +52.93.126.250/32 +52.93.127.155/32 +52.95.158.0/23 +52.144.192.128/26 +52.144.233.128/31 +52.216.0.0/15 +54.240.236.34/32 +99.82.144.0/21 +99.82.169.0/24 +142.4.160.216/29 +150.222.80.0/24 +150.222.234.100/31 +15.220.228.0/22 +15.230.64.192/26 +16.158.0.0/16 +43.224.76.208/30 +52.12.0.0/15 +52.93.71.45/32 +52.93.126.245/32 +52.93.133.175/32 +52.93.240.202/31 +52.220.0.0/15 +54.239.1.128/28 +162.250.236.0/24 +3.4.8.0/24 +13.34.50.128/27 +13.34.67.160/27 +13.34.75.64/27 +13.34.78.64/27 +15.230.39.140/31 +15.251.0.2/32 +18.163.0.0/16 +43.224.76.168/30 +43.224.76.192/30 +52.46.189.176/30 +52.46.190.182/31 +52.46.250.0/23 +52.93.34.122/31 +52.93.240.168/31 +52.94.5.0/24 +52.144.228.128/26 +52.144.230.206/31 +52.219.210.0/24 +54.199.0.0/16 +150.222.141.0/24 +150.222.205.0/24 +13.34.16.160/27 +15.230.39.50/31 +15.230.39.146/31 +15.230.69.64/26 +18.142.0.0/15 +46.137.192.0/19 +52.46.188.24/30 +52.93.91.112/32 +52.93.178.181/32 +52.200.0.0/13 +52.219.96.0/20 +52.223.0.0/17 +54.222.32.0/22 +64.252.123.0/24 +99.151.112.0/21 +150.222.164.208/31 +150.222.217.12/32 +205.251.232.0/22 +13.34.51.224/27 +13.34.65.128/27 +13.34.77.32/27 +15.230.39.32/31 +15.230.214.0/24 +18.34.64.0/21 +34.224.0.0/12 +52.75.0.0/16 +52.82.160.0/22 +52.144.215.194/31 +99.78.128.0/20 +99.82.164.0/24 +150.222.3.238/31 +150.222.28.132/31 +13.34.31.96/27 +15.230.72.64/26 +52.46.188.136/30 +52.93.126.138/32 +52.93.141.228/31 +52.93.153.80/32 +52.93.182.128/26 +52.95.148.0/23 +58.254.138.0/25 +136.18.50.0/23 +13.34.33.0/27 +15.177.66.0/23 +15.230.133.20/31 +43.224.77.124/30 +52.93.127.221/32 +52.94.248.224/28 +52.95.162.0/24 +52.95.255.48/28 +54.218.0.0/16 +150.222.215.0/24 +3.5.76.0/22 +13.34.40.0/27 +13.34.41.64/27 +13.34.54.128/27 +15.197.4.0/22 +15.230.254.0/31 +16.168.0.0/15 +16.176.0.0/16 +52.46.191.238/31 +52.93.133.155/32 +52.93.141.213/32 +52.94.16.0/24 +52.144.195.0/26 +64.252.78.0/24 +13.34.37.128/27 +15.181.0.0/20 +15.230.164.0/24 +16.12.36.0/22 +43.224.79.242/31 +43.250.192.0/24 +52.93.124.211/32 +52.93.126.133/32 +54.239.102.232/31 +54.239.113.0/24 +64.252.117.0/24 +99.151.104.0/21 +99.151.128.0/21 +176.32.112.0/21 +13.34.63.224/27 +13.34.66.96/27 +15.230.153.0/24 +35.71.102.0/24 +52.46.189.40/30 +52.93.50.164/31 +52.93.120.179/32 +52.93.240.196/31 +52.144.209.192/26 +52.144.218.0/26 +54.240.236.5/32 +99.80.0.0/15 +3.5.44.0/22 +13.34.41.224/27 +13.34.42.64/27 +13.34.44.224/27 +13.34.47.64/27 +15.230.39.124/31 +15.230.39.200/31 +52.93.64.0/24 +52.93.80.0/24 +52.93.127.70/32 +52.94.69.0/24 +52.94.120.0/22 +52.144.133.32/27 +54.239.40.152/29 +54.240.236.1/32 +99.77.188.0/24 +150.222.28.18/31 +13.34.21.64/27 +13.34.29.64/27 +13.34.47.224/27 +13.34.79.64/27 +13.248.121.0/24 +15.230.39.166/31 +52.46.191.212/31 +52.93.178.192/32 +52.94.10.0/24 +99.82.170.0/24 +13.34.19.96/27 +13.34.35.32/27 +13.34.61.64/27 +13.34.82.224/27 +13.34.83.64/27 +13.248.122.0/24 +15.248.36.0/22 +52.46.189.180/30 +52.46.189.244/30 +52.93.55.148/31 +52.93.71.29/32 +52.93.127.139/32 +52.93.178.195/32 +52.93.178.222/32 +52.95.249.0/24 +54.230.208.0/20 +54.244.0.0/16 +64.252.87.0/24 +99.82.174.0/24 +104.255.59.123/32 +150.222.3.244/31 +150.222.3.250/31 +150.222.129.152/31 +150.222.217.228/30 +150.222.234.74/31 +13.34.11.224/27 +13.34.54.64/27 +13.34.59.160/27 +46.137.224.0/19 +52.95.42.0/24 +52.219.180.0/22 +65.0.0.0/14 +99.82.156.0/22 +99.150.80.0/21 +104.255.59.126/32 +13.34.5.45/32 +13.34.32.64/27 +13.34.63.96/27 +43.224.76.84/30 +43.224.76.96/30 +43.224.76.124/30 +43.224.77.128/30 +52.93.127.116/32 +52.93.178.133/32 +52.93.178.224/32 +63.246.112.0/24 +63.246.119.0/24 +150.222.122.96/31 +150.222.234.140/31 +13.34.5.111/32 +13.34.44.64/27 +13.34.55.32/27 +13.34.77.160/27 +15.230.16.12/32 +15.230.179.8/29 +43.224.76.40/30 +50.19.0.0/16 +52.93.127.107/32 +52.93.240.152/31 +52.93.240.198/31 +52.94.152.3/32 +99.79.0.0/16 +116.129.226.0/25 +150.222.73.0/24 +150.222.164.211/32 +13.34.36.192/27 +13.34.66.192/27 +15.251.0.3/32 +44.224.0.0/11 +52.46.189.60/30 +52.46.189.124/30 +52.46.191.130/31 +52.81.0.0/16 +52.93.120.177/32 +52.93.135.195/32 +52.222.128.0/17 +150.222.104.0/24 +150.222.129.19/32 +13.34.33.96/27 +13.34.38.128/27 +13.34.61.0/27 +15.221.4.0/23 +15.230.39.110/31 +15.230.70.64/26 +15.230.223.4/31 +40.177.0.0/16 +43.224.79.156/31 +52.93.127.161/32 +52.93.127.172/32 +52.144.211.64/26 +150.222.109.0/24 +150.222.208.68/31 +3.2.3.0/24 +13.34.5.192/27 +13.34.29.0/27 +15.197.12.0/22 +18.164.0.0/15 +52.93.126.137/32 +52.93.153.176/32 +52.93.178.200/32 +150.222.3.214/31 +15.230.38.0/24 +15.230.39.88/31 +15.230.133.0/28 +35.71.103.0/24 +43.224.79.158/31 +51.44.0.0/14 +52.93.126.139/32 +52.93.127.68/32 +52.95.172.0/23 +64.252.73.0/24 +99.151.72.0/21 +174.129.0.0/16 +3.2.43.0/26 +13.34.28.96/27 +13.34.32.96/27 +15.230.174.0/24 +15.251.0.20/32 +35.71.110.0/24 +52.46.189.168/30 +52.46.191.72/31 +52.93.34.120/31 +52.93.127.198/32 +52.93.134.181/32 +52.93.141.238/31 +52.93.178.211/32 +52.95.255.80/28 +64.252.101.0/24 +150.222.87.0/24 +150.222.129.140/31 +150.222.234.4/32 +150.222.234.80/31 +3.2.42.64/26 +13.34.0.160/27 +13.34.19.192/27 +13.34.38.96/27 +15.230.31.0/24 +52.93.71.31/32 +52.93.153.169/32 +52.93.178.169/32 +52.94.22.0/24 +52.95.255.112/28 +54.240.236.2/32 +96.0.12.0/22 +99.83.84.0/22 +150.222.129.248/31 +150.222.234.36/31 +150.222.234.42/31 +3.2.32.128/26 +13.34.28.64/27 +13.34.32.160/27 +13.34.81.96/27 +13.248.118.0/24 +15.181.224.0/21 +15.220.227.0/24 +15.230.4.162/31 +18.208.0.0/13 +52.46.189.216/30 +52.46.191.142/31 +52.93.126.131/32 +52.93.240.204/31 +52.95.245.0/24 +54.240.17.0/24 +99.77.142.0/24 +99.77.187.0/24 +99.78.232.0/21 +15.177.73.0/24 +15.221.51.0/24 +15.230.189.0/25 +15.230.250.0/24 +46.51.216.0/21 +52.93.127.97/32 +52.93.127.253/32 +52.94.152.60/32 +52.144.223.128/26 +150.222.120.226/31 +150.222.129.116/31 +150.222.234.86/31 +150.222.252.244/31 +176.32.125.254/31 +3.5.64.0/21 +13.34.5.113/32 +15.230.39.0/31 +15.230.134.0/24 +15.230.140.0/24 +43.249.44.0/24 +52.46.189.8/30 +52.93.75.0/24 +52.93.123.98/32 +52.93.127.101/32 +52.93.127.114/32 +52.94.152.180/32 +52.94.248.32/28 +52.144.233.68/31 +52.219.40.0/22 +52.219.136.0/22 +54.220.0.0/16 +99.78.240.0/20 +100.20.0.0/14 +150.222.74.0/24 +150.222.232.125/32 +176.32.125.236/31 +13.34.24.128/27 +52.46.190.192/31 +52.93.91.108/32 +52.93.126.199/32 +52.93.127.106/32 +52.93.127.122/32 +52.94.248.160/28 +54.151.0.0/17 +13.34.43.0/27 +13.34.52.32/27 +13.34.54.32/27 +13.34.58.128/27 +15.161.0.0/16 +43.224.76.60/30 +43.224.79.126/31 +52.46.190.230/31 +52.93.129.95/32 +52.93.141.214/31 +52.93.193.196/32 +52.94.132.0/22 +54.222.52.0/22 +64.252.110.0/24 +99.77.158.0/24 +99.77.241.0/24 +13.34.35.64/27 +18.188.0.0/16 +18.252.0.0/16 +43.224.76.64/30 +43.224.79.110/31 +46.51.128.0/18 +52.46.188.44/30 +52.46.188.204/30 +52.93.141.232/31 +52.93.178.165/32 +64.252.107.0/24 +64.252.128.0/18 +99.82.152.0/22 +99.82.167.0/24 +150.222.14.72/31 +150.222.108.0/24 +150.222.120.246/31 +150.222.208.72/31 +176.32.125.128/26 +205.251.254.0/24 +13.34.5.49/32 +13.34.42.96/27 +13.232.0.0/14 +15.220.0.0/20 +15.248.16.0/22 +52.46.190.254/31 +52.46.191.124/31 +52.93.50.180/31 +52.93.178.142/32 +52.93.229.148/32 +52.95.243.0/24 +150.222.28.116/31 +150.222.208.84/31 +3.5.132.0/23 +13.53.0.0/16 +13.248.114.0/24 +15.177.88.0/24 +15.184.0.0/16 +15.220.56.0/21 +15.230.133.28/31 +43.224.79.246/31 +52.46.188.148/30 +52.93.71.42/32 +52.93.178.156/32 +52.93.178.180/32 +52.94.48.0/20 +54.230.224.0/19 +54.240.236.61/32 +99.78.188.0/22 +150.222.3.254/31 +150.222.15.130/31 +150.222.129.156/31 +150.222.234.62/31 +184.72.128.0/17 +205.251.248.0/24 +13.34.31.224/27 +15.220.16.0/20 +16.154.0.0/16 +52.93.127.115/32 +69.107.7.72/29 +150.222.3.246/31 +161.188.134.0/23 +3.2.41.64/26 +13.34.0.128/27 +13.34.1.32/27 +13.34.5.13/32 +13.34.41.160/27 +13.34.51.128/27 +13.34.57.128/27 +13.51.0.0/16 +15.230.39.38/31 +15.230.39.168/31 +15.230.39.204/31 +52.93.127.197/32 +52.93.127.207/32 +52.94.80.0/20 +52.94.198.112/28 +54.240.197.0/24 +71.152.0.0/17 +96.0.8.0/22 +99.83.76.0/22 +99.83.80.0/22 +104.255.59.101/32 +108.166.232.0/21 +150.222.122.100/31 +216.137.32.0/19 +13.34.14.160/27 +13.34.34.96/27 +35.181.0.0/16 +43.224.76.240/30 +52.46.191.220/31 +52.93.138.252/32 +52.93.153.171/32 +52.95.190.0/24 +54.80.0.0/13 +54.214.0.0/16 +54.254.0.0/16 +99.78.176.0/21 +104.255.59.124/32 +150.222.139.124/30 +13.248.98.0/24 +15.230.39.16/31 +15.230.39.78/31 +15.230.77.128/26 +15.230.142.0/24 +15.230.201.0/24 +52.20.0.0/14 +52.94.201.0/26 +52.94.248.208/28 +52.219.24.0/21 +69.107.6.168/29 +99.82.161.0/24 +150.222.120.250/31 +204.246.172.0/24 +13.34.76.64/27 +13.34.80.32/27 +13.244.0.0/15 +43.224.79.32/31 +43.224.79.68/31 +52.46.189.196/30 +52.93.178.197/32 +52.94.248.48/28 +54.242.0.0/15 +99.77.252.0/24 +99.151.88.0/21 +150.222.234.24/31 +177.72.240.0/21 +216.182.238.0/23 +3.5.168.0/23 +13.34.6.192/27 +13.34.48.32/27 +13.34.49.128/27 +13.34.75.224/27 +15.230.0.4/32 +15.230.16.17/32 +15.230.167.0/24 +18.168.0.0/14 +34.208.0.0/12 +52.15.0.0/16 +52.93.127.237/32 +52.93.178.226/32 +52.144.209.128/26 +64.252.124.0/24 +99.83.101.0/24 +150.222.224.0/24 +13.34.31.32/27 +13.34.63.160/27 +13.34.70.96/27 +15.221.16.0/22 +15.230.4.160/31 +15.230.39.94/31 +15.230.64.64/26 +43.224.76.100/30 +43.224.76.176/30 +43.224.77.100/30 +43.224.79.92/31 +43.224.79.232/31 +43.224.79.252/31 +52.46.188.232/30 +52.46.191.22/31 +52.93.141.218/31 +52.94.96.0/20 +52.94.192.0/22 +104.255.59.118/32 +108.175.48.0/22 +161.188.144.0/23 +13.34.8.64/27 +13.34.23.96/27 +13.34.47.32/27 +13.34.80.64/27 +15.230.16.0/32 +15.230.39.36/31 +15.230.148.0/24 +18.172.0.0/15 +18.189.0.0/16 +35.71.64.0/22 +43.224.77.140/30 +52.46.188.40/30 +52.93.121.189/32 +52.93.122.218/32 +52.93.178.204/32 +52.93.240.174/31 +52.95.52.0/22 +52.95.177.0/24 +69.107.7.128/29 +99.77.184.0/24 +150.222.208.94/31 +150.222.232.93/32 +150.222.234.96/31 +3.33.49.24/30 +3.64.0.0/12 +13.34.2.32/27 +13.34.12.96/27 +15.230.170.0/23 +16.27.0.0/16 +18.88.0.0/18 +52.93.127.178/32 +52.93.254.0/24 +52.95.175.0/24 +52.219.164.0/22 +70.232.64.0/20 +99.82.175.0/24 +99.83.88.0/21 +99.87.16.0/20 +120.52.39.128/27 +150.222.28.120/31 +150.222.232.160/28 +162.213.234.0/23 +13.34.55.192/27 +13.34.57.96/27 +15.220.136.0/21 +16.159.0.0/16 +18.34.244.0/22 +18.201.0.0/16 +43.224.79.206/31 +43.224.79.238/31 +43.224.79.244/31 +52.46.191.190/31 +52.93.153.168/32 +52.93.178.191/32 +52.95.186.0/24 +52.119.214.0/23 +52.144.215.202/31 +54.151.128.0/17 +54.240.236.73/32 +99.87.0.0/22 +118.193.97.64/26 +150.222.3.252/31 +150.222.234.76/31 +208.86.88.0/23 +13.34.20.96/27 +15.230.14.248/31 +15.230.39.74/31 +15.230.39.186/31 +15.230.90.0/24 +18.175.0.0/16 +43.224.76.120/30 +51.100.0.0/15 +52.46.190.208/31 +52.46.216.0/22 +52.93.127.203/32 +54.208.0.0/15 +54.228.0.0/16 +54.240.236.13/32 +142.4.160.48/29 +150.222.208.90/31 +150.222.213.41/32 +151.148.35.0/24 +13.34.65.192/27 +15.220.146.0/23 +43.224.76.140/30 +43.224.76.248/30 +52.93.126.205/32 +52.93.127.147/32 +52.93.133.181/32 +52.95.246.0/24 +52.144.215.2/31 +54.239.1.80/28 +99.83.64.0/21 +150.222.234.64/31 +13.34.84.96/27 +13.48.0.0/15 +15.230.39.56/31 +15.230.39.182/31 +15.230.39.230/31 +43.224.76.20/30 +43.224.79.142/31 +43.224.79.228/31 +52.46.189.36/30 +52.46.189.76/30 +52.46.190.60/30 +52.64.0.0/17 +52.93.71.41/32 +52.95.239.0/24 +52.119.210.0/23 +104.255.59.132/32 +150.222.129.69/32 +195.17.0.0/24 +13.34.5.128/27 +13.34.33.160/27 +15.221.24.0/21 +15.230.39.188/31 +15.230.39.236/31 +15.230.54.0/24 +18.220.0.0/14 +40.176.0.0/16 +52.36.0.0/14 +52.93.178.141/32 +52.94.112.0/22 +54.94.0.0/16 +69.107.6.160/29 +99.78.184.0/22 +142.4.160.168/29 +150.222.129.64/31 +150.222.207.0/24 +150.222.237.0/24 +13.34.65.96/27 +13.34.72.192/27 +15.152.0.0/16 +15.220.226.0/24 +15.230.76.192/26 +15.230.77.0/26 +15.230.169.4/31 +43.224.79.104/31 +52.93.127.180/32 +52.93.193.197/32 +52.93.248.0/24 +52.94.198.48/28 +52.95.228.0/24 +54.222.128.0/17 +96.127.0.0/17 +136.18.20.0/24 +161.188.132.0/23 +3.4.16.0/21 +13.34.25.192/27 +13.34.37.192/27 +15.221.53.0/24 +15.230.85.0/24 +52.93.50.144/31 +52.93.127.246/32 +52.93.141.240/31 +52.93.178.227/32 +52.94.224.0/20 +54.239.1.240/28 +68.79.0.0/18 +69.107.7.80/29 +69.107.7.104/29 +99.77.128.0/24 +150.222.88.0/24 +150.222.234.138/31 +223.71.71.96/27 +3.5.248.0/22 +43.224.76.128/30 +52.46.190.96/30 +52.46.191.126/31 +52.93.18.179/32 +52.93.126.147/32 +52.94.152.62/32 +52.94.196.0/24 +54.215.0.0/16 +142.4.160.208/29 +150.222.226.0/24 +150.222.230.112/31 +13.34.71.64/27 +13.34.83.32/27 +15.230.240.0/24 +18.182.0.0/16 +43.218.0.0/16 +52.46.189.112/30 +52.93.178.175/32 +52.144.230.208/31 +54.152.0.0/16 +99.77.243.0/24 +151.148.32.0/24 +176.32.125.240/31 +3.2.8.0/21 +13.34.16.192/27 +13.34.26.192/27 +16.53.0.0/16 +16.179.0.0/16 +18.178.0.0/16 +52.46.191.54/31 +52.93.71.37/32 +52.93.126.234/32 +52.93.178.131/32 +52.93.178.217/32 +52.95.164.0/23 +52.144.208.128/26 +52.144.213.64/26 +54.202.0.0/15 +54.240.208.0/22 +99.150.120.0/21 +150.222.204.0/24 +150.222.232.192/28 +150.222.234.20/31 +13.34.14.224/27 +13.34.18.128/27 +13.34.28.32/27 +13.34.45.32/27 +13.248.71.0/24 +15.181.128.0/20 +15.230.39.138/31 +15.230.39.224/31 +15.230.69.0/26 +15.230.217.0/24 +16.12.8.0/24 +16.170.0.0/15 +18.132.0.0/14 +52.46.190.224/31 +52.46.191.28/31 +52.70.0.0/15 +52.93.116.250/32 +52.93.178.214/32 +52.94.248.0/28 +52.119.212.0/23 +52.144.216.10/31 +54.239.99.0/24 +96.0.56.0/22 +108.166.224.0/21 +150.222.51.192/27 +150.222.230.118/31 +13.34.5.48/32 +13.34.48.128/27 +13.34.60.32/27 +13.34.74.0/27 +15.220.204.0/24 +15.230.9.248/32 +15.230.66.128/25 +15.230.255.0/24 +43.224.79.186/31 +52.46.188.240/30 +52.46.190.210/31 +52.93.71.28/32 +52.93.123.11/32 +52.93.127.232/32 +52.95.110.0/24 +54.240.236.62/32 +150.222.115.0/24 +150.222.230.51/32 +150.222.234.130/31 +13.34.14.192/27 +15.177.70.0/23 +15.230.39.98/31 +15.230.39.248/31 +15.230.78.128/26 +15.236.0.0/15 +18.154.0.0/15 +52.46.188.248/30 +52.46.190.64/30 +52.46.191.36/31 +52.93.50.168/31 +52.93.127.19/32 +52.93.127.216/32 +52.93.127.247/32 +52.93.178.135/32 +52.144.211.198/31 +52.219.160.0/23 +54.222.71.0/24 +64.252.84.0/24 +99.77.254.0/24 +184.72.0.0/18 +13.34.78.96/27 +13.34.80.224/27 +13.125.0.0/16 +13.248.24.0/22 +13.248.103.0/24 +15.197.28.0/23 +15.230.39.52/31 +15.230.39.160/31 +15.230.69.128/26 +35.71.100.0/24 +40.179.0.0/16 +43.195.0.0/16 +43.224.76.56/30 +43.224.79.54/31 +52.46.191.200/31 +52.93.55.160/31 +52.144.208.0/31 +54.193.0.0/16 +54.222.59.0/24 +57.104.0.0/13 +70.232.92.0/22 +99.77.247.0/24 +150.222.140.0/24 +150.222.234.32/31 +3.2.32.64/26 +13.34.9.0/27 +15.230.39.218/31 +15.230.251.2/31 +43.224.76.112/30 +43.224.79.236/31 +52.46.191.226/31 +52.93.71.39/32 +52.93.153.174/32 +52.95.61.0/24 +52.219.124.0/22 +54.240.236.82/32 +54.240.241.0/24 +64.252.88.0/24 +150.222.234.48/31 +150.222.234.122/31 +150.222.235.0/24 +176.32.125.232/31 +13.34.5.15/32 +13.248.16.0/21 +15.181.245.0/24 +15.230.39.82/31 +15.230.39.210/31 +52.46.191.20/31 +52.46.191.222/31 +52.93.240.156/31 +52.144.208.2/31 +54.46.0.0/16 +54.240.128.0/18 +54.240.236.6/32 +99.151.96.0/21 +104.255.59.88/32 +150.222.12.0/24 +150.222.116.0/24 +205.251.250.0/23 +13.34.5.47/32 +15.177.97.0/24 +15.230.39.216/31 +15.230.133.24/32 +15.230.149.10/32 +15.230.247.0/24 +35.71.68.0/22 +52.8.0.0/16 +52.46.191.48/31 +52.93.92.64/31 +52.93.121.196/32 +52.93.126.145/32 +52.93.126.204/32 +52.94.152.68/32 +52.94.249.192/28 +52.95.152.0/23 +52.95.247.0/24 +52.219.172.0/22 +64.252.83.0/24 +150.222.234.136/31 +13.34.15.0/27 +13.34.58.160/27 +15.177.64.0/23 +15.193.9.0/24 +15.230.39.20/31 +15.251.0.25/32 +43.224.77.132/30 +43.224.79.130/31 +46.51.208.0/22 +52.86.0.0/15 +52.93.127.244/32 +52.93.178.188/32 +52.93.178.201/32 +54.239.1.160/28 +54.239.1.208/28 +57.180.0.0/14 +64.252.80.0/24 +142.4.160.88/29 +150.222.3.218/31 +150.222.180.0/24 +180.163.57.0/25 +13.34.37.32/27 +13.34.83.224/27 +18.136.0.0/16 +43.224.76.164/30 +50.112.0.0/16 +52.93.91.113/32 +52.93.97.0/24 +52.93.127.206/32 +52.93.139.250/32 +150.222.234.10/31 +3.2.33.64/26 +3.2.35.192/26 +3.2.43.64/26 +3.3.16.0/21 +13.34.40.64/27 +13.212.0.0/15 +15.197.128.0/17 +15.220.233.0/24 +15.230.39.114/31 +15.230.39.150/31 +15.230.71.64/26 +18.179.0.0/16 +43.224.76.8/30 +43.224.79.46/31 +43.224.79.100/31 +52.46.189.240/30 +52.46.190.8/30 +52.93.127.162/32 +52.93.156.0/22 +52.94.136.0/21 +52.95.138.0/24 +52.219.200.0/24 +64.252.100.0/24 +150.222.120.232/31 +150.222.230.94/31 +205.251.224.0/22 +3.5.216.0/22 +3.130.0.0/16 +13.34.56.192/27 +13.57.0.0/16 +13.126.0.0/15 +13.202.0.0/15 +15.181.64.0/20 +15.230.67.192/26 +15.251.0.13/32 +15.251.0.29/32 +16.25.0.0/16 +52.93.153.175/32 +52.93.240.172/31 +52.219.202.0/23 +54.239.4.0/22 +70.232.96.0/20 +99.77.140.0/24 +104.255.59.127/32 +150.222.3.183/32 +150.222.51.224/27 +150.222.232.128/28 +3.2.39.128/26 +13.34.5.78/32 +15.230.39.222/31 +16.16.0.0/16 +40.180.0.0/16 +43.224.76.80/30 +52.46.188.96/30 +52.46.190.56/30 +52.94.14.0/24 +52.94.198.64/28 +52.119.216.0/21 +54.222.89.0/24 +150.222.129.242/31 +150.222.230.114/31 +13.34.11.0/27 +13.34.64.128/27 +13.34.69.96/27 +13.34.75.192/27 +13.34.78.32/27 +15.206.0.0/15 +15.230.204.3/32 +16.177.0.0/16 +50.18.0.0/16 +52.14.0.0/16 +52.46.0.0/18 +52.46.88.0/22 +52.46.188.28/30 +52.46.191.134/31 +96.0.72.0/21 +150.222.3.202/31 +150.222.129.226/31 +150.222.230.120/31 +223.71.11.0/27 +3.3.6.0/23 +13.34.16.224/27 +13.34.64.224/27 +15.230.16.18/31 +15.230.68.0/26 +15.230.204.0/32 +52.46.188.216/30 +52.46.191.186/31 +52.93.63.0/24 +52.93.120.176/32 +52.93.178.167/32 +54.172.0.0/15 +71.137.0.0/18 +136.18.21.0/24 +150.222.11.88/31 +150.222.239.0/24 +176.34.64.0/18 +3.5.146.0/23 +13.34.37.224/27 +13.34.73.224/27 +13.248.128.0/17 +15.230.160.0/24 +35.71.109.0/24 +43.224.77.188/30 +52.82.128.0/19 +52.93.121.187/32 +52.93.127.94/32 +52.93.127.200/32 +52.94.152.183/32 +52.95.255.96/28 +99.77.249.0/24 +99.83.98.0/24 +99.150.88.0/21 +142.4.160.16/29 +150.222.83.0/24 +150.222.208.70/31 +13.34.60.0/27 +13.34.70.128/27 +15.230.156.0/24 +15.251.0.14/32 +18.204.0.0/14 +35.178.0.0/15 +43.224.79.210/31 +52.46.188.60/30 +52.46.191.44/31 +52.46.191.92/31 +52.93.91.110/32 +52.93.127.129/32 +52.93.178.196/32 +52.94.9.0/24 +52.94.204.0/23 +52.95.180.0/24 +54.88.0.0/14 +75.2.0.0/17 +99.78.192.0/22 +150.222.3.206/31 +13.34.41.96/27 +13.34.74.128/27 +52.46.189.252/30 +52.94.116.0/22 +52.144.215.200/31 +64.252.119.0/24 +150.222.212.0/24 +208.86.90.0/23 +13.34.68.64/27 +13.34.72.224/27 +13.34.77.224/27 +15.181.248.0/24 +15.230.39.22/31 +15.230.39.252/31 +15.230.188.0/25 +15.251.0.21/32 +18.34.252.0/22 +52.29.0.0/16 +52.46.190.72/30 +52.46.191.52/31 +52.93.127.92/32 +52.93.127.175/32 +52.94.15.0/24 +52.95.35.0/24 +52.95.62.0/24 +52.95.144.0/24 +52.144.194.64/26 +52.144.209.0/26 +54.240.236.57/32 +104.255.59.131/32 +150.222.230.100/31 +150.222.234.114/31 +13.34.43.64/27 +13.52.0.0/16 +15.230.59.0/24 +15.230.63.6/32 +16.12.9.0/24 +18.180.0.0/15 +43.224.76.52/30 +46.137.128.0/18 +52.46.191.192/31 +52.93.2.0/24 +52.93.50.134/31 +52.93.127.183/32 +52.93.139.248/31 +52.93.178.128/32 +52.94.248.176/28 +52.95.184.0/23 +54.230.0.0/17 +54.230.128.0/18 +150.222.28.104/32 +150.222.230.110/31 +150.222.234.118/31 +3.2.2.0/24 +3.2.32.192/26 +13.34.4.64/27 +13.34.26.32/27 +13.34.28.128/27 +13.34.39.128/27 +13.34.48.160/27 +13.246.0.0/16 +15.221.2.0/24 +15.230.4.154/31 +15.230.79.128/26 +15.230.149.4/31 +52.46.190.36/30 +52.46.190.240/31 +52.93.99.0/24 +52.93.127.71/32 +52.93.141.244/31 +52.94.249.240/28 +52.95.40.0/24 +52.95.254.0/24 +52.144.228.192/26 +64.252.104.0/24 +69.107.6.208/29 +150.222.232.96/28 +150.222.232.226/31 +176.32.64.0/19 +13.34.23.128/27 +13.34.41.128/27 +13.34.47.192/27 +13.54.0.0/15 +13.200.0.0/15 +13.248.48.0/21 +15.230.246.0/24 +15.248.24.0/22 +52.46.188.252/30 +52.46.190.164/30 +52.46.191.18/31 +52.93.50.131/32 +52.93.193.202/32 +52.95.142.0/23 +52.95.235.0/24 +52.95.241.0/24 +52.144.233.64/31 +54.239.128.0/18 +64.252.66.0/24 +64.252.82.0/24 +99.77.144.0/24 +99.78.160.0/21 +130.176.224.0/20 +150.222.11.74/31 +150.222.28.128/31 +150.222.72.0/24 +150.222.120.224/31 +150.222.232.114/31 +3.12.0.0/16 +13.124.0.0/16 +15.230.9.46/32 +15.230.144.0/24 +15.230.157.0/24 +15.230.181.0/24 +35.71.111.0/24 +36.103.232.128/26 +52.84.0.0/15 +52.93.122.131/32 +52.93.127.255/32 +52.93.133.131/32 +52.94.18.0/24 +52.94.248.144/28 +52.192.0.0/15 +52.219.194.0/24 +54.116.0.0/16 +99.150.72.0/21 +150.222.110.0/24 +150.222.234.12/31 +3.3.5.0/24 +13.34.46.160/27 +13.34.82.128/27 +15.230.14.20/31 +15.230.63.0/31 +52.93.34.57/32 +52.93.178.162/32 +52.94.13.0/24 +52.144.233.66/31 +54.78.0.0/16 +56.157.0.0/16 +99.77.139.0/24 +99.82.160.0/24 +150.222.15.128/31 +150.222.129.158/31 +150.222.129.250/31 +150.222.217.17/32 +151.148.8.0/21 +204.246.160.0/22 +13.34.43.32/27 +13.34.63.64/27 +13.34.72.32/27 +15.193.4.0/24 +15.230.71.0/26 +15.230.203.0/24 +35.71.116.0/24 +43.224.76.36/30 +52.46.190.222/31 +52.93.92.70/31 +52.93.240.158/31 +54.239.106.0/23 +71.132.0.0/18 +99.150.40.0/21 +150.222.120.240/31 +150.222.232.118/31 +3.2.33.128/26 +3.5.212.0/23 +3.5.220.0/22 +13.34.5.81/32 +13.34.5.160/27 +13.34.51.160/27 +13.34.67.192/27 +15.177.72.0/24 +15.230.39.64/31 +15.230.42.0/24 +15.230.55.0/24 +43.224.79.66/31 +52.2.0.0/15 +52.46.191.168/31 +52.93.71.32/32 +52.93.127.125/32 +52.94.152.66/32 +52.144.214.128/26 +54.222.76.0/22 +64.252.106.0/24 +103.4.8.0/21 +104.255.59.105/32 +150.222.3.228/31 +150.222.28.17/32 +176.32.96.0/21 +184.72.64.0/18 +3.2.41.192/26 +13.34.34.160/27 +13.34.46.224/27 +13.248.108.0/24 +15.230.9.252/31 +15.251.0.15/32 +52.93.124.14/32 +52.93.126.206/32 +52.93.240.146/31 +52.95.108.0/23 +52.144.193.0/26 +99.78.168.0/23 +108.166.248.0/21 +143.204.0.0/16 +150.222.91.0/24 +13.34.17.0/27 +13.34.19.224/27 +13.34.42.224/27 +13.34.67.0/27 +13.34.81.32/27 +13.34.81.192/27 +15.181.192.0/19 +52.93.55.166/31 +52.93.123.136/32 +52.93.178.144/32 +52.93.178.154/32 +52.93.240.162/31 +52.94.23.0/24 +52.95.48.0/22 +52.219.120.0/22 +54.222.66.0/23 +54.240.232.0/22 +69.107.7.48/29 +99.77.190.0/24 +99.78.228.0/22 +150.222.3.189/32 +150.222.143.0/24 +150.222.234.28/31 +3.2.35.128/26 +13.34.56.64/27 +13.248.106.0/24 +15.230.133.17/32 +15.230.204.1/32 +15.230.220.0/24 +15.253.0.0/16 +43.224.77.120/30 +52.93.127.111/32 +52.119.224.0/21 +52.219.64.0/22 +54.238.0.0/16 +99.150.16.0/21 +150.222.28.110/31 +150.222.117.0/24 +216.182.232.0/22 +3.120.0.0/14 +13.34.57.160/27 +15.181.252.0/24 +18.198.0.0/15 +43.224.77.8/29 +52.9.0.0/16 +52.46.188.160/30 +52.46.188.188/30 +52.46.190.238/31 +52.93.38.0/24 +52.94.152.69/32 +52.144.216.4/31 +52.219.128.0/22 +69.107.7.0/29 +99.77.141.0/24 +150.222.196.0/24 +3.33.44.0/22 +13.34.36.0/27 +13.34.42.160/27 +15.248.20.0/22 +15.251.0.8/32 +27.0.0.0/22 +52.46.180.0/22 +52.46.188.80/30 +52.46.191.180/31 +52.93.98.0/24 +52.93.146.5/32 +52.93.178.146/32 +52.94.152.12/32 +52.144.233.130/31 +54.240.236.41/32 +69.107.7.112/29 +3.136.0.0/13 +13.248.99.0/24 +15.220.148.0/22 +15.230.14.12/32 +15.230.83.0/24 +43.192.0.0/16 +43.224.77.212/30 +52.46.189.228/30 +52.46.191.164/31 +52.93.37.223/32 +52.93.121.188/32 +52.93.178.178/32 +52.94.248.192/28 +54.240.236.94/32 +150.222.223.0/24 +13.34.44.32/27 +13.248.112.0/24 +15.230.39.26/31 +15.230.145.0/24 +54.239.115.0/25 +64.252.120.0/24 +150.222.3.179/32 +150.222.3.192/31 +150.222.28.138/31 +3.5.144.0/23 +13.34.35.96/27 +15.230.14.22/31 +15.230.131.0/24 +15.230.182.0/24 +15.230.222.0/24 +16.24.0.0/16 +52.93.50.138/31 +52.93.92.66/31 +52.93.127.95/32 +52.93.127.148/32 +52.94.248.112/28 +144.220.0.0/16 +150.222.234.16/31 +150.222.234.30/31 +13.34.60.192/27 +13.34.61.96/27 +13.34.70.160/27 +15.181.242.0/24 +15.197.2.0/24 +15.221.20.0/22 +15.230.70.128/26 +15.230.92.0/24 +15.230.245.0/24 +15.248.8.0/22 +52.93.50.152/31 +52.93.141.226/31 +52.93.178.176/32 +52.94.198.32/28 +54.232.0.0/16 +120.52.153.192/26 +150.222.230.126/31 +199.127.232.0/22 +13.34.42.0/27 +13.34.60.96/27 +13.34.65.224/27 +13.34.69.160/27 +15.177.78.0/24 +15.193.0.0/24 +15.230.0.14/32 +15.230.19.18/31 +15.230.39.76/31 +15.230.71.192/26 +52.66.0.0/16 +52.93.127.250/32 +52.93.240.184/31 +54.239.0.64/28 +99.82.176.0/21 +150.222.230.96/31 +204.236.192.0/18 +13.34.44.192/27 +13.34.71.192/27 +15.230.80.0/24 +35.168.0.0/13 +43.224.79.124/31 +52.46.190.234/31 +52.64.128.0/17 +52.93.127.120/32 +104.255.59.136/32 +150.222.234.3/32 +13.34.10.160/27 +13.34.46.128/27 +13.34.55.224/27 +13.34.81.0/27 +13.209.0.0/16 +15.181.40.0/21 +18.34.48.0/20 +18.34.232.0/21 +18.140.0.0/15 +43.224.79.28/31 +43.224.79.248/31 +52.46.189.224/30 +52.60.0.0/16 +52.78.0.0/16 +52.93.116.149/32 +52.93.178.129/32 +52.93.178.145/32 +52.93.193.192/32 +69.107.3.176/29 +72.44.32.0/19 +150.222.28.105/32 +205.251.236.0/22 +13.34.52.192/27 +15.181.16.0/20 +15.181.96.0/20 +15.220.192.0/22 +15.221.3.0/24 +15.248.32.0/22 +52.92.0.0/17 +52.93.127.202/32 +54.240.236.46/32 +99.150.112.0/21 +13.58.0.0/15 +43.224.76.200/30 +43.224.79.84/31 +52.46.189.204/30 +52.93.51.29/32 +52.93.178.199/32 +52.119.152.0/22 +54.194.0.0/15 +54.240.244.0/22 +69.107.7.96/29 +150.222.102.0/24 +3.33.49.28/30 +13.34.5.44/32 +13.34.21.192/27 +13.34.67.96/27 +52.93.1.0/24 +52.93.50.160/31 +52.93.55.154/31 +52.93.131.217/32 +52.94.30.0/24 +54.240.236.53/32 +54.240.236.77/32 +54.240.236.93/32 +3.98.0.0/15 +13.34.17.32/27 +13.34.70.192/27 +15.230.39.132/31 +43.224.79.40/31 +43.224.79.188/31 +52.46.191.6/31 +52.93.50.132/31 +54.66.0.0/16 +99.77.242.0/24 +142.4.160.160/29 +150.222.15.126/32 +150.222.129.255/32 +150.222.234.116/31 +150.222.236.0/24 +162.222.148.0/22 +3.4.2.0/24 +13.34.4.96/27 +13.34.31.0/27 +15.177.75.0/24 +15.220.240.0/21 +15.230.24.0/22 +15.230.39.130/31 +52.24.0.0/14 +52.46.170.0/23 +52.95.56.0/22 +52.119.160.0/20 +52.222.0.0/17 +64.252.65.0/24 +119.147.182.0/25 +13.34.9.32/27 +13.34.62.96/27 +13.248.65.0/24 +15.251.0.23/32 +43.224.79.164/31 +43.224.79.218/31 +43.224.79.224/31 +52.46.188.140/30 +52.46.191.42/31 +52.93.69.0/24 +52.93.141.242/31 +52.93.178.151/32 +52.144.210.192/26 +52.144.233.134/31 +54.239.1.144/28 +120.232.236.0/25 +150.222.234.40/31 +3.2.48.0/24 +3.13.0.0/16 +3.248.0.0/13 +15.230.39.180/31 +43.224.76.172/30 +54.92.128.0/17 +54.239.0.0/28 +99.77.133.0/24 +104.255.56.11/32 +104.255.59.83/32 +150.222.233.0/24 +150.222.234.58/31 +13.34.49.64/27 +13.34.67.32/27 +13.34.72.128/27 +13.210.0.0/15 +43.224.77.144/30 +52.93.55.164/31 +52.93.127.251/32 +52.93.178.140/32 +52.93.178.174/32 +52.94.17.0/24 +52.95.154.0/23 +52.95.212.0/22 +52.119.156.0/22 +54.239.0.240/28 +54.241.0.0/16 +99.77.151.0/24 +99.77.239.0/24 +104.255.59.91/32 +104.255.59.115/32 +150.222.164.210/32 +184.169.128.0/17 +216.182.224.0/21 +13.34.41.0/27 +13.34.61.128/27 +15.230.6.0/24 +15.230.248.0/24 +35.72.0.0/13 +43.224.77.84/30 +43.224.79.202/31 +52.93.91.98/32 +52.94.152.178/32 +54.240.236.65/32 +69.107.6.224/29 +99.150.24.0/21 +104.255.59.85/32 +150.222.230.128/31 +150.222.234.124/31 +3.8.0.0/14 +13.248.60.0/22 +18.246.0.0/16 +52.46.190.216/31 +52.93.127.160/32 +52.93.133.127/32 +52.93.139.252/32 +52.93.141.230/31 +52.93.178.232/32 +52.94.198.0/28 +52.219.176.0/22 +54.204.0.0/15 +69.107.7.8/29 +150.222.67.0/24 +150.222.120.255/32 +150.222.129.110/31 +150.222.232.112/31 +13.34.75.128/27 +15.230.39.202/31 +15.230.180.0/24 +16.12.12.0/23 +52.46.191.150/31 +52.93.127.204/32 +52.93.178.132/32 +52.194.0.0/15 +54.155.0.0/16 +54.196.0.0/15 +99.78.170.0/23 +142.4.160.176/29 +176.32.125.226/31 +3.5.80.0/21 +13.34.42.32/27 +15.190.16.0/20 +15.230.4.158/31 +15.230.39.42/31 +15.230.39.250/31 +15.230.169.0/31 +18.34.240.0/22 +35.71.97.0/24 +35.152.0.0/16 +52.46.188.52/30 +52.46.188.64/30 +52.46.191.194/31 +52.93.127.119/32 +52.93.127.153/32 +52.94.252.0/23 +52.144.215.198/31 +52.219.156.0/22 +54.222.57.0/24 +99.83.128.0/17 +99.150.0.0/21 +150.222.129.146/31 +3.2.38.0/26 +13.34.53.128/27 +13.34.55.128/27 +13.34.57.192/27 +13.34.66.224/27 +13.248.123.0/24 +15.230.35.0/24 +43.224.77.168/30 +52.46.189.12/30 +52.46.191.26/31 +52.93.127.100/32 +52.93.249.0/24 +150.222.129.126/31 +150.222.234.22/31 +150.222.234.72/31 +207.171.160.0/20 +13.34.51.96/27 +13.34.58.192/27 +15.230.39.8/31 +43.224.77.148/30 +52.46.190.226/31 +52.94.7.0/24 +52.95.60.0/24 +136.18.23.0/24 +13.34.25.128/27 +13.34.29.32/27 +13.34.68.128/27 +13.34.78.128/27 +15.220.220.0/23 +15.221.48.0/24 +35.156.0.0/14 +52.93.18.178/32 +52.93.178.177/32 +52.144.209.64/26 +54.239.102.162/31 +136.18.19.0/24 +150.222.92.0/22 +161.188.138.0/23 +3.16.0.0/14 +13.34.30.32/27 +13.34.40.32/27 +15.191.0.0/16 +15.230.0.8/31 +15.230.39.164/31 +15.251.0.6/32 +16.79.0.0/16 +18.130.0.0/16 +52.46.188.224/30 +52.72.0.0/15 +52.82.180.0/22 +52.93.35.213/32 +52.93.141.222/31 +54.182.0.0/16 +54.222.70.0/24 +58.254.138.128/26 +99.77.24.0/22 +99.151.64.0/21 +120.253.245.192/27 +150.222.208.80/31 +150.222.232.144/28 +13.34.5.79/32 +13.34.54.192/27 +13.34.58.96/27 +43.224.76.232/30 +43.224.79.112/31 +52.46.191.202/31 +52.62.0.0/15 +52.93.0.0/24 +52.93.19.237/32 +52.93.126.212/32 +52.93.141.236/31 +52.94.249.224/28 +52.219.44.0/22 +54.222.92.0/22 +54.239.192.0/19 +98.130.0.0/16 +99.82.162.0/24 +150.222.28.118/31 +150.222.70.0/24 +150.222.122.116/31 +176.32.125.192/27 +176.32.125.238/31 +15.230.60.0/24 +16.12.14.0/24 +16.50.0.0/15 +43.224.77.104/30 +52.46.191.90/31 +52.46.191.224/31 +52.93.133.179/32 +52.94.152.176/32 +52.144.211.200/31 +52.219.56.0/22 +54.160.0.0/13 +150.222.118.0/24 +150.222.232.51/32 +150.222.234.38/31 +157.175.0.0/16 +176.34.32.0/19 +13.34.22.128/27 +13.34.36.32/27 +13.34.66.32/27 +13.248.125.0/24 +15.230.39.234/31 +15.230.66.0/25 +43.224.76.12/30 +43.224.79.2/31 +43.224.79.182/31 +52.93.126.130/32 +52.93.127.164/32 +52.93.245.0/24 +52.94.152.179/32 +52.95.16.0/21 +54.234.0.0/15 +13.34.33.128/27 +13.34.76.32/27 +15.220.248.0/23 +15.230.39.116/31 +15.230.58.0/24 +18.68.0.0/16 +43.224.76.44/30 +52.93.67.0/24 +52.95.64.0/20 +52.95.225.0/24 +52.219.169.0/24 +54.240.236.66/32 +99.77.32.0/20 +99.77.154.0/24 +99.77.245.0/24 +150.222.11.0/31 +150.222.11.80/31 +172.96.97.0/24 +3.14.0.0/15 +15.177.81.0/24 +16.12.0.0/23 +18.64.0.0/14 +18.228.0.0/16 +43.224.79.160/31 +52.16.0.0/15 +52.46.191.240/31 +52.93.126.122/32 +52.93.127.199/32 +52.95.28.0/24 +52.95.146.0/23 +52.95.242.0/24 +52.144.212.192/26 +52.219.184.0/21 +120.52.12.64/26 +150.222.27.234/31 +150.222.208.86/31 +161.189.0.0/16 +13.34.50.192/27 +13.34.80.128/27 +15.177.84.0/24 +15.220.250.0/23 +43.224.79.62/31 +43.224.79.192/31 +52.46.188.108/30 +52.93.32.180/32 +52.93.87.96/27 +52.93.127.102/32 +52.94.249.176/28 +52.94.254.0/23 +54.153.0.0/17 +71.136.64.0/18 +96.0.60.0/22 +13.34.38.32/27 +13.34.42.128/27 +13.34.47.128/27 +13.34.79.32/27 +15.177.98.0/24 +15.200.0.0/16 +15.220.236.0/22 +15.230.39.128/31 +35.154.0.0/16 +43.224.76.132/30 +52.46.190.120/30 +52.82.0.0/17 +52.93.127.185/32 +52.93.153.172/32 +52.94.249.32/28 +54.239.0.160/28 +54.240.227.0/24 +104.255.59.102/32 +150.222.129.130/31 +3.2.36.0/25 +13.34.5.17/32 +13.34.26.128/27 +13.34.69.128/27 +15.230.39.176/31 +15.230.82.0/24 +15.230.252.0/24 +15.251.0.22/32 +35.71.107.0/24 +43.224.79.108/31 +52.46.190.4/30 +52.46.191.108/31 +52.46.191.120/31 +52.93.149.0/24 +52.93.178.150/32 +52.93.178.164/32 +52.93.178.198/32 +52.93.178.203/32 +52.94.250.32/28 +52.144.228.64/26 +52.218.128.0/17 +76.223.0.0/17 +99.84.0.0/16 +150.222.139.116/30 +13.34.59.192/27 +15.230.39.198/31 +15.230.52.0/24 +15.230.72.128/26 +15.230.86.0/24 +43.224.79.180/31 +52.46.191.46/31 +52.46.191.228/31 +52.93.124.210/32 +52.93.127.157/32 +52.94.160.0/20 +52.144.228.2/31 +54.240.199.0/24 +64.252.115.0/24 +99.77.161.0/24 +150.222.234.103/32 +3.2.39.64/26 +13.34.8.96/27 +13.34.23.160/27 +13.34.49.96/27 +15.230.136.0/24 +52.46.188.144/30 +52.93.127.130/32 +52.93.247.0/25 +99.83.112.0/21 +104.255.59.87/32 +104.255.59.139/32 +150.222.208.92/31 +13.34.24.192/27 +13.34.33.32/27 +13.34.52.224/27 +15.181.249.0/24 +15.220.205.0/24 +15.230.39.80/31 +15.230.68.64/26 +15.230.223.0/31 +43.224.76.196/30 +43.224.76.236/30 +43.224.77.172/30 +52.46.190.12/30 +52.88.0.0/15 +52.93.32.176/32 +52.93.193.194/32 +69.107.7.64/29 +3.5.244.0/22 +13.34.5.12/32 +15.221.40.0/21 +15.230.39.144/31 +15.230.149.0/31 +15.230.206.0/24 +16.12.18.0/23 +18.253.0.0/16 +52.46.190.244/31 +52.46.192.0/20 +52.82.187.0/24 +52.93.126.76/32 +52.93.139.253/32 +52.93.178.139/32 +52.94.249.112/28 +52.219.140.0/24 +54.240.236.21/32 +198.99.2.0/24 +13.34.18.224/27 +13.34.47.160/27 +52.46.188.152/30 +52.93.121.198/32 +52.93.150.0/24 +52.95.112.0/20 +52.95.188.0/23 +63.246.120.0/21 +99.78.196.0/22 +104.255.59.106/32 +130.176.192.0/19 +13.34.3.192/27 +13.34.28.0/27 +15.230.16.22/31 +15.230.143.0/24 +18.153.0.0/16 +18.202.0.0/15 +52.46.188.184/30 +52.46.189.44/30 +52.46.191.132/31 +52.93.178.229/32 +54.239.1.48/28 +54.240.236.25/32 +150.222.231.0/24 +176.32.104.0/21 +13.34.54.0/27 +15.230.39.106/31 +15.230.198.0/24 +52.46.188.180/30 +52.93.126.207/32 +52.93.127.249/32 +52.93.178.158/32 +52.95.163.0/24 +54.240.236.50/32 +64.252.98.0/24 +99.78.220.0/22 +150.222.129.124/31 +216.182.236.0/23 +3.5.32.0/22 +3.208.0.0/12 +13.248.64.0/24 +15.221.0.0/24 +15.230.0.5/32 +15.230.39.48/31 +15.230.39.238/31 +15.230.166.0/24 +43.224.79.120/31 +43.224.79.178/31 +54.222.64.0/23 +54.240.236.58/32 +99.77.157.0/24 +99.83.99.0/24 +130.176.254.0/24 +142.4.160.72/29 +142.4.160.152/29 +150.222.3.188/32 +185.48.120.0/22 +13.34.77.0/27 +13.34.83.96/27 +52.46.188.56/30 +52.46.190.232/31 +52.46.191.106/31 +52.93.127.138/32 +52.93.153.173/32 +52.93.178.173/32 +52.94.206.0/23 +54.233.128.0/17 +142.4.160.104/29 +150.222.122.110/31 +150.222.129.20/31 +150.222.129.240/31 +150.222.139.120/30 +150.222.232.208/28 +203.83.220.0/22 +204.45.0.0/16 +13.34.80.96/27 +15.220.206.0/24 +15.221.52.0/24 +15.230.39.156/31 +15.230.77.192/26 +43.224.76.0/30 +52.46.191.122/31 +52.93.91.103/32 +52.93.127.146/32 +52.95.80.0/20 +52.219.132.0/22 +150.222.129.150/32 +150.222.208.65/32 +150.222.217.234/31 +161.188.152.0/23 +176.32.124.128/25 +184.73.0.0/16 +13.34.73.128/27 +13.248.109.0/24 +15.160.0.0/16 +15.177.80.0/24 +15.230.129.0/24 +43.196.0.0/16 +52.46.191.34/31 +52.93.34.42/32 +52.93.127.26/32 +52.144.224.192/26 +52.219.80.0/20 +54.174.0.0/15 +54.240.236.90/32 +150.222.234.46/31 +13.34.12.224/27 +13.34.35.128/27 +13.230.0.0/15 +13.248.111.0/24 +15.230.5.0/24 +15.230.196.0/24 +43.224.77.208/30 +43.249.46.0/24 +52.93.4.0/24 +52.93.59.0/24 +52.93.127.109/32 +52.94.198.96/28 +52.94.249.160/28 +52.144.194.128/26 +52.144.201.64/26 +52.144.210.128/26 +52.144.211.202/31 +52.219.112.0/21 +54.224.0.0/15 +54.239.32.0/21 +150.222.120.244/31 +13.34.49.32/27 +13.248.28.0/22 +15.220.234.0/23 +15.230.74.0/26 +18.176.0.0/15 +52.46.189.120/30 +52.93.127.154/32 +52.219.144.0/22 +54.239.56.0/21 +54.240.236.17/32 +64.252.86.0/24 +99.82.165.0/24 +150.222.3.194/31 +150.222.3.204/31 +150.222.6.0/24 +150.222.28.134/31 +3.20.0.0/14 +13.34.44.160/27 +15.156.0.0/15 +15.230.16.252/31 +15.230.39.246/31 +15.254.0.0/16 +18.196.0.0/15 +43.224.79.90/31 +43.224.79.138/31 +52.46.188.164/30 +52.46.189.48/30 +52.46.191.170/31 +52.93.50.194/31 +52.93.66.0/24 +54.76.0.0/15 +150.222.3.210/31 +150.222.28.124/31 +205.251.192.0/21 +3.80.0.0/12 +3.101.0.0/16 +13.34.47.96/27 +15.230.39.228/31 +15.230.93.0/24 +43.224.77.76/30 +52.40.0.0/14 +52.46.190.180/31 +52.93.50.154/31 +52.93.124.15/32 +52.93.126.213/32 +52.94.152.64/32 +52.95.170.0/23 +52.124.128.0/17 +54.240.236.29/32 +150.222.3.224/31 +150.222.77.0/24 +150.222.90.0/24 +13.34.75.32/27 +15.230.39.90/31 +43.198.0.0/15 +43.224.79.204/31 +52.46.189.0/30 +52.46.189.136/30 +52.94.11.0/24 +52.144.200.128/26 +54.240.196.0/24 +99.150.104.0/21 +150.222.66.0/24 +150.222.129.246/31 +204.246.164.0/22 +13.34.43.224/27 +13.34.64.0/27 +13.34.80.192/27 +15.230.28.0/24 +16.178.0.0/16 +35.71.101.0/24 +43.224.77.32/30 +52.93.127.165/32 +52.94.198.128/28 +52.95.248.0/24 +54.239.0.176/28 +54.239.103.128/26 +64.252.70.0/24 +64.252.116.0/24 +150.222.234.44/31 +150.222.234.82/31 +13.34.5.16/32 +13.34.26.160/27 +13.35.0.0/16 +15.230.39.178/31 +15.230.75.64/26 +15.230.194.0/24 +15.230.207.0/24 +16.12.4.0/23 +18.88.128.0/18 +34.240.0.0/13 +43.224.79.122/31 +52.93.14.19/32 +52.93.178.218/32 +52.93.193.193/32 +52.94.248.16/28 +52.94.249.96/28 +52.144.216.8/31 +54.240.200.0/24 +54.253.0.0/16 +150.222.15.127/32 +150.222.234.66/31 +13.34.17.96/27 +13.34.29.192/27 +15.230.73.0/26 +18.162.0.0/16 +52.46.191.70/31 +52.93.141.224/31 +52.94.146.0/24 +52.95.30.0/23 +52.95.96.0/22 +52.95.145.0/24 +52.144.223.64/26 +54.47.0.0/16 +150.222.219.0/24 +176.32.125.246/31 +3.2.34.192/26 +3.2.35.0/26 +3.3.0.0/23 +13.34.7.64/27 +13.34.58.224/27 +13.34.76.192/27 +16.182.0.0/16 +52.32.0.0/14 +52.93.126.144/32 +52.93.178.155/32 +52.95.252.0/24 +52.119.192.0/22 +54.222.36.0/22 +150.222.129.136/31 +150.222.142.0/24 +150.222.222.0/24 +13.34.27.64/27 +15.251.0.24/32 +43.224.76.156/30 +52.46.189.56/30 +52.46.191.0/31 +52.46.191.94/31 +52.93.121.190/32 +52.93.127.110/32 +52.93.127.181/32 +52.93.127.245/32 +52.94.248.64/28 +52.95.229.0/24 +54.72.0.0/15 +150.222.3.184/32 +150.222.3.191/32 +150.222.129.128/31 +150.222.234.70/31 +3.2.42.0/26 +3.5.56.0/22 +13.34.12.192/27 +13.34.39.0/27 +15.230.9.44/32 +15.230.16.198/31 +15.230.186.0/24 +43.224.79.116/31 +52.93.126.214/32 +52.93.127.173/32 +52.93.138.12/32 +52.93.178.202/32 +52.95.250.0/24 +52.144.211.0/26 +64.252.67.0/24 +130.176.255.0/24 +150.222.3.230/31 +150.222.113.0/24 +3.5.148.0/22 +13.34.74.192/27 +15.230.163.0/24 +15.230.177.2/31 +43.224.79.102/31 +52.46.191.172/31 +52.93.127.117/32 +52.93.127.156/32 +54.198.0.0/16 +64.252.77.0/24 +150.222.122.108/31 +13.34.30.192/27 +13.34.34.32/27 +15.164.0.0/15 +15.230.150.0/23 +15.251.0.1/32 +43.224.79.98/31 +52.46.96.0/19 +52.46.128.0/19 +52.46.191.214/31 +52.82.171.0/24 +52.93.127.166/32 +52.93.178.228/32 +54.239.0.128/28 +54.239.1.32/28 +176.32.125.242/31 +176.34.128.0/17 +13.34.33.224/27 +15.230.63.4/31 +43.224.76.72/30 +52.46.189.172/30 +52.93.127.128/32 +52.93.127.205/32 +52.93.178.216/32 +52.94.152.181/32 +54.239.0.192/28 +99.83.96.0/24 +3.2.32.0/26 +13.34.18.160/27 +13.34.40.224/27 +13.34.52.128/27 +13.34.64.160/27 +15.221.1.0/24 +15.230.39.214/31 +15.230.68.128/26 +43.208.0.0/15 +52.46.191.4/31 +52.93.71.43/32 +52.93.91.109/32 +52.93.127.123/32 +150.222.210.0/24 +150.222.234.60/31 +3.2.42.192/26 +13.34.33.192/27 +13.34.59.0/27 +13.34.69.192/27 +13.184.0.0/13 +15.177.0.0/18 +15.181.244.0/24 +15.230.53.0/24 +15.230.74.64/26 +18.194.0.0/15 +43.224.79.140/31 +43.224.79.230/31 +52.46.64.0/20 +52.46.191.152/31 +52.93.50.186/31 +52.93.126.136/32 +52.93.178.212/32 +52.94.197.0/24 +52.94.249.128/28 +52.144.193.64/26 +54.184.0.0/13 +54.239.16.0/20 +99.82.163.0/24 +142.4.160.96/29 +150.222.0.0/24 +150.222.11.96/31 +150.222.230.93/32 +3.6.0.0/15 +13.34.44.128/27 +13.34.45.192/27 +15.181.120.0/21 +15.193.1.0/24 +15.230.39.96/31 +15.251.0.11/32 +35.71.108.0/24 +43.224.76.68/30 +43.224.79.168/31 +52.46.80.0/21 +52.46.184.0/22 +52.46.189.64/30 +52.46.189.104/30 +52.46.191.86/31 +52.67.0.0/16 +52.93.43.0/24 +52.93.78.0/24 +54.239.116.0/22 +150.222.28.112/31 +150.222.217.232/31 +13.34.75.160/27 +15.230.4.176/28 +15.230.22.0/24 +15.230.62.0/24 +15.230.69.192/26 +18.138.0.0/15 +40.178.0.0/16 +40.181.0.0/16 +52.46.188.236/30 +52.93.126.251/32 +52.93.193.201/32 +52.94.249.48/28 +52.95.255.144/28 +54.239.1.176/28 +54.239.1.192/28 +63.246.114.0/23 +99.77.246.0/24 +204.246.174.0/23 +3.2.33.192/26 +13.34.16.64/27 +13.34.22.224/27 +13.34.30.224/27 +13.34.76.224/27 +13.34.78.0/27 +13.248.115.0/24 +15.230.154.0/23 +43.224.79.78/31 +52.46.189.4/30 +52.52.0.0/15 +52.93.32.179/32 +52.144.197.128/26 +52.219.152.0/22 +54.233.64.0/18 +70.232.120.0/22 +76.223.128.0/24 +150.222.129.144/31 +150.222.129.224/31 +161.188.150.0/23 +3.34.0.0/15 +13.34.50.160/27 +13.34.53.64/27 +13.34.57.224/27 +13.34.67.128/27 +15.177.74.0/24 +15.197.3.0/24 +15.230.56.0/24 +15.230.75.128/26 +15.230.169.3/32 +35.71.121.0/24 +43.224.77.36/30 +52.46.172.0/22 +52.46.191.12/31 +52.65.0.0/16 +52.93.19.236/32 +52.94.200.0/24 +52.119.188.0/22 +52.144.194.0/26 +54.150.0.0/16 +150.222.7.0/24 +150.222.208.78/31 +150.222.232.120/31 +13.34.65.32/27 +13.34.70.32/27 +13.34.71.128/27 +13.34.82.64/27 +13.40.0.0/14 +13.248.104.0/24 +15.177.96.0/24 +15.181.251.0/24 +16.12.40.0/23 +34.248.0.0/13 +43.224.76.204/30 +43.224.79.216/31 +52.46.189.92/30 +52.93.237.0/24 +52.94.148.0/22 +52.144.233.132/31 +64.252.109.0/24 +69.234.192.0/18 +142.4.160.32/29 +142.4.160.112/29 +161.188.160.0/23 +3.5.0.0/19 +15.221.128.0/22 +15.230.73.64/26 +15.230.78.0/26 +36.103.232.0/25 +43.224.76.244/30 +52.46.164.0/23 +54.178.0.0/16 +67.220.224.0/20 +99.82.168.0/24 +104.255.59.137/32 +108.128.0.0/13 +150.222.3.216/31 +150.222.15.132/31 +150.222.221.0/24 +150.222.232.124/32 +13.34.74.160/27 +13.248.126.0/24 +15.230.39.120/31 +15.251.0.26/32 +18.100.0.0/15 +52.93.91.106/32 +52.119.205.0/24 +52.144.227.64/26 +54.239.1.64/28 +54.240.236.14/32 +54.240.236.30/32 +96.0.64.0/21 +119.147.182.128/26 +150.222.234.8/31 +150.222.234.134/31 +13.34.41.32/27 +13.34.55.160/27 +13.34.61.160/27 +13.34.76.128/27 +13.248.66.0/24 +15.177.87.0/24 +15.230.50.0/24 +15.230.249.0/24 +43.224.77.80/30 +52.94.4.0/24 +52.94.72.0/22 +52.94.250.0/28 +54.222.48.0/22 +54.240.228.0/23 +64.252.71.0/24 +64.252.114.0/24 +104.255.56.12/32 +150.222.234.106/31 +176.32.120.0/22 +13.34.31.128/27 +15.177.85.0/24 +15.181.246.0/24 +15.230.75.0/26 +52.46.189.52/30 +52.93.50.170/31 +52.93.50.192/31 +52.93.178.233/32 +52.94.152.61/32 +52.95.251.0/24 +54.239.102.236/31 +72.41.0.0/20 +96.0.24.0/21 +96.0.36.0/22 +118.193.97.128/25 +136.18.22.0/24 +150.222.129.66/31 +13.34.25.160/27 +13.34.48.96/27 +13.34.50.96/27 +13.34.55.96/27 +13.34.73.64/27 +15.177.91.0/24 +15.230.39.102/31 +15.230.41.0/24 +15.230.223.2/31 +15.230.242.0/24 +35.155.0.0/16 +52.46.191.100/31 +52.93.141.216/31 +52.95.181.0/24 +52.144.230.0/26 +54.210.0.0/15 +54.239.2.0/23 +54.240.236.70/32 +64.252.75.0/24 +99.151.136.0/21 +150.222.3.181/32 +150.222.3.248/31 +150.222.76.0/24 +13.34.13.128/27 +13.34.36.64/27 +13.34.46.64/27 +13.34.66.64/27 +13.248.116.0/24 +15.181.240.0/24 +16.78.0.0/16 +52.76.0.0/17 +52.93.48.0/24 +52.93.125.42/32 +52.93.193.203/32 +52.93.240.200/31 +52.144.216.6/31 +52.219.208.0/23 +54.240.220.0/22 +99.77.28.0/22 +120.232.236.128/26 +150.222.28.114/31 +13.34.23.32/27 +13.34.23.192/27 +13.34.27.96/27 +13.34.27.128/27 +13.34.34.128/27 +13.248.69.0/24 +15.230.9.14/31 +43.224.79.44/31 +52.18.0.0/15 +52.93.21.14/32 +52.93.76.0/24 +52.93.91.99/32 +52.93.127.98/32 +52.93.178.171/32 +52.94.19.0/24 +54.222.68.0/23 +54.239.1.112/28 +54.239.52.0/23 +107.176.0.0/15 +108.166.240.0/21 +175.41.192.0/18 +205.251.228.0/22 +13.34.2.160/27 +13.34.36.128/27 +15.220.44.0/22 +15.230.195.0/24 +15.248.48.0/21 +43.224.76.48/30 +52.46.190.206/31 +54.239.0.32/28 +99.151.144.0/21 +104.255.59.81/32 +150.222.3.196/31 +150.222.122.114/31 +13.34.9.76/32 +13.34.49.192/27 +15.230.39.172/31 +15.230.205.0/24 +43.224.77.156/30 +52.10.0.0/15 +52.46.188.132/30 +52.46.188.172/30 +52.82.164.0/22 +52.93.127.184/32 +52.93.178.149/32 +54.240.230.0/23 +75.79.0.0/16 +100.24.0.0/13 +104.255.59.125/32 +151.148.34.0/24 +13.34.39.224/27 +13.34.63.192/27 +15.230.39.6/31 +15.230.176.0/24 +15.248.40.0/22 +52.46.190.52/30 +52.46.191.84/31 +52.93.127.149/32 +52.144.208.64/26 +99.78.172.0/24 +150.222.129.138/31 +150.222.136.0/24 +3.4.4.0/24 +3.33.128.0/17 +15.251.0.4/32 +43.224.79.114/31 +52.46.191.232/31 +52.46.249.0/24 +52.93.127.220/32 +52.93.240.190/31 +52.144.216.0/31 +54.239.1.0/28 +99.77.237.0/24 +99.150.64.0/21 +150.222.129.114/31 +150.222.217.226/31 +162.213.233.0/24 +13.34.72.96/27 +13.248.101.0/24 +15.230.39.84/31 +15.230.39.190/31 +15.230.161.0/24 +52.46.190.190/31 +52.93.91.97/32 +52.93.91.107/32 +52.95.255.0/28 +54.176.0.0/15 +54.246.0.0/16 +64.252.112.0/24 +99.83.72.0/22 +150.222.3.222/31 +150.222.129.120/31 +15.230.4.152/31 +15.230.169.2/32 +16.162.0.0/15 +52.93.127.168/32 +52.119.184.0/22 +52.144.211.194/31 +54.239.104.0/23 +54.240.236.86/32 +99.77.16.0/21 +204.246.176.0/20 +3.33.49.240/31 +13.34.2.128/27 +13.34.62.128/27 +15.181.32.0/21 +15.181.116.0/22 +15.197.24.0/22 +15.230.43.0/24 +35.71.106.0/24 +43.224.76.116/30 +52.93.127.152/32 +52.93.178.208/32 +52.219.196.0/22 +54.222.96.0/22 +65.8.0.0/16 +150.222.122.112/31 +150.222.230.116/31 +13.34.11.160/27 +13.34.48.64/27 +15.177.93.0/24 +15.181.243.0/24 +15.230.23.0/24 +15.230.39.142/31 +43.224.76.216/30 +52.93.178.172/32 +52.93.178.225/32 +52.94.20.0/24 +54.240.236.37/32 +99.77.189.0/24 +150.222.122.98/31 +3.5.232.0/22 +3.28.0.0/15 +13.34.44.96/27 +13.34.52.160/27 +13.34.78.192/27 +15.230.61.0/24 +15.230.88.0/24 +43.224.77.88/30 +51.16.0.0/15 +52.46.191.166/31 +52.93.58.32/28 +52.93.178.190/32 +52.144.230.210/31 +54.79.0.0/16 +54.240.236.42/32 +54.251.0.0/16 +104.255.59.86/32 +150.222.11.94/31 +150.222.206.0/24 +209.54.176.0/21 +3.128.0.0/15 +13.34.39.160/27 +13.34.56.128/27 +13.34.82.192/27 +13.248.107.0/24 +15.230.39.70/31 +15.230.39.232/31 +15.230.57.0/24 +18.254.0.0/16 +43.224.76.220/30 +43.224.79.240/31 +52.93.50.172/31 +52.94.240.0/22 +52.144.210.64/26 +64.252.105.0/24 +150.222.11.76/31 +150.222.15.125/32 +150.222.138.0/24 +150.222.234.2/32 +3.4.24.0/21 +13.34.61.192/27 +15.220.224.0/23 +15.230.30.0/24 +15.230.64.128/26 +15.230.84.0/24 +43.224.76.224/30 +52.46.188.208/30 +52.93.126.134/32 +52.144.212.64/26 +54.207.0.0/16 +65.9.0.0/17 +69.107.6.112/29 +99.77.145.0/24 +99.150.96.0/21 +108.138.0.0/15 +120.253.241.160/27 +150.222.234.120/31 +13.34.69.32/27 +15.197.20.0/22 +35.71.105.0/24 +43.224.79.220/31 +52.28.0.0/16 +52.46.166.0/23 +52.46.176.0/22 +52.93.32.183/32 +52.93.178.235/32 +99.87.8.0/21 +13.34.46.96/27 +13.34.49.160/27 +13.34.54.160/27 +13.34.73.32/27 +43.224.79.60/31 +52.46.190.44/30 +52.46.191.188/31 +52.93.127.103/32 +52.93.178.163/32 +52.93.178.193/32 +52.94.0.0/22 +99.77.48.0/21 +150.222.129.151/32 +205.251.240.0/22 +3.0.0.0/15 +3.33.34.0/24 +13.34.14.128/27 +13.34.53.96/27 +13.34.57.32/27 +13.34.79.224/27 +13.248.102.0/24 +15.220.112.0/21 +15.230.19.252/31 +15.230.199.0/28 +43.224.79.26/31 +43.250.193.0/24 +52.46.190.242/31 +52.77.0.0/16 +52.93.21.15/32 +52.93.178.160/32 +52.93.178.207/32 +64.252.99.0/24 +69.107.7.32/29 +150.222.129.142/31 +3.5.236.0/22 +13.34.7.96/27 +15.181.250.0/24 +15.190.0.0/22 +15.193.10.0/24 +15.230.94.0/24 +15.230.133.30/31 +52.46.191.110/31 +52.93.116.251/32 +52.93.153.178/32 +52.144.192.64/26 +54.240.192.0/22 +54.240.236.9/32 +99.151.152.0/21 +150.222.97.0/24 +150.222.232.94/31 +150.222.234.0/32 +13.34.50.64/27 +15.230.39.58/31 +15.230.39.100/31 +15.230.39.112/31 +15.230.244.0/24 +18.166.0.0/15 +43.224.79.184/31 +52.46.188.168/30 +52.46.191.102/31 +52.46.191.140/31 +52.46.240.0/22 +52.92.128.0/17 +52.93.71.47/32 +52.93.178.148/32 +52.93.240.176/31 +52.94.28.0/23 +52.94.248.128/28 +54.239.100.0/23 +99.77.160.0/24 +99.77.250.0/24 +150.222.214.0/24 +176.32.125.248/31 +3.33.49.242/31 +13.34.20.32/27 +13.34.36.96/27 +13.34.51.64/27 +13.34.77.128/27 +15.220.128.0/21 +15.230.39.62/31 +15.230.179.0/29 +18.183.0.0/16 +46.137.0.0/17 +52.93.34.124/31 +52.93.60.0/24 +52.93.127.132/32 +52.93.127.158/32 +70.232.112.0/21 +99.77.135.0/24 +104.255.59.135/32 +151.148.38.0/24 +13.34.5.112/32 +13.34.59.32/27 +15.177.92.0/24 +15.193.8.0/24 +15.197.30.0/23 +15.220.160.0/21 +15.230.177.4/32 +52.82.192.0/18 +52.93.12.13/32 +52.93.50.150/31 +52.93.91.104/32 +52.93.123.99/32 +52.93.178.186/32 +54.239.96.0/24 +54.240.226.0/24 +54.240.236.81/32 +99.78.216.0/22 +136.8.0.0/16 +150.222.75.0/24 +150.222.229.0/24 +176.32.125.224/31 +3.3.2.0/24 +3.5.134.0/23 +13.34.34.224/27 +13.228.0.0/15 +15.220.40.0/22 +15.230.39.86/31 +43.224.76.160/30 +43.224.79.36/31 +52.93.127.176/32 +52.93.178.221/32 +52.94.248.96/28 +52.119.128.0/20 +52.119.144.0/21 +52.196.0.0/14 +54.240.236.89/32 +99.77.150.0/24 +99.78.208.0/22 +150.222.3.220/31 +150.222.230.122/31 +209.54.184.0/21 +3.5.52.0/22 +3.5.224.0/22 +13.34.51.0/27 +15.230.39.148/31 +52.46.188.156/30 +52.46.191.82/31 +52.82.188.0/22 +52.93.178.153/32 +54.222.58.32/28 +69.107.7.120/29 +96.0.48.0/21 +99.77.186.0/24 +150.222.208.96/31 +150.222.234.102/32 +176.32.125.0/25 +13.34.28.192/27 +13.34.60.64/27 +13.34.80.160/27 +13.34.84.0/27 +15.177.68.0/23 +15.230.71.128/26 +15.230.190.0/25 +43.224.76.4/30 +43.224.76.228/30 +43.224.79.166/31 +51.92.0.0/14 +52.46.188.92/30 +52.93.50.158/31 +52.93.127.252/32 +150.222.208.64/32 +177.71.128.0/17 +192.26.25.0/24 +99.77.244.0/24 +99.77.238.0/24 +99.77.240.0/24 +99.77.251.0/24 +99.77.248.0/24 +99.77.233.0/24 +99.77.235.0/24 +99.77.234.0/24 +99.77.253.0/24 +99.77.236.0/24 +99.77.241.0/24 +99.77.252.0/24 +99.77.243.0/24 +99.77.254.0/24 +99.77.247.0/24 +99.77.249.0/24 +99.77.242.0/24 +99.77.239.0/24 +99.77.245.0/24 +99.77.246.0/24 +99.77.237.0/24 +99.77.250.0/24 +15.177.0.0/18 +3.5.140.0/22 +52.219.170.0/23 +52.219.168.0/24 +52.95.150.0/24 +52.219.60.0/23 +16.12.6.0/23 +16.12.32.0/22 +52.219.204.0/22 +76.223.102.0/24 +52.95.182.0/23 +18.34.248.0/22 +76.223.96.0/24 +108.175.56.0/22 +52.219.192.0/23 +16.12.24.0/21 +52.95.136.0/23 +52.219.143.0/24 +3.5.40.0/22 +3.5.136.0/22 +52.219.72.0/22 +52.219.68.0/22 +3.5.160.0/22 +13.248.230.0/24 +52.95.174.0/24 +52.95.187.0/24 +16.12.48.0/21 +52.219.141.0/24 +52.95.139.0/24 +52.95.128.0/21 +52.95.178.0/23 +3.5.36.0/22 +18.34.32.0/20 +52.95.168.0/24 +52.219.16.0/22 +3.5.208.0/22 +18.34.0.0/19 +16.12.15.0/24 +18.34.72.0/21 +16.12.10.0/23 +52.219.148.0/23 +3.5.128.0/22 +52.219.195.0/24 +3.5.72.0/23 +52.95.166.0/23 +16.12.20.0/24 +52.95.169.0/24 +3.5.152.0/21 +16.12.16.0/23 +52.218.0.0/17 +52.219.142.0/24 +52.219.0.0/20 +3.5.252.0/22 +13.248.231.0/24 +76.223.104.0/24 +52.219.32.0/21 +3.5.228.0/22 +52.95.157.0/24 +108.175.52.0/22 +52.95.176.0/24 +76.223.99.0/24 +3.5.48.0/22 +52.95.140.0/23 +52.95.156.0/24 +16.12.2.0/24 +52.95.160.0/23 +52.219.62.0/23 +108.175.60.0/22 +13.248.225.0/24 +3.5.164.0/22 +52.95.151.0/24 +3.5.240.0/22 +13.248.229.0/24 +54.231.0.0/16 +52.95.158.0/23 +52.216.0.0/15 +52.219.210.0/24 +52.219.96.0/20 +18.34.64.0/21 +52.95.148.0/23 +52.95.162.0/24 +76.223.97.0/24 +3.5.76.0/22 +16.12.36.0/22 +3.5.44.0/22 +13.248.228.0/24 +52.219.180.0/22 +52.95.172.0/23 +3.5.64.0/21 +52.219.40.0/22 +52.219.136.0/22 +54.222.52.0/22 +3.5.132.0/23 +52.95.190.0/24 +52.219.24.0/21 +3.5.168.0/23 +108.175.48.0/22 +52.95.177.0/24 +13.248.224.0/24 +52.95.175.0/24 +52.219.164.0/22 +18.34.244.0/22 +52.95.186.0/24 +76.223.95.0/24 +13.248.227.0/24 +3.5.248.0/22 +52.95.164.0/23 +16.12.8.0/24 +76.223.101.0/24 +52.219.160.0/23 +52.219.124.0/22 +52.95.152.0/23 +52.219.172.0/22 +52.95.138.0/24 +52.219.200.0/24 +3.5.216.0/22 +52.219.202.0/23 +3.5.146.0/23 +52.95.180.0/24 +18.34.252.0/22 +52.95.144.0/24 +16.12.9.0/24 +52.95.184.0/23 +76.223.100.0/24 +52.95.142.0/23 +52.219.194.0/24 +3.5.212.0/23 +3.5.220.0/22 +52.219.120.0/22 +52.219.64.0/22 +52.219.128.0/22 +3.5.144.0/23 +18.34.48.0/20 +18.34.232.0/21 +52.92.0.0/17 +52.95.154.0/23 +52.219.176.0/22 +16.12.12.0/23 +76.223.103.0/24 +3.5.80.0/21 +18.34.240.0/22 +52.219.156.0/22 +76.223.98.0/24 +52.219.44.0/22 +16.12.14.0/24 +52.219.56.0/22 +52.219.169.0/24 +16.12.0.0/23 +52.95.146.0/23 +52.219.184.0/21 +52.218.128.0/17 +3.5.244.0/22 +16.12.18.0/23 +52.219.140.0/24 +52.95.188.0/23 +13.248.232.0/24 +52.95.163.0/24 +3.5.32.0/22 +52.219.132.0/22 +52.219.80.0/20 +52.219.112.0/21 +52.219.144.0/22 +52.95.170.0/23 +16.12.4.0/23 +52.95.145.0/24 +16.182.0.0/16 +3.5.56.0/22 +3.5.148.0/22 +52.219.152.0/22 +16.12.40.0/23 +3.5.0.0/19 +54.222.48.0/22 +52.95.181.0/24 +13.248.226.0/24 +52.219.208.0/23 +52.82.164.0/22 +52.219.196.0/22 +54.222.96.0/22 +3.5.232.0/22 +3.5.236.0/22 +52.92.128.0/17 +13.248.233.0/24 +3.5.134.0/23 +3.5.52.0/22 +3.5.224.0/22 +52.82.188.0/22 +52.94.24.0/23 +13.248.70.0/24 +35.71.115.0/24 +52.94.26.0/23 +13.248.72.0/24 +35.71.99.0/24 +52.119.252.0/22 +52.94.6.0/24 +13.248.67.0/24 +3.218.180.0/22 +35.71.114.0/24 +52.94.12.0/24 +35.71.118.0/24 +52.119.249.0/24 +52.94.8.0/24 +35.71.119.0/24 +13.248.68.0/24 +35.71.104.0/24 +35.71.117.0/24 +52.119.248.0/24 +52.119.232.0/21 +35.71.96.0/24 +52.119.240.0/21 +35.71.72.0/22 +35.71.113.0/24 +35.71.120.0/24 +35.71.98.0/24 +35.71.112.0/24 +52.94.5.0/24 +52.94.16.0/24 +35.71.102.0/24 +52.94.10.0/24 +35.71.103.0/24 +35.71.110.0/24 +52.94.22.0/24 +35.71.64.0/22 +13.248.71.0/24 +35.71.100.0/24 +35.71.68.0/22 +52.94.14.0/24 +35.71.109.0/24 +52.94.9.0/24 +52.94.15.0/24 +35.71.111.0/24 +52.94.18.0/24 +52.94.13.0/24 +35.71.116.0/24 +52.94.23.0/24 +52.119.224.0/21 +52.94.30.0/24 +13.248.65.0/24 +52.94.17.0/24 +35.71.97.0/24 +54.222.57.0/24 +52.94.7.0/24 +35.71.107.0/24 +52.82.187.0/24 +13.248.64.0/24 +52.94.11.0/24 +35.71.101.0/24 +35.71.108.0/24 +35.71.121.0/24 +13.248.66.0/24 +52.94.4.0/24 +13.248.69.0/24 +52.94.19.0/24 +35.71.106.0/24 +52.94.20.0/24 +35.71.105.0/24 +52.94.0.0/22 +52.94.28.0/23 +3.2.34.0/26 +3.5.140.0/22 +35.180.0.0/16 +3.2.35.64/26 +3.108.0.0/14 +15.181.232.0/21 +142.4.160.136/29 +3.2.0.0/24 +96.0.80.0/22 +161.188.154.0/23 +52.4.0.0/14 +54.222.88.0/24 +64.252.81.0/24 +142.4.160.80/29 +50.16.0.0/15 +52.95.224.0/24 +15.193.3.0/24 +15.220.196.0/22 +15.220.216.0/22 +35.71.115.0/24 +142.4.160.224/29 +15.205.0.0/16 +64.252.69.0/24 +71.131.192.0/18 +13.236.0.0/14 +15.177.100.0/24 +43.206.0.0/15 +52.95.226.0/24 +142.4.160.56/29 +142.4.160.184/29 +3.4.0.0/24 +15.177.83.0/24 +15.185.0.0/16 +15.220.252.0/22 +54.247.0.0/16 +54.248.0.0/15 +3.2.40.0/25 +18.34.248.0/22 +35.71.99.0/24 +54.148.0.0/15 +99.77.130.0/24 +18.200.0.0/16 +54.206.0.0/16 +99.150.56.0/21 +108.175.56.0/22 +15.193.2.0/24 +15.220.222.0/23 +99.77.132.0/24 +161.188.146.0/23 +15.181.247.0/24 +18.232.0.0/14 +52.82.169.0/28 +64.252.118.0/24 +99.77.244.0/24 +142.4.160.144/29 +15.220.120.0/21 +54.74.0.0/15 +15.220.207.0/24 +18.102.0.0/16 +52.83.0.0/16 +64.252.122.0/24 +52.47.0.0/16 +52.94.249.144/28 +52.95.255.64/28 +151.148.40.0/24 +13.208.0.0/16 +15.193.7.0/24 +54.156.0.0/14 +54.236.0.0/15 +96.0.32.0/22 +99.150.8.0/21 +3.5.40.0/22 +3.5.136.0/22 +15.181.160.0/20 +18.191.0.0/16 +99.77.159.0/24 +15.177.82.0/24 +15.181.80.0/20 +47.128.0.0/14 +54.153.128.0/17 +122.248.192.0/18 +13.247.0.0/16 +18.192.0.0/15 +35.71.114.0/24 +54.229.0.0/16 +3.2.34.128/26 +54.250.0.0/16 +64.252.89.0/24 +107.20.0.0/14 +3.5.160.0/22 +46.51.192.0/20 +99.77.149.0/24 +3.132.0.0/14 +63.32.0.0/14 +64.252.85.0/24 +13.36.0.0/14 +15.177.94.0/24 +52.95.255.16/28 +96.0.40.0/21 +18.236.0.0/15 +52.94.249.80/28 +64.252.74.0/24 +99.77.183.0/24 +64.252.79.0/24 +161.188.148.0/23 +15.188.0.0/16 +18.116.0.0/14 +54.200.0.0/15 +3.5.36.0/22 +18.34.32.0/20 +99.77.238.0/24 +54.144.0.0/14 +54.169.0.0/16 +63.246.113.0/24 +99.77.136.0/24 +161.188.158.0/23 +35.71.118.0/24 +64.252.72.0/24 +99.77.148.0/24 +52.95.240.0/24 +75.101.128.0/17 +96.0.16.0/21 +99.77.55.3/32 +3.4.3.0/24 +15.222.0.0/15 +69.235.128.0/18 +99.77.240.0/24 +3.2.41.0/26 +204.236.128.0/18 +3.5.208.0/22 +15.177.76.0/24 +52.30.0.0/15 +52.94.249.64/28 +54.92.0.0/17 +54.154.0.0/16 +64.252.76.0/24 +67.202.0.0/18 +99.77.251.0/24 +161.188.156.0/23 +3.30.0.0/15 +15.181.253.0/24 +18.34.0.0/19 +35.71.119.0/24 +54.226.0.0/15 +162.250.237.0/24 +3.112.0.0/14 +3.144.0.0/13 +15.220.168.0/21 +52.95.244.0/24 +64.187.128.0/20 +64.252.111.0/24 +3.2.37.128/26 +18.231.0.0/16 +54.252.0.0/16 +3.224.0.0/12 +35.71.104.0/24 +35.71.117.0/24 +54.221.0.0/16 +54.255.0.0/16 +142.4.160.40/29 +15.228.0.0/15 +142.4.160.8/29 +157.241.0.0/16 +15.181.112.0/22 +52.94.249.208/28 +54.233.0.0/18 +68.66.112.0/20 +69.231.128.0/18 +99.77.248.0/24 +99.151.120.0/21 +108.136.0.0/15 +18.34.72.0/21 +35.176.0.0/15 +70.224.192.0/18 +99.77.153.0/24 +161.188.136.0/23 +3.4.7.0/24 +99.77.155.0/24 +142.4.160.192/29 +151.148.39.0/24 +52.95.255.32/28 +69.230.192.0/18 +160.1.0.0/16 +3.5.128.0/22 +15.181.241.0/24 +18.216.0.0/14 +34.192.0.0/12 +3.104.0.0/14 +15.177.99.0/24 +15.193.5.0/24 +15.220.32.0/21 +52.80.0.0/16 +52.94.250.16/28 +64.252.121.0/24 +99.150.32.0/21 +175.41.128.0/18 +64.252.68.0/24 +161.188.130.0/23 +18.229.0.0/16 +54.219.0.0/16 +3.32.0.0/16 +35.182.0.0/15 +70.232.124.0/22 +99.77.191.0/24 +3.5.72.0/23 +13.250.0.0/15 +44.192.0.0/11 +64.252.102.0/24 +64.252.108.0/24 +99.77.156.0/24 +99.77.233.0/24 +161.188.140.0/23 +15.168.0.0/16 +99.77.55.24/32 +99.77.138.0/24 +162.250.238.0/23 +3.5.152.0/21 +18.224.0.0/14 +52.56.0.0/16 +54.245.0.0/16 +142.4.160.0/29 +18.230.0.0/16 +52.58.0.0/15 +70.232.86.125/32 +99.77.152.0/24 +3.131.0.0/16 +15.220.80.0/20 +99.77.235.0/24 +3.96.0.0/15 +15.220.48.0/21 +54.216.0.0/15 +3.5.252.0/22 +15.220.232.0/24 +23.20.0.0/14 +52.94.248.80/28 +64.252.64.0/24 +99.77.55.26/32 +99.77.143.0/24 +3.4.1.0/24 +13.56.0.0/16 +15.220.184.0/21 +18.184.0.0/15 +161.188.128.0/23 +35.160.0.0/13 +52.48.0.0/14 +99.77.137.0/24 +3.2.38.128/26 +13.112.0.0/14 +15.181.144.0/20 +35.71.96.0/24 +43.200.0.0/14 +52.68.0.0/15 +54.67.0.0/16 +15.181.254.0/24 +18.60.0.0/15 +52.57.0.0/16 +99.151.80.0/21 +3.36.0.0/14 +142.4.160.200/29 +161.188.142.0/23 +18.190.0.0/16 +52.82.168.0/24 +162.213.232.0/24 +35.71.72.0/22 +52.95.227.0/24 +54.68.0.0/14 +54.93.0.0/16 +13.50.0.0/16 +52.44.0.0/15 +52.76.128.0/17 +54.95.0.0/16 +54.212.0.0/15 +3.5.228.0/22 +15.181.176.0/20 +15.220.202.0/23 +96.0.0.0/21 +142.4.160.128/29 +151.148.37.0/24 +3.124.0.0/14 +15.181.48.0/20 +52.82.176.0/22 +54.183.0.0/16 +142.4.160.64/29 +3.24.0.0/14 +151.148.41.0/24 +3.2.39.0/26 +15.193.6.0/24 +35.71.113.0/24 +64.252.103.0/24 +142.4.160.24/29 +15.177.86.0/24 +18.144.0.0/15 +52.90.0.0/15 +52.94.144.0/23 +15.220.64.0/20 +15.220.176.0/21 +52.0.0.0/15 +52.82.184.0/23 +52.95.253.0/24 +140.179.0.0/16 +142.4.160.120/29 +208.110.48.0/20 +3.2.37.0/26 +3.33.35.0/24 +52.95.255.128/28 +52.208.0.0/13 +99.77.234.0/24 +151.148.36.0/24 +16.62.0.0/15 +52.54.0.0/15 +52.95.230.0/24 +3.5.48.0/22 +15.220.152.0/21 +52.74.0.0/16 +54.168.0.0/16 +15.177.89.0/24 +18.156.0.0/14 +52.82.170.0/24 +64.252.113.0/24 +79.125.0.0/17 +99.77.134.0/24 +3.2.41.128/26 +13.214.0.0/15 +15.177.77.0/24 +15.177.90.0/24 +54.180.0.0/15 +99.77.253.0/24 +99.78.238.255/32 +3.4.6.0/24 +15.177.79.0/24 +15.220.208.128/26 +54.64.0.0/15 +176.34.0.0/19 +35.71.120.0/24 +35.80.0.0/12 +99.77.147.0/24 +99.77.236.0/24 +15.220.144.0/23 +54.223.0.0/16 +99.77.129.0/24 +108.175.60.0/22 +15.220.200.0/23 +43.204.0.0/15 +46.51.224.0/19 +54.179.0.0/16 +99.77.55.254/32 +3.2.38.192/26 +54.170.0.0/15 +151.148.33.0/24 +3.5.164.0/22 +15.220.96.0/20 +35.71.98.0/24 +99.77.131.0/24 +3.5.240.0/22 +35.71.112.0/24 +35.153.0.0/16 +52.61.0.0/16 +52.79.0.0/16 +99.150.48.0/21 +142.4.160.216/29 +15.220.228.0/22 +52.12.0.0/15 +52.220.0.0/15 +99.78.238.253/32 +162.250.236.0/24 +3.4.8.0/24 +18.163.0.0/16 +54.199.0.0/16 +18.142.0.0/15 +46.137.192.0/19 +52.200.0.0/13 +54.222.32.0/22 +64.252.123.0/24 +99.77.55.25/32 +99.151.112.0/21 +18.34.64.0/21 +34.224.0.0/12 +52.75.0.0/16 +136.18.50.0/23 +15.177.66.0/23 +52.94.248.224/28 +52.95.255.48/28 +54.218.0.0/16 +3.5.76.0/22 +16.168.0.0/15 +64.252.78.0/24 +99.78.238.251/32 +15.181.0.0/20 +64.252.117.0/24 +99.151.104.0/21 +99.151.128.0/21 +35.71.102.0/24 +99.80.0.0/15 +3.5.44.0/22 +52.95.249.0/24 +54.244.0.0/16 +64.252.87.0/24 +46.137.224.0/19 +65.0.0.0/14 +99.150.80.0/21 +63.246.112.0/24 +63.246.119.0/24 +50.19.0.0/16 +99.79.0.0/16 +44.224.0.0/11 +52.81.0.0/16 +3.2.3.0/24 +35.71.103.0/24 +64.252.73.0/24 +99.151.72.0/21 +174.129.0.0/16 +3.2.43.0/26 +35.71.110.0/24 +52.95.255.80/28 +64.252.101.0/24 +3.2.42.64/26 +52.95.255.112/28 +96.0.12.0/22 +3.2.32.128/26 +15.181.224.0/21 +15.220.227.0/24 +18.208.0.0/13 +52.95.245.0/24 +54.240.17.0/24 +99.77.142.0/24 +99.77.187.0/24 +15.177.73.0/24 +46.51.216.0/21 +3.5.64.0/21 +52.94.248.32/28 +54.220.0.0/16 +100.20.0.0/14 +52.94.248.160/28 +54.151.0.0/17 +15.161.0.0/16 +54.222.52.0/22 +64.252.110.0/24 +99.77.158.0/24 +99.77.241.0/24 +18.188.0.0/16 +18.252.0.0/16 +46.51.128.0/18 +64.252.107.0/24 +13.232.0.0/14 +15.220.0.0/20 +52.95.243.0/24 +3.5.132.0/23 +13.53.0.0/16 +15.177.88.0/24 +15.184.0.0/16 +15.220.56.0/21 +184.72.128.0/17 +15.220.16.0/20 +161.188.134.0/23 +3.2.41.64/26 +13.51.0.0/16 +96.0.8.0/22 +35.181.0.0/16 +54.80.0.0/13 +54.214.0.0/16 +54.254.0.0/16 +52.20.0.0/14 +52.94.201.0/26 +52.94.248.208/28 +13.244.0.0/15 +52.94.248.48/28 +54.242.0.0/15 +99.77.252.0/24 +99.151.88.0/21 +216.182.238.0/23 +3.5.168.0/23 +18.168.0.0/14 +34.208.0.0/12 +52.15.0.0/16 +64.252.124.0/24 +161.188.144.0/23 +18.189.0.0/16 +35.71.64.0/22 +99.77.184.0/24 +3.64.0.0/12 +18.88.0.0/18 +162.213.234.0/23 +15.220.136.0/21 +18.34.244.0/22 +18.201.0.0/16 +54.151.128.0/17 +208.86.88.0/23 +18.175.0.0/16 +54.208.0.0/15 +54.228.0.0/16 +142.4.160.48/29 +151.148.35.0/24 +15.220.146.0/23 +52.95.246.0/24 +13.48.0.0/15 +52.64.0.0/17 +52.95.239.0/24 +195.17.0.0/24 +18.220.0.0/14 +52.36.0.0/14 +54.94.0.0/16 +142.4.160.168/29 +15.152.0.0/16 +15.220.226.0/24 +52.95.228.0/24 +54.222.128.0/17 +96.127.0.0/17 +161.188.132.0/23 +3.4.16.0/21 +68.79.0.0/18 +99.77.128.0/24 +3.5.248.0/22 +54.215.0.0/16 +142.4.160.208/29 +18.182.0.0/16 +43.218.0.0/16 +54.152.0.0/16 +99.77.55.14/32 +99.77.243.0/24 +151.148.32.0/24 +18.178.0.0/16 +54.202.0.0/15 +99.150.120.0/21 +15.181.128.0/20 +16.170.0.0/15 +18.132.0.0/14 +52.70.0.0/15 +52.94.248.0/28 +96.0.56.0/22 +15.220.204.0/24 +15.177.70.0/23 +15.236.0.0/15 +64.252.84.0/24 +99.77.254.0/24 +184.72.0.0/18 +13.125.0.0/16 +35.71.100.0/24 +54.193.0.0/16 +54.222.59.0/24 +70.232.92.0/22 +99.77.55.0/32 +99.77.247.0/24 +3.2.32.64/26 +64.252.88.0/24 +99.77.55.2/32 +15.181.245.0/24 +99.151.96.0/21 +15.177.97.0/24 +35.71.68.0/22 +52.8.0.0/16 +52.94.249.192/28 +52.95.247.0/24 +64.252.83.0/24 +99.77.55.253/32 +15.177.64.0/23 +15.193.9.0/24 +46.51.208.0/22 +52.86.0.0/15 +64.252.80.0/24 +142.4.160.88/29 +18.136.0.0/16 +50.112.0.0/16 +3.2.33.64/26 +3.2.35.192/26 +3.2.43.64/26 +13.212.0.0/15 +15.220.233.0/24 +18.179.0.0/16 +64.252.100.0/24 +3.5.216.0/22 +3.130.0.0/16 +13.57.0.0/16 +13.126.0.0/15 +15.181.64.0/20 +99.77.140.0/24 +3.2.39.128/26 +16.16.0.0/16 +54.222.89.0/24 +15.206.0.0/15 +50.18.0.0/16 +52.14.0.0/16 +96.0.72.0/21 +54.172.0.0/15 +71.137.0.0/18 +176.34.64.0/18 +3.5.146.0/23 +35.71.109.0/24 +52.95.255.96/28 +99.77.249.0/24 +99.150.88.0/21 +142.4.160.16/29 +18.204.0.0/14 +35.178.0.0/15 +54.88.0.0/14 +52.94.116.0/22 +64.252.119.0/24 +208.86.90.0/23 +15.181.248.0/24 +18.34.252.0/22 +52.29.0.0/16 +13.52.0.0/16 +18.180.0.0/15 +46.137.128.0/18 +52.94.248.176/28 +3.2.2.0/24 +3.2.32.192/26 +13.246.0.0/16 +52.94.249.240/28 +52.95.254.0/24 +64.252.104.0/24 +176.32.64.0/19 +13.54.0.0/15 +13.200.0.0/15 +52.95.235.0/24 +52.95.241.0/24 +64.252.66.0/24 +64.252.82.0/24 +99.77.144.0/24 +3.12.0.0/16 +13.124.0.0/16 +35.71.111.0/24 +52.94.248.144/28 +52.192.0.0/15 +99.150.72.0/21 +3.3.5.0/24 +54.78.0.0/16 +99.77.139.0/24 +15.193.4.0/24 +35.71.116.0/24 +71.132.0.0/18 +99.150.40.0/21 +3.2.33.128/26 +3.5.212.0/23 +3.5.220.0/22 +15.177.72.0/24 +52.2.0.0/15 +64.252.106.0/24 +103.4.8.0/21 +184.72.64.0/18 +3.2.41.192/26 +99.77.55.1/32 +15.181.192.0/19 +3.2.35.128/26 +15.253.0.0/16 +54.238.0.0/16 +99.150.16.0/21 +216.182.232.0/22 +3.120.0.0/14 +15.181.252.0/24 +18.198.0.0/15 +52.9.0.0/16 +99.77.141.0/24 +52.46.180.0/22 +3.136.0.0/13 +15.220.148.0/22 +43.192.0.0/16 +52.94.248.192/28 +64.252.120.0/24 +3.5.144.0/23 +16.24.0.0/16 +52.94.248.112/28 +15.181.242.0/24 +54.232.0.0/16 +15.177.78.0/24 +15.193.0.0/24 +52.66.0.0/16 +204.236.192.0/18 +35.168.0.0/13 +52.64.128.0/17 +13.209.0.0/16 +15.181.40.0/21 +18.34.48.0/20 +18.34.232.0/21 +18.140.0.0/15 +52.60.0.0/16 +52.78.0.0/16 +72.44.32.0/19 +15.181.16.0/20 +15.181.96.0/20 +15.220.192.0/22 +99.150.112.0/21 +13.58.0.0/15 +54.194.0.0/15 +3.98.0.0/15 +54.66.0.0/16 +99.77.242.0/24 +142.4.160.160/29 +162.222.148.0/22 +3.4.2.0/24 +15.177.75.0/24 +15.220.240.0/21 +52.24.0.0/14 +52.222.0.0/17 +64.252.65.0/24 +3.13.0.0/16 +3.248.0.0/13 +54.92.128.0/17 +99.77.133.0/24 +13.210.0.0/15 +54.241.0.0/16 +99.77.151.0/24 +99.77.239.0/24 +184.169.128.0/17 +216.182.224.0/21 +35.72.0.0/13 +99.150.24.0/21 +3.8.0.0/14 +18.246.0.0/16 +54.204.0.0/15 +52.194.0.0/15 +54.155.0.0/16 +54.196.0.0/15 +142.4.160.176/29 +3.5.80.0/21 +18.34.240.0/22 +35.71.97.0/24 +35.152.0.0/16 +99.150.0.0/21 +3.2.38.0/26 +15.220.220.0/23 +35.156.0.0/14 +161.188.138.0/23 +3.16.0.0/14 +15.191.0.0/16 +18.130.0.0/16 +52.72.0.0/15 +52.82.180.0/22 +99.151.64.0/21 +52.62.0.0/15 +52.94.249.224/28 +16.50.0.0/15 +54.160.0.0/13 +157.175.0.0/16 +176.34.32.0/19 +54.234.0.0/15 +70.232.86.126/32 +15.220.248.0/23 +52.95.225.0/24 +99.77.154.0/24 +99.77.245.0/24 +3.14.0.0/15 +15.177.81.0/24 +18.228.0.0/16 +52.16.0.0/15 +52.95.242.0/24 +161.189.0.0/16 +15.177.84.0/24 +15.220.250.0/23 +52.94.249.176/28 +54.153.0.0/17 +71.136.64.0/18 +96.0.60.0/22 +15.177.98.0/24 +15.200.0.0/16 +15.220.236.0/22 +35.154.0.0/16 +52.82.0.0/17 +52.94.249.32/28 +3.2.36.0/25 +35.71.107.0/24 +52.94.250.32/28 +64.252.115.0/24 +99.77.161.0/24 +3.2.39.64/26 +15.181.249.0/24 +15.220.205.0/24 +52.88.0.0/15 +3.5.244.0/22 +18.253.0.0/16 +52.94.249.112/28 +198.99.2.0/24 +18.153.0.0/16 +18.202.0.0/15 +64.252.98.0/24 +216.182.236.0/23 +3.5.32.0/22 +3.208.0.0/12 +54.222.64.0/23 +70.232.86.124/32 +99.77.157.0/24 +142.4.160.72/29 +142.4.160.152/29 +185.48.120.0/22 +54.233.128.0/17 +142.4.160.104/29 +204.45.0.0/16 +15.220.206.0/24 +161.188.152.0/23 +184.73.0.0/16 +15.160.0.0/16 +15.177.80.0/24 +43.196.0.0/16 +54.174.0.0/15 +13.230.0.0/15 +52.94.249.160/28 +54.224.0.0/15 +15.220.234.0/23 +18.176.0.0/15 +64.252.86.0/24 +3.20.0.0/14 +15.156.0.0/15 +15.254.0.0/16 +18.196.0.0/15 +54.76.0.0/15 +3.80.0.0/12 +3.101.0.0/16 +52.40.0.0/14 +43.198.0.0/15 +99.150.104.0/21 +35.71.101.0/24 +52.95.248.0/24 +54.239.103.128/26 +64.252.70.0/24 +64.252.116.0/24 +18.88.128.0/18 +34.240.0.0/13 +52.94.248.16/28 +52.94.249.96/28 +54.253.0.0/16 +18.162.0.0/16 +52.94.146.0/24 +3.2.34.192/26 +3.2.35.0/26 +52.32.0.0/14 +52.95.252.0/24 +54.222.36.0/22 +52.94.248.64/28 +52.95.229.0/24 +54.72.0.0/15 +3.2.42.0/26 +3.5.56.0/22 +52.95.250.0/24 +64.252.67.0/24 +3.5.148.0/22 +54.198.0.0/16 +64.252.77.0/24 +15.164.0.0/15 +99.77.55.15/32 +176.34.128.0/17 +3.2.32.0/26 +3.2.42.192/26 +15.177.0.0/18 +15.181.244.0/24 +18.194.0.0/15 +52.94.249.128/28 +54.184.0.0/13 +142.4.160.96/29 +3.6.0.0/15 +15.181.120.0/21 +15.193.1.0/24 +35.71.108.0/24 +52.46.184.0/22 +52.67.0.0/16 +18.138.0.0/15 +52.94.249.48/28 +52.95.255.144/28 +99.77.246.0/24 +3.2.33.192/26 +52.52.0.0/15 +54.233.64.0/18 +76.223.128.0/24 +161.188.150.0/23 +3.34.0.0/15 +15.177.74.0/24 +35.71.121.0/24 +52.65.0.0/16 +54.150.0.0/16 +13.40.0.0/14 +15.177.96.0/24 +15.181.251.0/24 +34.248.0.0/13 +64.252.109.0/24 +69.234.192.0/18 +142.4.160.32/29 +142.4.160.112/29 +161.188.160.0/23 +3.5.0.0/19 +54.178.0.0/16 +99.77.55.12/32 +99.77.55.27/32 +108.128.0.0/13 +18.100.0.0/15 +52.119.205.0/24 +96.0.64.0/21 +15.177.87.0/24 +52.94.250.0/28 +64.252.71.0/24 +64.252.114.0/24 +15.177.85.0/24 +15.181.246.0/24 +52.95.251.0/24 +72.41.0.0/20 +96.0.24.0/21 +96.0.36.0/22 +15.177.91.0/24 +35.155.0.0/16 +54.210.0.0/15 +64.252.75.0/24 +99.151.136.0/21 +15.181.240.0/24 +52.76.0.0/17 +52.18.0.0/15 +107.176.0.0/15 +175.41.192.0/18 +15.220.44.0/22 +99.151.144.0/21 +52.10.0.0/15 +52.82.164.0/22 +100.24.0.0/13 +151.148.34.0/24 +3.4.4.0/24 +99.77.237.0/24 +99.150.64.0/21 +162.213.233.0/24 +52.95.255.0/28 +54.176.0.0/15 +54.246.0.0/16 +64.252.112.0/24 +16.162.0.0/15 +15.181.32.0/21 +15.181.116.0/22 +35.71.106.0/24 +15.177.93.0/24 +15.181.243.0/24 +3.5.232.0/22 +3.28.0.0/15 +51.16.0.0/15 +54.79.0.0/16 +54.251.0.0/16 +3.128.0.0/15 +18.254.0.0/16 +64.252.105.0/24 +3.4.24.0/21 +15.220.224.0/23 +54.207.0.0/16 +99.77.145.0/24 +99.150.96.0/21 +35.71.105.0/24 +52.28.0.0/16 +3.0.0.0/15 +3.33.34.0/24 +15.220.112.0/21 +52.77.0.0/16 +64.252.99.0/24 +99.77.55.255/32 +3.5.236.0/22 +15.181.250.0/24 +15.193.10.0/24 +99.151.152.0/21 +18.166.0.0/15 +52.94.248.128/28 +99.77.55.13/32 +99.77.160.0/24 +99.77.250.0/24 +15.220.128.0/21 +18.183.0.0/16 +46.137.0.0/17 +99.77.135.0/24 +151.148.38.0/24 +15.177.92.0/24 +15.193.8.0/24 +15.220.160.0/21 +3.3.2.0/24 +3.5.134.0/23 +13.228.0.0/15 +15.220.40.0/22 +52.94.248.96/28 +52.196.0.0/14 +99.77.150.0/24 +3.5.52.0/22 +3.5.224.0/22 +54.222.58.32/28 +96.0.48.0/21 +99.77.186.0/24 +15.177.68.0/23 +177.71.128.0/17 +192.26.25.0/24 +52.95.110.0/24 +205.251.192.0/21 +63.246.114.0/23 +120.52.22.96/27 +205.251.249.0/24 +180.163.57.128/26 +204.246.168.0/22 +18.160.0.0/15 +205.251.252.0/23 +54.192.0.0/16 +204.246.173.0/24 +54.230.200.0/21 +120.253.240.192/26 +116.129.226.128/26 +130.176.0.0/17 +108.156.0.0/14 +99.86.0.0/16 +205.251.200.0/21 +223.71.71.128/25 +13.32.0.0/15 +120.253.245.128/26 +13.224.0.0/14 +70.132.0.0/18 +15.158.0.0/16 +13.249.0.0/16 +18.238.0.0/15 +18.244.0.0/15 +205.251.208.0/20 +65.9.128.0/18 +130.176.128.0/18 +58.254.138.0/25 +54.230.208.0/20 +116.129.226.0/25 +52.222.128.0/17 +18.164.0.0/15 +64.252.128.0/18 +205.251.254.0/24 +54.230.224.0/19 +71.152.0.0/17 +216.137.32.0/19 +204.246.172.0/24 +18.172.0.0/15 +120.52.39.128/27 +118.193.97.64/26 +223.71.71.96/27 +18.154.0.0/15 +54.240.128.0/18 +205.251.250.0/23 +180.163.57.0/25 +52.46.0.0/18 +223.71.11.0/27 +52.82.128.0/19 +54.230.0.0/17 +54.230.128.0/18 +54.239.128.0/18 +130.176.224.0/20 +36.103.232.128/26 +52.84.0.0/15 +143.204.0.0/16 +144.220.0.0/16 +120.52.153.192/26 +119.147.182.0/25 +120.232.236.0/25 +54.182.0.0/16 +58.254.138.128/26 +120.253.245.192/27 +54.239.192.0/19 +18.68.0.0/16 +18.64.0.0/14 +120.52.12.64/26 +99.84.0.0/16 +130.176.192.0/19 +52.124.128.0/17 +204.246.164.0/22 +13.35.0.0/16 +204.246.174.0/23 +36.103.232.0/25 +119.147.182.128/26 +118.193.97.128/25 +120.232.236.128/26 +204.246.176.0/20 +65.8.0.0/16 +65.9.0.0/17 +108.138.0.0/15 +120.253.241.160/27 +13.248.117.0/24 +15.197.34.0/23 +15.197.36.0/22 +13.248.124.0/24 +13.248.119.0/24 +13.248.100.0/24 +13.248.113.0/24 +13.248.110.0/24 +15.197.32.0/23 +15.197.0.0/23 +99.83.102.0/24 +99.82.172.0/24 +99.83.100.0/24 +15.197.16.0/23 +54.230.192.0/21 +13.248.105.0/24 +99.82.173.0/24 +99.82.166.0/24 +13.248.97.0/24 +15.197.8.0/22 +15.197.18.0/23 +13.248.120.0/24 +35.71.128.0/17 +3.3.8.0/21 +13.248.127.0/24 +99.82.171.0/24 +13.248.96.0/24 +99.82.169.0/24 +52.223.0.0/17 +99.82.164.0/24 +15.197.4.0/22 +99.77.188.0/24 +13.248.121.0/24 +99.82.170.0/24 +13.248.122.0/24 +99.82.174.0/24 +99.82.156.0/22 +15.197.12.0/22 +13.248.118.0/24 +99.82.167.0/24 +13.248.114.0/24 +13.248.98.0/24 +99.82.161.0/24 +99.83.101.0/24 +99.82.175.0/24 +3.2.8.0/21 +13.248.103.0/24 +15.197.28.0/23 +15.197.128.0/17 +3.3.6.0/23 +13.248.128.0/17 +99.83.98.0/24 +75.2.0.0/17 +99.82.160.0/24 +13.248.108.0/24 +99.77.190.0/24 +13.248.106.0/24 +13.248.99.0/24 +13.248.112.0/24 +15.197.2.0/24 +99.83.128.0/17 +13.248.123.0/24 +99.82.162.0/24 +13.248.125.0/24 +76.223.0.0/17 +63.246.120.0/21 +99.83.99.0/24 +13.248.109.0/24 +13.248.111.0/24 +99.82.165.0/24 +3.3.0.0/23 +99.83.96.0/24 +99.82.163.0/24 +13.248.115.0/24 +15.197.3.0/24 +13.248.104.0/24 +99.82.168.0/24 +13.248.126.0/24 +13.248.116.0/24 +3.33.128.0/17 +13.248.101.0/24 +15.197.24.0/22 +99.77.189.0/24 +13.248.107.0/24 +15.197.20.0/22 +13.248.102.0/24 +15.197.30.0/23 +15.193.0.0/19 +15.193.0.0/19 +15.177.100.0/24 +15.177.83.0/24 +15.177.82.0/24 +15.177.94.0/24 +15.177.76.0/24 +15.177.99.0/24 +15.177.86.0/24 +15.177.89.0/24 +15.177.77.0/24 +15.177.90.0/24 +15.177.79.0/24 +15.177.66.0/23 +15.177.73.0/24 +15.177.88.0/24 +15.177.70.0/23 +15.177.97.0/24 +15.177.64.0/23 +15.177.72.0/24 +15.177.78.0/24 +15.177.75.0/24 +15.177.81.0/24 +15.177.84.0/24 +15.177.98.0/24 +15.177.80.0/24 +15.177.74.0/24 +15.177.96.0/24 +15.177.87.0/24 +15.177.85.0/24 +15.177.91.0/24 +15.177.93.0/24 +15.177.92.0/24 +15.177.68.0/23 +64.252.64.0/18 +64.252.64.0/18 +99.77.128.0/18 +99.77.128.0/18 +130.176.88.0/21 +54.239.134.0/23 +52.82.134.0/23 +130.176.86.0/23 +130.176.140.0/22 +130.176.0.0/18 +54.239.204.0/22 +130.176.160.0/19 +70.132.0.0/18 +15.158.0.0/16 +130.176.136.0/23 +54.239.170.0/23 +52.46.0.0/22 +130.176.96.0/19 +54.182.184.0/22 +204.246.166.0/24 +130.176.64.0/21 +54.182.172.0/22 +205.251.218.0/24 +52.46.4.0/23 +130.176.144.0/20 +54.182.176.0/21 +130.176.78.0/23 +54.182.248.0/22 +64.252.128.0/18 +54.182.154.0/23 +64.252.64.0/18 +54.182.144.0/21 +54.182.224.0/21 +130.176.128.0/21 +52.46.32.0/19 +52.82.128.0/23 +18.68.0.0/16 +54.182.156.0/22 +54.182.160.0/21 +54.182.240.0/21 +130.176.192.0/19 +130.176.76.0/24 +52.46.16.0/20 +54.239.208.0/21 +54.182.188.0/23 +130.176.80.0/22 +54.182.128.0/20 +130.176.72.0/22 +140.179.1.64/27 +140.179.1.96/27 +140.179.113.248/29 +140.179.144.128/25 +140.179.15.0/26 +140.179.15.64/26 +140.179.176.0/23 +140.179.36.16/29 +140.179.36.32/27 +140.179.36.64/27 +140.179.57.0/24 +140.179.58.0/26 +140.179.58.88/29 +140.179.59.0/24 +140.179.79.160/27 +140.179.79.192/27 +140.179.79.244/30 +140.179.79.64/26 +52.80.197.0/25 +52.80.197.128/25 +52.80.198.0/25 +52.80.198.136/29 +52.80.51.200/29 +52.80.51.208/29 +52.80.51.216/29 +52.80.51.224/29 +52.80.51.240/29 +52.80.51.248/29 +52.81.113.32/27 +52.81.113.64/27 +52.81.113.96/27 +52.81.124.0/23 +52.81.135.128/25 +52.81.137.0/24 +52.81.151.0/27 +52.81.167.128/27 +52.81.167.192/26 +52.81.216.0/23 +52.81.232.0/26 +71.131.196.128/26 +161.189.148.0/23 +161.189.23.0/27 +161.189.23.32/27 +161.189.66.128/26 +161.189.66.192/26 +52.82.1.0/29 +52.82.127.0/24 +52.82.92.0/23 +52.83.25.128/27 +52.83.25.160/27 +52.83.26.0/26 +52.83.26.192/27 +52.83.26.224/27 +52.83.26.64/26 +52.83.33.104/29 +52.83.33.112/29 +52.83.33.72/29 +52.83.33.80/29 +52.83.33.88/29 +52.83.33.96/29 +52.83.34.128/25 +52.83.34.72/29 +52.83.34.80/29 +52.83.34.88/29 +52.83.34.96/27 +52.83.35.0/25 +52.83.35.128/25 +52.83.5.0/26 +52.83.58.0/24 +68.79.2.244/30 +68.79.2.248/29 +68.79.2.64/27 +69.230.219.0/24 +69.230.226.0/24 +69.230.227.0/24 +69.230.228.0/24 +69.234.197.192/26 +69.234.197.72/29 +69.235.162.0/24 +69.235.170.0/23 +18.252.4.0/30 +15.200.28.80/30 +18.252.126.0/25 +18.252.145.156/30 +18.252.145.160/29 +18.252.145.168/29 +18.252.145.192/28 +18.252.145.208/28 +18.252.165.0/26 +18.252.165.140/30 +18.252.4.16/29 +18.252.56.0/23 +18.252.58.0/23 +18.253.186.0/24 +18.254.23.64/26 +18.254.61.128/26 +18.254.68.0/23 +15.200.141.0/25 +15.200.150.0/23 +15.200.176.128/28 +15.200.176.192/26 +15.200.28.240/28 +15.200.28.88/29 +15.205.82.0/23 +15.205.84.0/23 +160.1.128.0/24 +3.30.129.0/24 +3.30.130.0/23 +3.30.40.84/30 +3.30.98.128/26 +3.30.98.64/26 +3.32.139.0/24 +3.32.190.0/25 +3.32.190.244/30 +3.32.190.248/29 +52.61.193.0/24 +52.61.40.104/29 +3.112.23.0/29 +18.202.216.48/29 +18.206.107.24/29 +18.237.140.160/29 +13.52.6.112/29 +3.0.5.32/29 +13.233.177.0/29 +3.120.181.40/29 +18.228.70.32/29 +13.209.1.56/29 +13.239.158.0/29 +13.48.4.200/30 +35.180.112.80/29 +3.16.146.0/29 +3.8.37.24/29 +35.183.92.176/29 +13.244.121.0/26 +13.244.121.196/30 +13.244.122.0/24 +13.244.132.0/23 +13.244.165.192/26 +13.244.176.128/26 +13.244.176.64/26 +13.244.202.40/29 +13.244.244.192/27 +13.244.244.224/27 +13.244.33.0/26 +13.244.33.128/26 +13.244.33.64/26 +13.244.35.128/26 +13.244.35.192/26 +13.245.1.32/27 +13.245.112.0/24 +13.245.113.0/24 +13.245.114.0/24 +13.245.127.232/30 +13.245.155.128/27 +13.245.155.224/27 +13.245.166.128/30 +13.245.166.132/30 +13.245.166.176/29 +13.245.241.64/26 +13.245.93.140/30 +13.245.93.160/29 +13.245.93.176/28 +13.245.93.192/28 +13.246.108.0/22 +13.246.120.0/22 +13.246.70.0/23 +16.162.162.96/29 +16.162.52.0/24 +16.163.196.0/22 +16.163.206.0/23 +16.163.63.64/26 +18.162.127.0/27 +18.162.127.32/27 +18.162.127.64/27 +18.162.189.0/24 +18.162.221.128/27 +18.162.221.160/27 +18.162.221.192/27 +18.163.139.32/27 +18.163.201.0/26 +18.163.201.96/27 +18.163.204.0/23 +18.163.66.0/23 +18.163.68.0/26 +18.166.20.128/26 +18.166.20.192/26 +18.166.20.64/26 +18.166.237.128/27 +18.166.237.64/27 +18.166.237.96/27 +18.167.111.0/24 +18.167.112.0/24 +18.167.113.0/24 +18.167.88.112/28 +18.167.88.72/29 +18.167.88.80/30 +18.167.88.96/28 +13.112.191.184/29 +13.113.196.64/26 +13.113.203.0/24 +13.230.21.128/26 +13.230.21.224/28 +13.230.21.240/28 +13.231.6.104/29 +13.231.6.112/28 +13.231.6.192/28 +13.231.6.208/29 +13.231.6.64/29 +13.231.6.72/29 +13.231.6.80/29 +13.231.6.88/29 +18.176.203.120/30 +18.177.156.192/26 +18.179.48.128/27 +18.179.48.96/27 +18.180.178.0/24 +18.180.180.0/23 +18.180.88.0/23 +18.181.204.128/26 +18.181.204.192/26 +18.181.242.0/23 +18.182.96.64/26 +18.183.37.0/26 +3.112.162.0/23 +3.112.64.0/23 +3.112.85.96/27 +3.112.96.0/26 +3.112.96.128/27 +3.112.96.160/27 +3.112.96.64/26 +3.113.218.0/26 +3.113.218.112/28 +3.113.218.128/27 +3.113.218.68/30 +3.113.218.72/30 +3.113.218.76/30 +3.114.164.0/22 +35.72.164.212/30 +35.72.164.232/29 +35.72.164.240/28 +35.72.255.0/24 +35.72.36.140/31 +35.72.36.142/31 +35.72.36.144/30 +35.72.36.148/30 +35.72.36.192/27 +35.72.36.224/27 +35.72.37.0/25 +35.72.37.128/25 +35.73.115.0/28 +35.73.115.128/25 +35.73.4.0/24 +35.74.77.240/30 +35.75.130.0/24 +35.75.131.0/26 +35.75.131.80/29 +35.76.252.0/23 +35.77.0.128/26 +35.77.112.0/22 +35.77.124.0/23 +52.199.127.192/26 +54.248.220.0/26 +54.250.251.0/24 +54.250.253.192/26 +13.124.145.104/29 +13.124.145.112/29 +13.124.145.120/29 +13.124.145.16/29 +13.124.145.24/29 +13.124.145.64/29 +13.124.145.72/29 +13.124.145.80/29 +13.124.145.88/29 +13.124.145.96/29 +13.124.199.0/24 +13.124.199.0/24 +13.124.247.0/24 +13.209.1.0/29 +13.209.1.8/29 +13.209.1.96/27 +13.209.71.128/27 +13.209.71.224/27 +15.164.156.0/23 +15.164.243.0/28 +15.164.243.192/27 +15.164.243.224/27 +15.164.243.32/27 +15.165.193.128/26 +15.165.193.64/26 +15.165.224.0/23 +3.34.101.192/26 +3.34.228.0/26 +3.34.228.64/26 +3.34.37.0/24 +3.34.38.0/23 +3.34.89.192/30 +3.34.89.196/30 +3.34.89.64/26 +3.35.130.128/25 +3.35.160.0/22 +3.36.167.128/25 +3.36.167.28/30 +3.36.167.48/29 +3.36.167.64/28 +3.36.167.80/28 +3.36.190.0/23 +3.36.192.0/23 +3.36.194.0/23 +3.36.202.0/25 +3.36.245.204/30 +3.36.245.232/30 +3.36.3.160/28 +3.36.3.192/27 +3.36.3.224/27 +3.36.3.96/27 +3.38.131.192/26 +3.38.229.0/25 +3.38.248.0/23 +3.38.90.8/29 +3.39.113.0/24 +3.39.114.0/23 +3.39.116.0/26 +3.39.82.128/25 +52.78.247.128/26 +54.180.184.0/23 +13.208.131.0/29 +13.208.131.128/27 +13.208.131.16/29 +13.208.131.160/27 +13.208.131.192/27 +13.208.131.224/30 +13.208.131.228/30 +13.208.131.232/30 +13.208.131.24/29 +13.208.131.32/29 +13.208.131.40/29 +13.208.131.8/29 +13.208.170.0/23 +13.208.177.224/27 +13.208.180.0/24 +13.208.194.0/23 +13.208.217.64/27 +13.208.217.96/27 +13.208.227.0/25 +13.208.227.128/25 +13.208.228.0/25 +13.208.228.128/29 +13.208.228.136/30 +13.208.33.16/29 +13.208.33.24/29 +13.208.33.8/29 +15.152.10.0/24 +15.152.133.112/28 +15.152.133.128/28 +15.152.174.0/23 +15.152.176.0/22 +15.152.24.0/27 +15.152.24.128/29 +15.152.24.192/26 +15.152.24.32/27 +15.152.24.64/26 +15.152.8.192/26 +15.168.40.0/25 +13.126.23.136/29 +13.126.23.144/29 +13.126.23.152/29 +13.126.23.160/27 +13.126.23.192/27 +13.126.243.0/24 +13.127.70.128/29 +13.127.70.136/29 +13.127.70.144/29 +13.127.70.152/29 +13.127.70.160/29 +13.232.67.128/27 +13.232.67.160/27 +13.233.177.192/26 +13.233.177.32/27 +13.234.221.136/29 +13.234.221.192/26 +13.234.8.0/23 +13.235.197.96/27 +13.235.228.0/24 +13.235.6.0/23 +15.206.137.128/26 +15.206.137.192/26 +15.207.13.0/26 +15.207.13.128/25 +15.207.213.128/25 +3.108.13.124/30 +3.109.72.0/25 +3.109.72.152/29 +3.110.57.0/24 +3.110.71.0/26 +3.111.110.0/23 +3.111.251.0/24 +3.111.90.0/23 +3.6.70.128/26 +3.6.70.76/30 +3.7.10.0/23 +3.7.25.48/30 +52.66.194.128/26 +65.0.192.176/28 +65.0.192.224/27 +65.0.234.0/26 +65.1.103.192/29 +65.1.103.200/30 +65.1.103.208/28 +65.1.103.224/28 +65.1.156.0/22 +65.1.170.0/23 +65.1.172.0/23 +65.1.174.0/23 +65.2.14.0/23 +65.2.16.0/23 +18.60.76.0/23 +18.60.78.192/28 +18.60.78.208/28 +13.212.132.0/22 +13.212.209.128/26 +13.212.209.94/31 +13.212.209.96/27 +13.212.3.128/26 +13.212.3.64/26 +13.213.20.132/30 +13.213.20.136/29 +13.213.20.144/28 +13.213.20.160/28 +13.213.21.0/24 +13.213.22.0/23 +13.213.24.0/23 +13.213.75.224/29 +13.214.118.0/23 +13.214.124.128/26 +13.214.224.0/23 +13.214.228.0/22 +13.215.92.0/24 +13.215.93.0/25 +13.215.93.128/26 +13.228.69.0/24 +13.229.187.192/27 +13.229.187.232/29 +13.250.186.0/29 +13.250.186.128/27 +13.250.186.16/29 +13.250.186.160/27 +13.250.186.192/29 +13.250.186.200/29 +13.250.186.208/29 +13.250.186.8/29 +13.251.113.64/26 +13.251.116.0/23 +18.136.1.192/27 +18.136.1.224/27 +18.138.134.128/25 +18.138.244.0/23 +18.139.204.176/28 +18.139.204.192/27 +18.140.177.0/26 +18.140.177.64/26 +18.141.148.0/26 +18.141.148.128/25 +18.141.150.0/23 +18.141.152.0/24 +18.141.154.0/23 +18.141.226.0/23 +18.141.238.0/26 +18.141.238.68/30 +18.141.66.248/30 +18.141.66.252/30 +3.0.5.224/27 +52.220.191.0/26 +52.221.221.128/29 +52.76.127.0/24 +54.251.31.128/26 +54.255.254.192/26 +13.210.2.192/26 +13.210.67.128/26 +13.211.12.160/27 +13.211.12.192/29 +13.211.12.200/29 +13.211.12.208/29 +13.211.12.216/29 +13.211.12.248/29 +13.211.166.192/29 +13.211.166.200/29 +13.236.8.0/25 +13.236.82.128/27 +13.236.82.96/27 +13.54.63.128/26 +13.55.255.216/29 +3.104.82.0/23 +3.105.172.0/22 +3.105.5.0/27 +3.105.5.32/27 +3.24.1.208/28 +3.24.227.192/26 +3.25.138.0/26 +3.25.138.64/26 +3.25.178.128/26 +3.25.248.0/22 +3.25.37.128/25 +3.25.37.64/26 +3.25.38.0/23 +3.25.40.0/24 +3.25.43.0/24 +3.25.44.0/23 +3.25.47.28/30 +3.25.47.32/30 +3.26.109.216/30 +3.26.127.24/29 +3.26.137.0/24 +3.26.138.0/23 +3.26.140.64/26 +3.26.246.0/23 +3.26.248.0/22 +3.26.58.224/27 +3.26.81.0/27 +3.26.81.32/27 +3.26.82.236/30 +3.26.82.240/29 +3.26.83.0/24 +3.26.84.0/23 +3.26.86.0/23 +3.26.88.0/28 +3.26.88.16/28 +54.153.254.0/24 +54.252.254.192/26 +54.252.79.128/26 +108.136.151.0/24 +108.136.154.16/28 +108.136.154.32/28 +108.136.154.48/28 +108.136.221.0/26 +108.137.114.0/28 +108.137.114.64/26 +108.137.58.0/26 +108.137.58.128/26 +108.137.58.192/26 +108.137.58.64/26 +15.222.16.32/27 +15.222.16.8/29 +15.222.16.96/27 +15.222.43.0/27 +15.222.43.128/26 +15.222.43.32/27 +15.222.43.64/26 +15.223.100.0/24 +15.223.102.0/23 +15.223.52.0/23 +3.96.143.128/26 +3.96.143.192/26 +3.96.2.68/30 +3.96.2.72/30 +3.96.84.0/26 +3.97.192.112/29 +3.97.192.128/25 +3.97.20.0/22 +3.97.217.0/24 +3.97.218.0/24 +3.97.219.0/24 +3.97.230.0/25 +3.97.49.128/25 +3.97.99.128/27 +3.97.99.160/27 +3.97.99.64/28 +3.97.99.96/27 +3.98.171.196/30 +3.98.171.224/29 +3.98.171.92/30 +3.98.24.0/28 +3.98.24.16/28 +3.98.86.0/23 +3.99.124.0/26 +3.99.194.0/23 +3.99.196.0/22 +35.182.14.208/29 +35.182.14.216/29 +35.182.14.48/29 +35.183.255.0/24 +35.183.38.0/27 +35.183.38.32/29 +35.183.38.40/29 +35.183.38.48/29 +35.183.38.56/29 +35.183.38.64/29 +99.79.126.0/24 +99.79.169.0/24 +99.79.20.192/27 +99.79.20.224/27 +99.79.34.0/23 +18.156.52.0/24 +18.156.54.0/23 +18.157.237.128/26 +18.157.237.192/26 +18.157.71.192/26 +18.184.138.224/27 +18.184.2.128/25 +18.184.203.128/27 +18.192.142.0/23 +18.192.216.0/22 +18.196.161.0/27 +18.196.161.184/29 +18.196.161.192/29 +18.196.161.200/29 +18.196.161.32/27 +18.196.161.80/29 +18.196.161.88/29 +3.120.181.224/27 +3.122.128.0/23 +3.123.12.192/26 +3.123.14.0/24 +3.123.15.0/25 +3.123.44.0/27 +3.123.44.128/27 +3.123.44.160/27 +3.123.44.80/28 +3.123.44.96/27 +3.127.48.128/26 +3.127.48.244/30 +3.127.48.248/30 +3.127.74.0/23 +3.64.1.0/26 +3.64.1.128/26 +3.64.1.192/29 +3.64.1.200/29 +3.64.1.64/26 +3.64.226.232/29 +3.64.226.240/30 +3.65.246.0/28 +3.65.246.16/28 +3.66.172.0/24 +3.68.251.176/30 +3.68.251.232/29 +3.70.195.128/25 +3.70.195.64/26 +3.70.211.0/25 +3.70.212.128/26 +3.71.104.0/24 +3.71.120.0/22 +3.72.168.0/24 +3.72.33.128/25 +3.74.148.128/26 +3.75.112.0/24 +35.157.127.248/29 +35.158.127.64/26 +35.158.136.0/24 +52.57.254.0/24 +52.59.127.0/24 +16.62.56.224/28 +16.62.56.240/28 +16.62.70.0/23 +13.48.186.128/27 +13.48.186.160/27 +13.48.186.192/27 +13.48.32.0/24 +13.48.4.128/28 +13.48.4.144/28 +13.48.4.160/28 +13.48.4.192/29 +13.48.4.208/29 +13.48.4.216/29 +13.48.4.224/29 +13.48.74.0/24 +13.49.126.128/26 +13.49.143.0/26 +13.49.143.64/26 +13.49.253.224/27 +13.49.40.64/26 +13.49.42.0/23 +13.50.12.192/26 +13.50.89.0/24 +13.51.120.0/24 +13.51.253.80/29 +13.51.29.0/27 +13.51.29.32/27 +13.51.71.152/29 +13.51.71.160/30 +13.51.71.176/28 +13.51.71.192/28 +13.51.95.0/24 +13.51.96.0/24 +13.51.97.0/24 +13.53.180.0/23 +13.53.63.128/27 +13.53.63.160/27 +13.53.63.192/27 +16.16.2.0/23 +16.170.199.0/26 +16.171.48.0/22 +15.160.55.112/29 +15.160.90.64/26 +15.161.135.0/26 +15.161.135.164/30 +15.161.135.64/27 +15.161.135.96/27 +15.161.136.0/24 +15.161.140.0/23 +15.161.164.128/26 +15.161.192.0/26 +15.161.192.240/28 +15.161.192.64/26 +15.161.247.128/27 +15.161.247.64/27 +15.161.247.96/27 +15.161.66.0/26 +15.161.66.128/26 +15.161.66.64/26 +15.161.68.128/26 +15.161.68.192/26 +18.102.2.0/23 +35.152.74.128/29 +35.152.74.136/30 +35.152.74.144/28 +35.152.74.160/28 +35.152.86.0/24 +35.152.87.0/24 +35.152.88.0/24 +18.100.74.0/23 +108.128.160.0/23 +108.128.162.0/24 +176.34.159.192/26 +18.200.212.0/23 +3.248.176.0/22 +3.248.180.128/25 +3.248.180.40/29 +3.248.180.64/26 +3.248.186.0/27 +3.248.186.128/25 +3.248.186.32/27 +3.248.186.64/29 +3.248.186.92/30 +3.248.216.32/27 +3.248.244.0/26 +3.248.244.240/30 +3.248.245.0/24 +3.248.246.0/23 +3.249.28.0/23 +3.250.209.192/26 +3.250.210.0/23 +3.250.243.64/26 +3.250.244.0/26 +3.251.104.0/26 +3.251.104.128/25 +3.251.105.0/25 +3.251.105.128/25 +3.251.106.128/25 +3.251.109.92/30 +3.251.110.208/28 +3.251.110.224/28 +3.251.144.0/29 +3.251.148.120/29 +3.251.152.44/30 +3.251.215.192/26 +3.251.216.0/23 +3.251.56.0/24 +3.251.62.128/25 +3.251.94.0/24 +3.251.95.128/27 +3.251.95.96/27 +3.252.50.64/26 +34.242.153.128/26 +34.242.153.224/28 +34.242.153.240/28 +34.245.205.0/27 +34.245.205.128/28 +34.245.205.160/27 +34.245.205.64/27 +34.245.205.96/27 +34.245.82.0/28 +34.245.82.16/28 +34.245.82.32/28 +34.245.82.48/28 +34.250.63.248/29 +52.19.124.0/23 +52.212.248.0/26 +52.215.218.112/28 +52.215.218.64/28 +54.228.16.0/26 +63.34.60.0/22 +99.80.34.128/25 +99.80.34.48/28 +99.80.34.64/26 +99.80.88.0/26 +99.80.88.64/26 +13.40.1.192/26 +13.40.202.0/23 +13.40.204.0/22 +13.41.1.160/27 +18.130.91.144/30 +18.130.91.148/30 +18.132.146.192/26 +18.132.21.0/24 +18.132.22.0/23 +18.133.45.0/26 +18.133.45.64/26 +18.134.255.160/27 +18.134.255.192/27 +18.134.255.224/27 +18.134.68.0/22 +18.135.226.192/26 +18.168.133.0/24 +18.168.33.0/24 +18.168.34.0/23 +18.168.36.0/24 +18.168.37.0/27 +18.168.37.136/29 +18.168.37.144/30 +18.168.37.160/28 +18.168.37.176/28 +18.168.37.32/28 +18.168.37.48/30 +18.168.37.64/26 +18.169.230.136/30 +18.169.230.200/29 +3.10.127.32/27 +3.10.17.0/25 +3.10.17.128/25 +3.10.201.128/27 +3.10.201.192/26 +3.10.201.64/27 +3.11.53.0/24 +3.8.168.0/23 +3.8.37.96/27 +3.9.159.64/30 +3.9.159.68/30 +3.9.159.72/30 +3.9.41.0/27 +3.9.41.32/27 +3.9.41.64/27 +3.9.94.0/24 +35.176.32.0/24 +35.176.92.32/29 +35.177.154.128/28 +35.177.154.144/28 +35.177.154.160/28 +35.177.154.176/29 +35.177.154.184/29 +35.177.154.192/29 +35.179.42.0/23 +52.56.127.0/25 +13.36.155.0/24 +13.36.18.0/28 +13.36.18.32/27 +13.36.18.64/27 +13.36.76.0/24 +13.36.77.0/24 +13.36.78.0/24 +13.36.84.112/29 +13.36.84.24/29 +13.36.84.32/30 +13.36.84.44/30 +13.36.84.48/28 +13.36.84.64/28 +13.37.1.64/26 +13.38.132.0/22 +13.38.140.0/23 +13.38.202.64/26 +15.188.102.0/27 +15.188.184.0/24 +15.188.210.0/27 +15.188.210.128/26 +15.188.210.196/30 +15.188.210.200/30 +15.188.210.32/27 +15.188.210.64/27 +15.236.155.192/26 +15.236.231.0/26 +15.236.231.64/26 +15.236.80.0/23 +35.180.1.16/29 +35.180.1.24/29 +35.180.1.32/29 +35.180.1.40/29 +35.180.1.48/29 +35.180.1.56/29 +35.180.1.8/29 +35.180.112.128/27 +35.180.112.160/27 +35.180.244.0/23 +35.181.128.0/24 +52.47.139.0/24 +52.47.73.160/27 +52.47.73.72/29 +3.28.70.112/28 +3.28.70.48/28 +3.28.70.96/28 +3.28.72.0/23 +15.184.1.128/26 +15.184.1.64/26 +15.184.125.0/26 +15.184.125.128/26 +15.184.125.224/29 +15.184.125.232/30 +15.184.125.240/28 +15.184.125.64/26 +15.184.153.0/28 +15.184.184.96/29 +15.184.70.200/29 +15.184.70.224/29 +15.185.141.160/27 +15.185.141.192/26 +15.185.144.0/23 +15.185.245.0/26 +15.185.251.0/26 +15.185.33.192/26 +15.185.33.32/27 +15.185.33.64/27 +15.185.33.96/27 +15.185.86.0/23 +15.185.91.32/27 +157.175.102.128/27 +157.175.102.160/27 +157.175.102.96/27 +157.175.140.0/23 +157.175.255.0/24 +157.241.2.0/23 +157.241.25.0/24 +15.228.1.128/26 +15.228.1.192/26 +15.228.1.64/26 +15.228.103.240/29 +15.228.104.0/24 +15.228.105.0/24 +15.228.106.0/24 +15.228.107.0/28 +15.228.107.16/28 +15.228.126.200/29 +15.228.126.48/30 +15.228.126.72/30 +15.228.129.0/24 +15.228.144.0/24 +15.228.150.128/26 +15.228.151.0/24 +15.228.64.0/22 +15.228.72.64/26 +15.228.92.192/28 +15.228.92.208/28 +15.228.92.224/27 +15.228.97.0/24 +15.229.36.0/23 +15.229.40.0/23 +177.71.207.128/26 +18.228.1.0/29 +18.228.1.16/29 +18.228.1.8/29 +18.228.246.0/23 +18.229.100.0/26 +18.229.100.112/30 +18.229.100.116/30 +18.229.100.128/27 +18.229.100.160/27 +18.229.100.192/26 +18.229.220.128/26 +18.229.220.192/26 +18.229.37.0/27 +18.229.37.32/27 +18.229.70.96/27 +18.229.99.0/24 +18.230.103.0/24 +18.230.104.0/23 +18.230.46.0/27 +18.230.46.128/26 +18.230.46.32/27 +18.230.54.0/23 +18.231.105.0/28 +18.231.105.128/27 +18.231.105.160/29 +18.231.105.168/29 +18.231.105.176/29 +18.231.105.184/29 +18.231.194.8/29 +54.232.40.64/26 +54.233.204.0/24 +54.233.255.128/26 +107.23.255.0/26 +18.206.107.160/29 +18.209.113.240/28 +18.209.113.64/27 +18.213.156.96/28 +18.232.1.128/26 +18.232.1.192/26 +18.232.1.32/30 +18.232.1.36/30 +18.232.1.40/30 +18.232.1.44/30 +18.232.1.48/28 +18.232.1.64/26 +3.208.72.176/28 +3.209.202.48/28 +3.209.83.0/27 +3.209.83.144/28 +3.209.83.160/27 +3.209.83.192/26 +3.209.83.32/27 +3.209.83.64/27 +3.209.83.96/27 +3.209.84.0/25 +3.209.84.128/25 +3.209.85.0/25 +3.209.85.128/27 +3.209.85.160/27 +3.209.85.192/27 +3.209.87.0/25 +3.209.87.128/25 +3.216.135.0/24 +3.216.136.0/21 +3.216.144.0/23 +3.216.148.0/22 +3.216.99.160/27 +3.217.228.0/22 +3.218.180.0/25 +3.218.180.128/25 +3.218.181.0/25 +3.218.181.128/25 +3.218.182.0/25 +3.218.182.128/25 +3.218.183.0/25 +3.218.183.128/25 +3.227.250.128/25 +3.227.4.0/22 +3.228.170.0/26 +3.228.170.128/25 +3.228.170.64/26 +3.228.171.0/25 +3.228.171.128/25 +3.228.172.0/25 +3.228.172.128/25 +3.228.173.0/25 +3.228.173.128/26 +3.228.173.192/26 +3.228.181.0/24 +3.228.182.0/31 +3.228.182.10/32 +3.228.182.100/32 +3.228.182.46/31 +3.228.182.48/28 +3.228.182.5/32 +3.228.182.6/31 +3.228.182.64/27 +3.228.182.8/31 +3.228.182.96/30 +3.231.2.0/25 +3.234.232.224/27 +3.234.248.192/26 +3.235.112.0/21 +3.235.189.100/30 +3.235.189.96/30 +3.235.202.128/26 +3.235.26.0/23 +3.235.32.0/21 +3.236.169.0/25 +3.236.169.192/26 +3.236.32.0/22 +3.236.48.0/23 +3.236.94.128/25 +3.237.107.0/25 +3.238.166.0/24 +3.238.167.0/24 +3.238.178.100/30 +3.238.178.104/29 +3.238.178.112/29 +3.238.178.120/31 +3.238.178.128/27 +3.238.178.160/29 +3.238.178.168/30 +3.238.178.197/32 +3.238.178.198/31 +3.238.178.200/29 +3.238.178.208/28 +3.238.178.224/27 +3.238.207.0/26 +3.238.207.128/25 +3.238.208.0/25 +3.238.208.128/25 +3.238.209.0/25 +3.238.209.128/25 +3.238.210.0/25 +3.238.212.0/22 +3.238.216.128/25 +3.239.152.0/31 +3.239.152.12/31 +3.239.152.128/29 +3.239.152.136/31 +3.239.152.46/31 +3.239.152.48/28 +3.239.152.5/32 +3.239.152.6/31 +3.239.152.64/26 +3.239.152.8/30 +3.239.153.0/24 +3.239.154.0/24 +3.239.155.0/24 +3.239.156.0/31 +3.239.156.10/31 +3.239.156.100/30 +3.239.156.104/29 +3.239.156.112/29 +3.239.157.188/30 +3.239.157.19/32 +3.239.157.192/26 +3.239.157.2/31 +3.239.157.20/30 +3.239.157.24/29 +3.239.157.32/27 +3.239.157.4/30 +3.239.157.64/27 +3.239.157.8/31 +3.239.157.96/30 +3.239.232.0/24 +3.83.168.0/22 +3.91.171.128/25 +34.195.252.0/24 +34.226.106.180/32 +34.226.14.0/24 +34.228.4.208/28 +34.231.114.205/32 +34.231.213.21/32 +34.236.241.44/30 +34.238.188.0/29 +35.168.231.216/29 +35.170.83.0/25 +35.170.83.144/28 +35.170.83.160/28 +35.170.83.176/28 +35.170.83.192/26 +35.171.100.0/28 +35.171.100.128/26 +35.171.100.208/28 +35.171.100.224/27 +35.171.100.64/26 +35.172.155.192/27 +35.172.155.96/27 +44.192.134.240/28 +44.192.135.0/25 +44.192.135.128/25 +44.192.140.112/28 +44.192.140.128/29 +44.192.140.64/28 +44.192.245.160/28 +44.192.255.128/28 +44.194.111.224/30 +44.199.180.0/23 +44.199.222.128/26 +44.202.79.128/25 +44.206.4.0/22 +44.209.84.0/22 +44.210.201.0/24 +44.210.202.0/24 +44.210.246.64/26 +44.210.64.0/22 +52.23.61.0/24 +52.23.62.0/24 +52.55.191.224/27 +54.243.31.192/26 +13.59.250.0/26 +18.117.239.68/30 +18.188.9.0/27 +18.188.9.32/27 +18.188.9.64/29 +18.188.9.80/29 +18.188.9.88/29 +18.216.170.128/25 +18.217.41.192/29 +18.217.41.200/29 +18.217.41.208/29 +18.217.41.216/29 +18.217.41.64/26 +3.12.216.0/22 +3.12.23.128/26 +3.12.23.88/30 +3.12.23.92/30 +3.128.56.128/26 +3.128.56.192/26 +3.128.56.64/26 +3.128.93.0/24 +3.134.215.0/24 +3.139.136.128/27 +3.139.136.184/30 +3.139.136.192/26 +3.140.136.128/27 +3.141.102.184/29 +3.141.102.192/30 +3.141.102.208/28 +3.141.102.224/28 +3.143.206.104/29 +3.144.141.192/26 +3.145.220.0/22 +3.145.230.0/24 +3.145.232.192/26 +3.145.31.0/26 +3.145.31.128/26 +3.15.35.0/24 +3.15.36.0/26 +3.15.36.64/26 +3.17.136.0/23 +3.18.132.0/26 +3.18.132.64/26 +3.19.147.0/25 +3.19.147.128/25 +3.21.86.0/23 +52.15.127.128/26 +52.15.247.208/29 +13.52.1.0/28 +13.52.1.16/28 +13.52.1.32/29 +13.52.110.192/26 +13.52.118.0/23 +13.52.146.128/28 +13.52.146.192/26 +13.52.200.160/27 +13.52.201.0/24 +13.52.202.0/24 +13.52.232.224/27 +13.52.32.96/27 +13.56.112.168/29 +13.56.32.200/29 +13.57.180.176/29 +13.57.180.184/29 +13.57.180.208/29 +13.57.180.216/29 +13.57.180.64/26 +18.144.158.0/27 +18.144.158.64/26 +18.144.184.0/23 +18.144.76.128/25 +18.144.76.32/29 +3.101.100.128/25 +3.101.114.0/26 +3.101.114.64/26 +3.101.145.192/27 +3.101.145.224/27 +3.101.156.0/26 +3.101.157.128/25 +3.101.158.0/23 +3.101.160.240/29 +3.101.160.44/30 +3.101.160.48/28 +3.101.161.0/25 +3.101.161.128/25 +3.101.162.0/24 +3.101.163.0/26 +3.101.163.64/28 +3.101.163.80/28 +3.101.163.96/28 +3.101.164.0/24 +3.101.176.0/24 +3.101.177.20/30 +3.101.177.48/29 +3.101.194.128/26 +3.101.200.0/24 +3.101.201.128/25 +3.101.202.0/23 +3.101.208.0/24 +3.101.209.0/26 +3.101.52.208/30 +3.101.52.212/30 +3.101.87.0/26 +52.52.191.128/26 +54.183.255.128/26 +54.241.32.64/26 +18.236.61.0/25 +34.216.226.136/29 +34.216.226.144/28 +34.216.226.192/28 +34.216.226.208/28 +34.216.226.224/29 +34.216.226.232/29 +34.216.226.240/28 +34.216.51.0/25 +34.217.141.0/28 +34.217.141.16/28 +34.217.141.224/27 +34.217.141.32/28 +34.218.119.112/28 +34.218.119.128/28 +34.218.119.144/28 +34.218.119.32/27 +34.218.119.80/28 +34.218.119.96/28 +34.218.216.160/28 +34.218.216.176/28 +34.218.216.208/28 +34.218.216.240/28 +34.221.183.224/27 +34.221.183.32/27 +34.222.66.64/27 +34.223.112.0/26 +34.223.112.128/25 +34.223.112.64/27 +34.223.12.224/27 +34.223.21.192/26 +34.223.22.176/29 +34.223.24.0/22 +34.223.37.224/27 +34.223.45.0/25 +34.223.45.128/25 +34.223.46.0/25 +34.223.46.128/25 +34.223.47.0/27 +34.223.47.128/25 +34.223.49.128/25 +34.223.51.0/26 +34.223.64.224/27 +34.223.68.0/22 +34.223.72.0/23 +34.223.74.0/25 +34.223.80.192/26 +34.223.92.0/25 +34.223.95.176/28 +34.223.96.0/22 +35.162.63.192/26 +35.167.191.128/26 +35.80.35.0/24 +35.80.36.192/28 +35.80.36.208/28 +35.80.36.224/28 +35.80.88.0/22 +35.80.92.0/22 +35.82.136.192/29 +35.83.248.40/29 +35.84.36.0/30 +35.86.187.128/26 +35.86.66.0/23 +35.89.72.0/25 +35.90.103.192/26 +35.90.132.0/23 +35.92.124.192/26 +35.92.26.0/24 +35.93.124.0/22 +44.227.178.0/24 +44.233.54.0/23 +44.234.106.0/23 +44.234.108.128/25 +44.234.113.64/26 +44.234.123.128/26 +44.234.123.64/26 +44.234.22.128/26 +44.234.28.0/22 +44.234.54.0/23 +44.234.73.116/30 +44.234.73.120/30 +44.234.90.252/30 +44.242.143.180/31 +44.242.143.224/30 +44.242.143.242/31 +44.242.143.244/30 +44.242.143.248/31 +44.242.143.250/31 +44.242.143.252/30 +44.242.161.0/30 +44.242.161.10/31 +44.242.161.12/30 +44.242.161.16/31 +44.242.161.20/30 +44.242.161.4/31 +44.242.161.6/31 +44.242.161.8/31 +44.242.176.192/26 +44.242.177.0/26 +44.242.177.128/27 +44.242.177.64/26 +44.242.178.0/24 +44.242.179.0/24 +44.242.180.0/24 +44.242.181.0/27 +44.242.181.32/28 +44.242.184.128/25 +52.43.76.88/29 +54.190.198.32/28 +54.244.46.0/23 +54.244.52.192/26 +54.245.168.0/26 +2600:1ff2:4000::/40 +2a05:d07a:a000::/40 +2600:1f68:1000::/40 +2a05:d070:e000::/40 +240f:80ff:4000::/40 +2600:1f01:4822::/56 +2a05:d034:5000::/40 +2406:da1b::/36 +240f:80f8:4000::/40 +2600:9000:3000::/36 +2600:9000:f600::/39 +2400:6500:0:9::2/128 +2600:1f01:4874::/47 +2600:1f19:8000::/36 +2600:1fff:2000::/40 +2a05:d07a:c000::/40 +2600:1f11:8000::/36 +2a05:d034:1000::/40 +2a05:d07c:a000::/40 +2406:da60:6000::/40 +2600:1fa0:4000::/40 +2600:1f1d:8000::/36 +2620:107:4000:a940::/58 +2406:da61:4000::/40 +2406:daf1:a000::/40 +2600:1f15::/36 +2600:1ffd:80a7::/48 +2600:1ff9:e000::/40 +2406:da70:6000::/40 +2406:daa0:6000::/40 +2406:daa0:7000::/40 +2406:daf8:e000::/40 +2600:1f60:1000::/40 +2a05:d070:4000::/40 +2a05:d03a:4000::/40 +2406:da15::/36 +240f:80f9:4000::/40 +2406:da70:8000::/40 +2406:daf9:a000::/40 +2620:107:4000:a080::/58 +2600:1fa0:2000::/40 +2600:9000:f540::/42 +2a05:d000:a000::/40 +2a05:d078:e000::/40 +2406:da70:4000::/40 +2600:1f60:2000::/40 +2406:da61:7000::/40 +2600:1ffd:80c8::/48 +2620:107:4000:2::92/128 +2600:1f68:4000::/40 +2600:1ff0:e000::/40 +2a05:d050:2000::/40 +2404:c2c0::/40 +2600:9000:f000::/38 +2600:9000:f500::/43 +2a05:d030:1000::/40 +2a05:d030:5000::/40 +2406:daf0:2000::/40 +2600:1f01:4802::/47 +2620:108:7000::/44 +2406:daf0:9000::/40 +2600:1f01:4860::/47 +2600:1ff1:8000::/39 +2600:9000:a800::/40 +2a05:d01e::/36 +2406:da00:8000::/40 +2600:1f00:c000::/40 +2620:107:4000:7100::/56 +2404:c2c0:2e80::/48 +2600:1ff8:c000::/40 +2600:9000:ddd::/48 +2620:107:4000:2::96/128 +2a05:d034:2000::/40 +2406:da70:f000::/40 +2406:dafe:e000::/40 +2600:1fff:1000::/40 +2620:107:4002::/48 +2406:daf8:4000::/40 +2406:dafe:c000::/40 +2600:1f18::/33 +2600:1ff1:4000::/40 +2406:da1c::/36 +2400:6500:0:7600::/56 +2406:da1a::/36 +2406:daf8:c000::/40 +2406:daf9:6000::/40 +2600:9000:a700::/40 +2a05:d07a:e000::/40 +2406:daf0:f000::/40 +2406:daf2:2000::/40 +2600:1f01:4880::/47 +2400:6500:0:7900::/56 +2404:c2c0:2f00::/40 +2a05:d031:8000::/40 +2400:6500:ff00::/64 +2a01:578:0:7000::/56 +2a05:d071:6000::/40 +2a05:d07e:a000::/40 +2406:daf2:6000::/40 +2406:dafc:4000::/40 +2a05:d070:a000::/40 +2406:da61:b000::/40 +2600:1f70:6000::/40 +2a05:d07a:2000::/40 +2a05:d07a:6000::/40 +2406:dafc:c000::/40 +2600:1f70:4000::/40 +2600:1ff1:c000::/40 +2600:9000:ae00::/40 +2a05:d000:9000::/40 +2a05:d07e:4000::/40 +2406:dafa:a000::/40 +2620:107:4000:7000::/56 +2a05:d030:c000::/40 +2a05:d079:c000::/40 +2a05:d050:6000::/40 +2406:da61:f000::/40 +2406:dafc:e000::/40 +2a01:578:0:7100::/56 +2406:dafc:8000::/40 +2600:1ff9:6000::/40 +2600:1ffd:807f::/48 +2600:1f01:4810::/47 +2a05:d07f:5000::/40 +2406:da60:f000::/40 +2600:1ffd:82be::/48 +2600:9000:a500::/40 +2404:c2c0:4000::/40 +2406:da61:e000::/40 +2406:daf8:a000::/40 +2600:1ff1:e000::/40 +2600:1ffd:80e1::/48 +2620:107:4000:40::/64 +2406:daf2:a000::/40 +2400:7fc0:2600::/40 +2406:da61:1000::/40 +2600:9000:f800::/37 +2400:6500:0:9::3/128 +2400:6500:0:9::1/128 +2404:c2c0:200::/40 +2406:da00:f000::/40 +2406:dafe:1000::/40 +2a05:d078:c000::/40 +2406:da60:c000::/40 +2406:dafc:7000::/40 +2600:1f00:5000::/40 +2400:6500:0:7a00::/56 +2600:1ffc:5000::/40 +2400:6500:0:9::4/128 +2600:1ff9:1000::/40 +2a05:d079:5000::/40 +2406:da68:9000::/40 +2406:dafe:4000::/40 +2600:1f70:1000::/40 +2406:da68:2000::/40 +2600:1f16::/35 +2600:1ffd:8492::/48 +2a05:d034:8000::/40 +2406:da70:9000::/40 +2600:1f1a:8000::/36 +2a05:d078:5000::/40 +2406:da19::/36 +2620:108:d000::/44 +2404:c2c0:2a00::/40 +2600:1ffa:4000::/40 +2600:9000:f400::/40 +2a05:d071:9000::/40 +2a05:d078:8000::/40 +2406:daf9:8000::/40 +2600:1f70:c000::/40 +2600:1ffc:1000::/40 +2a05:d030:a000::/40 +2406:daf2:9000::/40 +2600:1f60:5000::/40 +2600:1f61:8000::/39 +2600:9000:ac00::/40 +2600:f0f0:4000::/44 +2406:daf9:7000::/40 +2620:107:4000:7400::/56 +2a05:d072:e000::/40 +2600:1fff:4000::/40 +2620:107:4000:a880::/58 +2406:da00:2000::/40 +2600:1ff8:5000::/36 +2600:9000:af00::/40 +2406:daf8:f000::/40 +2600:1ffd:8149::/48 +2620:107:4008::/45 +2400:6500:0:7200::/56 +2406:da61:6000::/40 +2600:1ff9:c000::/40 +2600:1ffb:8080::/48 +2600:1ffe:e000::/40 +2600:9000:aa00::/40 +2620:107:3001::/48 +2406:daa0:8000::/40 +2a05:d000:4000::/40 +2404:c2c0:2200::/40 +2400:7fc0:2f00::/40 +240f:80fa:8000::/40 +2a05:d072:4000::/40 +2600:1ffe:c000::/40 +2600:9000:f538::/45 +2600:f00f::/40 +2606:f40:3001::/48 +2600:1f12::/36 +2a05:d011::/36 +240f:80fe:8000::/40 +2a05:d03a:5000:400::/56 +2400:7fc0:2100::/40 +2406:da70:e000::/40 +2600:1f12:4000::/36 +2600:1f1c::/36 +2600:f0f0:1000::/44 +2620:107:4000:2::90/128 +2406:da1e::/32 +2406:daf8:b000::/40 +2a05:d030:4000::/40 +2400:7fc0:2800::/40 +2406:da60:7000::/40 +2600:1ff0:2000::/40 +2600:1ffd:807b::/48 +2406:daff:2000::/40 +240f:8014::/36 +240f:80a0:4000::/40 +2600:1ffb:8021::/48 +2406:da18::/36 +2406:dafa:2000::/40 +2a05:d031:e000::/40 +2404:c2c0:8000::/36 +2600:1ff0:6000::/40 +2600:1ffb:60c0::/48 +2a05:d03a:5000:300::/56 +2400:6500:0:7800::/56 +2a05:d07c:4000::/40 +2600:1f01:48e2::/47 +2600:1f60:4000::/40 +2a05:d016::/36 +2406:daf1:7000::/40 +2406:dafc:ffa0::/46 +2600:9000:5380::/41 +2a05:d079:9000::/40 +2406:da17::/36 +2406:daf0:b000::/40 +2406:daff:7000::/40 +2600:1ffc:4000::/40 +2406:da60:1000::/40 +2620:107:4000:a900::/58 +2a05:d07f:9000::/40 +2406:da60:2000::/40 +2a05:d031:9000::/40 +2a05:d031:c000::/40 +2406:daf9:f000::/40 +2600:1ffe:8000::/40 +2a05:d07e:9000::/40 +2400:6500:0:7400::/56 +2400:7fc0:2a00::/40 +2600:1f14::/34 +2600:9000:1000::/36 +2600:9000:f530::/46 +2a05:d07f:8000::/40 +2600:1f60:6000::/40 +2a05:d071:8000::/40 +2406:daff:1000::/40 +2600:1ffd:812f::/48 +2a05:d000:2000::/40 +2a05:d031:6000::/40 +2a05:d071:1000::/40 +2406:daff:9000::/40 +2600:1f61:e000::/40 +2600:1ffd:8285::/48 +2a05:d014::/35 +2600:1ff0:8000::/39 +2600:1ffd:8422::/48 +2a05:d030:2000::/40 +2406:da60:b000::/40 +2600:1ff2:6000::/40 +2a05:d079:a000::/40 +2600:1ffe:6000::/40 +2406:da61:9000::/40 +2406:daf8:9000::/40 +2406:da68:6000::/40 +2a05:d050:5000::/40 +240f:80fa:4000::/40 +2a01:578:3::/64 +2600:1f14:8000::/36 +2a05:d070:5000::/40 +2a05:d072:c000::/40 +2400:7fc0:4000::/40 +2406:daf1:9000::/40 +2600:1ff2:1000::/40 +2600:1ffd:80f0::/48 +2400:6500:0:7700::/56 +2600:1f00:2000::/40 +2600:1ffd:84af::/48 +2600:9000:2000::/36 +2a05:d000:5000::/40 +2406:da61:a000::/40 +2406:daf1:f000::/40 +2600:1ffd:85e8::/48 +2400:7fc0:2e80::/48 +2406:da1f::/36 +2600:9000:a300::/40 +2a01:578:0:7400::/56 +2a05:d050:a000::/40 +2a05:d078:9000::/40 +2406:da60:8000::/40 +2406:da68:7000::/40 +2600:f00c::/39 +2a05:d031:2000::/40 +2a05:d07c:2000::/40 +2406:daf9:e000::/40 +2600:1f60:e000::/40 +2600:1ff1:1000::/40 +2400:7fc0:500::/40 +2a05:d079:4000::/40 +2406:daf0:6000::/40 +2600:1ffd:8188::/48 +2600:1f10:4000::/36 +2406:da60:a000::/40 +2406:dafc:1000::/40 +2600:1f70:8000::/40 +2600:1fa0:6000::/40 +2600:1fff:c000::/40 +2406:daf1:c000::/40 +2600:9000:4000::/36 +2a05:d012::/36 +2406:daf1:6000::/40 +2600:1f00:4000::/40 +2404:c2c0:2800::/40 +2406:daf0:1000::/40 +2406:dafa:6000::/40 +2620:107:4000:2::93/128 +2600:1ffd:838e::/48 +2600:1ff8:2000::/40 +2600:1f01:4850::/47 +2600:1f01:48a0::/47 +2600:1f1f:8000::/36 +2600:9000:fff::/48 +2a05:d03a:6000::/40 +2406:da00:e000::/40 +2600:9000:a400::/40 +2a05:d079:2000::/40 +2600:1f1e::/36 +2406:daff:6000::/40 +2600:1f61:5000::/40 +2400:7fc0:200::/40 +2406:daf1:e000::/40 +240f:80a0:8000::/40 +2600:1fff:e000::/40 +2a05:d072:a000::/40 +2a01:578:0:7700::/56 +2600:1f61:1000::/40 +2400:6700:ff00::/64 +2403:b300:ff00::/64 +2406:daa0:2000::/40 +2406:daf2:8000::/40 +2406:daf1:8000::/40 +2600:1ffc:8000::/40 +2620:107:300f::/64 +2a05:d07c:8000::/40 +2406:daf8:6000::/40 +2600:1ffd:80d0::/48 +2a05:d01a::/36 +2406:da1d::/36 +2620:107:4000:a8c0::/58 +2a05:d034:4000::/40 +2404:c2c0:500::/40 +2406:daf8:8000::/40 +2600:1f68:c000::/40 +2600:1ffd:816c::/48 +2600:1ffe:1000::/40 +240f:80ff:8000::/40 +2600:1f01:48c0::/47 +2600:9000:5308::/45 +2600:9000:f534::/46 +2a05:d01c::/36 +2a05:d034:9000::/40 +2600:1ff8:4000::/40 +2600:1ffd:83ad::/48 +2a05:d07f:6000::/40 +2406:da68:b000::/40 +2406:daff:8000::/40 +2600:1f13::/36 +2406:daff:b000::/40 +2600:1ff9:2000::/40 +2600:9000:a900::/40 +2a05:d07a:4000::/40 +2600:1f01:4890::/47 +2600:1f68:8000::/39 +2a05:d030:8000::/40 +2404:c2c0:2c00::/40 +240f:80f8:8000::/40 +2600:1ffd:83d2::/48 +2600:9000:a200::/40 +2620:107:4000:7800::/56 +2a01:578:0:7200::/56 +2406:daf1:b000::/40 +2406:da00:b000::/40 +2406:da61:8000::/40 +2406:daf2:f000::/40 +2600:1f13:8000::/36 +2406:da11::/36 +240f:8000:8000::/40 +2600:1f1c:8000::/36 +2600:9000:ad00::/40 +2600:f00c:8000::/39 +2a05:d018::/36 +2a05:d03a:5000:500::/56 +2406:dafc:f000::/40 +2600:1ff0:4000::/40 +2600:1ff9:5000::/40 +2600:1ffd:85c0::/48 +2600:f000::/39 +2406:da68:c000::/40 +2600:1ffb:80a1::/48 +2406:daf8:1000::/40 +2406:dafe:8000::/40 +2600:1f01:4820::/47 +2a05:d034:e000::/40 +2a05:d07e:8000::/40 +240f:80f9:8000::/40 +2620:107:4000:2::94/128 +2406:da61:c000::/40 +2600:1f01:48d2::/47 +2600:1ffd:818f::/48 +2600:1ffd:81c2::/48 +2a05:d050:e000::/40 +2406:da61:2000::/40 +2600:1f14:4000::/36 +2600:1ffd:84bd::/48 +2600:1f01:4800::/47 +2a05:d078:1000::/40 +2a05:d078:4000::/40 +2a05:d07a:8000::/40 +2a05:d07e:c000::/40 +2406:dafc:b000::/40 +2a05:d050:9000::/40 +2a05:d07f:c000::/40 +2600:1f12:8000::/36 +2600:1ffd:803f::/48 +2a05:d07e:1000::/40 +2406:daf0:8000::/40 +2406:dafc:6000::/40 +2406:dafe:f000::/40 +2600:1f01:48e0::/47 +2620:107:4000:2::95/128 +2a05:d030:9000::/40 +2a05:d03a:a000::/40 +2600:1f68:5000::/40 +2600:1ff8:1000::/40 +2a05:d03a:5000:200::/56 +2600:9000:5300::/45 +2a05:d031:a000::/40 +2a05:d050:c000::/40 +2406:daa0:4000::/40 +2406:daf9:2000::/40 +2804:800:ff00::/64 +2a05:d070:2000::/40 +2a05:d079:6000::/40 +2406:da00:1000::/40 +2406:daa0:b000::/40 +2406:daf0:c000::/40 +2a05:d071:2000::/40 +2400:7fc0:2400::/40 +2406:daf1:1000::/40 +2600:1ffa:c000::/40 +2a05:d031:1000::/40 +2a05:d072:6000::/40 +2a05:d07c:1000::/40 +2a05:d07f:2000::/40 +2406:dafe:2000::/40 +2600:1f15:8000::/36 +2a05:d015::/36 +2600:1ff8:8000::/40 +2406:daf9:c000::/40 +2600:1f1f::/36 +2600:1ffd:8165::/48 +2a05:d078:2000::/40 +240f:8000:4000::/40 +2a05:d07e:6000::/40 +2400:7fc0:8000::/36 +2600:1ff2:e000::/40 +2600:1ffd:819f::/48 +2400:6500:0:7500::/56 +2600:1f01:48b0::/47 +2600:1ff1:2000::/40 +2600:1ff1:6000::/40 +2a05:d07e:e000::/40 +2406:da60:e000::/40 +2406:da68:4000::/40 +2406:da70:c000::/40 +2600:1ff1:5000::/40 +2620:107:4000:2::97/128 +2406:da68:8000::/40 +2600:1f17:8000::/36 +2600:1ffa:1000::/40 +2a05:d070:6000::/40 +2406:da00:4000::/40 +2620:107:4000:7a00::/56 +2404:c2c0:2600::/40 +2600:1f00:6000::/40 +2600:1f1e:8000::/36 +2a05:d071:4000::/40 +2406:dafc:a000::/40 +2406:dafe:6000::/40 +2406:daff:c000::/40 +2406:daff:f000::/40 +2600:9000:f520::/44 +2a05:d030:6000::/40 +2406:da14::/36 +2600:1ff9:8000::/40 +2600:1ff0:1000::/40 +2600:1fff:8000::/40 +2600:9000:a100::/40 +2a05:d078:a000::/40 +2620:107:4000:2::91/128 +2a05:d000:8000::/40 +2600:1f01:4804::/47 +2a05:d050:4000::/40 +2404:c2c0:2100::/40 +2804:800:0:7000::/56 +2406:daf0:4000::/40 +2600:1f10:8000::/36 +2600:f000:8000::/39 +2a05:d072:9000::/40 +2406:dafc:9000::/40 +2600:1fa0:5000::/40 +2406:daa0:e000::/40 +2600:1f01:4840::/47 +2600:1f68:2000::/40 +2a05:d072:5000::/40 +2406:daf9:b000::/40 +2a05:d07c:5000::/40 +2406:da70:7000::/40 +2406:da00:ff00::/64 +2406:da60:9000::/40 +2406:daf2:4000::/40 +2600:1f01:4830::/47 +2600:1fa0:e000::/40 +2600:1ffc:2000::/40 +2a05:d079:8000::/40 +2406:dafa:c000::/40 +2600:1f61:4000::/40 +2600:1ffd:8508::/48 +2406:da00:c000::/40 +2600:1f1c:4000::/36 +2a05:d018:1000::/36 +2400:6500:0:7b00::/56 +240f:80fc:4000::/40 +2600:1f11::/36 +2600:1f61:c000::/40 +2620:107:4000:a840::/58 +2400:7fc0:2c00::/40 +2406:da70:b000::/40 +2600:1f60:8000::/39 +2a05:d070:8000::/40 +2406:da00:7000::/40 +2600:1ffd:833b::/48 +2600:1fff:3000::/40 +2620:107:4004::/48 +2a05:d070:1000::/40 +2a05:d07e:2000::/40 +2406:da70:1000::/40 +2406:daff:e000::/40 +2a05:d000:c000::/40 +2a05:d071:c000::/40 +2a05:d07f:e000::/40 +2406:daa0:f000::/40 +2406:daf2:1000::/40 +2600:1f00:1000::/40 +2600:1ffd:8066::/48 +2400:6500:0:7000::/56 +2406:daa0:9000::/40 +2406:dafa:8000::/40 +2600:1ff2:c000::/40 +2a05:d071:e000::/40 +2400:6500:100:7200::/56 +2406:dafa:4000::/40 +2404:c2c0:2400::/40 +2406:daf1:2000::/40 +2600:1ffa:e000::/40 +2600:1ffc:6000::/40 +2406:daf0:e000::/40 +2406:dafc:ff80::/46 +2600:1ff2:2000::/40 +2600:1ffa:8000::/40 +2600:1ffb:60c1::/48 +2600:1f00:8000::/40 +2400:7fc0::/40 +2406:daff:a000::/40 +2a01:578:0:7900::/56 +2a05:d07f:a000::/40 +2a05:d03a:e000::/40 +2406:da13::/36 +2a05:d031:4000::/40 +2406:daf9:1000::/40 +2600:1ffd:85b2::/48 +2600:9000:5320::/43 +2a05:d03a:2000::/40 +2a05:d03a:1000::/40 +2600:1f18:8000::/36 +2620:107:4000:7700::/56 +240f:80fc:8000::/40 +2600:1f01:48d0::/47 +2406:daf2:e000::/40 +2600:1ffe:5000::/40 +2a05:d034:6000::/40 +2600:1f70:e000::/40 +2600:9000:5310::/44 +2a05:d019::/36 +2a05:d070:9000::/40 +2406:daf2:7000::/40 +2406:dafe:9000::/40 +2600:9000:f580::/41 +2406:da70:2000::/40 +2600:1f70:2000::/40 +2600:1ffd:8190::/48 +2406:daa0:1000::/40 +2600:1f00:e000::/40 +2600:1ffd:81a7::/48 +2406:dafa:e000::/40 +2600:1f68:6000::/40 +2600:1ff2:8000::/39 +2a05:d072:1000::/40 +2a05:d07f:1000::/40 +2600:1ffb:40c0::/46 +2600:1fff:6000::/40 +2a05:d000:e000::/40 +2406:da00:a000::/40 +2600:1fa0:1000::/40 +2600:1ffc:c000::/40 +2406:daf8:7000::/40 +2406:daf9:9000::/40 +2600:1ff2:5000::/40 +2a05:d070:c000::/40 +2600:1f01:4870::/47 +2a01:578:0:7800::/56 +2a05:d079:e000::/40 +2600:1fa0:8000::/39 +2406:dafe:b000::/40 +2406:daf1:4000::/40 +2600:1f01:4844::/47 +2600:1fa0:c000::/40 +2a05:d03a:9000::/40 +2406:daf9:4000::/40 +2600:1f68:e000::/40 +2600:1ff9:4000::/40 +2600:1ffc:e000::/40 +2a05:d050:8000::/40 +2a05:d079:1000::/40 +2600:1ffe:4000::/40 +2600:1ff0:c000::/40 +2620:107:4007::/64 +2a05:d07c:6000::/40 +2406:da12::/36 +2406:dafc:ff60::/46 +2406:da00:9000::/40 +2a05:d071:a000::/40 +2600:9000:5340::/42 +2606:f40:1001::/48 +2406:daff:4000::/40 +2600:1ffd:831b::/48 +2a05:d034:c000::/40 +2a05:d07f:4000::/40 +2406:da16::/36 +2406:daa0:c000::/40 +2600:1ffb:80a0::/48 +2620:107:4000:7200::/56 +2406:da68:e000::/40 +2406:daf2:c000::/40 +2600:1ff0:5000::/40 +2600:1ffa:2000::/40 +2600:1ffa:6000::/40 +2400:7fc0:2200::/40 +2406:daf0:7000::/40 +2600:1f70:5000::/40 +2620:107:4000:5::/64 +2600:9000:eee::/48 +2a05:d034:a000::/40 +2406:da68:f000::/40 +2406:dafe:7000::/40 +2a05:d03a:5000:100::/56 +2600:1ffd:80cb::/48 +2a05:d07c:c000::/40 +2620:107:4005::/48 +2a05:d000:6000::/40 +2406:da00:6000::/40 +2406:da68:1000::/40 +2600:1f01:4814::/47 +2600:1f01:481a::/47 +2406:da60:4000::/40 +2600:9000:a600::/40 +2620:107:4003::/48 +2a05:d07c:e000::/40 +2600:1f16:8000::/36 +2600:1ffd:8143::/48 +2a05:d07c:9000::/40 +2a05:d07e:5000::/40 +2406:daf8:2000::/40 +2406:dafc:2000::/40 +2600:1ff8:6000::/40 +2a05:d050:1000::/40 +240f:80fe:4000::/40 +2a05:d03a:c000::/40 +2600:9000:ab00::/40 +240f:8018::/36 +2600:1ffa:5000::/40 +2a01:578:13::/64 +2406:daa0:a000::/40 +2406:dafe:a000::/40 +2600:1f60:c000::/40 +2600:1f61:2000::/40 +2600:1f61:6000::/40 +2600:1fff:5000::/40 +2406:daf0:a000::/40 +2600:1f01:48f0::/47 +2600:1f1b:8000::/36 +2a05:d000:1000::/40 +2a05:d030:e000::/40 +2406:da68:a000::/40 +2600:1ffe:2000::/40 +2400:6500:0:7100::/56 +2406:daf2:b000::/40 +2406:da70:a000::/40 +2a05:d078:6000::/40 +2a05:d031:5000::/40 +2a05:d03a:8000::/40 +2a05:d072:2000::/40 +2400:6500:0:7300::/56 +2600:1ff8:e000::/40 +2a05:d072:8000::/40 +2a05:d07a:a000::/40 +2600:1f68:1000::/40 +2a05:d070:e000::/40 +2a05:d034:5000::/40 +240f:80f8:4000::/40 +2600:9000:a310::/48 +2a05:d07a:c000::/40 +2a05:d034:1000::/40 +2600:1fa0:4000::/40 +2600:1ff9:e000::/40 +2406:daa0:6000::/40 +2406:daa0:7000::/40 +2406:daf8:e000::/40 +2a05:d070:4000::/40 +240f:80f9:4000::/40 +2406:daf9:a000::/40 +2600:1fa0:2000::/40 +2a05:d078:e000::/40 +2600:1f68:4000::/40 +2600:1ff0:e000::/40 +2a05:d050:2000::/40 +2600:9000:a211::/48 +2406:daf0:2000::/40 +2406:daf0:9000::/40 +2600:1ff8:c000::/40 +2a05:d034:2000::/40 +2406:daf8:4000::/40 +2406:daf8:c000::/40 +2406:daf9:6000::/40 +2a05:d07a:e000::/40 +2406:daf0:f000::/40 +2a05:d070:a000::/40 +2a05:d07a:2000::/40 +2a05:d07a:6000::/40 +2406:dafa:a000::/40 +2a05:d079:c000::/40 +2a05:d050:6000::/40 +2600:1ff9:6000::/40 +2406:daf8:a000::/40 +2404:c2c0:200::/40 +2a05:d078:c000::/40 +2600:1ff9:1000::/40 +2a05:d079:5000::/40 +2406:da68:9000::/40 +2406:da68:2000::/40 +2a05:d034:8000::/40 +2a05:d078:5000::/40 +2600:1ffa:4000::/40 +2a05:d078:8000::/40 +2406:daf9:8000::/40 +2406:daf9:7000::/40 +2600:1ff8:5000::/36 +2406:daf8:f000::/40 +2600:1ff9:c000::/40 +2406:daa0:8000::/40 +240f:80fa:8000::/40 +2406:daf8:b000::/40 +2400:7fc0:2800::/40 +2600:1ff0:2000::/40 +240f:80a0:4000::/40 +2406:dafa:2000::/40 +2600:9000:a104::/48 +2600:1ff0:6000::/40 +2600:9000:a311::/48 +2a05:d079:9000::/40 +2406:daf0:b000::/40 +2406:daf9:f000::/40 +2600:1f60:6000::/40 +2600:1ff0:8000::/39 +2a05:d079:a000::/40 +2406:daf8:9000::/40 +2406:da68:6000::/40 +2a05:d050:5000::/40 +240f:80fa:4000::/40 +2a05:d070:5000::/40 +2a05:d050:a000::/40 +2a05:d078:9000::/40 +2406:da68:7000::/40 +2406:daf9:e000::/40 +2a05:d079:4000::/40 +2406:daf0:6000::/40 +2600:1fa0:6000::/40 +2404:c2c0:2800::/40 +2406:daf0:1000::/40 +2406:dafa:6000::/40 +2600:1ff8:2000::/40 +2a05:d079:2000::/40 +2400:7fc0:200::/40 +240f:80a0:8000::/40 +2406:daa0:2000::/40 +2406:daf8:6000::/40 +2a05:d034:4000::/40 +2406:daf8:8000::/40 +2600:1f68:c000::/40 +2a05:d034:9000::/40 +2600:1ff8:4000::/40 +2406:da68:b000::/40 +2600:1ff9:2000::/40 +2a05:d07a:4000::/40 +2600:1f68:8000::/39 +2404:c2c0:2c00::/40 +240f:80f8:8000::/40 +2600:1ff0:4000::/40 +2600:1ff9:5000::/40 +2406:da68:c000::/40 +2406:daf8:1000::/40 +2a05:d034:e000::/40 +240f:80f9:8000::/40 +2a05:d050:e000::/40 +2a05:d078:1000::/40 +2a05:d078:4000::/40 +2a05:d07a:8000::/40 +2a05:d050:9000::/40 +2406:daf0:8000::/40 +2600:1f68:5000::/40 +2600:1ff8:1000::/40 +2a05:d050:c000::/40 +2406:daa0:4000::/40 +2406:daf9:2000::/40 +2a05:d070:2000::/40 +2a05:d079:6000::/40 +2406:daa0:b000::/40 +2406:daf0:c000::/40 +2400:7fc0:2400::/40 +2600:1ffa:c000::/40 +2600:1ff8:8000::/40 +2406:daf9:c000::/40 +2a05:d078:2000::/40 +2406:da68:4000::/40 +2406:da68:8000::/40 +2600:1ffa:1000::/40 +2a05:d070:6000::/40 +2600:1ff9:8000::/40 +2600:1ff0:1000::/40 +2a05:d078:a000::/40 +2a05:d050:4000::/40 +2406:daf0:4000::/40 +2600:1fa0:5000::/40 +2406:daa0:e000::/40 +2600:1f68:2000::/40 +2406:daf9:b000::/40 +2600:1fa0:e000::/40 +2a05:d079:8000::/40 +2406:dafa:c000::/40 +2400:7fc0:2c00::/40 +2a05:d070:8000::/40 +2a05:d070:1000::/40 +2406:daa0:f000::/40 +2600:9000:a210::/48 +2406:daa0:9000::/40 +2406:dafa:8000::/40 +2406:dafa:4000::/40 +2404:c2c0:2400::/40 +2600:1ffa:e000::/40 +2406:daf0:e000::/40 +2600:1ffa:8000::/40 +2406:daf9:1000::/40 +2a05:d034:6000::/40 +2a05:d070:9000::/40 +2406:daa0:1000::/40 +2406:dafa:e000::/40 +2600:1f68:6000::/40 +2600:1fa0:1000::/40 +2406:daf8:7000::/40 +2406:daf9:9000::/40 +2a05:d070:c000::/40 +2a05:d079:e000::/40 +2600:1fa0:8000::/39 +2600:1fa0:c000::/40 +2406:daf9:4000::/40 +2600:1f68:e000::/40 +2600:1ff9:4000::/40 +2a05:d050:8000::/40 +2a05:d079:1000::/40 +2600:1ff0:c000::/40 +2600:9000:a105::/48 +2a05:d034:c000::/40 +2406:daa0:c000::/40 +2406:da68:e000::/40 +2600:1ff0:5000::/40 +2600:1ffa:2000::/40 +2600:1ffa:6000::/40 +2406:daf0:7000::/40 +2a05:d034:a000::/40 +2406:da68:f000::/40 +2406:da68:1000::/40 +2406:daf8:2000::/40 +2600:1ff8:6000::/40 +2a05:d050:1000::/40 +2600:1ffa:5000::/40 +2406:daa0:a000::/40 +2406:daf0:a000::/40 +2406:da68:a000::/40 +2a05:d078:6000::/40 +2600:1ff8:e000::/40 +2600:1ff2:4000::/40 +2a05:d070:e000::/40 +240f:80ff:4000::/40 +2406:da1b::/36 +2600:1f19:8000::/36 +2600:1fff:2000::/40 +2600:1f11:8000::/36 +2406:da60:6000::/40 +2600:1f1d:8000::/36 +2406:da61:4000::/40 +2406:daf1:a000::/40 +2600:1f15::/36 +2600:1ffd:80a7::/48 +2406:da70:6000::/40 +2600:1f60:1000::/40 +2a05:d070:4000::/40 +2a05:d03a:4000::/40 +2406:da15::/36 +2406:da70:8000::/40 +2a05:d000:a000::/40 +2406:da70:4000::/40 +2600:1f60:2000::/40 +2406:da61:7000::/40 +2600:1ffd:80c8::/48 +2600:1ff0:e000::/40 +2404:c2c0::/40 +2a05:d030:1000::/40 +2a05:d030:5000::/40 +2406:daf0:2000::/40 +2406:daf0:9000::/40 +2600:1ff1:8000::/39 +2a05:d01e::/36 +2406:da00:8000::/40 +2600:1f00:c000::/40 +2406:da70:f000::/40 +2600:1fff:1000::/40 +2620:107:4002::/48 +2600:1f18::/33 +2600:1ff1:4000::/40 +2406:da1c::/36 +2406:da1a::/36 +2406:daf0:f000::/40 +2406:daf2:2000::/40 +2404:c2c0:2f00::/40 +2a05:d031:8000::/40 +2400:6500:ff00::/64 +2a05:d071:6000::/40 +2406:daf2:6000::/40 +2a05:d070:a000::/40 +2406:da61:b000::/40 +2600:1f70:6000::/40 +2600:1f70:4000::/40 +2600:1ff1:c000::/40 +2a05:d000:9000::/40 +2a05:d030:c000::/40 +2406:da61:f000::/40 +2600:1ffd:807f::/48 +2a05:d07f:5000::/40 +2406:da60:f000::/40 +2600:1ffd:82be::/48 +2404:c2c0:4000::/40 +2406:da61:e000::/40 +2600:1ff1:e000::/40 +2600:1ffd:80e1::/48 +2406:daf2:a000::/40 +2406:da61:1000::/40 +2406:da00:f000::/40 +2406:da60:c000::/40 +2600:1f00:5000::/40 +2600:1f70:1000::/40 +2600:1f16::/35 +2600:1ffd:8492::/48 +2406:da70:9000::/40 +2600:1f1a:8000::/36 +2406:da19::/36 +2a05:d071:9000::/40 +2600:1f70:c000::/40 +2a05:d030:a000::/40 +2406:daf2:9000::/40 +2600:1f60:5000::/40 +2600:1f61:8000::/39 +2600:f0f0:4000::/44 +2620:108:700f::/64 +2a05:d072:e000::/40 +2600:1fff:4000::/40 +2406:da00:2000::/40 +2600:1ffd:8149::/48 +2406:da61:6000::/40 +2600:1ffb:8080::/48 +2a05:d000:4000::/40 +2404:c2c0:2200::/40 +2400:7fc0:2f00::/40 +2a05:d072:4000::/40 +2600:f00f::/40 +2606:f40:3001::/48 +2600:1f12::/36 +2a05:d011::/36 +2a05:d03a:5000:400::/56 +2400:7fc0:2100::/40 +2406:da70:e000::/40 +2600:1f12:4000::/36 +2600:1f1c::/36 +2600:f0f0:1000::/44 +2406:da1e::/32 +2a05:d030:4000::/40 +2406:da60:7000::/40 +2600:1ff0:2000::/40 +2600:1ffd:807b::/48 +2406:daff:2000::/40 +240f:8014::/36 +2600:1ffb:8021::/48 +2406:da18::/36 +2a05:d031:e000::/40 +2404:c2c0:8000::/36 +2600:1ff0:6000::/40 +2600:1ffb:60c0::/48 +2a05:d03a:5000:300::/56 +2600:1f60:4000::/40 +2a05:d016::/36 +2406:daf1:7000::/40 +2406:da17::/36 +2406:daf0:b000::/40 +2406:daff:7000::/40 +2406:da60:1000::/40 +2a05:d07f:9000::/40 +2406:da60:2000::/40 +2a05:d031:9000::/40 +2a05:d031:c000::/40 +2600:1f14::/34 +2a05:d07f:8000::/40 +2600:1f60:6000::/40 +2a05:d071:8000::/40 +2406:daff:1000::/40 +2600:1ffd:812f::/48 +2a05:d000:2000::/40 +2a05:d031:6000::/40 +2a05:d071:1000::/40 +2406:daff:9000::/40 +2600:1f61:e000::/40 +2600:1ffd:8285::/48 +2a05:d014::/35 +2600:1ff0:8000::/39 +2600:1ffd:8422::/48 +2a05:d030:2000::/40 +2406:da60:b000::/40 +2600:1ff2:6000::/40 +2406:da61:9000::/40 +2a01:578:3::/64 +2600:1f14:8000::/36 +2a05:d070:5000::/40 +2a05:d072:c000::/40 +2400:7fc0:4000::/40 +2406:daf1:9000::/40 +2600:1ff2:1000::/40 +2600:1ffd:80f0::/48 +2600:1f00:2000::/40 +2600:1ffd:84af::/48 +2a05:d000:5000::/40 +2406:da61:a000::/40 +2406:daf1:f000::/40 +2600:1ffd:85e8::/48 +2406:da1f::/36 +2406:da60:8000::/40 +2600:f00c::/39 +2a05:d031:2000::/40 +2600:1f60:e000::/40 +2600:1ff1:1000::/40 +2406:daf0:6000::/40 +2600:1ffd:8188::/48 +2600:1f10:4000::/36 +2406:da60:a000::/40 +2600:1f70:8000::/40 +2600:1fff:c000::/40 +2406:daf1:c000::/40 +2a05:d012::/36 +2406:daf1:6000::/40 +2600:1f00:4000::/40 +2406:daf0:1000::/40 +2600:1ffd:838e::/48 +2600:1f1f:8000::/36 +2a05:d03a:6000::/40 +2406:da00:e000::/40 +2600:1f1e::/36 +2406:daff:6000::/40 +2600:1f61:5000::/40 +2406:daf1:e000::/40 +2600:1fff:e000::/40 +2a05:d072:a000::/40 +2600:1f61:1000::/40 +2400:6700:ff00::/64 +2403:b300:ff00::/64 +2406:daf2:8000::/40 +2406:daf1:8000::/40 +2620:107:300f::/64 +2600:1ffd:80d0::/48 +2a05:d01a::/36 +2406:da1d::/36 +2600:1ffd:816c::/48 +240f:80ff:8000::/40 +2a05:d01c::/36 +2600:1ffd:83ad::/48 +2a05:d07f:6000::/40 +2406:daff:8000::/40 +2600:1f13::/36 +2406:daff:b000::/40 +2a05:d030:8000::/40 +2600:1ffd:83d2::/48 +2406:daf1:b000::/40 +2406:da00:b000::/40 +2406:da61:8000::/40 +2406:daf2:f000::/40 +2600:1f13:8000::/36 +2406:da11::/36 +240f:8000:8000::/40 +2600:1f1c:8000::/36 +2600:f00c:8000::/39 +2a05:d018::/36 +2a05:d03a:5000:500::/56 +2600:1ff0:4000::/40 +2600:1ffd:85c0::/48 +2600:f000::/39 +2600:1ffb:80a1::/48 +2406:da61:c000::/40 +2600:1ffd:818f::/48 +2600:1ffd:81c2::/48 +2406:da61:2000::/40 +2600:1f14:4000::/36 +2600:1ffd:84bd::/48 +2a05:d07f:c000::/40 +2600:1f12:8000::/36 +2600:1ffd:803f::/48 +2406:daf0:8000::/40 +2a05:d030:9000::/40 +2a05:d03a:a000::/40 +2a05:d03a:5000:200::/56 +2a05:d031:a000::/40 +2804:800:ff00::/64 +2a05:d070:2000::/40 +2406:da00:1000::/40 +2406:daf0:c000::/40 +2620:108:d00f::/64 +2a05:d071:2000::/40 +2406:daf1:1000::/40 +2a05:d031:1000::/40 +2a05:d072:6000::/40 +2a05:d07f:2000::/40 +2600:1f15:8000::/36 +2a05:d015::/36 +2600:1f1f::/36 +2600:1ffd:8165::/48 +240f:8000:4000::/40 +2400:7fc0:8000::/36 +2600:1ff2:e000::/40 +2600:1ffd:819f::/48 +2600:1ff1:2000::/40 +2600:1ff1:6000::/40 +2406:da60:e000::/40 +2406:da70:c000::/40 +2600:1ff1:5000::/40 +2600:1f17:8000::/36 +2a05:d070:6000::/40 +2406:da00:4000::/40 +2600:1f00:6000::/40 +2600:1f1e:8000::/36 +2a05:d071:4000::/40 +2406:daff:c000::/40 +2406:daff:f000::/40 +2a05:d030:6000::/40 +2406:da14::/36 +2600:1ff0:1000::/40 +2600:1fff:8000::/40 +2a05:d000:8000::/40 +2404:c2c0:2100::/40 +2406:daf0:4000::/40 +2600:1f10:8000::/36 +2600:f000:8000::/39 +2a05:d072:9000::/40 +2a05:d072:5000::/40 +2406:da70:7000::/40 +2406:da00:ff00::/64 +2406:da60:9000::/40 +2406:daf2:4000::/40 +2600:1f61:4000::/40 +2600:1ffd:8508::/48 +2406:da00:c000::/40 +2600:1f1c:4000::/36 +2a05:d018:1000::/36 +2600:1f11::/36 +2600:1f61:c000::/40 +2406:da70:b000::/40 +2600:1f60:8000::/39 +2a05:d070:8000::/40 +2406:da00:7000::/40 +2600:1ffd:833b::/48 +2600:1fff:3000::/40 +2620:107:4004::/48 +2a05:d070:1000::/40 +2406:da70:1000::/40 +2406:daff:e000::/40 +2a05:d000:c000::/40 +2a05:d071:c000::/40 +2a05:d07f:e000::/40 +2406:daf2:1000::/40 +2600:1f00:1000::/40 +2600:1ffd:8066::/48 +2600:1ff2:c000::/40 +2a05:d071:e000::/40 +2406:daf1:2000::/40 +2406:daf0:e000::/40 +2600:1ff2:2000::/40 +2600:1ffb:60c1::/48 +2600:1f00:8000::/40 +2400:7fc0::/40 +2406:daff:a000::/40 +2a05:d07f:a000::/40 +2a05:d03a:e000::/40 +2406:da13::/36 +2a05:d031:4000::/40 +2600:1ffd:85b2::/48 +2a05:d03a:2000::/40 +2a05:d03a:1000::/40 +2600:1f18:8000::/36 +2406:daf2:e000::/40 +2600:1f70:e000::/40 +2a05:d019::/36 +2a05:d070:9000::/40 +2406:daf2:7000::/40 +2406:da70:2000::/40 +2600:1f70:2000::/40 +2600:1ffd:8190::/48 +2600:1f00:e000::/40 +2600:1ffd:81a7::/48 +2600:1ff2:8000::/39 +2a05:d072:1000::/40 +2a05:d07f:1000::/40 +2600:1ffb:40c0::/46 +2600:1fff:6000::/40 +2a05:d000:e000::/40 +2406:da00:a000::/40 +2600:1ff2:5000::/40 +2a05:d070:c000::/40 +2406:daf1:4000::/40 +2a05:d03a:9000::/40 +2600:1ff0:c000::/40 +2620:107:4007::/64 +2406:da12::/36 +2406:da00:9000::/40 +2a05:d071:a000::/40 +2606:f40:1001::/48 +2406:daff:4000::/40 +2600:1ffd:831b::/48 +2a05:d07f:4000::/40 +2406:da16::/36 +2600:1ffb:80a0::/48 +2406:daf2:c000::/40 +2600:1ff0:5000::/40 +2400:7fc0:2200::/40 +2406:daf0:7000::/40 +2600:1f70:5000::/40 +2a05:d03a:5000:100::/56 +2600:1ffd:80cb::/48 +2620:107:4005::/48 +2a05:d000:6000::/40 +2406:da00:6000::/40 +2406:da60:4000::/40 +2620:107:4003::/48 +2600:1f16:8000::/36 +2600:1ffd:8143::/48 +2a05:d03a:c000::/40 +240f:8018::/36 +2a01:578:13::/64 +2600:1f60:c000::/40 +2600:1f61:2000::/40 +2600:1f61:6000::/40 +2600:1fff:5000::/40 +2406:daf0:a000::/40 +2600:1f1b:8000::/36 +2a05:d000:1000::/40 +2a05:d030:e000::/40 +2406:daf2:b000::/40 +2406:da70:a000::/40 +2a05:d031:5000::/40 +2a05:d03a:8000::/40 +2a05:d072:2000::/40 +2a05:d072:8000::/40 +2600:9000:3000::/36 +2600:9000:f600::/39 +2600:9000:f540::/42 +2600:9000:f000::/38 +2600:9000:f500::/43 +2600:9000:ddd::/48 +2600:9000:f800::/37 +2600:9000:f400::/40 +2600:9000:f538::/45 +2600:9000:5380::/41 +2600:9000:1000::/36 +2600:9000:2000::/36 +2400:7fc0:500::/40 +2600:9000:4000::/36 +2600:9000:fff::/48 +2404:c2c0:500::/40 +2600:9000:5308::/45 +2600:9000:f534::/46 +2600:9000:f520::/44 +2600:9000:5320::/43 +2600:9000:5310::/44 +2600:9000:f580::/41 +2600:9000:5340::/42 +2600:9000:eee::/48 +2600:1f01:4874::/47 +2600:1f01:4802::/47 +2600:1f01:4860::/47 +2600:9000:a800::/40 +2600:9000:a700::/40 +2600:1f01:4880::/47 +2600:9000:ae00::/40 +2600:1f01:4810::/47 +2600:9000:a500::/40 +2600:9000:ac00::/40 +2600:9000:af00::/40 +2600:9000:aa00::/40 +2600:9000:a300::/40 +2600:1f01:4850::/47 +2600:1f01:48a0::/47 +2600:9000:a400::/40 +2600:1f01:48c0::/47 +2600:9000:a900::/40 +2600:1f01:4890::/47 +2600:9000:a200::/40 +2600:9000:ad00::/40 +2600:1f01:4820::/47 +2600:1f01:48d2::/47 +2600:1f01:4800::/47 +2600:1f01:48e0::/47 +2600:1f01:48b0::/47 +2600:9000:a100::/40 +2600:1f01:4804::/47 +2600:1f01:4840::/47 +2600:1f01:4830::/47 +2600:1f01:48d0::/47 +2600:1f01:4870::/47 +2600:1f01:4844::/47 +2600:1f01:4814::/47 +2600:9000:a600::/40 +2600:9000:ab00::/40 +2400:7fc0:4000:100::/56 +2400:7fc0:4000:200::/56 +2400:7fc0:4000:300::/56 +2400:7fc0:4000:400::/56 +2400:7fc0:4000::/56 +2400:7fc0:83cc:cc00::/56 +2400:7fc0:83cc:cd00::/56 +2400:7fc0:83cc:ce00::/56 +2404:c2c0:4000:100::/56 +2404:c2c0:4000:200::/56 +2404:c2c0:4000:300::/56 +2404:c2c0:4000:400::/56 +2404:c2c0:4000::/56 +2404:c2c0:83cc:cc00::/56 +2404:c2c0:83cc:cd00::/56 +2404:c2c0:83cc:ce00::/56 +2406:da70:1000:100::/56 +2406:da70:1000:200::/56 +2406:da70:1000:400::/56 +2406:da70:1000::/56 +2406:da70:e000:100::/56 +2406:da70:e000:200::/56 +2406:da70:e000:400::/56 +2406:da70:e000::/56 +2406:da14:7ff:f800::/56 +2406:da14:fff:f800::/56 +2406:da70:4000:100::/56 +2406:da70:4000:200::/56 +2406:da70:4000:300::/56 +2406:da70:4000:400::/56 +2406:da70:4000::/56 +2406:da70:2000:100::/56 +2406:da70:2000:200::/56 +2406:da70:2000:300::/56 +2406:da70:2000:400::/56 +2406:da70:2000::/56 +2406:da70:6000::/56 +2406:da70:a000:100::/56 +2406:da70:a000:200::/56 +2406:da70:a000:300::/56 +2406:da70:a000:400::/56 +2406:da70:a000::/56 +2406:da18:7ff:f800::/56 +2406:da18:fff:f800::/56 +2406:da70:8000:100::/56 +2406:da70:8000:200::/56 +2406:da70:8000:300::/56 +2406:da70:8000:400::/56 +2406:da70:8000::/56 +2406:da1c:7ff:f800::/56 +2406:da1c:fff:f800::/56 +2406:da70:c000:100::/56 +2406:da70:c000:200::/56 +2406:da70:c000:300::/56 +2406:da70:c000:400::/56 +2406:da70:c000::/56 +2600:1f70:1000:100::/56 +2600:1f70:1000:200::/56 +2600:1f70:1000:300::/56 +2600:1f70:1000:400::/56 +2600:1f70:1000::/56 +2a05:d03a:4000:100::/56 +2a05:d03a:4000:200::/56 +2a05:d03a:4000:300::/56 +2a05:d03a:4000:400::/56 +2a05:d03a:4000::/56 +2a05:d03a:6000:100::/56 +2a05:d03a:6000:200::/56 +2a05:d03a:6000:400::/56 +2a05:d03a:6000::/56 +2a05:d03a:a000:100::/56 +2a05:d03a:a000:200::/56 +2a05:d03a:a000:400::/56 +2a05:d03a:a000::/56 +2a05:d018:7ff:f800::/56 +2a05:d018:fff:f800::/56 +2a05:d03a:8000:100::/56 +2a05:d03a:8000:200::/56 +2a05:d03a:8000:300::/56 +2a05:d03a:8000:400::/56 +2a05:d03a:8000::/56 +2a05:d03a:c000:100::/56 +2a05:d03a:c000:200::/56 +2a05:d03a:c000:300::/56 +2a05:d03a:c000:400::/56 +2a05:d03a:c000::/56 +2a05:d03a:2000:100::/56 +2a05:d03a:2000:200::/56 +2a05:d03a:2000:300::/56 +2a05:d03a:2000:400::/56 +2a05:d03a:2000::/56 +2a05:d03a:e000:100::/56 +2a05:d03a:e000:200::/56 +2a05:d03a:e000:400::/56 +2a05:d03a:e000::/56 +2600:1f1e:7ff:f800::/56 +2600:1f1e:fff:f800::/56 +2600:1f70:e000:100::/56 +2600:1f70:e000:200::/56 +2600:1f70:e000:400::/56 +2600:1f70:e000::/56 +2600:1f18:3fff:f800::/56 +2600:1f18:7fff:f800::/56 +2600:1f70:8000::/56 +2600:1f70:6000:100::/56 +2600:1f70:6000:200::/56 +2600:1f70:6000:300::/56 +2600:1f70:6000:400::/56 +2600:1f70:6000::/56 +2600:1f1c:7ff:f800::/56 +2600:1f1c:fff:f800::/56 +2600:1f70:c000:100::/56 +2600:1f70:c000:200::/56 +2600:1f70:c000:300::/56 +2600:1f70:c000:400::/56 +2600:1f70:c000::/56 +2600:1f14:7ff:f800::/56 +2600:1f14:fff:f800::/56 +2600:1f70:4000:100::/56 +2600:1f70:4000:200::/56 +2600:1f70:4000:300::/56 +2600:1f70:4000:400::/56 +2600:1f70:4000::/56 diff --git a/src/common/db.rs b/src/common/db.rs new file mode 100644 index 0000000..77a1752 --- /dev/null +++ b/src/common/db.rs @@ -0,0 +1,89 @@ +#![allow(clippy::from_over_into)] +use crate::common::ip::Addr; +use crate::common::ip::Block; +use crate::common::ip::Meta; +use crate::common::trie; +use std::collections::HashMap; + +pub struct Database { + pub trie: trie::Trie, + pub meta: HashMap<String, String>, +} + +pub struct BlockInfo { + exists: bool, + parent: Option<Block>, + child_count: usize, + start: Addr, + end: Addr, + size: u128, +} + +impl Database { + pub fn new() -> Self { + Database { + trie: trie::Trie::new(), + meta: HashMap::new(), + } + } + + pub fn get(&self, block: &Block) -> Option<Block> { + self.trie.find(block) + } + + /// Sets `meta` on the given `block`. Replaces the metadata if `block` already exists. + /// Creates the block if it doesn't exist. + pub fn set(&mut self, block: Block, meta: Meta) { + self.trie.insert(block, meta); + } + + /// Returns the parent of the given block. + /// + /// Returns `None` if the block has no parents. + pub fn parent(&self, block: &Block) -> Option<Block> { + self.trie.parent(block) + } + + /// Returns the children of the given block. + /// + /// Returns an empty `Vec` if the given block has no children. + pub fn children(&self, block: &Block) -> Vec<Block> { + self.trie.children(block) + } + + pub fn info(&self, block: &Block) -> BlockInfo { + BlockInfo { + exists: self.exists(block), + parent: self.trie.parent(block), + child_count: self.trie.children(block).len(), + start: block.start(), + end: block.end(), + size: block.size(), + } + } + + pub fn del(&self, _block: &Block) -> Option<()> { + None + } + + pub fn exists(&self, block: &Block) -> bool { + self.trie.find(block).is_some() + } +} + +// Into + +impl Into<Vec<(&str, String)>> for BlockInfo { + fn into(self) -> Vec<(&'static str, String)> { + vec![ + ("EXISTS", self.exists.to_string()), + ( + "PARENT", + self.parent.map(|x| x.to_string()).unwrap_or_default(), + ), + ("CHILD-COUNT", self.child_count.to_string()), + ("RANGE", format!("{} - {}", self.start, self.end)), + ("SIZE", self.size.to_string()), + ] + } +} diff --git a/src/common/expr.rs b/src/common/expr.rs new file mode 100644 index 0000000..0a7880b --- /dev/null +++ b/src/common/expr.rs @@ -0,0 +1,364 @@ +#![allow(clippy::from_over_into)] +use crate::common::ip; +use std::convert::Into; +use std::fmt; +use std::io::BufRead; +use std::io::BufReader; +use std::io::Read; +use std::net::TcpStream; +use std::num::ParseIntError; + +#[derive(Debug, Clone, Hash)] +pub enum Expr { + Array(Vec<Expr>), + Blob(Vec<u8>), + Bool(bool), + Error { code: Vec<u8>, msg: Vec<u8> }, + Line(Vec<u8>), + Number(u128), + Table(Vec<(Expr, Expr)>), + Null, +} + +#[derive(Debug)] +pub enum Error { + ConnectionClosed, + InvalidChar(u8), + NotANumber(Vec<u8>), + InvalidTag(u8), + InvalidHeaderSize, + NotEnoughBytes, + ExpectedLF(u8), +} + +impl Expr { + pub fn from_bytes(reader: &mut BufReader<&TcpStream>) -> Result<Self, Error> { + let mut header = vec![]; + + reader + .read_until(b'\n', &mut header) + .map_err(|_| Error::ConnectionClosed)?; + + if header.is_empty() { + return Err(Error::ConnectionClosed); + } + + match header[0] { + b'!' => parse_error(header, reader), + b'#' => parse_bool(header, reader), + b'$' => parse_blob(header, reader), + b'*' => parse_array(header, reader), + b'+' => parse_line(header, reader), + b':' => parse_number(header, reader), + b'_' => Ok(Expr::Null), + _ => Err(Error::InvalidTag(header[0])), + } + } + + pub fn from_query(query: &str) -> Self { + let args = query + .split(' ') + .map(|x| Expr::Blob(x.as_bytes().to_vec())) + .collect(); + Expr::Array(args) + } + + pub fn encode(&self) -> Vec<u8> { + match self { + Expr::Array(arr) => encode_array(arr.clone()), + Expr::Blob(blob) => encode_blob(blob.to_vec()), + Expr::Bool(val) => encode_bool(*val), + Expr::Error { code, msg } => encode_error(code.to_vec(), msg.to_vec()), + Expr::Line(line) => encode_line(line.to_vec()), + Expr::Number(number) => encode_number(*number), + Expr::Null => b"_\n".to_vec(), + Expr::Table(table) => encode_table(table), + } + } +} + +// Display + +impl fmt::Display for Expr { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Expr::Array(array) => { + format!( + "[{}]", + array + .iter() + .map(|x| x.to_string()) + .collect::<Vec<String>>() + .join(", ") + ) + } + Expr::Bool(value) => { + if *value { + "true".to_string() + } else { + "false".to_string() + } + } + Expr::Blob(blob) => format!("{:?}", String::from_utf8_lossy(blob).into_owned()), + Expr::Number(number) => format!("{:?}", number), + Expr::Error { code, msg } => format!( + "!{} {:?}", + String::from_utf8_lossy(code).into_owned(), + String::from_utf8_lossy(msg).into_owned() + ), + Expr::Line(line) => format!("{:?}", String::from_utf8_lossy(line).into_owned()), + Expr::Null => "(null)".to_string(), + Expr::Table(table) => { + format!( + "[{}]", + table + .iter() + .map(|(k, v)| format!("{}: {}", k, v)) + .collect::<Vec<String>>() + .join(", ") + ) + } + }; + + write!(f, "{}", res) + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Error::ConnectionClosed => "Connection closed.".to_string(), + Error::InvalidChar(got) => format!("Invalid char: {:?}.", *got as char), + Error::NotANumber(got) => format!("Not a number: {:?}.", got), + Error::ExpectedLF(got) => format!("Expected LF, got: {:?}.", *got as char), + Error::InvalidHeaderSize => "Invalid header size.".to_string(), + Error::InvalidTag(got) => format!("Invalid tag {:?}.", *got as char), + Error::NotEnoughBytes => "Not enough bytes.".to_string(), + }; + + write!(f, "{}", res) + } +} + +// Encoders + +fn encode_array(array: Vec<Expr>) -> Vec<u8> { + let mut res = array.len().to_string().as_bytes().to_vec(); + + res.insert(0, b'*'); + res.push(b'\n'); + + for expr in array { + res.append(&mut expr.encode()); + } + + res +} +fn encode_bool(val: bool) -> Vec<u8> { + if val { + b"#t\n".to_vec() + } else { + b"#f\n".to_vec() + } +} +fn encode_blob(mut blob: Vec<u8>) -> Vec<u8> { + let mut res = blob.len().to_string().as_bytes().to_vec(); + + res.insert(0, b'$'); + res.push(b'\n'); + res.append(&mut blob); + res.push(b'\n'); + + res +} + +fn encode_line(mut line: Vec<u8>) -> Vec<u8> { + line.insert(0, b'+'); + line.push(b'\n'); + + line +} + +fn encode_number(number: u128) -> Vec<u8> { + let mut res = vec![b':']; + res.append(&mut number.to_string().as_bytes().to_vec()); + res.push(b'\n'); + + res +} + +fn encode_error(mut code: Vec<u8>, mut msg: Vec<u8>) -> Vec<u8> { + let mut res = (code.len() + msg.len()).to_string().as_bytes().to_vec(); + + res.insert(0, b'!'); + res.push(b'\n'); + res.append(&mut code); + res.push(b' '); + res.append(&mut msg); + res.push(b'\n'); + + res +} + +fn encode_table(table: &Vec<(Expr, Expr)>) -> Vec<u8> { + let mut res = table.len().to_string().as_bytes().to_vec(); + + res.insert(0, b'%'); + res.push(b'\n'); + + for (key, val) in table { + res.append(&mut key.encode()); + res.append(&mut val.encode()); + } + + res +} + +// Parsers + +fn parse_line(header: Vec<u8>, _reader: &mut BufReader<&TcpStream>) -> Result<Expr, Error> { + if header.len() < 2 { + return Err(Error::NotEnoughBytes); + } + + Ok(Expr::Line(header[1..header.len() - 1].to_vec())) +} + +fn parse_number(header: Vec<u8>, _reader: &mut BufReader<&TcpStream>) -> Result<Expr, Error> { + if header.len() < 2 { + return Err(Error::NotEnoughBytes); + } + + let digits = &header[1..header.len() - 1]; + + Ok(Expr::Number( + as_u128(digits).map_err(|_| Error::NotANumber(digits.to_vec()))?, + )) +} + +fn parse_blob(header: Vec<u8>, reader: &mut BufReader<&TcpStream>) -> Result<Expr, Error> { + let size = as_usize(&header[1..header.len() - 1]).map_err(|_| Error::InvalidHeaderSize)?; + + let mut body = vec![0u8; size]; + reader + .read_exact(&mut body) + .map_err(|_| Error::NotEnoughBytes)?; + + skip_lf(reader)?; + + Ok(Expr::Blob(body)) +} + +fn parse_error(header: Vec<u8>, reader: &mut BufReader<&TcpStream>) -> Result<Expr, Error> { + let size = as_usize(&header[1..header.len() - 1]).map_err(|_| Error::InvalidHeaderSize)?; + + let mut body = vec![0u8; size]; + reader + .read_exact(&mut body) + .map_err(|_| Error::NotEnoughBytes)?; + + skip_lf(reader)?; + + let parts: Vec<&[u8]> = body.splitn(2, |x| *x == b' ').collect(); + if parts.len() < 2 { + return Err(Error::NotEnoughBytes); + } + + Ok(Expr::Error { + code: parts[0].to_vec(), + msg: parts[1].to_vec(), + }) +} + +fn parse_array(header: Vec<u8>, reader: &mut BufReader<&TcpStream>) -> Result<Expr, Error> { + let size = as_usize(&header[1..header.len() - 1]).map_err(|_| Error::InvalidHeaderSize)?; + + let body: Vec<Expr> = (0..size) + .map(|_| Expr::from_bytes(reader)) + .collect::<Result<Vec<Expr>, _>>()?; + + Ok(Expr::Array(body)) +} + +fn parse_bool(header: Vec<u8>, _reader: &mut BufReader<&TcpStream>) -> Result<Expr, Error> { + if header.len() < 2 { + return Err(Error::NotEnoughBytes); + } + + match header[1] { + b't' => Ok(Expr::Bool(true)), + b'f' => Ok(Expr::Bool(false)), + other => Err(Error::InvalidChar(other)), + } +} + +// Into + +impl Into<Expr> for ip::Block { + fn into(self) -> Expr { + Expr::Line(self.into()) + } +} + +impl Into<Expr> for &ip::Block { + fn into(self) -> Expr { + Expr::Line(self.into()) + } +} + +impl Into<Expr> for &str { + fn into(self) -> Expr { + Expr::Blob(self.into()) + } +} + +impl Into<Expr> for String { + fn into(self) -> Expr { + Expr::Blob(self.into()) + } +} + +impl Into<Expr> for u8 { + fn into(self) -> Expr { + Expr::Number(self as u128) + } +} + +impl Into<Expr> for Vec<(&str, String)> { + fn into(self) -> Expr { + Expr::Table( + self.into_iter() + .map(|(x, y)| (x.into(), y.into())) + .collect(), + ) + } +} + +impl<T: Into<Expr>> Into<Expr> for Vec<T> { + fn into(self) -> Expr { + Expr::Array(self.into_iter().map(|x| x.into()).collect()) + } +} + +// Helpers + +fn skip_lf(reader: &mut BufReader<&TcpStream>) -> Result<(), Error> { + let mut lf = vec![0u8; 1]; + + reader + .read_exact(&mut lf) + .map_err(|_| Error::NotEnoughBytes)?; + + if lf != vec![b'\n'] { + return Err(Error::ExpectedLF(lf[0])); + } + Ok(()) +} + +fn as_usize(array: &[u8]) -> Result<usize, ParseIntError> { + std::str::from_utf8(array).unwrap().parse::<usize>() +} + +fn as_u128(array: &[u8]) -> Result<u128, ParseIntError> { + std::str::from_utf8(array).unwrap().parse::<u128>() +} diff --git a/src/common/ip.rs b/src/common/ip.rs new file mode 100644 index 0000000..8c1e6b6 --- /dev/null +++ b/src/common/ip.rs @@ -0,0 +1,195 @@ +#![allow(clippy::from_over_into)] +use crate::common::expr::Expr; +use memchr::memchr; +use std::cmp::Ordering; +use std::collections::HashMap; +use std::fmt; +use std::fmt::Debug; +use std::net::IpAddr; +use std::net::Ipv4Addr; +use std::net::Ipv6Addr; +use std::str::FromStr; + +pub const BITMASK: u128 = 0x8000_0000_0000_0000_0000_0000_0000_0000; +pub const BITCOUNT: u8 = 128; + +pub type Addr = IpAddr; + +#[derive(Debug)] +pub enum Error { + InvalidAddr(String), + InvalidBlock(String), + InvalidMaskLength(String), + InvalidNibblesCount(usize), + MaskLengthTooLarge(u8), +} + +#[derive(Copy, Clone, Eq)] +pub struct Block { + pub addr: u128, + pub mlen: u8, +} + +pub type Meta = HashMap<String, Expr>; + +impl Block { + fn new(addr: IpAddr, mlen: u8) -> Self { + let (ipv6_addr, ipv6_mlen) = match addr { + IpAddr::V4(addr) => { + assert!(mlen <= 32); + (addr.to_ipv6_mapped(), mlen + 96) + } + IpAddr::V6(addr) => { + assert!(mlen <= 128); + (addr, mlen) + } + }; + + let segments = ipv6_addr.segments(); + let addr_bits = ((segments[0] as u128) << 112) + | ((segments[1] as u128) << 96) + | ((segments[2] as u128) << 80) + | ((segments[3] as u128) << 64) + | ((segments[4] as u128) << 48) + | ((segments[5] as u128) << 32) + | ((segments[6] as u128) << 16) + | (segments[7] as u128); + + Self { + addr: addr_bits, + mlen: ipv6_mlen, + } + } + + pub fn from_bytestring(bytestring: &[u8]) -> Result<Self, Error> { + match memchr(b'/', bytestring) { + Some(pos) => { + let addr = IpAddr::parse_ascii(&bytestring[0..pos]).map_err(|_| { + Error::InvalidAddr( + std::str::from_utf8(&bytestring[0..pos]) + .unwrap() + .to_string(), + ) + })?; + + let mut mlen = 0; + for (i, byte) in bytestring[pos + 1..bytestring.len()] + .iter() + .rev() + .enumerate() + { + if *byte < 48 || *byte > 57 { + return Err(Error::InvalidBlock("Invalid1".to_string())); + } + mlen += (byte - 48) * 10u8.pow(i as u32); + } + + Ok(Self::new(addr, mlen)) + } + None => Err(Error::InvalidBlock( + std::str::from_utf8(bytestring).unwrap().to_string(), + )), + } + } + + fn addr(&self) -> IpAddr { + addr_from_bits(self.addr) + } + + pub fn start(&self) -> IpAddr { + let mask = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff ^ ((1 << (128 - self.mlen)) - 1); + addr_from_bits(self.addr & mask) + } + pub fn end(&self) -> IpAddr { + let mask = !(0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff ^ ((1 << (128 - self.mlen)) - 1)); + addr_from_bits(self.addr | mask) + } + + pub fn size(&self) -> u128 { + 2u128.pow(128 - self.mlen as u32) + } +} + +fn addr_from_bits(bits: u128) -> IpAddr { + if bits & 0xffff_ffff_ffff_ffff_ffff_ffff_0000_0000 == 0xffff_0000_0000 { + IpAddr::V4(Ipv4Addr::from((bits & 0xff_ff_ff_ff) as u32)) + } else { + IpAddr::V6(Ipv6Addr::from(bits)) + } +} + +impl FromStr for Block { + type Err = Error; + fn from_str(s: &str) -> Result<Block, Error> { + let parts: Vec<&str> = s.splitn(2, '/').collect(); + if parts.len() < 2 { + return Err(Error::InvalidBlock(s.to_string())); + } + + let addr = + IpAddr::from_str(parts[0]).map_err(|_| Error::InvalidAddr(parts[0].to_string()))?; + let mlen = parts[1] + .parse::<u8>() + .map_err(|_| Error::InvalidMaskLength(parts[1].to_string()))?; + + Ok(Self::new(addr, mlen)) + } +} + +impl fmt::Display for Block { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let addr = self.addr(); + let mlen = if addr.is_ipv4() { + self.mlen - 96 + } else { + self.mlen + }; + write!(f, "{}/{}", addr, mlen) + } +} + +impl fmt::Debug for Block { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let addr = self.addr(); + let mlen = if addr.is_ipv4() { + self.mlen - 96 + } else { + self.mlen + }; + write!(f, "{}/{}", addr, mlen) + } +} + +impl Ord for Block { + fn cmp(&self, other: &Self) -> Ordering { + (self.addr >> (BITCOUNT - self.mlen) as usize) + .cmp(&(other.addr >> ((BITCOUNT - other.mlen) % 32) as usize)) + } +} + +impl PartialEq for Block { + fn eq(&self, other: &Self) -> bool { + self.addr == other.addr && self.mlen == other.mlen + } +} + +impl PartialOrd for Block { + fn partial_cmp(&self, other: &Self) -> Option<Ordering> { + Some( + (self.addr >> (BITCOUNT - self.mlen) as usize) + .cmp(&(other.addr >> ((BITCOUNT - other.mlen) % 32) as usize)), + ) + } +} + +impl Into<Vec<u8>> for Block { + fn into(self) -> Vec<u8> { + (&self).into() + } +} + +impl Into<Vec<u8>> for &Block { + fn into(self) -> Vec<u8> { + self.to_string().into() + } +} diff --git a/src/common/mod.rs b/src/common/mod.rs new file mode 100644 index 0000000..d5ad193 --- /dev/null +++ b/src/common/mod.rs @@ -0,0 +1,7 @@ +pub mod db; +pub mod expr; +pub mod ip; +pub mod query; +pub mod sized_buffer; +pub mod term; +pub mod trie; diff --git a/src/common/query.rs b/src/common/query.rs new file mode 100644 index 0000000..00d79b2 --- /dev/null +++ b/src/common/query.rs @@ -0,0 +1,252 @@ +use crate::common::db::Database; +use crate::common::expr::Expr; +use crate::common::ip; +use std::fmt; + +#[derive(Debug)] +pub enum Error { + Empty, + Invalid, + IP(ip::Error), + ExpectedArray(Expr), + ExpectedBlob(Expr), + InvalidArgsCount { + cmd: String, + expected: usize, + actual: usize, + }, +} + +#[derive(Debug)] +pub enum Query { + Children { ip_block: ip::Block }, + Del { ip_block: ip::Block }, + Echo { msg: Vec<u8> }, + Exists { ip_block: ip::Block }, + Get { ip_block: ip::Block }, + Info { ip_block: ip::Block }, + Parent { ip_block: ip::Block }, + Set { ip_block: ip::Block, value: Expr }, +} + +impl Query { + pub fn from_expr(expr: Expr) -> Result<Self, Error> { + let mut xs = if let Expr::Array(xs) = expr { + xs + } else { + return Err(Error::ExpectedArray(expr)); + }; + + if xs.is_empty() { + return Err(Error::Empty); + } + let cmd_expr = xs.remove(0); + let cmd = if let Expr::Blob(cmd) = cmd_expr { + cmd + } else { + return Err(Error::ExpectedBlob(cmd_expr)); + }; + + match &*cmd { + b"ECHO" => build_echo(xs), // ECHO str + b"SET" => build_set(xs), // SET ::/32 Expr + b"GET" => build_get(xs), // GET ::/32 + b"DEL" => build_del(xs), // DEL ::/32 + b"EXISTS" => build_exists(xs), // EXISTS ::/32 + b"INFO" => build_info(xs), // EXISTS ::/32 + b"PARENT" => build_parent(xs), // SUP ::/32 + b"CHILDREN" => build_children(xs), // SUB ::/32 + _ => Err(Error::Invalid), + } + } + + pub fn exec(&self, db: &mut Database) -> Expr { + match self { + Self::Echo { msg } => Expr::Blob(msg.clone()), + Self::Set { ip_block, value: _ } => { + db.set(*ip_block, std::collections::HashMap::new()); + Expr::Blob(b"OK".to_vec()) + } + Self::Get { ip_block } => db.get(ip_block).map(|x| x.into()).unwrap_or(Expr::Null), + Self::Del { ip_block } => db + .del(ip_block) + .map_or(Expr::Null, |_| Expr::Blob(b"OK".to_vec())), + Self::Exists { ip_block } => Expr::Bool(db.exists(ip_block)), + Self::Info { ip_block } => { + let info: Vec<(&str, String)> = db.info(ip_block).into(); + info.into() + } + Self::Parent { ip_block } => { + db.parent(ip_block).map(|x| x.into()).unwrap_or(Expr::Null) + } + Self::Children { ip_block } => db.children(ip_block).into(), + } + } +} + +// Display + +impl fmt::Display for Query { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Query::Set { ip_block, value } => { + format!("SET {} {}", ip_block, value) + } + Query::Get { ip_block } => { + format!("GET {}", ip_block) + } + Query::Echo { msg } => { + format!("ECHO {:?}", String::from_utf8_lossy(msg).into_owned()) + } + Query::Del { ip_block } => { + format!("DEL {}", ip_block) + } + Query::Exists { ip_block } => { + format!("EXISTS {}", ip_block) + } + Query::Info { ip_block } => { + format!("INFO {}", ip_block) + } + Query::Parent { ip_block } => { + format!("PARENT {}", ip_block) + } + Query::Children { ip_block } => { + format!("CHILDREN {}", ip_block) + } + }; + + write!(f, "{}", res) + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Error::Empty => "Received an empty query.".to_string(), + Error::ExpectedArray(got) => format!("Expected an ARRAY, got: {:?}.", got), + Error::ExpectedBlob(got) => format!("Expected a BLOB, got: {:?}.", got), + Error::IP(e) => format!("IP error: {e:?}"), + Error::Invalid => "Received an invalid query.".to_string(), + Error::InvalidArgsCount { + cmd, + expected, + actual, + } => format!( + "Invalid number of arguments for {:?}. Expected {} but got {}.", + cmd, expected, actual + ), + }; + + write!(f, "{}", res) + } +} + +// Builders + +fn build_echo(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("ECHO", &args, 1)?; + + let expr = args.remove(0); + let msg = if let Expr::Blob(k) = expr { + k + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Echo { msg }) +} + +fn build_get(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("GET", &args, 1)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Get { ip_block }) +} +fn build_set(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("SET", &args, 2)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Set { + ip_block, + value: args.remove(0), + }) +} +fn build_del(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("DEL", &args, 1)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Del { ip_block }) +} +fn build_exists(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("EXISTS", &args, 1)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Exists { ip_block }) +} +fn build_info(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("INFO", &args, 1)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Info { ip_block }) +} +fn build_parent(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("PARENT", &args, 1)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Parent { ip_block }) +} +fn build_children(mut args: Vec<Expr>) -> Result<Query, Error> { + count_args("CHILDREN", &args, 1)?; + + let expr = args.remove(0); + let ip_block = if let Expr::Blob(ref addr) = expr { + ip::Block::from_bytestring(addr).map_err(Error::IP)? + } else { + return Err(Error::ExpectedBlob(expr)); + }; + Ok(Query::Children { ip_block }) +} + +// Helpers + +fn count_args<T>(cmd: &str, args: &Vec<T>, expected_count: usize) -> Result<(), Error> { + let args_count = args.len(); + if args_count != expected_count { + return Err(Error::InvalidArgsCount { + cmd: cmd.to_string(), + expected: expected_count, + actual: args_count, + }); + } + + Ok(()) +} diff --git a/src/common/sized_buffer.rs b/src/common/sized_buffer.rs new file mode 100644 index 0000000..ebfcab5 --- /dev/null +++ b/src/common/sized_buffer.rs @@ -0,0 +1,113 @@ +use memchr::memchr; +use std::io; +use std::io::Write; + +pub struct SizedBuffer<T> { + len: usize, + pos: usize, + pub inner: T, +} + +#[derive(Debug)] +pub enum Error { + IO(io::Error), + ReadPastEnd, + WrongByte { expected: u8, got: u8 }, +} + +impl<const N: usize> SizedBuffer<[u8; N]> { + pub fn new() -> Self { + Self { + len: 0, + pos: 0, + inner: [0; N], + } + } + + pub fn append(&mut self, bytes: &mut [u8]) -> Result<(), Error> { + self.write_all(bytes).map_err(Error::IO) + } + + pub fn peek(&self) -> u8 { + self.inner[self.pos] + } + + pub fn read(&mut self) -> Result<u8, Error> { + self.seek(1)?; + Ok(self.inner[self.pos - 1]) + } + + /* Reads n bytes from the buffer, and moves the cursor right after the last byte read. + * + * Example with n=3: + * + * pos = 2 + * v + * [0,1,2,3,4,5,6,7,8,9] + * |-----|^ + * read new pos + */ + pub fn read_count(&mut self, n: usize) -> Result<&[u8], Error> { + self.seek(n)?; + Ok(&self.inner[self.pos - n..self.pos]) + } + + pub fn read_count_unchecked(&mut self, n: usize) -> &[u8] { + self.seek_unchecked(n); + &self.inner[self.pos - n..self.pos] + } + + pub fn skip_byte(&mut self, byte: u8) -> Result<(), Error> { + let x = self.read()?; + if x != byte { + return Err(Error::WrongByte { + expected: byte, + got: x, + }); + } + Ok(()) + } + + pub fn seek(&mut self, n: usize) -> Result<(), Error> { + /* Allows to seek 1 past the end of the buffer. Subsequent reads will still fail but this + * allows to read the last byte. Otherwise trying to read the last byte would fail after + * reading it, when trying to advance the position of the cursor. */ + if self.pos + n > self.len { + return Err(Error::ReadPastEnd); + } + self.pos += n; + + Ok(()) + } + + pub fn seek_unchecked(&mut self, n: usize) { + self.pos += n; + } + + pub fn find_offset(&mut self, x: u8) -> Option<usize> { + memchr(x, &self.inner[self.pos..self.len]) + } + + pub fn empty(&self) -> bool { + self.len == self.pos + } + + pub fn reset(&mut self) { + self.len = 0; + self.pos = 0; + } +} + +impl<const N: usize> Write for SizedBuffer<[u8; N]> { + #[inline] + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { + let amt = (&mut self.inner[self.len..]).write(buf)?; + self.len += amt; + Ok(amt) + } + + #[inline] + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } +} diff --git a/src/common/term.rs b/src/common/term.rs new file mode 100644 index 0000000..44fd819 --- /dev/null +++ b/src/common/term.rs @@ -0,0 +1,517 @@ +#![allow(clippy::manual_range_contains)] +#![allow(clippy::type_complexity)] +use libc::BRKINT; +use libc::CS8; +use libc::ECHO; +use libc::ICANON; +use libc::ICRNL; +use libc::IEXTEN; +use libc::INPCK; +use libc::ISIG; +use libc::ISTRIP; +use libc::IXON; +use libc::OPOST; +use libc::TCSAFLUSH; +use libc::TIOCGWINSZ; +use libc::VMIN; +use libc::VTIME; +use log::trace; +use std::cmp::max; +use std::cmp::min; +use std::fs::File; +use std::io::Read; +use std::io::Write; +use std::mem; +use std::os::unix::io::AsRawFd; + +enum Key { + Null = 0, + CtrlA = 1, + CtrlB = 2, + CtrlC = 3, + CtrlD = 4, + CtrlE = 5, + CtrlF = 6, + CtrlH = 8, + Tab = 9, + CtrlK = 11, + CtrlL = 12, + Enter = 13, + CtrlN = 14, + CtrlP = 16, + CtrlT = 20, + CtrlU = 21, + CtrlW = 23, + Esc = 27, + Backspace = 127, +} + +pub struct Term { + initial_termios: Option<libc::termios>, + tty_in: File, + tty_out: File, + history: Vec<Vec<u8>>, + history_cursor: usize, + column: usize, + line: Vec<u8>, + line_cursor: usize, + prompt: Option<Vec<u8>>, + hints_callback: Option<fn(&[u8]) -> &[u8]>, + columns: usize, + max_rows: usize, +} + +#[derive(Debug)] +struct Position { + column: usize, + #[allow(dead_code)] + row: usize, +} + +impl Term { + pub fn new() -> Self { + let tty_out = File::options() + .read(true) + .write(true) + .open("/dev/tty") + .unwrap(); + let tty_in = tty_out.try_clone().unwrap(); + + Self { + initial_termios: None, + tty_out, + tty_in, + history: Vec::new(), + history_cursor: 0, + column: 0, + line: Vec::new(), + line_cursor: 0, + prompt: None, + hints_callback: None, + columns: 0, + max_rows: 0, + } + } + + pub fn setup_hints(&mut self, hints_callback: fn(&[u8]) -> &[u8]) { + self.hints_callback = Some(hints_callback); + } + + pub fn setup_prompt(&mut self, prompt: &[u8]) { + self.prompt = Some(prompt.to_vec()); + } + + pub fn edit(&mut self) -> Option<Vec<u8>> { + self.enable_raw_mode(); + + self.columns = self.get_columns(); + self.column = self.get_cursor_position().unwrap().column; + + self.refresh_line(); + + loop { + let mut buffer: [u8; 1] = [0]; + + if self.tty_in.read(&mut buffer).unwrap_or(0) != 1 { + break; + } + + match buffer[0] { + x if (x == Key::Tab as u8) => { + todo!("PRESSED TAB"); + } + x if (x == Key::CtrlC as u8) => { + self.tty_out.write_all(b"\r\n").unwrap(); + self.disable_raw_mode(); + std::process::exit(1); + } + x if (x == Key::Enter as u8) => { + let line = self.line.clone(); + + self.history_cursor = self.history.len(); + self.history.push(self.line.clone()); + + self.line.clear(); + self.line_cursor = 0; + + self.tty_out.write_all(b"\r\n").unwrap(); + self.disable_raw_mode(); + + return Some(line); + } + x if (x == Key::Backspace as u8) => { + if self.line_cursor < 1 { + continue; + } + + self.line_cursor -= 1; + self.line.remove(self.line_cursor); + + self.refresh_line(); + } + x if (x == Key::Null as u8) => {} + x if (x == Key::CtrlD as u8) => { + if !self.line.is_empty() { + self.delete_right(); + } else { + self.tty_out.write_all(b"\r\n").unwrap(); + self.disable_raw_mode(); + std::process::exit(1); + } + } + x if (x == Key::CtrlA as u8) => self.move_to_start(), + x if (x == Key::CtrlE as u8) => self.move_to_end(), + x if (x == Key::CtrlB as u8) => self.move_left(), + x if (x == Key::CtrlF as u8) => self.move_right(), + x if (x == Key::CtrlH as u8) => self.delete_left(), + x if (x == Key::CtrlK as u8) => self.delete_to_end(), + x if (x == Key::CtrlL as u8) => { + self.clear_screen(); + self.refresh_line(); + } + // Next line in history + x if (x == Key::CtrlN as u8) => self.history_next(), + // Previous line in history + x if (x == Key::CtrlP as u8) => self.history_prev(), + x if (x == Key::CtrlT as u8) => self.swap_one(), + x if (x == Key::CtrlU as u8) => self.delete_to_start(), + x if (x == Key::CtrlW as u8) => self.delete_word_left(), + x if (x == Key::Esc as u8) => { + let mut seq: [u8; 1] = [0]; + if self.tty_in.read(&mut seq).unwrap_or(0) != 1 { + continue; + } + if seq[0] != b'[' { + // FIXME: Handle Esc+Key / "Esc 0" sequences + continue; + } + if self.tty_in.read(&mut seq).unwrap_or(0) != 1 { + break; + } + if seq[0] >= b'0' && seq[0] <= b'9' { + // FIXME: Handle extended escape sequence + continue; + } + match seq[0] { + // Up + b'A' => self.history_prev(), + // Down + b'B' => self.history_next(), + // Right + b'C' => self.move_right(), + // Left + b'D' => self.move_left(), + // Home + b'H' => self.move_to_start(), + // End + b'F' => self.move_to_end(), + _ => break, + } + } + x => { + self.line.insert(self.line_cursor, x); + self.line_cursor += 1; + self.refresh_line(); + } + } + + self.tty_out.flush().unwrap(); + } + + self.disable_raw_mode(); + + None + } + + fn history_next(&mut self) { + if self.history.is_empty() { + return; + } + + self.line = self.history[self.history_cursor].clone(); + self.line_cursor = self.line.len(); + + self.refresh_line(); + + self.history_cursor = min(self.history_cursor + 1, self.history.len() - 1); + } + + fn history_prev(&mut self) { + if self.history.is_empty() { + return; + } + + // FIXME: Save current line before replacing it with line for the history. + + self.line = self.history[self.history_cursor].clone(); + self.line_cursor = self.line.len(); + + self.refresh_line(); + + self.history_cursor = self.history_cursor.saturating_sub(1); + } + + fn move_right(&mut self) { + self.line_cursor = min(self.line_cursor + 1, self.line.len()); + self.refresh_line(); + } + + fn move_left(&mut self) { + self.line_cursor = self.line_cursor.saturating_sub(1); + self.refresh_line(); + } + + fn move_to_start(&mut self) { + self.line_cursor = 0; + self.refresh_line(); + } + fn move_to_end(&mut self) { + self.line_cursor = self.line.len(); + self.refresh_line(); + } + + fn delete_word_left(&mut self) { + if self.line_cursor == 0 { + return; + } + + let cursor = self.line_cursor; + + while self.line_cursor > 0 && self.line[self.line_cursor - 1] == b' ' { + self.line_cursor -= 1; + } + while self.line_cursor > 0 && self.line[self.line_cursor - 1] != b' ' { + self.line_cursor -= 1; + } + + self.line.drain(self.line_cursor..cursor); + self.refresh_line(); + } + + fn delete_left(&mut self) { + if self.line_cursor == 0 { + return; + } + + self.line.remove(self.line_cursor - 1); + self.line_cursor = self.line_cursor.saturating_sub(1); + self.refresh_line(); + } + + fn delete_right(&mut self) { + if self.line_cursor >= self.line.len() { + return; + } + + self.line.remove(self.line_cursor); + self.refresh_line(); + } + + fn delete_to_start(&mut self) { + if self.line_cursor == 0 { + return; + } + + self.line.drain(0..self.line_cursor); + self.line_cursor = 0; + self.refresh_line(); + } + + fn delete_to_end(&mut self) { + if self.line_cursor >= self.line.len() { + return; + } + + self.line.truncate(self.line_cursor); + self.refresh_line(); + } + + fn swap_one(&mut self) { + if self.line_cursor == 0 { + return; + } + + self.line_cursor = min(self.line_cursor + 1, self.line.len()); + self.line.swap(self.line_cursor - 2, self.line_cursor - 1); + self.refresh_line(); + } + + fn refresh_line(&mut self) { + let prompt_len = self.prompt.as_ref().map(|x| x.len()).unwrap_or(0); + + let rows = (self.line.len() + prompt_len + self.columns - 1) / self.columns; + let prev_rows = self.max_rows; + let curr_row = (self.line_cursor + prompt_len + self.columns - 1) / self.columns; + self.column = (prompt_len + self.line_cursor) % self.columns; + + self.max_rows = max(self.max_rows, rows); + + // + // Clear rows + // + + // Go down to the last row if the cursor is not already there. + if curr_row < prev_rows { + trace!("Go down {}", prev_rows - curr_row); + write!(self.tty_out, "\x1b[{}B", prev_rows - curr_row).unwrap(); + } + + // Clear each row and go up. + for _ in 1..prev_rows { + trace!("Clear row, go up"); + self.tty_out.write_all(b"\r\x1b[0K\x1b[1A").unwrap(); + } + + // Clear the top row. + trace!("Clear top row"); + self.tty_out.write_all(b"\r\x1b[0K").unwrap(); + + // + // Rewrite prompt and line + // + + if let Some(prompt) = &self.prompt { + self.tty_out.write_all(prompt).unwrap(); + } + + self.tty_out.write_all(&self.line).unwrap(); + + // + // Display hints if any + // + + if self.hints_callback.is_some() && !self.line.is_empty() { + let hints = self.hints_callback.unwrap()(&self.line); + + if !hints.is_empty() { + // Column for the last character on the current row. + let max_column = (prompt_len + self.line.len()) % (self.columns + 1); + let max_len = min(self.columns - max_column, hints.len()); + + self.tty_out.write_all(b"\x1b[2m").unwrap(); + self.tty_out.write_all(&hints[..max_len]).unwrap(); + self.tty_out.write_all(b"\x1b[22m").unwrap(); + } + } + + // + // Move cursor to the right position. + // + + if self.column == 0 + && self.line.len() == self.line_cursor + && (prompt_len + self.line_cursor) > 0 + { + // We reached the end of a row, insert a new line and go back to the first row. + trace!("Insert linefeed"); + self.max_rows = max(self.max_rows, rows + 1); + self.tty_out.write_all(b"\r\n").unwrap(); + } else if self.column == 0 { + self.tty_out.write_all(b"\r").unwrap(); + } else { + // Move to the right column. + write!(self.tty_out, "\r\x1b[{}C", self.column).unwrap(); + + if rows > curr_row { + // Move up to the current row. + write!(self.tty_out, "\x1b[{}A", rows - curr_row).unwrap(); + } + } + } + + fn enable_raw_mode(&mut self) { + let mut termios = mem::MaybeUninit::uninit(); + + if unsafe { libc::tcgetattr(self.tty_out.as_raw_fd(), termios.as_mut_ptr()) } == -1 { + panic!("Failed to enable raw mode"); + } + + self.initial_termios = Some(unsafe { termios.assume_init() }); + let mut raw = self.initial_termios.unwrap(); + + raw.c_iflag &= !(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + raw.c_oflag &= !OPOST; + raw.c_cflag |= CS8; + raw.c_lflag &= !(ECHO | ICANON | IEXTEN | ISIG); + raw.c_cc[VMIN] = 1; + raw.c_cc[VTIME] = 0; + + if unsafe { libc::tcsetattr(self.tty_out.as_raw_fd(), TCSAFLUSH, &raw) } < 0 { + panic!("Failed to enable raw mode"); + } + } + + fn disable_raw_mode(&mut self) { + if self.initial_termios.is_some() + && unsafe { + libc::tcsetattr( + self.tty_out.as_raw_fd(), + TCSAFLUSH, + &self.initial_termios.unwrap(), + ) + } != -1 + { + self.initial_termios = None; + } + } + + fn get_columns(&mut self) -> usize { + let ws = libc::winsize { + ws_row: 0, + ws_col: 0, + ws_xpixel: 0, + ws_ypixel: 0, + }; + + if unsafe { libc::ioctl(self.tty_out.as_raw_fd(), TIOCGWINSZ, &ws) } < 0 || ws.ws_col == 0 { + todo!("Query the terminal for columns count."); + } + + ws.ws_col as usize + } + + fn get_cursor_position(&mut self) -> Option<Position> { + self.enable_raw_mode(); + + self.tty_out.write_all(b"\x1b[6n").unwrap(); + self.tty_out.flush().unwrap(); + + let mut buffer: [u8; 32] = [0; 32]; + + let mut sep_index = None; + let mut index = 0; + + let mut bytes = (&self.tty_in).bytes(); + while let Some(Ok(byte)) = bytes.next() { + if byte == b'R' || index >= buffer.len() { + break; + } + if byte == b';' { + sep_index = Some(index); + } + + buffer[index] = byte; + index += 1; + } + + if buffer[0] != Key::Esc as u8 || buffer[1] != b'[' { + return None; + } + + sep_index.map(|sep_index| Position { + row: as_usize(&buffer[2..sep_index]), + column: as_usize(&buffer[sep_index + 1..index]), + }) + } + + fn clear_screen(&mut self) { + self.tty_out.write_all(b"\x1b[H\x1b[2J").unwrap(); + } +} + +fn as_usize(array: &[u8]) -> usize { + std::str::from_utf8(array) + .unwrap() + .parse::<usize>() + .unwrap() +} diff --git a/src/common/trie.rs b/src/common/trie.rs new file mode 100644 index 0000000..381d2b5 --- /dev/null +++ b/src/common/trie.rs @@ -0,0 +1,151 @@ +#![allow(dead_code)] +use crate::common::ip::Block; +use crate::common::ip::Meta; +use crate::common::ip::BITMASK; + +pub struct Trie { + root: Node, +} + +#[derive(Debug)] +struct Node { + block: Option<Block>, + left: Option<Box<Node>>, + right: Option<Box<Node>>, +} + +impl Node { + pub const NULL: Node = Self { + block: None, + left: None, + right: None, + }; + + fn new(block: Option<Block>) -> Self { + Node { + block, + left: None, + right: None, + } + } + + fn is_leaf(&self) -> bool { + self.left.is_none() && self.right.is_none() + } +} + +impl Trie { + pub fn new() -> Self { + Trie { root: Node::NULL } + } + + pub fn insert(&mut self, block: Block, _meta: Meta) { + let mut node = &mut self.root; + let mut addr = block.addr; + + for _ in 0..block.mlen { + if addr & BITMASK == 0 { + if node.left.is_none() { + node.left = Some(Box::new(Node::NULL)); + } + node = node.left.as_deref_mut().unwrap(); + } else { + if node.right.is_none() { + node.right = Some(Box::new(Node::NULL)); + } + node = node.right.as_deref_mut().unwrap(); + } + addr <<= 1; + } + + node.block = Some(block); + } + + pub fn find(&self, needle: &Block) -> Option<Block> { + self.find_block_node(needle)?.block + } + + pub fn parent(&self, needle: &Block) -> Option<Block> { + let mut node = &self.root; + let mut addr = needle.addr; + let mut parent = None; + + for _ in 0..needle.mlen { + if node.block.is_some() { + parent = node.block; + } + + if addr & BITMASK == 0 { + if node.left.is_some() { + node = node.left.as_deref().unwrap(); + } else { + break; + } + } else if node.right.is_some() { + node = node.right.as_deref().unwrap(); + } else { + break; + } + addr <<= 1; + } + + parent + } + + pub fn children(&self, parent: &Block) -> Vec<Block> { + let root: &Node = match self.find_block_node(parent) { + Some(root) => root, + None => return vec![], + }; + + let mut children: Vec<Block> = Vec::new(); + let mut stack: Vec<&Node> = vec![root]; + + while let Some(node) = stack.pop() { + if node.is_leaf() && node.block.is_some() && node.block.unwrap() != root.block.unwrap() + { + children.push(node.block.unwrap()); + continue; + } + + if node.left.is_some() { + stack.push(node.left.as_deref().unwrap()); + } + if node.right.is_some() { + stack.push(node.right.as_deref().unwrap()); + } + } + + children + } + + fn find_block_node(&self, needle: &Block) -> Option<&Node> { + let mut node = &self.root; + let mut addr = needle.addr; + let mut match_ = None; + + for _ in 0..(needle.mlen + 1) { + if node.block.is_some() { + match_ = Some(node); + } + + if addr & BITMASK == 0 { + if node.left.is_some() { + node = node.left.as_deref().unwrap(); + } else { + break; + } + } else if node.right.is_some() { + node = node.right.as_deref().unwrap(); + } else { + break; + } + addr <<= 1; + } + + match match_?.block { + Some(block) if block == *needle => match_, + _ => None, + } + } +} diff --git a/src/help.rs b/src/help.rs new file mode 100644 index 0000000..188f475 --- /dev/null +++ b/src/help.rs @@ -0,0 +1,43 @@ +use std::process::ExitCode; + +use crate::query; +use crate::repl; +use crate::server; + +pub const USAGE: &str = " +Usage: blom [command] [options] + +Commands: + + server Start the blom server. + + repl Start the blom repl. + query <query> Send <query> to the blom server. + + help [<command>] Print usage. + +General options: + + -h, --help Print usage. +"; + +pub fn cmd(args: &[String]) -> ExitCode { + if args.is_empty() { + println!("{}", USAGE); + return ExitCode::from(0); + } + + match args[0].as_str() { + "server" => println!("{}", server::USAGE), + "repl" => println!("{}", repl::USAGE), + "query" => println!("{}", query::USAGE), + "help" => println!("{}", USAGE), + _ => { + println!("{}", USAGE); + eprintln!("Unknown command {}.", args[0]); + return ExitCode::from(1); + } + } + + ExitCode::SUCCESS +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..f39c5fc --- /dev/null +++ b/src/main.rs @@ -0,0 +1,37 @@ +#![feature(addr_parse_ascii)] + +use std::env; +use std::process::ExitCode; + +mod common; +mod help; +mod query; +mod repl; +mod server; + +fn main() -> ExitCode { + env_logger::init(); + + let args: Vec<String> = env::args().collect(); + + if args.len() <= 1 { + println!("{}", help::USAGE); + eprintln!("Expected command argument."); + return ExitCode::from(1); + } + + let cmd = &args[1]; + let cmd_args = &args[2..]; + + match cmd.as_str() { + "server" => return server::cmd(cmd_args), + "repl" => return repl::cmd(cmd_args), + "query" => return query::cmd(cmd_args), + "help" | "-h" | "--help" => return help::cmd(cmd_args), + _ => { + println!("{}", help::USAGE); + eprintln!("Unknown command {}.", cmd); + return ExitCode::from(1); + } + } +} diff --git a/src/query.rs b/src/query.rs new file mode 100644 index 0000000..1f3b4c8 --- /dev/null +++ b/src/query.rs @@ -0,0 +1,97 @@ +use crate::common::expr::Expr; +use std::io::Read; +use std::io::Write; +use std::net::TcpStream; +use std::process::ExitCode; +use std::str; + +pub const USAGE: &str = " +Usage: blom query <query> + + Sends <query> to the blom server and prints the response + to stdout. + +Examples: + + $ blom query 'CHILDREN 1.2.3.0/24' + 1.2.3.4/26 + 1.2.3.4/32 + + $ blom query --raw 'CHILDREN 1.2.3.0/24' + +1.2.3.4/26\n + +1.2.3.4/32\n + + $ blom query 'INFO 1.2.3.0/24' + Start: 1.2.3.0 + End: 1.2.3.255 + Size: 256 + Parents: 3 + Children: 364 + Meta: \"{\\\"owner\\\": \\\"acme\\\"}\" + +Options: + + -r, --raw Do not parse the response and prints the raw + output from the server instead. + + -v, --verbose Print the request send to the server in addition + to the response. + + -b, --bind Bind to the given ADDRESS:PORT. Default is + 0.0.0.0:4902 + +"; + +pub fn cmd(args: &[String]) -> ExitCode { + let mut addr = "0.0.0.0:4902"; + let mut query: Option<&str> = None; + + let mut arg_index: usize = 0; + while arg_index < args.len() { + match args[arg_index].as_str() { + "--bind" | "-b" => { + addr = args + .get(arg_index + 1) + .expect("Missing address after --bind.") + .as_str(); + arg_index += 1; + } + q => { + if query.is_some() { + println!("Too many arguments."); + return ExitCode::FAILURE; + } + query = Some(q); + } + } + + arg_index += 1; + } + + if let Some(q) = query { + handle_query(addr, q); + return ExitCode::SUCCESS; + } + + println!("Missing query."); + ExitCode::FAILURE +} + +fn handle_query(addr: &str, query: &str) { + let expr = Expr::from_query(query).encode(); + + match TcpStream::connect(addr) { + Ok(mut stream) => { + let _ = stream.write(&expr).unwrap(); + let mut data = [0u8; 64]; + match stream.read(&mut data) { + Ok(_) => { + let resp = str::from_utf8(&data).unwrap(); + println!("{resp:?}"); + } + Err(e) => println!("Read failure: {e:?}"), + } + } + Err(e) => println!("Connection failure: {e:?}"), + } +} diff --git a/src/repl.rs b/src/repl.rs new file mode 100644 index 0000000..339405e --- /dev/null +++ b/src/repl.rs @@ -0,0 +1,134 @@ +use crate::common::expr::Error as ProtoError; +use crate::common::expr::Expr; +use crate::common::term::Term; +use std::io::BufReader; +use std::io::Write; +use std::net::TcpStream; +use std::process::ExitCode; + +pub const USAGE: &str = " +Usage: blom start + + Starts the blom repl. + + -b, --bind Bind to the given ADDRESS:PORT. Default is + 0.0.0.0:4902 + +"; + +enum Error { + Connect, +} + +pub fn cmd(args: &[String]) -> ExitCode { + let mut addr = "0.0.0.0:4902"; + + let mut arg_index: usize = 0; + while arg_index < args.len() { + match args[arg_index].as_str() { + "--addr" | "-a" => { + addr = args + .get(arg_index + 1) + .expect("Missing address after --addr.") + .as_str(); + arg_index += 1; + } + _ => { + println!("Too many arguments."); + return ExitCode::FAILURE; + } + } + + arg_index += 1; + } + + match start(addr) { + Ok(()) => ExitCode::SUCCESS, + Err(_) => ExitCode::FAILURE, + } +} + +fn start(addr: &str) -> Result<(), Error> { + let mut term = Term::new(); + + term.setup_prompt(format!("{addr}> ").as_bytes()); + term.setup_hints(hints); + + while let Some(query) = input(&mut term) { + if query.is_empty() { + continue; + } + + let mut stream = match try_connect(addr) { + Ok(stream) => stream, + Err(_) => continue, + }; + + let expr = Expr::from_query(&query); + + if stream.write(&expr.encode()).is_err() { + println!("Couldn't connect to blom at {addr}"); + continue; + } + + let mut resp = BufReader::new(&stream); + + match Expr::from_bytes(&mut resp) { + Ok(resp) => println!("{resp}"), + Err(ProtoError::ConnectionClosed) => { + println!("Couldn't connect to blom at {addr}"); + continue; + } + Err(e) => { + println!("{e}"); + break; + } + } + } + + Ok(()) +} + +fn try_connect(addr: &str) -> Result<TcpStream, Error> { + match TcpStream::connect(addr) { + Ok(stream) => Ok(stream), + Err(_) => { + println!("Couldn't connect to blom at {addr}."); + Err(Error::Connect) + } + } +} + +fn input(term: &mut Term) -> Option<String> { + let line = term.edit()?; + let query = std::str::from_utf8(&line).unwrap().trim(); + + if query == "exit" { + return None; + } + + Some(query.to_string()) +} + +// TODO: Refactor +fn hints(line: &[u8]) -> &[u8] { + match line { + b"ECHO" | b"echo" => b" MESSAGE", + b"SET" | b"set" => b" BLOCK META", + b"GET" | b"get" => b" BLOCK", + b"DEL" | b"del" => b" BLOCK", + b"EXISTS" | b"exists" => b" BLOCK", + b"INFO" | b"info" => b" BLOCK", + b"PARENT" | b"parent" => b" BLOCK", + b"CHILDREN" | b"children" => b" BLOCK", + b"ECHO " | b"echo " => b"MESSAGE", + b"SET " | b"set " => b"BLOCK META", + b"GET " | b"get " => b"BLOCK", + b"DEL " | b"del " => b"BLOCK", + b"EXISTS " | b"exists " => b"BLOCK", + b"INFO " | b"info " => b"BLOCK", + b"PARENT " | b"parent " => b"BLOCK", + b"CHILDREN " | b"children " => b"BLOCK", + _ => b"", + } +} diff --git a/src/server.rs b/src/server.rs new file mode 100644 index 0000000..c23d74a --- /dev/null +++ b/src/server.rs @@ -0,0 +1,291 @@ +mod conn; +mod parser; + +use crate::common::db::Database; +use crate::common::expr::Error as ExprError; +use crate::common::query::Error as QueryError; +use conn::Conn; +use conn::Error as ConnError; +use log::debug; +use log::error; +use log::info; +use log::trace; +use log::warn; +use mio::event::Event; +use mio::event::Events; +use mio::net::TcpListener; +use mio::Interest; +use mio::Poll; +use mio::Token; +use std::collections::HashMap; +use std::fmt; +use std::io::ErrorKind; +use std::io::Read; +use std::net::SocketAddr; +use std::process; +use std::process::ExitCode; +use std::time::Duration; + +pub const USAGE: &str = " +Usage: blom start + + Starts the blom server. + +Options + + -b, --bind Bind to the given ADDRESS:PORT. Default is + 0.0.0.0:4902 + + +"; + +pub const HEADER: &str = " + ___ ___ ___ ___ + /\\ \\ /\\__\\ /\\ \\ /\\__\\ + /..\\ \\ /./ / /..\\ \\ /..L_L_ + /..\\.\\__\\ /./__/ /./\\.\\__\\ /./L.\\__\\ + \\.\\../ / \\.\\ \\ \\.\\/./ / \\/_/./ / + \\../ / \\.\\__\\ \\../ / /./ / + \\/__/ \\/__/ \\/__/ \\/__/ +"; + +const SERVER_TOKEN: Token = Token(0); +const SERVER_BUFLEN: usize = 512; +const CONN_BUFLEN: usize = 2048; +const MAX_CONN: usize = 1000; + +#[derive(Debug)] +enum Error { + IO(std::io::Error), + Query(QueryError), + Expr(ExprError), +} + +struct Server { + addr: SocketAddr, + pid: u32, + poll: Poll, + pool: Vec<Token>, + listener: TcpListener, + conns: HashMap<Token, Conn>, + buffer: [u8; SERVER_BUFLEN], + db: Database, +} + +pub fn cmd(args: &[String]) -> ExitCode { + println!("{}\n", HEADER); + + let addr = match args.get(0).map(|x| x.as_str()) { + Some("--bind") | Some("-b") => { + Some(args.get(1).expect("Missing address for --bind.").as_str()) + } + _ => None, + } + .unwrap_or("0.0.0.0:4902"); + + let mut server = match Server::bind(addr.parse().unwrap(), MAX_CONN) { + Some(server) => server, + None => return ExitCode::FAILURE, + }; + println!( + "PID: {} | Listening on {}; press Ctrl-C to exit...\n\n", + server.pid, server.addr + ); + + match server.start() { + Ok(()) => { + info!("Received signal X, terminating."); + ExitCode::SUCCESS + } + Err(e) => { + error!("Error: {e:?}"); + ExitCode::FAILURE + } + } +} + +impl Server { + fn bind(addr: SocketAddr, max_conns: usize) -> Option<Self> { + assert!(max_conns > 0); + + let mut listener = match TcpListener::bind(addr) { + Ok(listener) => listener, + Err(ref e) if e.kind() == ErrorKind::AddrInUse => { + println!("{addr} already in use."); + return None; + } + Err(_) => { + println!("Couldn't bind to {addr}."); + return None; + } + }; + + let poll = Poll::new().unwrap(); + + poll.registry() + .register(&mut listener, SERVER_TOKEN, Interest::READABLE) + .unwrap(); + + Some(Server { + addr, + pid: process::id(), + poll, + listener, + conns: HashMap::new(), + buffer: [0; SERVER_BUFLEN], + pool: (1..max_conns + 1).map(Token).collect(), + db: Database::new(), + }) + } + + fn start(&mut self) -> Result<(), Error> { + let mut events = Events::with_capacity(512); + + loop { + match self.poll.poll(&mut events, Some(Duration::from_secs(30))) { + Ok(()) => (), + Err(ref e) if e.kind() == ErrorKind::Interrupted => break, + Err(e) => return Err(Error::IO(e)), + }; + + if events.is_empty() { + trace!("Pulse"); + } + + for event in &events { + match event.token() { + SERVER_TOKEN => self.handle_new(), + token => self.handle_conn(token, event), + } + } + } + + Ok(()) + } + + fn handle_new(&mut self) { + loop { + match self.listener.accept() { + Ok((mut socket, _)) => match self.pool.pop() { + Some(token) => { + self.poll + .registry() + .register(&mut socket, token, Interest::READABLE | Interest::WRITABLE) + .unwrap(); + + let conn = Conn::new(socket, token); + + debug!( + "[{}] Connected. {} clients connected.", + conn, + MAX_CONN - self.pool.len() + ); + + self.conns.insert(token, conn); + } + None => { + warn!( + "[{}] Connection refused: Too many clients.", + socket.peer_addr().unwrap() + ); + break; + } + }, + Err(ref e) if e.kind() == ErrorKind::WouldBlock => break, + Err(_) => panic!("FATAL | Unexpected error"), + } + } + } + + fn handle_conn(&mut self, token: Token, event: &Event) { + let mut did_work = true; + while did_work { + did_work = false; + + let conn = self.conns.get_mut(&token).unwrap(); + + if conn.pending_exec() { + did_work = true; + if let Err(ConnError::Fatal) = conn.handle_pending(&mut self.db) { + self.close_conn(token); + break; + } + } + + if event.is_readable() && conn.read_ready() { + did_work = true; + + match conn.read(&mut self.buffer) { + Ok(0) => { + self.close_conn(token); + break; + } + Ok(len) => { + if let Err(ConnError::Fatal) = + conn.handle_msg(&mut self.db, &self.buffer[0..len]) + { + self.close_conn(token); + break; + } + } + Err(ref e) if e.kind() == ErrorKind::WouldBlock => break, + Err(ref e) if e.kind() == ErrorKind::ConnectionReset => { + self.close_conn(token); + break; + } + Err(e) => { + error!("!!! [{conn}] Fatal error: {e:?}."); + self.close_conn(token); + break; + } + } + } + + if event.is_writable() && conn.write_ready() { + did_work = true; + if let Err(e) = conn.reply() { + error!("!!! [{conn}] Fatal error: {e:?}."); + self.close_conn(token); + break; + }; + } + } + } + + fn close_conn(&mut self, token: Token) { + let conn = self.conns.remove(&token).unwrap(); + self.pool.push(token); + debug!( + "[{conn}] Closed. {} clients connected.", + MAX_CONN - self.pool.len() + ); + } +} + +// Display + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Error::IO(err) => err.to_string(), + Error::Query(err) => err.to_string(), + Error::Expr(err) => err.to_string(), + }; + + write!(f, "{}", res) + } +} + +// Errors + +impl From<QueryError> for Error { + fn from(err: QueryError) -> Self { + Error::Query(err) + } +} + +impl From<ExprError> for Error { + fn from(err: ExprError) -> Self { + Error::Expr(err) + } +} diff --git a/src/server/conn.rs b/src/server/conn.rs new file mode 100644 index 0000000..7ea5b0d --- /dev/null +++ b/src/server/conn.rs @@ -0,0 +1,230 @@ +use super::parser::Error as ParserError; +use super::parser::Parser; +use super::parser::State as ParserState; +use crate::common::db::Database; +use crate::common::expr::Expr; +use crate::common::query::Error as QueryError; +use crate::common::query::Query; +use crate::common::sized_buffer::SizedBuffer; +use crate::server::CONN_BUFLEN; +use log::debug; +use log::error; + +use mio::net::TcpStream; +use mio::Token; +use std::fmt; +use std::fmt::Display; +use std::fmt::Formatter; +use std::io::ErrorKind; +use std::io::Read; +use std::io::Write; + +#[derive(Debug)] +pub enum Error { + IO(std::io::Error), + Parser(ParserError), + Query(QueryError), + Fatal, +} + +#[derive(Eq, PartialEq, Debug)] +#[repr(u8)] +pub enum State { + PendingExec = 0b100, + ReadReady = 0b010, + WriteReady = 0b001, +} + +pub struct Conn { + pub flags: u8, + socket: TcpStream, + token: Token, + parser: Parser, + buf_in: SizedBuffer<[u8; CONN_BUFLEN]>, + buf_out: Vec<u8>, +} + +impl Conn { + pub fn new(socket: TcpStream, token: Token) -> Self { + Self { + flags: State::ReadReady as u8, + socket, + token, + parser: Parser::new(), + buf_in: SizedBuffer::new(), + buf_out: Vec::new(), + } + } + + pub fn handle_pending(&mut self, db: &mut Database) -> Result<(), Error> { + self.handle_msg(db, &[]) + } + + pub fn handle_msg(&mut self, db: &mut Database, msg: &[u8]) -> Result<(), Error> { + if let Err(err) = self.buf_in.append(&mut msg.to_vec()) { + error!("[{self}] ! Error while writing to the buffer: {err:?}"); + return Err(Error::Fatal); + } + + match self.parser.parse(&mut self.buf_in) { + Ok(ParserState::Wait) => Ok(()), + Ok(ParserState::Done(argv)) => { + Query::from_expr(Expr::Array( + argv.iter().map(|x| Expr::Blob(x.to_vec())).collect(), + )) + .map(|query| { + debug!("[{self}] < {query}"); + let resp = query.exec(db); + + self.draft(&resp.encode()); + if self.buf_in.empty() { + self.buf_in.reset(); + self.flags &= !(State::PendingExec as u8); + } else { + self.flags &= !(State::ReadReady as u8); + self.flags |= State::PendingExec as u8; + } + + debug!("[{self}] > {resp}"); + }) + .map_err(|e| { + debug!("[{self}] ! {e:?}"); + let wrapped_err = Error::Query(e); + let resp = Expr::Error { + code: error_code(&wrapped_err), + msg: format!("{}", wrapped_err).into_bytes(), + }; + + self.draft(&resp.encode()); + + if self.buf_in.empty() { + self.buf_in.reset(); + self.flags &= !(State::PendingExec as u8); + } else { + self.flags &= !(State::ReadReady as u8); + self.flags |= State::PendingExec as u8; + } + wrapped_err + })?; + + Ok(()) + } + Err(err) => { + let wrapped_err = Error::Parser(err); + + debug!("[{self}] ! {wrapped_err}"); + + let resp = Expr::Error { + code: error_code(&wrapped_err), + msg: format!("{}", wrapped_err).into_bytes(), + }; + + self.draft(&resp.encode()); + + /* If there's a parsing error, we throw away the entire buffer. This means + * potentially throwing away valid commands appearing later in the buffer */ + self.buf_in.reset(); + self.flags &= !(State::PendingExec as u8); + + Err(wrapped_err) + } + } + } + + fn draft(&mut self, msg: &[u8]) { + self.buf_out = msg.to_vec(); + self.flags = State::WriteReady as u8; + } + + pub fn reply(&mut self) -> Result<(), Error> { + assert!(self.write_ready()); + + match self.socket.write(&self.buf_out) { + Ok(wrote_len) if wrote_len == self.buf_out.len() => { + self.flags &= !(State::WriteReady as u8); + + /* Full write, we're ready to accept more data. If there are still queries waiting + * to be processed in the buffer, wait until these are processed first. */ + if !self.pending_exec() { + self.flags |= State::ReadReady as u8; + } + + if let Err(e) = self.socket.flush() { + return Err(Error::IO(e)); + } + + Ok(()) + } + Ok(_wrote_len) => { + /* Partial write, track the remaining length */ + self.flags |= State::WriteReady as u8; + Ok(()) + } + Err(e) if e.kind() == ErrorKind::BrokenPipe => Err(Error::IO(e)), + Err(e) if e.kind() == ErrorKind::ConnectionReset => Err(Error::IO(e)), + Err(e) => panic!("FATAL | Unexpected error: {e:?}"), + } + } + + pub fn pending_exec(&self) -> bool { + self.flags & State::PendingExec as u8 > 0 + } + pub fn read_ready(&self) -> bool { + self.flags & State::ReadReady as u8 > 0 + } + pub fn write_ready(&self) -> bool { + self.flags & State::WriteReady as u8 > 0 + } +} + +impl Read for Conn { + fn read(&mut self, buf: &mut [u8]) -> Result<usize, std::io::Error> { + assert!(self.read_ready()); + self.socket.read(buf) + } +} + +impl Write for Conn { + fn write(&mut self, buf: &[u8]) -> Result<usize, std::io::Error> { + self.socket.write(buf) + } + + fn flush(&mut self) -> Result<(), std::io::Error> { + self.socket.flush() + } +} + +impl Display for Conn { + fn fmt(&self, f: &mut Formatter) -> fmt::Result { + match self.socket.peer_addr() { + Ok(addr) => write!(f, "{addr} #{}", self.token.0), + Err(_) => write!(f, "unknown-addr #{}", self.token.0), + } + } +} + +// Errors + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Error::IO(err) => format!("IO error: {err:?}"), + Error::Parser(err) => err.to_string(), + Error::Query(err) => err.to_string(), + Error::Fatal => "Fatal error".to_string(), + }; + + write!(f, "{}", res) + } +} + +fn error_code(error: &Error) -> Vec<u8> { + let code = match error { + Error::IO(_) => "SERVER", + Error::Parser(_) => "PROTOCOL", + Error::Query(_) => "QUERY", + Error::Fatal => "SERVER", + }; + + code.as_bytes().to_vec() +} diff --git a/src/server/parser.rs b/src/server/parser.rs new file mode 100644 index 0000000..e9c2aad --- /dev/null +++ b/src/server/parser.rs @@ -0,0 +1,118 @@ +use crate::common::sized_buffer::Error as SizedBufferError; +use crate::common::sized_buffer::SizedBuffer; +use std::fmt; + +#[derive(Debug)] +pub enum Error { + ExpectedArray(char), + ExpectedString(char), + InvalidLength, + Buffer(SizedBufferError), +} + +#[derive(Debug)] +pub enum State { + Wait, + Done(Vec<Vec<u8>>), +} + +pub struct Parser { + pub argv: Vec<Vec<u8>>, + argc_rem: u64, + arg_len: i64, +} + +impl Parser { + pub fn new() -> Self { + Self { + argv: Vec::new(), + argc_rem: 0, + arg_len: -1, + } + } + + pub fn parse<const N: usize>( + &mut self, + buffer: &mut SizedBuffer<[u8; N]>, + ) -> Result<State, Error> { + if self.argc_rem == 0 { + assert_eq!(self.arg_len, -1); + + /* argc_rem wasn't initialized yet. The current buffer was never read, we need to + * figure out the number of args. */ + if buffer.peek() != b'*' { + return Err(Error::ExpectedArray(buffer.peek() as char)); + } + let arr_lf_offset = match buffer.find_offset(b'\n') { + Some(offset) => offset, + /* Couldn't find \n, wait for more data */ + None => return Ok(State::Wait), + }; + self.argc_rem = read_data_len(buffer, arr_lf_offset)? as u64; + buffer.skip_byte(b'\n').map_err(Error::Buffer)?; + } + + /* We already started reading a command. We can process the arguments. */ + while self.argc_rem > 0 { + /* arg_len wasn't initialized yet. We need to find the size of the string argument. */ + if self.arg_len == -1 { + if buffer.peek() != b'$' { + return Err(Error::ExpectedString(buffer.peek() as char)); + } + + let str_lf_offset = match buffer.find_offset(b'\n') { + Some(offset) => offset, + /* Couldn't find \n, wait for more data */ + None => return Ok(State::Wait), + }; + self.arg_len = read_data_len(buffer, str_lf_offset)? as i64; + buffer.skip_byte(b'\n').map_err(Error::Buffer)?; + } else { + match buffer.read_count(self.arg_len as usize) { + /* Not enough data, wait for more */ + Err(_) => return Ok(State::Wait), + /* Push the new string onto the args list */ + Ok(arg) => self.argv.push(arg.to_vec()), + } + buffer.skip_byte(b'\n').map_err(Error::Buffer)?; + + self.argc_rem -= 1; + self.arg_len = -1; + } + } + + let argv = self.argv.clone(); + self.argv.clear(); + Ok(State::Done(argv)) + } +} + +fn read_data_len<const N: usize>( + buffer: &mut SizedBuffer<[u8; N]>, + n: usize, +) -> Result<usize, Error> { + /* Read from 1 to skip the data tag */ + let mut len: usize = 0; + + for (i, x) in buffer.read_count_unchecked(n)[1..].iter().rev().enumerate() { + if *x < 48 || *x > 57 { + return Err(Error::InvalidLength); + } + len += (x - 48) as usize * 10usize.pow(i as u32); + } + + Ok(len) +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let res = match self { + Error::ExpectedArray(got) => format!("Expected array, got {:?}.", *got as char), + Error::ExpectedString(got) => format!("Expected string, got {:?}.", *got as char), + Error::InvalidLength => "Invalid header size.".to_string(), + Error::Buffer(err) => format!("Error read or writing to/from the buffer: {err:?}"), + }; + + write!(f, "{}", res) + } +} |