From 7fe06c35e62a6e2cab5e8e77c10bc5f690912f77 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Sun, 25 Jan 2026 15:29:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=A4=A7=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blocked-services-rules.json | 2857 -- blocked-services-rules.json.backup | 2894 -- build-windows.sh | 5 - config.json | 4 +- data/gflist.txt | 2572 ++ data/gfwlist.txt | 7552 +++++ download.sh | 12 - download/index.html | 34 - static/domain-info/domains/domain-info.json | 64 +- static/domain-info/tracker/trackers.json | 7 + static/js/dashboard.js | 55 +- static/js/logs.js | 76 +- staticbak/static/api/css/style.css | 488 - staticbak/static/api/index.html | 16 - staticbak/static/api/js/index.js | 1791 -- staticbak/static/css/animation.css | 62 - staticbak/static/css/style.css | 1157 - staticbak/static/css/vendor/all.min.css | 9 - .../static/css/webfonts/fa-solid-900.woff2 | Bin 150124 -> 0 bytes .../domain-info/domains/domain-info.json | 535 - .../static/domain-info/tracker/trackers.json | 25333 ---------------- .../domain-info/tracker/trackers.json.bak | 25333 ---------------- staticbak/static/index.html | 1181 - staticbak/static/js/api.js | 305 - staticbak/static/js/app.js | 317 - staticbak/static/js/colors.config.js | 53 - staticbak/static/js/config.js | 296 - staticbak/static/js/dashboard.js | 3079 -- staticbak/static/js/guide.js | 0 staticbak/static/js/hosts.js | 202 - staticbak/static/js/logs.js | 1692 -- staticbak/static/js/main.js | 405 - staticbak/static/js/modules/blacklists.js | 255 - staticbak/static/js/modules/config.js | 125 - staticbak/static/js/modules/dashboard.js | 1220 - staticbak/static/js/modules/hosts.js | 308 - staticbak/static/js/modules/query.js | 294 - staticbak/static/js/modules/rules.js | 422 - staticbak/static/js/query.js | 301 - staticbak/static/js/server-status.js | 305 - staticbak/static/js/shield.js | 1302 - staticbak/static/js/vendor/chart.umd.min.js | 1 - staticbak/static/js/vendor/tailwind.js | 19 - staticbak/static/login.html | 194 - test/test-domain-info.js | 261 - test/test_cache.go | 185 - test/test_cache2.json | 14 - test/test_cache4.json | 14 - test/test_dns_perf.sh | 28 - test/test_dns_perf_stress.sh | 55 - test/test_optimization.sh | 96 - test/test_optimization_v2.sh | 88 - test/test_optimization_v3.sh | 88 - 53 files changed, 10191 insertions(+), 73770 deletions(-) delete mode 100644 blocked-services-rules.json delete mode 100644 blocked-services-rules.json.backup delete mode 100755 build-windows.sh create mode 100644 data/gflist.txt create mode 100644 data/gfwlist.txt delete mode 100755 download.sh delete mode 100644 download/index.html delete mode 100644 staticbak/static/api/css/style.css delete mode 100644 staticbak/static/api/index.html delete mode 100644 staticbak/static/api/js/index.js delete mode 100644 staticbak/static/css/animation.css delete mode 100644 staticbak/static/css/style.css delete mode 100644 staticbak/static/css/vendor/all.min.css delete mode 100644 staticbak/static/css/webfonts/fa-solid-900.woff2 delete mode 100644 staticbak/static/domain-info/domains/domain-info.json delete mode 100644 staticbak/static/domain-info/tracker/trackers.json delete mode 100644 staticbak/static/domain-info/tracker/trackers.json.bak delete mode 100644 staticbak/static/index.html delete mode 100644 staticbak/static/js/api.js delete mode 100644 staticbak/static/js/app.js delete mode 100644 staticbak/static/js/colors.config.js delete mode 100644 staticbak/static/js/config.js delete mode 100644 staticbak/static/js/dashboard.js delete mode 100644 staticbak/static/js/guide.js delete mode 100644 staticbak/static/js/hosts.js delete mode 100644 staticbak/static/js/logs.js delete mode 100644 staticbak/static/js/main.js delete mode 100644 staticbak/static/js/modules/blacklists.js delete mode 100644 staticbak/static/js/modules/config.js delete mode 100644 staticbak/static/js/modules/dashboard.js delete mode 100644 staticbak/static/js/modules/hosts.js delete mode 100644 staticbak/static/js/modules/query.js delete mode 100644 staticbak/static/js/modules/rules.js delete mode 100644 staticbak/static/js/query.js delete mode 100644 staticbak/static/js/server-status.js delete mode 100644 staticbak/static/js/shield.js delete mode 100644 staticbak/static/js/vendor/chart.umd.min.js delete mode 100644 staticbak/static/js/vendor/tailwind.js delete mode 100644 staticbak/static/login.html delete mode 100644 test/test-domain-info.js delete mode 100644 test/test_cache.go delete mode 100644 test/test_cache2.json delete mode 100644 test/test_cache4.json delete mode 100755 test/test_dns_perf.sh delete mode 100755 test/test_dns_perf_stress.sh delete mode 100755 test/test_optimization.sh delete mode 100755 test/test_optimization_v2.sh delete mode 100644 test/test_optimization_v3.sh diff --git a/blocked-services-rules.json b/blocked-services-rules.json deleted file mode 100644 index d828d87..0000000 --- a/blocked-services-rules.json +++ /dev/null @@ -1,2857 +0,0 @@ -{ - "ServiceID": { - "1": "社交媒体", - "2": "游戏网站", - "3": "下载站/应用商店", - "4": "购物网站" - }, - "GFWlist": { - "Activision Blizzard": { - "Name": "Activision Blizzard", - "ServiceID": "2", - "Icon": "", - "Rules": { - "1": "||activision.com^", - "2": "||activisionblizzard.com^", - "3": "||callofduty.com^", - "4": "||callofdutyleague.com^", - "5": "||codmwest.com^", - "6": "||demonware.net^" - }, - }, - "Amazon": { - "Name": "Amazon", - "ServiceID": "4", - "Icon": "", - "Rules": { - "1": "||a2z.com^", - "2": "||a2z.org.cn^", - "3": "||aboutamazon.cn^", - "4": "||aboutamazon.co.uk^", - "5": "||aboutamazon.com.au^", - "6": "||aboutamazon.com^", - "7": "||aboutamazon.de^", - "8": "||aboutamazon.es^", - "9": "||aboutamazon.eu^", - "10": "||aboutamazon.fr^", - "11": "||aboutamazon.in^", - "12": "||aboutamazon.it^", - "13": "||aboutamazon.jp^", - "14": "||aboutamazon.pl^", - "15": "||acmvalidations.com^", - "16": "||acmvalidationsaws.com^", - "17": "||aesworkshops.com^", - "18": "||aiv-cdn.net^", - "19": "||alexa.com^", - "20": "||alexafund.cn^", - "21": "||alexafund.com.cn^", - "22": "||amaaozn.com^", - "23": "||amazon-adsystem.com^", - "24": "||amazon-fashions.com^", - "25": "||amazon-jp-recruiting.com^", - "26": "||amazon-lantern.com^", - "27": "||amazon-launchpad.com^", - "28": "||amazon.ae^", - "29": "||amazon.ca^", - "30": "||amazon.cn^", - "31": "||amazon.co.jp^", - "32": "||amazon.co.uk^", - "33": "||amazon.com.au^", - "34": "||amazon.com.be^", - "35": "||amazon.com.br^", - "36": "||amazon.com.mx^", - "37": "||amazon.com.tr^", - "38": "||amazon.com^", - "39": "||amazon.de^", - "40": "||amazon.es^", - "41": "||amazon.fr^", - "42": "||amazon.in^", - "43": "||amazon.it^", - "44": "||amazon.jobs^", - "45": "||amazon.jp^", - "46": "||amazon.nl^", - "47": "||amazon.red^", - "48": "||amazon.se^", - "49": "||amazon.sg^", - "50": "||amazon^", - "51": "||amazonalexavoxcon.com^", - "52": "||amazonauthorinsights.com^", - "53": "||amazonaws-china.com^", - "54": "||amazonaws.cn^", - "55": "||amazonaws.co.uk^", - "56": "||amazonaws.com.cn^", - "57": "||amazonaws.com^$dnstype=~CNAME", - "58": "||amazonaws.tv^", - "59": "||amazonbusiness.cn^", - "60": "||amazonbusiness.com.cn^", - "61": "||amazonbusiness.org^", - "62": "||amazonbusinessblog.com^", - "63": "||amazonchoice.cn^", - "64": "||amazonchoice.com.cn^", - "65": "||amazonchoices.cn^", - "66": "||amazonchoices.com.cn^", - "67": "||amazondevicesupport.com^", - "68": "||amazonfctours.com^", - "69": "||amazonianblog.com^", - "70": "||amazonimages.com^", - "71": "||amazoninspire.cn^", - "72": "||amazoninspire.com.cn^", - "73": "||amazonlaunchpad.cn^", - "74": "||amazonlaunchpad.com.cn^", - "75": "||amazonlaunchpad.com^", - "76": "||amazonlending.com.cn^", - "77": "||amazonliterarypartnership.com^", - "78": "||amazonlumberyard.wang^", - "79": "||amazonnow.cn^", - "80": "||amazonnow.com.cn^", - "81": "||amazonpay.com^", - "82": "||amazonpay.in^", - "83": "||amazonprimevideo.cn^", - "84": "||amazonprimevideo.com.cn^", - "85": "||amazonprimevideos.com^", - "86": "||amazonsdi.com^", - "87": "||amazonses.com^", - "88": "||amazonstudiosguilds.com^", - "89": "||amazontrust.com^", - "90": "||amazonvideo.cc^", - "91": "||amazonvideo.com^", - "92": "||amazonvideodirect.com^", - "93": "||amazonwebservices.com.cn^", - "94": "||amazonworkdocs.cn^", - "95": "||amazonworkdocs.com.cn^", - "96": "||amazonworkdocs.com^", - "97": "||amplifyapp.com^", - "98": "||amplifyframework.com^", - "99": "||amzn.asia^", - "100": "||amzn.com^", - "101": "||amzn.to^", - "102": "||amznl.com^", - "103": "||asfiovnxocqpcry.com.cn^", - "104": "||assoc-amazon.cn^", - "105": "||associates-amazon.com^", - "106": "||audible.com^", - "107": "||aws-border.cn^", - "108": "||aws-icp-domain-manager.cn^", - "109": "||aws-iot-hackathon.com^", - "110": "||aws^", - "111": "||awsapps.cn^", - "112": "||awsapps.com.cn^", - "113": "||awsautopilot.com^", - "114": "||awsautoscaling.com^", - "115": "||awsbraket.com^", - "116": "||awscommandlineinterface.com^", - "117": "||awsdns-*.co.uk^", - "118": "||awsdns-*.com^", - "119": "||awsdns-*.net^", - "120": "||awsdns-*.org^", - "121": "||awsdns-cn-*.biz^", - "122": "||awsdns-cn-*.cn^", - "123": "||awsdns-cn-*.top^", - "124": "||awsedstart.com^", - "125": "||awseducate.com^", - "126": "||awseducate.net^", - "127": "||awseducate.org^", - "128": "||awsglobalaccelerator.com^", - "129": "||awsloft-johannesburg.com^", - "130": "||awsloft-stockholm.com^", - "131": "||awssecworkshops.com^", - "132": "||awsstatic.cn^", - "133": "||awsstatic.com^", - "134": "||awsthinkbox.com^", - "135": "||awstrack.me^", - "136": "||awstrust.com^", - "137": "||boxofficemojo.com^", - "138": "||cdkworkshop.com^", - "139": "||cloudfront-cn.net^", - "140": "||cloudfront-test.cn^", - "141": "||cloudfront.cn^", - "142": "||cloudfront.net^", - "143": "||containersonaws.com^", - "144": "||createspace.com^", - "145": "||elasticbeanstalk.com^", - "146": "||gameon-masters.com^", - "147": "||gdansk-amazon.com^", - "148": "||images-amazon.com^", - "149": "||imdb.com^", - "150": "||imdb.to^", - "151": "||imdb^", - "152": "||kindle.cn^", - "153": "||kindle.co.jp^", - "154": "||kindle.co.uk^", - "155": "||kindle.com^", - "156": "||kindle.de^", - "157": "||kindle.es^", - "158": "||kindle.fr^", - "159": "||kindle.in^", - "160": "||kindle.it^", - "161": "||kindle.jp^", - "162": "||kindle^", - "163": "||kindleoasis.cn^", - "164": "||kindleoasis.com.cn^", - "165": "||kindleoasis.com^", - "166": "||kindleoasis.info^", - "167": "||kindleoasis.jp^", - "168": "||kindleoasis.org^", - "169": "||kindleoasis.us^", - "170": "||kindleoasisnews.com^", - "171": "||kindleproject.com^", - "172": "||media-amazon.com^", - "173": "||media-imdb.com^", - "174": "||nwcdcloud.cn^", - "175": "||nwcdcloud.com.cn^", - "176": "||nwcddns.cn^", - "177": "||nwcdinfosec.cn^", - "178": "||prime-video.com^", - "179": "||primeday.cn^", - "180": "||primeday.com.cn^", - "181": "||primeday.info^", - "182": "||primevideo.cc^", - "183": "||primevideo.com^", - "184": "||primevideo.info^", - "185": "||primevideo.org^", - "186": "||primevideo.tv^", - "187": "||route53.cn^", - "188": "||sagemaker.com.cn^", - "189": "||serving-sys.com^", - "190": "||siege-amazon.com^", - "191": "||ss2.us^", - "192": "||ssl-images-amazon.com^", - "193": "||thinkboxsoftware.com^", - "194": "||ueberamazon.de^", - "195": "||xn--cckwcxetd^", - "196": "||xn--jlq480n2rg^", - "197": "||yamaxun.cn^", - "198": "||yamaxun.com^", - "199": "||yamaxun^", - "200": "||z.cn^", - "201": "||zappos^" - } - }, - "Amazon Streaming": { - "Name": "Amazon Streaming", - "Icon": ""), - "Rules": { - "1": "||aiv-delivery.net^", - "2": "||amazonmusic.com^", - "||amazonprimevideo.cn^", - "||amazonprimevideo.com.cn^", - "||amazonprimevideos.com^", - "||amazonvideo.cc^", - "||amazonvideo.com^", - "||amazonvideodirect.com^", - "||atv-ext-eu.amazon.com^", - "||atv-ext-fe.amazon.com^", - "||atv-ext.amazon.com^", - "||atv-ps-eu.amazon.co.uk^", - "||atv-ps-eu.amazon.com^", - "||atv-ps-fe.amazon.co.jp^", - "||atv-ps-fe.amazon.com^", - "||atv-ps.amazon.com^", - "||av-eu.amazon.com^", - "||av-na.amazon.com^", - "||music.a2z.com^", - "||music.amazon.co.uk^", - "||music.amazon.com^", - "||music.amazon.in^", - "||prime-video.com^", - "||primevideo.cc^", - "||primevideo.com^", - "||primevideo.info^", - "||primevideo.org^", - "||primevideo.tv^", - "||video.a2z.com^" - } - }, - "Amino": { - "Name": "Amino", - "Icon": ""), - "Rules": { - "1": "||aminoapps.com^", - } - }, - "Apple Streaming": { - "Name": "Apple Streaming", - "Icon": ""), - "Rules": { - "||applemusic.apple^", - "||hls-svod-aoc-ve.itunes.g.aaplimg.com^", - "||itun.es^", - "||itunes.apple.com^", - "||itunes.ca^", - "||itunes.co.th^", - "||itunes.co^", - "||itunes.com^", - "||itunes.es^", - "||itunes.g.aaplimg.com^", - "||itunes.hk^", - "||itunes.mx^", - "||itunes.org^", - "||itunes.us^", - "||music.apple.com^", - "||tv.apple.com^", - "||tv.g.apple.com^", - "||tv.v.aaplimg.com^", - }, - "Battle.net": { - "Name": "Battle.net", - "Icon": ""), - "Rules": { - "||battle.net^", - "||battlenet.com.cn^", - "||bnet.163.com^", - "||bnet.cn^", - }, - "Betano": { - "Name": "Betano", - "Icon": ""), - "Rules": { - "||betano.bg^", - "||betano.ca^", - "||betano.com^", - "||betano.cz^", - "||betano.de^", - "||betano.ng^", - "||betano.pt^", - }, - "Betfair": { - "Name": "Betfair", - "Icon": ""), - "Rules": { - "||betfair.com.au^", - "||betfair.com^", - "||betfair.es^", - "||betfair.it^", - "||betfair.ro^", - "||betfair.se^", - }, - "Betway": { - "Name": "Betway", - "Icon": ""), - "Rules": { - "||betway.be^", - "||betway.bet.ar^", - "||betway.co.za^", - "||betway.com.gh^", - "||betway.com.ng^", - "||betway.com^", - "||betway.de^", - "||betway.es^", - "||betway.fr^", - "||betway.it^", - "||betway.mx^", - "||betway.pl^", - "||betway.se^", - "||betwaygroup.com^", - "||betwaysatta.com^", - "||vietnambetway88.com^", - }, - "Bigo Live": { - "Name": "Bigo Live", - "Icon": ""), - "Rules": { - "||bigo.sg^", - "||bigo.tv^", - "||bigolive.tv^", - "||bigovideo.tv^", - }, - "Bilibili": { - "Name": "Bilibili", - "Icon": ""), - "Rules": { - "|upos-hz-mirrorakam.akamaized.net^", - "||acg.tv^", - "||acgvideo.com^", - "||animetamashi.cn^", - "||animetamashi.com^", - "||anitama.cn^", - "||anitama.net^", - "||b23.tv^", - "||bigfun.cn^", - "||bili22.cn^", - "||bili2233.cn^", - "||bili23.cn^", - "||bili33.cn^", - "||biliapi.com^", - "||biliapi.net^", - "||bilibili.cc^", - "||bilibili.cn^", - "||bilibili.com^", - "||bilibili.net^", - "||bilibili.tv^", - "||bilibiligame.cn^", - "||bilibiligame.co^", - "||bilibiligame.net^", - "||bilibilipay.cn^", - "||bilibilipay.com^", - "||bilicdn1.com^", - "||bilicdn2.com^", - "||bilicdn3.com^", - "||bilicdn4.com^", - "||bilicdn5.com^", - "||biligame.co^", - "||biligame.com^", - "||biligame.net^", - "||biligo.com^", - "||biliimg.com^", - "||biliintl.com^", - "||bilivideo.cn^", - "||bilivideo.com^", - "||bilivideo.net^", - "||dreamcast.hk^", - "||hdslb.com^", - "||hdslb.org^", - "||im9.com^", - "||maoercdn.com^", - "||mincdn.com^", - "||yo9.com^", - }, - "Blaze": { - "Name": "Blaze", - "Icon": ""), - "Rules": { - "||blaze.bet^", - "||blaze.com.br^", - "||blaze.com^", - "||blazecareers.com^", - }, - "Blizzard Entertainment": { - "Name": "Blizzard Entertainment", - "Icon": ""), - "Rules": { - "||battle.net^", - "||battlenet.com.cn^", - "||blizzard.cn^", - "||blizzard.com^", - "||blizzardgames.cn^", - "||blz-contentstack.com^", - "||blzstatic.cn^", - "||bnet.163.com^", - "||bnet.cn^", - }, - "Bluesky": { - "Name": "Bluesky", - "Icon": ""), - "Rules": { - "||bsky.app^", - "||bsky.social^", - }, - }, - "Box": { - "Name": "Box", - "Icon": ""), - "Rules": { - "||box.com^", - "||box.net^", - "||boxcdn.net^", - "||boxcloud.com^", - }, - "Canais Globo": { - "Name": "Canais Globo", - "Icon": ""), - "Rules": { - "||canaisglobo.globo.com^", - "||globosat.globo.com^", - "||gsatmulti.globo.com^", - }, - "ChatGPT": { - "Name": "ChatGPT", - "Icon": ""), - "Rules": { - "||chatgpt.com^", - "||oaistatic.com^", - "||oaiusercontent.com^", - "||openai.com^", - }, - "Claro": { - "Name": "Claro", - "Icon": ""), - "Rules": { - "||claro.com.ar^", - "||claro.com.br^", - "||claro.com.co^", - "||claro.com.do^", - "||claro.com.ec^", - "||claro.com.gt^", - "||claro.com.hn^", - "||claro.com.ni^", - "||claro.com.pa^", - "||claro.com.pe^", - "||claro.com.py^", - "||claro.com.sv^", - "||claro.com.uy^", - "||claro.com^", - "||claro.cr^", - "||claro.net.br^", - "||claro.net.co^", - "||clarochile.cl^", - "||claromusica.com^", - "||claropr.com^", - "||clarovideo.com^", - "||usclaro.com^", - }, - "Claude": { - "Name": "Claude", - "Icon": ""), - "Rules": { - "||anthropic.com^", - "||claude.ai^", - }, - "Cloudflare": { - "Name": "Cloudflare", - "Icon": ""), - "Rules": { - "||argotunnel.com^", - "||cf-ipfs.com^", - "||cloudflare-dns.com^", - "||cloudflare-ipfs.com^", - "||cloudflare-quic.com^", - "||cloudflare.com^", - "||cloudflare.net^", - "||cloudflare.tv^", - "||cloudflareaccess.com^", - "||cloudflareapps.com^", - "||cloudflarebolt.com^", - "||cloudflareclient.com^", - "||cloudflareinsights.com^", - "||cloudflareok.com^", - "||cloudflarepreview.com^", - "||cloudflareresolve.com^", - "||cloudflaressl.com^", - "||cloudflarestatus.com^", - "||cloudflarestorage.com^", - "||cloudflarestream.com^", - "||cloudflaretest.com^", - "||cloudflarewarp.com^", - "||every1dns.net^", - "||one.one.one^", - "||pacloudflare.com^", - "||pages.dev^", - "||trycloudflare.com^", - "||videodelivery.net^", - "||warp.plus^", - "||workers.dev^", - }, - "Clubhouse": { - "Name": "Clubhouse", - "Icon": ""), - "Rules": { - "||clubhouse.com^", - "||clubhouseapi.com^", - }, - "CoolApk": { - "Name": "CoolApk", - "Icon": ""), - "Rules": { - "||coolapk.com^", - "||coolapkmarket.com^", - "||coolapkmarket.net^", - }, - "Crunchyroll": { - "Name": "Crunchyroll", - "Icon": ""), - "Rules": { - "||crunchyroll.com^", - "||gccrunchyroll.com^", - }, - "Dailymotion": { - "Name": "Dailymotion", - "Icon": ""), - "Rules": { - "||dailymotion.com^", - "||dm-event.net^", - "||dmcdn.net^", - }, - "DeepSeek": { - "Name": "DeepSeek", - "Icon": ""), - "Rules": { - "||deepseek.com^", - }, - "Deezer": { - "Name": "Deezer", - "Icon": ""), - "Rules": { - "||deezer.com^", - "||dzcdn.net^", - }, - "DirecTV Go": { - "Name": "DirecTV Go", - "Icon": ""), - "Rules": { - "||directvgo.com^", - }, - "Discord": { - "Name": "Discord", - "Icon": ""), - "Rules": { - "|hammerandchisel.ssl.zendesk.com^", - "||airhorn.solutions^", - "||airhornbot.com^", - "||bigbeans.solutions^", - "||dis.gd^", - "||discord-activities.com^", - "||discord.co^", - "||discord.com^", - "||discord.design^", - "||discord.dev^", - "||discord.gg^", - "||discord.gift^", - "||discord.gifts^", - "||discord.media^", - "||discord.new^", - "||discord.store^", - "||discord.tools^", - "||discordactivities.com^", - "||discordapp.com^", - "||discordapp.io^", - "||discordapp.net^", - "||discordcdn.com^", - "||discordmerch.com^", - "||discordpartygames.com^", - "||discordsays.com^", - "||discordstatus.com^", - "||watchanimeattheoffice.com^", - }, - "Discovery+": { - "Name": "Discovery+", - "Icon": ""), - "Rules": { - "||disco-api.com^", - "||discoveryplus.com^", - }, - "Disney+": { - "Name": "Disney+", - "Icon": ""), - "Rules": { - "||disney-plus.net^", - "||disney.playback.edge.bamgrid.com^", - "||disneynow.com^", - "||disneyplus.com^", - "||hotstar.com^", - "||media.dssott.com^", - "||star.playback.edge.bamgrid.com^", - "||starplus.com^", - }, - "Douban": { - "Name": "Douban", - "Icon": ""), - "Rules": { - "||douban.com^", - "||douban.fm^", - "||doubanio.com^", - }, - "Dropbox": { - "Name": "Dropbox", - "Icon": ""), - "Rules": { - "||addtodropbox.com^", - "||app.hellosign.com^", - "||dash.ai^", - "||db.tt^", - "||docsend.com^", - "||dropbox-dns.com^", - "||dropbox.com^", - "||dropbox.tech^", - "||dropbox.zendesk.com^", - "||dropboxapi.com^", - "||dropboxbusiness.com^", - "||dropboxcaptcha.com^", - "||dropboxforum.com^", - "||dropboxforums.com^", - "||dropboxinsiders.com^", - "||dropboxlegal.com^", - "||dropboxmail.com^", - "||dropboxpartners.com^", - "||dropboxstatic.com^", - "||dropboxteam.com^", - "||dropboxusercontent.com^", - "||getdropbox.com^", - }, - "eBay": { - "Name": "eBay", - "Icon": ""), - "Rules": { - "|ebay-*.s3-us-west-1.amazonaws.com^", - "||21centuryaccess.com^", - "||4ebaytraders.com^", - "||adcommerce.cn^", - "||adcommerce.tv^", - "||appforebay.cn^", - "||appsonebay.net^", - "||asebay.com^", - "||baazee.com^", - "||bidbay.com^", - "||bidorbuyindia.com^", - "||billpoint.com^", - "||billpoint.info^", - "||billpoint.tv^", - "||billpoint.us^", - "||billpointnewzealand.com^", - "||blogebay.com^", - "||bookclubcorner.com^", - "||builtfromebay.com^", - "||buyitnow.com^", - "||buyitnow.net^", - "||buyitnow.org^", - "||buyitnow.tv^", - "||buyitnowshop.net^", - "||cafr.ca^", - "||carebay.com^", - "||cargigileads.com^", - "||cebay.com^", - "||collective99.com^", - "||commerceos.com^", - "||connectcommerce.cn^", - "||connectcommerce.com.cn^", - "||connectcommerce.hk^", - "||connectcommerce.info^", - "||connectcommerce.tv^", - "||connectedcommerce.cn^", - "||connectedcommerce.com^", - "||connectedcommerce.tv^", - "||crececonebay.com^", - "||creditcardsbay.com^", - "||cyber-bay.cn^", - "||cyber-bay.com.cn^", - "||cyber-bay.info^", - "||cyber-bay.org^", - "||dba.dk^", - "||dealbay.com^", - "||dealtime.com^", - "||didce.com^", - "||douya.org^", - "||dreamtoplay.com^", - "||e-bay.com^", - "||e-bay.it^", - "||e-bay.net^", - "||eachpay.com^", - "||eachpay.net^", - "||ebahy.com^", - "||ebay-authenticate.net^", - "||ebay-confirm.com^", - "||ebay-course.com^", - "||ebay-cz.com^", - "||ebay-delivery.com^", - "||ebay-discoveries.com^", - "||ebay-fashion.com^", - "||ebay-inc.com^", - "||ebay-inc.net^", - "||ebay-inc.org^", - "||ebay-online.com^", - "||ebay-sales.com^", - "||ebay-stories.com^", - "||ebay-us.com^", - "||ebay-vacation.com^", - "||ebay.at^", - "||ebay.be^", - "||ebay.ca^", - "||ebay.ch^", - "||ebay.cn^", - "||ebay.co.nz^", - "||ebay.co.uk^", - "||ebay.co.ve^", - "||ebay.co.za^", - "||ebay.com.ar^", - "||ebay.com.au^", - "||ebay.com.cn^", - "||ebay.com.ec^", - "||ebay.com.hk^", - "||ebay.com.mt^", - "||ebay.com.my^", - "||ebay.com.ph^", - "||ebay.com.sg^", - "||ebay.com^", - "||ebay.de^", - "||ebay.es^", - "||ebay.fr^", - "||ebay.ie^", - "||ebay.in^", - "||ebay.it^", - "||ebay.jp^", - "||ebay.lt^", - "||ebay.mn^", - "||ebay.net.cn^", - "||ebay.nl^", - "||ebay.org.cn^", - "||ebay.org^", - "||ebay.ph^", - "||ebay.pk^", - "||ebay.pl^", - "||ebay.sg^", - "||ebay.us^", - "||ebay.vn^", - "||ebay.yn.cn^", - "||ebay.zj.cn^", - "||ebay25.com^", - "||ebay68.com^", - "||ebaya.com^", - "||ebayads.com^", - "||ebayads.net^", - "||ebayadvertising.cn^", - "||ebayadvertising.com^", - "||ebayanunsios.net^", - "||ebayauction.com^", - "||ebayaustralia.com^", - "||ebayauthenticate.com.cn^", - "||ebaybags.com^", - "||ebaybank.com^", - "||ebaybenefits.com^", - "||ebayboutique.com^", - "||ebayca.com^", - "||ebayca.org^", - "||ebaycafe.com^", - "||ebaycar.com^", - "||ebaycareers.com^", - "||ebaycbt.co.kr^", - "||ebaycdn.net^", - "||ebaychina.net^", - "||ebayclassifieds.cn^", - "||ebayclassifieds.com.cn^", - "||ebayclassifieds.com^", - "||ebayclassifieds.info^", - "||ebayclassifieds.org^", - "||ebayclassifieds.tv^", - "||ebayclassifiedsgroup.com^", - "||ebayclassifiedsgroup.com^", - "||ebayclassifiedsgroup.info^", - "||ebayclassifiedsgroup.org^", - "||ebayclassifies.com^", - "||ebayclub.com^", - "||ebaycoins.com^", - "||ebaycom.com^", - "||ebaycommercenetwork.com^", - "||ebaycourse.com^", - "||ebayd.com^", - "||ebayde.com^", - "||ebaydesc.cn^", - "||ebaydesc.com.cn^", - "||ebaydlassifieds.com^", - "||ebaydns.cn^", - "||ebaydts.com^", - "||ebayedu.com^", - "||ebayeletro.com^", - "||ebayenterprise.cn^", - "||ebayenterprise.com.cn^", - "||ebayenterprise.com^", - "||ebayenterprise.info^", - "||ebayenterprise.net^", - "||ebayenterprise.tv^", - "||ebayetc.com^", - "||ebayexpress.sg^", - "||ebayfashion.com^", - "||ebayfashion.net^", - "||ebayforcharity.org^", - "||ebayforeclosure.org^", - "||ebayfrance.com^", - "||ebayglobalshipping.com^", - "||ebaygroup.com^", - "||ebayhabit.com^", - "||ebayheels.com^", - "||ebayhots.com^", - "||ebayimg.com^", - "||ebayinc.com^", - "||ebayinc.net^", - "||ebayinc.org^", - "||ebayincconnectedcommerce.net^", - "||ebayinkblog.com^", - "||ebayinternetsalestax.com^", - "||ebayit.com^", - "||ebayjewelry.com^", - "||ebayjob.com^", - "||ebayla.org^", - "||ebaylisting.com^", - "||ebaylocal.net^", - "||ebaylocationsdevacances.com^", - "||ebaymag.com^", - "||ebaymainstreet.com^", - "||ebaymall.com^", - "||ebaymarketplace.net^", - "||ebaymotors.ca^", - "||ebaymotors.cn^", - "||ebaymotors.com.cn^", - "||ebaymotors.com^", - "||ebaymotors.org^", - "||ebaymotorsblog.com^", - "||ebaynow.com^", - "||ebaynyc.com^", - "||ebayon.com^", - "||ebayon.net^", - "||ebayoncampus.com^", - "||ebayopen.com^", - "||ebayopensource.com^", - "||ebayopensource.net^", - "||ebaypakistan.net^", - "||ebaypark.com^", - "||ebayparts.com^", - "||ebaypedia.cn^", - "||ebaypedia.com.cn^", - "||ebayprivacycenter.com^", - "||ebayqq.com^", - "||ebayradio.com^", - "||ebayrtm.com^", - "||ebayseller.com^", - "||ebayshoesstore.com^", - "||ebayshop.com^", - "||ebayshop111.com^", - "||ebayshopping.cn^", - "||ebayshopping.com.cn^", - "||ebayshopping.org^", - "||ebaysocial.com^", - "||ebaysocial.ru^", - "||ebaysoho.com^", - "||ebaysohos.com^", - "||ebaystatic.cn^", - "||ebaystatic.com^", - "||ebaystore.com^", - "||ebaystore77.com^", - "||ebaystores.cn^", - "||ebaystyle.com^", - "||ebaysweden.com^", - "||ebayt.com^", - "||ebaytechblog.com^", - "||ebaytopratedseller.net^", - "||ebaytrading.com^", - "||ebaytradingassistant.com^", - "||ebaytv.org^", - "||ebayuae.net^", - "||ebayvakantiehuizen.com^", - "||ebayvalet.com^", - "||ebayvietnam.net^", - "||ebayworlds.com^", - "||ebayy.com^", - "||edisebay.com^", - "||eebay.com^", - "||epinions.com^", - "||eu-consumer-empowerment.com^", - "||expertmaker.com^", - "||fairmarket.com^", - "||fragrancebay.com^", - "||francemail.com^", - "||half.com.cn^", - "||half.com^", - "||half.tv^", - "||halfcanada.com^", - "||halfjapan.com^", - "||handbagsoutletebay.com^", - "||iebay.com^", - "||irribay.com^", - "||itsbetterwhenyouwinit.com^", - "||liketwice.com^", - "||liveauction.com^", - "||milofetch.com^", - "||musicbay.net^", - "||myconstructionworld.net^", - "||myebay.com^", - "||nebay.net^", - "||paisapay.cc^", - "||paisapay.info^", - "||paisapay.tv^", - "||premobay.com^", - "||privatemarketplaces.net^", - "||privatemarketplaces.us^", - "||prostores.cn^", - "||prostores.com.cn^", - "||prostores.com^", - "||rethink.net^", - "||shopibay.net^", - "||shoping.com^", - "||sourcingforebay.com.cn^", - "||sourcingforebay.net^", - "||sourcingforebay.tv^", - "||speybay.com^", - "||storesense.com^", - "||svpply.com^", - "||telebay.com^", - "||telesell.com^", - "||texttobuy.org^", - "||theebayshop.com^", - "||theopportunityproject.org^", - "||towerauction.com^", - "||vendu.com^", - "||watch-ebay.org^", - "||weareebay.com^", - "||wwwdecide.com^", - "||wwwebay.com^", - "||wwwebay.net^", - "||wwwwebay.com^", - "||xindelu.com^", - "||xn--3et96bj49ahpq.com^", - "||xn--4vq475g.com^", - "||xn--4vq477m.com^", - "||xn--7hv594h.com^", - "||xn--7hvy28f.cn^", - "||xn--hb4aw0g.com^", - "||xn--q41am8x.com^", - "||xn--qoq462m.com^", - "||xn--tkry91n.com^", - "||xn--ubt498knmf.com^", - "||xn--xsq421m.com^", - "||xn--xsq605n.com^", - "||xn--xsq959n.com^", - "||xn--yf1at58a.com^", - "||xxbay.com^", - "||yibei.org^", - }, - "Electronic Arts": { - "Name": "Electronic Arts", - "Icon": ""), - "Rules": { - "||ea.com^", - "||eamobile.com^", - "||easports.com^", - "||nearpolar.com^", - "||swtor.com^", - "||tnt-ea.com^", - }, - "Epic Games": { - "Name": "Epic Games", - "Icon": ""), - "Rules": { - "|cdn*-epicgames-*.file.myqcloud.com^", - "|epicgames-download*-*.file.myqcloud.com^", - "|epicgames-download*.akamaized.net^", - "||eac-cdn.com^", - "||easy.ac^", - "||easyanticheat.net^", - "||epicgames.com^", - }, - "ESPN": { - "Name": "ESPN", - "Icon": ""), - "Rules": { - "||es.pn^", - "||espn.cl^", - "||espn.co.uk^", - "||espn.com.ar^", - "||espn.com.au^", - "||espn.com.co^", - "||espn.com.ec^", - "||espn.com.mx^", - "||espn.com.pa^", - "||espn.com.pe^", - "||espn.com.uy^", - "||espn.com.ve^", - "||espn.com^", - "||espn.in", - "||espn.net^", - "||espncdn.com^", - "||espncricinfo.com^", - }, - "Facebook": { - "Name": "Facebook", - "Icon": ""), - "Rules": { - "|fbcdn-a.akamaihd.net^", - "||aboutfacebook.com^", - "||accessfacebookfromschool.com^", - "||accountkit.com^", - "||accountkit.com^", - "||acebooik.com^", - "||acebook.com^", - "||advancediddetection.com^", - "||askfacebook.net^", - "||askfacebook.org^", - "||atdmt2.com^", - "||atlasdmt.com^", - "||atlasonepoint.com^", - "||atscaleconference.com^", - "||botorch.org^", - "||buck.build^", - "||buckbuild.com^", - "||buyingfacebooklikes.com^", - "||careersatfb.com^", - "||celebgramme.com^", - "||china-facebook.com^", - "||click-url.com^", - "||como-hackearfacebook.com^", - "||componentkit.org^", - "||crowdtangle.com^", - "||dacebook.com^", - "||dlfacebook.com^", - "||dotfacebook.com^", - "||dotfacebook.net^", - "||draftjs.org^", - "||expresswifi.com^", - "||f8.com^", - "||faacebok.com^", - "||faacebook.com^", - "||faasbook.com^", - "||facbebook.com^", - "||facbeok.com^", - "||facboo.com^", - "||facbook.com^", - "||facbool.com^", - "||facboox.com^", - "||faccebook.com^", - "||faccebookk.com^", - "||facdbook.com^", - "||facdebook.com^", - "||face-book.com^", - "||faceabook.com^", - "||facebboc.com^", - "||facebbook.com^", - "||facebboook.com^", - "||facebcook.com^", - "||facebdok.com^", - "||facebgook.com^", - "||facebhook.com^", - "||facebkkk.com^", - "||facebo-ok.com^", - "||faceboak.com^", - "||facebock.com^", - "||facebocke.com^", - "||facebof.com^", - "||faceboik.com^", - "||facebok.com^", - "||facebokbook.com^", - "||facebokc.com^", - "||facebokk.com^", - "||facebokok.com^", - "||faceboks.com^", - "||facebol.com^", - "||facebolk.com^", - "||facebomok.com^", - "||faceboo.com^", - "||facebooa.com^", - "||faceboob.com^", - "||faceboobok.com^", - "||facebooc.com^", - "||faceboock.com^", - "||facebood.com^", - "||facebooe.com^", - "||faceboof.com^", - "||facebooi.com^", - "||facebooik.com^", - "||facebooik.org^", - "||facebooj.com^", - "||facebook-corp.com^", - "||facebook-covid-19.com^", - "||facebook-ebook.com^", - "||facebook-forum.com^", - "||facebook-hardware.com^", - "||facebook-inc.com^", - "||facebook-login.com^", - "||facebook-newsroom.com^", - "||facebook-newsroom.org^", - "||facebook-pmdcenter.com^", - "||facebook-pmdcenter.net^", - "||facebook-pmdcenter.org^", - "||facebook-privacy.com^", - "||facebook-program.com^", - "||facebook-studio.com^", - "||facebook-support.org^", - "||facebook-texas-holdem.com^", - "||facebook-texas-holdem.net^", - "||facebook.br^", - "||facebook.ca^", - "||facebook.cc^", - "||facebook.com^", - "||facebook.design^", - "||facebook.hu^", - "||facebook.in^", - "||facebook.net^", - "||facebook.nl^", - "||facebook.org^", - "||facebook.se^", - "||facebook.shop^", - "||facebook.tv^", - "||facebook.us^", - "||facebook.wang^", - "||facebook123.org^", - "||facebook30.com^", - "||facebook30.net^", - "||facebook30.org^", - "||facebook4business.com^", - "||facebookads.com^", - "||facebookadvertisingsecrets.com^", - "||facebookappcenter.info^", - "||facebookappcenter.net^", - "||facebookappcenter.org^", - "||facebookatschool.com^", - "||facebookawards.com^", - "||facebookblueprint.net^", - "||facebookbrand.com^", - "||facebookbrand.net^", - "||facebookcanadianelectionintegrityinitiative.com^", - "||facebookcareer.com^", - "||facebookcheats.com^", - "||facebookck.com^", - "||facebookclub.com^", - "||facebookcom.com^", - "||facebookconnect.com^", - "||facebookconsultant.org^", - "||facebookcoronavirus.com^", - "||facebookcovers.org^", - "||facebookcredits.info^", - "||facebookdating.net^", - "||facebookdevelopergarage.com^", - "||facebookdusexe.org^", - "||facebookemail.com^", - "||facebookenespanol.com^", - "||facebookexchange.com^", - "||facebookexchange.net^", - "||facebookfacebook.com^", - "||facebookflow.com^", - "||facebookgames.com^", - "||facebookgraphsearch.com^", - "||facebookgraphsearch.info^", - "||facebookgroups.com^", - "||facebookhome.cc^", - "||facebookhome.com^", - "||facebookhome.info^", - "||facebookhub.com^", - "||facebooki.com^", - "||facebookinc.com^", - "||facebookland.com^", - "||facebooklikeexchange.com^", - "||facebooklive.com^", - "||facebooklivestaging.net^", - "||facebooklivestaging.org^", - "||facebooklogin.com^", - "||facebooklogin.info^", - "||facebookloginhelp.net^", - "||facebooklogs.com^", - "||facebookmail.com^", - "||facebookmail.tv^", - "||facebookmanager.info^", - "||facebookmarketing.info^", - "||facebookmarketingpartner.com^", - "||facebookmarketingpartners.com^", - "||facebookmobile.com^", - "||facebookmsn.com^", - "||facebooknews.com^", - "||facebooknfl.com^", - "||facebooknude.com^", - "||facebookofsex.com^", - "||facebookook.com^", - "||facebookpaper.com^", - "||facebookpay.com^", - "||facebookphonenumber.net^", - "||facebookphoto.com^", - "||facebookphotos.com^", - "||facebookpmdcenter.com^", - "||facebookpoke.net^", - "||facebookpoke.org^", - "||facebookpoker.info^", - "||facebookpokerchips.info^", - "||facebookporn.net^", - "||facebookporn.org^", - "||facebookporno.net^", - "||facebookportal.com^", - "||facebooks.com^", - "||facebooksafety.com^", - "||facebooksecurity.net^", - "||facebookshop.com^", - "||facebooksignup.net^", - "||facebooksite.net^", - "||facebookstories.com^", - "||facebookstudios.net^", - "||facebookstudios.org^", - "||facebooksupplier.com^", - "||facebooksuppliers.com^", - "||facebookswagemea.com^", - "||facebookswagstore.com^", - "||facebooksz.com^", - "||facebookthreads.net^", - "||facebooktv.net^", - "||facebooktv.org^", - "||facebookvacation.com^", - "||facebookw.com^", - "||facebookwork.com^", - "||facebookworld.com^", - "||facebool.com^", - "||facebool.info^", - "||facebooll.com^", - "||faceboom.com^", - "||faceboon.com^", - "||faceboonk.com^", - "||faceboooik.com^", - "||faceboook.com^", - "||faceboop.com^", - "||faceboot.com^", - "||faceboox.com^", - "||facebopk.com^", - "||facebpook.com^", - "||facebuk.com^", - "||facebuok.com^", - "||facebvook.com^", - "||facebyook.com^", - "||facebzook.com^", - "||facecbgook.com^", - "||facecbook.com^", - "||facecbook.org^", - "||facecook.com^", - "||facecook.org^", - "||facedbook.com^", - "||faceebok.com^", - "||faceebook.com^", - "||faceebot.com^", - "||facegbok.com^", - "||facegbook.com^", - "||faceobk.com^", - "||faceobok.com^", - "||faceobook.com^", - "||faceook.com^", - "||facerbooik.com^", - "||facerbook.com^", - "||facesbooc.com^", - "||facesounds.com^", - "||facetook.com^", - "||facevbook.com^", - "||facewbook.co^", - "||facewook.com^", - "||facfacebook.com^", - "||facfebook.com^", - "||faciometrics.com^", - "||fackebook.com^", - "||facnbook.com^", - "||facrbook.com^", - "||facvebook.com^", - "||facwebook.com^", - "||facxebook.com^", - "||fadebook.com^", - "||faebok.com^", - "||faebook.com^", - "||faebookc.com^", - "||faeboook.com^", - "||faecebok.com^", - "||faesebook.com^", - "||fafacebook.com^", - "||faicbooc.com^", - "||fasebokk.com^", - "||fasebook.com^", - "||faseboox.com^", - "||fasttext.cc^", - "||favebook.com^", - "||faycbok.com^", - "||fb.careers^", - "||fb.com^", - "||fb.gg^", - "||fb.me^", - "||fb.watch^", - "||fbacebook.com^", - "||fbbmarket.com^", - "||fbboostyourbusiness.com^", - "||fbcdn.com^", - "||fbcdn.net^", - "||fbf8.com^", - "||fbfeedback.com^", - "||fbhome.com^", - "||fbidb.io^", - "||fbinc.com^", - "||fbinfer.com^", - "||fbinnovation.com^", - "||fblitho.com^", - "||fbmarketing.com^", - "||fbmessenger.com^", - "||fbredex.com^", - "||fbreg.com^", - "||fbrell.com^", - "||fbrpms.com^", - "||fbsbx.com^", - "||fbsbx.net^", - "||fbsupport-covid.net^", - "||fbthirdpartypixel.com^", - "||fbthirdpartypixel.net^", - "||fbthirdpartypixel.org^", - "||fburl.com^", - "||fbwat.ch^", - "||fbworkmail.com^", - "||fcacebook.com^", - "||fcaebook.com^", - "||fcebook.com^", - "||fcebookk.com^", - "||fcfacebook.com^", - "||fdacebook.info^", - "||feacboo.com^", - "||feacbook.com^", - "||feacbooke.com^", - "||feacebook.com^", - "||fecbbok.com^", - "||fecbooc.com^", - "||fecbook.com^", - "||feceboock.com^", - "||fecebook.net^", - "||feceboox.com^", - "||fececbook.com^", - "||feook.com^", - "||ferabook.com^", - "||fescebook.com^", - "||fesebook.com^", - "||ffacebook.com^", - "||fgacebook.com^", - "||ficeboock.com^", - "||flow.dev^", - "||flow.org^", - "||flowtype.org^", - "||fmcebook.com^", - "||fnacebook.com^", - "||fosebook.com^", - "||fpacebook.com^", - "||fqcebook.com^", - "||fracebook.com^", - "||freeb.com^", - "||freebasics.com^", - "||freebasics.net^", - "||freebs.com^", - "||freefacebook.com^", - "||freefacebook.net^", - "||freefacebookads.net^", - "||freefblikes.com^", - "||freindfeed.com^", - "||frescolib.org^", - "||friendbook.info^", - "||friendfed.com^", - "||friendfeed-api.com^", - "||friendfeed-media.com^", - "||friendfeed.com^", - "||friendfeedmedia.com^", - "||fsacebok.com^", - "||fscebook.com^", - "||fundraisingwithfacebook.com^", - "||funnyfacebook.org^", - "||futureofbusinesssurvey.org^", - "||gacebook.com^", - "||gameroom.com^", - "||gfacecbook.com^", - "||groups.com^", - "||hackerfacebook.com^", - "||hackfacebook.com^", - "||hackfacebookid.com^", - "||hacklang.org^", - "||hhvm.com^", - "||hifacebook.info^", - "||howtohackfacebook-account.com^", - "||hsfacebook.com^", - "||httpfacebook.com^", - "||httpsfacebook.com^", - "||httpwwwfacebook.com^", - "||i.org^", - "||internet.org^", - "||klik.me^", - "||liverail.com^", - "||liverail.tv^", - "||login-account.net^", - "||m.me^", - "||makeitopen.com^", - "||markzuckerberg.com^", - "||mcrouter.net^", - "||mcrouter.org^", - "||messenger.com^", - "||messengerdevelopers.com^", - "||midentsolutions.com^", - "||mobilefacebook.com^", - "||moneywithfacebook.com^", - "||myfbfans.com^", - "||nbabot.net^", - "||newsfeed.com^", - "||nextstop.com^", - "||ogp.me^", - "||online-deals.net^", - "||opencreate.org^", - "||opengraphprotocol.com^", - "||opengraphprotocol.org^", - "||parse.com^", - "||pyrobot.org^", - "||reachtheworldonfacebook.com^", - "||react.com^", - "||reactjs.com^", - "||reactjs.org^", - "||recoiljs.org^", - "||redkix.com^", - "||rocksdb.com^", - "||rocksdb.net^", - "||rocksdb.org^", - "||rocksdb.org^", - "||shopfacebook.com^", - "||sportsfacebook.com^", - "||sportstream.com^", - "||supportfacebook.com^", - "||terragraph.com^", - "||thefacebook.com^", - "||thefacebook.net^", - "||thefind.com^", - "||toplayerserver.com^", - "||viewpointsfromfacebook.com^", - "||whyfacebook.com^", - "||workplace.com^", - "||workplaceusecases.com^", - "||worldhack.com^", - "||www-facebook.com^", - "||wwwfacebok.com^", - "||wwwfacebook.com^", - "||wwwmfacebook.com^", - "||yogalayout.com^", - "||zuckerberg.com^", - "||zuckerberg.net^", - }, - "FIFA": { - "Name": "FIFA", - "Icon": ""), - "Rules": { - "||fifa.com^", - "||fifaplus.com^", - }, - "Flickr": { - "Name": "Flickr", - "Icon": ""), - "Rules": { - "||flic.kr^", - "||flickr.com^", - "||flickr.net^", - "||flickrprints.com^", - "||flickrpro.com^", - "||staticflickr.com^", - }, - "Globoplay": { - "Name": "Globoplay", - "Icon": ""), - "Rules": { - "||cloud-jarvis.globo.com^", - "||globoplay.com.br^", - "||globoplay.com^", - "||globoplay.globo.com^", - }, - "GOG": { - "Name": "GOG", - "Icon": ""), - "Rules": { - "||gog-cdn-lumen.secure2.footprint.net^", - "||gog-statics.com^", - "||gog.com^", - "||gogalaxy.com^", - }, - "HBO Max": { - "Name": "HBO Max", - "Icon": ""), - "Rules": { - "||hbo.com^", - "||hbogo.co.th^", - "||hbogo.com^", - "||hbogo.eu^", - "||hbogoasia.com^", - "||hbogoasia.id^", - "||hbogoasia.ph^", - "||hbomax-images.warnermediacdn.com^", - "||hbomax.com^", - "||hbomaxcdn.com^", - "||hbonow.com^", - "||max.com^", - "||maxgo.com^", - }, - "Hulu": { - "Name": "Hulu", - "Icon": ""), - "Rules": { - "||hulu.com^", - }, - "iCloud Private Relay": { - "Name": "iCloud Private Relay", - "Icon": ""), - "Rules": { - "||mask-canary.icloud.com^$dnsrewrite=NXDOMAIN;;", - "||mask-h2.icloud.com^$dnsrewrite=NXDOMAIN;;", - "||mask.icloud.com^$dnsrewrite=NXDOMAIN;;", - }, - "iHeartRadio": { - "Name": "iHeartRadio", - "Icon": ""), - "Rules": { - "||937theriver.com^", - "||iheart.com^", - "||iheart.mx^", - "||iheartmedia.com^", - "||iheartradio.ca^", - "||iheartradio.co.nz^", - "||iheartradio.com^", - "||ihrdev.com^", - "||ihrhls.com^", - "||ihrint.com^", - "||ihrstage.com^", - }, - "Imgur": { - "Name": "Imgur", - "Icon": ""), - "Rules": { - "||imgur.com^", - }, - "Instagram": { - "Name": "Instagram", - "Icon": ""), - "Rules": { - "||achat-followers-instagram.com^", - "||acheter-followers-instagram.com^", - "||acheterdesfollowersinstagram.com^", - "||acheterfollowersinstagram.com^", - "||bookstagram.com^", - "||carstagram.com^", - "||cdninstagram.com^", - "||chickstagram.com^", - "||ig.me^", - "||igcdn.com^", - "||igsonar.com^", - "||igtv.com^", - "||imstagram.com^", - "||imtagram.com^", - "||instaadder.com^", - "||instachecker.com^", - "||instafallow.com^", - "||instafollower.com^", - "||instagainer.com^", - "||instagda.com^", - "||instagify.com^", - "||instagmania.com^", - "||instagor.com^", - "||instagram-brand.com^", - "||instagram-engineering.com^", - "||instagram-help.com^", - "||instagram-press.com^", - "||instagram-press.net^", - "||instagram.com^", - "||instagramci.com^", - "||instagramcn.com^", - "||instagramdi.com^", - "||instagramhashtags.net^", - "||instagramhilecim.com^", - "||instagramhilesi.org^", - "||instagramium.com^", - "||instagramizlenme.com^", - "||instagramkusu.com^", - "||instagramlogin.com^", - "||instagramm.com^", - "||instagramn.com^", - "||instagrampartners.com^", - "||instagramphoto.com^", - "||instagramq.com^", - "||instagramsepeti.com^", - "||instagramtakipcisatinal.net^", - "||instagramtakiphilesi.com^", - "||instagramtips.com^", - "||instagramtr.com^", - "||instagran.com^", - "||instagranm.com^", - "||instagrem.com^", - "||instagrm.com^", - "||instagtram.com^", - "||instagy.com^", - "||instamgram.com^", - "||instangram.com^", - "||instanttelegram.com^", - "||instaplayer.net^", - "||instastyle.tv^", - "||instgram.com^", - "||intagram.com^", - "||intagrm.com^", - "||intgram.com^", - "||kingstagram.com^", - "||lnstagram-help.com^", - "||oninstagram.com^", - "||online-instagram.com^", - "||onlineinstagram.com^", - "||theinstagramhack.com^", - "||web-instagram.net^", - "||wwwinstagram.com^", - }, - "iQIYI": { - "Name": "iQIYI", - "Icon": ""), - "Rules": { - "||iq.com^", - "||iqiyi.com^", - "||iqiyipic.com^", - "||pps.tv^", - "||ppsimg.com^", - "||qiyi.com^", - "||qiyipic.com^", - "||qy.net^", - }, - "KakaoTalk": { - "Name": "KakaoTalk", - "Icon": ""), - "Rules": { - "||kakao.com^", - "||kgslb.com^", - }, - "Kik": { - "Name": "Kik", - "Icon": ""), - "Rules": { - "||kik.com^", - }, - "KOOK": { - "Name": "KOOK", - "Icon": ""), - "Rules": { - "||kaiheila.cn^", - "||kookapp.cn^", - }, - "Lazada": { - "Name": "Lazada", - "Icon": ""), - "Rules": { - "||k1-lazadasg-oversea.gslb.ksyuncdn.com^", - "||lazada.co.id^", - "||lazada.co.th^", - "||lazada.com.my^", - "||lazada.com.ph^", - "||lazada.com^", - "||lazada.sg^", - "||lazada.vn^", - "||slatic.net^", - }, - "League of Legends": { - "Name": "League of Legends", - "Icon": ""), - "Rules": { - "||leagueoflegends.co.kr^", - "||leagueoflegends.com^", - "||lol.riotgames.com^", - "||lolstatic.com^", - "||lolusercontent.com^", - }, - "LINE": { - "Name": "LINE", - "Icon": ""), - "Rules": { - "||gcld-line.com^", - "||lin.ee^", - "||line-apps-beta.com^", - "||line-apps-rc.com^", - "||line-apps.com^", - "||line-cdn.net^", - "||line-scdn.net^", - "||line.biz^", - "||line.me^", - "||line.naver.jp^", - "||linecorp.com^", - "||linefriends.com.tw^", - "||linefriends.com^", - "||linegame.jp^", - "||linemobile.com^", - "||linemyshop.com^", - "||lineshoppingseller.com^", - "||linetv.tw^", - }, - "LinkedIn": { - "Name": "LinkedIn", - "Icon": ""), - "Rules": { - "||bizographics.com^", - "||cs1404.wpc.epsiloncdn.net^", - "||cs767.wpc.epsiloncdn.net^", - "||l-0005.dc-msedge.net^", - "||l-0005.l-dc-msedge.net^", - "||l-0005.l-msedge.net^", - "||l-0015.l-msedge.net^", - "||licdn.cn^", - "||licdn.com^", - "||linkedin.at^", - "||linkedin.be^", - "||linkedin.cn^", - "||linkedin.com^", - "||linkedin.nl^", - "||linkedin.qtlcdn.com^", - "||lnkd.in^", - }, - "Lionsgate+": { - "Name": "Lionsgate+", - "Icon": ""), - "Rules": { - "||lionsgateplus.com^", - "||starz.com^", - }, - "Looke": { - "Name": "Looke", - "Icon": ""), - "Rules": { - "||looke.com.br^", - "||ottvs.com.br^", - }, - "Mail.ru": { - "Name": "Mail.ru", - "Icon": ""), - "Rules": { - "||imgsmail.ru^", - "||mail.ru^", - "||mycdn.me^", - }, - "Mastodon": { - "Name": "Mastodon", - "Icon": ""), - "Rules": { - "||aus.social^", - "||awscommunity.social^", - "||climatejustice.social^", - "||cupoftea.social^", - "||cyberplace.social^", - "||defcon.social^", - "||det.social^", - "||glasgow.social^", - "||h4.io^", - "||hachyderm.io^", - "||hessen.social^", - "||hostux.social^", - "||ieji.de^", - "||indieweb.social^", - "||infosec.exchange^", - "||ioc.exchange^", - "||kolektiva.social^", - "||livellosegreto.it^", - "||lor.sh^", - "||lou.lt^", - "||m.cmx.im^", - "||mas.to^", - "||masto.ai^", - "||masto.es^", - "||masto.nu^", - "||masto.pt^", - "||mastodon.au^", - "||mastodon.bida.im^", - "||mastodon.com.tr^", - "||mastodon.eus^", - "||mastodon.green^", - "||mastodon.ie^", - "||mastodon.iriseden.eu^", - "||mastodon.nl^", - "||mastodon.nu^", - "||mastodon.nz^", - "||mastodon.online^", - "||mastodon.online^", - "||mastodon.scot^", - "||mastodon.sdf.org^", - "||mastodon.social^", - "||mastodon.social^", - "||mastodon.top^", - "||mastodon.uno^", - "||mastodon.world^", - "||mastodon.zaclys.com^", - "||mastodonapp.uk^", - "||mastodont.cat^", - "||mastodontech.de^", - "||mastodontti.fi^", - "||mastouille.fr^", - "||mathstodon.xyz^", - "||metalhead.club^", - "||mindly.social^", - "||mstdn.ca^", - "||mstdn.jp^", - "||mstdn.party^", - "||mstdn.plus^", - "||mstdn.social^", - "||muenchen.social^", - "||muenster.im^", - "||nerdculture.de^", - "||noc.social^", - "||norden.social^", - "||nrw.social^", - "||o3o.ca^", - "||ohai.social^", - "||piaille.fr^", - "||pol.social^", - "||ravenation.club^", - "||rollenspiel.social^", - "||ruby.social^", - "||ruhr.social^", - "||sfba.social^", - "||socel.net^", - "||social.anoxinon.de^", - "||social.cologne^", - "||social.dev-wiki.de^", - "||social.linux.pizza^", - "||social.politicaconciencia.org^", - "||social.vivaldi.net^", - "||stranger.social^", - "||sueden.social^", - "||tech.lgbt^", - "||techhub.social^", - "||theblower.au^", - "||tkz.one^", - "||todon.eu^", - "||toot.aquilenet.fr^", - "||toot.community^", - "||toot.funami.tech^", - "||toot.io^", - "||toot.wales^", - "||troet.cafe^", - "||union.place^", - "||universeodon.com^", - "||urbanists.social^", - "||wien.rocks^", - "||wxw.moe^", - }, - "Mercado Libre": { - "Name": "Mercado Libre", - "Icon": ""), - "Rules": { - "||mercadolibre.cl^", - "||mercadolibre.co.cr^", - "||mercadolibre.com.ar^", - "||mercadolibre.com.bo^", - "||mercadolibre.com.co^", - "||mercadolibre.com.do^", - "||mercadolibre.com.ec^", - "||mercadolibre.com.gt^", - "||mercadolibre.com.hn^", - "||mercadolibre.com.mx^", - "||mercadolibre.com.ni^", - "||mercadolibre.com.pa^", - "||mercadolibre.com.pe^", - "||mercadolibre.com.py^", - "||mercadolibre.com.sv^", - "||mercadolibre.com.uy^", - "||mercadolibre.com.ve^", - "||mercadolibre.com^", - "||mercadolivre.com.br^", - "||mlstatic.com^", - }, - "Minecraft": { - "Name": "Minecraft", - "Icon": ""), - "Rules": { - "||minecraft.net^", - "||minecraftservices.com^", - "||mojang.com^", - }, - "Nebula": { - "Name": "Nebula", - "Icon": ""), - "Rules": { - "||nebula.app^", - "||nebula.tv^", - }, - "Netflix": { - "Name": "Netflix", - "Icon": ""), - "Rules": { - "|netflix.com.edgesuite.net^", - "||dualstack.apiproxy-*.amazonaws.com^", - "||dualstack.ichnaea-web-*.amazonaws.com^", - "||fast.com^", - "||netflix.ca^", - "||netflix.com^", - "||netflix.net^", - "||netflixdnstest1.com^", - "||netflixdnstest10.com^", - "||netflixdnstest2.com^", - "||netflixdnstest3.com^", - "||netflixdnstest4.com^", - "||netflixdnstest5.com^", - "||netflixdnstest6.com^", - "||netflixdnstest7.com^", - "||netflixdnstest8.com^", - "||netflixdnstest9.com^", - "||netflixinvestor.com^", - "||netflixtechblog.com^", - "||nflxext.com^", - "||nflximg.com^", - "||nflximg.net^", - "||nflxsearch.net^", - "||nflxso.net^", - "||nflxvideo.net^", - }, - "Nintendo": { - "Name": "Nintendo", - "Icon": ""), - "Rules": { - "||nintendo-europe.com^", - "||nintendo.be^", - "||nintendo.co.jp^", - "||nintendo.co.uk^", - "||nintendo.com.au^", - "||nintendo.com^", - "||nintendo.de^", - "||nintendo.es^", - "||nintendo.eu^", - "||nintendo.fr^", - "||nintendo.it^", - "||nintendo.jp^", - "||nintendo.net^", - "||nintendo.nl^", - "||nintendo.pt^", - "||nintendoswitch.cn^", - "||nintendowifi.net^", - }, - "Nvidia": { - "Name": "Nvidia", - "Icon": ""), - "Rules": { - "||geforce.com^", - "||geforcenow.com^", - "||nvidia.cn^", - "||nvidia.com.global.ogslb.com^", - "||nvidia.com^", - "||nvidia.eu^", - "||nvidia.partners^", - "||nvidiagrid.net^", - "||nvidianews.com^", - "||tegrazone.com^", - }, - "Odysee": { - "Name": "Odysee", - "Icon": ""), - "Rules": { - "||odycdn.com^", - "||odysee.com^", - "||odysee.live^", - "||odysee.tv^", - }, - "OK.ru": { - "Name": "OK.ru", - "Icon": ""), - "Rules": { - "||insideok.ru^", - "||ok.games^", - "||ok.ru^", - "||okcdn.ru^", - "||oktech.ru^", - "||st.mycdn.me^", - }, - "Olvid": { - "Name": "Olvid", - "Icon": ""), - "Rules": { - "||olvid-attachment-chunks.s3.eu-west-3.amazonaws.com^", - "||olvid.io^", - }, - "OnlyFans": { - "Name": "OnlyFans", - "Icon": ""), - "Rules": { - "||onlyfans.com^", - }, - "Origin": { - "Name": "Origin", - "Icon": ""), - "Rules": { - "|cloudsync-prod.s3.amazonaws.com^", - "|origin-a.akamaihd.net^", - "|rtm.tnt-ea.com^", - "|ssl-lvlt.cdn.ea.com^", - "||accounts.ea.com^", - "||dawngate.com^", - "||eastore.com^", - "||lordofultima.com^", - "||origin.com^", - "||origin.tv^", - "||signin.ea.com^", - }, - "Paramount Plus": { - "Name": "Paramount Plus", - "Icon": ""), - "Rules": { - "||paramountplus.com^", - "||pplusstatic.com^", - }, - "Peacock TV": { - "Name": "Peacock TV", - "Icon": ""), - "Rules": { - "||peacock.com^", - "||peacocktv.com^", - }, - "Pinterest": { - "Name": "Pinterest", - "Icon": ""), - "Rules": { - "||pin.it^", - "||pinimg.com^", - "||pinterest.at^", - "||pinterest.be^", - "||pinterest.ca^", - "||pinterest.ch^", - "||pinterest.cl^", - "||pinterest.co.at^", - "||pinterest.co.in^", - "||pinterest.co.kr^", - "||pinterest.co.nz^", - "||pinterest.co.uk^", - "||pinterest.co^", - "||pinterest.com.au^", - "||pinterest.com.bo^", - "||pinterest.com.ec^", - "||pinterest.com.mx^", - "||pinterest.com.pe^", - "||pinterest.com.py^", - "||pinterest.com.uy^", - "||pinterest.com.vn^", - "||pinterest.com^", - "||pinterest.de^", - "||pinterest.dk^", - "||pinterest.ec^", - "||pinterest.engineering^", - "||pinterest.es^", - "||pinterest.fr^", - "||pinterest.hu^", - "||pinterest.id^", - "||pinterest.ie^", - "||pinterest.in^", - "||pinterest.info^", - "||pinterest.it^", - "||pinterest.jp^", - "||pinterest.kr^", - "||pinterest.mx^", - "||pinterest.nl^", - "||pinterest.nz^", - "||pinterest.pe^", - "||pinterest.ph^", - "||pinterest.pt^", - "||pinterest.ru^", - "||pinterest.se^", - "||pinterest.th^", - "||pinterest.tw^", - "||pinterest.uk^", - "||pinterest.vn^", - "||pinterestmail.com^", - }, - "PlayStation": { - "Name": "PlayStation", - "Icon": ""), - "Rules": { - "||gaikai.com", - "||playstation-cloud.com", - "||playstation-cloud.net", - "||playstation.com", - "||playstation.net", - "||scea.com", - "||sonyentertainmentnetwork.com", - "||station.sony.com", - }, - "Google Play Store": { - "Name": "Google Play Store", - "Icon": ""), - "Rules": { - "||play-fe.googleapis.com^", - "||play-lh.googleusercontent.com^", - "||prod-lt-playstoregatewayadapter-pa.googleapis.com^", - }, - "Plenty of Fish": { - "Name": "Plenty of Fish", - "Icon": ""), - "Rules": { - "||pof.com^", - }, - "Plex": { - "Name": "Plex", - "Icon": ""), - "Rules": { - "||plex.bz^", - "||plex.direct^", - "||plex.tv^", - "||plexapp.com^", - }, - "Pluto TV": { - "Name": "Pluto TV", - "Icon": ""), - "Rules": { - "||pluto.tv^", - }, - "Privacy": { - "Name": "Privacy", - "Icon": ""), - "Rules": { - "||privacy.com.br^", - }, - "QQ": { - "Name": "QQ", - "Icon": ""), - "Rules": { - "||qq-video.cdn-go.cn^", - "||qq.com^$denyallow=wx.qq.com|weixin.qq.com", - "||url.cn^", - }, - "Rakuten Viki": { - "Name": "Rakuten Viki", - "Icon": ""), - "Rules": { - "||m-content-viki.s.llnwi.net^", - "||viki.com^", - "||viki.io^", - }, - "Reddit": { - "Name": "Reddit", - "Icon": ""), - "Rules": { - "||redd.it^", - "||reddit.com^", - "||redditmail.com^", - "||redditmedia.com^", - "||redditstatic.com^", - }, - "Riot Games": { - "Name": "Riot Games", - "Icon": ""), - "Rules": { - "||dradis-prod.rdatasrv.net^", - "||pvp.net^", - "||rgpub.io^", - "||riotcdn.com^", - "||riotcdn.net^", - "||riotgames.com^", - }, - "Roblox": { - "Name": "Roblox", - "Icon": ""), - "Rules": { - "||blox.com^", - "||rbx.cn^", - "||rbx.com^", - "||rbxadder.com^", - "||rbxcdn.com^", - "||rbxcdn.net^", - "||rbxinfra.com^", - "||rbxinfra.net^", - "||roblox.cn^", - "||roblox.com^", - "||roblox.qq.com^", - "||robloxcdn.com^", - "||robloxdev.cn^", - }, - "Rockstar Games": { - "Name": "Rockstar Games", - "Icon": ""), - "Rules": { - "||rockstargames.com^", - "||rsg.sc^", - }, - "Samsung TV Plus": { - "Name": "Samsung TV Plus", - "Icon": ""), - "Rules": { - "||internetat.tv^", - "||samsung.wurl.tv^", - "||samsungcloud.tv^", - "||samsungtvplus.com^", - }, - "Shein": { - "Name": "Shein", - "Icon": ""), - "Rules": { - "||shein.co.uk^", - "||shein.com^", - "||shein.se^", - "||sheinsz.ltwebstatic.com^", - }, - "Shopee": { - "Name": "Shopee", - "Icon": ""), - "Rules": { - "||shopee.cl^", - "||shopee.cn^", - "||shopee.co.id^", - "||shopee.co.th^", - "||shopee.com.br^", - "||shopee.com.co^", - "||shopee.com.mx^", - "||shopee.com.my^", - "||shopee.com^", - "||shopee.es^", - "||shopee.fr^", - "||shopee.id^", - "||shopee.in^", - "||shopee.io^", - "||shopee.ph^", - "||shopee.sg^", - "||shopee.tw^", - "||shopee.vn^", - "||shopeemobile.com^", - "||shp.ee^", - }, - "Signal": { - "Name": "Signal", - "Icon": ""), - "Rules": { - "||signal.org^", - "||whispersystems.org^", - }, - "Skype": { - "Name": "Skype", - "Icon": ""), - "Rules": { - "||edge-skype-com.s-0001.s-msedge.net^", - "||skype-edf.akadns.net^", - "||skype.com^", - "||skype.net^", - "||skype^", - "||skypeassets.com^", - "||skypeassets.net^", - "||skypedata.akadns.net^", - }, - "Slack": { - "Name": "Slack", - "Icon": ""), - "Rules": { - "||slack-edge.com^", - "||slack-files.com ^", - "||slack-imgs.com^", - "||slack.com^", - "||slackb.com^", - }, - "Snapchat": { - "Name": "Snapchat", - "Icon": ""), - "Rules": { - "||impala-media-production.s3.amazonaws.com^", - "||sc-cdn.net^", - "||snap-dev.net^", - "||snapads.com^", - "||snapchat.com^", - "||snapkit.co", - }, - "SoundCloud": { - "Name": "SoundCloud", - "Icon": ""), - "Rules": { - "||sndcdn.com^", - "||soundcloud.com^", - }, - "Spotify": { - "Name": "Spotify", - "Icon": ""), - "Rules": { - "/_spotify-connect._tcp.local/", - "|audio-ak-spotify-com.akamaized.net^", - "|audio4-ak-spotify-com.akamaized.net^", - "|heads-ak-spotify-com.akamaized.net^", - "|heads4-ak-spotify-com.akamaized.net^", - "|spotify.com.edgesuite.net^", - "|spotify.map.fastly.net^", - "|spotify.map.fastlylb.net^", - "||byspotify.com^", - "||pscdn.co^", - "||scdn.co^", - "||spoti.fi^", - "||spotify-everywhere.com^", - "||spotify.com^", - "||spotify.design^", - "||spotifycdn.com^", - "||spotifycdn.net^", - "||spotifycharts.com^", - "||spotifycodes.com^", - "||spotifyforbrands.com^", - "||spotifyjobs.com^", - }, - "Spotify Video": { - "Name": "Spotify Video", - "Icon": ""), - "Rules": { - "||eip-ntt.video-ak.cdn.spotify.com.akahost.net^", - "||video-ak.cdn.spotify.com^", - "||video-akpcw-cdn-spotify-com.akamaized.net^", - "||video-akpcw.spotifycdn.com.edgesuite.net^", - "||video-akpcw.spotifycdn.com^", - "||video-fa.scdn.co^", - }, - "Steam": { - "Name": "Steam", - "Icon": ""), - "Rules": { - "|steambroadcast.akamaized.net^", - "|steamcdn-a.akamaihd.net^", - "|steamcommunity-a.akamaihd.net^", - "|steamstore-a.akamaihd.net^", - "|steamusercontent-a.akamaihd.net^", - "|steamuserimages-a.akamaihd.net^", - "|steamvideo-a.akamaihd.net^", - "|xz.pphimalayanrt.com^", - "||csgo.wmsj.cn^", - "||dl.steam.clngaa.com^", - "||dl.steam.ksyna.com^", - "||dota2.wmsj.cn^", - "||playartifact.com^", - "||s.team^", - "||st.dl.bscstorage.net^", - "||st.dl.eccdnx.com^", - "||st.dl.pinyuncloud.com^", - "||steam-api.com^", - "||steam-chat.com^", - "||steamchina.com^", - "||steamcommunity.com^", - "||steamcontent.com^", - "||steamdeck.com^", - "||steamgames.com^", - "||steampipe.steamcontent.tnkjmec.com^", - "||steampowered.com.8686c.com^", - "||steampowered.com^", - "||steamserver.net^", - "||steamstatic.com.8686c.com^", - "||steamstatic.com^", - "||steamusercontent.com^", - "||underlords.com^", - "||valvesoftware.com^", - "||wmsjsteam.com^", - }, - "Telegram (Web)": { - "Name": "Telegram (Web)", - "Icon": ""), - "Rules": { - "||comments.app^", - "||contest.com^", - "||graph.org^", - "||quiz.directory^", - "||t.me^", - "||tdesktop.com^", - "||telega.one^", - "||telegra.ph^", - "||telegram-cdn.org^", - "||telegram.dog^", - "||telegram.me^", - "||telegram.org^", - "||telegram.space^", - "||telesco.pe^", - "||tg.dev^", - "||tx.me^", - "||usercontent.dev^", - }, - "Temu": { - "Name": "Temu", - "Icon": ""), - "Rules": { - "||kwcdn.com^", - "||temu.com^", - }, - "Tidal": { - "Name": "Tidal", - "Icon": ""), - "Rules": { - "||tidal.com^", - }, - "": { - "ServiceID": "tiktok", - "Name": "TikTok", - "Icon": ""), - "Rules": { - "||amemv.com^", - "||bdurl.com^", - "||bytecdn.cn^", - "||bytedance.map.fastly.net^", - "||bytedapm.com^", - "||bytegoofy.com^", - "||byteimg.com^", - "||byteoversea.com^", - "||bytescm.com^", - "||douyin.com^", - "||douyincdn.com^", - "||douyinliving.com^", - "||douyinpic.com^", - "||douyinstatic.com^", - "||douyinvod.com^", - "||huoshan.com^", - "||huoshanstatic.com^", - "||huoshanzhibo.com^", - "||muscdn.com^", - "||musical.ly^", - "||p16-tiktok-*.ibyteimg.com^", - "||p16-tiktokcdn-com.akamaized.net^", - "||pstatp.com^", - "||snssdk.com^", - "||tiktok.com^", - "||tiktokcdn-us.com^", - "||tiktokcdn.com^", - "||tiktokrow-cdn.com^", - "||tiktokv.com^", - "||ttlivecdn.com.c.bytefcdn-oversea.com^", - "||ttlivecdn.com^", - "||v*.tiktokcdn-eu.com^", - "||zijieapi.com^", - }, - "Tinder": { - "Name": "Tinder", - "Icon": ""), - "Rules": { - "||gotinder.com^", - "||tinder.com^", - "||tindersparks.com^", - }, - "Tumblr": { - "Name": "Tumblr", - "Icon": ""), - "Rules": {"||tumblr.com^", - }, - "Twitch": {"Name": "Twitch","Icon": ""),"Rules": { - "||ext-twitch.tv^", - "||jtvnw.net^", - "||ttvnw.net^", - "||twitch.tv^", - "||twitchcdn.net^", - "||twitchsvc.net^",},"X (formerly Twitter)": { - "Name": "X (formerly Twitter)", - "Icon": ""), - "Rules": { - "||ads-twitter.com^", - "||cms-twdigitalassets.com^", - "||periscope.tv^", - "||pscp.tv^", - "||t.co^", - "||tellapart.com^", - "||tweetdeck.com^", - "||twimg.com^", - "||twitpic.com^", - "||twitter.biz^", - "||twitter.com^", - "||twitter.jp^", - "||twittercommunity.com^", - "||twitterflightschool.com^", - "||twitterinc.com^", - "||twitteroauth.com^", - "||twitterstat.us^", - "||twtrdns.net^", - "||twttr.com^", - "||twttr.net^", - "||twvid.com^", - "||vine.co^", - "||x.com^", - }, - "Ubisoft": { - "Name": "Ubisoft", - "Icon": ""), - "Rules": { - "||ubi.com^", - "||ubisoft.com^", - "||ubisoft.org^", - "||ubisoftconnect.com^", - }, - "Valorant": { - "Name": "Valorant", - "Icon": ""), - "Rules": { - "||playvalorant.com", - "||valorant.scd.riotcdn.net", - "||valorant.secure.dyn.riotcdn.net", - }, - "Viber": { - "Name": "Viber", - "Icon": ""), - "Rules": { - "||viber.com^", - }, - "Vimeo": { - "Name": "Vimeo", - "Icon": ""), - "Rules": { - "*vod-adaptive.akamaized.net^", - "||livestream.com^", - "||vhx.tv^", - "||vhxqa1.com^", - "||vhxqa2.com^", - "||vhxqa3.com^", - "||vhxqa4.com^", - "||vhxqa6.com^", - "||vimeo-staging.com^", - "||vimeo-staging2.com^", - "||vimeo.com^", - "||vimeo.fr^", - "||vimeobusiness.com^", - "||vimeocdn.com^", - "||vimeogoods.com^", - "||vimeoondemand.com^", - "||vimeostatus.com^", - }, - "VK.com": { - "Name": "VK.com", - "Icon": ""), - "Rules": { - "||mvk.com^", - "||userapi.com^", - "||vk-cdn.me^", - "||vk-cdn.net^", - "||vk-portal.net^", - "||vk.cc^", - "||vk.com^", - "||vk.design^", - "||vk.link^", - "||vk.me^", - "||vkcache.com^", - "||vkgo.app^", - "||vklive.app^", - "||vkmessenger.app^", - "||vkmessenger.com^", - "||vkontakte.ru^", - "||vkuseraudio.com^", - "||vkuserlive.net^", - "||vkuservideo.com^", - "||vkuservideo.net^", - }, - "Voot": { - "Name": "Voot", - "Icon": ""), - "Rules": { - "||voot.com^", - }, - "Wargaming": { - "Name": "Wargaming", - "Icon": ""), - "Rules": { - "||wargaming.com^", - "||wargaming.net^", - "||wgcdn.co^", - "||wgcrowd.io^", - "||worldoftanks.com^", - "||worldofwarplanes.com^", - "||worldofwarships.eu^", - "||wotblitz.com^", - }, - "WeChat": { - "Name": "WeChat", - "Icon": ""), - "Rules": { - "||wechat.com^", - "||weixin.qq.com.cn^", - "||weixin.qq.com^", - "||weixinbridge.com^", - "||wx.qq.com^", - }, - "Weibo": { - "Name": "Weibo", - "Icon": ""), - "Rules": { - "||wbimg.cn^", - "||wbimg.com^", - "||wcdn.cn^", - "||weibo.cn^", - "||weibo.com.cn^", - "||weibo.com^", - "||weibocdn.com^", - }, - "WhatsApp": { - "Name": "WhatsApp", - "Icon": ""), - "Rules": { - "||wa.me^", - "||whatsapp-plus.info^", - "||whatsapp-plus.me^", - "||whatsapp-plus.net^", - "||whatsapp.cc^", - "||whatsapp.com^", - "||whatsapp.info^", - "||whatsapp.net^", - "||whatsapp.org^", - "||whatsapp.tv^", - "||whatsappbrand.com^", - }, - "Wizz": { - "Name": "Wizz", - "Icon": ""), - "Rules": { - "||getwizz.io^", - "||wizz.chat^", - "||wizzapp.com^", - }, - "Xbox Live": { - "Name": "Xbox Live", - "Icon": ""), - "Rules": { - "||gamepass.com^", - "||xbox-global.ifs.windows.com^", - "||xbox-guide-public.rec.mp.microsoft.com^", - "||xbox.ipv6.microsoft.com^", - "||xboxab.com^", - "||xboxab.net^", - "||xboxlive.com^", - "||xboxservices.com^", - }, - "Xiaohongshu": { - "Name": "Xiaohongshu", - "Icon": ""), - "Rules": { - "||xhscdn.com^", - "||xhscdn.net^", - "||xiaohongshu.com.my^", - "||xiaohongshu.com^", - "||xiaohongshu.net^", - }, - "YouTube": { - "Name": "YouTube", - "Icon": ""), - "Rules": { - "||ggpht.cn^", - "||ggpht.com^", - "||googlevideo.com^", - "||wide-youtube.l.google.com^", - "||withyoutube.com^", - "||youtu.be^", - "||youtube-nocookie.com^", - "||youtube-ui.l.google.com^", - "||youtube.ae^", - "||youtube.al^", - "||youtube.am^", - "||youtube.at^", - "||youtube.az^", - "||youtube.ba^", - "||youtube.be^", - "||youtube.bg^", - "||youtube.bh^", - "||youtube.bo^", - "||youtube.by^", - "||youtube.ca^", - "||youtube.cat^", - "||youtube.ch^", - "||youtube.cl^", - "||youtube.co.ae^", - "||youtube.co.at^", - "||youtube.co.cr^", - "||youtube.co.hu^", - "||youtube.co.id^", - "||youtube.co.il^", - "||youtube.co.in^", - "||youtube.co.jp^", - "||youtube.co.ke^", - "||youtube.co.kr^", - "||youtube.co.ma^", - "||youtube.co.nz^", - "||youtube.co.th^", - "||youtube.co.tz^", - "||youtube.co.ug^", - "||youtube.co.uk^", - "||youtube.co.ve^", - "||youtube.co.za^", - "||youtube.co.zw^", - "||youtube.co^", - "||youtube.com.ar^", - "||youtube.com.au^", - "||youtube.com.az^", - "||youtube.com.bd^", - "||youtube.com.bh^", - "||youtube.com.bo^", - "||youtube.com.br^", - "||youtube.com.by^", - "||youtube.com.co^", - "||youtube.com.do^", - "||youtube.com.ec^", - "||youtube.com.ee^", - "||youtube.com.eg^", - "||youtube.com.es^", - "||youtube.com.gh^", - "||youtube.com.gr^", - "||youtube.com.gt^", - "||youtube.com.hk^", - "||youtube.com.hn^", - "||youtube.com.hr^", - "||youtube.com.jm^", - "||youtube.com.jo^", - "||youtube.com.kw^", - "||youtube.com.lb^", - "||youtube.com.lv^", - "||youtube.com.ly^", - "||youtube.com.mk^", - "||youtube.com.mt^", - "||youtube.com.mx^", - "||youtube.com.my^", - "||youtube.com.ng^", - "||youtube.com.ni^", - "||youtube.com.om^", - "||youtube.com.pa^", - "||youtube.com.pe^", - "||youtube.com.ph^", - "||youtube.com.pk^", - "||youtube.com.pt^", - "||youtube.com.py^", - "||youtube.com.qa^", - "||youtube.com.ro^", - "||youtube.com.sa^", - "||youtube.com.sg^", - "||youtube.com.sv^", - "||youtube.com.tn^", - "||youtube.com.tr^", - "||youtube.com.tw^", - "||youtube.com.ua^", - "||youtube.com.uy^", - "||youtube.com.ve^", - "||youtube.com^", - "||youtube.cr^", - "||youtube.cz^", - "||youtube.de^", - "||youtube.dk^", - "||youtube.ee^", - "||youtube.es^", - "||youtube.fi^", - "||youtube.fr^", - "||youtube.ge^", - "||youtube.googleapis.com^", - "||youtube.gr^", - "||youtube.gt^", - "||youtube.hk^", - "||youtube.hr^", - "||youtube.hu^", - "||youtube.ie^", - "||youtube.in^", - "||youtube.iq^", - "||youtube.is^", - "||youtube.it^", - "||youtube.jo^", - "||youtube.jp^", - "||youtube.kr^", - "||youtube.kz^", - "||youtube.la^", - "||youtube.lk^", - "||youtube.lt^", - "||youtube.lu^", - "||youtube.lv^", - "||youtube.ly^", - "||youtube.ma^", - "||youtube.md^", - "||youtube.me^", - "||youtube.mk^", - "||youtube.mn^", - "||youtube.mx^", - "||youtube.my^", - "||youtube.ng^", - "||youtube.ni^", - "||youtube.nl^", - "||youtube.no^", - "||youtube.pa^", - "||youtube.pe^", - "||youtube.ph^", - "||youtube.pk^", - "||youtube.pl^", - "||youtube.pr^", - "||youtube.pt^", - "||youtube.qa^", - "||youtube.ro^", - "||youtube.rs^", - "||youtube.ru^", - "||youtube.sa^", - "||youtube.se^", - "||youtube.sg^", - "||youtube.si^", - "||youtube.sk^", - "||youtube.sn^", - "||youtube.soy^", - "||youtube.sv^", - "||youtube.tn^", - "||youtube.tv^", - "||youtube.ua^", - "||youtube.ug^", - "||youtube.uy^", - "||youtube.vn^", - "||youtube^", - "||youtubeeducation.com^", - "||youtubeembeddedplayer.googleapis.com^", - "||youtubefanfest.com^", - "||youtubegaming.com^", - "||youtubego.co.id^", - "||youtubego.co.in^", - "||youtubego.com.br^", - "||youtubego.com^", - "||youtubego.id^", - "||youtubego.in^", - "||youtubei.googleapis.com^", - "||youtubekids.com^", - "||youtubemobilesupport.com^", - "||yt.be^", - "||ytimg.com^", - }, - "YY": { - "Name": "YY", - "Icon": ""), - "Rules": { - "||yy.com^", - }, - "Zhihu": { - "Name": "Zhihu", - "Icon": ""), - "Rules": { - "||zhihu.com^", - "||zhimg.com^", - }, - } - } \ No newline at end of file diff --git a/blocked-services-rules.json.backup b/blocked-services-rules.json.backup deleted file mode 100644 index 5470cd9..0000000 --- a/blocked-services-rules.json.backup +++ /dev/null @@ -1,2894 +0,0 @@ -{ - "ServiceID": { - "1": "社交媒体", - "2": "游戏网站", - "3": "下载站/应用商店", - "4": "购物网站" - }, - "GFWlist": { - "Activision Blizzard": { - "Name": "Activision Blizzard", - "ServiceID": "2", - "Icon": "", - "Rules": { - "1": "||activision.com^", - "2": "||activisionblizzard.com^", - "3": "||callofduty.com^", - "4": "||callofdutyleague.com^", - "5": "||codmwest.com^", - "6": "||demonware.net^" - }, - }, - "Amazon": { - "Name": "Amazon", - "ServiceID": "4", - "Icon": "", - "Rules": { - "1": "||a2z.com^", - "2": "||a2z.org.cn^", - "3": "||aboutamazon.cn^", - "4": "||aboutamazon.co.uk^", - "5": "||aboutamazon.com.au^", - "6": "||aboutamazon.com^", - "7": "||aboutamazon.de^", - "8": "||aboutamazon.es^", - "9": "||aboutamazon.eu^", - "10": "||aboutamazon.fr^", - "11": "||aboutamazon.in^", - "12": "||aboutamazon.it^", - "13": "||aboutamazon.jp^", - "14": "||aboutamazon.pl^", - "15": "||acmvalidations.com^", - "16": "||acmvalidationsaws.com^", - "17": "||aesworkshops.com^", - "18": "||aiv-cdn.net^", - "19": "||alexa.com^", - "20": "||alexafund.cn^", - "21": "||alexafund.com.cn^", - "22": "||amaaozn.com^", - "23": "||amazon-adsystem.com^", - "24": "||amazon-fashions.com^", - "25": "||amazon-jp-recruiting.com^", - "26": "||amazon-lantern.com^", - "27": "||amazon-launchpad.com^", - "28": "||amazon.ae^", - "29": "||amazon.ca^", - "30": "||amazon.cn^", - "31": "||amazon.co.jp^", - "32": "||amazon.co.uk^", - "33": "||amazon.com.au^", - "34": "||amazon.com.be^", - "35": "||amazon.com.br^", - "36": "||amazon.com.mx^", - "37": "||amazon.com.tr^", - "38": "||amazon.com^", - "39": "||amazon.de^", - "40": "||amazon.es^", - "41": "||amazon.fr^", - "42": "||amazon.in^", - "43": "||amazon.it^", - "44": "||amazon.jobs^", - "45": "||amazon.jp^", - "46": "||amazon.nl^", - "47": "||amazon.red^", - "48": "||amazon.se^", - "49": "||amazon.sg^", - "50": "||amazon^", - "51": "||amazonalexavoxcon.com^", - "52": "||amazonauthorinsights.com^", - "53": "||amazonaws-china.com^", - "54": "||amazonaws.cn^", - "55": "||amazonaws.co.uk^", - "56": "||amazonaws.com.cn^", - "57": "||amazonaws.com^$dnstype=~CNAME", - "58": "||amazonaws.tv^", - "59": "||amazonbusiness.cn^", - "60": "||amazonbusiness.com.cn^", - "61": "||amazonbusiness.org^", - "62": "||amazonbusinessblog.com^", - "63": "||amazonchoice.cn^", - "64": "||amazonchoice.com.cn^", - "65": "||amazonchoices.cn^", - "66": "||amazonchoices.com.cn^", - "67": "||amazondevicesupport.com^", - "68": "||amazonfctours.com^", - "69": "||amazonianblog.com^", - "70": "||amazonimages.com^", - "71": "||amazoninspire.cn^", - "72": "||amazoninspire.com.cn^", - "73": "||amazonlaunchpad.cn^", - "74": "||amazonlaunchpad.com.cn^", - "75": "||amazonlaunchpad.com^", - "76": "||amazonlending.com.cn^", - "77": "||amazonliterarypartnership.com^", - "78": "||amazonlumberyard.wang^", - "79": "||amazonnow.cn^", - "80": "||amazonnow.com.cn^", - "81": "||amazonpay.com^", - "82": "||amazonpay.in^", - "83": "||amazonprimevideo.cn^", - "84": "||amazonprimevideo.com.cn^", - "85": "||amazonprimevideos.com^", - "86": "||amazonsdi.com^", - "87": "||amazonses.com^", - "88": "||amazonstudiosguilds.com^", - "89": "||amazontrust.com^", - "90": "||amazonvideo.cc^", - "91": "||amazonvideo.com^", - "92": "||amazonvideodirect.com^", - "93": "||amazonwebservices.com.cn^", - "94": "||amazonworkdocs.cn^", - "95": "||amazonworkdocs.com.cn^", - "96": "||amazonworkdocs.com^", - "97": "||amplifyapp.com^", - "98": "||amplifyframework.com^", - "99": "||amzn.asia^", - "100": "||amzn.com^", - "101": "||amzn.to^", - "102": "||amznl.com^", - "103": "||asfiovnxocqpcry.com.cn^", - "104": "||assoc-amazon.cn^", - "105": "||associates-amazon.com^", - "106": "||audible.com^", - "107": "||aws-border.cn^", - "108": "||aws-icp-domain-manager.cn^", - "109": "||aws-iot-hackathon.com^", - "110": "||aws^", - "111": "||awsapps.cn^", - "112": "||awsapps.com.cn^", - "113": "||awsautopilot.com^", - "114": "||awsautoscaling.com^", - "115": "||awsbraket.com^", - "116": "||awscommandlineinterface.com^", - "117": "||awsdns-*.co.uk^", - "118": "||awsdns-*.com^", - "119": "||awsdns-*.net^", - "120": "||awsdns-*.org^", - "121": "||awsdns-cn-*.biz^", - "122": "||awsdns-cn-*.cn^", - "123": "||awsdns-cn-*.top^", - "124": "||awsedstart.com^", - "125": "||awseducate.com^", - "126": "||awseducate.net^", - "127": "||awseducate.org^", - "128": "||awsglobalaccelerator.com^", - "129": "||awsloft-johannesburg.com^", - "130": "||awsloft-stockholm.com^", - "131": "||awssecworkshops.com^", - "132": "||awsstatic.cn^", - "133": "||awsstatic.com^", - "134": "||awsthinkbox.com^", - "135": "||awstrack.me^", - "136": "||awstrust.com^", - "137": "||boxofficemojo.com^", - "138": "||cdkworkshop.com^", - "139": "||cloudfront-cn.net^", - "140": "||cloudfront-test.cn^", - "141": "||cloudfront.cn^", - "142": "||cloudfront.net^", - "143": "||containersonaws.com^", - "144": "||createspace.com^", - "145": "||elasticbeanstalk.com^", - "146": "||gameon-masters.com^", - "147": "||gdansk-amazon.com^", - "148": "||images-amazon.com^", - "149": "||imdb.com^", - "150": "||imdb.to^", - "151": "||imdb^", - "152": "||kindle.cn^", - "153": "||kindle.co.jp^", - "154": "||kindle.co.uk^", - "155": "||kindle.com^", - "156": "||kindle.de^", - "157": "||kindle.es^", - "158": "||kindle.fr^", - "159": "||kindle.in^", - "160": "||kindle.it^", - "161": "||kindle.jp^", - "162": "||kindle^", - "163": "||kindleoasis.cn^", - "164": "||kindleoasis.com.cn^", - "165": "||kindleoasis.com^", - "166": "||kindleoasis.info^", - "167": "||kindleoasis.jp^", - "168": "||kindleoasis.org^", - "169": "||kindleoasis.us^", - "170": "||kindleoasisnews.com^", - "171": "||kindleproject.com^", - "172": "||media-amazon.com^", - "173": "||media-imdb.com^", - "174": "||nwcdcloud.cn^", - "175": "||nwcdcloud.com.cn^", - "176": "||nwcddns.cn^", - "177": "||nwcdinfosec.cn^", - "178": "||prime-video.com^", - "179": "||primeday.cn^", - "180": "||primeday.com.cn^", - "181": "||primeday.info^", - "182": "||primevideo.cc^", - "183": "||primevideo.com^", - "184": "||primevideo.info^", - "185": "||primevideo.org^", - "186": "||primevideo.tv^", - "187": "||route53.cn^", - "188": "||sagemaker.com.cn^", - "189": "||serving-sys.com^", - "190": "||siege-amazon.com^", - "191": "||ss2.us^", - "192": "||ssl-images-amazon.com^", - "193": "||thinkboxsoftware.com^", - "194": "||ueberamazon.de^", - "195": "||xn--cckwcxetd^", - "196": "||xn--jlq480n2rg^", - "197": "||yamaxun.cn^", - "198": "||yamaxun.com^", - "199": "||yamaxun^", - "200": "||z.cn^", - "201": "||zappos^" - } - }, - - "ServiceID": "shopping", - "Amazon Streaming": { "ServiceID": "amazon_streaming", - "Name": "Amazon Streaming", - "Icon": ""), - "Rules": { - "||aiv-delivery.net^", - "||amazonmusic.com^", - "||amazonprimevideo.cn^", - "||amazonprimevideo.com.cn^", - "||amazonprimevideos.com^", - "||amazonvideo.cc^", - "||amazonvideo.com^", - "||amazonvideodirect.com^", - "||atv-ext-eu.amazon.com^", - "||atv-ext-fe.amazon.com^", - "||atv-ext.amazon.com^", - "||atv-ps-eu.amazon.co.uk^", - "||atv-ps-eu.amazon.com^", - "||atv-ps-fe.amazon.co.jp^", - "||atv-ps-fe.amazon.com^", - "||atv-ps.amazon.com^", - "||av-eu.amazon.com^", - "||av-na.amazon.com^", - "||music.a2z.com^", - "||music.amazon.co.uk^", - "||music.amazon.com^", - "||music.amazon.in^", - "||prime-video.com^", - "||primevideo.cc^", - "||primevideo.com^", - "||primevideo.info^", - "||primevideo.org^", - "||primevideo.tv^", - "||video.a2z.com^", - }, - "Amino": { "ServiceID": "amino", - "Name": "Amino", - "Icon": ""), - "Rules": { - "||aminoapps.com^", - }, - "Apple Streaming": { "ServiceID": "apple_streaming", - "Name": "Apple Streaming", - "Icon": ""), - "Rules": { - "||applemusic.apple^", - "||hls-svod-aoc-ve.itunes.g.aaplimg.com^", - "||itun.es^", - "||itunes.apple.com^", - "||itunes.ca^", - "||itunes.co.th^", - "||itunes.co^", - "||itunes.com^", - "||itunes.es^", - "||itunes.g.aaplimg.com^", - "||itunes.hk^", - "||itunes.mx^", - "||itunes.org^", - "||itunes.us^", - "||music.apple.com^", - "||tv.apple.com^", - "||tv.g.apple.com^", - "||tv.v.aaplimg.com^", - }, - "Battle.net": { "ServiceID": "battle_net", - "Name": "Battle.net", - "Icon": ""), - "Rules": { - "||battle.net^", - "||battlenet.com.cn^", - "||bnet.163.com^", - "||bnet.cn^", - }, - "Betano": { "ServiceID": "betano", - "Name": "Betano", - "Icon": ""), - "Rules": { - "||betano.bg^", - "||betano.ca^", - "||betano.com^", - "||betano.cz^", - "||betano.de^", - "||betano.ng^", - "||betano.pt^", - }, - "ServiceID": "gambling", - "Betfair": { "ServiceID": "betfair", - "Name": "Betfair", - "Icon": ""), - "Rules": { - "||betfair.com.au^", - "||betfair.com^", - "||betfair.es^", - "||betfair.it^", - "||betfair.ro^", - "||betfair.se^", - }, - "ServiceID": "gambling", - "Betway": { "ServiceID": "betway", - "Name": "Betway", - "Icon": ""), - "Rules": { - "||betway.be^", - "||betway.bet.ar^", - "||betway.co.za^", - "||betway.com.gh^", - "||betway.com.ng^", - "||betway.com^", - "||betway.de^", - "||betway.es^", - "||betway.fr^", - "||betway.it^", - "||betway.mx^", - "||betway.pl^", - "||betway.se^", - "||betwaygroup.com^", - "||betwaysatta.com^", - "||vietnambetway88.com^", - }, - "ServiceID": "gambling", - "Bigo Live": { "ServiceID": "bigo_live", - "Name": "Bigo Live", - "Icon": ""), - "Rules": { - "||bigo.sg^", - "||bigo.tv^", - "||bigolive.tv^", - "||bigovideo.tv^", - }, - "Bilibili": { "ServiceID": "bilibili", - "Name": "Bilibili", - "Icon": ""), - "Rules": { - "|upos-hz-mirrorakam.akamaized.net^", - "||acg.tv^", - "||acgvideo.com^", - "||animetamashi.cn^", - "||animetamashi.com^", - "||anitama.cn^", - "||anitama.net^", - "||b23.tv^", - "||bigfun.cn^", - "||bili22.cn^", - "||bili2233.cn^", - "||bili23.cn^", - "||bili33.cn^", - "||biliapi.com^", - "||biliapi.net^", - "||bilibili.cc^", - "||bilibili.cn^", - "||bilibili.com^", - "||bilibili.net^", - "||bilibili.tv^", - "||bilibiligame.cn^", - "||bilibiligame.co^", - "||bilibiligame.net^", - "||bilibilipay.cn^", - "||bilibilipay.com^", - "||bilicdn1.com^", - "||bilicdn2.com^", - "||bilicdn3.com^", - "||bilicdn4.com^", - "||bilicdn5.com^", - "||biligame.co^", - "||biligame.com^", - "||biligame.net^", - "||biligo.com^", - "||biliimg.com^", - "||biliintl.com^", - "||bilivideo.cn^", - "||bilivideo.com^", - "||bilivideo.net^", - "||dreamcast.hk^", - "||hdslb.com^", - "||hdslb.org^", - "||im9.com^", - "||maoercdn.com^", - "||mincdn.com^", - "||yo9.com^", - }, - "Blaze": { "ServiceID": "blaze", - "Name": "Blaze", - "Icon": ""), - "Rules": { - "||blaze.bet^", - "||blaze.com.br^", - "||blaze.com^", - "||blazecareers.com^", - }, - "ServiceID": "gambling", - "Blizzard Entertainment": { "ServiceID": "blizzard_entertainment", - "Name": "Blizzard Entertainment", - "Icon": ""), - "Rules": { - "||battle.net^", - "||battlenet.com.cn^", - "||blizzard.cn^", - "||blizzard.com^", - "||blizzardgames.cn^", - "||blz-contentstack.com^", - "||blzstatic.cn^", - "||bnet.163.com^", - "||bnet.cn^", - }, - "Bluesky": { "ServiceID": "bluesky", - "Name": "Bluesky", - "Icon": ""), - "Rules": { - "||bsky.app^", - "||bsky.social^", - }, - }, - "Box": { "ServiceID": "box", - "Name": "Box", - "Icon": ""), - "Rules": { - "||box.com^", - "||box.net^", - "||boxcdn.net^", - "||boxcloud.com^", - }, - "ServiceID": "hosting", - "Canais Globo": { "ServiceID": "canais_globo", - "Name": "Canais Globo", - "Icon": ""), - "Rules": { - "||canaisglobo.globo.com^", - "||globosat.globo.com^", - "||gsatmulti.globo.com^", - }, - "ChatGPT": { "ServiceID": "chatgpt", - "Name": "ChatGPT", - "Icon": ""), - "Rules": { - "||chatgpt.com^", - "||oaistatic.com^", - "||oaiusercontent.com^", - "||openai.com^", - }, - "ServiceID": "ai", - "Claro": { "ServiceID": "claro", - "Name": "Claro", - "Icon": ""), - "Rules": { - "||claro.com.ar^", - "||claro.com.br^", - "||claro.com.co^", - "||claro.com.do^", - "||claro.com.ec^", - "||claro.com.gt^", - "||claro.com.hn^", - "||claro.com.ni^", - "||claro.com.pa^", - "||claro.com.pe^", - "||claro.com.py^", - "||claro.com.sv^", - "||claro.com.uy^", - "||claro.com^", - "||claro.cr^", - "||claro.net.br^", - "||claro.net.co^", - "||clarochile.cl^", - "||claromusica.com^", - "||claropr.com^", - "||clarovideo.com^", - "||usclaro.com^", - }, - "Claude": { "ServiceID": "claude", - "Name": "Claude", - "Icon": ""), - "Rules": { - "||anthropic.com^", - "||claude.ai^", - }, - "ServiceID": "ai", - "Cloudflare": { "ServiceID": "cloudflare", - "Name": "Cloudflare", - "Icon": ""), - "Rules": { - "||argotunnel.com^", - "||cf-ipfs.com^", - "||cloudflare-dns.com^", - "||cloudflare-ipfs.com^", - "||cloudflare-quic.com^", - "||cloudflare.com^", - "||cloudflare.net^", - "||cloudflare.tv^", - "||cloudflareaccess.com^", - "||cloudflareapps.com^", - "||cloudflarebolt.com^", - "||cloudflareclient.com^", - "||cloudflareinsights.com^", - "||cloudflareok.com^", - "||cloudflarepreview.com^", - "||cloudflareresolve.com^", - "||cloudflaressl.com^", - "||cloudflarestatus.com^", - "||cloudflarestorage.com^", - "||cloudflarestream.com^", - "||cloudflaretest.com^", - "||cloudflarewarp.com^", - "||every1dns.net^", - "||one.one.one^", - "||pacloudflare.com^", - "||pages.dev^", - "||trycloudflare.com^", - "||videodelivery.net^", - "||warp.plus^", - "||workers.dev^", - }, - "ServiceID": "cdn", - "Clubhouse": { "ServiceID": "clubhouse", - "Name": "Clubhouse", - "Icon": ""), - "Rules": { - "||clubhouse.com^", - "||clubhouseapi.com^", - }, - "CoolApk": { "ServiceID": "coolapk", - "Name": "CoolApk", - "Icon": ""), - "Rules": { - "||coolapk.com^", - "||coolapkmarket.com^", - "||coolapkmarket.net^", - }, - "ServiceID": "shopping", - "Crunchyroll": { "ServiceID": "crunchyroll", - "Name": "Crunchyroll", - "Icon": ""), - "Rules": { - "||crunchyroll.com^", - "||gccrunchyroll.com^", - }, - "Dailymotion": { "ServiceID": "dailymotion", - "Name": "Dailymotion", - "Icon": ""), - "Rules": { - "||dailymotion.com^", - "||dm-event.net^", - "||dmcdn.net^", - }, - "DeepSeek": { "ServiceID": "deepseek", - "Name": "DeepSeek", - "Icon": ""), - "Rules": { - "||deepseek.com^", - }, - "ServiceID": "ai", - "Deezer": { "ServiceID": "deezer", - "Name": "Deezer", - "Icon": ""), - "Rules": { - "||deezer.com^", - "||dzcdn.net^", - }, - "DirecTV Go": { "ServiceID": "directvgo", - "Name": "DirecTV Go", - "Icon": ""), - "Rules": { - "||directvgo.com^", - }, - "Discord": { "ServiceID": "discord", - "Name": "Discord", - "Icon": ""), - "Rules": { - "|hammerandchisel.ssl.zendesk.com^", - "||airhorn.solutions^", - "||airhornbot.com^", - "||bigbeans.solutions^", - "||dis.gd^", - "||discord-activities.com^", - "||discord.co^", - "||discord.com^", - "||discord.design^", - "||discord.dev^", - "||discord.gg^", - "||discord.gift^", - "||discord.gifts^", - "||discord.media^", - "||discord.new^", - "||discord.store^", - "||discord.tools^", - "||discordactivities.com^", - "||discordapp.com^", - "||discordapp.io^", - "||discordapp.net^", - "||discordcdn.com^", - "||discordmerch.com^", - "||discordpartygames.com^", - "||discordsays.com^", - "||discordstatus.com^", - "||watchanimeattheoffice.com^", - }, - "Discovery+": { "ServiceID": "discoveryplus", - "Name": "Discovery+", - "Icon": ""), - "Rules": { - "||disco-api.com^", - "||discoveryplus.com^", - }, - "Disney+": { "ServiceID": "disneyplus", - "Name": "Disney+", - "Icon": ""), - "Rules": { - "||disney-plus.net^", - "||disney.playback.edge.bamgrid.com^", - "||disneynow.com^", - "||disneyplus.com^", - "||hotstar.com^", - "||media.dssott.com^", - "||star.playback.edge.bamgrid.com^", - "||starplus.com^", - }, - "Douban": { "ServiceID": "douban", - "Name": "Douban", - "Icon": ""), - "Rules": { - "||douban.com^", - "||douban.fm^", - "||doubanio.com^", - }, - "Dropbox": { "ServiceID": "dropbox", - "Name": "Dropbox", - "Icon": ""), - "Rules": { - "||addtodropbox.com^", - "||app.hellosign.com^", - "||dash.ai^", - "||db.tt^", - "||docsend.com^", - "||dropbox-dns.com^", - "||dropbox.com^", - "||dropbox.tech^", - "||dropbox.zendesk.com^", - "||dropboxapi.com^", - "||dropboxbusiness.com^", - "||dropboxcaptcha.com^", - "||dropboxforum.com^", - "||dropboxforums.com^", - "||dropboxinsiders.com^", - "||dropboxlegal.com^", - "||dropboxmail.com^", - "||dropboxpartners.com^", - "||dropboxstatic.com^", - "||dropboxteam.com^", - "||dropboxusercontent.com^", - "||getdropbox.com^", - }, - "ServiceID": "hosting", - "eBay": { "ServiceID": "ebay", - "Name": "eBay", - "Icon": ""), - "Rules": { - "|ebay-*.s3-us-west-1.amazonaws.com^", - "||21centuryaccess.com^", - "||4ebaytraders.com^", - "||adcommerce.cn^", - "||adcommerce.tv^", - "||appforebay.cn^", - "||appsonebay.net^", - "||asebay.com^", - "||baazee.com^", - "||bidbay.com^", - "||bidorbuyindia.com^", - "||billpoint.com^", - "||billpoint.info^", - "||billpoint.tv^", - "||billpoint.us^", - "||billpointnewzealand.com^", - "||blogebay.com^", - "||bookclubcorner.com^", - "||builtfromebay.com^", - "||buyitnow.com^", - "||buyitnow.net^", - "||buyitnow.org^", - "||buyitnow.tv^", - "||buyitnowshop.net^", - "||cafr.ca^", - "||carebay.com^", - "||cargigileads.com^", - "||cebay.com^", - "||collective99.com^", - "||commerceos.com^", - "||connectcommerce.cn^", - "||connectcommerce.com.cn^", - "||connectcommerce.hk^", - "||connectcommerce.info^", - "||connectcommerce.tv^", - "||connectedcommerce.cn^", - "||connectedcommerce.com^", - "||connectedcommerce.tv^", - "||crececonebay.com^", - "||creditcardsbay.com^", - "||cyber-bay.cn^", - "||cyber-bay.com.cn^", - "||cyber-bay.info^", - "||cyber-bay.org^", - "||dba.dk^", - "||dealbay.com^", - "||dealtime.com^", - "||didce.com^", - "||douya.org^", - "||dreamtoplay.com^", - "||e-bay.com^", - "||e-bay.it^", - "||e-bay.net^", - "||eachpay.com^", - "||eachpay.net^", - "||ebahy.com^", - "||ebay-authenticate.net^", - "||ebay-confirm.com^", - "||ebay-course.com^", - "||ebay-cz.com^", - "||ebay-delivery.com^", - "||ebay-discoveries.com^", - "||ebay-fashion.com^", - "||ebay-inc.com^", - "||ebay-inc.net^", - "||ebay-inc.org^", - "||ebay-online.com^", - "||ebay-sales.com^", - "||ebay-stories.com^", - "||ebay-us.com^", - "||ebay-vacation.com^", - "||ebay.at^", - "||ebay.be^", - "||ebay.ca^", - "||ebay.ch^", - "||ebay.cn^", - "||ebay.co.nz^", - "||ebay.co.uk^", - "||ebay.co.ve^", - "||ebay.co.za^", - "||ebay.com.ar^", - "||ebay.com.au^", - "||ebay.com.cn^", - "||ebay.com.ec^", - "||ebay.com.hk^", - "||ebay.com.mt^", - "||ebay.com.my^", - "||ebay.com.ph^", - "||ebay.com.sg^", - "||ebay.com^", - "||ebay.de^", - "||ebay.es^", - "||ebay.fr^", - "||ebay.ie^", - "||ebay.in^", - "||ebay.it^", - "||ebay.jp^", - "||ebay.lt^", - "||ebay.mn^", - "||ebay.net.cn^", - "||ebay.nl^", - "||ebay.org.cn^", - "||ebay.org^", - "||ebay.ph^", - "||ebay.pk^", - "||ebay.pl^", - "||ebay.sg^", - "||ebay.us^", - "||ebay.vn^", - "||ebay.yn.cn^", - "||ebay.zj.cn^", - "||ebay25.com^", - "||ebay68.com^", - "||ebaya.com^", - "||ebayads.com^", - "||ebayads.net^", - "||ebayadvertising.cn^", - "||ebayadvertising.com^", - "||ebayanunsios.net^", - "||ebayauction.com^", - "||ebayaustralia.com^", - "||ebayauthenticate.com.cn^", - "||ebaybags.com^", - "||ebaybank.com^", - "||ebaybenefits.com^", - "||ebayboutique.com^", - "||ebayca.com^", - "||ebayca.org^", - "||ebaycafe.com^", - "||ebaycar.com^", - "||ebaycareers.com^", - "||ebaycbt.co.kr^", - "||ebaycdn.net^", - "||ebaychina.net^", - "||ebayclassifieds.cn^", - "||ebayclassifieds.com.cn^", - "||ebayclassifieds.com^", - "||ebayclassifieds.info^", - "||ebayclassifieds.org^", - "||ebayclassifieds.tv^", - "||ebayclassifiedsgroup.com^", - "||ebayclassifiedsgroup.com^", - "||ebayclassifiedsgroup.info^", - "||ebayclassifiedsgroup.org^", - "||ebayclassifies.com^", - "||ebayclub.com^", - "||ebaycoins.com^", - "||ebaycom.com^", - "||ebaycommercenetwork.com^", - "||ebaycourse.com^", - "||ebayd.com^", - "||ebayde.com^", - "||ebaydesc.cn^", - "||ebaydesc.com.cn^", - "||ebaydlassifieds.com^", - "||ebaydns.cn^", - "||ebaydts.com^", - "||ebayedu.com^", - "||ebayeletro.com^", - "||ebayenterprise.cn^", - "||ebayenterprise.com.cn^", - "||ebayenterprise.com^", - "||ebayenterprise.info^", - "||ebayenterprise.net^", - "||ebayenterprise.tv^", - "||ebayetc.com^", - "||ebayexpress.sg^", - "||ebayfashion.com^", - "||ebayfashion.net^", - "||ebayforcharity.org^", - "||ebayforeclosure.org^", - "||ebayfrance.com^", - "||ebayglobalshipping.com^", - "||ebaygroup.com^", - "||ebayhabit.com^", - "||ebayheels.com^", - "||ebayhots.com^", - "||ebayimg.com^", - "||ebayinc.com^", - "||ebayinc.net^", - "||ebayinc.org^", - "||ebayincconnectedcommerce.net^", - "||ebayinkblog.com^", - "||ebayinternetsalestax.com^", - "||ebayit.com^", - "||ebayjewelry.com^", - "||ebayjob.com^", - "||ebayla.org^", - "||ebaylisting.com^", - "||ebaylocal.net^", - "||ebaylocationsdevacances.com^", - "||ebaymag.com^", - "||ebaymainstreet.com^", - "||ebaymall.com^", - "||ebaymarketplace.net^", - "||ebaymotors.ca^", - "||ebaymotors.cn^", - "||ebaymotors.com.cn^", - "||ebaymotors.com^", - "||ebaymotors.org^", - "||ebaymotorsblog.com^", - "||ebaynow.com^", - "||ebaynyc.com^", - "||ebayon.com^", - "||ebayon.net^", - "||ebayoncampus.com^", - "||ebayopen.com^", - "||ebayopensource.com^", - "||ebayopensource.net^", - "||ebaypakistan.net^", - "||ebaypark.com^", - "||ebayparts.com^", - "||ebaypedia.cn^", - "||ebaypedia.com.cn^", - "||ebayprivacycenter.com^", - "||ebayqq.com^", - "||ebayradio.com^", - "||ebayrtm.com^", - "||ebayseller.com^", - "||ebayshoesstore.com^", - "||ebayshop.com^", - "||ebayshop111.com^", - "||ebayshopping.cn^", - "||ebayshopping.com.cn^", - "||ebayshopping.org^", - "||ebaysocial.com^", - "||ebaysocial.ru^", - "||ebaysoho.com^", - "||ebaysohos.com^", - "||ebaystatic.cn^", - "||ebaystatic.com^", - "||ebaystore.com^", - "||ebaystore77.com^", - "||ebaystores.cn^", - "||ebaystyle.com^", - "||ebaysweden.com^", - "||ebayt.com^", - "||ebaytechblog.com^", - "||ebaytopratedseller.net^", - "||ebaytrading.com^", - "||ebaytradingassistant.com^", - "||ebaytv.org^", - "||ebayuae.net^", - "||ebayvakantiehuizen.com^", - "||ebayvalet.com^", - "||ebayvietnam.net^", - "||ebayworlds.com^", - "||ebayy.com^", - "||edisebay.com^", - "||eebay.com^", - "||epinions.com^", - "||eu-consumer-empowerment.com^", - "||expertmaker.com^", - "||fairmarket.com^", - "||fragrancebay.com^", - "||francemail.com^", - "||half.com.cn^", - "||half.com^", - "||half.tv^", - "||halfcanada.com^", - "||halfjapan.com^", - "||handbagsoutletebay.com^", - "||iebay.com^", - "||irribay.com^", - "||itsbetterwhenyouwinit.com^", - "||liketwice.com^", - "||liveauction.com^", - "||milofetch.com^", - "||musicbay.net^", - "||myconstructionworld.net^", - "||myebay.com^", - "||nebay.net^", - "||paisapay.cc^", - "||paisapay.info^", - "||paisapay.tv^", - "||premobay.com^", - "||privatemarketplaces.net^", - "||privatemarketplaces.us^", - "||prostores.cn^", - "||prostores.com.cn^", - "||prostores.com^", - "||rethink.net^", - "||shopibay.net^", - "||shoping.com^", - "||sourcingforebay.com.cn^", - "||sourcingforebay.net^", - "||sourcingforebay.tv^", - "||speybay.com^", - "||storesense.com^", - "||svpply.com^", - "||telebay.com^", - "||telesell.com^", - "||texttobuy.org^", - "||theebayshop.com^", - "||theopportunityproject.org^", - "||towerauction.com^", - "||vendu.com^", - "||watch-ebay.org^", - "||weareebay.com^", - "||wwwdecide.com^", - "||wwwebay.com^", - "||wwwebay.net^", - "||wwwwebay.com^", - "||xindelu.com^", - "||xn--3et96bj49ahpq.com^", - "||xn--4vq475g.com^", - "||xn--4vq477m.com^", - "||xn--7hv594h.com^", - "||xn--7hvy28f.cn^", - "||xn--hb4aw0g.com^", - "||xn--q41am8x.com^", - "||xn--qoq462m.com^", - "||xn--tkry91n.com^", - "||xn--ubt498knmf.com^", - "||xn--xsq421m.com^", - "||xn--xsq605n.com^", - "||xn--xsq959n.com^", - "||xn--yf1at58a.com^", - "||xxbay.com^", - "||yibei.org^", - }, - "ServiceID": "shopping", - "Electronic Arts": { "ServiceID": "electronic_arts", - "Name": "Electronic Arts", - "Icon": ""), - "Rules": { - "||ea.com^", - "||eamobile.com^", - "||easports.com^", - "||nearpolar.com^", - "||swtor.com^", - "||tnt-ea.com^", - }, - "Epic Games": { "ServiceID": "epic_games", - "Name": "Epic Games", - "Icon": ""), - "Rules": { - "|cdn*-epicgames-*.file.myqcloud.com^", - "|epicgames-download*-*.file.myqcloud.com^", - "|epicgames-download*.akamaized.net^", - "||eac-cdn.com^", - "||easy.ac^", - "||easyanticheat.net^", - "||epicgames.com^", - }, - "ESPN": { "ServiceID": "espn", - "Name": "ESPN", - "Icon": ""), - "Rules": { - "||es.pn^", - "||espn.cl^", - "||espn.co.uk^", - "||espn.com.ar^", - "||espn.com.au^", - "||espn.com.co^", - "||espn.com.ec^", - "||espn.com.mx^", - "||espn.com.pa^", - "||espn.com.pe^", - "||espn.com.uy^", - "||espn.com.ve^", - "||espn.com^", - "||espn.in", - "||espn.net^", - "||espncdn.com^", - "||espncricinfo.com^", - }, - "Facebook": { "ServiceID": "facebook", - "Name": "Facebook", - "Icon": ""), - "Rules": { - "|fbcdn-a.akamaihd.net^", - "||aboutfacebook.com^", - "||accessfacebookfromschool.com^", - "||accountkit.com^", - "||accountkit.com^", - "||acebooik.com^", - "||acebook.com^", - "||advancediddetection.com^", - "||askfacebook.net^", - "||askfacebook.org^", - "||atdmt2.com^", - "||atlasdmt.com^", - "||atlasonepoint.com^", - "||atscaleconference.com^", - "||botorch.org^", - "||buck.build^", - "||buckbuild.com^", - "||buyingfacebooklikes.com^", - "||careersatfb.com^", - "||celebgramme.com^", - "||china-facebook.com^", - "||click-url.com^", - "||como-hackearfacebook.com^", - "||componentkit.org^", - "||crowdtangle.com^", - "||dacebook.com^", - "||dlfacebook.com^", - "||dotfacebook.com^", - "||dotfacebook.net^", - "||draftjs.org^", - "||expresswifi.com^", - "||f8.com^", - "||faacebok.com^", - "||faacebook.com^", - "||faasbook.com^", - "||facbebook.com^", - "||facbeok.com^", - "||facboo.com^", - "||facbook.com^", - "||facbool.com^", - "||facboox.com^", - "||faccebook.com^", - "||faccebookk.com^", - "||facdbook.com^", - "||facdebook.com^", - "||face-book.com^", - "||faceabook.com^", - "||facebboc.com^", - "||facebbook.com^", - "||facebboook.com^", - "||facebcook.com^", - "||facebdok.com^", - "||facebgook.com^", - "||facebhook.com^", - "||facebkkk.com^", - "||facebo-ok.com^", - "||faceboak.com^", - "||facebock.com^", - "||facebocke.com^", - "||facebof.com^", - "||faceboik.com^", - "||facebok.com^", - "||facebokbook.com^", - "||facebokc.com^", - "||facebokk.com^", - "||facebokok.com^", - "||faceboks.com^", - "||facebol.com^", - "||facebolk.com^", - "||facebomok.com^", - "||faceboo.com^", - "||facebooa.com^", - "||faceboob.com^", - "||faceboobok.com^", - "||facebooc.com^", - "||faceboock.com^", - "||facebood.com^", - "||facebooe.com^", - "||faceboof.com^", - "||facebooi.com^", - "||facebooik.com^", - "||facebooik.org^", - "||facebooj.com^", - "||facebook-corp.com^", - "||facebook-covid-19.com^", - "||facebook-ebook.com^", - "||facebook-forum.com^", - "||facebook-hardware.com^", - "||facebook-inc.com^", - "||facebook-login.com^", - "||facebook-newsroom.com^", - "||facebook-newsroom.org^", - "||facebook-pmdcenter.com^", - "||facebook-pmdcenter.net^", - "||facebook-pmdcenter.org^", - "||facebook-privacy.com^", - "||facebook-program.com^", - "||facebook-studio.com^", - "||facebook-support.org^", - "||facebook-texas-holdem.com^", - "||facebook-texas-holdem.net^", - "||facebook.br^", - "||facebook.ca^", - "||facebook.cc^", - "||facebook.com^", - "||facebook.design^", - "||facebook.hu^", - "||facebook.in^", - "||facebook.net^", - "||facebook.nl^", - "||facebook.org^", - "||facebook.se^", - "||facebook.shop^", - "||facebook.tv^", - "||facebook.us^", - "||facebook.wang^", - "||facebook123.org^", - "||facebook30.com^", - "||facebook30.net^", - "||facebook30.org^", - "||facebook4business.com^", - "||facebookads.com^", - "||facebookadvertisingsecrets.com^", - "||facebookappcenter.info^", - "||facebookappcenter.net^", - "||facebookappcenter.org^", - "||facebookatschool.com^", - "||facebookawards.com^", - "||facebookblueprint.net^", - "||facebookbrand.com^", - "||facebookbrand.net^", - "||facebookcanadianelectionintegrityinitiative.com^", - "||facebookcareer.com^", - "||facebookcheats.com^", - "||facebookck.com^", - "||facebookclub.com^", - "||facebookcom.com^", - "||facebookconnect.com^", - "||facebookconsultant.org^", - "||facebookcoronavirus.com^", - "||facebookcovers.org^", - "||facebookcredits.info^", - "||facebookdating.net^", - "||facebookdevelopergarage.com^", - "||facebookdusexe.org^", - "||facebookemail.com^", - "||facebookenespanol.com^", - "||facebookexchange.com^", - "||facebookexchange.net^", - "||facebookfacebook.com^", - "||facebookflow.com^", - "||facebookgames.com^", - "||facebookgraphsearch.com^", - "||facebookgraphsearch.info^", - "||facebookgroups.com^", - "||facebookhome.cc^", - "||facebookhome.com^", - "||facebookhome.info^", - "||facebookhub.com^", - "||facebooki.com^", - "||facebookinc.com^", - "||facebookland.com^", - "||facebooklikeexchange.com^", - "||facebooklive.com^", - "||facebooklivestaging.net^", - "||facebooklivestaging.org^", - "||facebooklogin.com^", - "||facebooklogin.info^", - "||facebookloginhelp.net^", - "||facebooklogs.com^", - "||facebookmail.com^", - "||facebookmail.tv^", - "||facebookmanager.info^", - "||facebookmarketing.info^", - "||facebookmarketingpartner.com^", - "||facebookmarketingpartners.com^", - "||facebookmobile.com^", - "||facebookmsn.com^", - "||facebooknews.com^", - "||facebooknfl.com^", - "||facebooknude.com^", - "||facebookofsex.com^", - "||facebookook.com^", - "||facebookpaper.com^", - "||facebookpay.com^", - "||facebookphonenumber.net^", - "||facebookphoto.com^", - "||facebookphotos.com^", - "||facebookpmdcenter.com^", - "||facebookpoke.net^", - "||facebookpoke.org^", - "||facebookpoker.info^", - "||facebookpokerchips.info^", - "||facebookporn.net^", - "||facebookporn.org^", - "||facebookporno.net^", - "||facebookportal.com^", - "||facebooks.com^", - "||facebooksafety.com^", - "||facebooksecurity.net^", - "||facebookshop.com^", - "||facebooksignup.net^", - "||facebooksite.net^", - "||facebookstories.com^", - "||facebookstudios.net^", - "||facebookstudios.org^", - "||facebooksupplier.com^", - "||facebooksuppliers.com^", - "||facebookswagemea.com^", - "||facebookswagstore.com^", - "||facebooksz.com^", - "||facebookthreads.net^", - "||facebooktv.net^", - "||facebooktv.org^", - "||facebookvacation.com^", - "||facebookw.com^", - "||facebookwork.com^", - "||facebookworld.com^", - "||facebool.com^", - "||facebool.info^", - "||facebooll.com^", - "||faceboom.com^", - "||faceboon.com^", - "||faceboonk.com^", - "||faceboooik.com^", - "||faceboook.com^", - "||faceboop.com^", - "||faceboot.com^", - "||faceboox.com^", - "||facebopk.com^", - "||facebpook.com^", - "||facebuk.com^", - "||facebuok.com^", - "||facebvook.com^", - "||facebyook.com^", - "||facebzook.com^", - "||facecbgook.com^", - "||facecbook.com^", - "||facecbook.org^", - "||facecook.com^", - "||facecook.org^", - "||facedbook.com^", - "||faceebok.com^", - "||faceebook.com^", - "||faceebot.com^", - "||facegbok.com^", - "||facegbook.com^", - "||faceobk.com^", - "||faceobok.com^", - "||faceobook.com^", - "||faceook.com^", - "||facerbooik.com^", - "||facerbook.com^", - "||facesbooc.com^", - "||facesounds.com^", - "||facetook.com^", - "||facevbook.com^", - "||facewbook.co^", - "||facewook.com^", - "||facfacebook.com^", - "||facfebook.com^", - "||faciometrics.com^", - "||fackebook.com^", - "||facnbook.com^", - "||facrbook.com^", - "||facvebook.com^", - "||facwebook.com^", - "||facxebook.com^", - "||fadebook.com^", - "||faebok.com^", - "||faebook.com^", - "||faebookc.com^", - "||faeboook.com^", - "||faecebok.com^", - "||faesebook.com^", - "||fafacebook.com^", - "||faicbooc.com^", - "||fasebokk.com^", - "||fasebook.com^", - "||faseboox.com^", - "||fasttext.cc^", - "||favebook.com^", - "||faycbok.com^", - "||fb.careers^", - "||fb.com^", - "||fb.gg^", - "||fb.me^", - "||fb.watch^", - "||fbacebook.com^", - "||fbbmarket.com^", - "||fbboostyourbusiness.com^", - "||fbcdn.com^", - "||fbcdn.net^", - "||fbf8.com^", - "||fbfeedback.com^", - "||fbhome.com^", - "||fbidb.io^", - "||fbinc.com^", - "||fbinfer.com^", - "||fbinnovation.com^", - "||fblitho.com^", - "||fbmarketing.com^", - "||fbmessenger.com^", - "||fbredex.com^", - "||fbreg.com^", - "||fbrell.com^", - "||fbrpms.com^", - "||fbsbx.com^", - "||fbsbx.net^", - "||fbsupport-covid.net^", - "||fbthirdpartypixel.com^", - "||fbthirdpartypixel.net^", - "||fbthirdpartypixel.org^", - "||fburl.com^", - "||fbwat.ch^", - "||fbworkmail.com^", - "||fcacebook.com^", - "||fcaebook.com^", - "||fcebook.com^", - "||fcebookk.com^", - "||fcfacebook.com^", - "||fdacebook.info^", - "||feacboo.com^", - "||feacbook.com^", - "||feacbooke.com^", - "||feacebook.com^", - "||fecbbok.com^", - "||fecbooc.com^", - "||fecbook.com^", - "||feceboock.com^", - "||fecebook.net^", - "||feceboox.com^", - "||fececbook.com^", - "||feook.com^", - "||ferabook.com^", - "||fescebook.com^", - "||fesebook.com^", - "||ffacebook.com^", - "||fgacebook.com^", - "||ficeboock.com^", - "||flow.dev^", - "||flow.org^", - "||flowtype.org^", - "||fmcebook.com^", - "||fnacebook.com^", - "||fosebook.com^", - "||fpacebook.com^", - "||fqcebook.com^", - "||fracebook.com^", - "||freeb.com^", - "||freebasics.com^", - "||freebasics.net^", - "||freebs.com^", - "||freefacebook.com^", - "||freefacebook.net^", - "||freefacebookads.net^", - "||freefblikes.com^", - "||freindfeed.com^", - "||frescolib.org^", - "||friendbook.info^", - "||friendfed.com^", - "||friendfeed-api.com^", - "||friendfeed-media.com^", - "||friendfeed.com^", - "||friendfeedmedia.com^", - "||fsacebok.com^", - "||fscebook.com^", - "||fundraisingwithfacebook.com^", - "||funnyfacebook.org^", - "||futureofbusinesssurvey.org^", - "||gacebook.com^", - "||gameroom.com^", - "||gfacecbook.com^", - "||groups.com^", - "||hackerfacebook.com^", - "||hackfacebook.com^", - "||hackfacebookid.com^", - "||hacklang.org^", - "||hhvm.com^", - "||hifacebook.info^", - "||howtohackfacebook-account.com^", - "||hsfacebook.com^", - "||httpfacebook.com^", - "||httpsfacebook.com^", - "||httpwwwfacebook.com^", - "||i.org^", - "||internet.org^", - "||klik.me^", - "||liverail.com^", - "||liverail.tv^", - "||login-account.net^", - "||m.me^", - "||makeitopen.com^", - "||markzuckerberg.com^", - "||mcrouter.net^", - "||mcrouter.org^", - "||messenger.com^", - "||messengerdevelopers.com^", - "||midentsolutions.com^", - "||mobilefacebook.com^", - "||moneywithfacebook.com^", - "||myfbfans.com^", - "||nbabot.net^", - "||newsfeed.com^", - "||nextstop.com^", - "||ogp.me^", - "||online-deals.net^", - "||opencreate.org^", - "||opengraphprotocol.com^", - "||opengraphprotocol.org^", - "||parse.com^", - "||pyrobot.org^", - "||reachtheworldonfacebook.com^", - "||react.com^", - "||reactjs.com^", - "||reactjs.org^", - "||recoiljs.org^", - "||redkix.com^", - "||rocksdb.com^", - "||rocksdb.net^", - "||rocksdb.org^", - "||rocksdb.org^", - "||shopfacebook.com^", - "||sportsfacebook.com^", - "||sportstream.com^", - "||supportfacebook.com^", - "||terragraph.com^", - "||thefacebook.com^", - "||thefacebook.net^", - "||thefind.com^", - "||toplayerserver.com^", - "||viewpointsfromfacebook.com^", - "||whyfacebook.com^", - "||workplace.com^", - "||workplaceusecases.com^", - "||worldhack.com^", - "||www-facebook.com^", - "||wwwfacebok.com^", - "||wwwfacebook.com^", - "||wwwmfacebook.com^", - "||yogalayout.com^", - "||zuckerberg.com^", - "||zuckerberg.net^", - }, - "FIFA": { "ServiceID": "fifa", - "Name": "FIFA", - "Icon": ""), - "Rules": { - "||fifa.com^", - "||fifaplus.com^", - }, - "Flickr": { "ServiceID": "flickr", - "Name": "Flickr", - "Icon": ""), - "Rules": { - "||flic.kr^", - "||flickr.com^", - "||flickr.net^", - "||flickrprints.com^", - "||flickrpro.com^", - "||staticflickr.com^", - }, - "ServiceID": "hosting", - "Globoplay": { "ServiceID": "globoplay", - "Name": "Globoplay", - "Icon": ""), - "Rules": { - "||cloud-jarvis.globo.com^", - "||globoplay.com.br^", - "||globoplay.com^", - "||globoplay.globo.com^", - }, - "GOG": { "ServiceID": "gog", - "Name": "GOG", - "Icon": ""), - "Rules": { - "||gog-cdn-lumen.secure2.footprint.net^", - "||gog-statics.com^", - "||gog.com^", - "||gogalaxy.com^", - }, - "HBO Max": { "ServiceID": "hbomax", - "Name": "HBO Max", - "Icon": ""), - "Rules": { - "||hbo.com^", - "||hbogo.co.th^", - "||hbogo.com^", - "||hbogo.eu^", - "||hbogoasia.com^", - "||hbogoasia.id^", - "||hbogoasia.ph^", - "||hbomax-images.warnermediacdn.com^", - "||hbomax.com^", - "||hbomaxcdn.com^", - "||hbonow.com^", - "||max.com^", - "||maxgo.com^", - }, - "Hulu": { "ServiceID": "hulu", - "Name": "Hulu", - "Icon": ""), - "Rules": { - "||hulu.com^", - }, - "iCloud Private Relay": { "ServiceID": "icloud_private_relay", - "Name": "iCloud Private Relay", - "Icon": ""), - "Rules": { - "||mask-canary.icloud.com^$dnsrewrite=NXDOMAIN;;", - "||mask-h2.icloud.com^$dnsrewrite=NXDOMAIN;;", - "||mask.icloud.com^$dnsrewrite=NXDOMAIN;;", - }, - "ServiceID": "privacy", - "iHeartRadio": { "ServiceID": "iheartradio", - "Name": "iHeartRadio", - "Icon": ""), - "Rules": { - "||937theriver.com^", - "||iheart.com^", - "||iheart.mx^", - "||iheartmedia.com^", - "||iheartradio.ca^", - "||iheartradio.co.nz^", - "||iheartradio.com^", - "||ihrdev.com^", - "||ihrhls.com^", - "||ihrint.com^", - "||ihrstage.com^", - }, - "Imgur": { "ServiceID": "imgur", - "Name": "Imgur", - "Icon": ""), - "Rules": { - "||imgur.com^", - }, - "ServiceID": "hosting", - "Instagram": { "ServiceID": "instagram", - "Name": "Instagram", - "Icon": ""), - "Rules": { - "||achat-followers-instagram.com^", - "||acheter-followers-instagram.com^", - "||acheterdesfollowersinstagram.com^", - "||acheterfollowersinstagram.com^", - "||bookstagram.com^", - "||carstagram.com^", - "||cdninstagram.com^", - "||chickstagram.com^", - "||ig.me^", - "||igcdn.com^", - "||igsonar.com^", - "||igtv.com^", - "||imstagram.com^", - "||imtagram.com^", - "||instaadder.com^", - "||instachecker.com^", - "||instafallow.com^", - "||instafollower.com^", - "||instagainer.com^", - "||instagda.com^", - "||instagify.com^", - "||instagmania.com^", - "||instagor.com^", - "||instagram-brand.com^", - "||instagram-engineering.com^", - "||instagram-help.com^", - "||instagram-press.com^", - "||instagram-press.net^", - "||instagram.com^", - "||instagramci.com^", - "||instagramcn.com^", - "||instagramdi.com^", - "||instagramhashtags.net^", - "||instagramhilecim.com^", - "||instagramhilesi.org^", - "||instagramium.com^", - "||instagramizlenme.com^", - "||instagramkusu.com^", - "||instagramlogin.com^", - "||instagramm.com^", - "||instagramn.com^", - "||instagrampartners.com^", - "||instagramphoto.com^", - "||instagramq.com^", - "||instagramsepeti.com^", - "||instagramtakipcisatinal.net^", - "||instagramtakiphilesi.com^", - "||instagramtips.com^", - "||instagramtr.com^", - "||instagran.com^", - "||instagranm.com^", - "||instagrem.com^", - "||instagrm.com^", - "||instagtram.com^", - "||instagy.com^", - "||instamgram.com^", - "||instangram.com^", - "||instanttelegram.com^", - "||instaplayer.net^", - "||instastyle.tv^", - "||instgram.com^", - "||intagram.com^", - "||intagrm.com^", - "||intgram.com^", - "||kingstagram.com^", - "||lnstagram-help.com^", - "||oninstagram.com^", - "||online-instagram.com^", - "||onlineinstagram.com^", - "||theinstagramhack.com^", - "||web-instagram.net^", - "||wwwinstagram.com^", - }, - "iQIYI": { "ServiceID": "iqiyi", - "Name": "iQIYI", - "Icon": ""), - "Rules": { - "||iq.com^", - "||iqiyi.com^", - "||iqiyipic.com^", - "||pps.tv^", - "||ppsimg.com^", - "||qiyi.com^", - "||qiyipic.com^", - "||qy.net^", - }, - "KakaoTalk": { "ServiceID": "kakaotalk", - "Name": "KakaoTalk", - "Icon": ""), - "Rules": { - "||kakao.com^", - "||kgslb.com^", - }, - "ServiceID": "messenger", - "Kik": { "ServiceID": "kik", - "Name": "Kik", - "Icon": ""), - "Rules": { - "||kik.com^", - }, - "ServiceID": "messenger", - "KOOK": { "ServiceID": "kook", - "Name": "KOOK", - "Icon": ""), - "Rules": { - "||kaiheila.cn^", - "||kookapp.cn^", - }, - "Lazada": { "ServiceID": "lazada", - "Name": "Lazada", - "Icon": ""), - "Rules": { - "||k1-lazadasg-oversea.gslb.ksyuncdn.com^", - "||lazada.co.id^", - "||lazada.co.th^", - "||lazada.com.my^", - "||lazada.com.ph^", - "||lazada.com^", - "||lazada.sg^", - "||lazada.vn^", - "||slatic.net^", - }, - "ServiceID": "shopping", - "League of Legends": { "ServiceID": "leagueoflegends", - "Name": "League of Legends", - "Icon": ""), - "Rules": { - "||leagueoflegends.co.kr^", - "||leagueoflegends.com^", - "||lol.riotgames.com^", - "||lolstatic.com^", - "||lolusercontent.com^", - }, - "LINE": { "ServiceID": "line", - "Name": "LINE", - "Icon": ""), - "Rules": { - "||gcld-line.com^", - "||lin.ee^", - "||line-apps-beta.com^", - "||line-apps-rc.com^", - "||line-apps.com^", - "||line-cdn.net^", - "||line-scdn.net^", - "||line.biz^", - "||line.me^", - "||line.naver.jp^", - "||linecorp.com^", - "||linefriends.com.tw^", - "||linefriends.com^", - "||linegame.jp^", - "||linemobile.com^", - "||linemyshop.com^", - "||lineshoppingseller.com^", - "||linetv.tw^", - }, - "LinkedIn": { "ServiceID": "linkedin", - "Name": "LinkedIn", - "Icon": ""), - "Rules": { - "||bizographics.com^", - "||cs1404.wpc.epsiloncdn.net^", - "||cs767.wpc.epsiloncdn.net^", - "||l-0005.dc-msedge.net^", - "||l-0005.l-dc-msedge.net^", - "||l-0005.l-msedge.net^", - "||l-0015.l-msedge.net^", - "||licdn.cn^", - "||licdn.com^", - "||linkedin.at^", - "||linkedin.be^", - "||linkedin.cn^", - "||linkedin.com^", - "||linkedin.nl^", - "||linkedin.qtlcdn.com^", - "||lnkd.in^", - }, - "Lionsgate+": { "ServiceID": "lionsgateplus", - "Name": "Lionsgate+", - "Icon": ""), - "Rules": { - "||lionsgateplus.com^", - "||starz.com^", - }, - "Looke": { "ServiceID": "looke", - "Name": "Looke", - "Icon": ""), - "Rules": { - "||looke.com.br^", - "||ottvs.com.br^", - }, - "Mail.ru": { "ServiceID": "mail_ru", - "Name": "Mail.ru", - "Icon": ""), - "Rules": { - "||imgsmail.ru^", - "||mail.ru^", - "||mycdn.me^", - }, - "Mastodon": { "ServiceID": "mastodon", - "Name": "Mastodon", - "Icon": ""), - "Rules": { - "||aus.social^", - "||awscommunity.social^", - "||climatejustice.social^", - "||cupoftea.social^", - "||cyberplace.social^", - "||defcon.social^", - "||det.social^", - "||glasgow.social^", - "||h4.io^", - "||hachyderm.io^", - "||hessen.social^", - "||hostux.social^", - "||ieji.de^", - "||indieweb.social^", - "||infosec.exchange^", - "||ioc.exchange^", - "||kolektiva.social^", - "||livellosegreto.it^", - "||lor.sh^", - "||lou.lt^", - "||m.cmx.im^", - "||mas.to^", - "||masto.ai^", - "||masto.es^", - "||masto.nu^", - "||masto.pt^", - "||mastodon.au^", - "||mastodon.bida.im^", - "||mastodon.com.tr^", - "||mastodon.eus^", - "||mastodon.green^", - "||mastodon.ie^", - "||mastodon.iriseden.eu^", - "||mastodon.nl^", - "||mastodon.nu^", - "||mastodon.nz^", - "||mastodon.online^", - "||mastodon.online^", - "||mastodon.scot^", - "||mastodon.sdf.org^", - "||mastodon.social^", - "||mastodon.social^", - "||mastodon.top^", - "||mastodon.uno^", - "||mastodon.world^", - "||mastodon.zaclys.com^", - "||mastodonapp.uk^", - "||mastodont.cat^", - "||mastodontech.de^", - "||mastodontti.fi^", - "||mastouille.fr^", - "||mathstodon.xyz^", - "||metalhead.club^", - "||mindly.social^", - "||mstdn.ca^", - "||mstdn.jp^", - "||mstdn.party^", - "||mstdn.plus^", - "||mstdn.social^", - "||muenchen.social^", - "||muenster.im^", - "||nerdculture.de^", - "||noc.social^", - "||norden.social^", - "||nrw.social^", - "||o3o.ca^", - "||ohai.social^", - "||piaille.fr^", - "||pol.social^", - "||ravenation.club^", - "||rollenspiel.social^", - "||ruby.social^", - "||ruhr.social^", - "||sfba.social^", - "||socel.net^", - "||social.anoxinon.de^", - "||social.cologne^", - "||social.dev-wiki.de^", - "||social.linux.pizza^", - "||social.politicaconciencia.org^", - "||social.vivaldi.net^", - "||stranger.social^", - "||sueden.social^", - "||tech.lgbt^", - "||techhub.social^", - "||theblower.au^", - "||tkz.one^", - "||todon.eu^", - "||toot.aquilenet.fr^", - "||toot.community^", - "||toot.funami.tech^", - "||toot.io^", - "||toot.wales^", - "||troet.cafe^", - "||union.place^", - "||universeodon.com^", - "||urbanists.social^", - "||wien.rocks^", - "||wxw.moe^", - }, - "Mercado Libre": { "ServiceID": "mercado_libre", - "Name": "Mercado Libre", - "Icon": ""), - "Rules": { - "||mercadolibre.cl^", - "||mercadolibre.co.cr^", - "||mercadolibre.com.ar^", - "||mercadolibre.com.bo^", - "||mercadolibre.com.co^", - "||mercadolibre.com.do^", - "||mercadolibre.com.ec^", - "||mercadolibre.com.gt^", - "||mercadolibre.com.hn^", - "||mercadolibre.com.mx^", - "||mercadolibre.com.ni^", - "||mercadolibre.com.pa^", - "||mercadolibre.com.pe^", - "||mercadolibre.com.py^", - "||mercadolibre.com.sv^", - "||mercadolibre.com.uy^", - "||mercadolibre.com.ve^", - "||mercadolibre.com^", - "||mercadolivre.com.br^", - "||mlstatic.com^", - }, - "ServiceID": "shopping", - "Minecraft": { "ServiceID": "minecraft", - "Name": "Minecraft", - "Icon": ""), - "Rules": { - "||minecraft.net^", - "||minecraftservices.com^", - "||mojang.com^", - }, - "Nebula": { "ServiceID": "nebula", - "Name": "Nebula", - "Icon": ""), - "Rules": { - "||nebula.app^", - "||nebula.tv^", - }, - "Netflix": { "ServiceID": "netflix", - "Name": "Netflix", - "Icon": ""), - "Rules": { - "|netflix.com.edgesuite.net^", - "||dualstack.apiproxy-*.amazonaws.com^", - "||dualstack.ichnaea-web-*.amazonaws.com^", - "||fast.com^", - "||netflix.ca^", - "||netflix.com^", - "||netflix.net^", - "||netflixdnstest1.com^", - "||netflixdnstest10.com^", - "||netflixdnstest2.com^", - "||netflixdnstest3.com^", - "||netflixdnstest4.com^", - "||netflixdnstest5.com^", - "||netflixdnstest6.com^", - "||netflixdnstest7.com^", - "||netflixdnstest8.com^", - "||netflixdnstest9.com^", - "||netflixinvestor.com^", - "||netflixtechblog.com^", - "||nflxext.com^", - "||nflximg.com^", - "||nflximg.net^", - "||nflxsearch.net^", - "||nflxso.net^", - "||nflxvideo.net^", - }, - "Nintendo": { "ServiceID": "nintendo", - "Name": "Nintendo", - "Icon": ""), - "Rules": { - "||nintendo-europe.com^", - "||nintendo.be^", - "||nintendo.co.jp^", - "||nintendo.co.uk^", - "||nintendo.com.au^", - "||nintendo.com^", - "||nintendo.de^", - "||nintendo.es^", - "||nintendo.eu^", - "||nintendo.fr^", - "||nintendo.it^", - "||nintendo.jp^", - "||nintendo.net^", - "||nintendo.nl^", - "||nintendo.pt^", - "||nintendoswitch.cn^", - "||nintendowifi.net^", - }, - "Nvidia": { "ServiceID": "nvidia", - "Name": "Nvidia", - "Icon": ""), - "Rules": { - "||geforce.com^", - "||geforcenow.com^", - "||nvidia.cn^", - "||nvidia.com.global.ogslb.com^", - "||nvidia.com^", - "||nvidia.eu^", - "||nvidia.partners^", - "||nvidiagrid.net^", - "||nvidianews.com^", - "||tegrazone.com^", - }, - "ServiceID": "software", - "Odysee": { "ServiceID": "odysee", - "Name": "Odysee", - "Icon": ""), - "Rules": { - "||odycdn.com^", - "||odysee.com^", - "||odysee.live^", - "||odysee.tv^", - }, - "OK.ru": { "ServiceID": "ok", - "Name": "OK.ru", - "Icon": ""), - "Rules": { - "||insideok.ru^", - "||ok.games^", - "||ok.ru^", - "||okcdn.ru^", - "||oktech.ru^", - "||st.mycdn.me^", - }, - "Olvid": { "ServiceID": "olvid", - "Name": "Olvid", - "Icon": ""), - "Rules": { - "||olvid-attachment-chunks.s3.eu-west-3.amazonaws.com^", - "||olvid.io^", - }, - "ServiceID": "messenger", - "OnlyFans": { "ServiceID": "onlyfans", - "Name": "OnlyFans", - "Icon": ""), - "Rules": { - "||onlyfans.com^", - }, - "Origin": { "ServiceID": "origin", - "Name": "Origin", - "Icon": ""), - "Rules": { - "|cloudsync-prod.s3.amazonaws.com^", - "|origin-a.akamaihd.net^", - "|rtm.tnt-ea.com^", - "|ssl-lvlt.cdn.ea.com^", - "||accounts.ea.com^", - "||dawngate.com^", - "||eastore.com^", - "||lordofultima.com^", - "||origin.com^", - "||origin.tv^", - "||signin.ea.com^", - }, - "Paramount Plus": { "ServiceID": "paramountplus", - "Name": "Paramount Plus", - "Icon": ""), - "Rules": { - "||paramountplus.com^", - "||pplusstatic.com^", - }, - "Peacock TV": { "ServiceID": "peacock_tv", - "Name": "Peacock TV", - "Icon": ""), - "Rules": { - "||peacock.com^", - "||peacocktv.com^", - }, - "Pinterest": { "ServiceID": "pinterest", - "Name": "Pinterest", - "Icon": ""), - "Rules": { - "||pin.it^", - "||pinimg.com^", - "||pinterest.at^", - "||pinterest.be^", - "||pinterest.ca^", - "||pinterest.ch^", - "||pinterest.cl^", - "||pinterest.co.at^", - "||pinterest.co.in^", - "||pinterest.co.kr^", - "||pinterest.co.nz^", - "||pinterest.co.uk^", - "||pinterest.co^", - "||pinterest.com.au^", - "||pinterest.com.bo^", - "||pinterest.com.ec^", - "||pinterest.com.mx^", - "||pinterest.com.pe^", - "||pinterest.com.py^", - "||pinterest.com.uy^", - "||pinterest.com.vn^", - "||pinterest.com^", - "||pinterest.de^", - "||pinterest.dk^", - "||pinterest.ec^", - "||pinterest.engineering^", - "||pinterest.es^", - "||pinterest.fr^", - "||pinterest.hu^", - "||pinterest.id^", - "||pinterest.ie^", - "||pinterest.in^", - "||pinterest.info^", - "||pinterest.it^", - "||pinterest.jp^", - "||pinterest.kr^", - "||pinterest.mx^", - "||pinterest.nl^", - "||pinterest.nz^", - "||pinterest.pe^", - "||pinterest.ph^", - "||pinterest.pt^", - "||pinterest.ru^", - "||pinterest.se^", - "||pinterest.th^", - "||pinterest.tw^", - "||pinterest.uk^", - "||pinterest.vn^", - "||pinterestmail.com^", - }, - "PlayStation": { "ServiceID": "playstation", - "Name": "PlayStation", - "Icon": ""), - "Rules": { - "||gaikai.com", - "||playstation-cloud.com", - "||playstation-cloud.net", - "||playstation.com", - "||playstation.net", - "||scea.com", - "||sonyentertainmentnetwork.com", - "||station.sony.com", - }, - "Google Play Store": { "ServiceID": "playstore", - "Name": "Google Play Store", - "Icon": ""), - "Rules": { - "||play-fe.googleapis.com^", - "||play-lh.googleusercontent.com^", - "||prod-lt-playstoregatewayadapter-pa.googleapis.com^", - }, - "ServiceID": "software", - "Plenty of Fish": { "ServiceID": "plenty_of_fish", - "Name": "Plenty of Fish", - "Icon": ""), - "Rules": { - "||pof.com^", - }, - "ServiceID": "dating", - "Plex": { "ServiceID": "plex", - "Name": "Plex", - "Icon": ""), - "Rules": { - "||plex.bz^", - "||plex.direct^", - "||plex.tv^", - "||plexapp.com^", - }, - "Pluto TV": { "ServiceID": "pluto_tv", - "Name": "Pluto TV", - "Icon": ""), - "Rules": { - "||pluto.tv^", - }, - "Privacy": { "ServiceID": "privacy", - "Name": "Privacy", - "Icon": ""), - "Rules": { - "||privacy.com.br^", - }, - "ServiceID": "privacy", - "QQ": { "ServiceID": "qq", - "Name": "QQ", - "Icon": ""), - "Rules": { - "||qq-video.cdn-go.cn^", - "||qq.com^$denyallow=wx.qq.com|weixin.qq.com", - "||url.cn^", - }, - "Rakuten Viki": { "ServiceID": "rakuten_viki", - "Name": "Rakuten Viki", - "Icon": ""), - "Rules": { - "||m-content-viki.s.llnwi.net^", - "||viki.com^", - "||viki.io^", - }, - "Reddit": { "ServiceID": "reddit", - "Name": "Reddit", - "Icon": ""), - "Rules": { - "||redd.it^", - "||reddit.com^", - "||redditmail.com^", - "||redditmedia.com^", - "||redditstatic.com^", - }, - "Riot Games": { "ServiceID": "riot_games", - "Name": "Riot Games", - "Icon": ""), - "Rules": { - "||dradis-prod.rdatasrv.net^", - "||pvp.net^", - "||rgpub.io^", - "||riotcdn.com^", - "||riotcdn.net^", - "||riotgames.com^", - }, - "Roblox": { "ServiceID": "roblox", - "Name": "Roblox", - "Icon": ""), - "Rules": { - "||blox.com^", - "||rbx.cn^", - "||rbx.com^", - "||rbxadder.com^", - "||rbxcdn.com^", - "||rbxcdn.net^", - "||rbxinfra.com^", - "||rbxinfra.net^", - "||roblox.cn^", - "||roblox.com^", - "||roblox.qq.com^", - "||robloxcdn.com^", - "||robloxdev.cn^", - }, - "Rockstar Games": { "ServiceID": "rockstar_games", - "Name": "Rockstar Games", - "Icon": ""), - "Rules": { - "||rockstargames.com^", - "||rsg.sc^", - }, - "Samsung TV Plus": { "ServiceID": "samsung_tv_plus", - "Name": "Samsung TV Plus", - "Icon": ""), - "Rules": { - "||internetat.tv^", - "||samsung.wurl.tv^", - "||samsungcloud.tv^", - "||samsungtvplus.com^", - }, - "Shein": { "ServiceID": "shein", - "Name": "Shein", - "Icon": ""), - "Rules": { - "||shein.co.uk^", - "||shein.com^", - "||shein.se^", - "||sheinsz.ltwebstatic.com^", - }, - "ServiceID": "shopping", - "Shopee": { "ServiceID": "shopee", - "Name": "Shopee", - "Icon": ""), - "Rules": { - "||shopee.cl^", - "||shopee.cn^", - "||shopee.co.id^", - "||shopee.co.th^", - "||shopee.com.br^", - "||shopee.com.co^", - "||shopee.com.mx^", - "||shopee.com.my^", - "||shopee.com^", - "||shopee.es^", - "||shopee.fr^", - "||shopee.id^", - "||shopee.in^", - "||shopee.io^", - "||shopee.ph^", - "||shopee.sg^", - "||shopee.tw^", - "||shopee.vn^", - "||shopeemobile.com^", - "||shp.ee^", - }, - "ServiceID": "shopping", - "Signal": { "ServiceID": "signal", - "Name": "Signal", - "Icon": ""), - "Rules": { - "||signal.org^", - "||whispersystems.org^", - }, - "ServiceID": "messenger", - "Skype": { "ServiceID": "skype", - "Name": "Skype", - "Icon": ""), - "Rules": { - "||edge-skype-com.s-0001.s-msedge.net^", - "||skype-edf.akadns.net^", - "||skype.com^", - "||skype.net^", - "||skype^", - "||skypeassets.com^", - "||skypeassets.net^", - "||skypedata.akadns.net^", - }, - "ServiceID": "messenger", - "Slack": { "ServiceID": "slack", - "Name": "Slack", - "Icon": ""), - "Rules": { - "||slack-edge.com^", - "||slack-files.com ^", - "||slack-imgs.com^", - "||slack.com^", - "||slackb.com^", - }, - "ServiceID": "messenger", - "Snapchat": { "ServiceID": "snapchat", - "Name": "Snapchat", - "Icon": ""), - "Rules": { - "||impala-media-production.s3.amazonaws.com^", - "||sc-cdn.net^", - "||snap-dev.net^", - "||snapads.com^", - "||snapchat.com^", - "||snapkit.co", - }, - "SoundCloud": { "ServiceID": "soundcloud", - "Name": "SoundCloud", - "Icon": ""), - "Rules": { - "||sndcdn.com^", - "||soundcloud.com^", - }, - "Spotify": { "ServiceID": "spotify", - "Name": "Spotify", - "Icon": ""), - "Rules": { - "/_spotify-connect._tcp.local/", - "|audio-ak-spotify-com.akamaized.net^", - "|audio4-ak-spotify-com.akamaized.net^", - "|heads-ak-spotify-com.akamaized.net^", - "|heads4-ak-spotify-com.akamaized.net^", - "|spotify.com.edgesuite.net^", - "|spotify.map.fastly.net^", - "|spotify.map.fastlylb.net^", - "||byspotify.com^", - "||pscdn.co^", - "||scdn.co^", - "||spoti.fi^", - "||spotify-everywhere.com^", - "||spotify.com^", - "||spotify.design^", - "||spotifycdn.com^", - "||spotifycdn.net^", - "||spotifycharts.com^", - "||spotifycodes.com^", - "||spotifyforbrands.com^", - "||spotifyjobs.com^", - }, - "Spotify Video": { "ServiceID": "spotify_video", - "Name": "Spotify Video", - "Icon": ""), - "Rules": { - "||eip-ntt.video-ak.cdn.spotify.com.akahost.net^", - "||video-ak.cdn.spotify.com^", - "||video-akpcw-cdn-spotify-com.akamaized.net^", - "||video-akpcw.spotifycdn.com.edgesuite.net^", - "||video-akpcw.spotifycdn.com^", - "||video-fa.scdn.co^", - }, - "Steam": { "ServiceID": "steam", - "Name": "Steam", - "Icon": ""), - "Rules": { - "|steambroadcast.akamaized.net^", - "|steamcdn-a.akamaihd.net^", - "|steamcommunity-a.akamaihd.net^", - "|steamstore-a.akamaihd.net^", - "|steamusercontent-a.akamaihd.net^", - "|steamuserimages-a.akamaihd.net^", - "|steamvideo-a.akamaihd.net^", - "|xz.pphimalayanrt.com^", - "||csgo.wmsj.cn^", - "||dl.steam.clngaa.com^", - "||dl.steam.ksyna.com^", - "||dota2.wmsj.cn^", - "||playartifact.com^", - "||s.team^", - "||st.dl.bscstorage.net^", - "||st.dl.eccdnx.com^", - "||st.dl.pinyuncloud.com^", - "||steam-api.com^", - "||steam-chat.com^", - "||steamchina.com^", - "||steamcommunity.com^", - "||steamcontent.com^", - "||steamdeck.com^", - "||steamgames.com^", - "||steampipe.steamcontent.tnkjmec.com^", - "||steampowered.com.8686c.com^", - "||steampowered.com^", - "||steamserver.net^", - "||steamstatic.com.8686c.com^", - "||steamstatic.com^", - "||steamusercontent.com^", - "||underlords.com^", - "||valvesoftware.com^", - "||wmsjsteam.com^", - }, - "Telegram (Web)": { "ServiceID": "telegram", - "Name": "Telegram (Web)", - "Icon": ""), - "Rules": { - "||comments.app^", - "||contest.com^", - "||graph.org^", - "||quiz.directory^", - "||t.me^", - "||tdesktop.com^", - "||telega.one^", - "||telegra.ph^", - "||telegram-cdn.org^", - "||telegram.dog^", - "||telegram.me^", - "||telegram.org^", - "||telegram.space^", - "||telesco.pe^", - "||tg.dev^", - "||tx.me^", - "||usercontent.dev^", - }, - "ServiceID": "messenger", - "Temu": { "ServiceID": "temu", - "Name": "Temu", - "Icon": ""), - "Rules": { - "||kwcdn.com^", - "||temu.com^", - }, - "ServiceID": "shopping", - "Tidal": { "ServiceID": "tidal", - "Name": "Tidal", - "Icon": ""), - "Rules": {"||tidal.com^", - }, - "": {"ServiceID": "tiktok","Name": "TikTok","Icon": ""),"Rules": { - "||amemv.com^", - "||bdurl.com^", - "||bytecdn.cn^", - "||bytedance.map.fastly.net^", - "||bytedapm.com^", - "||bytegoofy.com^", - "||byteimg.com^", - "||byteoversea.com^", - "||bytescm.com^", - "||douyin.com^", - "||douyincdn.com^", - "||douyinliving.com^", - "||douyinpic.com^", - "||douyinstatic.com^", - "||douyinvod.com^", - "||huoshan.com^", - "||huoshanstatic.com^", - "||huoshanzhibo.com^", - "||muscdn.com^", - "||musical.ly^", - "||p16-tiktok-*.ibyteimg.com^", - "||p16-tiktokcdn-com.akamaized.net^", - "||pstatp.com^", - "||snssdk.com^", - "||tiktok.com^", - "||tiktokcdn-us.com^", - "||tiktokcdn.com^", - "||tiktokrow-cdn.com^", - "||tiktokv.com^", - "||ttlivecdn.com.c.bytefcdn-oversea.com^", - "||ttlivecdn.com^", - "||v*.tiktokcdn-eu.com^", - "||zijieapi.com^",},"": { - "ServiceID": "tinder", - "Name": "Tinder", - "Icon": ""), - "Rules": { - "||gotinder.com^", - "||tinder.com^", - "||tindersparks.com^", - }, - "ServiceID": "dating", - "Tumblr": { "ServiceID": "tumblr", - "Name": "Tumblr", - "Icon": ""), - "Rules": { - "||tumblr.com^", - }, - "Twitch": { "ServiceID": "twitch", - "Name": "Twitch", - "Icon": ""), - "Rules": { - "||ext-twitch.tv^", - "||jtvnw.net^", - "||ttvnw.net^", - "||twitch.tv^", - "||twitchcdn.net^", - "||twitchsvc.net^", - }, - "X (formerly Twitter)": { "ServiceID": "twitter", - "Name": "X (formerly Twitter)", - "Icon": ""), - "Rules": { - "||ads-twitter.com^", - "||cms-twdigitalassets.com^", - "||periscope.tv^", - "||pscp.tv^", - "||t.co^", - "||tellapart.com^", - "||tweetdeck.com^", - "||twimg.com^", - "||twitpic.com^", - "||twitter.biz^", - "||twitter.com^", - "||twitter.jp^", - "||twittercommunity.com^", - "||twitterflightschool.com^", - "||twitterinc.com^", - "||twitteroauth.com^", - "||twitterstat.us^", - "||twtrdns.net^", - "||twttr.com^", - "||twttr.net^", - "||twvid.com^", - "||vine.co^", - "||x.com^", - }, - "Ubisoft": { "ServiceID": "ubisoft", - "Name": "Ubisoft", - "Icon": ""), - "Rules": { - "||ubi.com^", - "||ubisoft.com^", - "||ubisoft.org^", - "||ubisoftconnect.com^", - }, - "Valorant": { "ServiceID": "valorant", - "Name": "Valorant", - "Icon": ""), - "Rules": { - "||playvalorant.com", - "||valorant.scd.riotcdn.net", - "||valorant.secure.dyn.riotcdn.net", - }, - "Viber": { "ServiceID": "viber", - "Name": "Viber", - "Icon": ""), - "Rules": { - "||viber.com^", - }, - "ServiceID": "messenger", - "Vimeo": { "ServiceID": "vimeo", - "Name": "Vimeo", - "Icon": ""), - "Rules": { - "*vod-adaptive.akamaized.net^", - "||livestream.com^", - "||vhx.tv^", - "||vhxqa1.com^", - "||vhxqa2.com^", - "||vhxqa3.com^", - "||vhxqa4.com^", - "||vhxqa6.com^", - "||vimeo-staging.com^", - "||vimeo-staging2.com^", - "||vimeo.com^", - "||vimeo.fr^", - "||vimeobusiness.com^", - "||vimeocdn.com^", - "||vimeogoods.com^", - "||vimeoondemand.com^", - "||vimeostatus.com^", - }, - "VK.com": { "ServiceID": "vk", - "Name": "VK.com", - "Icon": ""), - "Rules": { - "||mvk.com^", - "||userapi.com^", - "||vk-cdn.me^", - "||vk-cdn.net^", - "||vk-portal.net^", - "||vk.cc^", - "||vk.com^", - "||vk.design^", - "||vk.link^", - "||vk.me^", - "||vkcache.com^", - "||vkgo.app^", - "||vklive.app^", - "||vkmessenger.app^", - "||vkmessenger.com^", - "||vkontakte.ru^", - "||vkuseraudio.com^", - "||vkuserlive.net^", - "||vkuservideo.com^", - "||vkuservideo.net^", - }, - "Voot": { "ServiceID": "voot", - "Name": "Voot", - "Icon": ""), - "Rules": { - "||voot.com^", - }, - "Wargaming": { "ServiceID": "wargaming", - "Name": "Wargaming", - "Icon": ""), - "Rules": { - "||wargaming.com^", - "||wargaming.net^", - "||wgcdn.co^", - "||wgcrowd.io^", - "||worldoftanks.com^", - "||worldofwarplanes.com^", - "||worldofwarships.eu^", - "||wotblitz.com^", - }, - "WeChat": { "ServiceID": "wechat", - "Name": "WeChat", - "Icon": ""), - "Rules": { - "||wechat.com^", - "||weixin.qq.com.cn^", - "||weixin.qq.com^", - "||weixinbridge.com^", - "||wx.qq.com^", - }, - "ServiceID": "messenger", - "Weibo": { "ServiceID": "weibo", - "Name": "Weibo", - "Icon": ""), - "Rules": { - "||wbimg.cn^", - "||wbimg.com^", - "||wcdn.cn^", - "||weibo.cn^", - "||weibo.com.cn^", - "||weibo.com^", - "||weibocdn.com^", - }, - "WhatsApp": { "ServiceID": "whatsapp", - "Name": "WhatsApp", - "Icon": ""), - "Rules": { - "||wa.me^", - "||whatsapp-plus.info^", - "||whatsapp-plus.me^", - "||whatsapp-plus.net^", - "||whatsapp.cc^", - "||whatsapp.com^", - "||whatsapp.info^", - "||whatsapp.net^", - "||whatsapp.org^", - "||whatsapp.tv^", - "||whatsappbrand.com^", - }, - "ServiceID": "messenger", - "Wizz": { "ServiceID": "wizz", - "Name": "Wizz", - "Icon": ""), - "Rules": { - "||getwizz.io^", - "||wizz.chat^", - "||wizzapp.com^", - }, - "ServiceID": "dating", - "Xbox Live": { "ServiceID": "xboxlive", - "Name": "Xbox Live", - "Icon": ""), - "Rules": { - "||gamepass.com^", - "||xbox-global.ifs.windows.com^", - "||xbox-guide-public.rec.mp.microsoft.com^", - "||xbox.ipv6.microsoft.com^", - "||xboxab.com^", - "||xboxab.net^", - "||xboxlive.com^", - "||xboxservices.com^", - }, - "Xiaohongshu": { "ServiceID": "xiaohongshu", - "Name": "Xiaohongshu", - "Icon": ""), - "Rules": { - "||xhscdn.com^", - "||xhscdn.net^", - "||xiaohongshu.com.my^", - "||xiaohongshu.com^", - "||xiaohongshu.net^", - }, - "ServiceID": "shopping", - "YouTube": { "ServiceID": "youtube", - "Name": "YouTube", - "Icon": ""), - "Rules": { - "||ggpht.cn^", - "||ggpht.com^", - "||googlevideo.com^", - "||wide-youtube.l.google.com^", - "||withyoutube.com^", - "||youtu.be^", - "||youtube-nocookie.com^", - "||youtube-ui.l.google.com^", - "||youtube.ae^", - "||youtube.al^", - "||youtube.am^", - "||youtube.at^", - "||youtube.az^", - "||youtube.ba^", - "||youtube.be^", - "||youtube.bg^", - "||youtube.bh^", - "||youtube.bo^", - "||youtube.by^", - "||youtube.ca^", - "||youtube.cat^", - "||youtube.ch^", - "||youtube.cl^", - "||youtube.co.ae^", - "||youtube.co.at^", - "||youtube.co.cr^", - "||youtube.co.hu^", - "||youtube.co.id^", - "||youtube.co.il^", - "||youtube.co.in^", - "||youtube.co.jp^", - "||youtube.co.ke^", - "||youtube.co.kr^", - "||youtube.co.ma^", - "||youtube.co.nz^", - "||youtube.co.th^", - "||youtube.co.tz^", - "||youtube.co.ug^", - "||youtube.co.uk^", - "||youtube.co.ve^", - "||youtube.co.za^", - "||youtube.co.zw^", - "||youtube.co^", - "||youtube.com.ar^", - "||youtube.com.au^", - "||youtube.com.az^", - "||youtube.com.bd^", - "||youtube.com.bh^", - "||youtube.com.bo^", - "||youtube.com.br^", - "||youtube.com.by^", - "||youtube.com.co^", - "||youtube.com.do^", - "||youtube.com.ec^", - "||youtube.com.ee^", - "||youtube.com.eg^", - "||youtube.com.es^", - "||youtube.com.gh^", - "||youtube.com.gr^", - "||youtube.com.gt^", - "||youtube.com.hk^", - "||youtube.com.hn^", - "||youtube.com.hr^", - "||youtube.com.jm^", - "||youtube.com.jo^", - "||youtube.com.kw^", - "||youtube.com.lb^", - "||youtube.com.lv^", - "||youtube.com.ly^", - "||youtube.com.mk^", - "||youtube.com.mt^", - "||youtube.com.mx^", - "||youtube.com.my^", - "||youtube.com.ng^", - "||youtube.com.ni^", - "||youtube.com.om^", - "||youtube.com.pa^", - "||youtube.com.pe^", - "||youtube.com.ph^", - "||youtube.com.pk^", - "||youtube.com.pt^", - "||youtube.com.py^", - "||youtube.com.qa^", - "||youtube.com.ro^", - "||youtube.com.sa^", - "||youtube.com.sg^", - "||youtube.com.sv^", - "||youtube.com.tn^", - "||youtube.com.tr^", - "||youtube.com.tw^", - "||youtube.com.ua^", - "||youtube.com.uy^", - "||youtube.com.ve^", - "||youtube.com^", - "||youtube.cr^", - "||youtube.cz^", - "||youtube.de^", - "||youtube.dk^", - "||youtube.ee^", - "||youtube.es^", - "||youtube.fi^", - "||youtube.fr^", - "||youtube.ge^", - "||youtube.googleapis.com^", - "||youtube.gr^", - "||youtube.gt^", - "||youtube.hk^", - "||youtube.hr^", - "||youtube.hu^", - "||youtube.ie^", - "||youtube.in^", - "||youtube.iq^", - "||youtube.is^", - "||youtube.it^", - "||youtube.jo^", - "||youtube.jp^", - "||youtube.kr^", - "||youtube.kz^", - "||youtube.la^", - "||youtube.lk^", - "||youtube.lt^", - "||youtube.lu^", - "||youtube.lv^", - "||youtube.ly^", - "||youtube.ma^", - "||youtube.md^", - "||youtube.me^", - "||youtube.mk^", - "||youtube.mn^", - "||youtube.mx^", - "||youtube.my^", - "||youtube.ng^", - "||youtube.ni^", - "||youtube.nl^", - "||youtube.no^", - "||youtube.pa^", - "||youtube.pe^", - "||youtube.ph^", - "||youtube.pk^", - "||youtube.pl^", - "||youtube.pr^", - "||youtube.pt^", - "||youtube.qa^", - "||youtube.ro^", - "||youtube.rs^", - "||youtube.ru^", - "||youtube.sa^", - "||youtube.se^", - "||youtube.sg^", - "||youtube.si^", - "||youtube.sk^", - "||youtube.sn^", - "||youtube.soy^", - "||youtube.sv^", - "||youtube.tn^", - "||youtube.tv^", - "||youtube.ua^", - "||youtube.ug^", - "||youtube.uy^", - "||youtube.vn^", - "||youtube^", - "||youtubeeducation.com^", - "||youtubeembeddedplayer.googleapis.com^", - "||youtubefanfest.com^", - "||youtubegaming.com^", - "||youtubego.co.id^", - "||youtubego.co.in^", - "||youtubego.com.br^", - "||youtubego.com^", - "||youtubego.id^", - "||youtubego.in^", - "||youtubei.googleapis.com^", - "||youtubekids.com^", - "||youtubemobilesupport.com^", - "||yt.be^", - "||ytimg.com^", - }, - "YY": { "ServiceID": "yy", - "Name": "YY", - "Icon": ""), - "Rules": { - "||yy.com^", - }, - "Zhihu": { "ServiceID": "zhihu", - "Name": "Zhihu", - "Icon": ""), - "Rules": { - "||zhihu.com^", - "||zhimg.com^", - }, - } - } \ No newline at end of file diff --git a/build-windows.sh b/build-windows.sh deleted file mode 100755 index f070b7e..0000000 --- a/build-windows.sh +++ /dev/null @@ -1,5 +0,0 @@ -CGO_ENABLED=1 \ -GOOS=windows \ -GOARCH=amd64 \ -CC=gcc \ -go build -o dns-server.exe main.go diff --git a/config.json b/config.json index 8b73186..bd207b2 100644 --- a/config.json +++ b/config.json @@ -65,7 +65,7 @@ "name": "AdGuard DNS filter", "url": "https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt", "enabled": true, - "lastUpdateTime": "2025-12-21T10:46:36.629Z" + "lastUpdateTime": "2026-01-23T01:04:32.424Z" }, { "name": "Adaway Default Blocklist", @@ -150,7 +150,7 @@ "statsSaveInterval": 60 }, "gfwList": { - "ip": "", + "ip": "127.0.0.1", "content": "", "enabled": false }, diff --git a/data/gflist.txt b/data/gflist.txt new file mode 100644 index 0000000..9806b0e --- /dev/null +++ b/data/gflist.txt @@ -0,0 +1,2572 @@ +W0F1dG9Qcm94eSAwLjIuOV0KISBDaGVja3N1bTogQVg1c3RUZ3B2eDg0MkRBNkxk +dEtBdwohIEV4cGlyZXM6IDZoCiEgVGl0bGU6IEdGV0xpc3Q0TEwKISBHRldMaXN0 +IHdpdGggRVZFUllUSElORyBpbmNsdWRlZAohIExhc3QgTW9kaWZpZWQ6IFNhdCwg +MTMgU2VwIDIwMjUgMDQ6MTM6NDUgKzAwMDAKIQohIEhvbWVQYWdlOiBodHRwczov +L2dpdGh1Yi5jb20vZ2Z3bGlzdC9nZndsaXN0CiEgTGljZW5zZTogaHR0cHM6Ly93 +d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEudHh0CiEK +ISBHRldMaXN0IGlzIHVubGlrZWx5IHRvIGZ1bGx5IGNvbXByaXNlIHRoZSByZWFs +CiEgcnVsZXMgYmVpbmcgZGVwbG95ZWQgaW5zaWRlIEdGVyBzeXN0ZW0uIFdlIHRy +eQohIG91ciBiZXN0IHRvIGtlZXAgdGhlIGxpc3QgdXAgdG8gZGF0ZS4gUGxlYXNl +CiEgY29udGFjdCB1cyByZWdhcmRpbmcgVVJMIHN1Ym1pc3Npb24gLyByZW1vdmFs +LAohIG9yIHN1Z2dlc3Rpb24gLyBlbmhhbmNlbWVudCBhdCBpc3N1ZSB0cmFja2Vy +OgohIGh0dHBzOi8vZ2l0aHViLmNvbS9nZndsaXN0L2dmd2xpc3QvaXNzdWVzLy4K +CiEtLS0tLS0tLS00MDMvNDUxLzUwMy81MjAgJiBVUkwgUmVkaXJlY3RzLS0tLS0t +LS0tCnx8YmxvZ2phdi5uZXQKfHx6b29taW5mby5jb20KfHxwdHd4ei5jb20KfHxt +aXVpcG9sc2thLnBsCnx8cGlhb3RpYS5jb20KfHx3dW5kZXJncm91bmQuY29tCnx8 +NTAwcHguY29tCnx8NTAwcHgub3JnCiEtLWVoZW50YWkKfGh0dHA6Ly84NS4xNy43 +My4zMS8KIS0tfHxhZG9yYW1hLmNvbQp8fGFmcmVlY2F0di5jb20KfHxhZ25lc2Iu +ZnIKfHxhaXJpdGlsaWJyYXJ5LmNvbQp8fGFiZW1hdHYuYWthbWFpemVkLm5ldAp8 +fGxpbmVhci1hYmVtYXR2LmFrYW1haXplZC5uZXQKfHx2b2QtYWJlbWF0di5ha2Ft +YWl6ZWQubmV0Cnx8YWtpYmEtd2ViLmNvbQp8fGFsdHJlYy5jb20KfHxhbWF6b252 +aWRlby5jb20KfHxhbmdlbGEtbWVya2VsLmRlCnx8YW5nb2xhLm9yZwp8fGFudGhy +b3BpYy5jb20KfHxhcGFydG1lbnRyYXRpbmdzLmNvbQp8fGFwYXJ0bWVudHMuY29t +Cnx8YXJlbmEudGFpcGVpCnx8YXNzZXRzLmJ3YnguaW8KfHxhc3NpbXAub3JnCnx8 +YXRoZW5hZWl6b3UuY29tCnx8YmFua21vYmlsZXZpYmUuY29tCnx8YmFub3J0ZS5j +b20KfHxiZWVnLmNvbQp8fGdsb2JhbC5iaW5nLmNvbQp8fGJvb2t0b3BpYS5jb20u +YXUKfHxib3lzbWFzdGVyLmNvbQp8fGJ5bmV0LmNvLmlsCnx8YnlydXQub3JnCnx8 +Y2FyZmF4LmNvbQouY2FzaW5vYmVsbGluaS5jb20KfHxjYXNpbm9iZWxsaW5pLmNv +bQp8fGNlbnRhdXJvLmNvbS5icgp8fGNob2JpdC5jYwp8fGNpY2lhaS5jb20KfHxj +aWNpLmNvbQp8fGNsYXVkZS5haQp8fGNsZWFyc3VyYW5jZS5jb20KfHxjbmJldGEu +Y29tLnR3Cnx8Y291bnRlci5zb2NpYWwKfHxjb3N0Y28uY29tCnx8Y296ZS5jb20K +fHxjcm9zc2ZpcmUuY28ua3IKfHxjcnVuY2h5cm9sbC5jb20KfHxkMnBhc3MuY29t +Cnx8ZGFycGEubWlsCnx8ZGF3YW5naWRjLmNvbQp8fGRlZXplci5jb20KfHxkZXNp +cHJvLmRlCnx8ZGlzY29yZC5jb20KfHxkaXNjb3JkLmdnCnx8ZGlzY29yZGFwcC5j +b20KfHxkaXNjb3JkYXBwLm5ldAp8fGRpc2guY29tCnxodHRwOi8vaW1nLmRsc2l0 +ZS5qcC8KfHxkbTUzMC5uZXQKfHxkbWh5Lm9yZwp8fGRtbS5jby5qcAp8aHR0cDov +L3d3dy5kbW0uY29tL25ldGdhbWUKfHxkbnZvZC50dgp8fGR1Ym94LmNvbQp8fGR2 +ZHBhYy5jb20KfHxlZXN0aS5lZQp8fGVzdXJhbmNlLmNvbQouZXhwZWt0LmNvbQp8 +fGV4cGVrdC5jb20KLmV4dG1hdHJpeC5jb20KfHxleHRtYXRyaXguY29tCnx8ZmFr +a3UubmV0Cnx8ZmFzdHBpYy5ydQp8fGZpbGVzb3IuY29tCnx8ZmluYW5jZXR3aXR0 +ZXIuY29tCnx8ZmxpcGJvYXJkLmNvbQp8fGZsaXR0by5jb20KfHxmbmFjLmJlCnx8 +Zm5hYy5jb20KfHxmdW5reWltZy5jb20KfHxmeG5ldHdvcmtzLmNvbQp8fGctYXJl +YS5vcmcKfHxnZXR0eWltYWdlcy4qCkBAfHxnZXR0eWltYWdlcy5jb20KQEB8fGdl +dHR5aW1hZ2VzLmNuCnx8Z2V0dXBsb2FkZXIuY29tCnx8Z2hpZHJhLXNyZS5vcmcK +IS0tfGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9ncmFtdGhpbmsvemhhbwohLS18aHR0 +cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3Byb2dyYW10aGluay96aGFv +Cnx8Z2xhc3M4LmV1Cnx8Z2x5cGUuY29tCnx8Z28xNDEuY29tCnx8aGF1dGVsb29r +LmNvbQp8fGhhdXRlbG9va2Nkbi5jb20KfHx3ZWdvLmhlcmUuY29tCnx8Z3Jvay5j +b20KfHxobW9lZ2lybC5jb20KfHxobXZkaWdpdGFsLmNhCnx8aG12ZGlnaXRhbC5j +b20KfHxob21lZGVwb3QuY29tCnx8aG9vdmVycy5jb20KfHxodWx1LmNvbQp8fGh1 +bHVpbS5jb20KfGh0dHA6Ly9zZWN1cmUuaHVzdGxlci5jb20KfGh0dHA6Ly9odXN0 +bGVyY2FzaC5jb20KfGh0dHA6Ly93d3cuaHVzdGxlcmNhc2guY29tCnx8aHlicmlk +LWFuYWx5c2lzLmNvbQp8fGNkbiouaS1zY21wLmNvbQp8fGlsYmUuY29tCnx8aWxv +dmVsb25ndG9lcy5jb20KfGh0dHA6Ly9pbWdtZWdhLmNvbS8qLmdpZi5odG1sCnxo +dHRwOi8vaW1nbWVnYS5jb20vKi5qcGcuaHRtbAp8aHR0cDovL2ltZ21lZ2EuY29t +LyouanBlZy5odG1sCnxodHRwOi8vaW1nbWVnYS5jb20vKi5wbmcuaHRtbAp8fGlt +bGl2ZS5jbwp8fGphdmh1Yi5uZXQKfHxqYXZodWdlLmNvbQouamF2bGlicmFyeS5j +b20KfHxqYXZsaWJyYXJ5LmNvbQp8fGpjcGVubmV5LmNvbQp8fGppbXMubmV0Cnx8 +dHYuanRiYy5qb2lucy5jb20KfHxqdWt1am8tY2x1Yi5jb20KfHxqdWxpZXBvc3Qu +Y29tCnx8a2F3YWlpa2F3YWlpLmpwCnx8a2VuZGF0aXJlLmNvbQp8fGtoYXRyaW1h +emEub3JnCnx8a2tib3guY29tCnx8bGVpc3VyZXByby5jb20KfHxsaWZlbWlsZXMu +Y29tCnx8bGloLmtnCnx8bG9uZ3RvZXMuY29tCnx8bG92ZXR2c2hvdy5jb20KfHxs +cHNnLmNvbQp8fGxyZnouY29tCnxodHRwOi8vd3d3Lm0tc3BvcnQuY28udWsKfHxt +YWNnYW1lc3RvcmUuY29tCnx8bWFkb25uYS1hdi5jb20KfHxtYW5kaWFudC5jb20K +fHxtYW5nYWZveC5jb20KfHxtYW5nYWZveC5tZQp8fG1hbnRhLmNvbQp8fG1hdG9t +ZS1wbHVzLmNvbQp8fG1hdG9tZS1wbHVzLm5ldAp8fG1hdHR3aWxjb3gubmV0Cnx8 +bWV0YXJ0aHVudGVyLmNvbQp8fG1meG1lZGlhLmNvbQp8fG1pcmFoZXplLm9yZwp8 +fG1vamltLmNvbQp8fGtiLm1vbml0b3J3YXJlLmNvbQp8fG1vbnN0ZXIuY29tCnx8 +bW9vZHl6LmNvbQp8fG1vb25iaW5nby5jb20KfHxtb3MucnUKfHxhZGRvbnMubW96 +aWxsYS5vcmcvKi0qL2ZpcmVmb3gvYWRkb24vdWJsb2NrLW9yaWdpbi8qCnx8YWRk +b25zLm1vemlsbGEub3JnL2ZpcmVmb3gvZG93bmxvYWRzL2ZpbGUvKi91YmxvY2tf +b3JpZ2luLSoueHBpCnx8bXNoYS5nb3YKfHx3d3cubXNuLmNvbQp8fG11enUudHYK +fHxtdmcuanAKLm15YmV0LmNvbQp8fG15YmV0LmNvbQp8fG15cGlrcGFrLmNvbQp8 +fG5hdGlvbndpZGUuY29tCnxodHRwOi8vd3d3Lm5iYy5jb20vbGl2ZQp8fG5lby1t +aXJhY2xlLmNvbQp8fG5ldGZsaXguY29tCnx8bmV0ZmxpeC5uZXQKfHxuZmx4aW1n +LmNvbQp8fG5mbHhpbWcubmV0Cnx8bmZseGV4dC5jb20KfHxuZmx4c28ubmV0Cnx8 +bmZseHZpZGVvLm5ldAp8fG5pYy5nb3YKfGh0dHA6Ly9tby5uaWdodGxpZmUxNDEu +Y29tCnx8cHVycG9zZS5uaWtlLmNvbQp8fG5veGluZmx1ZW5jZXIuY29tCkBAfHxj +bi5ub3hpbmZsdWVuY2VyLmNvbQp8fG5vcmRzdHJvbS5jb20KfHxub3Jkc3Ryb21p +bWFnZS5jb20KfHxub3Jkc3Ryb21yYWNrLmNvbQp8fG5vdHRpbmdoYW1wb3N0LmNv +bQp8fG5wc2Jvb3N0LmNvbQp8fG50ZHR2LmN6Cnx8bnVzYXRyaXAuY29tCnx8bnV1 +dmVtLmNvbQp8fGJicy5ueWluZm9yLmNvbQp8fG9sZWhkdHYuY29tCnx8b21uaTcu +anAKfHxvbmFwcC5jb20KIS0tV2UgYXJlIGNvbmZ1c2VkIGFzIHdlbGwKfHxvbnRy +YWMuY29tCkBAfGh0dHA6Ly9ibG9nLm9udHJhYy5jb20KfHxvcGVuYWkuY29tCnx8 +cGFuZG9yYS5jb20KLnBhbmRvcmEudHYKfHxwYXJrYW5za3kuY29tCnx8cGhtc29j +aWV0eS5vcmcKfGh0dHA6Ly8qLnBpbWcudHcvCnx8cG9kY2FzdC5jbwp8fHBvcGFp +LnBybwp8fHByaW1ldmlkZW8uY29tCnx8cHJveWVjdG9jbHViZXMuY29tCnx8cHVy +ZTE4LmNvbQp8fHB5dG9yY2gub3JnCnx8cXEuY28uemEKfHxyMTguY29tCnxodHRw +Oi8vcmFkaWtvLmpwCnx8cmFtY2l0eS5jb20uYXUKfHxyYXRleW91cm11c2ljLmNv +bQp8fHJkLmNvbQp8aHR0cHM6Ly9yaXNldXAubmV0Cnx8c2FkaXN0aWMtdi5jb20K +fHxpc2Muc2Fucy5lZHUKfGh0dHA6Ly9jZG4qLnNlYXJjaC54eHgvCnx8c2hpa3No +YS5jb20KfHxzbGFja2VyLmNvbQp8fHNtLW1pcmFjbGUuY29tCnx8c295bGVudG5l +d3Mub3JnCnx8c3BvdGlmeS5jb20KfHxzcHJlYWRzaGlydC5lcwp8fHNwcmluZ2Jv +YXJkcGxhdGZvcm0uY29tCnx8c3ByaXRlLm9yZwpAQHxodHRwOi8vc3RvcmUuc3By +aXRlLm9yZwp8fHN1cGVycGFnZXMuY29tCnx8c3dhZ2J1Y2tzLmNvbQp8fHN3aXRj +aDEuanAKfHx0YXBhbndhcC5jb20KfHxnc3AudGFyZ2V0LmNvbQp8fGxvZ2luLnRh +cmdldC5jb20KIS0tQEB8fGludGwudGFyZ2V0LmNvbQp8fHJjYW0udGFyZ2V0LmNv +bQp8fHRlY2huZXdzLnR3Cnx8dGVyYWJveC5jb20KfHx0aGlua2dlZWsuY29tCnx8 +dGhlYm9keXNob3AtdXNhLmNvbQp8fHRtYS5jby5qcAp8fHRyYWNmb25lLmNvbQp8 +fHRyeWhlYXJ0LmpwCnx8dHVybnRhYmxlLmZtCnx8dHdlcmtpbmdidXR0LmNvbQp8 +fHVsb3AubmV0Cnx8dXVrYW5zaHUuY29tCnx8dmVnYXNyZWQuY29tCnx8dmV2by5j +b20KfHx2aXAtZW50ZXJwcmlzZS5jb20KfGh0dHA6Ly92aXUudHYvY2gvCnxodHRw +Oi8vdml1LnR2L2VuY29yZS8KfHx2bXBzb2Z0LmNvbQp8fHdhbnotZmFjdG9yeS5j +b20KfHxzc2wud2VicGFjay5kZQp8fHdlZWJseS5jb20KfHx3aGVyZXRvd2F0Y2gu +Y29tCnx8d2luZ2FtZXN0b3JlLmNvbQp8fHdpemNyYWZ0cy5uZXQKfHx3b3doZWFk +LmNvbQp8fHZvZC53d2UuY29tCnx8eGZpbml0eS5jb20KfHx4aWFvbWkuZXUKfHx5 +b3V3aW4uY29tCnx8eXRuLmNvLmtyCnx8emFtaW1nLmNvbQp8fHphdHRvby5jb20K +fHx6aW0udm4KfHx6b3pvdG93bi5jb20KCiEjIyMjIyMjIyMjIyMjI0dlbmVyYWwg +TGlzdCBTdGFydCMjIyMjIyMjIyMjIyMjIwohLS0tLS0tLS0tLS0tLS0tLS0tLUNv +aW4gUG9vbC0tLS0tLS0tLS0tLS0tLS0tLS0KfHxjM3Bvb2wuY29tCnx8dW5taW5l +YWJsZS5jb20KfHw2NjZwb29sLmNuCnx8YW50cG9vbC5jb20KfHxjcmF6eXBvb2wu +b3JnCnx8Y3J1eHBvb2wuY29tCnx8bWluaW5ncG9vbGh1Yi5jb20KfHxodW9iaXBv +b2wuY29tCnx8cG9vbGJpbmFuY2UuY29tCnx8aGl2ZW9uLm5ldAp8fHNwYXJrcG9v +bC5jb20KfHxmbHlwb29sLm9yZwp8fG5hbm9wb29sLm9yZwp8fHhucG9vbC5jb20K +fHxiZWVwb29sLmNvbQp8fHpoaXpodS50b3AKfHxzcGlkZXJwb29sLmNvbQp8fHV1 +cG9vbC5jbgp8fGZsZXhwb29sLmlvCnx8YmVlcG9vbC5vcmcKfHxkcG9vbC50b3AK +fHxva3Bvb2wubWUKfHxiaW5hbmNlemguY2MKfHxidGMuY29tCnx8ci1wb29sLm5l +dAp8fHctcG9vbC5jb20KCiEtLS0tLS0tLS0tLS0tLS0tLS0tUHVyZSBJUC0tLS0t +LS0tLS0tLS0tLS0tLS0tLQoxNC4xMDIuMjUwLjE4CjE0LjEwMi4yNTAuMTkKNTAu +Ny4zMS4yMzA6ODg5OAoxNzQuMTQyLjEwNS4xNTMKNjkuNjUuMTkuMTYwCgohLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLUlETi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHx4 +bi0tMTF4czg2Zi5pY3UKfHx4bi0tNGdxMTcxcC5jb20KfHx4bi0tY3pxNzVwdnYx +YWo1Yy5vcmcKfHx4bi0taTJydThxMnFnLmNvbQp8fHhuLS1ub3NzNDNpLmNvbQp8 +fHhuLS1vaXEuY2MKfHx4bi0tcDhqOWEwZDljOWEueG4tLXE5anliNGMKfHx4bi0t +OXByNjJyMjRhLmNvbQpAQC9eaHR0cHM/OlwvXC8oPz0uKj8oMngzfG5pNXxqNW8p +KVthLXowLTkuLV0rXC54bi0tbmdzdHItbHJhOGpcLmNvbSQKfHx4bi0tbmdzdHIt +bHJhOGouY29tCgohLS0tLS0tLS0tLS0tLS0tLS1ETlMgUG9pc29uaW5nLS0tLS0t +LS0tLS0tLS0tLS0KIS0tLUFtYXpvbi0tLQohLXx8Y2RuLWltYWdlcy5tYWlsY2hp +bXAuY29tCnx8YWJlYm9va3MuY29tCnxodHRwczovLyouczMuYW1hem9uYXdzLmNv +bQoKfHw5Y2FjaGUuY29tCnx8OWdhZy5jb20KfHxhZ3JvLmhrCnx8c2hhcmUuYW1l +cmljYS5nb3YKfHxhcGttaXJyb3IuY29tCnx8YXJ0ZS50dgp8fGFydHN0YXRpb24u +Y29tCnx8YmFuZ2RyZWFtLnNwYWNlCnx8YmVoYW5jZS5uZXQKfHxiaXJkLnNvCnx8 +Yml0dGVyd2ludGVyLm9yZwp8fGJubi5jbwp8fGJ1c2luZXNzaW5zaWRlci5jb20K +fHxid2d5aHcuY29tCnx8Y2FzdGJveC5mbQp8fGNseXAuaXQKfHxjbWNuLm9yZwp8 +fGNteC5pbQp8fGRhaWx5dmlldy50dwp8fGRhdW0ubmV0Cnx8ZGVwb3NpdHBob3Rv +cy5jb20KfHxkaXNjb25uZWN0Lm1lCnx8ZG9jdW1lbnRpbmdyZWFsaXR5LmNvbQp8 +fGRvdWJpYmFja3VwLmNvbQp8fGVuY3ljbG9wZWRpYS5jb20KfHxmYW5nZXFpYW5n +LmNvbQp8fGZhbnFpYW5nZGFuZy5jb20KfHxmZWVkeC5uZXQKfHxmbHl6eTIwMDUu +Y29tCnx8Zm9yZWlnbnBvbGljeS5jb20KfHxmcmVlLXNzLnNpdGUKfHxmcmVlaG9u +Z2tvbmcub3JnCnx8YmxvZy5mdWNrZ2Z3MjMzLm9yZwp8fGcwdi5zb2NpYWwKfHxn +bG9iYWx2b2ljZXMub3JnCnx8Z2xvcnlzdGFyLm1lCnx8Z29yZWdyaXNoLmNvbQp8 +fGhhbmltZS50dgp8fGhiby5jb20KfHxzcGFjZXMuaGlnaHRhaWwuY29tCnx8aGtn +YWxkZW4uY29tCnx8aGtnb2xkZW4uY29tCnx8aHVkc29uLm9yZwp8fGlwZnMuaW8K +fHxqYXBhbnRpbWVzLmNvLmpwCnx8amlqaS5jb20KfHxqaW50aWFuLm5ldAp8fGpp +bnguY29tCnx8am9pbm1hc3RvZG9uLm9yZwp8fGxpYW5nemhpY2h1YW5tZWkuY29t +Cnx8bGlnaHRpLm1lCnx8bGlnaHR5ZWFydnBuLmNvbQp8fGxpaGtnLmNvbQp8fGxp +bmUtc2Nkbi5uZXQKfHxpLmxpdGhpdW0uY29tCnx8Y2xvdWQubWFpbC5ydQp8fGNk +bi1pbWFnZXMubWFpbGNoaW1wLmNvbQp8fG1hc3RvZG9uLmNsb3VkCnx8bWFzdG9k +b24uaG9zdAp8fG1hc3RvZG9uLnNvY2lhbAp8fG1hc3RvZG9uLnh5egp8fG1hdHRl +cnMubmV3cwp8fG1lLm1lCnx8bWV0YXJ0LmNvbQp8fG1vaHUuY2x1Ygp8fG1zYS1p +dC5vcmcKfHxnb28ubmUuanAKfHxuaWtrZWkuY29tCnx8bml0dGVyLmNjCnx8bml0 +dGVyLm5ldAp8fG5pdS5tb2UKfHxub3cuY29tCnx8b3BlbnZwbi5vcmcKfHxvbmVq +YXYuY29tCnx8cGFzdGUuZWUKfHxteS5wY2xvdWQuY29tCnx8cGljYWNvbWljLmNv +bQp8fHBpbmNvbmcucm9ja3MKfHxwaXhpdi5uZXQKfHxwaXhpdi5vcmcKfHxwaXhp +dnNrZXRjaC5uZXQKfHxwb3RhdG8uaW0KfHxwcmVtcHJveHkuY29tCnx8cHJpc20t +YnJlYWsub3JnCnx8cHJvdG9uLm1lCnx8cHJvdG9udnBuLmNvbQp8fGFwaS5wdXJl +YXBrLmNvbQp8fHF1b3JhLmNvbQp8fHF1b3JhY2RuLm5ldAp8fHF6LmNvbQp8fGNk +bi5zZWF0Z3VydS5jb20KfHxyZWRkLml0Cnx8cmVkZGl0c3BhY2UuY29tCnx8cmVk +ZGl0LmNvbQp8fHJlZGRpdGhlbHAuY29tCi5yZWRkaXRsaXN0LmNvbQp8aHR0cDov +L3JlZGRpdGxpc3QuY29tCnx8cmVkZGl0bWVkaWEuY29tCnx8cmVkZGl0c3RhdGlj +LmNvbQohLS1kZWZ1bmN0Cnx8cml4Y2xvdWQuY29tCnx8cml4Y2xvdWQudXMKfHxy +c2RsbW9uaXRvci5jb20KfHxzaGFkb3dzb2Nrcy5iZQp8fHRuMS5zaGVtYWxlei5j +b20KfHx0bjIuc2hlbWFsZXouY29tCnx8dG4zLnNoZW1hbGV6LmNvbQp8fHN0YXRp +Yy5zaGVtYWxlei5jb20KfHxzaXgtZGVncmVlcy5pbwp8fHNvZnRmYW1vdXMuY29t +Cnx8c29zcmVhZGVyLmNvbQp8fHNzcGFuZWwubmV0Cnx8c3VwY2hpbmEuY29tCnx8 +dGVkZHlzdW4uY29tCnx8dGV4dG5vdy5tZQp8fHRpbmV5ZS5jb20KfHx0b3AxMHZw +bi5jb20KfHx0dWJlcG9ybmNsYXNzaWMuY29tCnx8dWt1LmltCnx8dW5zZWVuLmlz +Cnx8Y24udXB0b2Rvd24uY29tCnx8dXJhYmFuLm1lCnx8dnJzbWFzaC5jb20KfHx2 +dWx0cnlody5jb20KfHxzY2FjaGUudnp3LmNvbQp8fHNjYWNoZTEudnp3LmNvbQp8 +fHNjYWNoZTIudnp3LmNvbQp8fHNzNy52encuY29tCnx8c3NyLnRvb2xzCnx8c3Rl +ZW1pdC5jb20KfHx0YWl3YW5qdXN0aWNlLm5ldAp8fHRpbmMtdnBuLm9yZwp8fHUx +NS5pbmZvCnx8d2FzaGluZ3RvbnBvc3QuY29tCnx8d2Vuemhhby5jYQp8fHdoYXRz +b253ZWliby5jb20KfHx3aXJlLmNvbQp8fHhtLmNvbQp8fHh1ZWh1YS51cwp8fHll +cy1uZXdzLmNvbQp8fHlpZ2VuaS5jb20KfHx5b3UtZ2V0Lm9yZwp8fHp6Y2xvdWQu +bWUKCiEtLS1EaWdpdGFsIEN1cnJlbmN5IEV4Y2hhbmdlKENSWVBUTyktLS0KfHxh +ZXguY29tCnx8YWxsY29pbi5jb20KfHxhZGNleC5jb20KfHxiY2V4LmNhCnx8Ymli +b3guY29tCnx8YmlnLm9uZQp8fGJpZ29uZS5jb20KfHxiaW5hbmNlLmNvbQp8fGJp +dC16LmNvbQp8fGJpdHouYWkKfHxiaXRiYXkubmV0Cnx8Yml0Y29pbndvcmxkLmNv +bQp8fGJpdGZpbmV4LmNvbQp8fGJpdGh1bWIuY29tCnx8Yml0bWV4LmNvbQp8fGJu +YnN0YXRpYy5jb20KfHxidGM5OC5jb20KfHxidGNiYW5rLmJhbmsKfHxidGN0cmFk +ZS5pbQp8fGJ5Yml0LmNvbQp8fGMyY3guY29tCnx8Y2hhb2V4LmNvbQp8fGNvYmlu +aG9vZC5jb20KfHxjb2luYmFzZS5jb20KfHxjb2luYmVuZS5jb20KfHxjb2luZXgu +Y29tCiEtLXxodHRwczovL3d3dy5jb2luZXhjaGFuZ2UuaW8vCnx8Y29pbmdlY2tv +LmNvbQp8fGNvaW5naS5jb20KfHxjb2lubWFya2V0Y2FwLmNvbQp8fGNvaW5yYWls +LmNvLmtyCnx8Y29pbnRpZ2VyLmNvbQp8fGNvaW50b2JlLmNvbQp8fGNvaW51dC5j +b20KfHxkaXNjb2lucy5jb20KfHxkcmFnb25leC5pbwp8fGVidGNiYW5rLmNvbQp8 +fGV0aGVyZGVsdGEuY29tCnx8ZXRoZXJtaW5lLm9yZwp8fGV0aGVyc2Nhbi5pbwp8 +fGV4bW8uY29tCnx8ZXhyYXRlcy5tZQp8fGYycG9vbC5jb20KfHxmYXRidGMuY29t +Cnx8ZnR4LmNvbQp8fGdhdGUuaW8KfHxnYXRlY29pbi5jb20KfHxoYmcuY29tCnx8 +aGl0YnRjLmNvbQp8fGhvdGNvaW4uY29tCnx8aHVvYmkuY28KfHxodW9iaS5jb20K +fHxodW9iaS5tZQohLS18fGh1b2JpLmxpCnx8aHVvYmkucHJvCnx8aHVvYmkuc2MK +fHxodW9iaXByby5jb20KfHxieC5pbi50aAp8fGpleC5jb20KfHxrZXguY29tCnx8 +a3Jha2VuLmNvbQp8fGtzcGNvaW4uY29tCnx8a3Vjb2luLmNvbQp8fGxiYW5rLmlu +Zm8KfHxsaXF1aWRpdHl0cC5jb20KfHxsaXZlY29pbi5uZXQKfHxsb2NhbGJpdGNv +aW5zLmNvbQp8fG1lcmNhdG94LmNvbQp8fG9hbmRhLmNvbQp8fG9ieXRlLm9yZwp8 +fG9leC5jb20KfHxva2V4LmNvbQp8fG9reC5jb20KfHxvcGVuc2VhLmlvCnx8b3Rj +YnRjLmNvbQp8fHBheGZ1bC5jb20KfHxwb29saW4uY29tCnx8c2ltcGxlc3dhcC5p +bwp8fHNvbHYuZmluYW5jZQp8fHRvcGJ0Yy5jb20KfHx0cm9uc2Nhbi5vcmcKfHx4 +YnRjZS5jb20KfHx5b2JpdC5uZXQKfHx6Yi5jb20KCiEtLS0tLS0tLS0tLS0tLS0t +RnJhdWRzICYgU2NhbXMtLS0tLS0tLS0tLS0tLS0tLQohIS0tLUNvbnRlbnQgRmFy +bShmYWtlIDUwMCBlcnJvciktLS0KfHxyZWFkMDEuY29tCnx8a2tuZXdzLmNjCgpj +aGluYS1tbW0uanAubmV0Ci5sc3hzenpnLmNvbQouY2hpbmEtbW1tLm5ldAp8fGNo +aW5hLW1tbS5uZXQKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLS1Hcm91cHMtLS0tLS0t +LS0tLS0tLS0tLS0tLQohIS0tLU1hc3RlcmRvbi0tLQp8fGJnbWUubWUKfHxvM28u +Y2EKfHxnbzUuZGV2Cnx8bWUubnMuY2kKfHxtb3Jlc2NpLnNhbGUKfHxzb2NpYWwu +ZWR1LmNpCnx8bXN0ZG4uc29jaWFsCnx8ZG91Y2hpLnNwYWNlCnx8c2xhc2hpbmUu +b25sCnx8c29jaWFsLmRhdGFsYWJvdXIuY29tCnx8bWFzdG9kb24ub25saW5lCgoh +IS0tLUFmcmFpZCBGcmVlRE5TLS0tCi5hbGxvd2VkLm9yZwoubm93LmltCgohIS0t +LUFtYXpvbi0tLQp8fHBheW1lbnRzLWpwLmFtYXpvbi5jb20KfHxhbWF6b24uY28u +anAKfHxzMy1hcC0qLmFtYXpvbmF3cy5jb20KfHxzMy5ldS1jZW50cmFsLTEuYW1h +em9uYXdzLmNvbQp8fHMzLWV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tCnx8czMu +dXMtZWFzdC0xLmFtYXpvbmF3cy5jb20KfHxzMy1hcC1ub3J0aGVhc3QtMi5hbWF6 +b25hd3MuY29tCnx8czMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbQp8fHMz +LWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20KfHxzMy1hcC1zb3V0aGVhc3Qt +MS5hbWF6b25hd3MuY29tCnx8czMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNv +bQoKISEtLS1BT0wtLS0KdmlkZW8uYW9sLmNhL3ZpZGVvLWRldGFpbAp2aWRlby5h +b2wuY28udWsvdmlkZW8tZGV0YWlsCnZpZGVvLmFvbC5jb20KfHx2aWRlby5hb2wu +Y29tCnx8c2VhcmNoLmFvbC5jb20Kd3d3LmFvbG5ld3MuY29tCgohIS0tLUF2TW9v +LS0tCi5hdm1vLnB3CiEtLXxodHRwOi8vYXZtby5wdwouYXZtb28uY29tCnxodHRw +Oi8vYXZtb28uY29tCi5hdm1vby5uZXQKfGh0dHA6Ly9hdm1vby5uZXQKfHxhdm1v +by5wdwouamF2bW9vLnh5egp8aHR0cDovL2phdm1vby54eXoKLmphdnRhZy5jb20K +fGh0dHA6Ly9qYXZ0YWcuY29tCi5qYXZ6b28uY29tCnxodHRwOi8vamF2em9vLmNv +bQoudGVsbG1lLnB3CgohIS0tLUJCQy0tLQohLS0uYmJjLmNvLnVrL2Jsb2dzCiEt +LS5iYmMuY28udWsvY2hpbmVzZQohLS0uYmJjLmNvLnVrL25ld3Mvd29ybGQtYXNp +YS1jaGluYQohLS0uYmJjLmNvLnVrL3R2CiEtLS5iYmMuY28udWsvemhvbmd3ZW4K +IS0tLmJiYy5jb20vdWtjaGluYQohLS0uYmJjLmNvbS96aG9uZ3dlbgohLS0uYmJj +LmNvbSUyRnpob25nd2VuCiEtLW5ld3MuYmJjLmNvLnVrL29udGhpc2RheSpuZXdz +aWRfMjQ5NjAwMC8yNDk2Mjc3CiEtLW5ld3Nmb3J1bXMuYmJjLmNvLnVrCi5iYmMu +Y29tCnx8YmJjLmNvbQouYmJjLmNvLnVrCnx8YmJjLmNvLnVrCnx8YmJjaS5jby51 +awouYmJjY2hpbmVzZS5jb20KfHxiYmNjaGluZXNlLmNvbQp8aHR0cDovL2JiYy5p +bgoKISEtLS1CbG9vbWJlcmctLS0KLmJsb29tYmVyZy5jbgp8fGJsb29tYmVyZy5j +bgouYmxvb21iZXJnLmNvbQp8fGJsb29tYmVyZy5jb20KYmxvb21iZXJnLmRlCnx8 +Ymxvb21iZXJnLmRlCnx8Ymxvb21iZXJndmlldy5jb20KLmJ1c2luZXNzd2Vlay5j +b20KCiEhLS0tQ2hhbmdlSVAtLS0KLjFkdW1iLmNvbQouMjV1LmNvbQouMndha3ku +Y29tCi4zLWEubmV0Ci40ZHEuY29tCi40bXlkb21haW4uY29tCi40cHUuY29tCi5h +Y21ldG95LmNvbQouYWxtb3N0bXkuY29tCi5hbWVyaWNhbnVuZmluaXNoZWQuY29t +Ci5hdXRob3JpemVkZG5zLm5ldAouYXV0aG9yaXplZGRucy5vcmcKLmJpZ21vbmV5 +LmJpegouY2hhbmdlaXAubmFtZQouY2hhbmdlaXAubmV0Ci5jaGFuZ2VpcC5vcmcK +LmNsZWFuc2l0ZS5iaXoKLmNsZWFuc2l0ZS5pbmZvCi5jbGVhbnNpdGUudXMKLmNv +bXByZXNzLnRvCi5kZG5zLmluZm8KLmRkbnMubWUudWsKLmRkbnMubW9iaQouZGRu +cy5tcwouZGRucy5uYW1lCi5kZG5zLnVzCi5kbnMtZG5zLmNvbQouZG5zLXN0dWZm +LmNvbQouZG5zMDQuY29tCi5kbnMwNS5jb20KLmRuczEudXMKLmRuczIudXMKLmRu +c2V0LmNvbQouZG5zcmQuY29tCi5kc210cC5jb20KLmR1bWIxLmNvbQouZHluYW1p +Yy1kbnMubmV0Ci5keW5hbWljZG5zLmJpegouZHluYW1pY2Rucy5jby51awouZHlu +YW1pY2Rucy5tZS51awouZHluYW1pY2Rucy5vcmcudWsKLmR5bmRucy5wcm8KLmR5 +bnNzbC5jb20KLmVwYWMudG8KLmVzbXRwLmJpegouZXp1YS5jb20KLmZhcXNlcnYu +Y29tCi5mYXJ0aXQuY29tCi5mcmVlZGRucy5jb20KLmZyZWV0Y3AuY29tCi5mcmVl +d3d3LmluZm8KLmZ0cDEuYml6Ci5mdHBzZXJ2ZXIuYml6Ci5nZXR0cmlhbHMuY29t +Ci5nb3QtZ2FtZS5vcmcKLmdyOGRvbWFpbi5iaXoKLmdyOG5hbWUuYml6Ci5odHRw +czQ0My5uZXQKLmh0dHBzNDQzLm9yZwouaWt3Yi5jb20KLmluc3RhbnRocS5jb20K +Lmlvd255b3VyLm9yZwouaXNhc2VjcmV0LmNvbQouaXRlbWRiLmNvbQouaXRzYW9s +LmNvbQouamV0b3MuY29tCi5qa3ViLmNvbQouanVuZ2xlaGVhcnQuY29tCi5qdXN0 +ZGllZC5jb20KLmxmbGluay5jb20KLmxmbGlua3VwLmNvbQoubGZsaW5rdXAubmV0 +Ci5sZmxpbmt1cC5vcmcKLmxvbmdtdXNpYy5jb20KLm1lZm91bmQuY29tCi5tb25l +eWhvbWUuYml6Ci5tcmJhc2ljLmNvbQoubXJib251cy5jb20KLm1yZmFjZS5jb20K +Lm1yc2xvdmUuY29tCi5teTAzLmNvbQoubXlkYWQuaW5mbwoubXlkZG5zLmNvbQou +bXlmdHAuaW5mbwoubXlsZnR2LmNvbQoubXltb20uaW5mbwoubXluZXRhdi5uZXQK +Lm15bmV0YXYub3JnCi5teW51bWJlci5vcmcKLm15cGljdHVyZS5pbmZvCi5teXBv +cDMubmV0Ci5teXBvcDMub3JnCi5teXNlY29uZGFyeWRucy5jb20KLm15d3d3LmJp +egoubXl6LmluZm8KLm5zMDEuYml6Ci5uczAxLmluZm8KLm5zMDEudXMKLm5zMDIu +Yml6Ci5uczAyLmluZm8KLm5zMDIudXMKLm5zMS5uYW1lCi5uczIubmFtZQoubnMz +Lm5hbWUKLm9jcnkuY29tCi5vbmVkdW1iLmNvbQoub25teXBjLmJpegoub25teXBj +LmluZm8KLm9ubXlwYy5uZXQKLm9ubXlwYy5vcmcKLm9yZ2FuaWNjcmFwLmNvbQou +b3R6by5jb20KLm91cmhvYmJ5LmNvbQoucGNhbnl3aGVyZS5uZXQKLnBvcnQyNS5i +aXoKLnByb3h5ZG5zLmNvbQoucWhpZ2guY29tCi5xcG9lLmNvbQoucmViYXRlc3J1 +bGUubmV0Ci5zZWxsY2xhc3NpY3MuY29tCi5zZW5kc210cC5jb20KLnNlcnZldXNl +ci5jb20KLnNlcnZldXNlcnMuY29tCi5zZXhpZHVkZS5jb20KLnNxdWlybHkuaW5m +bwouc3NsNDQzLm9yZwoudG9oLmluZm8KLnRveXRoaWV2ZXMuY29tCi50cmlja2lw +Lm5ldAoudml6dmF6LmNvbQoud2lrYWJhLmNvbQoud3d3MS5iaXoKLnd3d2hvc3Qu +Yml6CkBAfGh0dHA6Ly94eC53d3dob3N0LmJpegoueDI0aHIuY29tCi54eHV6LmNv +bQoueHh4eS5pbmZvCi55Z3RvLmNvbQoueW91ZG9udGNhcmUuY29tCi55b3VydHJh +cC5jb20KLnp5bnMuY29tCi56enV4LmNvbQoKISEtLUNsb3VkZmxhcmUtLQohLS18 +fHBhZ2VzLmRldgp8fHdvcmtlcnMuZGV2Cnx8b25lLm9uZS5vbmUub25lCnx8Y2xv +dWRmbGFyZS1kbnMuY29tCgohIS0tLUR0RE5TLS0tCiEjIyNodHRwczovL3d3dy5k +dGRucy5jb20vZHRzaXRlL2ZhcQouM2QtZ2FtZS5jb20KLjRpcmMuY29tCi5iMG5l +LmNvbQouY2hhdG5vb2suY29tCi5kYXJrdGVjaC5vcmcKLmRlYWZ0b25lLmNvbQou +ZWZmZXJzLmNvbQouZXRvd25zLm5ldAouZXRvd25zLm9yZwouZmxuZXQub3JnCi5n +b3RnZWVrcy5jb20KLnNjaWVyb24uY29tCi5zbHlpcC5jb20KLnNseWlwLm5ldAou +c3Vyb290LmNvbQoKISEtLS1EeW5ETlMtLS0KISMjI2h0dHBzOi8vaGVscC5keW4u +Y29tL2xpc3Qtb2YtZHluLWRucy1wcm8tcmVtb3RlLWFjY2Vzcy1kb21haW4tbmFt +ZXMvCi5ibG9nZG5zLm9yZwouZHluZG5zLm9yZwouZHluZG5zLWlwLmNvbQouZHlu +ZG5zLXBpY3MuY29tCi5mcm9tLXNkLmNvbQouZnJvbS1wci5jb20KLmlzLWEtaHVu +dGVyLmNvbQoKISEtLS1EeW51LS0tCi5keW51LmNvbQp8fGR5bnUuY29tCi5keW51 +Lm5ldAouZnJlZWRkbnMub3JnCgohIS0tLUZhY2Vib29rLS0tCnx8YWNjb3VudGtp +dC5jb20KfHxjZG5pbnN0YWdyYW0uY29tCnx8ZjguY29tCi5mYWNlYm9vay5jb20K +fHxmYWNlYm9vay5jb20KIS0tL15odHRwcz86XC9cL1teXC9dK2ZhY2Vib29rXC5j +b20vCkBAfHx2Ni5mYWNlYm9vay5jb20KfHxmYWNlYm9vay5kZQp8fGZhY2Vib29r +LmRlc2lnbgp8fGNvbm5lY3QuZmFjZWJvb2submV0Cnx8ZmFjZWJvb2suaHUKfHxm +YWNlYm9vay5pbgp8fGZhY2Vib29rLm5sCnx8ZmFjZWJvb2suc2UKfHxmYWNlYm9v +a21haWwuY29tCnx8ZmIuY29tCnx8ZmIubWUKfHxmYi53YXRjaAp8fGZiY2RuLm5l +dAp8fGZic2J4LmNvbQp8fGZiYWRkaW5zLmNvbQp8fGZid29ya21haWwuY29tCi5p +bnN0YWdyYW0uY29tCnx8aW5zdGFncmFtLmNvbQp8fG0ubWUKfHxtZXNzZW5nZXIu +Y29tCnx8bWV0YS5jb20KfHxvY3VsdXMuY29tCnx8b2N1bHVzY2RuLmNvbQp8fHJv +Y2tzZGIub3JnCkBAfHxpcDYuc3RhdGljLnNsLXJldmVyc2UuY29tCnx8cGFyc2Uu +Y29tCnx8dGhlZmFjZWJvb2suY29tCnx8dGhyZWFkcy5uZXQKfHx3aGF0c2FwcC5j +b20KfHx3aGF0c2FwcC5uZXQKCiEhLS0tRmFuZG9tLS0tCnx8YXVudG9sb2d5LmZh +bmRvbS5jb20KfHxob25na29uZy5mYW5kb20uY29tCgohIS0tLUZUQ2hpbmVzZS0t +LQouZnRjaGluZXNlLmNvbQp8fGZ0Y2hpbmVzZS5jb20KCiEhLS0tR29vZ2xlLS0t +Cnx8Z2xlCnx8Z29vZ2xlCnx8ZG9jLm5ldwp8fGZvcm0ubmV3Cnx8Zm9ybXMubmV3 +Cnx8c2hlZXQubmV3Cnx8c2hlZXRzLm5ldwp8fHNwcmVhZHNoZWV0Lm5ldwp8fHNp +dGUubmV3Cnx8c2l0ZXMubmV3Cnx8d2Vic2l0ZS5uZXcKfHxzbGlkZXMubmV3Cnx8 +ZGVjay5uZXcKfHxwcmVzZW50YXRpb24ubmV3Cnx8Z29vZ2xlYXBpcy5jb20KISMj +I2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc3VwcG9ydGVkX2RvbWFpbnMjIyMKIS4u +LkdGV0xpc3QgZG9lc24ndCBpbnRlbmQgdG8gc3VwcG9ydCB0eXBvc3F1YXR0aW5n +Li4uCnx8MWUxMDAubmV0Cnx8NDY2NDUzLmNvbQp8fGFiYy54eXoKfHxhZG1vYi5j +b20KfHxhZHNlbnNlLmNvbQp8fGFkdmVydGlzZXJjb21tdW5pdHkuY29tCnx8YWdv +b2dsZWFkYXkuY29tCnx8YW1wcHJvamVjdC5vcmcKQEB8aHR0cHM6Ly93d3cuYW1w +cHJvamVjdC5vcmcKQEB8aHR0cHM6Ly9jZG4uYW1wcHJvamVjdC5vcmcKfHxhbmRy +b2lkLmNvbQpAQHx8Y2kuYW5kcm9pZC5jb20KfHxhbmRyb2lkaWZ5LmNvbQp8fGFu +ZHJvaWR0di5jb20KfHxhcGkuYWkKLmFwcHNwb3QuY29tCnx8YXBwc3BvdC5jb20K +fHxhdXRvZHJhdy5jb20KfHxibG9nYmxvZy5jb20KYmxvZ3Nwb3QuY29tCi9eaHR0 +cHM/OlwvXC9bXlwvXStibG9nc3BvdFwuKC4qKS8KLmJsb2dzcG90LmhrCi5ibG9n +c3BvdC5qcAouYmxvZ3Nwb3QudHcKfHxidXNpbmVzcy5wYWdlCiEtLXx8Y2FwaXRh +bGcuY29tCnx8Y2VydGlmaWNhdGUtdHJhbnNwYXJlbmN5Lm9yZwp8fGNocm9tZS5j +b20KfHxjaHJvbWVjYXN0LmNvbQp8fGNocm9tZWV4cGVyaW1lbnRzLmNvbQp8fGNo +cm9tZXN0YXR1cy5jb20KfHxjaHJvbWl1bS5vcmcKfHxjbG91ZGZ1bmN0aW9ucy5u +ZXQKfHxjcmJ1Zy5jb20KfHxjcmVhdGl2ZWxhYjUuY29tCnx8Y3JyZXYuY29tCnx8 +ZGF0YS12b2NhYnVsYXJ5Lm9yZwp8fGRlYnVnLmNvbQp8fGRlZXBtaW5kLmNvbQp8 +fGRlamEuY29tCnx8ZGlnaXNmZXJhLmNvbQp8fGRvY2tlci5jb20KfHxkb2NzLm5l +dwp8fGR1Y2suY29tCnx8ZmVlZGJ1cm5lci5jb20KfHxmaXJlYmFzZWlvLmNvbQp8 +fGcuY28KfHxnY3IuaW8KfHxnZXQuYXBwCnx8Z2V0LmRldgp8fGdldC5ob3cKfHxn +ZXQucGFnZQp8fGdldG1kbC5pbwp8fGdldG91dGxpbmUub3JnCnx8Z2dwaHQuY29t +Cnx8Z21haWwuY29tCnx8Z21vZHVsZXMuY29tCnx8Z29kb2Mub3JnCnx8Z29sYW5n +Lm9yZwp8fGdvby5nbAp8fGdvby5nbGUKLmdvb2dsZS5hZQouZ29vZ2xlLmFzCi5n +b29nbGUuYW0KLmdvb2dsZS5hdAouZ29vZ2xlLmF6Ci5nb29nbGUuYmEKLmdvb2ds +ZS5iZQouZ29vZ2xlLmJnCi5nb29nbGUuY2EKLmdvb2dsZS5jZAouZ29vZ2xlLmNp +Ci5nb29nbGUuY28uaWQKLmdvb2dsZS5jby5qcAouZ29vZ2xlLmNvLmtyCi5nb29n +bGUuY28ubWEKLmdvb2dsZS5jby51awouZ29vZ2xlLmNvbQouZ29vZ2xlLmRlCnx8 +Z29vZ2xlLmRldgouZ29vZ2xlLmRqCi5nb29nbGUuZGsKLmdvb2dsZS5lcwouZ29v +Z2xlLmZpCi5nb29nbGUuZm0KLmdvb2dsZS5mcgouZ29vZ2xlLmdnCi5nb29nbGUu +Z2wKLmdvb2dsZS5ncgouZ29vZ2xlLmllCi5nb29nbGUuaXMKLmdvb2dsZS5pdAou +Z29vZ2xlLmpvCi5nb29nbGUua3oKLmdvb2dsZS5sdgouZ29vZ2xlLm1uCi5nb29n +bGUubXMKLmdvb2dsZS5ubAouZ29vZ2xlLm51Ci5nb29nbGUubm8KLmdvb2dsZS5y +bwouZ29vZ2xlLnJ1Ci5nb29nbGUucncKLmdvb2dsZS5zYwouZ29vZ2xlLnNoCi5n +b29nbGUuc2sKLmdvb2dsZS5zbQouZ29vZ2xlLnNuCi5nb29nbGUudGsKLmdvb2ds +ZS50bQouZ29vZ2xlLnRvCi5nb29nbGUudHQKLmdvb2dsZS52dQouZ29vZ2xlLndz +Ci9eaHR0cHM/OlwvXC8oW15cL10rXC4pKmdvb2dsZVwuKGFjfGFkfGFlfGFmfGFp +fGFsfGFtfGFzfGF0fGF6fGJhfGJlfGJmfGJnfGJpfGJqfGJzfGJ0fGJ5fGNhfGNh +dHxjZHxjZnxjZ3xjaHxjaXxjbHxjbXxjby5hb3xjby5id3xjby5ja3xjby5jcnxj +by5pZHxjby5pbHxjby5pbnxjby5qcHxjby5rZXxjby5rcnxjby5sc3xjby5tYXxj +b218Y29tLmFmfGNvbS5hZ3xjb20uYWl8Y29tLmFyfGNvbS5hdXxjb20uYmR8Y29t +LmJofGNvbS5ibnxjb20uYm98Y29tLmJyfGNvbS5ienxjb20uY298Y29tLmN1fGNv +bS5jeXxjb20uZG98Y29tLmVjfGNvbS5lZ3xjb20uZXR8Y29tLmZqfGNvbS5naHxj +b20uZ2l8Y29tLmd0fGNvbS5oa3xjb20uam18Y29tLmtofGNvbS5rd3xjb20ubGJ8 +Y29tLmx5fGNvbS5tbXxjb20ubXR8Y29tLm14fGNvbS5teXxjb20ubmF8Y29tLm5m +fGNvbS5uZ3xjb20ubml8Y29tLm5wfGNvbS5vbXxjb20ucGF8Y29tLnBlfGNvbS5w +Z3xjb20ucGh8Y29tLnBrfGNvbS5wcnxjb20ucHl8Y29tLnFhfGNvbS5zYXxjb20u +c2J8Y29tLnNnfGNvbS5zbHxjb20uc3Z8Y29tLnRqfGNvbS50cnxjb20udHd8Y29t +LnVhfGNvbS51eXxjb20udmN8Y29tLnZufGNvLm16fGNvLm56fGNvLnRofGNvLnR6 +fGNvLnVnfGNvLnVrfGNvLnV6fGNvLnZlfGNvLnZpfGNvLnphfGNvLnptfGNvLnp3 +fGN2fGN6fGRlfGRqfGRrfGRtfGR6fGVlfGVzfGV1fGZpfGZtfGZyfGdhfGdlfGdn +fGdsfGdtfGdwfGdyfGd5fGhrfGhufGhyfGh0fGh1fGllfGltfGlxfGlzfGl0fGl0 +LmFvfGplfGpvfGtnfGtpfGt6fGxhfGxpfGxrfGx0fGx1fGx2fG1kfG1lfG1nfG1r +fG1sfG1ufG1zfG11fG12fG13fG14fG5lfG5sfG5vfG5yfG51fG9yZ3xwbHxwbnxw +c3xwdHxyb3xyc3xydXxyd3xzY3xzZXxzaHxzaXxza3xzbXxzbnxzb3xzcnxzdHx0 +ZHx0Z3x0a3x0bHx0bXx0bnx0b3x0dHx1c3x2Z3x2bnx2dXx3cylcLy4qLwohLS18 +fGdvb2dsZS1hbmFseXRpY3MuY29tCiEtLXx8Z29vZ2xlYWRzZXJ2aWNlcy5jb20K +fHxnb29nbGVhcHBzLmNvbQp8fGdvb2dsZWFydHByb2plY3QuY29tCnx8Z29vZ2xl +YmxvZy5jb20KfHxnb29nbGVib3QuY29tCiEtLXx8Z29vZ2xlY2FwaXRhbC5jb20K +fHxnb29nbGVjaGluYXdlYm1hc3Rlci5jb20KfHxnb29nbGVjb2RlLmNvbQp8fGdv +b2dsZWNvbW1lcmNlLmNvbQp8fGdvb2dsZWRvbWFpbnMuY29tCnx8Z29vZ2xlYXJ0 +aC5jb20KfHxnb29nbGVlYXJ0aC5jb20KfHxnb29nbGVkcml2ZS5jb20KfHxnb29n +bGVmaWJlci5uZXQKfHxnb29nbGVncm91cHMuY29tCnx8Z29vZ2xlaG9zdGVkLmNv +bQp8fGdvb2dsZWlkZWFzLmNvbQp8fGdvb2dsZWluc2lkZXNlYXJjaC5jb20KfHxn +b29nbGVtYWlsLmNvbQp8fGdvb2dsZW1hc2h1cHMuY29tCnx8Z29vZ2xlcGFnZWNy +ZWF0b3IuY29tCnx8Z29vZ2xlcGxheS5jb20KfHxnb29nbGVwbHVzLmNvbQp8fGdv +b2dsZXNjaG9sYXIuY29tCnx8Z29vZ2xlc291cmNlLmNvbQohLS18fGdvb2dsZXN5 +bmRpY2F0aW9uLmNvbQohLS18fGdvb2dsZXRhZ21hbmFnZXIuY29tCiEtLXx8Z29v +Z2xldGFnc2VydmljZXMuY29tCnx8Z29vZ2xldXNlcmNvbnRlbnQuY29tCi5nb29n +bGV2aWRlby5jb20KfHxnb29nbGV2aWRlby5jb20KfHxnb29nbGV3ZWJsaWdodC5j +b20KfHxnb29nbGV6aXAubmV0Cnx8Z3N0YXRpYy5jb20KIS0tfHxndi5jb20KfHxn +dnQxLmNvbQpAQHx8cmVkaXJlY3Rvci5ndnQxLmNvbQp8fGd2dDMuY29tCnx8Z3d0 +cHJvamVjdC5vcmcKfHxodG1sNXJvY2tzLmNvbQp8fGlhbS5zb3kKfHxpZ29vZ2xl +LmNvbQp8fGl0YXNvZnR3YXJlLmNvbQp8fGxpa2UuY29tCnx8bWFkZXdpdGhjb2Rl +LmNvbQp8fG1hdGVyaWFsLmlvCnx8b24yLmNvbQp8fHBhbm9yYW1pby5jb20KfHxw +aWNhc2F3ZWIuY29tCnx8cGtpLmdvb2cKfHxwbHVzLmNvZGVzCnx8cG9seW1lci1w +cm9qZWN0Lm9yZwp8fHF1ZXN0dmlzdWFsLmNvbQp8fGFkbWluLnJlY2FwdGNoYS5u +ZXQKfHxhcGkucmVjYXB0Y2hhLm5ldAp8fGFwaS1zZWN1cmUucmVjYXB0Y2hhLm5l +dAp8fGFwaS12ZXJpZnkucmVjYXB0Y2hhLm5ldAp8fHJlZGhvdGxhYnMuY29tCnx8 +c2F2ZXRoZWRhdGUuZm9vCnx8c2NoZW1hLm9yZwp8fHNoYXR0ZXJlZC5pbwp8aHR0 +cDovL3NpcG1sNS5vcmcvCnx8c2hlZXRzLm5ldwp8fHNsaWRlcy5uZXcKfHxzbmFw +c2VlZC5jb20KfHxzeW5lcmd5c2UuY29tCnx8dGVhY2hwYXJlbnRzdGVjaC5vcmcK +fHx0ZW5zb3JmbG93Lm9yZwp8fHRmaHViLmRldgp8fHRoaW5rd2l0aGdvb2dsZS5j +b20KfHx0aWx0YnJ1c2guY29tCnx8dHJhbnNsYXRlLmdvb2cKfHx1YTV2LmNvbQp8 +fHVyY2hpbi5jb20KfHx1c2VyY29udGVudC5nb29nCiEtLXx8d3d3Lmdvb2dsZQp8 +fHdhdmVwcm90b2NvbC5vcmcKfHx3YXltby5jb20KfHx3ZWIuZGV2Cnx8d2VibXBy +b2plY3Qub3JnCnx8d2VicGtnY2FjaGUuY29tCnx8d2VicnRjLm9yZwp8fHdoYXRi +cm93c2VyLm9yZwp8fHdoYXRzLm5ldwp8fHdpZGV2aW5lLmNvbQp8fHdpdGhnb29n +bGUuY29tCnx8d2l0aHlvdXR1YmUuY29tCnx8eC5jb21wYW55Cnx8eG4tLW5nc3Ry +LWxyYThqLmNvbQp8fHlvdXR1LmJlCi55b3V0dWJlLmNvbQp8fHlvdXR1YmUuY29t +Cnx8eW91dHViZS1ub2Nvb2tpZS5jb20KfHx5b3V0dWJlZWR1Y2F0aW9uLmNvbQp8 +fHlvdXR1YmVnYW1pbmcuY29tCnx8eW91dHViZWtpZHMuY29tCnx8eXQuYmUKfHx5 +dGltZy5jb20KfHx6eW5hbWljcy5jb20KCiEhLS0tS2lja0FTUy0tLQohLS1PRkZJ +Q0lBTCBVUkwgbGlzdCBhdDogaHR0cHM6Ly9rYXN0YXR1cy5jb20KCiEhLS0tTWlj +cm9zb2Z0LS0tCiEtLUBAfHxiaW5nLmNvbQp8fGNvcGlsb3QubWljcm9zb2Z0LmNv +bQoKISEtLS1OYXVnaHR5QW1lcmljYS0tLQp8fG5hdWdodHlhbWVyaWNhLmNvbQoK +ISEtLS1OWVRpbWVzLS0tCiEtLXx8ZDFmMWVyeWlxeWpzMHIuY2xvdWRmcm9udC5u +ZXQKIS0tfHxkM2xhcjA5eGJ3bHNnZS5jbG91ZGZyb250Lm5ldAohLS18fGQzcTFx +ajlqenN1OG53LmNsb3VkZnJvbnQubmV0CiEtLXx8ZGM4eGwwbmR6bjJjYi5jbG91 +ZGZyb250Lm5ldAohLS18fGExLm55dC5jb20KIS0tfHxpbnQubnl0LmNvbQohLS18 +fHMxLm55dC5jb20Kc3RhdGljMDEubnl0LmNvbQohLS18fHN0YXRpYzAxLm55dC5j +b20KIS0tfHx0eXBlZmFjZS5ueXQuY29tCnx8bnl0LmNvbQpueXRjaGluYS5jb20K +bnl0Y24ubWUKfHxueXRjbi5tZQp8fG55dGNvLmNvbQp8aHR0cDovL255dGkubXMv +Ci5ueXRpbWVzLmNvbQp8fG55dGltZXMuY29tCnx8bnl0aW1nLmNvbQpjbi5ueXRz +dHlsZS5jb20KfHxueXRzdHlsZS5jb20KCiEhLS0tU3RlYW0tLS0KLnN0ZWFtY29t +bXVuaXR5LmNvbQp8fHN0ZWFtY29tbXVuaXR5LmNvbQohLS1zdGVhbWNvbW11bml0 +eS5jb20vcHJvZmlsZXMvNzY1NjExOTgwNjI3NzE2MDkKIS0tc3RlYW1jb21tdW5p +dHkuY29tL2dyb3Vwcy9MaWJldFRpYmV0CiEtLXN0ZWFtY29tbXVuaXR5LmNvbS9n +cm91cHMvemhvbmdnb25nCiEtLXN0ZWFtY29tbXVuaXR5LmNvbS9pZC9DSlRfSmFj +a3Rvbgp8fHN0b3JlLnN0ZWFtcG93ZXJlZC5jb20KfHxhcGkuc3RlYW1wb3dlcmVk +LmNvbQp8fHN0ZWFtc3RhdGljLmNvbQohIS0tLVRlbGVncmFtLS0tCiEhIS0tLURv +bWFpbi0tLQp8fHR4Lm1lCnx8dGcuZGV2Cnx8dGVsZWdhLm9uZQp8fGNkbi10ZWxl +Z3JhbS5vcmcKfHxjb21tZW50cy5hcHAKfHxncmFwaC5vcmcKfHxsZWdyYS5waAp8 +fHF1aXouZGlyZWN0b3J5Cnx8dC5tZQp8fHVwZGF0ZXMudGRlc2t0b3AuY29tCnx8 +dGVsZWdyYW0uZG9nCnx8dGVsZWdyYW0ubWUKfHx0ZWxlZ3JhbS5vcmcKfHx0ZWxl +Z3JhbS5zcGFjZQp8fHRlbGVncmFtZG93bmxvYWQuY29tCnx8dGVsZWdyYS5waAp8 +fHRlbGVzY28ucGUKISEhLS0tSVAtLS0KCiEhLS0tVGlrdG9rLS0tCnx8dGlrdG9r +LmNvbQp8fHRpa3Rva3YuY29tCnx8dGlrdG9rdi51cwp8fHRpa3Rva2Nkbi11cy5j +b20KfHx0aWt0b2tjZG4uY29tCnx8dGlrdG9rY2RuLWV1LmNvbQoKISEtLS1Ud2l0 +Y2gtLS0KfHxqdHZudy5uZXQKfHx0dHZudy5uZXQKfHx0d2l0Y2gudHYKfHx0d2l0 +Y2hjZG4ubmV0CgohIS0tLVR3aXR0ZXIvWC0tLQp8fHBlcmlzY29wZS50dgoucHNj +cC50dgp8fHBzY3AudHYKLnQuY28KfHx0LmNvCi50d2VldGRlY2suY29tCnx8dHdl +ZXRkZWNrLmNvbQp8fHR3aW1nLmNvbQoudHdpdHBpYy5jb20KfHx0d2l0cGljLmNv +bQoudHdpdHRlci5jb20KfHx0d2l0dGVyLmNvbQp8fHR3aXR0ZXIuanAKfHx2aW5l +LmNvCnx8eC5jb20KCiEhLS0tVGFpd2FuLS0tCnx8bW9qLmdvdi50dwp8fGdvdi50 +YWlwZWkKLmdvdi50dwp8aHR0cHM6Ly9haXNzLmFud3MuZ292LnR3Cnx8YXJjaGl2 +ZXMuZ292LnR3Cnx8dGFjYy5jd2IuZ292LnR3Cnx8ZGF0YS5nb3YudHcKfHxleGFt +Lmdvdi50dwp8fGV5Lmdvdi50dwp8fGZhLmdvdi50dwp8fGZkYS5nb3YudHcKfHxo +cGEuZ292LnR3Cnx8aW1taWdyYXRpb24uZ292LnR3Cnx8aXRhaXdhbi5nb3YudHcK +fHxqdWRpY2lhbC5nb3YudHcKfHxsaS50YWlwZWkKfHxseS5nb3YudHcKfHxtamli +Lmdvdi50dwp8fG1vZWFpYy5nb3YudHcKfHxtb2ZhLmdvdi50dwp8fG1vbC5nb3Yu +dHcKfHxtdmRpcy5nb3YudHcKfHxuYXQuZ292LnR3Cnx8bmhpLmdvdi50dwp8fG5w +YS5nb3YudHcKfHxuc2MuZ292LnR3Cnx8bnRiay5nb3YudHcKfHxudGJuYS5nb3Yu +dHcKfHxudGJ0Lmdvdi50dwp8fHBjYy5nb3YudHcKfHxzdGF0Lmdvdi50dwp8fHRh +aXBlaS5nb3YudHcKfHx0YWl3YW5qb2JzLmdvdi50dwp8fHRoYi5nb3YudHcKfHx0 +aXBvLmdvdi50dwp8fHdkYS5nb3YudHcKCnx8dGVjby1oay5vcmcKfHx0ZWNvLW1v +Lm9yZwoKQEB8fGFmdHlnaC5nb3YudHcKQEB8fGFpZGUuZ292LnR3CkBAfHx0cGRl +LmFpZGUuZ292LnR3CkBAfHxhcnRlLmdvdi50dwpAQHx8Y2h1a3VhbmcuZ292LnR3 +CkBAfHxjd2IuZ292LnR3CkBAfHxjeWNhYi5nb3YudHcKQEB8fGRibnNhLmdvdi50 +dwpAQHx8ZGYuZ292LnR3CkBAfHxlYXN0Y29hc3QtbnNhLmdvdi50dwpAQHx8ZXJ2 +LW5zYS5nb3YudHcKQEB8fGdyYi5nb3YudHcKQEB8fGd5c2QubnljLmdvdi50dwpA +QHx8aGNoY2MuZ292LnR3CkBAfHxoc2luY2h1LWNjLmdvdi50dwpAQHx8aW5lci5n +b3YudHcKQEB8fGtsc2lvLmdvdi50dwpAQHx8a21zZWguZ292LnR3CkBAfHxsdW5n +dGFuaHIuZ292LnR3CkBAfHxtYW9saW4tbnNhLmdvdi50dwpAQHx8bWF0c3UtbmV3 +cy5nb3YudHcKQEB8fG1hdHN1LW5zYS5nb3YudHcKQEB8fG1hdHN1Y2MuZ292LnR3 +CkBAfHxtb2UuZ292LnR3CkBAfHxuYW5rYW4uZ292LnR3CkBAfHxuY3JlZS5nb3Yu +dHcKQEB8fGNyb21vdGMubmF0Lmdvdi50dwpAQHx8dGF4Lm5hdC5nb3YudHcKQEB8 +fG5lY29hc3QtbnNhLmdvdi50dwpAQHx8bmVyLmdvdi50dwpAQHx8bm1tYmEuZ292 +LnR3CkBAfHxubXAuZ292LnR3CkBAfHxubXZ0dGMuZ292LnR3CkBAfHxub3J0aGd1 +YW4tbnNhLmdvdi50dwp8fG5wbS5nb3YudHcKQEB8fG5zdG0uZ292LnR3CkBAfHxu +dGRtaC5nb3YudHcKQEB8fG50bC5nb3YudHcKQEB8fG50c2VjLmdvdi50dwpAQHx8 +bnR1aC5nb3YudHcKQEB8fG52cmkuZ292LnR3CkBAfHxwZW5naHUtbnNhLmdvdi50 +dwpAQHx8cG9zdC5nb3YudHcKQEB8fHNpcmF5YS1uc2EuZ292LnR3CkBAfHxzdGR0 +aW1lLmdvdi50dwpAQHx8c3VubW9vbmxha2UuZ292LnR3CkBAfHx0YWl0dW5nLWhv +dXNlLmdvdi50dwpAQHx8dGFveXVhbi5nb3YudHcKQEB8fHRwaGNjLmdvdi50dwpA +QHx8dHJpbXQtbnNhLmdvdi50dwpAQHx8dmdodHBlLmdvdi50dwpAQHx8dmdoa3Mu +Z292LnR3CkBAfHx2Z2h0Yy5nb3YudHcKQEB8fHdhbmZhbmcuZ292LnR3CkBAfHx5 +YXRzZW4uZ292LnR3CkBAfHx5ZGEuZ292LnR3CgohLS1AQHx8NHBwcGMuZ292LnR3 +CiEtLUBAfHw5MjEuZ292LnR3CiEtLUBAfHxkbXRpcC5nb3YudHcKIS0tQEB8fGV0 +cmFpbmluZy5nb3YudHcKIS0tQEB8fGdzbi1jZXJ0Lm5hdC5nb3YudHcKIS0tQEB8 +fG5pY2kubmF0Lmdvdi50dwohLS1AQHx8aGNjLmdvdi50dwohLS1AQHx8aGVuZ2No +dWVuLmdvdi50dwohLS1AQHx8a2hjYy5nb3YudHcKIS0tQEB8fGtobXMuZ292LnR3 +CiEtLUBAfHxray5nb3YudHcKIS0tQEB8fGtsY2NhYi5nb3YudHcKIS0tQEB8fGts +cmEuZ292LnR3CiEtLUBAfHxubWguZ292LnR3CiEtLUBAfHxubXRsLmdvdi50dwoh +LS1AQHx8cGFicC5nb3YudHcKIS0tQEB8fHBldC5nb3YudHcKIS0tQEB8fHRjaGIu +Z292LnR3CiEtLUBAfHx0Y3NhYy5nb3YudHcKIS0tQEB8fHRuY3NlYy5nb3YudHcK +fHxraW5tZW4ub3JnLnR3CgohIS0tLVVTQS0tLQp8fGFtZXJpY29ycHMuZ292Cnx8 +ZG1hLm1pbAp8fGpwbC5uYXNhLmdvdgp8fHBkcy5uYXNhLmdvdgp8fHBhY29tLm1p +bAp8fHNvYy5taWwKfHxzb2xhcnN5c3RlbS5uYXNhLmdvdgppaXBkaWdpdGFsLnVz +ZW1iYXNzeS5nb3YKfHx1c2NnLm1pbAp8fHVzZmsubWlsCnxodHRwOi8vdGFyci51 +c3B0by5nb3YvCnx8dHNkci51c3B0by5nb3YKCiEhLS0tVjJFWC0tLQp8fHYyZXgu +Y29tCiEtLS52MmV4LmNvbQohLS1JbmNsdWRlZCBpbiBhYm92ZSBydWxlOiBkbnMu +djJleC5jb20KIS0tQEB8aHR0cDovL3YyZXguY29tCiEtLUBAfGh0dHA6Ly9jZG4u +djJleC5jb20KIS0tQEB8aHR0cDovL2NuLnYyZXguY29tCiEtLUBAfGh0dHA6Ly9o +ay52MmV4LmNvbQohLS1AQHxodHRwOi8vaS52MmV4LmNvbQohLS1AQHxodHRwOi8v +bGF4LnYyZXguY29tCiEtLUBAfGh0dHA6Ly9uZXVlLnYyZXguY29tCiEtLUBAfGh0 +dHA6Ly9wYWdlc3BlZWQudjJleC5jb20KIS0tQEB8aHR0cDovL3N0YXRpYy52MmV4 +LmNvbQohLS1AQHxodHRwOi8vd29ya3NwYWNlLnYyZXguY29tCiEtLUBAfGh0dHA6 +Ly93d3cudjJleC5jb20KCiEhLS0tVk9BLS0tCnx8dm9hY2FtYm9kaWEuY29tCi52 +b2FjaGluZXNlYmxvZy5jb20KfHx2b2FjaGluZXNlYmxvZy5jb20KLnZvYWNhbnRv +bmVzZS5jb20KfHx2b2FjYW50b25lc2UuY29tCnZvYWNoaW5lc2UuY29tCnx8dm9h +Y2hpbmVzZS5jb20Kdm9hZ2QuY29tCnx8dm9haW5kb25lc2lhLmNvbQoudm9hbmV3 +cy5jb20KfHx2b2FuZXdzLmNvbQp2b2F0aWJldGFuLmNvbQp8fHZvYXRpYmV0YW4u +Y29tCi52b2F0aWJldGFuZW5nbGlzaC5jb20KfHx2b2F0aWJldGFuZW5nbGlzaC5j +b20KCiEhLS0tV2lraWEtLS0KfHx6aC5lY2RtLndpa2lhLmNvbQp8fGV2Y2hrLndp +a2lhLmNvbQpmcS53aWtpYS5jb20KemgucHR0cGVkaWEud2lraWEuY29tL3dpa2kv +JUU3JUJGJTkyJUU1JThDJTg1JUU1JUFEJTkwJUU0JUI5JThCJUU0JUJBJTgyCmNu +LnVuY3ljbG9wZWRpYS53aWtpYS5jb20KemgudW5jeWNsb3BlZGlhLndpa2lhLmNv +bQoKIS0tLS0tLS0tLS0tLS1XaWtpcGVkaWEgUmVsYXRlZC0tLS0tLS0tLS0tLS0K +ISFFbWVyZ2VuY3kgbmVlZCBvbmx5KElQL1BvcnQgYmxvY2sgdXNhZ2UpISEKIS0t +LS0tLTAtLS0tLS0KfHxtZWRpYXdpa2kub3JnCiEtLS0tLS0xLS0tLS0tCnx8d2lr +aWRhdGEub3JnCiEtLS0tLS0yLS0tLS0tCnx8d2lraW1lZGlhLm9yZwohLS0tLS0t +My0tLS0tLQp8fHdpa2lib29rcy5vcmcKIS0tLS0tLTQtLS0tLS0KfHx3aWtpdmVy +c2l0eS5vcmcKIS0tLS0tLTUtLS0tLS0KfHx3aWtpc291cmNlLm9yZwohLS0tLS0t +Ni0tLS0tLQp8fHpoLndpa2lxdW90ZS5vcmcKIS0tLS0tLTctLS0tLS0KfHx3aWtp +bmV3cy5vcmcKIS0tLS0tLTgtLS0tLS0KfHx3aWtpdm95YWdlLm9yZwohLS0tLS0t +OS0tLS0tLQp8fHdpa3Rpb25hcnkub3JnCiEtLS0tTWFpbi0tLS0tCnx8d2lraXBl +ZGlhLm9yZwp8fHdtZnVzZXJjb250ZW50Lm9yZwoKISEtLS1ZYWhvby0tLQp8fHNo +b3BwaW5nLnlhaG9vLmNvLmpwCnx8YXVjdGlvbnMueWFob28uY28uanAKfHxzZWFy +Y2gueWFob28uY28uanAKfHx5YWhvby5jb20udHcKfHx5YWhvby5jb20uaGsKfHx5 +YWhvby5jb20KCiEtLS0tLS0tLS0tLS0tLS0tLS1OdW1lcmljcy0tLS0tLS0tLS0t +LS0tLS0tLS0tLQp8fGlwZnMuNGV2ZXJsYW5kLmlvCnx8OTFkYXNhaS5jb20KfHxp +LjExMTY2Ni5iZXN0Cnx8MWxpYi5zawp8fDIwNDcub25lCnx8NjlzaHViYS5jeAp8 +fDIwNDliYnMueHl6Cnx8NjExc3R1ZHkuY29tCnx8MThjb21pYy5vcmcKfHwwMDB3 +ZWJob3N0LmNvbQouMDMwYnV5LmNvbQouMHJ6LnR3CnxodHRwOi8vMHJ6LnR3CjEt +YXBwbGUuY29tLnR3Cnx8MS1hcHBsZS5jb20udHcKLjEwMDBnaXJpLm5ldAp8fDEw +MDBnaXJpLm5ldAp8fDEwYmVhc3RzLm5ldAouMTBjb25kaXRpb25zb2Zsb3ZlLmNv +bQp8fDEwbXVzdW1lLmNvbQoxMjNyZi5jb20KLjEyYmV0LmNvbQp8fDEyYmV0LmNv +bQouMTJ2cG4uY29tCi4xMnZwbi5uZXQKfHwxMnZwbi5jb20KfHwxMnZwbi5uZXQK +fHwxMzM3eC50bwouMTM4LmNvbQoxNDFob25na29uZy5jb20vZm9ydW0KfHwxNDFq +ai5jb20KLjE0MXR1YmUuY29tCnx8MTY4OC5jb20uYXUKLjE3M25nLmNvbQp8fDE3 +M25nLmNvbQouMTc3cGljLmluZm8KLjE3dDE3cC5jb20KfHwxOGJvYXJkLmNvbQox +OG9ubHlnaXJscy5jb20KLjE4cDJwLmNvbQouMTh2aXJnaW5zZXguY29tCnpoYW8u +MTk4NC5jaXR5Cnx8emhhby4xOTg0LmNpdHkKMTk4NGJicy5jb20KfHwxOTg0YmJz +LmNvbQohLS18fDE5ODRibG9nLmNvbQouMTk5MXdheS5jb20KfHwxOTkxd2F5LmNv +bQouMWVldy5jb20KLjFtb2JpbGUuY29tCnx8MXBvaW50M2FjcmVzLmNvbQp8fDFw +b25kby50dgouMi1oYW5kLmluZm8KLjIwMDBmdW4uY29tL2Jicwp8fDIwMDh4aWFu +emhhbmcuaW5mbwp8fDIwMjFoa2NoYXJ0ZXIuY29tCnx8MjA0Ny5uYW1lCjIxYW5k +eS5jb20vYmxvZwoyMXNleHR1cnkuY29tCi4yMjgubmV0LnR3Cnx8MjMzYWJjLmNv +bQp8fDI0aHJzLmNhCjJsaXBzdHViZS5jb20KLjJzaGFyZWQuY29tCjMwYm94ZXMu +Y29tCi4zMTVsei5jb20KfHwzMnJlZC5jb20KfHwzNnJhaW4uY29tCi4zYTVhLmNv +bQozYXJhYnR2LmNvbQouM2JveXMyZ2lybHMuY29tCi4zcHJveHkucnUKLjNyZW4u +Y2EKLjN0dWkubmV0Cnx8NDA0bXVzZXVtLmNvbQp8fDRibHVlc3RvbmVzLmJpegou +NGNoYW4uY29tCiEtLXx8NGNoYW4ub3JnCi40ZXZlcnByb3h5LmNvbQp8fDRldmVy +cHJveHkuY29tCnx8NHJidHYuY29tCnx8NHNoYXJlZC5jb20KdGFpd2FubmF0aW9u +LjUwd2Vicy5jb20KfHw1MS5jYQp8fDUxamF2Lm9yZwouNTFsdW9iZW4uY29tCnx8 +NTFsdW9iZW4uY29tCnx8NTI3OC5jYwouNTI5OS50dgo1aTAxLmNvbQouNWlzb3Rv +aTUub3JnCi41bWFvZGFuZy5jb20KfHw2MTFzdHVkeS5pY3UKfHw2M2kuY29tCi42 +NG11c2V1bS5vcmcKNjR0aWFud2FuZy5jb20KNjR3aWtpLmNvbQouNjYuY2EKNjY2 +a2IuY29tCnx8NmRvLm5ld3MKfHw2ZG8ud29ybGQKLjZwYXJrLmNvbQp8fDZwYXJr +LmNvbQp8fDZwYXJrYmJzLmNvbQp8fDZwYXJrZXIuY29tCnx8NnBhcmtuZXdzLmNv +bQp8fDdjYXB0dXJlLmNvbQouN2Nvdy5jb20KIS0tfHw3LXppcC5vcmcKLjgtZC5j +b20KfGh0dHA6Ly84LWQuY29tCi44NWNjLnVzCnxodHRwOi8vODVjYy51cwouODgx +OTAzLmNvbS9wYWdlL3poLXR3Lwp8fDg4MTkwMy5jb20KLjg4OC5jb20KLjg4OHBv +a2VyLmNvbQo4OS42NC5jaGFydGVyLmNvbnN0aXR1dGlvbmFsaXNtLnNvbHV0aW9u +cwo4OS02NC5vcmcKfHw4OS02NC5vcmcKfHw4OTY0bXVzZXVtLmNvbQouOG5ld3Mu +Y29tLnR3Ci44ejEubmV0Cnx8OHoxLm5ldAp8fDkxcG9ybi5jb20KfHw5MXBvcm55 +LmNvbQp8fDkxdnBzLmNsdWIKLjkyY2Nhdi5jb20KLjk5MS5jb20KfGh0dHA6Ly85 +OTEuY29tCi45OWJ0Z2MwMS5jb20KfHw5OWJ0Z2MwMS5jb20KLjk5Y24uaW5mbwp8 +aHR0cDovLzk5Y24uaW5mbwp8fDliaXMuY29tCnx8OWJpcy5uZXQKfHw5bmV3cy5j +b20uYXUKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLUFBLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLQp8fGFtdWxldG1jLmNvbQp8fGFicGxpdmUuY29tCnx8Y2RuLmFyc3Rl +Y2huaWNhLm5ldAp8fGFvbWVkaWEub3JnCnx8YWxqYXplZXJhLmNvbQp8fGFraW5h +dG9yLmNvbQp8fGFubmFzLWFyY2hpdmUub3JnCnx8YXYwMS50dgp8fGFjZy5yaXAK +fHxhbm5hcy1hcmNoaXZlLnNlCnx8YS1ub3JtYWwtZGF5LmNvbQphNS5jb20ucnUK +fGh0dHA6Ly9hYW1hY2F1LmNvbQohLS18aHR0cDovL2NkbiouYWJjLmNvbS8KLmFi +Yy5jb20KLmFiYy5uZXQuYXUKfHxhYmMubmV0LmF1Ci5hYmNoaW5lc2UuY29tCnx8 +YWJlYm9va3MuY28udWsKLmFibHdhbmcuY29tCi5hYm9sdW93YW5nLmNvbQp8fGFi +b2x1b3dhbmcuY29tCnx8YWJvdXQubWUKLmFicy5lZHUKfHxhY2FzdC5jb20KLmFj +Y2ltLm9yZwouYWNlcm9zLWRlLWhpc3BhbmlhLmNvbQouYWNldnBuLmNvbQp8fGFj +ZXZwbi5jb20KLmFjZzE4Lm1lCnxodHRwOi8vYWNnMTgubWUKfHxhY2dib3gub3Jn +Cnx8YWNna2ouY29tCnx8YWNnbnguc2UKLmFjbWVkaWEzNjUuY29tCi5hY253LmNv +bS5hdQphY3Rmb3J0aWJldC5vcmcKYWN0aW1lcy5jb20uYXUKYWN0aXZwbi5jb20K +fHxhY3RpdnBuLmNvbQp8fGFjdWxvLnVzCnx8YWRkaWN0ZWR0b2NvZmZlZS5kZQp8 +fGFkZHlvdXR1YmUuY29tCi5hZGVsYWlkZWJicy5jb20vYmJzCi5hZHBsLm9yZy5o +awp8aHR0cDovL2FkcGwub3JnLmhrCi5hZHVsdC1zZXgtZ2FtZXMuY29tCnx8YWR1 +bHQtc2V4LWdhbWVzLmNvbQphZHVsdGZyaWVuZGZpbmRlci5jb20KfHxhZHZhbnNj +ZW5lLmNvbQp8fGFkdmVydGZhbi5jb20KLmFlLm9yZwp8fGFlaS5vcmcKfHxhZW5o +YW5jZXJzLmNvbQp8fGFmLm1pbAouYWZhbnRpYmJzLmNvbQp8aHR0cDovL2FmYW50 +aWJicy5jb20KfHxhZnIuY29tCnx8YWlvc2VhcmNoLmNvbQouYWlwaC5uZXQKfHxh +aXBoLm5ldAouYWlyYXNpYS5jb20KfHxhaXJjb25zb2xlLmNvbQp8aHR0cDovL2Rv +d25sb2FkLmFpcmNyYWNrLW5nLm9yZwouYWlydnBuLm9yZwp8fGFpcnZwbi5vcmcK +LmFpc2V4LmNvbQp8fGFpdC5vcmcudHcKYWl3ZWl3ZWkuY29tCi5haXdlaXdlaWJs +b2cuY29tCnx8YWl3ZWl3ZWlibG9nLmNvbQp8fHd3dy5hanNhbmRzLmNvbQoKISEt +LS1Ba2FtYWktLS0KYTI0OC5lLmFrYW1haS5uZXQKfHxhMjQ4LmUuYWthbWFpLm5l +dAoKcmZhbGl2ZTEuYWthY2FzdC5ha2FtYWlzdHJlYW0ubmV0CnZvYS0xMS5ha2Fj +YXN0LmFrYW1haXN0cmVhbS5uZXQKCnxodHRwczovL2ZiY2RuKi5ha2FtYWloZC5u +ZXQvCiEtLXx8ZmJleHRlcm5hbC1hLmFrYW1haWhkLm5ldAohLS18fGZic3RhdGlj +LWEuYWthbWFpaGQubmV0CiEtLXxodHRwczovL2lnY2RuKi5ha2FtYWloZC5uZXQK +cnRoa2xpdmUyLWxoLmFrYW1haWhkLm5ldAoKLmFrYWRlbWl5ZS5vcmcvdWcKfGh0 +dHA6Ly9ha2FkZW1peWUub3JnL3VnCnx8YWtpYmEtb25saW5lLmNvbQp8fGFrb3cu +b3JnCi5hbC1pc2xhbS5jb20KfHxhbGFib3V0LmNvbQouYWxhbmhvdS5jb20KfGh0 +dHA6Ly9hbGFuaG91LmNvbQouYWxhcmFiLnFhCnx8YWxhc2JhcnJpY2FkYXMub3Jn +Cnx8YWxmb3JhdHR2Lm5ldAouYWxoYXlhdC5jb20KLmFsaWNlamFwYW4uY28uanAK +YWxpZW5ndS5jb20KfHxhbGl2ZS5iYXIKfHxhbGthc2lyLmNvbQp8fGFsbDRtb20u +b3JnCnx8YWxsY29ubmVjdGVkLmNvCi5hbGxkcmF3bnNleC5jb20KfHxhbGxkcmF3 +bnNleC5jb20KfHxhbGxmaW5lZ2lybHMuY29tCi5hbGxnaXJsbWFzc2FnZS5jb20K +YWxsZ2lybHNhbGxvd2VkLm9yZwouYWxsZ3JhdnVyZS5jb20KYWxsaWFuY2Uub3Jn +LmhrCi5hbGxpbmZhLmNvbQp8fGFsbGluZmEuY29tCi5hbGxqYWNrcG90c2Nhc2lu +by5jb20KfHxhbGxtb3ZpZS5jb20KLmFscGhhcG9ybm8uY29tCnx8YWx0ZXJuYXRl +LXRvb2xzLmNvbQphbHRlcm5hdGl2ZXRvLm5ldC9zb2Z0d2FyZQphbHZpbmFsZXhh +bmRlci5jb20KYWx3YXlzZGF0YS5jb20KfHxhbHdheXNkYXRhLmNvbQp8fGFsd2F5 +c2RhdGEubmV0Ci5hbHdheXN2cG4uY29tCnx8YWx3YXlzdnBuLmNvbQp8fGFtNzMw +LmNvbS5oawphbWVibG8uanAKfHxhbWVibG8uanAKd3d3MS5hbWVyaWNhbi5lZHUv +dGVkL2ljZS90aWJldAp8fGFtZXJpY2FuZ3JlZW5jYXJkLmNvbQp8fGFtaWJsb2Nr +ZWRvcm5vdC5jb20KLmFtaWdvYmJzLm5ldAouYW1pdGFiaGFmb3VuZGF0aW9uLnVz +CnxodHRwOi8vYW1pdGFiaGFmb3VuZGF0aW9uLnVzCi5hbW5lc3R5Lm9yZwp8fGFt +bmVzdHkub3JnCnx8YW1uZXN0eS5vcmcuaGsKLmFtbmVzdHkudHcKLmFtbmVzdHl1 +c2Eub3JnCnx8YW1uZXN0eXVzYS5vcmcKLmFtdGItdGFpcGVpLm9yZwouYW5keWdv +ZC5jb20KfGh0dHA6Ly9hbmR5Z29kLmNvbQphbm5hdGFtLmNvbS9jaGluZXNlCnx8 +YW5jaG9yLmZtCnx8YW5jaG9yZnJlZS5jb20KIS0tR0hTCnx8YW5jc2NvbmYub3Jn +Cnx8YW5kZmFyYXdheS5uZXQKfHxhbmRyb2lkLXg4Ni5vcmcKfHxhbmRyb2lkYXBr +c2ZyZWUuY29tCmFuZ2VsZmlyZS5jb20vaGkvaGF5YXNoaQp8fGFuZ3VsYXJqcy5v +cmcKYW5pbWVjcmF6eS5uZXQKYW5pc2NhcnR1am8uY29tCnx8YW5pc2NhcnR1am8u +Y29tCnx8YW5vYmlpLmNvbQp8fGFub25maWxlcy5jb20KLmFub255bWl0eW5ldHdv +cmsuY29tCi5hbm9ueW1pemVyLmNvbQouYW5vbnltb3VzZS5vcmcKfHxhbm9ueW1v +dXNlLm9yZwphbm9udGV4dC5jb20KLmFucG9wby5jb20KLmFuc3dlcmluZy1pc2xh +bS5vcmcKfGh0dHA6Ly93d3cuYW50ZC5vcmcKfHxhbnRob255Y2FsemFkaWxsYS5j +b20KYW50aWNocmlzdGVuZG9tLmNvbQouYW50aXdhdmUubmV0CnxodHRwOi8vYW50 +aXdhdmUubmV0Ci5hbnlwb3JuLmNvbQouYW55c2V4LmNvbQp8aHR0cDovL2FueXNl +eC5jb20KLmFvMy5vcmcKfHxhbzMub3JnCnx8YW9iby5jb20uYXUKLmFvZnJpZW5k +LmNvbQp8aHR0cDovL2FvZnJpZW5kLmNvbQouYW9qaWFvLm9yZwp8fGFvbWl3YW5n +LmNvbQp8fGFwYXQxOTg5Lm9yZwouYXBldHViZS5jb20KfHxhcGlhcnkuaW8KLmFw +aWdlZS5jb20KfHxhcGlnZWUuY29tCnx8YXBrLnN1cHBvcnQKfHxhcGtjb21iby5j +b20KLmFwa21vbmsuY29tL2FwcAp8fGFwa21vbmsuY29tCnx8YXBrcGx6LmNvbQp8 +fGFwa3B1cmUuY29tCnx8YXBrcHVyZS5uZXQKfHxhcHBhZHZpY2UuY29tCiEtLXx8 +YXBwYW5uaWUuY29tCnx8YXBwYnJhaW4uY29tCi5hcHBkb3dubG9hZGVyLm5ldC9B +bmRyb2lkCi5hcHBsZWRhaWx5LmNvbQp8fGFwcGxlZGFpbHkuY29tCmFwcGxlZGFp +bHkuY29tLnR3Cnx8YXBwbGVkYWlseS5jb20udHcKLmFwcHNob3BwZXIuY29tCnxo +dHRwOi8vYXBwc2hvcHBlci5jb20KfHxhcHBzb2Nrcy5uZXQKfHxhcHBzdG8ucmUK +LmFwdG9pZGUuY29tCnx8YXB0b2lkZS5jb20KfHxhcmNoaXZlcy5nb3YKLmFyY2hp +dmUuZm8KfHxhcmNoaXZlLmZvCnx8YXJjaGl2ZS52bgp8fGFyY2hpdmUuaXMKfHxh +cmNoaXZlLmlzCnx8YXJjaGl2ZS5saQp8fGFyY2hpdmUubGkKfHxhcmNoaXZlLm1k +Cnx8YXJjaGl2ZS5vcmcKfHxhcmNoaXZlLnBoCnx8YXJjaGl2ZS50b2RheQp8fGFy +Y2hpdmVvZm91cm93bi5jb20KfHxhcmNoaXZlb2ZvdXJvd24ub3JnCi5hcmN0b3Np +YS5jb20KfHxhcmN0b3NpYS5jb20KfHxhcmVjYS1iYWNrdXAub3JnCi5hcmV0aHVz +YS5zdQp8fGFyZXRodXNhLnN1Cnx8YXJsaW5ndG9uY2VtZXRlcnkubWlsCi5hcnQ0 +dGliZXQxOTk4Lm9yZwphcnRvZnBlYWNlZm91bmRhdGlvbi5vcmcKYXJ0c3kubmV0 +Cnx8YXNhY3Aub3JnCmFzZGZnLmpwL2RhYnIKYXNnLnRvCi5hc2lhLWdhbWluZy5j +b20KLmFzaWFoYXJ2ZXN0Lm9yZwp8fGFzaWFoYXJ2ZXN0Lm9yZwp8fGFzaWFuYWdl +LmNvbQp8fGFzaWFuZXdzLml0Cnx8YXNpYW5zZXhkaWFyeS5jb20KfHxhc2lhb25l +LmNvbQouYXNpYXRncC5jb20KfHxhc2suY29tCnx8YXNrc3R1ZGVudC5jb20KLmFz +a3luei5uZXQKfHxhc2t5bnoubmV0Cnx8YXNwaS5vcmcuYXUKfHxhc3Bpc3RyYXRl +Z2lzdC5vcmcuYXUKfHxhc3NlbWJsYS5jb20KfHxhc3RyaWxsLmNvbQp8fGF0Yy5v +cmcuYXUKLmF0Y2hpbmVzZS5jb20KfGh0dHA6Ly9hdGNoaW5lc2UuY29tCmF0Z2Z3 +Lm9yZwouYXRsYW50YTE2OC5jb20KfHxhdGxhbnRhMTY4LmNvbQouYXRuZXh0LmNv +bQp8fGF0bmV4dC5jb20KfHxhdWRhY3kuY29tCmljZS5hdWRpb25vdy5jb20KLmF2 +LmNvbQp8fGF2Lm1vdmllCi5hdi1lLWJvZHkuY29tCmF2YWF6Lm9yZwp8fGF2YWF6 +Lm9yZwohLS18fGF2YXN0LmNvbQouYXZjb29sLmNvbQouYXZkYi5pbgp8fGF2ZGIu +aW4KLmF2ZGIudHYKfHxhdmRiLnR2Ci5hdmZhbnRhc3kuY29tCnx8YXZnLmNvbQou +YXZnbGUuY29tCnx8YXZnbGUuY29tCnx8YXZpZGVtdXgub3JnCnx8YXZvaXNpb24u +Y29tCi5hdnlhaG9vLmNvbQp8fGF4aW9zLmNvbQp8fGF4dXJlZm9ybWFjLmNvbQph +emVyaW1peC5jb20KfHxhemlyZXZwbi5jb20KIS0tYm94dW4uYXp1cmV3ZWJzaXRl +cy5uZXQgZG9lc24ndCBleGlzdC4KYm94dW4qLmF6dXJld2Vic2l0ZXMubmV0Cnx8 +Ym94dW4qLmF6dXJld2Vic2l0ZXMubmV0CgohLS0tLS0tLS0tLS0tLS0tLS0tLS1C +Qi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHxidDRncHJ4LmNvbQp8fGJ0NGcu +b3JnCnx8YmV0dGVyaGFzaC5uZXQKfHxiaW5hbmNlLm9yZwp8fGJpdGdldC5jb20K +fHxibGFja21hZ2ljZGVzaWduLmNvbQp8fGJlYXJ0ZWFjaC5jb20KfHxidGJ0dC5t +ZQp8fGJ0YnR0LmNvCnx8YnRiaXQubmV0Cnx8YmV0YWNsb3Vkcy5uZXQKfHxibG9j +a3RlbXBvLmNvbQp8fGJsb2NrY2FzdC5pdAp8fHd3dy5iaW5nLmNvbQp8fGJhbmd1 +bWkubW9lCnx8Yi1vay5jYwpmb3J1bS5iYWJ5LWtpbmdkb20uY29tCnx8YmFieWxv +bmJlZS5jb20KYmFieW5ldC5jb20uaGsKYmFja2NoaW5hLmNvbQp8fGJhY2tjaGlu +YS5jb20KLmJhY2twYWNrZXJzLmNvbS50dy9mb3J1bQpiYWNrdG90aWFuYW5tZW4u +Y29tCnx8YmFkLm5ld3MKLmJhZGl1Y2FvLmNvbQp8fGJhZGl1Y2FvLmNvbQouYmFk +am9qby5jb20KYmFkb28uY29tCnxodHRwOi8vKjIuYmFoYW11dC5jb20udHcKfHxi +YWlkdS5qcAouYmFpamllLm9yZwp8fGJhaWppZS5vcmcKfHxiYWlsYW5kYWlseS5j +b20KfHxiYWl4aW5nLm1lCnx8YmFpemhpLm9yZwouYmFuYW5hLXZwbi5jb20KfHxi +YW5hbmEtdnBuLmNvbQp8fGJhbmQudXMKfHxiYW5kY2FtcC5jb20KLmJhbmR3YWdv +bmhvc3QuY29tCnx8YmFuZHdhZ29uaG9zdC5jb20KLmJhbmdicm9zbmV0d29yay5j +b20KLmJhbmdjaGVuLm5ldAp8aHR0cDovL2JhbmdjaGVuLm5ldAp8fGJhbmdrb2tw +b3N0LmNvbQp8fGJhbmd5b3VsYXRlci5jb20KYmFubmVkYm9vay5vcmcKfHxiYW5u +ZWRib29rLm9yZwouYmFubmVkbmV3cy5vcmcKLmJhcmFtYW5nYW9ubGluZS5jb20K +fGh0dHA6Ly9iYXJhbWFuZ2FvbmxpbmUuY29tCi5iYXJlbmFrZWRpc2xhbS5jb20K +fHxiYXJuYWJ1LmNvLnVrCnx8YmFydG9uLmRlCi5iYXN0aWxsZXBvc3QuY29tCnx8 +YmFzdGlsbGVwb3N0LmNvbQpiYXl2b2ljZS5uZXQKfHxiYXl2b2ljZS5uZXQKfHxi +YmNoYXQudHYKfHxiYi1jaGF0LnR2Ci5iYmcuZ292Ci5iYmt6LmNvbS9mb3J1bQou +YmJucmFkaW8ub3JnCmJicy10dy5jb20KLmJic2RpZ2VzdC5jb20vdGhyZWFkCmJi +c2xhbmQuY29tCi5iYnNtby5jb20KLmJic29uZS5jb20KYmJ0b3lzdG9yZS5jb20K +LmJjYy5jb20udHcvYm9hcmQKLmJjY2hpbmVzZS5uZXQKLmJjbW9ybmluZy5jb20K +YmRzbXZpZGVvcy5uZXQKLmJlYWNvbmV2ZW50cy5jb20KLmJlYm8uY29tCnx8YmVi +by5jb20KLmJlZXZwbi5jb20KfHxiZWV2cG4uY29tCi5iZWhpbmRraW5rLmNvbQp8 +fGJlaWppbmcxOTg5LmNvbQp8fGJlaWppbmcyMDIyLmFydApiZWlqaW5nc3ByaW5n +LmNvbQp8fGJlaWppbmdzcHJpbmcuY29tCi5iZWxhbWlvbmxpbmUuY29tCi5iZWxs +Lndpa2kKfGh0dHA6Ly9iZWxsLndpa2kKYmVteXdpZmUuY2MKYmVyaWMubWUKfHxi +ZXJsaW5lcmJlcmljaHQuZGUKLmJlcmxpbnR3aXR0ZXJ3YWxsLmNvbQp8fGJlcmxp +bnR3aXR0ZXJ3YWxsLmNvbQouYmVybS5jby5uegouYmVzdGdvcmUuY29tCi5iZXN0 +cG9ybnN0YXJkYi5jb20KfHxiZXN0dnBuLmNvbQp8fGJlc3R2cG5hbmFseXNpcy5j +b20KfHxiZXN0dnBuZm9yY2hpbmEubmV0Cnx8YmVzdHZwbnNlcnZlci5jb20KfHxi +ZXN0dnBuc2VydmljZS5jb20KfHxiZXN0dnBudXNhLmNvbQp8fGJldDM2NS5jb20K +LmJldGZhaXIuY29tCnx8YmV0dGVybmV0LmNvCi5iZXR0ZXJ2cG4uY29tCnx8YmV0 +dGVydnBuLmNvbQouYmV0dHdlZW4uY29tCnx8YmV0dHdlZW4uY29tCnx8YmV0dmlj +dG9yLmNvbQouYmV3d3cubmV0Ci5iZXlvbmRmaXJld2FsbC5jb20KfHxiZm5uLm9y +Zwp8fGJmc2guaGsKLmJndnBuLmNvbQp8fGJndnBuLmNvbQouYmlhbmxlaS5jb20K +QEB8fGJpYW5sZWkuY29tCmJpYW50YWlsYWppYW8uY29tCnx8YmlibGVzZm9yYW1l +cmljYS5vcmcKfHx2cGwuYmlibGlvY29tbW9ucy5jb20KfHxiaWVkaWFuLm1lCmJp +Z2Zvb2xzLmNvbQp8fGJpZ2phcGFuZXNlc2V4LmNvbQouYmlnbmV3cy5vcmcKfHxi +aWduZXdzLm9yZwouYmlnc291bmQub3JnCnx8YmlsZC5kZQouYmlsaXdvcmxkLmNv +bQp8aHR0cDovL2JpbGl3b3JsZC5jb20KfGh0dHA6Ly9iaWxseXBhbi5jb20vd2lr +aQouYmludXgubWUKYWkuYmlud2FuZy5tZS9jb3VwbGV0Ci5iaXQuZG8KfGh0dHA6 +Ly9iaXQuZG8KLmJpdC5seQp8aHR0cDovL2JpdC5seQohLS18fGJpdGJ1Y2tldC5v +cmcKfHxiaXRjaHV0ZS5jb20KfHxiaXRjb2ludGFsay5vcmcKLmJpdHNoYXJlLmNv +bQp8fGJpdHNoYXJlLmNvbQpiaXRzbm9vcC5jb20KLmJpdHZpc2UuY29tCnx8Yml0 +dmlzZS5jb20KYml6aGF0LmNvbQp8fGJsLWRvdWppbnNvdWtvLmNvbQouYmpuZXds +aWZlLm9yZwouYmpzLm9yZwpianpjLm9yZwp8fGJqemMub3JnCnx8YmxhY2tlZC5j +b20KLmJsYWNrbG9naWMuY29tCi5ibGFja3Zwbi5jb20KfHxibGFja3Zwbi5jb20K +Ymxld3Bhc3MuY29tCi5ibGlua3guY29tCnx8Ymxpbmt4LmNvbQpibGludy5jb20K +LmJsaXAudHYKfHxibGlwLnR2Cnx8YmxvY2tjYXN0Lml0Ci5ibG9ja2NuLmNvbQp8 +fGJsb2NrY24uY29tCnx8YmxvY2tlZGJ5aGsuY29tCnx8YmxvY2tsZXNzLmNvbQp8 +fGJsb2cuZGUKLmJsb2cuanAKfGh0dHA6Ly9ibG9nLmpwCkBAfHxqcHVzaC5jbgou +YmxvZ2NhdGFsb2cuY29tCnx8YmxvZ2NhdGFsb2cuY29tCnx8YmxvZ2NpdHkubWUK +LmJsb2dnZXIuY29tCnx8YmxvZ2dlci5jb20KYmxvZ2ltZy5qcAouYmxvZ2xpbmVz +LmNvbQp8fGJsb2dsaW5lcy5jb20KfHxibG9nbG92aW4uY29tCnJjb252ZXJzYXRp +b24uYmxvZ3MuY29tCi5ibG9ndGQub3JnCnxodHRwOi8vYmxvZ3RkLm9yZwp8fGJs +b29kc2hlZC5uZXQKfHxib290c3RyYXBjZG4uY29tCnx8Ymxvb21mb3J0dW5lLmNv +bQpibHVlYW5nZWxsaXZlLmNvbQp8fGJsdWJycnkuY29tCnx8Ym1kcnUuY29tCnx8 +Ym5leHQuY29tLnR3Cnx8Ym5ybWV0YWwuY29tCmJvYXJkcmVhZGVyLmNvbS90aHJl +YWQKfHxib2FyZHJlYWRlci5jb20KLmJvZC5hc2lhCnx8Ym9kLmFzaWEKLmJvZG9n +ODguY29tCi5ib2xlaHZwbi5uZXQKfHxib2xlaHZwbi5uZXQKYm9uYm9ubWUuY29t +Ci5ib25mb3VuZGF0aW9uLm9yZwouYm9uZ2FjYW1zLmNvbQp8fGJvb2JzdGFncmFt +LmNvbQp8fGJvb2suY29tLnR3Cnx8Ym9va2RlcG9zaXRvcnkuY29tCmJvb2tlcHVi +LmNvbQp8fGJvb2tzLmNvbS50dwp8fGJvb2t3YWxrZXIuY29tLnR3Cnx8Ym9yZ2Vu +bWFnYXppbmUuY29tCnx8Ym90YW53YW5nLmNvbQouYm90Lm51Ci5ib3dlbnByZXNz +LmNvbQp8fGJvd2VucHJlc3MuY29tCnx8YXBwLmJveC5jb20KZGwuYm94Lm5ldAp8 +fGRsLmJveC5uZXQKLmJveHBuLmNvbQp8fGJveHBuLmNvbQpib3h1bi5jb20KfHxi +b3h1bi5jb20KLmJveHVuLnR2Cnx8Ym94dW4udHYKLmJveHVuY2x1Yi5jb20KYm95 +YW5ndS5jb20KLmJveWZyaWVuZHR2LmNvbQouYm95c2Zvb2QuY29tCnx8YnIuc3QK +LmJyYWlueXF1b3RlLmNvbS9xdW90ZXMvYXV0aG9ycy9kL2RhbGFpX2xhbWEKfHxi +cmF1bWVpc3Rlci5vcmcKfHxicmF2ZS5jb20KLmJyYXZvdHViZS5uZXQKfHxicmF2 +b3R1YmUubmV0Ci5icmF6emVycy5jb20KfHxicmF6emVycy5jb20KfHxicmVhY2hl +ZC50bwouYnJlYWsuY29tCnx8YnJlYWsuY29tCmJyZWFrZ2Z3LmNvbQp8fGJyZWFr +Z2Z3LmNvbQpicmVha2luZzkxMS5jb20KLmJyZWFraW5ndHdlZXRzLmNvbQp8fGJy +ZWFraW5ndHdlZXRzLmNvbQp8fGJyZWFrd2FsbC5uZXQKYnJpaWFuLmNvbS82NTEx +L2ZyZWVnYXRlCnx8YnJpbGwuY29tCmJyaXp6bHkuY29tCnx8YnJpenpseS5jb20K +YnJvYWRib29rLmNvbQouYnJvYWRwcmVzc2luYy5jb20KfHxicm9hZHByZXNzaW5j +LmNvbQpiYnMuYnJvY2tiYnMuY29tCnx8YnJvb2tpbmdzLmVkdQpicnVjZXdhbmcu +bmV0Ci5icnV0YWx0Z3AuY29tCnx8YnJ1dGFsdGdwLmNvbQp8fGJza3kuYXBwCnx8 +YnNreS5uZXR3b3JrCnx8YnNreS5zb2NpYWwKfHxidDk1LmNvbQouYnRhaWEuY29t +Ci5idGJ0YXYuY29tCnx8YnRkaWcuY29tCnx8YnRkaWdnLm9yZwp8fGJ0Z3VhcmQu +Y29tCi5idGt1Lm1lCnx8YnRrdS5tZQp8fGJ0a3Uub3JnCi5idHNwcmVhZC5jb20K +LmJ0c3luY2tleXMuY29tCi5idWRhZWR1Lm9yZwp8fGJ1ZGFlZHUub3JnCi5idWRk +aGFuZXQuY29tLnR3L3pmcm9wL3RpYmV0Cnx8YnVmZmVyZWQuY29tCnx8YnVsbGd1 +YXJkLmNvbQouYnVsbG9nLm9yZwp8fGJ1bGxvZy5vcmcKLmJ1bGxvZ2dlci5jb20K +fHxidWxsb2dnZXIuY29tCnx8YnVtaW5nYmFpLm5ldAp8fGJ1bmJ1bmhrLmNvbQou +YnVzYXlhcmkuY29tCnxodHRwOi8vYnVzYXlhcmkuY29tCnx8YnVzaW5lc3MtaHVt +YW5yaWdodHMub3JnCi5idXNpbmVzc2luc2lkZXIuY29tL2JpbmctY291bGQtYmUt +Y2Vuc29yaW5nLXNlYXJjaC1yZXN1bHRzLTIwMTQKLmJ1c2luZXNzaW5zaWRlci5j +b20vY2hpbmEtYmFua3MtcHJlcGFyaW5nLWZvci1kZWJ0LWltcGxvc2lvbi0yMDE0 +Ci5idXNpbmVzc2luc2lkZXIuY29tL2hvbmcta29uZy1hY3RpdmlzdHMtZGVmeS1w +b2xpY2UtdGVhci1nYXMtYXMtcHJvdGVzdHMtY29udGludWUtb3Zlcm5pZ2h0LTIw +MTQKLmJ1c2luZXNzaW5zaWRlci5jb20vaW50ZXJuZXQtb3V0YWdlcy1yZXBvcnRl +ZC1pbi1ub3J0aC1rb3JlYS0yMDE0Ci5idXNpbmVzc2luc2lkZXIuY29tL2lwaG9u +ZS02LWlzLWFwcHJvdmVkLWZvci1zYWxlLWluLWNoaW5hLTIwMTQKLmJ1c2luZXNz +aW5zaWRlci5jb20vbmZsLWFubm91bmNlcnMtc3VyZmFjZS10YWJsZXRzLTIwMTQK +LmJ1c2luZXNzaW5zaWRlci5jb20vcGFuYW1hLXBhcGVycwouYnVzaW5lc3NpbnNp +ZGVyLmNvbS91bWJyZWxsYS1tYW4taG9uZy1rb25nLTIwMTQKfGh0dHA6Ly93d3cu +YnVzaW5lc3NpbnNpZGVyLmNvbS5hdS8qCi5idXNpbmVzc3RvZGF5LmNvbS50dwp8 +fGJ1c2luZXNzdG9kYXkuY29tLnR3Ci5idXN1Lm9yZy9uZXdzCnxodHRwOi8vYnVz +dS5vcmcvbmV3cwpidXN5dHJhZGUuY29tCi5idXp6aGFuZC5jb20KLmJ1enpoYW5k +Lm5ldAouYnV6em9yYW5nZS5jb20KfHxidXp6b3JhbmdlLmNvbQp8fGJ1enpzcHJv +dXQuY29tCnx8YnZwbi5jb20KfHxid2gxLm5ldAp8fGJ5cGFzc2NlbnNvcnNoaXAu +b3JnCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1DQy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0KfHxjb3ZlbmFudHN3YXRjaC5vcmcudHcKfHxjcHUtbW9ua2V5LmNvbQp8 +fGNvZmZlZW1hbmdhLnRvCnx8Y3RpbmV3cy5jb20KfHxjYWNoZWZseS5jb20KfHxj +YWNoZWZseS5uZXQKfHxjdXRvdXQucHJvCnx8Y2l4aWFveWEuY2x1Ygp8fGNhbXBh +aWduLWFyY2hpdmUuY29tCnx8Y2hpbmF1bmNlbnNvcmVkLnR2Cnx8Y2F0Ym94Lm1v +ZQp8fGNyb3Nzd2FsbC5vcmcKfHxjbGlwY29udmVydGVyLmNjCnx8emgtaGFucy5j +ZnNoOTkuY29tCnx8Y29sYWNsb3VkLm5ldAp8fGNpLWVuLmpwCnx8Yy1zcGFuLm9y +ZwouYy1zcGFudmlkZW8ub3JnCnx8Yy1zcGFudmlkZW8ub3JnCnx8Yy1lc3Qtc2lt +cGxlLmNvbQouYzEwMHRpYmV0Lm9yZwp8fGNhYmxlYXYudHYKfHxjYWJsZWdhdGVz +ZWFyY2gubmV0Ci5jYWNoaW5lc2UuY29tCi5jYWNudy5jb20KfGh0dHA6Ly9jYWNu +dy5jb20KLmNhY3R1c3Zwbi5jb20KfHxjYWN0dXN2cG4uY29tCi5jYWZlcHJlc3Mu +Y29tCi5jYWhyLm9yZy50dwouY2FsYW1lby5jb20vYm9va3MKfHxjYWxlbmRhcnou +Y29tCi5jYWxnYXJ5Y2hpbmVzZS5jYQouY2FsZ2FyeWNoaW5lc2UuY29tCi5jYWxn +YXJ5Y2hpbmVzZS5uZXQKLmNhbTQuY29tCi5jYW00LmpwCi5jYW00LnNnCi5jYW1m +cm9nLmNvbQp8fGNhbWZyb2cuY29tCnx8Y2FtcGFpZ25mb3J1eWdodXJzLm9yZwp8 +fGNhbXMuY29tCi5jYW1zLm9yZy5zZwpjYW5hZGFtZWV0LmNvbQouY2FuYWxwb3Ju +by5jb20KfGh0dHA6Ly9iYnMuY2FudG9uZXNlLmFzaWEvCiEtLWh0dHA6Ly93d3cu +Y2FudG9uZXNlLmFzaWEvYWN0aW9uLWJicy5odG1sCi5jYW55dS5vcmcKfHxjYW55 +dS5vcmcKLmNhb2JpYW4uaW5mbwp8fGNhb2JpYW4uaW5mbwpjYW9jaGFuZ3Fpbmcu +Y29tCnx8Y2FvY2hhbmdxaW5nLmNvbQouY2FwLm9yZy5oawp8fGNhcC5vcmcuaGsK +fHxjYW9wb3JuLnVzCi5jYXJhYmluYXN5cGlzdG9sYXMuY29tCmNhcmRpbmFsa3Vu +Z2ZvdW5kYXRpb24ub3JnCnx8cG9zdHMuY2FyZWVyZW5naW5lLnVzCmNhcm1vdG9y +c2hvdy5jb20KfHxjYXJyZC5jbwouY2FydG9vbm1vdmVtZW50LmNvbQp8fGNhcnRv +b25tb3ZlbWVudC5jb20KLmNhc2FkZWx0aWJldGJjbi5vcmcKLmNhc2F0aWJldC5v +cmcubXgKfGh0dHA6Ly9jYXNhdGliZXQub3JnLm14Ci5jYXJpLmNvbS5teQp8fGNh +cmkuY29tLm15Cnx8Y2FyaWJiZWFuY29tLmNvbQp8fGNhcm91c2VsbC5jb20uaGsK +LmNhc2lub2tpbmcuY29tCi5jYXNpbm9yaXZhLmNvbQp8fGNhdGNoMjIubmV0Ci5j +YXRjaGdvZC5jb20KfGh0dHA6Ly9jYXRjaGdvZC5jb20KLmNhdGhvbGljLm9yZy5o +awp8fGNhdGhvbGljLm9yZy5oawpjYXRob2xpYy5vcmcudHcKfHxjYXRob2xpYy5v +cmcudHcKLmNhdGh2b2ljZS5vcmcudHcKfHxjYXRvLm9yZwp8fGNhdHR0LmNvbQp8 +fGNhdXMuY29tCi5jYmMuY2EKfHxjYmMuY2EKLmNic25ld3MuY29tL3ZpZGVvCi5j +YnRjLm9yZy5oawp8fHNvdXRocGFyay5jYy5jb20KIS0uY2NjLmRlCiEtfHxjY2Mu +ZGUKfHxjY2NhdC5jYwp8fGNjY2F0LmNvCnx8Y2NmZC5vcmcudHcKLmNjaGVyZS5j +b20KfHxjY2hlcmUuY29tCi5jY2ltLm9yZwouY2NsaWZlLmNhCmNjbGlmZS5vcmcK +fHxjY2xpZmUub3JnCmNjbGlmZWZsLm9yZwp8fGNjbGlmZWZsLm9yZwouY2N0aGVy +ZS5jb20KfHxjY3RoZXJlLmNvbQp8fGNjdGhlcmUubmV0Ci5jY3Rtd2ViLm5ldAou +Y2N0b25nYmFvLmNvbS9hcnRpY2xlLzIwNzg3MzIKY2N1ZS5jYQpjY3VlLmNvbQou +Y2N2b2ljZS5jYQouY2N3Lm9yZy50dwouY2dkZXBvdC5vcmcKfGh0dHA6Ly9jZ2Rl +cG90Lm9yZwp8fGNkYm9vay5vcmcKLmNkZWYub3JnCnx8Y2RlZi5vcmcKfHxjZGln +LmluZm8KY2RqcC5vcmcKfHxjZGpwLm9yZwohLS0uY2RuLWFwcGxlLmNvbQohLS18 +fGNkbi1hcHBsZS5jb20KLmNkbmV3cy5jb20udHcKY2RwMTk4OS5vcmcKY2RwMTk5 +OC5vcmcKfHxjZHAxOTk4Lm9yZwpjZHAyMDA2Lm9yZwp8fGNkcDIwMDYub3JnCnx8 +Y2RwZXUub3JnCnx8Y2RwdWsuY28udWsKfHxjZHB3ZWIub3JnCnx8Y2Rwd2ViLm9y +Zwp8fGNkcHd1Lm9yZwp8fGNkdy5jb20KfHxjZWNjLmdvdgp8fGNlbGx1bG8uaW5m +bwp8fGNlbmV3cy5ldQp8fGNlbnRlcmZvcmh1bWFucmVwcm9kLmNvbQp8fGNlbnRy +YWxuYXRpb24uY29tCi5jZW50dXJ5cy5uZXQKfGh0dHA6Ly9jZW50dXJ5cy5uZXQK +LmNmaGtzLm9yZy5oawouY2Zvcy5kZQp8fGNmci5vcmcKLmNmdGZjLmNvbQouY2dz +dC5lZHUKLmNoYW5nZS5vcmcKfHxjaGFuZ2Uub3JnCi5jaGFuZ3AuY29tCnx8Y2hh +bmdwLmNvbQp8fGNoYW5uZWxuZXdzYXNpYS5jb20KfHxjaGFud29ybGQub3JnCnx8 +Y2hhb3Muc29jaWFsCnx8Y2hhcmFjdGVyLmFpCnx8Y2hhdGdwdC5jb20KLmNoYXR1 +cmJhdGUuY29tCnx8Y2hhdHVyYmF0ZS5jb20KLmNodWFuZy15ZW4ub3JnCnx8Y2hl +Y2tnZncuY29tCnx8Y2hlbmdtaW5nbWFnLmNvbQp8fGNoZW5ndWFuZ2NoZW5nLmNv +bQp8fGNoZW5wb2tvbmcuY29tCnx8Y2hlbnBva29uZ3ZpcC5jb20KfHxjaGVycnlz +YXZlLmNvbQp8fGNoaG9uZ2JpLm9yZwp8fGNoaW5hLXdlZWsuY29tCnx8Y2hpbmEx +MDEuY29tCnx8Y2hpbmExOC5vcmcKfHxjaGluYTIxLmNvbQp8fGNoaW5hMjEub3Jn +Cnx8Y2hpbmE1MDAwLnVzCnx8Y2hpbmFhZmZhaXJzLm9yZwp8fGNoaW5hYWlkLnVz +Cnx8Y2hpbmFhaWQub3JnCnx8Y2hpbmFhaWQubmV0Cnx8Y2hpbmFjaGFuZ2Uub3Jn +Cnx8Y2hpbmFjaGFubmVsLmhrCnx8Y2hpbmFkZW1vY3JhdHMub3JnCnx8Y2hpbmFk +aWFsb2d1ZS5uZXQKfHxjaGluYWRpZ2l0YWx0aW1lcy5uZXQKfHxjaGluYWVsZWN0 +aW9ucy5vcmcKfHxjaGluYWZpbGUuY29tCnx8Y2hpbmFmcmVlcHJlc3Mub3JnCi5j +aGluYWdhdGUuY29tCmNoaW5hZ2Z3Lm9yZwp8fGNoaW5hZ2Z3Lm9yZwouY2hpbmFn +b25ldC5jb20KLmNoaW5haG9yaXpvbi5vcmcKfHxjaGluYWhvcml6b24ub3JnCi5j +aGluYWh1c2guY29tCi5jaGluYWlucGVyc3BlY3RpdmUuY29tCmNoaW5hbGFib3J3 +YXRjaC5vcmcKY2hpbmFsYXd0cmFuc2xhdGUuY29tCi5jaGluYXBvc3QuY29tLnR3 +L3RhaXdhbi9uYXRpb25hbC9uYXRpb25hbC1uZXdzCmNoaW5hbGF3YW5kcG9saWN5 +LmNvbQouY2hpbmFtdWxlLmNvbQp8fGNoaW5hbXVsZS5jb20KY2hpbmFtei5vcmcK +LmNoaW5hbmV3c2NlbnRlci5jb20KfGh0dHBzOi8vY2hpbmFuZXdzY2VudGVyLmNv +bQouY2hpbmFwcmVzcy5jb20ubXkKfHxjaGluYXByZXNzLmNvbS5teQouY2hpbmEt +cmV2aWV3LmNvbS51YQp8aHR0cDovL2NoaW5hLXJldmlldy5jb20udWEKLmNoaW5h +cmlnaHRzaWEub3JnCmNoaW5hc21pbGUubmV0L2ZvcnVtcwpjaGluYXNvY2lhbGRl +bW9jcmF0aWNwYXJ0eS5jb20KfHxjaGluYXNvY2lhbGRlbW9jcmF0aWNwYXJ0eS5j +b20KY2hpbmFzb3VsLm9yZwp8fGNoaW5hc291bC5vcmcKLmNoaW5hc3Vja3MubmV0 +Cnx8Y2hpbmF0b3BzZXguY29tCi5jaGluYXRvd24uY29tLmF1CmNoaW5hd2F5Lm9y +ZwouY2hpbmF3b3JrZXIuaW5mbwp8fGNoaW5hd29ya2VyLmluZm8KY2hpbmF5b3V0 +aC5vcmcuaGsKY2hpbmVzZS1sZWFkZXJzLm9yZwp8fGNoaW5lc2UtbWVtb3JpYWwu +b3JnCi5jaGluZXNlZGFpbHkuY29tCnx8Y2hpbmVzZWRhaWx5bmV3cy5jb20KLmNo +aW5lc2VkZW1vY3JhY3kuY29tCnx8Y2hpbmVzZWRlbW9jcmFjeS5jb20KfHxjaGlu +ZXNlZ2F5Lm9yZwouY2hpbmVzZW4uZGUKfHxjaGluZXNlbi5kZQp8fGNoaW5lc2Vu +ZXdzLm5ldC5hdQouY2hpbmVzZXBlbi5vcmcKfHxjaGluZXNlcmFkaW9zZWF0dGxl +LmNvbQp8fGNoaW5lc2V1cHJlc3MuY29tCi5jaGluZ2NoZW9uZy5jb20KfHxjaGlu +Z2NoZW9uZy5jb20KLmNoaW5tYW4ubmV0CnxodHRwOi8vY2hpbm1hbi5uZXQKY2hp +dGh1Lm9yZwp8fGNubmV3cy5jaG9zdW4uY29tCi5jaHJkbmV0LmNvbQp8aHR0cDov +L2NocmRuZXQuY29tCi5jaHJpc3RpYW5mcmVlZG9tLm9yZwp8fGNocmlzdGlhbmZy +ZWVkb20ub3JnCmNocmlzdGlhbnN0dWR5LmNvbQp8fGNocmlzdGlhbnN0dWR5LmNv +bQpjaHJpc3R1c3JleC5vcmcvd3d3MS9zZGMKLmNodWJvbGQuY29tCmNodWJ1bi5j +b20KfHxjaHJpc3RpYW50aW1lcy5vcmcuaGsKLmNocmxhd3llcnMuaGsKfHxjaHJs +YXd5ZXJzLmhrCi5jaHVyY2hpbmhvbmdrb25nLm9yZy9iNS9pbmRleC5waHAKfGh0 +dHA6Ly9jaHVyY2hpbmhvbmdrb25nLm9yZy9iNS9pbmRleC5waHAKLmNodXNoaWdh +bmdkcnVnLmNoCi5jaWVuZW4uY29tCi5jaW5lYXN0ZW50cmVmZi5kZQouY2lwZmcu +b3JnCnx8Y2lyb3NhbnRpbGxpLmNvbQouY2l0aXplbmNuLmNvbQp8fGNpdGl6ZW5j +bi5jb20KfHxjaXRpemVubGFiLmNhCnx8Y2l0aXplbmxhYi5vcmcKLmNpdGl6ZW5s +YWIub3JnCmNpdGl6ZW5zcmFkaW8ub3JnCi5jaXR5MzY1LmNhCnxodHRwOi8vY2l0 +eTM2NS5jYQpjaXR5OXguY29tCnx8Y2l0eXBvcHVsYXRpb24uZGUKLmNpdHl0YWxr +LnR3L2V2ZW50Ci5jaXZpY3BhcnR5LmhrCnx8Y2l2aWNwYXJ0eS5oawpjaXZpbGhy +ZnJvbnQub3JnCnx8Y2l2aWxocmZyb250Lm9yZwouY2l2aWxpYW5ndW5uZXIuY29t +Ci5jaXZpbG1lZGlhLnR3Cnx8Y2l2aWxtZWRpYS50dwp8fGNpdml0YWkuY29tCi5j +azEwMS5jb20KfHxjazEwMS5jb20KLmNsYXJpb25wcm9qZWN0Lm9yZy9uZXdzL2lz +bGFtaWMtc3RhdGUtaXNpcy1pc2lsLXByb3BhZ2FuZGEKfHxjbGFzc2ljYWxndWl0 +YXJibG9nLm5ldAouY2xiLm9yZy5oawpjbGVhcmhhcm1vbnkubmV0CmNsZWFyd2lz +ZG9tLm5ldAp8fGNsaW5pY2EtdGliZXQucnUKLmNsaXBmaXNoLmRlCnx8YXBwLmNs +b3VkY29uZS5jb20KfHxjbG91ZGZsYXJlLWlwZnMuY29tCnx8Y2x1YjEwNjkuY29t +Cnx8Y2x1YmhvdXNlYXBpLmNvbQp8fGNtZWdyb3VwLmNvbQp8fGNtaS5vcmcudHcK +fGh0dHA6Ly93d3cuY21vaW5jLm9yZwpjbXAuaGt1LmhrCnx8Y211bGUuY29tCnx8 +Y21zLmdvdgp8aHR0cDovL3Zwbi5jbXUuZWR1CnxodHRwOi8vdnBuLnN2LmNtdS5l +ZHUKLmNuNi5ldQouY25hLmNvbS50dwp8fGNuYS5jb20udHcKLmNuYWJjLmNvbQou +Y25kLm9yZwp8fGNuZC5vcmcKZG93bmxvYWQuY25ldC5jb20KLmNuZXgub3JnLmNu +Ci5jbmluZXUuY29tCi5jbm4uY29tL3ZpZGVvCi5jbnBvbGl0aWNzLm9yZwp8fGNu +cG9saXRpY3Mub3JnCi5jbi1wcm94eS5jb20KfGh0dHA6Ly9jbi1wcm94eS5jb20K +LmNucHJveHkuY29tCm5ld3MuY255ZXMuY29tCnx8Y29hdC5jby5qcAp8fGNvY2hp +bmEub3JnCnx8Y29kZXNoYXJlLmlvCnx8Y29kZXNrdWxwdG9yLm9yZwp8fGNvZmFj +dHMudHcKfHxjb25vaGEuanAKfGh0dHA6Ly90b3NoLmNvbWVkeWNlbnRyYWwuY29t +CmNvbWVmcm9tY2hpbmEuY29tCnx8Y29tZWZyb21jaGluYS5jb20KLmNvbWljLW1l +Z2EubWUKY29tbWFuZGFybXMuY29tCnx8Y29tbWVudHNoay5jb20KLmNvbW11bmlz +dGNyaW1lcy5vcmcKfHxjb21tdW5pc3RjcmltZXMub3JnCnx8Y29tbXVuaXR5Y2hv +aWNlY3UuY29tCnx8Y29tcGFyaXRlY2guY29tCnx8Y29tcGlsZWhlYXJ0LmNvbQp8 +fGNvbm9oYS5qcAouY29udGFjdG1hZ2F6aW5lLm5ldAouY29udmlvLm5ldAp8fGNv +b2wxOC5jb20KLmNvb2xhbGVyLmNvbQp8fGNvb2xhbGVyLmNvbQpjb29sZGVyLmNv +bQp8fGNvb2xkZXIuY29tCnx8Y29vbGxvdWQub3JnLnR3Ci5jb29sbmN1dGUuY29t +Cnx8Y29vbHN0dWZmaW5jLmNvbQpjb3J1bWNvbGxlZ2UuY29tCi5jb3MtbW9lLmNv +bQp8aHR0cDovL2Nvcy1tb2UuY29tCi5jb3NwbGF5amF2LnBsCnxodHRwOi8vY29z +cGxheWphdi5wbAouY290d2VldC5jb20KfHxjb3R3ZWV0LmNvbQouY291cnNlaGVy +by5jb20KfHxjb3Vyc2VoZXJvLmNvbQpjcGoub3JnCnx8Y3BqLm9yZwouY3E5OS51 +cwp8aHR0cDovL2NxOTkudXMKY3JhY2tsZS5jb20KfHxjcmFja2xlLmNvbQouY3Jh +enlzLmNjCi5jcmF6eXNoaXQuY29tCnx8Y3JhenlzaGl0LmNvbQp8fGNyY2hpbmEu +b3JnCmNyZC1uZXQub3JnCmNyZWFkZXJzLm5ldAp8fGNyZWFkZXJzLm5ldAouY3Jl +YWRlcnNuZXQuY29tCnx8Y3Jpc3R5bGkuY29tCnx8Y3JveHlwcm94eS5jb20KLmNy +b2NvdHViZS5jb20KfGh0dHA6Ly9jcm9jb3R1YmUuY29tCi5jcm9zc3Zwbi5uZXQK +fHxjcm9zc3Zwbi5uZXQKfHxjcnVjaWFsLmNvbQp8fGJsb2cuY3J5cHRvZ3JhcGh5 +ZW5naW5lZXJpbmcuY29tCmNzZHBhcnR5LmNvbQp8fGNzZHBhcnR5LmNvbQp8fGNz +aXMub3JnCnx8Y3Ntb25pdG9yLmNvbQp8fGNzdWNoZW4uZGUKfHxjc3cub3JnLnVr +Cnx8Y3Qub3JnLnR3Ci5jdGFvLm9yZwp8fGN0aXR2LmNvbS50dwp8fGN0b3djLm9y +Zwp8fGN0cy5jb20udHcKfHxjdHdhbnQuY29tCnxodHRwOi8vbGlicmFyeS51c2Mu +Y3Voay5lZHUuaGsvCnxodHRwOi8vbWpsc2gudXNjLmN1aGsuZWR1LmhrLwouY3Vo +a2Fjcy5vcmcvfmJlbm5nCi5jdWl3ZWlwaW5nLm5ldAp8fGN1aXdlaXBpbmcubmV0 +Cnx8Y3VsdHVyZS50dwouY3VtbG91ZGVyLmNvbQp8fGN1bWxvdWRlci5jb20KfHxj +dXJ2ZWZpc2guY29tCnx8Y3VzcC5oawouY3V0c2NlbmVzLm5ldAp8fGN1dHNjZW5l +cy5uZXQKLmN3LmNvbS50dwp8fGN3LmNvbS50dwp8aHR0cDovL2ZvcnVtLmN5YmVy +Y3RtLmNvbQpjeWJlcmdob3N0dnBuLmNvbQp8fGN5YmVyZ2hvc3R2cG4uY29tCnx8 +Y3luc2NyaWJlLmNvbQp8fGlmYW4uY3ouY2MKfHxtaWtlLmN6LmNjCnx8bmljLmN6 +LmNjCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1ERC0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0KfHxkZW5vLmRldgp8fGRvY3MuZGVuby5jb20KfHxkb29tOS5vcmcKfHxk +d2ViLmxpbmsKfHxkb2NrZXIuaW8KfHxkaXNuZXlwbHVzLmNvbQp8fGRkZXguaW8K +fHxkLmNhc2gKfHxkb3ViaXl1bmJhY2t1cC5jb20KfHxjbG91ZC5kaWZ5LmFpCi5k +LWZ1a3l1LmNvbQp8aHR0cDovL2QtZnVreXUuY29tCi5kMTAwLm5ldAp8fGQxMDAu +bmV0Ci5kMmJheS5jb20KfGh0dHA6Ly9kMmJheS5jb20KLmRhYnIuY28udWsKfHxk +YWJyLmNvLnVrCmRhYnIuZXUKZGFici5tb2JpCnx8ZGFici5tb2JpCnx8ZGFici5t +ZQpkYWRhemltLmNvbQp8fGRhZGF6aW0uY29tCi5kYWRpMzYwLmNvbQouZGFmYWJl +dC5jb20KZGFmYWdvb2QuY29tCmRhZmFoYW8uY29tCi5kYWZvaC5vcmcKLmRhZnRw +b3JuLmNvbQouZGFnZWxpamtzZXN0YW5kYWFyZC5ubAouZGFpZG9zdHVwLnJ1Cnxo +dHRwOi8vZGFpZG9zdHVwLnJ1Cnx8ZGFpbHltYWlsLmNvLnVrCi5kYWlseW1vdGlv +bi5jb20KfHxkYWlseW1vdGlvbi5jb20KfHxkYWlseXNhYmFoLmNvbQouZGFqaXl1 +YW4uY29tCnx8ZGFqaXl1YW4uZGUKZGFqaXl1YW4uZXUKZGFsYWlsYW1hLmNvbQou +ZGFsYWlsYW1hLm1uCnxodHRwOi8vZGFsYWlsYW1hLm1uCi5kYWxhaWxhbWEucnUK +fHxkYWxhaWxhbWEucnUKZGFsYWlsYW1hODAub3JnCi5kYWxhaWxhbWEtYXJjaGl2 +ZXMub3JnCi5kYWxhaWxhbWFjZW50ZXIub3JnCnxodHRwOi8vZGFsYWlsYW1hY2Vu +dGVyLm9yZwpkYWxhaWxhbWFmZWxsb3dzLm9yZwouZGFsYWlsYW1hZmlsbS5jb20K +LmRhbGFpbGFtYWZvdW5kYXRpb24ub3JnCi5kYWxhaWxhbWFoaW5kaS5jb20KLmRh +bGFpbGFtYWluYXVzdHJhbGlhLm9yZwouZGFsYWlsYW1hamFwYW5lc2UuY29tCi5k +YWxhaWxhbWFwcm90ZXN0ZXJzLmluZm8KLmRhbGFpbGFtYXF1b3Rlcy5vcmcKLmRh +bGFpbGFtYXRydXN0Lm9yZwouZGFsYWlsYW1hdmlzaXQub3JnLm56Ci5kYWxhaWxh +bWF3b3JsZC5jb20KfHxkYWxhaWxhbWF3b3JsZC5jb20KZGFsaWFubWVuZy5vcmcK +fHxkYWxpYW5tZW5nLm9yZwouZGFsaXVsaWFuLm9yZwp8fGRhbGl1bGlhbi5vcmcK +LmRhbmtlNGNoaW5hLm5ldAp8fGRhbmtlNGNoaW5hLm5ldApkYW9sYW4ubmV0Cnx8 +ZGFycmVubGl1d2VpLmNvbQp8fGRhc2hsYW5lLmNvbQp8fGRhdW0ubmV0Ci5kYXZp +ZC1raWxnb3VyLmNvbQp8aHR0cDovL2RhdmlkLWtpbGdvdXIuY29tCmRheGEuY24K +fHxkYXhhLmNuCi5kYXlsaWZlLmNvbS90b3BpYy9kYWxhaV9sYW1hCnx8ZGIudHQK +fHxkYmdqZC5jb20KfHxkY2FyZC50dwpkY21pbGl0YXJ5LmNvbQp8fGRkYy5jb20u +dHcKfHxkZWFkaG91c2Uub3JnCnx8ZGVhZGxpbmUuY29tCnx8ZGVlcGFpLm9yZwp8 +fGRlY29kZXQuY28KCiEtLU9yaWdpbjpjZG4taTMwJF8KIS0tRXhjZXB0aW9uOiBI +b21lcGFnZSBhY2Nlc3Mgd2l0aG91dCByc3QKIS0tS2V5d29yZCBpcyAkXwouZGVm +aW5lYmFiZS5jb20KCnx8ZGVsY2FtcC5uZXQKZGVsaWNpb3VzLmNvbS9HRldib29r +bWFyawouZGVtb2NyYXRzLm9yZwp8fGRlbW9jcmF0cy5vcmcKLmRlbW9zaXN0by5o +awp8fGRlbW9zaXN0by5oawp8fGRlc2Muc2UKfHxkZXNzY2kuY29tCi5kZXN0cm95 +LWNoaW5hLmpwCnx8ZGV1dHNjaGUtd2VsbGUuZGUKfHxkZXZpYW50YXJ0LmNvbQp8 +fGRldmlhbnRhcnQubmV0Cnx8ZGV2aW8udXMKfHxkZXZwbi5jb20KfHxkZXZ2LmFp +CmRmbi5vcmcKZGhhcm1ha2FyYS5uZXQKLmRoYXJhbXNhbGFuZXQuY29tCi5kaWFv +eXVpc2xhbmRzLm9yZwp8fGRpYW95dWlzbGFuZHMub3JnCi5kaWZhbmd3ZW5nZS5v +cmcKfGh0dHA6Ly9kaWdpbGFuZC50dy8KLmRpaWdvLmNvbQp8fGRpaWdvLmNvbQou +ZGlwaXR5LmNvbQp8fGRpcmVjdGNyZWF0aXZlLmNvbQohLS18fGRpc2NvZ3MuY29t +CiEtLUBAfHxjZG4uZGlzY29ncy5jb20KLmRpc2N1c3MuY29tLmhrCnx8ZGlzY3Vz +cy5jb20uaGsKLmRpc2N1c3M0dS5jb20KfHxkaXNwLmNjCi5kaXNxdXMuY29tCnx8 +ZGlzcXVzLmNvbQouZGl0LWluYy51cwp8fGRpdC1pbmMudXMKfHxkaXlpbi5vcmcK +LmRpemhpZGl6aGkuY29tCnx8ZGl6aHV6aGlzaGFuZy5jb20KZGphbmdvc25pcHBl +dHMub3JnCnx8ZGwtbGFieS5qcAp8fGRsaXZlLnR2Cnx8ZGxzaXRlLmNvbQp8fGRs +eW91dHViZS5jb20KfHxkbWMubmljbwp8fGRtY2RuLm5ldAouZG5zY3J5cHQub3Jn +Cnx8ZG5zY3J5cHQub3JnCnx8ZG5zMmdvLmNvbQp8fGRuc3NlYy5uZXQKZG9jdG9y +dm9pY2Uub3JnCgohLS1Eb2dGYXJ0TmV0d29yawouZG9nZmFydG5ldHdvcmsuY29t +L3RvdXIKZ2xvcnlob2xlLmNvbQoKLmRvamluLmNvbQp8fGRvbGMuZGUKfHxkb2xm +Lm9yZy5oawouZG9tYWluLmNsdWIudHcKLmRvbWFpbnRvZGF5LmNvbS5hdQpjaGlu +ZXNlLmRvbmdhLmNvbQpkb25ndGFpd2FuZy5jb20KfHxkb25ndGFpd2FuZy5jb20K +LmRvbmd0YWl3YW5nLm5ldAp8fGRvbmd0YWl3YW5nLm5ldAouZG9uZ3lhbmdqaW5n +LmNvbQp8fGRhbmJvb3J1LmRvbm1haS51cwouZG9udGZpbHRlci51cwp8fGRvb3No +by5jb20KfHxkb291cmJlc3Qub3JnCi5kb3JqZXNodWdkZW4uY29tCi5kb3RwbGFu +ZS5jb20KfHxkb3RwbGFuZS5jb20KfHxkb3RzdWIuY29tCi5kb3R2cG4uY29tCnx8 +ZG90dnBuLmNvbQouZG91Yi5pbwp8fGRvdWIuaW8KfHxkb3VibGV0aGlua2xhYi5v +cmcKfHxkb3Vnc2NyaXB0cy5jb20KfHxkb3VqaW5jYWZlLmNvbQp8aHR0cHM6Ly9i +YXJ0ZW5kZXIuZG93am9uZXMuY29tCmRwaGsub3JnCmRwcC5vcmcudHcKfHxkcHAu +b3JnLnR3Cnx8ZHByLmluZm8KfHxkcmFnb25zcHJpbmdzLm9yZwohLS18fGRyYXcu +aW8KLmRyZWFtYW1hdGV1cnMuY29tCi5kcmVwdW5nLm9yZwp8fGRyZ2FuLm5ldAp8 +fGRyb3Bib29rcy50dgp8fGRyb3Bib3guY29tCnx8ZHJvcGJveGFwaS5jb20KfHxk +cm9wYm94dXNlcmNvbnRlbnQuY29tCi5kcnR1YmVyLmNvbQouZHNjbi5pbmZvCnxo +dHRwOi8vZHNjbi5pbmZvCi5kc3RrLmRrCnxodHRwOi8vZHN0ay5kawp8fGR0aWJs +b2cuY29tCnx8ZHRpYy5taWwKLmR1Y2tkdWNrZ28uY29tCnx8ZHVja2R1Y2tnby5j +b20KLmR1Y2tsb2FkLmNvbS9kb3dubG9hZAp8fGR1Y2tteWxpZmUuY29tCi5kdWdh +LmpwCnxodHRwOi8vZHVnYS5qcAouZHVpaHVhLm9yZwp8fGR1aWh1YS5vcmcKfHxk +dWlodWFocmpvdXJuYWwub3JnCmR1cGluZy5uZXQKfHxkdXBsaWNhdGkuY29tCmR1 +cG9sYS5jb20KZHVwb2xhLm5ldAouZHVzaGkuY2EKfHxkdXlhb3NzLmNvbQp8fGR2 +b3Jhay5vcmcKLmR3LmNvbQp8fGR3LmNvbQp8fGR3LmRlCi5kdy13b3JsZC5jb20K +fHxkdy13b3JsZC5jb20KLmR3LXdvcmxkLmRlCnxodHRwOi8vZHctd29ybGQuZGUK +d3d3LmR3aGVlbGVyLmNvbQpkd25ld3MuY29tCnx8ZHduZXdzLmNvbQpkd25ld3Mu +bmV0Cnx8ZHduZXdzLm5ldAp4eXMuZHhpb25nLmNvbQp8fGR5bmF3ZWJpbmMuY29t +Cnx8ZHlzZnouY2MKLmR6emUuY29tCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1FRS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHxlNjIxLm5ldAp8fGVkeC1jZG4ub3Jn +Cnx8ZXZlcmlwZWRpYS5vcmcKfHxlcG9jaHRpbWVzLmNvbS50dwp8fGV0aGVyc2Nh +bi5jb20KfHxlbGNvbmZpZGVuY2lhbC5jb20KfHxlLWNsYXNzaWNhbC5jb20udHcK +fHxlLWdvbGQuY29tCi5lLWdvbGQuY29tCi5lLWhlbnRhaS5vcmcKfHxlLWhlbnRh +aS5vcmcKLmUtaGVudGFpZGIuY29tCnxodHRwOi8vZS1oZW50YWlkYi5jb20KZS1p +bmZvLm9yZy50dwouZS16b25lLmNvbS5oay9kaXNjdXoKfGh0dHA6Ly9lLXpvbmUu +Y29tLmhrL2Rpc2N1egouZTEyMy5oawp8fGUxMjMuaGsKLmVhcmx5dGliZXQuY29t +CnxodHRwOi8vZWFybHl0aWJldC5jb20KLmVhcnRoY2FtLmNvbQouZWFydGh2cG4u +Y29tCnx8ZWFydGh2cG4uY29tCnx8ZWFzdGFzaWFmb3J1bS5vcmcKLmVhc3Rlcm5s +aWdodG5pbmcub3JnCi5lYXN0dHVya2VzdGFuLmNvbQp8aHR0cDovL3d3dy5lYXN0 +dHVya2lzdGFuLm5ldC8KLmVhc3R0dXJraXN0YW4tZ292Lm9yZwouZWFzdHR1cmtp +c3RhbmNjLm9yZwouZWFzdHR1cmtpc3RhbmdvdmVybm1lbnRpbmV4aWxlLnVzCnx8 +ZWFzdHR1cmtpc3RhbmdvdmVybm1lbnRpbmV4aWxlLnVzCi5lYXN5Y2EuY2EKLmVh +c3lwaWMuY29tCnx8Zm5jLmViYy5uZXQudHcKfHxuZXdzLmViYy5uZXQudHcKLmVi +b255LWJlYXV0eS5jb20KZWJvb2ticm93c2UuY29tCmVib29rZWUuY29tCnx8ZWNm +YS5vcmcudHcKfHxlY2ltZy50dwplY21pbmlzdHJ5Lm5ldAouZWNvbm9taXN0LmNv +bQpiYnMuZWNzdGFydC5jb20KZWRnZWNhc3RjZG4ubmV0Cnx8ZWRnZWNhc3RjZG4u +bmV0Ci90d2ltZ1wuZWRnZXN1aXRlXC5uZXRcL1wvP2FwcGxlZGFpbHkvCmVkaWN5 +cGFnZXMuY29tCi5lZG1vbnRvbmNoaW5hLmNuCi5lZG1vbnRvbnNlcnZpY2UuY29t +CmVkb29ycy5jb20KLmVkdWJyaWRnZS5jb20KfHxlZHVicmlkZ2UuY29tCi5lZHVw +cm8ub3JnCnx8ZWV2cG4uY29tCmVmY2Mub3JnLmhrCi5lZnVrdC5jb20KfGh0dHA6 +Ly9lZnVrdC5jb20KfHxlaWMtYXYuY29tCnx8ZWlyZWluaWtvdGFlcnVrYWkuY29t +Ci5laXNiYi5jb20KLmVrc2lzb3psdWsuY29tCnx8ZWtzaXNvemx1ay5jb20KZWxl +Y3Rpb25zbWV0ZXIuY29tCnx8ZWxnb29nLmltCi5lbHBhaXMuY29tCnx8ZWxwYWlz +LmNvbQouZWx0b25kaXNuZXkuY29tCi5lbWFnYS5jb20vaW5mby8zNDA3CmVtaWx5 +bGF1Lm9yZy5oawouZW1hbm5hLmNvbS9jaGluZXNlVHJhZGl0aW9uYWwKLmVtcGZp +bC5jb20KLmVtdWxlLWVkMmsuY29tCnxodHRwOi8vZW11bGUtZWQyay5jb20KLmVt +dWxlZmFucy5jb20KfGh0dHA6Ly9lbXVsZWZhbnMuY29tCi5lbXVwYXJhZGlzZS5t +ZQouZW5hbnlhbmcubXkKIS0tLmVuYW55YW5nLm15L25ld3MvMjAxNzA1MDIvJUU3 +JUJFJThFJUU1JTlCJUJEJUU0JUI5JThCJUU5JTlGJUIzJUU1JUE0JUE3JUU1JTlD +JUIwJUU5JTlDJTg3JUUzJTgwJThBJUU4JThCJUI5JUU2JTlFJTlDJUUzJTgwJThC +JUU3JThCJUFDJUU1JUFFJUI2Cnx8ZW5jcnlwdC5tZQp8fGVuZXdzdHJlZS5jb20K +LmVuZmFsLmRlCnx8Y2hpbmVzZS5lbmdhZGdldC5jb20KZW5nbGlzaGZvcmV2ZXJ5 +b25lLm9yZwp8fGVuZ2xpc2hmcm9tZW5nbGFuZC5jby51awplbmdsaXNocGVuLm9y +ZwouZW5saWdodGVuLm9yZy50dwp8fGVudGVybWFwLmNvbQouZXBpc2NvcGFsY2h1 +cmNoLm9yZwouZXBvY2hoay5jb20KfHxlcG9jaGhrLmNvbQplcG9jaHRpbWVzLWJn +LmNvbQp8fGVwb2NodGltZXMtYmcuY29tCmVwb2NodGltZXMtcm9tYW5pYS5jb20K +fHxlcG9jaHRpbWVzLXJvbWFuaWEuY29tCmVwb2NodGltZXMuY28uaWwKfHxlcG9j +aHRpbWVzLmNvLmlsCmVwb2NodGltZXMuY28ua3IKfHxlcG9jaHRpbWVzLmNvLmty +CmVwb2NodGltZXMuY29tCnx8ZXBvY2h0aW1lcy5jb20KLmVwb2NodGltZXMuY3oK +fHxlcG9jaHRpbWVzLmRlCnx8ZXBvY2h0aW1lcy5mcgp8fGVwb2NodGltZXMuaXQK +fHxlcG9jaHRpbWVzLmpwCnx8ZXBvY2h0aW1lcy5ydQp8fGVwb2NodGltZXMuc2UK +fHxlcG9jaHRpbWVzdHIuY29tCi5lcG9jaHdlZWsuY29tCnx8ZXBvY2h3ZWVrLmNv +bQp8fGVwb2Nod2Vla2x5LmNvbQp8fGVwb3JuZXIuY29tCi5lcXVpbmVub3cuY29t +CmVyYWJhcnUubmV0Ci5lcmFjb20uY29tLnR3Ci5lcmF5c29mdC5jb20udHIKLmVy +ZXB1Ymxpay5jb20KLmVyaWdodHMubmV0Cnx8ZXJpZ2h0cy5uZXQKfHxlcm5lc3Rt +YW5kZWwub3JnCnx8ZXJvZGFpemVuc3l1LmNvbQp8fGVyb2RvdWppbmxvZy5jb20K +fHxlcm9kb3VqaW53b3JsZC5jb20KfHxlcm9tYW5nYS1raW5nZG9tLmNvbQp8fGVy +b21hbmdhZG91emluLmNvbQouZXJvbW9uLm5ldAp8aHR0cDovL2Vyb21vbi5uZXQK +LmVyb3Byb2ZpbGUuY29tCi5lcm90aWNzYWxvb24ubmV0Ci5lc2xpdGUuY29tCnx8 +ZXNsaXRlLmNvbQouZXRhYS5vcmcuYXUKLmV0YWR1bHQuY29tCmV0YWl3YW5uZXdz +LmNvbQp8fGV0aXplci5vcmcKfHxldG9ra2kuY29tCnx8ZXRzeS5jb20KLmV0dG9k +YXkubmV0CmV0dm9ubGluZS5oawouZXVjYXNpbm8uY29tCi5ldWxhbS5jb20KLmV1 +cmVrYXZwdC5jb20KfHxldXJla2F2cHQuY29tCi5ldXJvbmV3cy5jb20KfHxldXJv +bmV3cy5jb20KZWVhcy5ldXJvcGEuZXUvZGVsZWdhdGlvbnMvY2hpbmEvcHJlc3Nf +Y29ybmVyL2FsbF9uZXdzL25ld3MvMjAxNS8yMDE1MDcxNl96aAplZWFzLmV1cm9w +YS5ldS9zdGF0ZW1lbnRzLWVlYXMvMjAxNS8xNTEwMjIKfHxhcHBzLmV2b3ppLmNv +bQp8fGV2c2Nob29sLm5ldAp8fGV4YmxvZy5qcApAQHx8d3d3LmV4YmxvZy5qcAou +ZXhjaHJpc3RpYW4uaGsKfHxleGNocmlzdGlhbi5oawp8aHR0cDovL2Jsb2cuZXhj +aXRlLmNvLmpwCnx8ZXhoZW50YWkub3JnCnx8ZXhtb3Jtb24ub3JnCnx8ZXhwYXRz +aGllbGQuY29tCi5leHBlY3RoaW0uY29tCnx8ZXhwZWN0aGltLmNvbQpleHBlcnRz +LXVuaXZlcnMuY29tCnx8ZXhwbG9hZGVyLm5ldAouZXhwcmVzc3Zwbi5jb20KfHxl +eHByZXNzdnBuLmNvbQouZXh0cmVtZXR1YmUuY29tCmV5ZXZpby5qcAp8fGV5ZXZp +by5qcAouZXlueS5jb20KfHxleW55LmNvbQouZXpwZWVyLmNvbQoKIS0tLS0tLS0t +LS0tLS0tLS0tLS0tRkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8ZmVlZGx5 +LmNvbQp8fGZ1Y2tjY3AueHl6Cnx8ZnVja2NjcC5jb20KfHxmdXJyeWJhci5jb20K +fHxmb3JiZXMuY29tCnx8ZmluYW5jaWFsZXhwcmVzcy5jb20KfHxmYXN0LmNvbQp8 +fGZhY3RjaGVja2xhYi5vcmcKfHxmdC5jb20KfHxmdWNoc2lhLmRldgp8fGZyZWVz +cy5vcmcKfHxmcmlsLmpwCnx8ZnJlZS5jb20udHcKfHxmcm90aC56b25lCnx8ZmFu +Ym94LmNjCnx8ZnJlZS5iZwp8fGYtZHJvaWQub3JnCnx8ZmFjZWJvb2txdW90ZXM0 +dS5jb20KLmZhY2VsZXNzLm1lCnx8ZmFjZWxlc3MubWUKfGh0dHA6Ly9mYWNlc29m +dGliZXRhbnNlbGZpbW1vbGF0b3JzLmluZm8KfHxmYWNlc29mbnlmdy5jb20KfHxm +YWN0cGVkaWEub3JnCi5mYWl0aDEwMC5vcmcKfGh0dHA6Ly9mYWl0aDEwMC5vcmcK +CiEtLUVuaGFuY2VtZW50OgohLS1odHRwOi8vZmFpdGhmdWxleWUuY29tLmRldGFp +bC53ZWJzaXRlLwohLS1odHRwOi8vZmFpdGhmdWxleWUuY29tLmlwYWRkcmVzcy5j +b20vCi5mYWl0aGZ1bGV5ZS5jb20KCnx8ZmFpdGh0aGVkb2cuaW5mbwouZmFra3Uu +bmV0Cnx8ZmFsbGVuYXJrLmNvbQouZmFsc2VmaXJlLmNvbQp8fGZhbHNlZmlyZS5j +b20KZmFsdW4tY28ub3JnCmZhbHVuYXJ0Lm9yZwp8fGZhbHVuYXNpYS5pbmZvCnxo +dHRwOi8vZmFsdW5hdS5vcmcKLmZhbHVuYXoubmV0CmZhbHVuZGFmYS5vcmcKZmFs +dW5kYWZhLWRjLm9yZwp8fGZhbHVuZGFmYS1mbG9yaWRhLm9yZwp8fGZhbHVuZGFm +YS1uYy5vcmcKfHxmYWx1bmRhZmEtcGEubmV0CmZhbHVuLW55Lm5ldAp8fGZhbHVu +ZGFmYWluZGlhLm9yZwpmYWx1bmRhZmFtdXNldW0ub3JnCi5mYWx1bmdvbmcuY2x1 +YgouZmFsdW5nb25nLmRlCmZhbHVuZ29uZy5vcmcudWsKfHxmYWx1bmhyLm9yZwpm +YWx1bmluZm8uZGUKZmFsdW5pbmZvLm5ldAouZmFsdW5waWxpcGluYXMubmV0CmZh +bWlseWZlZC5vcmcKLmZhbmdlbWluZy5jb20KfHxmYW5nbGl6aGkuaW5mbwp8fGZh +bmdvbmcub3JnCmZhbmdvbmdoZWlrZS5jb20KfHxmYW5oYW9sb3UuY29tCi5mYW5x +aWFuZy50awpmYW5xaWFuZ2hvdS5jb20KfHxmYW5xaWFuZ2hvdS5jb20KLmZhbnFp +YW5nemhlLmNvbQp8fGZhbnFpYW5nemhlLmNvbQp8fGZhbnR2LmhrCmZhcGR1LmNv +bQpmYXByb3h5LmNvbQohLS0uZmFyeGlhbi5jb20KLmZhd2FuZ2h1aWh1aS5vcmcK +fHxmYW11bmlvbi5jb20KLmZhbi1xaWFuZy5jb20KZmFuZ2VtaW5nLmNvbQouZmFu +aGFvZGFuZy5jb20KfHxmYW5xaWFuZy5uZXR3b3JrCnx8ZmFuc3dvbmcuY29tCi5m +YW55dWUuaW5mbwouZmFyd2VzdGNoaW5hLmNvbQoKIS0tRmFzdGx5CmVuLmZhdm90 +dGVyLm5ldAohLS18fHJudy5nbG9iYWwuc3NsLmZhc3RseS5uZXQKLmdsb2JhbC5z +c2wuZmFzdGx5Lm5ldAp8fGZyZWV0bHMuZmFzdGx5Lm5ldApueXRpbWVzLm1hcC5m +YXN0bHkubmV0Cnx8bnl0aW1lcy5tYXAuZmFzdGx5Lm5ldAp8fGZhc3Qud2lzdGlh +LmNvbQoKfHxmYXN0ZXN0dnBuLmNvbQp8fGZhc3Rzc2guY29tCnx8ZmFzdHN0b25l +Lm9yZwpmYXZzdGFyLmZtCnx8ZmF2c3Rhci5mbQpmYXlkYW8uY29tL3dlYmxvZwp8 +fGZhei5uZXQKLmZjMi5jb20KLmZjMmNoaW5hLmNvbQouZmMyY24uY29tCnx8ZmMy +Y24uY29tCmZjMmJsb2cubmV0CnxodHRwOi8vdXlndXIuZmMyd2ViLmNvbS8KLmZk +YzY0LmRlCi5mZGM2NC5vcmcKLmZkYzg5LmpwCiEtLWZlZWRib29rcy5tb2JpCnx8 +ZmVlZGVyLmNvCnx8ZmVlbHNzaC5jb20KZmVlci5jb20KfGh0dHA6Ly9mZWl0aWFu +YWNhZGVteS5vcmcKLmZlaXRpYW4tY2FsaWZvcm5pYS5vcmcKfHxmZWl4aWFvaGFv +LmNvbQp8fGZlbWluaXN0dGVhY2hlci5jb20KLmZlbmd6aGVuZ2h1LmNvbQp8fGZl +bmd6aGVuZ2h1LmNvbQouZmVuZ3poZW5naHUubmV0Cnx8ZmVuZ3poZW5naHUubmV0 +Ci5mZXZlcm5ldC5jb20KfGh0dHA6Ly9mZi5pbQpmZmZmZi5hdApmZmxpY2suY29t +Ci5mZnZwbi5jb20KZmdtdHYubmV0Ci5mZ210di5vcmcKLmZocmVwb3J0cy5uZXQK +fGh0dHA6Ly9maHJlcG9ydHMubmV0Ci5maWdwcmF5ZXIuY29tCnx8ZmlncHJheWVy +LmNvbQouZmlsZWZseWVyLmNvbQp8fGZpbGVmbHllci5jb20KfGh0dHA6Ly9mZWVk +cy5maWxlZm9ydW0uY29tCi5maWxlc2VydmUuY29tL2ZpbGUKZmlsbHRoZXNxdWFy +ZS5vcmcKZmlsbWluZ2ZvcnRpYmV0Lm9yZwouZmlsdGhkdW1wLmNvbQouZmluY2h2 +cG4uY29tCnx8ZmluY2h2cG4uY29tCiEtLWZpbmRib29rLnR3CmZpbmRtZXNwb3Qu +Y29tCnx8ZmluZHlvdXR1YmUuY29tCnx8ZmluZHlvdXR1YmUubmV0Ci5maW5nZXJk +YWlseS5jb20KLmZpcmVhcm1zd29ybGQubmV0CnxodHRwOi8vZmlyZWFybXN3b3Js +ZC5uZXQKfHxyZWxheS5maXJlZm94LmNvbQp8fGZpcmVvZmxpYmVydHkuaW5mbwp8 +fGZpcmVvZmxpYmVydHkub3JnCi5maXJldHdlZXQuaW8KfHxmaXJldHdlZXQuaW8K +fHxvcGVuLmZpcnN0b3J5Lm1lCnx8Zmlyc3Rwb3N0LmNvbQp8fGZpcnN0cmFkZS5j +b20KfHxmaXNoLmF1ZGlvCiEtLXx8ZmxhZ2ZveC5uZXQKLmZsYWdzb25saW5lLml0 +CmZsZXNoYm90LmNvbQouZmxldXJzZGVzbGV0dHJlcy5jb20KfGh0dHA6Ly9mbGV1 +cnNkZXNsZXR0cmVzLmNvbQp8fGZsZ2p1c3RpY2Uub3JnCgohLS18fGZhcm02LnN0 +YXRpY2ZsaWNrci5jb20KIS0tLmZsaWNrci5jb20vcGhvdG9zLzQ2MjMxMDc3QE4w +NgohLS0uZmxpY2tyLmNvbS9ncm91cHMvYWl3ZWl3ZWkKIS0tLmZsaWNrci5jb20v +cGhvdG9zL2RpZ2l0YWxib3kxMDAKIS0tLmZsaWNrci5jb20vcGhvdG9zL2Z6aGVu +Z2h1CiEtLS5mbGlja3IuY29tL3Bob3Rvcy9sb25lbHlmb3gKIS0tZmxpY2tyLmNv +bS9waG90b3MvdmFudmFuLzUyOTkyNTE1NwohLS0uZmxpY2tyLmNvbS9waG90b3Mv +d2ludGVya2FuYWwKIS0tLmZsaWNrci5jb20vcGhvdG9zL3pvbGEKfHxmbGlja3Iu +Y29tCnx8c3RhdGljZmxpY2tyLmNvbQoKZmxpY2tyaGl2ZW1pbmQubmV0Ci5mbGlj +a3JpdmVyLmNvbQouZmxpbmcuY29tCnx8ZmxpcGthcnQuY29tCnx8ZmxvZy50dwp8 +fGZsb3dob25na29uZy5uZXQKLmZseXZwbi5jb20KfHxmbHl2cG4uY29tCnxodHRw +Oi8vY24uZm1ubm93LmNvbQpibG9nLmZvb2xzbW91bnRhaW4uY29tCi5mb3J1bTRo +ay5jb20KZmFuZ29uZy5mb3J1bXMtZnJlZS5jb20KcGlvbmVlci13b3JrZXIuZm9y +dW1zLWZyZWUuY29tCiEtLWZvdXJzcXVhcmUuY29tCiEtLXxodHRwOi8vNHNxLmNv +bQp8aHR0cHM6Ly9zcyouNHNxaS5uZXQKdmlkZW8uZm94YnVzaW5lc3MuY29tCnxo +dHRwOi8vZm94Z2F5LmNvbQp8fGZyaW5nZW5ldHdvcmsuY29tCnx8ZmxlY2hlaW50 +aGVwZWNoZS5mcgouZm9jaGsub3JnCnx8Zm9jaGsub3JnCnx8Zm9jdXN0YWl3YW4u +dHcKLmZvY3VzdnBuLmNvbQp8fGZvZmcub3JnCi5mb29vb28uY29tCnx8Zm9vb29v +LmNvbQp8fGZvcmVpZ25hZmZhaXJzLmNvbQp8fGZvdW50bWVkaWEuaW8KfHxmb3Vy +dGhpbnRlcm5hdGlvbmFsLm9yZwp8fGZveHN1Yi5jb20KZm94dGFuZy5jb20KLmZw +bXQub3JnCnxodHRwOi8vZnBtdC5vcmcKLmZwbXQudHcKLmZwbXQtb3NlbC5vcmcK +fHxmcG10bWV4aWNvLm9yZwp8fGZxcm91dGVyLmNvbQp8fGZyYW5rMjAxOS5tZQp8 +fGZyYW5rbGMuY29tCi5mcmVha3NoYXJlLmNvbQp8aHR0cDovL2ZyZWFrc2hhcmUu +Y29tCmZyZWUtZ2F0ZS5vcmcKLmZyZWUtaGFkYS1ub3cub3JnCmZyZWUtcHJveHku +Y3oKLmZyZWUuZnIvYWRzbApraW5lb3guZnJlZS5mcgp0aWJldGxpYnJlLmZyZWUu +ZnIKfHxmcmVlYnJvd3Nlci5vcmcKLmZyZWVjaGFsLmNvbQouZnJlZWRvbWhvdXNl +Lm9yZwp8fGZyZWVkb21ob3VzZS5vcmcKLmZyZWVkb21zaGVyYWxkLm9yZwp8fGZy +ZWVkb21zaGVyYWxkLm9yZwp8fGZyZWVnYW8uY29tCmZyZWVpbGhhbXRvaHRpLm9y +Zwp8fGZyZWVrYXpha2hzLm9yZwouZnJlZWxvdHRvLmNvbQp8fGZyZWVsb3R0by5j +b20KZnJlZW1hbjIuY29tCi5mcmVlb3BlbnZwbi5jb20KZnJlZW1vcmVuLmNvbQpm +cmVlbW9yZW5ld3MuY29tCmZyZWVtdXNlLm9yZy9hcmNoaXZlcy83ODkKZnJlZW5l +dC1jaGluYS5vcmcKZnJlZW5ld3Njbi5jb20KY24uZnJlZW9uZXMuY29tCi5mcmVl +b3oub3JnL2Jicwp8fGZyZWVvei5vcmcKfHxmcmVlc3NoLnVzCnx8ZnJlZWJlYWNv +bi5jb20KLmZyZWVjaGluYS5uZXdzCnx8ZnJlZWNoaW5hd2VpYm8uY29tCi5mcmVl +ZG9tY29sbGVjdGlvbi5vcmcvaW50ZXJ2aWV3cy9yZWJpeWFfa2FkZWVyCi5mcmVl +Zm9ydW1zLm9yZwp8fGZyZWVuZXRwcm9qZWN0Lm9yZwouZnJlZW96Lm9yZwouZnJl +ZXRpYmV0Lm5ldAp8fGZyZWV0aWJldC5vcmcKLmZyZWV0aWJldGFuaGVyb2VzLm9y +Zwp8aHR0cDovL2ZyZWV0aWJldGFuaGVyb2VzLm9yZwp8fGZyZWV0cmliZS5tZQou +ZnJlZXZpZXdtb3ZpZXMuY29tCi5mcmVldnBuLm1lCnxodHRwOi8vZnJlZXZwbi5t +ZQp8fGZyZWV3YWxscGFwZXI0Lm1lCi5mcmVld2Vicy5jb20KLmZyZWV3ZWNoYXQu +Y29tCnx8ZnJlZXdlY2hhdC5jb20KZnJlZXdlaWJvLmNvbQp8fGZyZWV3ZWliby5j +b20KLmZyZWV4aW53ZW4uY29tCnx8ZnJlZXpoaWh1Lm9yZwp8fGZyaWVuZGZlZWQu +Y29tCnx8ZnJpZW5kcy1vZi10aWJldC5vcmcKLmZyaWVuZHNvZnRpYmV0Lm9yZwp8 +fGZyaWVuZHNvZnRpYmV0Lm9yZwpmcmVlY2hpbmEubmV0CnxodHRwOi8vd3d3Lnpl +bnN1ci5mcmVlcmsuY29tLwpmcmVldnBuLm5sCmZyZWV5ZWxsb3cuY29tCmhrLmZy +aWVuZGR5LmNvbS9oawp8aHR0cDovL2FkdWx0LmZyaWVuZGZpbmRlci5jb20vCi5m +cmluZy5jb20KfHxmcmluZy5jb20KLmZyb21jaGluYXRvdXNhLm5ldAp8fGZyb21t +ZWwubmV0Ci5mcm9udGxpbmVkZWZlbmRlcnMub3JnCnx8ZnJvbnRsaW5lZGVmZW5k +ZXJzLm9yZwouZnJvb3R2cG4uY29tCnx8ZnJvb3R2cG4uY29tCnx8ZnNja2VkLm9y +ZwouZnN1cmYuY29tCi5mdHYuY29tLnR3Cnx8ZnR2LmNvbS50dwp8fGZ0dm5ld3Mu +Y29tLnR3CmZ1Y2QuY29tCmZ1Y2tnZncub3JnCi5mdWxpb25lLmNvbQp8aHR0cHM6 +Ly9mdWxpb25lLmNvbQp8fGZ1bGxlcmNvbnNpZGVyYXRpb24uY29tCnx8ZnVsbHNl +cnZpY2VnYW1lLmNvbQouZnVuZi50dwpmdW5wLmNvbQouZnVxLmNvbQouZnVyaGhk +bC5vcmcKfHxmdXJpbmthbi5jb20KLmZ1dHVyZWNoaW5hZm9ydW0ub3JnCnx8ZnV0 +dXJlbWVzc2FnZS5vcmcKLmZ1eC5jb20KLmZ1eWluZGlhbnRhaS5vcmcKLmZ1eXUu +b3JnLnR3Cnx8ZncuY20KLmZ4Y20tY2hpbmVzZS5jb20KfHxmeGNtLWNoaW5lc2Uu +Y29tCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1HRy0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0KfHxnaXRsYWIubmV0CnxodHRwOi8vZ21wNC5jb20KfHxnZXRzZXNzaW9u +Lm9yZwp8fGdkYWlseS5vcmcKfHxnZndhdGNoLm9yZwp8fGdvLXRvLXpsaWJyYXJ5 +LnNlCnx8Z2l0Ym9vay5pbwouZzZoZW50YWkuY29tCnxodHRwOi8vZzZoZW50YWku +Y29tCnx8Zy1xdWVlbi5jb20KfHxnYWIuY29tCnx8Z2Fib2NvcnAuY29tCi5nYWVw +cm94eS5jb20KLmdhZm9ydW0ub3JnCi5nYWdhb29sYWxhLmNvbQp8fGdhZ2Fvb2xh +bGEuY29tCi5nYWxheHltYWNhdS5jb20KfHxnYWxlbnd1LmNvbQouZ2Fsc3RhcnMu +bmV0Cnx8Z2FtZTczNS5jb20KZ2FtZWJhc2UuY29tLnR3CmdhbWVqb2x0LmNvbQp8 +aHR0cDovL3dpa2kuZ2FtZXJwLmpwCnx8Z2FtZXIuY29tLnR3Ci5nYW1lci5jb20u +dHcKLmdhbWV6LmNvbS50dwp8fGdhbWV6LmNvbS50dwouZ2Ftb3VzYS5jb20KLmdh +b21pbmcubmV0Cnx8Z2FvbWluZy5uZXQKZ2FuZ2VzLmNvbQp8fGdhbmppbmcuY29t +Cnx8Z2FuamluZ3dvcmxkLmNvbQouZ2FvcGkubmV0CnxodHRwOi8vZ2FvcGkubmV0 +CmdhcmRlbm5ldHdvcmtzLmNvbQp8fGdhcmRlbm5ldHdvcmtzLm9yZwohLS1JUCBv +ZiBHYXJkZW4gTmV0d29yawo3Mi41Mi44MS4yMgp8fGdhcnRsaXZlLmNvbQp8fGdh +dGhlci5jb20KLmdhdGhlcnByb3h5LmNvbQouZ2F5YnViYmxlLmNvbQouZ2F5Y24u +bmV0Ci5nYXlodWIuY29tCnx8Z2F5bWFwLmNjCi5nYXltZW5yaW5nLmNvbQouZ2F5 +dHViZS5jb20KIS0tfHxnYXl0dWJlLmNvbQp8fGltYWdlcy1nYXl0dWJlLmNvbQou +Z2F5d2F0Y2guY29tCnxodHRwOi8vZ2F5d2F0Y2guY29tCi5nYXpvdHViZS5jb20K +fHxnYXpvdHViZS5jb20KfHxnY2Mub3JnLmhrCnx8Z2NsdWJzLmNvbQp8fGdjbWFz +aWEuY29tCi5nY3BuZXdzLmNvbQp8aHR0cDovL2djcG5ld3MuY29tCmdkemYub3Jn +Cnx8Z2Vlay1hcnQubmV0CmdlZWtlcmhvbWUuY29tLzIwMTAvMDMveGl4aWFuZy1w +cm9qZWN0LWNyb3NzLWdmdwouZ2VraWthbWUuY29tCnxodHRwOi8vZ2VraWthbWUu +Y29tCi5nZWxib29ydS5jb20KfGh0dHA6Ly9nZWxib29ydS5jb20KfHxnZW5lcmF0 +ZWQucGhvdG9zCnx8Z2VuaXVzLmNvbQohLS18fGdlbnVpdGVjLmNvbQouZ2VvY2l0 +aWVzLmNvLmpwCi5nZW9jaXRpZXMuY29tL1NpbGljb25WYWxsZXkvQ2lyY3VpdC81 +NjgzL2Rvd25sb2FkLmh0bWwKaGsuZ2VvY2l0aWVzLmNvbQpnZW9jaXRpZXMuanAK +fHxnZXBoLmlvCi5nZXJlZm91bmRhdGlvbi5vcmcKfHxnZXRhc3RyaWxsLmNvbQou +Z2V0Y2h1LmNvbQouZ2V0Y2xvYWsuY29tCnx8Z2V0Y2xvYWsuY29tCnx8Z2V0Zm94 +eXByb3h5Lm9yZwp8fGdldGdvbS5jb20KLmdldGkycC5uZXQKfHxnZXRpMnAubmV0 +CmdldGl0b24uY29tCi5nZXRqZXRzby5jb20vZm9ydW0KLmdldGxhbnRlcm4ub3Jn +Cnx8Z2V0bGFudGVybi5vcmcKfHxnZXRtYWx1cy5jb20KLmdldHNvY2lhbHNjb3Bl +LmNvbQp8fGdldHN5bmMuY29tCnx8Z2V0dHIuY29tCmdmYnYuZGUKLmdmc2FsZS5j +b20KfHxnZnNhbGUuY29tCi5nZncucHJlc3MKfHxnZncucHJlc3MKfHxnZncucmVw +b3J0Ci5nZ3NzbC5jb20KfHxnZ3NzbC5jb20KIS0tfHxnaG9zdC5vcmcKLmdob3N0 +cGF0aC5jb20KfHxnaG9zdHBhdGguY29tCnx8Z2h1dC5vcmcKLmdpYW50ZXNzbmln +aHQuY29tCnxodHRwOi8vZ2lhbnRlc3NuaWdodC5jb20KLmdpZnJlZS5jb20KfHxn +aWdhLXdlYi5qcAp0dy5naWdhY2lyY2xlLmNvbQpnaWdwb3Juby5ydQp8fGdpcmxi +YW5rZXIuY29tCi5naXQuaW8KfHxnaXQuaW8KfGh0dHA6Ly9zb2Z0d2FyZWRvd25s +b2FkLmdpdGJvb2tzLmlvCnx8cmF3LmdpdGhhY2suY29tCgohLS0tR2l0SHViLS0t +Cnx8Z2l0aHViLmJsb2cKfHxnaXRodWIuY29tCnx8Z2l0aHViY29waWxvdC5jb20K +IS0tZ2l0aHViLmNvbS9nZXRsYW50ZXJuCiEtLXxodHRwczovL2dpc3QuZ2l0aHVi +LmNvbQohLS1odHRwOi8vY3RobG8uZ2l0aHViLmlvL2hrdHYKIS0taGFoYXhpeGku +Z2l0aHViLmlvCiEtLXxodHRwczovL2hhaGF4aXhpLmdpdGh1Yi5pbwohLS18fGhh +b2VsLmdpdGh1Yi5pbwohLS18aHR0cDovL29uaW9uaGFja2VyLmdpdGh1Yi5pbwoh +LS18fHJnMy5naXRodWIuaW8KIS0tfHxzaWthb3poZTE5OTcuZ2l0aHViLmlvCiEt +LXx8c29kYXRlYS5naXRodWIuaW8KIS0tfHx0ZXJtaW51czIwNDkuZ2l0aHViLmlv +CiEtLXx8dG91dHlyYXRlci5naXRodWIuaW8KIS0td3NnemFvLmdpdGh1Yi5pbwoh +LS18aHR0cHM6Ly93c2d6YW8uZ2l0aHViLmlvCi5naXRodWIuaW8KfHxnaXRodWIu +aW8KfHxnaXRodWJ1c2VyY29udGVudC5jb20KfHxnaXRodWJhc3NldHMuY29tCgou +Z2l6bGVuLm5ldAp8fGdpemxlbi5uZXQKLmdqY3p6LmNvbQp8fGdqY3p6LmNvbQp8 +fGdsYXJpdHkuYXBwCnx8Z2xvYmFsamloYWQubmV0Cmdsb2JhbG1lZGlhb3V0cmVh +Y2guY29tCmdsb2JhbG11c2V1bW9uY29tbXVuaXNtLm9yZwp8fGdsb2JhbHJlc2N1 +ZS5uZXQKLmdsb2JhbHRtLm9yZwouZ2xvYmFsdm9pY2Vzb25saW5lLm9yZwp8fGds +b2JhbHZvaWNlc29ubGluZS5vcmcKfHxnbG9iYWx2cG4ubmV0Ci5nbG9jay5jb20K +Z2x1Y2ttYW4uY29tL0RhbGFpTGFtYQp8fGdtZ2FyZC5jb20KfGh0dHA6Ly93d3cu +Z21pZGRsZS5jb20KfGh0dHA6Ly93d3cuZ21pZGRsZS5uZXQKLmdtbGwub3JnCnx8 +c3VjaGUuZ214Lm5ldAp8fGduY2kub3JnLmhrCnx8Z25ld3Mub3JnCnx8Z29hZ2Vu +dC5iaXoKfHxnb2RhZGR5LmNvbQpnb2Rmb290c3RlcHMub3JnCnx8Z29kZm9vdHN0 +ZXBzLm9yZwpnb2RzZGlyZWN0Y29udGFjdC5jby51awouZ29kc2RpcmVjdGNvbnRh +Y3Qub3JnCmdvZHNkaXJlY3Rjb250YWN0Lm9yZy50dwouZ29kc2ltbWVkaWF0ZWNv +bnRhY3QuY29tCnx8Z29mdW5kbWUuY29tCnx8Z29oYXBweS5jb20udHcKLmdva2Jh +eXJhay5jb20KLmdvbGRiZXQuY29tCnx8Z29sZGJldHNwb3J0cy5jb20KfHxnb2xk +ZW4tYWdlcy5vcmcKfHxnb2xkZW5leWV2YXVsdC5jb20KLmdvbGRlbmZyb2cuY29t +Cnx8Z29sZGVuZnJvZy5jb20KLmdvbGRzdGVwLm5ldAp8fGdvbGR3YXZlLmNvbQp8 +fGdvbmdtLmluCmJsb2cuZ29vLm5lLmpwL2R1Y2stdGFpbF8yMDA5Cmdvb2QubmV3 +cwouZ29vZGF5Lnh5egp8fGdvb2RheS54eXoKfHxnb29kaG9wZS5zY2hvb2wKfHxn +b29kbmV3c25ldHdvcmsub3JnCi5nb29kcmVhZHMuY29tCnx8Z29vZHJlYWRzLmNv +bQouZ29vZHJlYWRlcnMuY29tCnx8Z29vZHJlYWRlcnMuY29tCi5nb29kdHYuY29t +LnR3Ci5nb29kdHYudHYKfHxnb29maW5kLmNvbQouZ29wZXRpdGlvbi5jb20KfHxn +b3BldGl0aW9uLmNvbQp8fGdvcmVmb3J1bS5jb20KfHxnb3RxdWVzdGlvbnMub3Jn +Ci5nb3RydXN0ZWQuY29tCnx8Z290cnVzdGVkLmNvbQp8fGdvdHcuY2EKfHxncmFt +bWFseS5jb20KZ3JhbmR0cmlhbC5vcmcKLmdyYXBoaXMubmUuanAKfHxncmFwaGlz +Lm5lLmpwCnx8Z3JhcGhxbC5vcmcKfHxncmF2YXRhci5jb20KZ3JlYXRmaXJld2Fs +bC5iaXoKLmdyZWF0ZmlyZXdhbGxvZmNoaW5hLm9yZwp8fGdyZWF0ZmlyZXdhbGxv +ZmNoaW5hLm9yZwouZ3JlZW5wYXJ0eS5vcmcudHcKfHxncmVlbnBlYWNlLm9yZwou +Z3JlZW5yZWFkaW5ncy5jb20vZm9ydW0KfHxncmVhc3lmb3JrLm9yZwpncmVhdHJv +Yy5vcmcKZ3JlYXR6aG9uZ2h1YS5vcmcKLmdyZWVucGVhY2UuY29tLnR3Ci5ncmVl +bnZwbi5uZXQKfHxncmVlbnZwbi5uZXQKLmdyZWVudnBuLm9yZwp8fGdyaW5kci5j +b20KfHxncm91bmQubmV3cwpncy1kaXNjdXNzLmNvbQp8fGdzZWFyY2gubWVkaWEK +fHxndHJpY2tzLmNvbQpndWFuY2hhLm9yZwouZ3VhcmRzdGVyLmNvbQouZ3VuLXdv +cmxkLm5ldApndW5zYW5kYW1tby5jb20KfHxndXR0ZXJ1bmNlbnNvcmVkLmNvbQp8 +fGd2bS5jb20udHcKfHxnd2lucy5vcmcKLmd6bS50dgp8fGd6b25lLWFuaW1lLmlu +Zm8KCiEtLS0tLS0tLS0tLS0tR0hTLS0tLS0KIS18fGZlZWRzLmNic25ld3MuY29t +CiEtfHx3d3cuY2hpbmVzZWFsYnVtYXJ0LmNvbQp8fGNsZW1lbnRpbmUtcGxheWVy +Lm9yZwohLXx8Y2xlbWVzaGEub3JnCiEtfHx3d3cuY2xvdWRnaXJsZnJpZW5kLmNv +bQohLXx8Y29jb2F3aXRobG92ZS5jb20KIS18fGJsb2cuY29udHJvbHNwYWNlLm9y +ZwohLUQKIS18fHd3dy5kYWlseWd5YW4uY29tCiEtfHxkYWlseXRvZG8ub3JnCiEt +fHxibG9nLmRhbm1hcm5lci5jb20KIS18fGdpdGh1Yi5kYW5tYXJuZXIuY29tCiEt +fHxkZXNpZ24tc2VlZHMuY29tCiEtfHxkZXNpZ25lcnMtYXJ0aXN0cy5jb20KIS18 +fG1haWwuZGl5YW5nLm9yZwohLXx8YmxvZy5kb3VnaGVsbG1hbm4uY29tCiEtfHxk +b3duZm9yZXZlcnlvbmVvcmp1c3RtZS5jb20KIS18fGRyb2lkc2VjdXJpdHkuY29t +CiEtfHx3d3cuZHJvcG1vY2tzLmNvbQohLXx8ZHVtYmxpdHRsZW1hbi5jb20KIS1F +CmVjaG9mb24uY29tCiEtfHxlY2hvZm9uLmNvbQohLXx8ZXBjLWphdi5jb20KIS18 +fGV2ZXJkYXJrLmluZm8KIS18fGV2aGVhZC5jb20KIS1GCiEtfHxmYWNpbGVsb2dp +bi5jb20KIS18fCouZmF0ZHVjay5vcmcKIS18fGJsb2cuZmRjbi5vcmcKIS18fGZm +dG9nby5jb20KIS18fGZsaWdodHNpbXRhbGsuY29tCiEtfHxtY2xlZS5mb29sbWUu +bmV0CiEtfHx3d3cuZnJpZW5kZGVjay5jb20KIS18fGZyaW5nZXNwb2lsZXJzLmNv +bQohLXx8ZnJpbmdldGVsZXZpc2lvbi5jb20KIS18fGZ1bnBlYS5jb20KIS1HCiEt +fHxibG9nLmdhdGVpbi5vcmcKIS18fGZlZWRzLmdhd2tlci5jb20KIS18fGdlZWt0 +YW5nLmNvbQohLXx8Z2VvaG90LnVzCiEtfHxnZXRhcm91bmQuY29tCiEtfHxnbWVy +Lm5ldAohLXx8d3d3Lmdtb3RlLm9yZwohLXx8YmxvZy5nbzJ3ZWIyMC5uZXQKIS18 +fGdvb2dsZS1tZWxhbmdlLmNvbQohLXx8ZmFtZS5nb256b2xhYnMub3JnCiEtfHxn +b3ZlY24ub3JnCiEtfHxncXVldWVzLmNvbQohLXx8Z3JhcGh5Y2FsYy5jb20KIS18 +fGJsb2cuZ3Jvd2xmb3J3aW5kb3dzLmNvbQohLUgKIS18fGhjbS5jb20udHcKIS18 +fGJsb2cuaGVhZGl1cy5jb20KIS18fGhvZ2JheXNvZnR3YXJlLmNvbQohLXx8Ymxv +Zy5ob3RvdC5vcmcKIS18fGZlZWRzLmhvd3N0dWZmd29ya3MuY29tCiEtfHxodWhh +aXRhaS5jb20KIS18fGJsb2cuaHVtYW5yaWdodHNmaXJzdC5vcmcKIS1JCiEtfHxz +aXRlLmljdS1wcm9qZWN0Lm9yZwohLXx8aWdvcndhcmUuY29tCiEtfHxpaGFzMTMz +N2NvZGUuY29tCiEtfHxpbmtub3V2ZWF1LmNvbQohLXx8aW5vdGUudHcKIS18fGly +b25oZWxtZXQuY29tCiEtfHxpd2Z3Y2YuY29tCiEtSgohLXx8YmxvZy5qYW5nbXQu +Y29tCiEtfHxibG9nLmpheWZpZWxkcy5jb20KIS18fGJsb2cuam9pbnQubmV0CiEt +fHxibG9nLmpzcXVhcmVkamF2YXNjcmlwdC5jb20KIS18fGJsb2cuanRid29ybGQu +Y29tCiEtSwohLXx8a2F0aHlzY2h3YWxiZS5jb20KIS18fHRvbWF0b3Zwbi5rZWl0 +aG1veWVyLmNvbQohLXx8d3d3LmtlaXRobW95ZXIuY29tCiEtfHxrZW5kYWx2YW5k +eWtlLmNvbQohLXx8YmxvZy5rZW5nYW8udHcKIS18fGxvZy5rZXNvLmNuCiEtfHx3 +d3cua2hhbmFjYWRlbXkub3JnCnx8d3d3LmtsaXAubWUKIS18fHVzYmxvYWRlcmd4 +LmtvdXJlaW8ubmV0CiEtfHxibG9nLmtvd2FsY3p5ay5pbmZvCiEtTAohLXx8bGFi +eXJpbnRoMi5jb20KIS18fGxhcnNnZW9yZ2UuY29tCiEtfHxibG9nLmxhc3RwYXNz +LmNvbQohLXx8ZG9jcy5sYXRleGxhYi5vcmcKIS18fGxlYW5lc3NheXMuY29tCiEt +fHxibG9nLmxpZGFvYmluZy5pbmZvCiEtfHxsb2cubGlnaHRvcnkubmV0CiEtfHxm +ZWVkcy5saW1pLm5ldAohLXx8d3d3LmxpdGVhcHBsaWNhdGlvbnMuY29tCiEtfHxi +bG9nLmxpdWthbmd4dS5pbmZvCiEtfHx0d2l0dGVyLmxpdWthbmd4dS5pbmZvCiEt +fHxvYXNpc25ld3Nyb29tLmxpdmU0ZXZlci51cwohLXx8d3d3LmxvY2tlcmdub21l +LmNvbQohLXx8bG9jcWwuY29tCkBAfHxzaXRlLmxvY3FsLmNvbQohLXx8ZmVlZHMu +bG9pY2xlbWV1ci5jb20KIS18fGJsb2cubG91aXNncmF5LmNvbQohLU0KIS18fG1h +ZGVieXNvZmEuY29tCiEtfHxtYWRlbW9pc2VsbGVyb2JvdC5jb20KIS18fG1hc2Ft +aXhlcy5jb20KIS18fHd3dy5tZXRhbXVzZS5uZXQKIS18fGJsb2cubWV0YXNwbG9p +dC5jb20KIS18fG1pbGF6aS5jb20KIS18fHd3dy5taW5pd2VhdGhlci5jb20KIS18 +fHR3aXR0ZXIubWlzc2l1LmNvbQohLXx8cGx1cmt0b3AtYnV0dG9uLm1tZGF5cy5j +b20KIS18fGZlZWRzLm1vYmlsZXJlYWQuY29tCiEtfHx3d3cubW9kZXJuaXpyLmNv +bQohLXx8d3d3Lm1vZGsuaXQKIS18fG15dHdpc2hpcnQuY29tCiEtTgohLXx8Ymxv +Zy5uZXRmbGl4LmNvbQohLXx8YmxvZy5uaWhpbG9naWMuZGsKIS18fG50bGsub3Jn +CiEtfHxudnF1YW4ub3JnCiEtfHxub2dvb2RhdGNvZGluZy5jb20KIS18fGJsb2cu +bm90ZG90Lm5ldAohLXx8d3d3Lm5vdGlmeS5pbwohLU8KIS18fGJsb2cub2J2aW91 +cy5jb20KIS18fG9uZWJpZ2ZsdWtlLmNvbQohLXx8b3ZlcnN0aW11bGF0ZS5jb20K +IS1QCiEtfHxwY2dlZWtibG9nLmNvbQohLXx8ZmVlZHMucGRmY2htLm5ldAohLXx8 +ZmVlZHMucGVvcGxlLmNvbQohLXx8YmxvZy5wZXJzaXN0ZW50LmluZm8KIS18fGNo +cm9tZS5wbGFudHN2c3pvbWJpZXMuY29tCiEtfHxwb3J0YWJsZXNvZnQub3JnLnJ1 +CiEtfHxwcmFzYW5uYXRlY2gubmV0CiEtfHx0YWxrLm5ld3MucHRzLm9yZy50dwoh +LXx8cHl0aG9uLWV4Y2VsLm9yZwohLVEKIS1SCiEtfHxyLWNoYXJ0LmNvbQohLXx8 +cmFtZXNoc3VicmFtYW5pYW4ub3JnCiEtfHxyYXBpZC5wawohLXx8YmxvZy5yZW5h +bnNlLmNvbQohLXx8cm9iZXJ0bWFvLmNvbQohLXx8d3d3LnJvbWVvLWZveHRyb3Qu +Y29tCiEtUwohLXx8c2FsbWl5dWNrLmNvbQohLXx8c2Ftc2FsLmNvbQohLXx8Ymxv +Zy5zZWVtaW5nbGVlLmNvbQohLXx8YmxvZy5zZmxvdy5jb20KIS18fGJsb2cuc2ln +ZnBlLmNvbQohLXx8c2ltcGxldGV4dC53cwohLXx8d3d3LnNrdWxwdC5vcmcKIS18 +fHJzcy5zbGFzaGRvdC5vcmcKIS18fHNuaXBwZXRzYXBwLmNvbQohLXx8dy5zbnMu +bHkKIS18fHd3dy5zb2NpYWxubW9iaWxlLmNvbQohLXx8d3d3LnNvY2lhbHdob2lz +LmNvbQohLXx8c3Bpcml0amIub3JnCiEtfHxzc2Jvb2suY29tCiEtfHxzc2hmb3J3 +YXJkaW5nLmNvbQohLXx8c3RhdGlvbmVyaWEuY29tCnx8c3RlcGhhbmllcmVkLmNv +bQohLXx8c3Vuamlkb25nLm5ldAohLXx8c3luaXVtc29mdHdhcmUuY29tCkBAfHxk +b3dubG9hZC5zeW5pdW1zb2Z0d2FyZS5jb20KIS1UCiEtfHx0YWd4ZWRvLmNvbQoh +LXx8YmxvZy50YXRvZWJhLm9yZwohLXx8d3d3LnRlY2hmb2IuY29tCiEtfHx0ZWFj +aHBhcmVudHN0ZWNoLm9yZwohLXx8dGhlOHBlbi5jb20KIS18fHRoZWlwaG9uZXdp +a2kuY29tCiEtfHxibG9nLnRoZXNpbGVudG51bWJlci5tZQohLXx8dGhlc3BvbnR5 +LmNvbQohLXx8dGhldWx0cmFsaW54LmNvbQohLXx8YmxvZy50aGluay1hc3luYy5j +b20KIS18fHRvcm5hZG93ZWIub3JnCiEtfHx0cmFuc3BhcmVudHVwdGltZS5jb20K +IS18fHRyaWFuZ3VsYXRpb25ibG9nLmNvbQohLXx8YmxvZy50c3VuYW5ldC5uZXQK +IS18fGVuLnR1eGVyby5jb20KIS18fHR3YXp6dXAuY29tCiEtfHx0d2VldHN3ZWxs +LmNvbQohLXx8dHdpYmVzLmNvbQohLXx8YXJ0LnR3Z2cub3JnCiEtfHx0d2l2ZXJ0 +LmNvbQohLVUKfGh0dHA6Ly91YjAuY2MKIS18fGpvbm55LnVidW50dS10dy5uZXQK +IS18fGJsb2cudW1vbmtleS5uZXQKIS1WCiEtfHx0cC52YmFwLmNvbS5hdQohLXx8 +d3d3LnZpcnR1b3Vzcm9tLmNvbQohLXx8YmxvZy52aXNpYm90ZWNoLmNvbQohLVcK +IS18fHdhdmVwcm90b2NvbC5vcmcKIS18fHd3dy53YXZlc2FuZGJveC5jb20KIS18 +fHdlYmZlZS5vcmcucnUKIS18fGJsb2cud2VibXByb2plY3Qub3JnCiEtfHx3ZWJ1 +cGQ4Lm9yZwohLXx8d3d3LndoYXRicm93c2VyLm9yZwohLXx8d3d3LndoZXJlZG95 +b3Vnby5uZXQKIS18fHdpbGxoYWlucy5jb20KIS18fGZlZWRzLndpcmVkLmNvbQoh +LXx8d2lzZW1hcHBpbmcub3JnCndvenkuaW4KIS18fHdvenkuaW4vCiEtfHxibG9n +Lnd1bmRlcmNvdW50ZXIuY29tCiEtWAohLXx8eGRlbHRhLm9yZwohLXx8eGlhb2dh +b3ppLm9yZwohLXx8eGlsb3UudXMKIS18fHh6eS5vcmcucnUKIS1ZCiEtfHx5b29w +ZXIuYmUKIS18fHRzb25nLnl1bnhpLm5ldAohLVoKCmdvc3BlbGhlcmFsZC5jb20K +fHxnb3NwZWxoZXJhbGQuY29tCnxodHRwOi8vaGsuZ3JhZGNvbm5lY3Rpb24uY29t +LwpncmVhdGZpcmUub3JnCnx8Z3JlYXRmaXJlLm9yZwpncmVhdGZpcmV3YWxsb2Zj +aGluYS5vcmcKfHxndHYub3JnCnx8Z3R2MS5vcmcKLmd1LWNodS1zdW0ub3JnCnxo +dHRwOi8vZ3UtY2h1LXN1bS5vcmcKLmd1YWd1YXNzLmNvbQp8aHR0cDovL2d1YWd1 +YXNzLmNvbQouZ3VhbmdtaW5nLmNvbS5teQpndWlzaGFuLm9yZwp8fGd1aXNoYW4u +b3JnCi5ndW1yb2FkLmNvbQp8fGd1bXJvYWQuY29tCnx8Z3Vuc2FtZXJpY2EuY29t +Cmd1cnVvbmxpbmUuaGsKfGh0dHA6Ly9ndmxpYi5jb20KLmd5YWx3YXJpbnBvY2hl +LmNvbQouZ3lhdHNvc3R1ZGlvLmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tSEgt +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8aGVyb21pbmVycy5jb20KfHxoaW5l +dC5uZXQKfHxoaW5kdXN0YW50aW1lcy5jb20KfHxoYW5pbWUxLm1lCnx8aGFsa3R2 +LmNvbS50cgp8fGhhaXdhaWthbi5jb20KfHxob21lLnNheG8KfHxob3kudHYKLmg1 +MjguY29tCi5oNWRtLmNvbQouaDVnYWxnYW1lLm1lCnx8aC1jaGluYS5vcmcKLmgt +bW9lLmNvbQp8aHR0cDovL2gtbW9lLmNvbQpoMW4xY2hpbmEub3JnCi5oYWNrZW4u +Y2MvYmJzCi5oYWNrZXIub3JnCnx8aGFja21kLmlvCnx8aGFja3RoYXRwaG9uZS5u +ZXQKaGFobG8uY29tCnx8aGFpamlhby5jb20KfHxoYWtrYXR2Lm9yZy50dwouaGFu +ZGNyYWZ0ZWRzb2Z0d2FyZS5vcmcKfGh0dHA6Ly9iYnMuaGFubWluenUub3JnLwou +aGFvLm5ld3MvbmV3cwp8aHR0cDovL2FlLmhhbzEyMy5jb20KfGh0dHA6Ly9hci5o +YW8xMjMuY29tCnxodHRwOi8vYnIuaGFvMTIzLmNvbQp8aHR0cDovL2VuLmhhbzEy +My5jb20KfGh0dHA6Ly9pZC5oYW8xMjMuY29tCnxodHRwOi8vanAuaGFvMTIzLmNv +bQp8aHR0cDovL21hLmhhbzEyMy5jb20KfGh0dHA6Ly9teC5oYW8xMjMuY29tCnxo +dHRwOi8vc2EuaGFvMTIzLmNvbQp8aHR0cDovL3RoLmhhbzEyMy5jb20KfGh0dHA6 +Ly90dy5oYW8xMjMuY29tCnxodHRwOi8vdm4uaGFvMTIzLmNvbQp8aHR0cDovL2hr +LmhhbzEyM2ltZy5jb20KfGh0dHA6Ly9sZC5oYW8xMjNpbWcuY29tCi5oYXByb3h5 +Lm9yZwp8fGhhcmRzZXh0dWJlLmNvbQp8fGIuaGF0ZW5hLm5lLmpwCmhhdmU4LmNv +bQpAQHx8aGF5Z28uY29tCi5oY2xpcHMuY29tCnx8aGR0dmIubmV0Ci5oZHpvZy5j +b20KfGh0dHA6Ly9oZHpvZy5jb20KfHxvcmRucy5oZS5uZXQKfHxoZWFydHlpdC5j +b20KLmhlYXZ5LXIuY29tCi5oZWMuc3UKfGh0dHA6Ly9oZWMuc3UKLmhlY2FpdG91 +Lm5ldAp8fGhlY2FpdG91Lm5ldAouaGVjaGFqaS5jb20KfHxoZWNoYWppLmNvbQp8 +fGhlZWFjdC5lZHUudHcKLmhlZ3JlLWFydC5jb20KfGh0dHA6Ly9oZWdyZS1hcnQu +Y29tCnx8Y2RuLmhlbGl4c3R1ZGlvcy5uZXQKfHxoZWxsb2FuZHJvaWQuY29tCnx8 +aGVsbG9xdWVlci5jb20KLmhlbnRhaS50bwouaGVsbG91ay5vcmcvZm9ydW0vbG9m +aXZlcnNpb24KLmhlbHBlYWNocGVvcGxlLmNvbQp8fGhlbHBlYWNocGVvcGxlLmNv +bQp8fGhlbHBzdGVyLmRlCi5oZWxwemh1bGluZy5vcmcKaGVudGFpdHViZS50dgou +aGVudGFpdmlkZW93b3JsZC5jb20KCiEjIyMjIyMjIyMjIy0tSGVyb2t1LS0jIyMj +IyMjIyMjCiEtLXx8Z2V0Y2xvdWRhcHAuY29tCiEtLXx8Y2wubHkKIS0tQEB8fGYu +Y2wubHkKIS0tRUMyIEROUyBQb2lzb25lZAp8fGlkLmhlcm9rdS5jb20KfHxoZXJv +a3VhcHAuY29tCgp8fGhlcWluZ2xpYW4ubmV0Cnx8aGVyaXRhZ2Uub3JnCi5oZXhp +ZXNoZS5jb20KfHxoZXhpZXNoZS5jb20KfHxoZXhpZXNoZS54eXoKIS0tR29vZ2xl +IGVtcGxveWVlIHdpdGhpbiBHb29nbGUgSVAKfHxoZXh4ZWgubmV0Cnx8aGV5dWVk +aS5jb20KLmhleXpvLmNvbQouaGdzZWF2LmNvbQouaGhkY2Izb2ZmaWNlLm9yZwou +aGh0aGVzYWt5YXRyaXppbi5vcmcKaGktb24ub3JnLnR3Cnx8aGljY2VhcnMuY29t +CmhpZGRlbi1hZHZlbnQub3JnCnx8aGlkZGVuLWFkdmVudC5vcmcKaGlkZWNsb3Vk +LmNvbS9ibG9nLzIwMDgvMDcvMjkvZnVjay1iZWlqaW5nLW9seW1waWNzLmh0bWwK +fHxoaWRlLm1lCi5oaWRlaXB2cG4uY29tCnx8aGlkZWlwdnBuLmNvbQouaGlkZW1h +bi5uZXQKfHxoaWRlbWFuLm5ldApoaWRlbWUubmwKfHxoaWRlbXkubmFtZQouaGlk +ZW15YXNzLmNvbQp8fGhpZGVteWFzcy5jb20KaGlkZW15Y29tcC5jb20KfHxoaWRl +bXljb21wLmNvbQouaGlnZncuY29tCmhpZ2hwZWFrc3B1cmVlYXJ0aC5jb20KfHxo +aWdocm9ja21lZGlhLmNvbQp8fGhpaXRjaC5jb20KfHxoaWtpbmdnZncub3JnCi5o +aWxpdmUudHYKLmhpbWFsYXlhbi1mb3VuZGF0aW9uLm9yZwp8fGhpbWFsYXlhbi1m +b3VuZGF0aW9uLm9yZwpoaW1hbGF5YW5nbGFjaWVyLmNvbQouaGltZW1peC5jb20K +fHxoaW1lbWl4LmNvbQouaGl0b21pLmxhCnxodHRwOi8vaGl0b21pLmxhCi5oaXdp +ZmkuY29tCkBAfHxoaXdpZmkuY29tCmhpemJ1dHRhaHJpci5vcmcKaGl6Yi11dC10 +YWhyaXIuaW5mbwpoaXpiLXV0LXRhaHJpci5vcmcKLmhqY2x1Yi5pbmZvCi5oay1w +dWIuY29tL2ZvcnVtCnxodHRwOi8vaGstcHViLmNvbQouaGswMS5jb20KfHxoazAx +LmNvbQp8fGhrYWNnLmNvbQp8fGhrYWNnLm5ldAouaGthdHZuZXdzLmNvbQpoa2Jj +Lm5ldAouaGtiZi5vcmcKLmhrYm9va2NpdHkuY29tCnx8aGtib29rY2l0eS5jb20K +fHxoa2Nocm9uaWNsZXMuY29tCi5oa2NodXJjaC5vcmcKaGtjaS5vcmcuaGsKLmhr +Y21pLmVkdQp8fGhrY25ld3MuY29tCnx8aGtjb2MuY29tCmhrZGF5Lm5ldAouaGtk +YWlseW5ld3MuY29tLmhrL2NoaW5hLnBocAp8fGhrZGMudXMKaGtkZi5vcmcKLmhr +ZWouY29tCi5oa2VwYy5jb20vZm9ydW0vdmlld3RocmVhZC5waHA/dGlkPTExNTMz +MjIKfHxoa2V0LmNvbQp8fGhrZmFhLmNvbQpoa2Zyb250Lm9yZwptLmhrZ2FsZGVu +LmNvbQp8aHR0cHM6Ly9tLmhrZ2FsZGVuLmNvbQp8fGhrZ3Bhby5jb20KLmhraGVh +ZGxpbmUuY29tKmJsb2cKLmhraGVhZGxpbmUuY29tL2luc3RhbnRuZXdzCmhraGto +ay5jb20KaGtocmMub3JnLmhrCmhramMuY29tCi5oa2pwLm9yZwouaGtsZnQuY29t +Ci5oa2x0cy5vcmcuaGsKfHxoa2x0cy5vcmcuaGsKfHxoa21hcC5saXZlCnx8aGtv +cGVudHYuY29tCnx8aGtwZWFudXQuY29tCmhrcHR1Lm9yZwouaGtyZXBvcnRlci5j +b20KfHxoa3JlcG9ydGVyLmNvbQouaG12LmNvLmpwLwpobmpoai5jb20KfHxobmpo +ai5jb20KLmhubnR1YmUuY29tCnx8aG9qZW1hY2F1LmNvbS5tbwp8fGhvbGEuY29t +Cnx8aG9sYS5vcmcKaG9seXNwaXJpdHNwZWFrcy5vcmcKfHxob2x5c3Bpcml0c3Bl +YWtzLm9yZwouaG9tZXBlcnZlcnNpb24uY29tCnxodHRwOi8vaG9tZXNlcnZlcnNo +b3cuY29tCnxodHRwOi8vb2xkLmhvbmV5bmV0Lm9yZy9zY2Fucy9zY2FuMzEvc3Vi +L2RvdWdfZXJpYy9zcGFtX3RyYW5zbGF0aW9uLmh0bWwKLmhvbmdrb25nZnAuY29t +Cnx8aG9uZ2tvbmdmcC5jb20KaG9uZ21laW1laS5jb20KfHxob25nemhpLmxpCnx8 +aG9udmVuLnh5egouaG9vdHN1aXRlLmNvbQp8fGhvb3RzdWl0ZS5jb20KfHxob292 +ZXIub3JnCi5ob3B0by5vcmcKLmhvcm55Z2FtZXIuY29tCi5ob3JueXRyaXAuY29t +CnxodHRwOi8vaG9ybnl0cmlwLmNvbQp8fGhvcnJvcnBvcm4uY29tCnx8aG9zdGxv +Yy5jb20KfHxob3RhaXIuY29tCi5ob3Rhdi50dgouaG90ZWxzLmNuCmhvdGZyb2cu +Y29tLnR3CmhvdGdvby5jb20KaG90cG90LmhrCi5ob3RzaGFtZS5jb20KfHxob3Rz +cG90c2hpZWxkLmNvbQp8fGhvdHRnLmNvbQouaG90dnBuLmNvbQp8fGhvdHZwbi5j +b20KfHxob3d0b2ZvcmdlLmNvbQp8fGhveHguY29tCnx8aHBqYXYuY29tCi5ocWNk +cC5vcmcKfHxocWNkcC5vcmcKfHxocWphcGFuZXNlc2V4LmNvbQpocW1vdmllcy5j +b20KLmhyY2NoaW5hLm9yZwouaHJlYS5vcmcKLmhyaWNoaW5hLm9yZwp8fGhyaWNo +aW5hLm9yZwp8fGhybnR0Lm9yZwouaHJ0c2VhLmNvbQouaHJ3Lm9yZwp8fGhydy5v +cmcKaHJ3ZWIub3JnCnx8aHNleC5tZW4KfHxoc2pwLm5ldAp8fGhzc2VsaXRlLmNv +bQp8fGhzdC5uZXQudHcKLmhzdGVybi5uZXQKLmhzdHQubmV0Ci5odGtvdS5uZXQK +fHxodGtvdS5uZXQKLmh1YWdsYWQuY29tCnx8aHVhZ2xhZC5jb20KLmh1YW5naHVh +Z2FuZy5vcmcKfHxodWFuZ2h1YWdhbmcub3JnCi5odWFuZ3lpeXUuY29tCi5odWFy +ZW4udXMKfHxodWFyZW4udXMKLmh1YXJlbjR1cy5jb20KLmh1YXNoYW5nbmV3cy5j +b20KfGh0dHA6Ly9odWFzaGFuZ25ld3MuY29tCmJicy5odWFzaW5nLm9yZwpodWF4 +aWFiYW8ub3JnCmh1YXhpbi5waAp8fGh1YXl1d29ybGQub3JnCnx8aHVmZmluZ3Rv +bnBvc3QuY29tCnx8aHVmZnBvc3QuY29tCnx8aHVnZ2luZ2ZhY2UuY28KfHxodWdv +cm95LmV1Cnx8aHVoYWl0YWkuY29tCnx8aHVoYW1oaXJlLmNvbQouaHVoYW5nZmVp +LmNvbQp8fGh1aGFuZ2ZlaS5jb20KLmh1bGtzaGFyZS5jb20KfHxodW1hbnBhcnR5 +Lm1lCnx8aHVtYW5yaWdodHNwcmVzc2F3YXJkcy5vcmcKfHxodW5nLXlhLmNvbQp8 +fGh1cGluZy5uZXQKaHVyZ29rYmF5cmFrLmNvbQouaHVycml5ZXQuY29tLnRyCi5o +dXQyLnJ1Cnx8aHV0aWFueWkubmV0Cmh1dG9uZzkubmV0Cmh1eWFuZGV4LmNvbQou +aHdhZHphbi50dwp8fGh3YXl1ZS5vcmcudHcKfHxoeHdrLm9yZwpoeHdxLm9yZwp8 +fGh5cGVycmF0ZS5jb20KfHxoeXBvdGhlcy5pcwplYm9vay5oeXJlYWQuY29tLnR3 +Cnx8ZWJvb2suaHlyZWFkLmNvbS50dwoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tSUkt +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8aXBpZnkub3JnCkBAfHwqLmlwaWZ5 +Lm9yZwp8fGl0aWdlci5jb20KfHxpdGNoLmlvCnx8aW5mdXJhLmlvCnx8cHJlc2lk +ZW50LmlyCnx8Z292LmlyCnx8aXJuYS5pcgp8fGFydmFuc3RvcmFnZS5pcgp8fGly +YW5nb3YuaXIKfHxpbmRpYS5jb20KfHxpbmRpYXRvZGF5LmluCnx8aW52aWRpby51 +cwp8fGltcHJvZC53b3Jrcwp8fGlsbGF3YXJyYW1lcmN1cnkuY29tLmF1Cnx8aW1h +Z28taW1hZ2VzLmNvbQp8fGkycDIuZGUKfHxpODE4aGsuY29tCi5pLWNhYmxlLmNv +bQouaS1wYXJ0LmNvbS50dwouaWFtdG9wb25lLmNvbQppYXNrLmNhCnx8aWFzay5j +YQouaWF2MTkuY29tCnx8aWF2aWFuLm5ldAppYmlibGlvLm9yZy9wdWIvcGFja2Fn +ZXMvY2NpYwppYnJvcy5vcmcKLmlidnBuLmNvbQp8fGlidnBuLmNvbQppY2Ftcy5j +b20KfHxpY2Vkcml2ZS5uZXQKLmljaWoub3JnCnx8aWNpai5vcmcKfHxpY2wtZmku +b3JnCi5pY29jby5jb20KfHxpY29jby5jb20KCiEtLTM4LjEwMy4xNjUuNTAKfHxm +dXJiby5vcmcKIS0tfHxpY29uZmFjdG9yeS5jb20KCnx8aWNvbnBhcGVyLm9yZwoh +LS0gR29vZ2xlIFBhZ2VzCnx8aWN1LXByb2plY3Qub3JnCncuaWRhaXdhbi5jb20v +Zm9ydW0KaWRlbW9jcmFjeS5hc2lhCi5pZGVudGkuY2EKfHxpZGVudGkuY2EKfHxp +ZGlvbWNvbm5lY3Rpb24uY29tCnxodHRwOi8vd3d3LmlkbGNveW90ZS5jb20KfHxp +ZG9wZS5zZQouaWRvdWdhLmNvbQouaWR2LnR3Ci5pZWQyay5uZXQKLmllbmVyZ3kx +LmNvbQp8fGlmdC50dAouaWZjc3Mub3JnCnx8aWZjc3Mub3JnCmlmamMub3JnCi5p +ZnQudHQKfGh0dHA6Ly9pZnQudHQKfHxpZnJlZXdhcmVzLmNvbQp8fGlnY2QubmV0 +Ci5pZ2Z3Lm5ldAp8fGlnZncubmV0Ci5pZ21nLmRlCi5pZ290bWFpbC5jb20udHcK +fHxpZ3ZpdGEuY29tCi5paGFvLm9yZy9kejUKfHxpaWNucy5jb20KLmlrc3Rhci5j +b20KfHxpbGhhbXRvaHRpaW5zdGl0dXRlLm9yZwp8fGlsbHVzaW9uZmFjdG9yeS5j +b20KfHxpbG92ZTgwLmJlCnx8aW04OC50dwp8fGltZ2NoaWxpLm5ldAouaW1hZ2Vh +Yi5jb20KLmltYWdlZmFwLmNvbQp8fGltYWdlZmFwLmNvbQp8fGltYWdlZmxlYS5j +b20KfHxpbWFnZWdsYXNzLm9yZwp8fGltYWdlc2hhY2sudXMKfHxpbWFnZXZlbnVl +LmNvbQp8fGltYWdlemlsbGEubmV0Ci5pbWIub3JnCnxodHRwOi8vaW1iLm9yZwoK +IS0tSU1EQgp8aHR0cDovL3d3dy5pbWRiLmNvbS9uYW1lL25tMDQ4MjczMAouaW1k +Yi5jb20vdGl0bGUvdHQwODE5MzU0Ci5pbWRiLmNvbS90aXRsZS90dDE1NDAwNjgK +LmltZGIuY29tL3RpdGxlL3R0NDkwODY0NAoKLmltZy5seQp8fGltZy5seQp8fGlt +Z2FzZC5jb20KLmltZ3VyLmNvbQp8fGltZ3VyLmNvbQouaW1rZXYuY29tCnx8aW1r +ZXYuY29tCi5pbWxpdmUuY29tCi5pbW1vcmFsLmpwCmltcGFjdC5vcmcuYXUKaW45 +OS5vcmcKaW4tZGlzZ3Vpc2UuY29tCi5pbmNhcGRucy5uZXQKLmluY2xvYWsuY29t +Cnx8aW5jbG9hay5jb20KfHxpbmNyZWRpYm94LmZyCnx8aW5kZXBlbmRlbnQuY28u +dWsKfHxpbmRpYWJsb29tcy5jb20KfHxpbmRpYW5kZWZlbnNlbmV3cy5pbgp8fGlu +ZGlhbmFycmF0aXZlLmNvbQp8fHRpbWVzb2ZpbmRpYS5pbmRpYXRpbWVzLmNvbQou +aW5kaWVtZXJjaC5jb20KfHxpbmRpZW1lcmNoLmNvbQp8fGluZm8tZ3JhZi5mcgp3 +ZWJzaXRlLmluZm9ybWVyLmNvbQp8fGluaGVyaXQubGl2ZQp8fGluaXRpYXRpdmVz +Zm9yY2hpbmEub3JnCnx8aW5rYnVubnkubmV0Cnx8aW5rdWkuY29tCnx8aW5tZWRp +YWhrLm5ldAp8fGlubWVkaWFoay5uZXQKfHxpbm9yZWFkZXIuY29tCnx8aW5vdGUu +dHcKfHxpbnNlY2FtLm9yZwp8aHR0cDovL2luc2VjYW0ub3JnCnx8aW5zaWRlLmNv +bS50dwp8fGluc2lkZXZvYS5jb20KfHxpbnN0aXR1dC10aWJldGFpbi5vcmcKfHxp +bnRlcmFjdGl2ZWJyb2tlcnMuY29tCnx8aW50ZXJuZXQub3JnCmludGVybmV0ZGVm +ZW5zZWxlYWd1ZS5vcmcKfHxpbnRlcm5ldGZyZWVkb20ub3JnCiEtLXx8aW50ZXJw +b2wuaW50Cnx8aW50ZXJuZXRwb3BjdWx0dXJlLmNvbQouaW50aGVuYW1lb2Zjb25m +dWNpdXNtb3ZpZS5jb20KfHxpbnRoZW5hbWVvZmNvbmZ1Y2l1c21vdmllLmNvbQpp +bnhpYW4uY29tCnx8aW54aWFuLmNvbQohLS18fGlwY2Yub3JnLnR3Cnx8aXBkZWZl +bnNlZm9ydW0uY29tCnx8aXBmaXJlLm9yZwp8fGlwaG9uZTRob25na29uZy5jb20K +fHxpcGhvbmV0YWl3YW4ub3JnCnx8aXBob25peC5mcgp8fGlwaWN0dXJlLnJ1Ci5p +cGpldGFibGUubmV0Cnx8aXBqZXRhYmxlLm5ldAouaXBvYmFyLmNvbS9yZWFkLnBo +cD8KaXBvb2NrLmNvbS9pbWcKLmlwb3J0YWwubWUKfGh0dHA6Ly9pcG9ydGFsLm1l +Cnx8aXBwb3R2LmNvbQouaXByZWRhdG9yLnNlCnx8aXByZWRhdG9yLnNlCi5pcHR2 +LmNvbS50dwp8fGlwdHZiaW4uY29tCnx8aXB2YW5pc2guY29tCmlyZWRtYWlsLm9y +ZwpjaGluZXNlLmlyaWIuaXIKfHxpcm9ucHl0aG9uLm5ldAouaXJvbnNvY2tldC5j +b20KfHxpcm9uc29ja2V0LmNvbQouaXMuZ2QKfHxpc2hyLmNoCi5pc2xhaGhhYmVy +Lm5ldAouaXNsYW0ub3JnLmhrCnxodHRwOi8vaXNsYW0ub3JnLmhrCi5pc2xhbWF3 +YXJlbmVzcy5uZXQvQXNpYS9DaGluYQouaXNsYW1ob3VzZS5jb20KfHxpc2xhbWhv +dXNlLmNvbQouaXNsYW1pY2l0eS5jb20KLmlzbGFtaWNwbHVyYWxpc20ub3JnCi5p +c2xhbXRvZGF5Lm5ldAouaXNhYWNtYW8uY29tCnx8aXNhYWNtYW8uY29tCnx8aXNn +cmVhdC5vcmcKfHxpc21hZWxhbi5jb20KLmlzbWFsbHRpdHMuY29tCnx8aXNtcHJv +ZmVzc2lvbmFsLm5ldAppc29odW50LmNvbQp8fGlzcmFib3guY29tCi5pc3N1dS5j +b20KfHxpc3N1dS5jb20KLmlzdGFycy5jby5uegpvdmVyc2VhLmlzdGFyc2hpbmUu +Y29tCnx8b3ZlcnNlYS5pc3RhcnNoaW5lLmNvbQouaXN0b2NrcGhvdG8uY29tCmlz +dW5hZmZhaXJzLmNvbQppc3VudHYuY29tCnx8aXN1cHBvcnR1eWdodXJzLm9yZwp8 +fGl0YWxpYXRpYmV0Lm9yZwp8fGl0ZW1maXguY29tCml0aGVscC5pdGhvbWUuY29t +LnR3Cnx8aXRzaGlkZGVuLmNvbQouaXRza3kuaXQKLml0d2VldC5uZXQKfGh0dHA6 +Ly9pdHdlZXQubmV0Ci5pdTQ1LmNvbQouaXVocmRmLm9yZwp8fGl1aHJkZi5vcmcK +Lml1a3NreS5jb20KLml2YWN5LmNvbQp8fGl2YWN5LmNvbQp8fGl2b25ibG9nLmNv +bQouaXZwbi5uZXQKfHxpdnBuLm5ldAp8fGl3YXJhLnR2Cnx8aXhxdWljay5jb20K +Lml4eHguY29tCi5peW91cG9ydC5jb20KfHxpeW91cG9ydC5jb20KfHxpeW91cG9y +dC5vcmcKLml6YW9iYW8udXMKLml6bGVzLm5ldAouaXpsZXNlbS5vcmcKCiEtLS0t +LS0tLS0tLS0tLS0tLS0tLUpKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8fGp1 +c3RteXNvY2tzY24uY29tCnx8anVzdG15c29ja3MubmV0Cnx8amF2MzIxLmNvbQp8 +fGphdmRiLmNvbQp8fGppZmFuZ2dlLmNvbQp8fGoubXAKfHxqYWJsZS50dgp8fGJs +b2cuamFja2ppYS5jb20KamFtYWF0Lm9yZwp8fGphbWVzdG93bi5vcmcKfHxqYW15 +YW5nbm9yYnUuY29tCnx8amFuLmFpCnx8amFwYW4td2hvcmVzLmNvbQp8fGphcGFu +aGR2LmNvbQouamF2LmNvbQouamF2MTAxLmNvbQouamF2NjgudHYKLmphdmFraWJh +Lm9yZwp8fGphdmFraWJhLm9yZwouamF2YnVzLmNvbQp8fGphdmJ1cy5jb20KfHxq +YXZmaW5kZXIuYWkKfHxqYXZmb3IubWUKLmphdmhkLmNvbQouamF2aGlwLmNvbQou +amF2bW9iaWxlLm5ldAp8fGphdm1vYmlsZS5uZXQKLmphdm1vby5jb20KLmphdnNl +ZW4uY29tCnx8amF2c2Vlbi5jb20KamJ0YWxrcy5jYwpqYnRhbGtzLmNvbQpqYnRh +bGtzLm15Ci5qZHdzeS5jb20KamVhbnlpbS5jb20KfHxqZ29vZGllcy5jb20KLmpp +YW5nd2VpcGluZy5jb20KfHxqaWFuZ3dlaXBpbmcuY29tCnx8amlhb3lvdTguY29t +Cnx8amljaGFuZ3RqLmNvbQouamllaHVhLmN6Cnx8aGsuamllcGFuZy5jb20KfHx0 +dy5qaWVwYW5nLmNvbQpqaWVzaGliYW9iYW8uY29tCi5qaWdnbGVnaWZzLmNvbQo1 +NmN1bjA0LmppZ3N5LmNvbQpkYW9kdTE0LmppZ3N5LmNvbQpzcGVjeGluemwuamln +c3kuY29tCndsY25ldy5qaWdzeS5jb20KLmppaGFkb2xvZ3kubmV0CnxodHRwOi8v +amloYWRvbG9neS5uZXQKLmppbmdzaW0ub3JnCnpoYW8uamluaGFpLmRlCmppbmdw +aW4ub3JnCnx8amluZ3Bpbi5vcmcKamlucGlhbndhbmcuY29tCnx8amlucml6aGl5 +aS5uZXdzCnx8aml0b3VjaC5jb20KampnaXJscy5jb20KLmprYi5jYwp8aHR0cDov +L2prYi5jYwpqa2ZvcnVtLm5ldAp8fGptYS5nby5qcAp8fGptc2MuaGt1LmhrCi5q +bXNjdWx0LmNvbQp8aHR0cDovL2ptc2N1bHQuY29tCnx8am9hY2hpbXMub3JnCi5z +dW53aW5pc20uam9pbmJicy5uZXQKfHxqb2luY2x1YmhvdXNlLmNvbQp8fGpvcm5h +bGRhY2lkYWRlb25saW5lLmNvbS5icgouam91cm5hbGNocmV0aWVuLm5ldAp8fGpv +dXJuYWxvZmRlbW9jcmFjeS5vcmcKLmpveW1paWh1Yi5jb20KLmpveW91cnNlbGYu +Y29tCmpwb3Bmb3J1bS5uZXQKfHxqc2RlbGl2ci5uZXQKfHxmaWRkbGUuanNoZWxs +Lm5ldAohLS1Eb2FtaW4gcGFya2luZwouanVodWFyZW4uY29tCnx8anVsaWVyZXlj +LmNvbQp8fGp1bmF1emEuY29tCi5qdW5lNGNvbW1lbW9yYXRpb24ub3JnCnx8YmJz +Lmp1bmdsb2JhbC5uZXQKLmp1b2FhLmNvbQp8aHR0cDovL2p1b2FhLmNvbQpqdXN0 +ZnJlZXZwbi5jb20KfHxqdXN0aG9zdC5ydQpqdXN0cGFzdGUuaXQKfHxqdXN0bXlz +b2NrczEubmV0Cmp1c3R0cmlzdGFuLmNvbQpqdXppeXVlLmNvbQp8fGp1eml5dWUu +Y29tCnx8andtdXNpYy5vcmcKQEB8fG11c2ljLmp3bXVzaWMub3JnCnx8Y2RuLmp3 +cGxheWVyLmNvbQouanl4Zi5uZXQKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLUtLLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8fGtpbmdrb25nLmNvbS50dwp8fGthbmFs +ZC5jb20udHIKfHxrcGt1YW5nLm9yZwp8fGthLXdhaS5jb20KfHxrYWRva2F3YS5j +by5qcAoua2FneXUub3JnCnx8a2FneXUub3JnLnphCi5rYWd5dW1vbmxhbS5vcmcK +LmthZ3l1bmV3cy5jb20uaGsKLmthZ3l1b2ZmaWNlLm9yZwp8fGthZ3l1b2ZmaWNl +Lm9yZwp8fGthZ3l1b2ZmaWNlLm9yZy50dwoua2FpeXVhbi5kZQoua2FrYW8uY29t +Cnx8a2FrYW8uY29tCi5rYW5rYW4udG9kYXkKLmthbm5ld3lvcmsuY29tCnx8a2Fu +bmV3eW9yay5jb20KLmthbnNoaWZhbmcuY29tCnx8a2Fuc2hpZmFuZy5jb20KfHxr +YW50aWUub3JnCmthbnpob25nZ3VvLmNvbQprYW56aG9uZ2d1by5ldQoua2FvdGlj +LmNvbQp8fGthb3RpYy5jb20KfHxrYXJheW91LmNvbQoua2FybWFwYS5vcmcKLmth +cm1hcGEtdGVhY2hpbmdzLm9yZwp8fGthd2FzZS5jb20KLmtiYS10eC5vcmcKLmtj +b29sb25saW5lLmNvbQoua2VicnVtLmNvbQp8fGtlYnJ1bS5jb20KLmtlY2hhcmEu +Y29tCi5rZWVwYW5kc2hhcmUuY29tL3Zpc2l0L3Zpc2l0X3BhZ2UucGhwP2k9Njg4 +MTU0CiEtLXx8a2VlcHZpZC5jb20KLmtlZXptb3ZpZXMuY29tCi5rZW5lbmdiYS5j +b20KfHxrZW5lbmdiYS5jb20KLmtlcGFyZC5jb20KfHxrZXBhcmQuY29tCndpa2ku +a2Vzby5jbi9Ib21lCnx8a2V5Y2RuLmNvbQoua2hhYmRoYS5vcmcKfHxraWNoaWt1 +LWRvdWppbmtvLmNvbQoua2lrLmNvbQp8fGtpay5jb20KLmtpbmRsZXJlbi5jb20K +fGh0dHA6Ly9raW5kbGVyZW4uY29tCnxodHRwOi8vd3d3LmtpbmRsZXJlbi5jb20K +Lmtpbmdkb21zYWx2YXRpb24ub3JnCnx8a2luZ2RvbXNhbHZhdGlvbi5vcmcKa2lu +Z2hvc3QuY29tCiEtLS5raW5nc3RvbmUuY29tLnR3L2Jvb2svCnx8a2luZ3N0b25l +LmNvbS50dwoua2luay5jb20KLmtpbm9rdW5peWEuY29tCnx8a2lub2t1bml5YS5j +b20Ka2lsbHdhbGwuY29tCnx8a2lsbHdhbGwuY29tCnx8a2luZGxlNHJzcy5jb20K +fHxraW5tZW4udHJhdmVsCi5raXIuanAKLmtpc3NiYmFvLmNuCnxodHRwOi8va2l3 +aS5regp8fGtrLXdoeXMuY28uanAKIS0tfHxrbXQub3JnLnR3Ci5rbXVoLm9yZy50 +dwoua25vd2xlZGdlcnVzaC5jb20va3IvZW5jeWNsb3BlZGlhCnx8a25vd3lvdXJt +ZW1lLmNvbQoua29iby5jb20KfHxrb2JvLmNvbQoua29ib2Jvb2tzLmNvbQp8fGtv +Ym9ib29rcy5jb20KfHxrb2Rpbmdlbi5jb20KQEB8fHd3dy5rb2Rpbmdlbi5jb20K +fHxrb21wb3plci5uZXQKLmtvbmFjaGFuLmNvbQp8fGtvbmFjaGFuLmNvbQoua29u +ZS5jb20KfHxrb29sc29sdXRpb25zLmNvbQoua29vcm5rLmNvbQp8fGtvb3Juay5j +b20KfHxrb3Jhbm1hbmRhcmluLmNvbQoua29yZW5hbjIuY29tCnx8a3Flcy5uZXQK +fGh0dHA6Ly9nb2pldC5rcnRjby5jb20udHcKLmtzZGwub3JnCi5rc25ld3MuY29t +LnR3Cnx8a3R6aGsuY29tCnx8a3VhaWNoZWRhby5jbwoua3VpLm5hbWUvZXZlbnQK +fHxrdWt1a3UudWsKa3VuLmltCi5rdXJhc2hzdWx0YW4uY29tCnx8a3VydG11bmdl +ci5jb20Ka3Vzb2NpdHkuY29tCnx8a3djZy5jYQoua3dvbmd3YWguY29tLm15Cnx8 +a3dvbmd3YWguY29tLm15Ci5reHN3LmxpZmUKfHxreHN3LmxpZmUKLmt5b2Z1bi5j +b20Ka3lvaGsubmV0Cnx8a3phb2Jhby5jb20KLmt6ZW5nLmluZm8KfHxremVuZy5p +bmZvCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1MTC0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0KfHxsdWNreW1vYmlsZS5jYQp8fGx1ZGVwcmVzcy5jb20KfHxsaW5ndWFs +ZW8uY29tCnx8bGRwbGF5ZXIudHcKfHxsZHBsYXllci5uZXQKfHxsdG4uY29tLnR3 +Cnx8bGl0ZW5ld3MuaGsKfHx3d3cubG9yZW56ZXR0aS5jb20uYnIKfHxsaW5rdHIu +ZWUKbGEtZm9ydW0ub3JnCmxhZGJyb2tlcy5jb20KfHxsYWJpZW5uYWxlLm9yZwou +bGFncmFuZXBvY2EuY29tCnx8bGFncmFuZXBvY2EuY29tCnx8bGFsYS5pbQoubGFs +dWxhbHUuY29tCi5sYW1hLmNvbS50dwp8fGxhbWEuY29tLnR3Ci5sYW1heWVzaGUu +Y29tCnxodHRwOi8vbGFtYXllc2hlLmNvbQoubGFtbmlhLmNvLnVrCnx8bGFtbmlh +LmNvLnVrCmxhbXJpbS5jb20KfHxsYW5kb2Zob3BlLnR2Ci5sYW50ZXJuY24uY24K +fGh0dHA6Ly9sYW50ZXJuY24uY24KLmxhbnRvc2ZvdW5kYXRpb24ub3JnCi5sYW9k +LmNuCnxodHRwOi8vbGFvZC5jbgpsYW9nYWkub3JnCnx8bGFvZ2FpLm9yZwp8fGxh +b2dhaXJlc2VhcmNoLm9yZwpsYW9taXUuY29tCi5sYW95YW5nLmluZm8KfGh0dHA6 +Ly9sYW95YW5nLmluZm8KLmxhcWluZ2Rhbi5uZXQKfHxsYXFpbmdkYW4ubmV0Cnx8 +bGFyc2dlb3JnZS5jb20KLmxhc3Rjb21iYXQuY29tCnxodHRwOi8vbGFzdGNvbWJh +dC5jb20KfHxsYXN0Zm0uZXMKbGF0ZWxpbmVuZXdzLmNvbQp8fGxhdXNhbi5oawp8 +fGxlLXZwbi5jb20KLmxlYWZ5dnBuLm5ldAp8fGxlYWZ5dnBuLm5ldAp8fGxlZGdl +ci5jb20KbGVlYW8uY29tLmNuL2Jicy9mb3J1bS5waHAKIS0tfHxsZWVjaGV1a3lh +bi5vcmcKbGVmb3JhLmNvbQp8fGxlZnQyMS5oawoubGVnYWxwb3Juby5jb20KLmxl +Z3NqYXBhbi5jb20KbGVpc3VyZWNhZmUuY2EKfHxsZW1hdGluLmNoCi5sZW1vbmRl +LmZyCnx8bGVud2hpdGUuY29tCmJsb2cubGVzdGVyODUwLmluZm8KfHxsZXNvaXIu +YmUKLmxldG91LmNvbQpsZXRzY29ycC5uZXQKfHxsZXRzY29ycC5uZXQKITY5LjE2 +LjE3NS40Mgp8fGNkbi5hc3NldHMubGZwY29udGVudC5jb20KLmxoYWthci5vcmcK +fGh0dHA6Ly9saGFrYXIub3JnCi5saGFzb2NpYWx3b3JrLm9yZwoubGlhbmd5b3Uu +bmV0Cnx8bGlhbmd5b3UubmV0Ci5saWFueXVlLm5ldAp8fGxpYW93YW5neGl6YW5n +Lm5ldAoubGlhb3dhbmd4aXphbmcubmV0Cnx8bGliZXJhbC5vcmcuaGsKfHxsaWJl +cnR5c2N1bHB0dXJlcGFyay5jb20KfHxsaWJlcnR5dGltZXMuY29tLnR3Cnx8bGli +cmVkZC5pdAp8fGxpZ2h0ZW4ub3JnLnR3Cnx8bGlnaHRub3ZlbC5jbgp8fGxpbGFv +c2hpYnVzaGluaWxhb3NoaS5jb20KbGltaWFvLm5ldApsaW5rdXN3ZWxsLmNvbQph +Yml0bm8ubGlucGllLmNvbS91c2UtaXB2Ni10by1mdWNrLWdmdwp8fGxpbmUubWUK +fHxsaW5lLWFwcHMuY29tCi5saW5nbGluZ2ZhLmNvbQp8fGxpbmd2b2RpY3MuY29t +Ci5saW5rLW8tcmFtYS5jb20KfGh0dHA6Ly9saW5rLW8tcmFtYS5jb20KfHxsaW5r +ZWRpbi5jb20KLmxpbmtpZGVvLmNvbQp8fGxpbnV4Lm9yZy5oawpsaW51eHRveS5v +cmcvYXJjaGl2ZXMvaW5zdGFsbGluZy13ZXN0LWNoYW1iZXItb24tdWJ1bnR1Ci5s +aW9uc3JvYXIuY29tCi5saXB1bWFuLmNvbQp8fGxpcXVpZHZwbi5jb20KfHxncmVh +dGZpcmUudXM3Lmxpc3QtbWFuYWdlLmNvbQp8fGxpc3Rlbm5vdGVzLmNvbQp8fGxp +c3RlbnRveW91dHViZS5jb20KbGlzdG9yaW91cy5jb20KLmxpdS14aWFvYm8ub3Jn +Ci5saXVoYW55dS5jb20KLmxpdXhpYW9iby5uZXQKfHxsaXV4aWFvYm8ubmV0Cmxp +dXhpYW90b25nLmNvbQp8fGxpdXhpYW90b25nLmNvbQoubGl2ZWRvb3IuanAKLmxp +dmVsZWFrLmNvbQp8fGxpdmVsZWFrLmNvbQp8fGxpdmVtaW50LmNvbQpsaXZlc3Ry +ZWFtLmNvbQp8fGxpdmVzdHJlYW0uY29tCnx8bGl2aW5nc3RyZWFtLmNvbQp8fGxp +dmV2aWRlby5jb20KLmxpdmV2aWRlby5jb20KbGl6aGl6aHVhbmdiaS5jb20KbGtj +bi5uZXQKfHxjaGF0Lmxtc3lzLm9yZwoubG9hZC50bwoubG9ic2FuZ3dhbmd5YWwu +Y29tCi5sb2NhbGRvbWFpbi53cwp8fGxvY2FsZG9tYWluLndzCmxvY2FscHJlc3No +ay5jb20KfHxsb2NrZXN0ZWsuY29tCnNlY3VyZS5sb2dtZWluLmNvbQp8fHNlY3Vy +ZS5sb2dtZWluLmNvbQp8fGxvZ29zLmNvbS5oawoubG9uZG9uY2hpbmVzZS5jYQou +bG9uZ2hhaXIuaGsKbG9uZ211c2ljLmNvbQp8fGxvbmd0ZXJtbHkubmV0Cnx8bG9v +a3BpYy5jb20KLmxvb2t0b3JvbnRvLmNvbQp8aHR0cDovL2xvb2t0b3JvbnRvLmNv +bQoubG90c2F3YWhvdXNlLm9yZy90aWJldGFuLW1hc3RlcnMvZm91cnRlZW50aC1k +YWxhaS1sYW1hCi5sb3R1c2xpZ2h0Lm9yZy50dwpoa3JlcG9ydGVyLmxvdmVkLmhr +Ci5scmlwLm9yZwp8fGxyaXAub3JnCi5sc2Qub3JnLmhrCnx8bHNkLm9yZy5oawps +c2ZvcnVtLm5ldAoubHNtLm9yZwp8fGxzbS5vcmcKLmxzbWNoaW5lc2Uub3JnCnx8 +bHNtY2hpbmVzZS5vcmcKLmxzbWtvcmVhbi5vcmcKfHxsc21rb3JlYW4ub3JnCi5s +c21yYWRpby5jb20vcmFkX2FyY2hpdmVzCi5sc213ZWJjYXN0LmNvbQoubHRuLmNv +bS50dwp8fGx0bi5jb20udHcKfHxsdWNreWRlc2lnbmVyLnNwYWNlCi5sdWtlNTQu +Y29tCi5sdWtlNTQub3JnCi5sdXBtLm9yZwp8fGx1cG0ub3JnCnx8bHVzaHN0b3Jp +ZXMuY29tCmx1eGViYy5jb20KbHZoYWkub3JnCnx8bHZoYWkub3JnCnx8bHZ2Mi5j +b20KLmx5ZmhrLm5ldAp8aHR0cDovL2x5ZmhrLm5ldAp8fGx6anNjcmlwdC5jb20K +Lmx6bXRuZXdzLm9yZwp8fGx6bXRuZXdzLm9yZwoKIS0tLS0tLS0tLS0tLS0tLS0t +LS0tTU0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8bWN1c2VyY29udGVudC5j +b20KfHxtZXRhbWFzay5pbwp8fG1pc3Nhdi53cwp8fG5ld3MubXQuY28ua3IKfHxt +dXNpeG1hdGNoLmNvbQp8fG1lcmdlcnNhbmRpbnF1aXNpdGlvbnMuY29tCnx8bS5t +b2VnaXJsLm9yZwp8fG15anMudHcKfHxtZXJjYXJpLmNvbQp8fG1lcmNhcmkuanAK +fHxtaXJyb3IueHl6Cnx8bXl3aWZlLmNjCnx8Yy5taS5jb20KfHxtaXNzYXYuY29t +Cnx8bWFkb3UuY2x1Ygp8fG1haGpvbmdzb3VsLmNvbQp8fG1hbmdhYnouY29tCmh0 +dHA6Ly8qLm0tdGVhbS5jYwohLS1tLXRlYW0uY2MvZm9ydW0KLm1hY3JvdnBuLmNv +bQp8fG1hZC1hci5jaAp8fG1hZHJhdS5jb20KfHxtYWR0aHVtYnMuY29tCm1haGFi +b2RoaS5vcmcKbXkubWFpbC5ydQoubWFpcGx1cy5jb20KfGh0dHA6Ly9tYWlwbHVz +LmNvbQoubWFpemhvbmcub3JnCm1ha2thaG5ld3NwYXBlci5jb20KLm1hbWluZ3po +ZS5jb20KfHxtYW5nbWFuZy5ydW4KbWFuaWN1cjRpay5ydQp8fG1hbnl2b2ljZXMu +bmV3cwoubWFwbGV3LmNvbQp8aHR0cDovL21hcGxldy5jb20KfHxtYXJjLmluZm8K +bWFyZ3Vlcml0ZS5zdQptYXNrZWRpcC5jb20KLm1haWlvLm5ldAoubWFpbC1hcmNo +aXZlLmNvbQoubWFsYXlzaWFraW5pLmNvbQp8fG1ha2VteW1vb2QuY29tCi5tYW5j +aHVrdW8ubmV0Ci5tYW5pYXNoLmNvbQp8aHR0cDovL21hbmlhc2guY29tCi5tYW5z +aW9uLmNvbQoubWFuc2lvbnBva2VyLmNvbQohLS18fG1hcmluZXMubWlsCiEtLW1h +cmttYWlsLm9yZyptZXNzYWdlCnx8bWFydGF1LmNvbQp8aHR0cDovL2Jsb2cubWFy +dGlub2VpLmNvbQoubWFydHNhbmdrYWd5dW9mZmljaWFsLm9yZwp8aHR0cDovL21h +cnRzYW5na2FneXVvZmZpY2lhbC5vcmcKbWFydXRhLmJlL2ZvcmdldAoubWFyeGlz +dC5jb20KfHxtYXJ4aXN0Lm5ldAoubWFyeGlzdHMub3JnL2NoaW5lc2UKIS0tfHxt +YXNoYWJsZS5jb20KfHxtYXRhaW5qYS5jb20KfHxtYXRyaXgub3JnCnx8bWF0dGVy +cy50b3duCm1heWltYXlpLmNvbQoubWF4aW5nLmpwCi5tY2FmLmVlCnxodHRwOi8v +bWNhZi5lZQp8fG1jYWRmb3J1bXMuY29tCm1jZm9nLmNvbQptY3JlYXNpdGUuY29t +Ci5tZC10Lm9yZwp8fG1kLXQub3JnCnx8bWVhbnN5cy5jb20KLm1lZGlhLm9yZy5o +awoubWVkaWFjaGluZXNlLmNvbQp8fG1lZGlhY2hpbmVzZS5jb20KLm1lZGlhZmly +ZS5jb20vPwoubWVkaWFmaXJlLmNvbS9kb3dubG9hZAoubWVkaWFmcmVha2NpdHku +Y29tCnx8bWVkaWFmcmVha2NpdHkuY29tCi5tZWRpdW0uY29tCnx8bWVkaXVtLmNv +bQoubWVldGF2LmNvbQp8fG1lZXR1cC5jb20KbWVmZWVkaWEuY29tCmppaGFkaW50 +ZWwubWVmb3J1bS5vcmcKfHxtZWdhLmNvLm56Cnx8bWVnYS5pbwp8fG1lZ2EubnoK +fHxtZWdhbG9kb24uanAKfHxtZWdhcHJveHkuY29tCnx8bWVndXJpbmVsdWthLmNv +bQp8fG1laXpob25nLmJsb2cKfHxtZWl6aG9uZy5yZXBvcnQKLm1lbHRvZGF5LmNv +bQoubWVtZWhrLmNvbQp8fG1lbWVoay5jb20KfHxtZW1lcy50dwoubWVtcmkub3Jn +Ci5tZW1yaWp0dG0ub3JnCnx8bWVyY2RuLm5ldAoubWVyY3lwcm9waGV0Lm9yZwp8 +fG1lcmN5cHJvcGhldC5vcmcKLm1lcmlkaWFuLXRydXN0Lm9yZwp8fG1lcmlkaWFu +LXRydXN0Lm9yZwoubWVyaXBldC5jb20KfHxtZXJpcGV0LmNvbQp8fG1lcml0LXRp +bWVzLmNvbS50dwoubWVzb3R3LmNvbS9iYnMKfHx3aWtpLm1ldGFjdWJleC5vbmUK +fHxtZXRhZmlsdGVyLmNvbQp8fG1ldGVvcnNob3dlcnNvbmxpbmUuY29tCnx8bWV0 +cm8udGFpcGVpCi5tZXRyb2hrLmNvbS5oay8/Y21kPWRldGFpbCZjYXRlZ29yeUlE +PTIKfHxtZXRyb2xpZmUuY2EKLm1ldHJvcmFkaW8uY29tLmhrCnx8bWV0cm9yYWRp +by5jb20uaGsKfHxtZXdlLmNvbQp8fG1nb29uLmNvbQp8fG1nc3RhZ2UuY29tCnx8 +bWg0dS5vcmcKbWhyYWRpby5vcmcKfHxiYnMubWlrb2Nvbi5jb20KfHxtaWNyb3Zw +bi5jb20KbWlkZGxlLXdheS5uZXQKLm1paHIuY29tCnx8bWlodWEub3JnCnx8bWlr +YW5hbmkubWUKIS0tSVAKfHxtaWtlc29sdHlzLmNvbQoubWlscGgubmV0CnxodHRw +Oi8vbWlscGgubmV0Ci5taWxzdXJwcy5jb20KbWltaWFpLm5ldAoubWltaXZpcC5j +b20KLm1pbmRyb2xsaW5nLm9yZwp8aHR0cDovL21pbmRyb2xsaW5nLm9yZwp8fG1p +bmdkZW1lZGlhLm9yZwoubWluZ2h1aS5vci5rcgp8aHR0cDovL21pbmdodWkub3Iu +a3IKbWluZ2h1aS5vcmcKfHxtaW5naHVpLm9yZwptaW5naHVpLXNjaG9vbC5vcmcK +Lm1pbmdqaW5nbGlzaGkuY29tCnx8bWluZ2ppbmdsaXNoaS5jb20KbWluZ2ppbmdu +ZXdzLmNvbQp8fG1pbmdqaW5ndGltZXMuY29tCi5taW5ncGFvLmNvbQp8fG1pbmdw +YW8uY29tCi5taW5ncGFvY2FuYWRhLmNvbQoubWluZ3Bhb21vbnRobHkuY29tCnxo +dHRwOi8vbWluZ3Bhb21vbnRobHkuY29tCm1pbmdwYW9uZXdzLmNvbQoubWluZ3Bh +b255LmNvbQoubWluZ3Bhb3NmLmNvbQoubWluZ3Bhb3Rvci5jb20KLm1pbmdwYW92 +YW4uY29tCi5taW5nc2hlbmdiYW8uY29tCi5taW5oaHVlLm5ldAoubWluaXN0cnli +b29rcy5vcmcKbWluemh1emhvbmdndW8ub3JnCnx8bWlyb2d1aWRlLmNvbQptaXJy +b3Jib29rcy5jb20KfHxtaXJyb3JtZWRpYS5tZwoubWlzdC52aXAKfHx0aGVjZW50 +ZXIubWl0LmVkdQp8fHNjcmF0Y2gubWl0LmVkdQoubWl0YmJzLmNvbQp8fG1pdGJi +cy5jb20KLm1peGVyby5jb20KfHxtaXhlcm8uY29tCnx8bWl4aS5qcAptaXhwb2Qu +Y29tCi5taXh4LmNvbQp8fG1peHguY29tCnx8bWl6em1vbmEuY29tCnx8bWxjLmFp +Ci5tbGNvb2wuY29tCnx8bWx6cy53b3JrCi5tbS1jZy5jb20KfHxtbWFheHguY29t +Ci5tbW1jYS5jb20KbW5ld3N0di5jb20KfHxtb2JhdGVrLm5ldAoubW9iaWxlMDEu +Y29tCnx8bW9iaWxlMDEuY29tCnx8bW9iaWxld2F5cy5kZQoubW9ieXBpY3R1cmUu +Y29tCnxodHRwOi8vbW9ieS50bwp8fG1vZC5pbwp8fG1vZGVybmNoaW5hc3R1ZGll +cy5vcmcKfHxtb2Vlcm9saWJyYXJ5LmNvbQp8fG1vZXNoYXJlLmNjCi5tb2Zvcy5j +b20KfHxtb2cuY29tCnx8bW9odS5yb2Nrcwptb2xpaHVhLm9yZwp8fG1vbW9zaG9w +LmNvbS50dwp8fG1vbmRleC5vcmcKfHxtb25leS1saW5rLmNvbS50dwp8aHR0cDov +L3d3dy5tb25sYW1pdC5vcmcKfHxtb29uLmZtCi5tb29uYmJzLmNvbQp8fG1vb25i +YnMuY29tCnx8bW9wdHQudHcKfHxtb25leWRqLmNvbQp8fG1vbmljYS5pbQp8fG1v +bml0b3JjaGluYS5vcmcKfHxtb25vY2xvdWQubWUKYmJzLm1vcmJlbGwuY29tCnx8 +bW9ybmluZ3N1bi5vcmcKLm1vdGhlcmxlc3MuY29tCnxodHRwOi8vbW90aGVybGVz +cy5jb20KbW90b3I0aWsucnUKLm1vdXNlYnJlYWtlci5jb20KIS0tfHxtb3ZhYmxl +dHlwZS5jb20KLm1vdmVtZW50cy5vcmcKfHxtb3ZlbWVudHMub3JnCnx8bW92aWVm +YXAuY29tCnx8d3d3Lm1venR3Lm9yZwoubXAzYnVzY2Fkb3IuY29tCnx8bXBldHRp +cy5jb20KLm1wZmluYW5jZS5jb20KfHxtcGZpbmFuY2UuY29tCi5tcGluZXdzLmNv +bQp8fG1waW5ld3MuY29tCm1wb25saW5lLmhrCm1ydHdlZXQuY29tCnx8bXJ0d2Vl +dC5jb20KbmV3cy5tc24uY29tLnR3Cm1zZ3VhbmNoYS5jb20KLm1zd2UxLm9yZwp8 +aHR0cDovL21zd2UxLm9yZwp8fG10aHJ1Zi5jb20KfHxtdWJpLmNvbQptdWNob3N1 +Y2tvLmNvbQp8fG11bHRpcGx5LmNvbQptdWx0aXByb3h5Lm9yZwptdWx0aXVwbG9h +ZC5jb20KLm11bGx2YWQubmV0Cnx8bXVsbHZhZC5uZXQKLm11bW15c2dvbGQuY29t +Ci5tdXNpY2FkZS5uZXQKLm11c2xpbXZpZGVvLmNvbQp8fG11emkuY29tCnx8bXV6 +aS5uZXQKfHxteDk4MS5jb20KLm15LWZvcm1vc2EuY29tCi5teS1wcm94eS5jb20K +Lm15LXByaXZhdGUtbmV0d29yay5jby51awp8fG15LXByaXZhdGUtbmV0d29yay5j +by51awoubXlhY3RpbWVzLmNvbS9hY3RpbWVzCi5teWF1ZGlvY2FzdC5jb20KfHxt +eWF1ZGlvY2FzdC5jb20KLm15YXYuY29tLnR3L2JicwoubXliYnMudXMKLm15Y2Ex +NjguY29tCi5teWNhbmFkYW5vdy5jb20KfHxiYnMubXljaGF0LnRvCi5teWNoaW5h +bmV0LmNvbQoubXljaGluYW5ld3MuY29tCnx8bXljaGluYW5ld3MuY29tCi5teWNo +aW5lc2UubmV3cwp8fG15Y25uZXdzLmNvbQp8fG15a29taWNhLm9yZwpteWNvdWxk +LmNvbS9kaXNjdXoKLm15ZWFzeXR2LmNvbQp8fG15ZWNsaXBzZWlkZS5jb20KLm15 +ZnJlZWNhbXMuY29tCi5teWZyZWVwYXlzaXRlLmNvbQoubXlmcmVzaG5ldC5jb20K +Lm15aXBoaWRlLmNvbQp8fG15aXBoaWRlLmNvbQpmb3J1bS5teW1hamkuY29tCnx8 +bXltb2UubW9lCnx8bXlwYXJhZ2xpZGluZy5jb20KfHxteXBvcGVzY3UuY29tCi5t +eXJlYWRpbmdtYW5nYS5pbmZvCm15c2luYWJsb2cuY29tCi5teXNwYWNlLmNvbQoh +LS0uYmxvZ3MubXlzcGFjZS5jb20KIS0tfHxibG9ncy5teXNwYWNlLmNvbQohLS12 +aWRzLm15c3BhY2UuY29tL2luZGV4LmNmbT9mdXNlYWN0aW9uPXZpZHMuCiEtLXZp +ZXdtb3JlcGljcy5teXNwYWNlLmNvbQp8fG15c3BhY2VjZG4uY29tCi5teXRhbGti +b3guY29tCi5teXRpemkuY29tCgohLS0tLS0tLS0tLS0tLS0tLS0tLS1OTi0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0KfHxuYXZlci5jb20KfHxtYXZlbi5uZW9mb3Jn +ZWQubmV0Cnx8bmZ0c3RvcmFnZS5saW5rCnx8bmV3aW5kaWFuZXhwcmVzcy5jb20K +fHxuZXdzMTguY29tCnx8YmJzLm5haXhpLm5ldAp8fG5pa2tlLmhvdGNvb2wudHcK +fHxuaWtrZS1rci5jb20KfHxuaWtrZS1qcC5jb20KfHxuaWtrZS1lbi5jb20KfHxu +ZXRsaWZ5LmFwcAp8fG5pZ2h0c3dhdGNoLnRvcAp8fG5ieXkudHYKfHxuZXd0aHVo +b2xlLmNvbQp8fG5hYWNvYWxpdGlvbi5vcmcKfHxuYWl0aWsubmV0Ci5uYWtpZG8u +Y29tCnx8bmFraWRvLmNvbQoubmFrdXouY29tL2Jicwp8fG5hbGFuZGFib2RoaS5v +cmcKfHxuYWxhbmRhd2VzdC5vcmcKLm5hbWd5YWwub3JnCm5hbWd5YWxtb25hc3Rl +cnkub3JnCi5uYW55YW5nLmNvbQp8fG5hbnlhbmcuY29tCi5uYW55YW5ncG9zdC5j +b20KfHxuYW55YW5ncG9zdC5jb20KLm5hbnphby5jb20KIS0tLm5hbnphby5jb20v +c2MvY2hpbmEvMjAyMjMKIS0tLm5hbnphby5jb20vc2MvaGstbWFjYXUtdHcKLm5h +b2wuY2EKLm5hb2wuY2MKdWlnaHVyLm5hcm9kLnJ1Ci5uYXQubW9lCnx8bmF0Lm1v +ZQpjeWJlcmdob3N0Lm5hdGFkby5jb20KfHxuYXRpb25hbC1sb3R0ZXJ5LmNvLnVr +Cnx8bmF0aW9uYWxhd2FrZW5pbmcub3JnCnx8bmF0aW9uYWxpbnRlcmVzdC5vcmcK +bmV3cy5uYXRpb25hbGdlb2dyYXBoaWMuY29tL25ld3MvMjAxNC8wNi8xNDA2MDMt +dGlhbmFubWVuLXNxdWFyZQp8fG5hdGlvbmFscmV2aWV3LmNvbQoubmF0aW9uc29u +bGluZS5vcmcvb25ld29ybGQvdGliZXQKfHxsaW5lLm5hdmVyLmpwCnx8bmF2eWZh +bWlseS5uYXZ5Lm1pbAp8fG5hdnlyZXNlcnZlLm5hdnkubWlsCnx8bmtvLm5hdnku +bWlsCnx8dXNuby5uYXZ5Lm1pbApuYXdlZWtseXRpbWVzLmNvbQp8fG5iY25ld3Mu +Y29tCi5uYnR2cG4uY29tCnxodHRwOi8vbmJ0dnBuLmNvbQpuY2N3YXRjaC5vcmcu +dHcKLm5jaC5jb20udHcKLm5jbi5vcmcKfHxuY2hyZC5vcmcKfHxuY24ub3JnCnx8 +ZXRvb2xzLm5jb2wuY29tCi5uZGUuZGUKfHxuZGkub3JnCi5uZHIuZGUKLm5lZC5v +cmcKfHxuZWtvc2xvdmFraWEubmV0Cnx8bmVvd2luLm5ldAp8fG5ldGFsZXJ0Lm1l +CiEtLWJic25ldy5uZXRiaWcuY29tCi5uZXRiaXJkcy5jb20KbmV0Y29sb255LmNv +bQpib2xpbi5uZXRmaXJtcy5jb20KfHxuZXRmbGF2LmNvbQp8fG5ldG1lLmNjCnx8 +bmV0c2FyYW5nLmNvbQpuZXRzbmVhay5jb20KLm5ldHdvcms1NC5jb20KbmV0d29y +a2VkYmxvZ3MuY29tCi5uZXR3b3JrdHVubmVsLm5ldApuZXctM2x1bmNoLm5ldAou +bmV3LWFraWJhLmNvbQoubmV3OTYuY2EKLm5ld2NlbnR1cnltYy5jb20KfGh0dHA6 +Ly9uZXdjZW50dXJ5bWMuY29tCm5ld2NlbnR1cnluZXdzLmNvbQp8fG5ld2NoZW4u +Y29tCi5uZXdjaGVuLmNvbQoubmV3Z3JvdW5kcy5jb20KfHxuZXdoaWdobGFuZHZp +c2lvbi5jb20KbmV3aXBub3cuY29tCi5uZXdsYW5kbWFnYXppbmUuY29tLmF1Cnx8 +bmV3bWl0YmJzLmNvbQoubmV3bmV3cy5jYQp8fG5ld3MxLmtyCm5ld3MxMDAuY29t +LnR3Cm5ld3NjaGluYWNvbW1lbnQub3JnCi5uZXdzYW5jYWkuY29tCnx8bmV3c2Fu +Y2FpLmNvbQp8fG5ld3NibHVyLmNvbQoubmV3c2RldG94LmNhCi5uZXdzZGguY29t +Cnx8bmV3c21heC5jb20KfHxuZXdzdGFtYWdvLmNvbQp8fG5ld3N0YXBhLm9yZwp8 +fG5ld3N0YXRlc21hbi5jb20KbmV3c3Rhcm5ldC5jb20KfHxuZXdzd2Vlay5jb20K +Lm5ld3RhaXdhbi5jb20udHcKbmV3dGFsay50dwp8fG5ld3RhbGsudHcKfHxuZXd5 +b3JrZXIuY29tCm5ld3lvcmt0aW1lcy5jb20KfHxuZXhvbi5jb20KLm5leHQxMS5j +by5qcAp8fG5leHRkaWdpdGFsLmNvbS5oawoubmV4dG1hZy5jb20udHcKCiEtLWhr +Ki5uZXh0bWVkaWEuY29tCiEtLXR3Ki5uZXh0bWVkaWEuY29tCiEtLXN0YXRpYyou +bmV4dG1lZGlhLmNvbQoubmV4dG1lZGlhLmNvbQoKfHxuZXh0b24tbmV0LmpwCnx8 +bmV4dHR2LmNvbS50dwoubmZqdHlkLmNvbQp8fGNvLm5nLm1pbAp8fG5nYS5taWwK +bmdlbnNpcy5jb20KLm5oZW50YWkubmV0CnxodHRwOi8vbmhlbnRhaS5uZXQKLm5o +ay1vbmRlbWFuZC5qcAp8fG5pY292aWRlby5qcApuaW5lY29tbWVudGFyaWVzLmNv +bQoubmluamFjbG9hay5jb20KfHxuaW5qYXByb3h5Lm5pbmphCm5pbnRlbmRpdW0u +Y29tCnRhaXdhbnllcy5uaW5nLmNvbQp1c21ndGNnLm5pbmcuY29tL2ZvcnVtCnx8 +bml1c25ld3MuY29tCnx8bmphY3RiLm9yZwp8fG5sZnJlZXZwbi5jb20KfHxubXNs +LndlYnNpdGUKfHxubmV3cy5ldQoKIS0tbm8taXAuY29tI05PSVAKLmRkbnMubmV0 +Lwp8fGdvdGRucy5jaAoubm8taXAub3JnCi5vcGVuZG4ueHl6Ci5zZXJ2ZWh0dHAu +Y29tCnN5dGVzLm5ldAouemFwdG8ub3JnCnxodHRwOi8vZHludXBkYXRlLm5vLWlw +LmNvbS8KCnx8bm9iZWwuc2UKIS0tLm5vYmVscHJpemUub3JnCiEtLXxodHRwOi8v +bm9iZWxwcml6ZS5vcmcKbm9iZWxwcml6ZS5vcmcvbm9iZWxfcHJpemVzL3BlYWNl +L2xhdXJlYXRlcy8xOTg5Cm5vYmVscHJpemUub3JnL25vYmVsX3ByaXplcy9wZWFj +ZS9sYXVyZWF0ZXMvMjAxMAp8fG5vZGVzZWVrLmNvbQp8fG5va29naXJpLm9yZwp8 +fG5va29sYS5jb20Kbm9vZGxldnBuLmNvbQoubm9yYnVsaW5na2Eub3JnCm5vcmR2 +cG4uY29tCnx8bm9yZHZwbi5jb20KfHxub3MubmwKfHxub3RlcGFkLXBsdXMtcGx1 +cy5vcmcKfHxub3cuY29tCnx8bm93bmV3cy5jb20KLm5vd3RvcnJlbnRzLmNvbQp8 +fG5wYS5nby5qcAoubnBudC5tZQp8aHR0cDovL25wbnQubWUKLm5yYWRpby5tZQp8 +aHR0cDovL25yYWRpby5tZQoubnJrLm5vCnx8bnJrLm5vCi5udGQudHYKfHxudGQu +dHYKLm50ZHR2LmNvbQp8fG50ZHR2LmNvbQp8fG50ZHR2LmNvbS50dwoubnRkdHYu +Y28ua3IKbnRkdHYuY2EKbnRkdHYub3JnCm50ZHR2LnJ1Cm50ZHR2bGEuY29tCi5u +dHJmdW4uY29tCnx8Y2JzLm50dS5lZHUudHcKfHxtZWRpYS5udS5ubAoubnViaWxl +cy5uZXQKfHxudWV4cG8uY29tCi5udWtpc3RyZWFtLmNvbQp8fG51cmdvLXNvZnR3 +YXJlLmNvbQp8fG51dGFrdS5uZXQKfHxudXRzdnBuLndvcmsKLm51dmlkLmNvbQp8 +fG52ZHN0LmNvbQoubnZxdWFuLm9yZwoubnZ0b25nemhpc2hlbmcub3JnCnxodHRw +Oi8vbnZ0b25nemhpc2hlbmcub3JnCi5ud3RjYS5vcmcKfGh0dHA6Ly9ueWFhLmV1 +Cnx8bnlhYS5zaQp8fG55Ym9va3MuY29tCm55bG9uLWFuZ2VsLmNvbQpueWxvbnN0 +b2NraW5nc29ubGluZS5jb20KfHxueXBvc3QuY29tCiEtLW55c2luZ3Rhby5jb20K +Lm56Y2hpbmVzZS5jb20KCiEtLS0tLS0tLS0tLS0tLS0tLS0tLU9PLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLQp8fG9vamouZGUKfHxvbmV2cHMuY29tCnx8b25lZHJp +dmUuY29tCnx8b2xlbGl2ZS5jb20KfHxvYW5uLmNvbQpvYnNlcnZlY2hpbmEubmV0 +Ci5vYnV0dS5jb20Kb2Nhc3Byby5jb20Kb2NjdXB5dGlhbmFubWVuLmNvbQoub2Ny +ZWFtcGllcy5jb20KfHxvY3RvYmVyLXJldmlldy5vcmcKfHxvZHlzZWUuY29tCnx8 +b2ZmaWNlb2Z0aWJldC5jb20KfGh0dHA6Ly9vZmlsZS5vcmcKfHxvZ2FvZ2Eub3Jn +CnR3dHIyc3JjLm9nYW9nYS5vcmcKLm9nYXRlLm9yZwp8fG9nYXRlLm9yZwp3d3cy +Lm9oY2hyLm9yZy9lbmdsaXNoL2JvZGllcy9jYXQvZG9jcy9uZ29zL0lJX0NoaW5h +XzQxLnBkZgp8fG9obXlyc3MuY29tCi5vaWtvcy5jb20udHcvdjQKLm9pa3R2LmNv +bQoub2sucnUKfHxvay5ydQoub2theWZyZWVkb20uY29tCnx8b2theWZyZWVkb20u +Y29tCnx8b2trLnR3Cnx8b2xldm9kLmNvbQp8fG9sdW1wby5jb20KLm9seW1waWN3 +YXRjaC5vcmcKfHxvbWN0Lm9yZwpvbWdpbGkuY29tCnx8b21uaXRhbGsuY29tCnx8 +b21uaXRhbGsub3JnCnx8b21ueS5mbQp8fG9uLmNjCnx8b25lZHJpdmUubGl2ZS5j +b20KfHxvbmlvbi5jaXR5Cnx8b25pb24ubHkKLm9ubGluZWNoYS5jb20KfHxvbmxp +bmV5b3V0dWJlLmNvbQp8fG9ubHlnYXl2aWRlby5jb20KLm9ubHl0d2VldHMuY29t +CnxodHRwOi8vb25seXR3ZWV0cy5jb20Kb25tb29uLm5ldApvbm1vb24uY29tCi5v +bnRoZWh1bnQuY29tCnxodHRwOi8vb250aGVodW50LmNvbQpvcGVuLmNvbS5oawpv +cGVuZGVtb2NyYWN5Lm5ldAp8fG9wZW5kZW1vY3JhY3kubmV0Cm9wZW5pZC5uZXQK +fHxvcGVuaWQubmV0Ci5vcGVubGVha3Mub3JnCnx8b3BlbmxlYWtzLm9yZwp8fG9w +ZW5zdHJlZXRtYXAub3JnCnx8b3BlbnRlY2guZnVuZApvcGVudnBuLm5ldAp8fG9w +ZW52cG4ubmV0Cnx8b3BlbndlYnN0ZXIuY29tCi5vcGVud3J0Lm9yZy5jbgpAQHx8 +b3BlbndydC5vcmcuY24KbXkub3BlcmEuY29tL2RhaGVtYQoub3B1cy1nYW1pbmcu +Y29tCnxodHRwOi8vb3B1cy1nYW1pbmcuY29tCi5vcmdhbmNhcmUub3JnLnR3Cm9y +Z2FuaGFydmVzdGludmVzdGlnYXRpb24ubmV0Ci5vcmdhc20uY29tCi5vcmdmcmVl +LmNvbQp8fG9yaWNvbi5jby5qcAp8fG9yaWVudC1kb2xsLmNvbQpvcmllbnRhbGRh +aWx5LmNvbS5teQp8fG9yaWVudGFsZGFpbHkuY29tLm15CiEtLW9yaWVudGFsZGFp +bHkub24uY2MKfHxvcm4uanAKfHxvc2Zvb3JhLmNvbQp8fG90dG8uZGUKfHxvdXJk +ZWFyYW15LmNvbQpvdXJzb2dvLmNvbQoub3Vyc3RlcHMuY29tLmF1Cnx8b3Vyc3Rl +cHMuY29tLmF1Ci5vdXJzd2ViLm5ldAp8fG91cnR2LmhrCnhpbnFpbWVuZy5vdmVy +LWJsb2cuY29tCnx8b3ZlcmNhc3QuZm0KfHxvdmVyZGFpbHkub3JnCnx8b3ZlcnBs +YXkubmV0CnNoYXJlLm92aS5jb20vbWVkaWEKfHxvdnBuLmNvbQp8aHR0cDovL293 +bC5saQp8aHR0cDovL2h0Lmx5CnxodHRwOi8vaHRsLmxpCnxodHRwOi8vbWFzaC50 +bwp3d3cub3dpbmQuY29tCnx8b3dsdGFpbC5jb20KfHxveGZvcmRzY2hvbGFyc2hp +cC5jb20KfGh0dHA6Ly93d3cub3hpZC5pdApveWF4LmNvbQpveWdoYW4uY29tL3dw +cwoub3pjaGluZXNlLmNvbS9iYnMKfHxvdy5seQoub3p2b2ljZS5vcmcKfHxvenZv +aWNlLm9yZwoub3p4dy5jb20KLm96eW95by5jb20KCiEtLS0tLS0tLS0tLS0tLS0t +LS0tLVBQLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8fHBld3Jlc2VhcmNoLm9y +Zwp8fHByaXZhY3lndWlkZXMub3JnCnx8cGFuY2FrZXN3YXAuZmluYW5jZQp8fGlt +Zy5waWNnby5uZXQKfHxwb3JubWF0ZS5jb20KfHxwdXJlZG5zLm9yZwp8fHBvbHlt +YXJrZXQuY29tCnx8cGFuZGFmYW4ucHViCnx8cHJveHouY29tCnx8cG90YXRzby5j +b20KfHxwZW5kcml2ZWxpbnV4LmNvbQp8fHBhaW1vbi5tb2UKfHxwaG90b25tZWRp +YS5uZXQKfHxwb2ludHMtbWVkaWEuY29tCnx8cGt1YW52aWwuY29tCnx8cGFjaG9z +dGluZy5jb20KLnBhY2lmaWNwb2tlci5jb20KLnBhY2tldGl4Lm5ldAp8fHBhY29w +YWNvbWFtYS5jb20KLnBhZG1hbmV0LmNvbQp8fHBhZ2UubGluawpwYWdlMnJzcy5j +b20KLnBhbGFjZW1vb24uY29tCmZvcnVtLnBhbG1pc2xpZmUuY29tCnx8ZXJpdmVy +c29mdC5jb20KcGFsam9ycHVibGljYXRpb25zLmNvbQoucGFsdGFsay5jb20KIS0t +fHxwYW5nY2kubmV0Cnx8cGFuZGFwb3cuY28KLnBhbmRhcG93Lm5ldAoucGFuZGF2 +cG4tanAuY29tCnx8cGFuZGF2cG4tanAuY29tCnx8cGFuZGF2cG5wcm8uY29tCnx8 +cGFvLXBhby5uZXQKcGFwZXIubGkKcGFwZXJiLnVzCi5wYXJhZGlzZWhpbGwuY2MK +LnBhcmFkaXNlcG9rZXIuY29tCnx8cGFybGVyLmNvbQp8fHBhcnNldmlkZW8uY29t +Ci5wYXJ0eWNhc2luby5jb20KLnBhcnR5cG9rZXIuY29tCi5wYXNzaW9uLmNvbQp8 +fHBhc3Npb24uY29tCi5wYXNzaW9udGltZXMuaGsKcGFzdGViaW4uY29tCi5wYXN0 +aWUub3JnCnx8cGFzdGllLm9yZwp8fGJsb2cucGF0aHRvc2hhcmVwb2ludC5jb20K +fHxwYXRyZW9uLmNvbQp8fHBhdHJlb251c2VyY29udGVudC5jb20KfHxwYXdvby5u +ZXQKfHxwYnMub3JnCgohLS1QYndpa2kKcGJ3aWtpLmNvbQp8fHBid29ya3MuY29t +Cnx8ZGV2ZWxvcGVycy5ib3gubmV0Cnx8d2lraS5vYXV0aC5uZXQKfHx3aWtpLnBo +b25lZ2FwLmNvbQp8fHdpa2kuanF1ZXJ5dWkuY29tCgp8fHBieGVzLmNvbQp8fHBi +eGVzLm9yZwpwY2R2ZC5jb20udHcKfHxwY2dhbWVzdG9ycmVudHMuY29tCi5wY2hv +bWUuY29tLnR3Cnx8cGNpai5vcmcKLnBjc3RvcmUuY29tLnR3Cnx8cGN0Lm9yZy50 +dwpwZGV0YWlscy5jb20KfHxwZHByb3h5LmNvbQp8fHBlYWNlLmNhCnBlYWNlZmly +ZS5vcmcKLnBlZWFzaWFuLmNvbQp8fHBlaW5nLm5ldAoucGVraW5nZHVjay5vcmcK +fHxwZWtpbmdkdWNrLm9yZwoucGVtdWxpaGFuLm9yLmlkCnxodHRwOi8vcGVtdWxp +aGFuLm9yLmlkCnx8cGVuLmlvCnBlbmNoaW5lc2UuY29tCnx8YmxvZy5wZW50YWxv +Z2ljLm5ldAoucGVudGhvdXNlLmNvbQp8fHBlbnRveS5oawoucGVvcGxlYm9va2Nh +ZmUuY29tCi5wZW9wbGVuZXdzLnR3Cnx8cGVvcGxlbmV3cy50dwoucGVvcG8ub3Jn +Cnx8cGVvcG8ub3JnCi5wZXJjeS5pbgoucGVyZmVjdGdpcmxzLm5ldAp8fHBlcmZl +Y3QtcHJpdmFjeS5jb20KfHxwZXJwbGV4aXR5LmFpCi5wZXJzZWN1dGlvbmJsb2cu +Y29tCi5wZXJzaWFua2l0dHkuY29tCnBoYXBsdWFuLm9yZwoucGhheXVsLmNvbQp8 +fHBoYXl1bC5jb20KcGhpbGJvcmdlcy5jb20KfHxwaG5jZG4uY29tCnx8cGhvdG9k +aGFybWEubmV0Cnx8cGhvdG9mb2N1cy5jb20KfHxwaWNhY29taWNjbi5jb20KLnBp +Y2lkYWUubmV0Cnx8aW1nKi5waWN0dXJlZGlwLmNvbQpwaWN0dXJlc29jaWFsLmNv +bQp8fHBpY3VraS5jb20KfHxwaWdhdi5jb20KfHxwaW4tY29uZy5jb20KLnBpbjYu +Y29tCnx8cGluNi5jb20KLnBpbmcuZm0KfHxwaW5nLmZtCnx8cGluaW1nLmNvbQou +cGlua3JvZC5jb20KfHxwaW5veS1uLmNvbQp8fHBpbnRlcmVzdC4qCkBAfHxwaW50 +ZXJlc3QuY24KLnBpcGlpLnR2CnBpcmFhdHRpbGFodGkub3JnCi5waXJpbmcuY29t +Cnx8cGl4ZWxkcmFpbi5jb20KfHxwaXhlbHFpLmNvbQp8fGNzcy5waXhuZXQuaW4K +fHxwaXhuZXQubmV0Ci5waXhuZXQubmV0Ci5way5jb20KfHxwa3FqaWFzdS5jb20K +fHxwbGFjZW1peC5jb20KIS0tLnBsYW5ldHN1enkub3JnCnx8cGxheS1hc2lhLmNv +bQp8fHBsYXlib3kuY29tCi5wbGF5Ym95cGx1cy5jb20KfHxwbGF5Ym95cGx1cy5j +b20KfHxwbGF5ZXIuZm0KLnBsYXlubzEuY29tCnx8cGxheW5vMS5jb20KfHxwbGF5 +cGNlc29yLmNvbQp8fHBsZXh2cG4ucHJvCnBsbS5vcmcuaGsKcGx1bmRlci5jb20K +LnBsdXJrLmNvbQp8fHBsdXJrLmNvbQoucGx1czI4LmNvbQoucGx1c2JiLmNvbQou +cG1hdGVodW50ZXIuY29tCnx8cG1hdGVodW50ZXIuY29tCi5wbWF0ZXMuY29tCnx8 +cG8yYi5jb20KcG9iaWVyYW15LnRvcAohLS18fHBvY29vLm9yZwp8fHBvZGJlYW4u +Y29tCnx8cG9kaWN0aW9uYXJ5LmNvbQp8fHBvZS5jb20KLnBva2Vyc3RhcnMuY29t +Cnx8cG9rZXJzdGFycy5jb20KfHxwb2tlcnN0YXJzLm5ldAp8fHpoLnBva2Vyc3Ry +YXRlZ3kuY29tCnx8cG9saXRpY2FsY2hpbmEub3JnCi5wb2xpdGlzY2FsZXMubmV0 +Cnx8cG9sb25pZXguY29tCnx8cG9seW1lcmhrLmNvbQoucG9wby50dwohLS18fHBv +cHVsYXJwYWdlcy5uZXQKfHxwb3B2b3RlLmhrCnx8cG9weGkuY2xpY2sKLnBvcHlh +cmQuY29tCnx8cG9weWFyZC5vcmcKLnBvcm4uY29tCi5wb3JuMi5jb20KLnBvcm41 +LmNvbQoucG9ybmJhc2Uub3JnCi5wb3JuZXJicm9zLmNvbQp8fHBvcm5oZC5jb20K +LnBvcm5ob3N0LmNvbQoucG9ybmh1Yi5jb20KfHxwb3JuaHViLmNvbQoucG9ybmh1 +YmRldXRzY2gubmV0CnxodHRwOi8vcG9ybmh1YmRldXRzY2gubmV0Ci5wb3Jub3hv +LmNvbQoucG9ybnJhcGlkc2hhcmUuY29tCnx8cG9ybnJhcGlkc2hhcmUuY29tCi5w +b3Juc2hhcmluZy5jb20KfGh0dHA6Ly9wb3Juc2hhcmluZy5jb20KLnBvcm5zb2Nr +ZXQuY29tCnx8cG9ybnN0YXJieWZhY2UuY29tCi5wb3Juc3RhcmNsdWIuY29tCnx8 +cG9ybnN0YXJjbHViLmNvbQoucG9ybnR1YmUuY29tCi5wb3JudHViZW5ld3MuY29t +Ci5wb3JudHZibG9nLmNvbQp8fHBvcm50dmJsb2cuY29tCi5wb3JudmlzaXQuY29t +Ci5wb3J0YWJsZXZwbi5ubAp8fHBvc2tvdGFuZXdzLmNvbQoucG9zdDAxLmNvbQou +cG9zdDc2LmNvbQp8fHBvc3Q3Ni5jb20KLnBvc3Q4NTIuY29tCnx8cG9zdDg1Mi5j +b20KcG9zdGFkdWx0LmNvbQp8fHBvdHZwbi5jb20KfHxwb3VycXVvaS50dwp8fHBv +d2VyY3guY29tCi5wb3dlcnBob3RvLm9yZwp8fHd3dy5wb3dlcnBvaW50bmluamEu +Y29tCnx8cHB5LnNoCnx8cHJlc2lkZW50bGVlLnR3Cnx8Y2RuLnByaW50ZnJpZW5k +bHkuY29tCi5wcml0dW5sLmNvbQpwcm92cG5hY2NvdW50cy5jb20KfHxwcm92cG5h +Y2NvdW50cy5jb20KLnByb3hmcmVlLmNvbQp8fHByb3hmcmVlLmNvbQpwcm94eWFu +b25pbW8uZXMKLnByb3h5bmV0d29yay5vcmcudWsKfHxwcm94eW5ldHdvcmsub3Jn +LnVrCi5wdHR2YW4ub3JnCnx8cHVidS5jb20udHcKfHxwdWZmaW5icm93c2VyLmNv +bQp8fHB1cmVpbnNpZ2h0Lm9yZwoucHV0dHkub3JnCnx8cHV0dHkub3JnCgohLS0t +LS0tLS0tLS0tLVBvc3Rlcm91cy0tLS0tCnx8Y2FsZWJlbHN0b24uY29tCnx8Ymxv +Zy5maXp6aWsuY29tCnx8bmYuaWQuYXUKfHxzb2dyYWR5Lm1lCnx8dmF0bi5vcmcK +fHx2ZW50dXJlc3dlbGwuY29tCnx8d2hlcmVpc3dlcm5lci5jb20KCi5wb3dlci5j +b20KfHxwb3dlci5jb20KcG93ZXJhcHBsZS5jb20KfHxwb3dlcmFwcGxlLmNvbQp8 +fHByYXlmb3JjaGluYS5uZXQKfHxwcmNsZWFkZXIub3JnCnx8cHJlc2VudGF0aW9u +emVuLmNvbQp8fHByZXN0aWdlLWF2LmNvbQoucHJpc29uZXJhbGVydC5jb20KfHxw +cml0dW5sLmNvbQp8fHByaXZhY3lib3guZGUKfHxwcml2YXRlLmNvbQp8fHByaXZh +dGVpbnRlcm5ldGFjY2Vzcy5jb20KcHJpdmF0ZXBhc3RlLmNvbQp8fHByaXZhdGVw +YXN0ZS5jb20KcHJpdmF0ZXR1bm5lbC5jb20KfHxwcml2YXRldHVubmVsLmNvbQp8 +fHByaXZhdGV2cG4uY29tCnx8cHJpdm94eS5vcmcKfHxwcm9jb3B5dGlwcy5jb20K +fHxwcm9qZWN0LXN5bmRpY2F0ZS5vcmcKfHxwcm90b24ubWUKcHJvdmlkZW9jb2Fs +aXRpb24uY29tCnx8cHJvc2liZW4uZGUKcHJveGlmaWVyLmNvbQp8fHByb3hvbWl0 +cm9uLmluZm8KLnByb3hwbi5jb20KfHxwcm94cG4uY29tCnByb3h5cm9hZC5jb20K +LnByb3h5dHVubmVsLm5ldAp8fHBzaHZwbi5jb20KfHxwc2lwaG9uLmNhCi5wc2lw +aG9uMy5jb20KfHxwc2lwaG9uMy5jb20KLnBzaXBob250b2RheS5jb20KfHxwc3Rh +dGljLm5ldAp8fHB0LmltCi5wdHQuY2MKfHxwdHQuY2MKfHxwdHRnYW1lLmNvbQou +cHVmZnN0b3JlLmNvbQp8fG1haW4tZWNucGFwZXItZWNvbm9taXN0LmNvbnRlbnQu +cHVncGlnLmNvbQp8fHB1bGxmb2xpby5jb20KLnB1bnl1LmNvbS9wdW55Cnx8cHVy +ZWNvbmNlcHRzLm5ldAp8fHB1cmVpbnNpZ2h0Lm9yZwp8fHB1cmVwZGYuY29tCnx8 +cHVyZXZwbi5jb20KLnB1cnBsZWxvdHVzLm9yZwoucHVyc3Vlc3Rhci5jb20KfHxw +dXJzdWVzdGFyLmNvbQoucHVzc3lzcGFjZS5jb20KLnB1dGlob21lLm9yZwoucHV0 +bG9ja2VyLmNvbS9maWxlCnB3bmVkLmNvbQp8fHB4aW1nLm5ldApweXRob24uY29t +Ci5weXRob24uY29tLnR3Cnx8cHl0aG9uLmNvbS50dwpweXRob25oYWNrZXJzLmNv +bS9wCnNzLnB5dGhvbmljLmxpZmUKCiEtLS0tLS0tLS0tLS0tLS0tLS0tLVFRLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8aHR0cDovL3FtcDQuY29tCnx8cWlhbm1v +LnR3Cnx8cWJpdHRvcnJlbnQub3JnCnx8cWdpcmwuY29tLnR3Cnx8cWlhbmJhaS50 +dwp8fHFpYW5kYW8udG9kYXkKfHxxaWFuZ2xpZS5jb20KfHxxaWFuZ3dhaWthbi5j +b20KLnFpLWdvbmcubWUKfHxxaS1nb25nLm1lCiEtLSM5MjEKfHxxaWFuZ3lvdS5v +cmcKLnFpZGlhbi5jYQp8fHFpd2VuLmx1CnFpeGlhbmdsdS5jbgoucWtzaGFyZS5j +b20KcW9vcy5jb20KfHxxb29zLmNvbQp8fGVma3NvZnQuY29tCnx8cXN0YXR1cy5j +b20KfHxxdHJhYy5ldQp8fHF1aXRjY3Aub3JnCi5xdWl0Y2NwLm9yZwoucXVvcmEu +Y29tL0NoaW5hcy1GdXR1cmUKLnF1cmFuLmNvbQp8aHR0cDovL3F1cmFuLmNvbQou +cXVyYW5leHBsb3Jlci5jb20KcXVzaTgubmV0Cm5lbWVzaXMyLnF4Lm5ldC9wYWdl +cy9NeUVuVHVubmVsCnF4YmJzLm9yZwoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tUlIt +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8cmFkbWluLXZwbi5jb20KfHxydWxl +MzR2aWRlby5jb20KfHxyMTBzLmpwCnx8cmFrdXRlbi5jby5qcAp8fHIwLnJ1Cnx8 +cmFkaW8tY2FuYWRhLmNhCnx8cmFkaW8tZW4tbGlnbmUuZnIKfHxyYWVsLm9yZwpy +YWRpY2FscGFydHkub3JnCnx8cmFkaW8uZ2FyZGVuCnx8cmFkaW9hdXN0cmFsaWEu +bmV0LmF1Ci5yYWRpb2hpbGlnaHQubmV0Cnx8cmFkaW9oaWxpZ2h0Lm5ldAp8fHJh +ZGlvbGluZS5jbwpvcG1sLnJhZGlvdGltZS5jb20KfHxyYWRpb3ZhdGljYW5hLm9y +Zwp8fHJhZGlvdm5jci5jb20KfHxyYWdnZWRiYW5uZXIuY29tCnx8cmFpZGNhbGwu +Y29tLnR3Ci5yYWluYm93cGxhbi5vcmcvYmJzCnxodHRwczovL3JhaW5kcm9wLmlv +LwoucmFpem9qaS5vci5qcAp8aHR0cDovL3JhaXpvamkub3IuanAKcmFuZ3plbi5u +ZXQKcmFuZ3plbi5vcmcKfGh0dHA6Ly9ibG9nLnJhbnhpYW5nLmNvbS8KLnJhcGJ1 +bGwubmV0CiEtLXxodHRwOi8vcmFwaWRnYXRvci5uZXQvCnx8cmFwaWRtb3ZpZXou +Y29tCnJhcGlkdnBuLmNvbQp8fHJhcGlkdnBuLmNvbQp8fHJhcmJncHJ4Lm9yZwp8 +fHJhdGlvbmFsd2lraS5vcmcKfHxyYXdnaXQuY29tCnx8cmF3Z2l0aHViLmNvbQp8 +fHJjaW5ldC5jYQp8fHJlYWJibGUuY29tCi5yZWFkMTAwLmNvbQoucmVhZGluZ3Rp +bWVzLmNvbS50dwp8fHJlYWRpbmd0aW1lcy5jb20udHcKfHxyZWFkbW9vLmNvbQou +cmVhZHlkb3duLmNvbQp8aHR0cDovL3JlYWR5ZG93bi5jb20KfHxyZWFsY291cmFn +ZS5vcmcKLnJlYWxpdHlraW5ncy5jb20KfHxyZWFsaXR5a2luZ3MuY29tCi5yZWFs +cmFwdGFsay5jb20KLnJlYWxzZXhwYXNzLmNvbQp8fHJlYXNvbi5jb20KLnJlY29y +ZGhpc3Rvcnkub3JnCi5yZWNvdmVyeS5vcmcudHcKfGh0dHA6Ly9vbmxpbmUucmVj +b3Zlcnl2ZXJzaW9uLm9yZwp8fHJlY292ZXJ5dmVyc2lvbi5jb20udHcKfHxyZWQt +bGFuZy5vcmcKfHxyZWRidWJibGUuY29tCi5yZWRjaGluYWNuLm5ldAp8fHJlZGNo +aW5hY24ubmV0CnJlZGNoaW5hY24ub3JnCnJlZHR1YmUuY29tCnJlZmVyZXIudXMK +fHxyZWZlcmVyLnVzCnx8cmVmbGVjdGl2ZWNvZGUuY29tCnx8YmxvZy5yZWltdS5u +ZXQKcmVsYXhiYnMuY29tCi5yZWxheS5jb20udHcKLnJlbGVhc2VpbnRlcm5hdGlv +bmFsLm9yZwp8fHJlbGlnaW9ubmV3cy5jb20KcmVubWluYmFvLmNvbQp8fHJlbm1p +bmJhby5jb20KLnJlbnl1cmVucXVhbi5vcmcKfHxyZW55dXJlbnF1YW4ub3JnCnxo +dHRwOi8vY2VydGlmaWNhdGUucmV2b2NhdGlvbmNoZWNrLmNvbQp8fHJlc2lsaW8u +Y29tCi5yZXV0ZXJzLmNvbQp8fHJldXRlcnMuY29tCnx8cmV1dGVyc21lZGlhLm5l +dAoucmV2bGVmdC5jb20KfHxyZXNpc3RjaGluYS5vcmcKcmV0d2VldGlzdC5jb20K +fHxyZXR3ZWV0cmFuay5jb20KIS0tY29ubmVjdGVkY2hpbmEucmV1dGVycy5jb20K +IS0tfGh0dHA6Ly93d3cucmV1dGVycy5jb20vbmV3cy92aWRlbwpyZXZ2ZXIuY29t +Ci5yZmEub3JnCnx8cmZhLm9yZwoucmZhY2hpbmEuY29tCi5yZmFtb2JpbGUub3Jn +CnJmYXdlYi5vcmcKfHxyZmVybC5vcmcKLnJmaS5mcgp8fHJmaS5mcgp8fHJmaS5t +eQohLS0ucmhjbG91ZC5jb20KIS0tRWRnZWNhc3QKLnJpZ3BhLm9yZwoucmlsZXln +dWlkZS5jb20KfHxyaWt1Lm1lCi5yaXRvdWtpLmpwCnx8cml0dGVyLnZnCi5ybHds +dy5jb20KfHxybHdsdy5jb20KfHxybWJsLndzCi5ybWpkdy5jb20KLnJvYWRzaG93 +LmhrCi5yb2JvZm9yZXguY29tCnx8cm9idXN0bmVzc2lza2V5LmNvbQohLS18fHJv +Yy10YWl3YW4ub3JnCnx8cm9ja2V0LmNoYXQKfHxyb2NrZXQtaW5jLm5ldAp8aHR0 +cDovL3d3dzIucm9ja2V0YmJzLmNvbS8xMS9iYnMuY2dpP2lkPTVtdXMKfGh0dHA6 +Ly93d3cyLnJvY2tldGJicy5jb20vMTEvYmJzLmNnaT9pZD1mcmVlbWdsCiEtLXx8 +cm9jbXAub3JnCnx8cm9qby5jb20KfHxyb25qb25lc3dyaXRlci5jb20KfHxyb2xm +b3VuZGF0aW9uLm9yZwp8fHJvbGlhLm5ldAp8fHJvbHNvY2lldHkub3JnCi5yb29k +by5jb20KLnJvc2VjaGluYS5uZXQKfHxyb3UudmlkZW8KLnJzZi5vcmcKfHxyc2Yu +b3JnCi5yc2YtY2hpbmVzZS5vcmcKfHxyc2YtY2hpbmVzZS5vcmcKfHxyc3NodWIu +YXBwCnx8cGhvc3BoYXRpb24xMy5yc3NpbmcuY29tCi5yc3NtZW1lLmNvbQp8fHJz +c21lbWUuY29tCnx8cnRhbGFiZWwub3JnCi5ydGhrLmhrCnx8cnRoay5oawoucnRo +ay5vcmcuaGsKfHxydGhrLm9yZy5oawoucnRpLm9yZy50dwp8fHJ0aS5vcmcudHcK +fHxydGkudHcKLnJ1YW55aWZlbmcuY29tL2Jsb2cqc29tZV93YXlzX3RvX2JyZWFr +X3RoZV9ncmVhdF9maXJld2FsbApydWtvci5vcmcKfHxydWxlMzQueHh4Cnx8cnVt +YmxlLmNvbQoucnVuYnR4LmNvbQoucnVzaGJlZS5jb20KfHxydXN2cG4uY29tCi5y +dXRlbi5jb20udHcKfHxydXRlbi5jb20udHcKfHxydXRyYWNrZXIubmV0Cnx8cnV0 +cmFja2VyLm9yZwpydXR1YmUucnUKLnJ4aGoubmV0CnxodHRwOi8vcnhoai5uZXQK +CiEtLS0tLS0tLS0tLS0tLS0tLS0tLVNTLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LQp8fHNpbmEuY29tLmhrCnx8c3dhcHNwYWNlLmNvCnx8c3RvcnJ5LnR2Cnx8c3Rh +bmRhcmQuY28udWsKfHxzYWdlcm5ldC5vcmcKfHxzaW1wbGV4LmNoYXQKfHxzb3Vu +ZG9uLmZtCnx8c3NydG9vbC5jb20KfHxzc3JzaGFyZS51cwp8fHNlY3VyZS5zaGFk +b3dzb2Nrcy5udQp8fHN5bmFwc2Uub3JnCnx8c291dGgtcGx1cy5uZXQKfHxzaWx2 +ZXJnYXRlYmFuay5jb20KfHxzaGFyZS12aWRlb3Muc2UKfHxzc3JzaGFyZS51cwp8 +fGNkbi5zdGF0aWNhbGx5LmlvCnx8c2xpZGVzLmNvbQp8fHN1bm8uY29tCnx8c3lk +bmV5LmJpbmcuY29tCnx8c2VodWF0YW5nLm9yZwp8fHNpbmdsZWxvZ2luLnNlCnx8 +c3Vuby5haQp8fHN5b3NldHUuY29tCi5zMXMxczEuY29tCnx8cy1jdXRlLmNvbQou +cy1kcmFnb24ub3JnCnxodHRwOi8vd3d3LnM0bWluaWFyY2hpdmUuY29tCmNkbjEu +bHAuc2Fib29tLmNvbQp8fHNhY2tzLmNvbQpzYWNvbS5oawp8fHNhY29tLmhrCnx8 +c2FkcGFuZGEudXMKfHxzYWZlY2hhdC5jb20KfHxzYWZlZ3VhcmRkZWZlbmRlcnMu +Y29tCi5zYWZlcnZwbi5jb20KfHxzYWZlcnZwbi5jb20KLnNhaW50eWN1bHR1cmUu +Y29tCnxodHRwOi8vc2FpbnR5Y3VsdHVyZS5jb20KfHxzYWt1cmFsaXZlLmNvbQou +c2FreWEub3JnCi5zYWx2YXRpb24ub3JnLmhrCnx8c2FsdmF0aW9uLm9yZy5oawou +c2FtYWlyLnJ1L3Byb3h5L3R5cGUtMDEKLnNhbWJob3RhLm9yZwp8fGNuLnNhbmRz +Y290YWljZW50cmFsLmNvbQp8fHNhbmtha3Vjb21wbGV4LmNvbQp8fHNhbmtlaS5j +b20KfHxzYW5taW4uY29tLnR3CnNhcGlrYWNodS5uZXQKc2F2ZW1lZGlhLmNvbQp8 +fHNhdmV0aGVzb3VuZHMuaW5mbwouc2F2ZXRpYmV0LmRlCnx8c2F2ZXRpYmV0LmRl +CnNhdmV0aWJldC5mcgpzYXZldGliZXQubmwKLnNhdmV0aWJldC5vcmcKfHxzYXZl +dGliZXQub3JnCnNhdmV0aWJldC5ydQouc2F2ZXRpYmV0c3RvcmUub3JnCnx8c2F2 +ZXRpYmV0c3RvcmUub3JnCnx8c2F2ZXVpZ2h1ci5vcmcKc2F2ZXZpZC5jb20KLnNi +bWUubWUKfGh0dHA6Ly9zYm1lLm1lCi5zYnMuY29tLmF1L3lvdXJsYW5ndWFnZQou +c2Nhc2luby5jb20KfGh0dHA6Ly93d3cuc2NpZW5jZW1hZy5vcmcvY29udGVudC8z +NDQvNjE4Ny85NTMKLnNjaWVuY2VuZXRzLmNvbQouc2NtcC5jb20KfHxzY21wLmNv +bQouc2NtcGNoaW5lc2UuY29tCnx8c2NyYW1ibGUuaW8KfHxzY3JpYmQuY29tCnx8 +c2NyaXB0c3BvdC5jb20KfHxzZWFyY2guY29tCi5zZWFyY2h0cnV0aC5jb20KfHxz +ZWFyeC5tZQp8fHNlYXR0bGVmZGMuY29tCi5zZWNyZXRjaGluYS5jb20KfHxzZWNy +ZXRjaGluYS5jb20KfHxzZWNyZXRnYXJkZW4ubm8KLnNlY3JldHNsaW5lLmJpegp8 +fHNlY3JldHNsaW5lLmJpegp8fHNlY3VyZXNlcnZlcmNkbi5uZXQKfHxzZWN1cmV0 +dW5uZWwuY29tCnNlY3VyaXR5aW5hYm94Lm9yZwp8aHR0cHM6Ly9zZWN1cml0eWlu +YWJveC5vcmcKLnNlY3VyaXR5a2lzcy5jb20KfHxzZWN1cml0eWtpc3MuY29tCnx8 +c2VlZDQubWUKfHxuZXdzLnNlZWh1YS5jb20Kc2Vlc21pYy5jb20KfHxzZWV2cG4u +Y29tCnx8c2Vlem9uZS5uZXQKfHxzZWh1YXRhbmcubmV0CnNlamllLmNvbQouc2Vu +ZHNwYWNlLmNvbQp8fHNlbnNvcnRvd2VyLmNvbQpzZXNhd2UubmV0Cnx8c2VzYXdl +Lm5ldAp8fHNldGh3a2xlaW4ubmV0Cnx8c2V0bi5jb20KLnNldHR2LmNvbS50dwou +c2V2ZW5sb2FkLmNvbQp8fHNldmVubG9hZC5jb20KLnNleC5jb20KfHxzZXguY29t +Cnx8c2V4My5jb20KfHxzZXg4LmNjCi5zZXhhbmRzdWJtaXNzaW9uLmNvbQouc2V4 +Ym90LmNvbQouc2V4aHUuY29tCnNleGluc2V4Lm5ldAp8fHNleGluc2V4Lm5ldAou +c2V4dHZ4LmNvbQoKIS0tSVAgb2YgU2V4SW5TZXgKNjcuMjIwLjkxLjE1CjY3LjIy +MC45MS4xOAo2Ny4yMjAuOTEuMjMKCnxodHRwOi8vKi5zZi5uZXQKLnNmaWxleWR5 +LmNvbQp8fHNmc2hpYmFvLmNvbQouc2Z0aW5kaWEub3JnCi5zZnR1ay5vcmcKfHxz +ZnR1ay5vcmcKfHxzaGFkZXlvdXZwbi5jb20Kc2hhZG93Lm1hCi5zaGFkb3dza3ku +eHl6Ci5zaGFkb3dzb2Nrcy5hc2lhCnx8d3d3LnNoYWRvd3NvY2tzLmNvbQouc2hh +ZG93c29ja3MuY29tCnx8c2hhZG93c29ja3MuY29tLmhrCi5zaGFkb3dzb2Nrcy5v +cmcKfHxzaGFkb3dzb2Nrcy5vcmcKfGh0dHA6Ly9jbi5zaGFmYXFuYS5jb20KfHxz +aGFoaXQuYml6Ci5zaGFtYmFsYXBvc3QuY29tCnNoYXBlc2VydmljZXMuY29tCi5z +aGFyZWJlZS5jb20KfHxzaGFyZWNvb2wub3JnCiEtLXx8c2hhcmtkb2xwaGluLmNv +bQouc2hhcnBkYWlseS5oawouc2hhcnBkYWlseS50dwouc2hhdC10aWJldC5jb20K +c2hlaWt5ZXJtYW1pLmNvbQouc2hlbGxmaXJlLmRlCnx8c2hlbGxmaXJlLmRlCnNo +ZW55dW4uY29tCnNoZW55dW5wZXJmb3JtaW5nYXJ0cy5vcmcKfHxzaGVueXVucGVy +Zm9ybWluZ2FydHMub3JnCnx8c2hlbnl1bnNob3AuY29tCnNoZW56aG91ZmlsbS5j +b20KfHxzaGVuemhvdWZpbG0uY29tCnx8c2hlbnpob3V6aGVuZ2Rhby5vcmcKLnNo +aWF0di5uZXQKLnNoaWNoZW5nLm9yZwpzaGlwY2Ftb3VmbGFnZS5jb20KLnNoaXJl +eWlzaHVuamlhbi5jb20KLnNoaXRhb3R2Lm9yZwp8fHNoaXhpYW8ub3JnCnx8c2hp +emhhby5vcmcKc2hpemhhby5vcmcKc2hrc3ByLm1vYmkvZGFicgp8fHNob2Rhbmhx +LmNvbQp8fHNob29zaHRpbWUuY29tCi5zaG9wMjAwMC5jb20udHcKfHxzaG9wZWUu +dHcKLnNob3BwaW5nLmNvbQouc2hvd2hhb3R1LmNvbQouc2hvd3RpbWUuanAKfHxz +aG93d2UudHcKLnNodXR0ZXJzdG9jay5jb20KfHxzaHV0dGVyc3RvY2suY29tCi5z +aHdjaHVyY2gub3JnCnx8c2h3Y2h1cmNoLm9yZwouc2h3Y2h1cmNoMy5jb20KfGh0 +dHA6Ly9zaHdjaHVyY2gzLmNvbQouc2lkZGhhcnRoYXNpbnRlbnQub3JnCnx8c2lk +ZWxpbmVzbmV3cy5jb20KLnNpZGVsaW5lc3Nwb3J0c2VhdGVyeS5jb20KfHxzaWdu +YWwub3JnCi5zaWppaHVpc3VvLmNsdWIKLnNpamlodWlzdW8uY29tCi5zaWxrYm9v +ay5jb20KfHxzaW1ib2xvc3R3aXR0ZXIuY29tCnNpbXBsZWNkLm9yZwp8fHNpbXBs +ZWNkLm9yZwp8fHNpbXBsZWNkLm1lCnNpbXBsZXByb2R1Y3Rpdml0eWJsb2cuY29t +CmJicy5zaW5hLmNvbS8KYmJzLnNpbmEuY29tJTJGCmRhaWx5bmV3cy5zaW5hLmNv +bS8KZGFpbHluZXdzLnNpbmEuY29tJTJGCmhvbWUuc2luYS5jb20KbmV3cy5zaW5h +LmNvbS5oawpuZXdzLnNpbmNoZXcuY29tLm15Ci5zaW5jaGV3LmNvbS5teS9ub2Rl +Lwouc2luY2hldy5jb20ubXkvdGF4b25vbXkvdGVybQouc2luZ2Fwb3JlcG9vbHMu +Y29tLnNnCnx8c2luZ2Fwb3JlcG9vbHMuY29tLnNnCi5zaW5nZm9ydGliZXQuY29t +Ci5zaW5ncGFvLmNvbS5oawpzaW5ndGFvLmNvbQp8fHNpbmd0YW8uY29tCm5ld3Mu +c2luZ3Rhby5jYQouc2luZ3Rhb3VzYS5jb20KfHxzaW5ndGFvdXNhLmNvbQohLS18 +fGNkcC5zaW5pY2EuZWR1LnR3CnNpbm8tbW9udGhseS5jb20KfHxzaW5vY2EuY29t +Cnx8c2lub2Nhc3QuY29tCnNpbm9jaXNtLmNvbQpzaW5vbW9udHJlYWwuY2EKLnNp +bm9hbnRzLmNvbQp8fHNpbm9hbnRzLmNvbQp8fHNpbm9pbnNpZGVyLmNvbQouc2lu +b3F1ZWJlYy5jb20KLnNpZXJyYWZyaWVuZHNvZnRpYmV0Lm9yZwpzaXMueHh4Cnx8 +c2lzMDAxLmNvbQpzaXMwMDEudXMKLnNpdGUydW5ibG9jay5jb20KLnNpdGVicm8u +dHcKfHxzaXRla3JlYXRvci5jb20KfHxzaXRlbWFwcy5vcmcKfHxza2V0Y2hhcHBz +b3VyY2VzLmNvbQp8fHNraW10dWJlLmNvbQp8fGxhYi5za2subW9lCnx8c2t5YmV0 +LmNvbQp8aHR0cDovL3VzZXJzLnNreW5ldC5iZS9yZXZlcy90aWJldGhvbWUuaHRt +bAouc2t5a2luZy5jb20udHcKYmJzLnNreWtpd2kuY29tCnxodHRwOi8vd3d3LnNr +eXBlLmNvbS9pbnRsLwp8aHR0cDovL3d3dy5za3lwZS5jb20vemgtSGFudAp8fHNr +eXZlZ2FzLmNvbQoueHNreXdhbGtlci5jb20KfHx4c2t5d2Fsa2VyLmNvbQp8fHNr +eXh2cG4uY29tCi5zbGF5dGl6bGUuY29tCi5zbGVhenlkcmVhbS5jb20KfHxzbGVh +enlmb3JrLm9yZwp8fHNsaGVuZy5jb20KfHxzbGlkZXNoYXJlLm5ldApmb3J1bS5z +bGltZS5jb20udHcKLnNsaW5rc2V0LmNvbQp8fHNsaWNrdnBuLmNvbQouc2x1dGxv +YWQuY29tCnx8c21hcnRkbnNwcm94eS5jb20KLnNtYXJ0aGlkZS5jb20KfHxhcHAu +c21hcnRtYWlsY2xvdWQuY29tCnNtY2hib29rcy5jb20KfHxzbWguY29tLmF1CnNt +aHJpYy5vcmcKLnNtaXRoLmVkdS9kYWxhaWxhbWEKfHxzbW4ubmV3cwouc215eHku +b3JnCiEtLVRPRE8tbm8taG9tZXBhZ2UKfHxzbmRjZG4uY29tCnNuZWFrbWUubmV0 +CnNub3dsaW9ucHViLmNvbQp8fHNvY2lhbGJsYWRlLmNvbQouc29ja3MtcHJveHku +bmV0Cnx8c29ja3MtcHJveHkubmV0Ci5zb2Nrc2NhcDY0LmNvbQp8fHNvY2tzbGlz +dC5uZXQKLnNvY3JlYy5vcmcKfGh0dHA6Ly9zb2NyZWMub3JnCi5zb2QuY28uanAK +LnNvZnRldGhlci5vcmcKfHxzb2Z0ZXRoZXIub3JnCi5zb2Z0ZXRoZXItZG93bmxv +YWQuY29tCnx8c29mdGV0aGVyLWRvd25sb2FkLmNvbQp8fGNkbi5zb2Z0bGF5ZXIu +bmV0Cnx8c29nY2x1Yi5jb20Kc29oY3JhZGlvLmNvbQp8fHNvaGNyYWRpby5jb20K +LnNva21pbC5jb20KfHxzb3J0aW5nLWFsZ29yaXRobXMuY29tCnx8c291cC5pbwpA +QHx8c3RhdGljLnNvdXAuaW8KLnNvYmVlcy5jb20KfHxzb2JlZXMuY29tCi5zb2Z0 +ZXRoZXIuY28uanAKfHxzb2Z0d2FyZWJ5Y2h1Y2suY29tCmJsb2cuc29nb28ub3Jn +CnNvaC50dwp8fHNvaC50dwpzb2hmcmFuY2Uub3JnCnx8c29oZnJhbmNlLm9yZwpj +aGluZXNlLnNvaWZpbmQuY29tCnNva2Ftb25saW5lLmNvbQp8fHNvbGFuYS5jb20K +LnNvbGlkYXJpdGV0aWJldC5vcmcKLnNvbGlkZmlsZXMuY29tCnx8c29tZWUuY29t +Ci5zb25namlhbmp1bi5jb20KfHxzb25namlhbmp1bi5jb20KLnNvbmlkb2RlbGFl +c3BlcmFuemEub3JnCi5zb3BjYXN0LmNvbQouc29wY2FzdC5vcmcKfHxuYWtlZHNl +Y3VyaXR5LnNvcGhvcy5jb20KfHxzb3Mub3JnCnx8c29zYWQuZnVuCmJicy5zb3Ut +dG9uZy5vcmcKLnNvdWJvcnkuY29tCnxodHRwOi8vc291Ym9yeS5jb20KLnNvdWwt +cGx1cy5uZXQKLnNvdWxjYWxpYnVyaGVudGFpLm5ldAp8fHNvdWxjYWxpYnVyaGVu +dGFpLm5ldAp8fHNvdW5kY2xvdWQuY29tCiEtLXxodHRwczovL3NvdW5kY2xvdWQu +Y29tL3B1bmtnb2QKLnNvdW5kb2Zob3BlLmtyCnNvdW5kb2Zob3BlLm9yZwp8fHNv +dW5kb2Zob3BlLm9yZwohLS0uc291cmNlZm9yZ2UubmV0CiEtfGh0dHA6Ly9zb3Vy +Y2Vmb3JnZS5uZXQKfGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcCovc2hhZG93c29j +a3NndWkvCi5zb3VyY2V3YWRpby5jb20KfHxzb3V0aC1wbHVzLm9yZwp8fHNvdXRo +bW9uZ29saWEub3JnCnx8c291dGhuZXdzLmNvbS50dwp8fHNvd2Vycy5vcmcuaGsK +fHxzcGFua2JhbmcuY29tCi5zcGFua2luZ3R1YmUuY29tCi5zcGFua3dpcmUuY29t +Cnx8c3BhdGlhbC5pbwp8fHNwYi5jb20KfHxzcGVha2VyZGVjay5jb20KfHxzcGVl +ZGNhdC5tZQp8fHNwZWVkaWZ5LmNvbQp8fHNwZW5jZXJ0aXBwaW5nLmNvbQp8fHNw +ZW5kZWUuY29tCnx8c3BpY2V2cG4uY29tCi5zcGlkZXJvYWsuY29tCnx8c3BpZGVy +b2FrLmNvbQouc3Bpa2UuY29tCi5zcG90Zmx1eC5jb20KfHxzcG90Zmx1eC5jb20K +fHxzcHJlYWtlci5jb20KLnNwcmluZzR1LmluZm8KfHxzcHJpbmc0dS5pbmZvCnx8 +c3ByaW5nd29vZC5tZQp8fHNwcm91dGNvcmUuY29tCnx8c3F1aXJyZWx2cG4uY29t +Ci5zcy1saW5rLmNvbQp8fHNzLWxpbmsuY29tCi5zc2dsb2JhbC5jby93cAp8aHR0 +cDovL3NzZ2xvYmFsLmNvCi5zc2dsb2JhbC5tZQouc3Nyc2hhcmUuY29tCnx8c3Ny +c2hhcmUuY29tCiEtLXxodHRwOi8vY2RuLnNzdGF0aWMubmV0Lwp8fHNzdG0ubW9l +Cnx8c3N0bWx0Lm1vZQpzc3RtbHQubmV0Cnx8c3N0bWx0Lm5ldAp8aHR0cDovL3N0 +YWNrb3ZlcmZsb3cuY29tL3VzZXJzLzg5NTI0NQp8fHN0YW5kdXBmb3J0aWJldC5v +cmcKfHxzdGFuZHdpdGhoay5vcmcKc3RhbmZvcmQuZWR1L2dyb3VwL2ZhbHVuCi5z +dGFyZmlzaGZ4LmNvbQouc3RhcnAycC5jb20KfHxzdGFycDJwLmNvbQouc3RhcnRw +YWdlLmNvbQp8fHN0YXJ0cGFnZS5jb20KLnN0YXJ0dXBsaXZpbmdjaGluYS5jb20K +fGh0dHA6Ly9zdGFydHVwbGl2aW5nY2hpbmEuY29tCnx8c3RhdGljLWVjb25vbWlz +dC5jb20KfHxzdGJveS5uZXQKfHxzdGMuY29tLnNhCnx8c3RlZWwtc3Rvcm0uY29t +Ci5zdGVnYW5vcy5jb20KfHxzdGVnYW5vcy5jb20KLnN0ZWdhbm9zLm5ldAouc3Rl +cGNoaW5hLmNvbQohLS18fHN0ZXBtYW5pYS5jb20KaGQuc3RoZWFkbGluZS5jb20v +bmV3cy9yZWFsdGltZQpzdGhvby5jb20KfHxzdGhvby5jb20KLnN0aWNrYW0uY29t +CnN0aWNrZXJhY3Rpb24uY29tL3Nlc2F3ZQouc3RpbGVwcm9qZWN0LmNvbQp8fHN0 +aXRjaGVyLmNvbQouc3RvLmNjCi5zdG9wb3JnYW5oYXJ2ZXN0aW5nLm9yZwp8fHN0 +b3JhZ2VuZXdzbGV0dGVyLmNvbQouc3Rvcm0ubWcKfHxzdG9ybS5tZwouc3RvcHRp +YmV0Y3Jpc2lzLm5ldAp8fHN0b3B0aWJldGNyaXNpcy5uZXQKfHxzdG9yai5pbwou +c3Rvcm1tZWRpYWdyb3VwLmNvbQp8fHN0b3dlYm95ZC5jb20KfHxzdHJhaXRzdGlt +ZXMuY29tCnN0cmFuYWJnLmNvbQp8fHN0cmFwbGVzc2RpbGRvLmNvbQp8fHN0cmVh +bWFibGUuY29tCnx8c3RyZWFtYXRlLmNvbQp8fHN0cmVhbWluZ3RoZS5uZXQKc3Ry +ZWVtYS5jb20vdHYvTlREVFZfQ2hpbmVzZQpjbi5zdHJlZXR2b2ljZS5jb20vYXJ0 +aWNsZQpjbi5zdHJlZXR2b2ljZS5jb20vZGlhcnkKdHcuc3RyZWV0dm9pY2UuY29t +Ci5zdHJpa2luZ2x5LmNvbQp8fHN0cm9uZ3Zwbi5jb20KLnN0cm9uZ3dpbmRwcmVz +cy5jb20KfHxzdHVkZW50c2ZvcmFmcmVldGliZXQub3JnCnx8c3R1bWJsZXVwb24u +Y29tCnN0dXBpZHZpZGVvcy5jb20KfHxzdWJzdGFjay5jb20KfHxzdWJoZC50dgou +c3VjY2Vzc2ZuLmNvbQpwYW5hbWFwYXBlcnMuc3VlZGRldXRzY2hlLmRlCi5zdWdh +cnN5bmMuY29tCnx8c3VnYXJzeW5jLmNvbQouc3Vnb2Jicy5jb20KfHxzdWd1bWly +dTE4LmNvbQp8fHN1aXNzbC5jb20Kc3VtbWlmeS5jb20KLnN1bXJhbmRvLmNvbQp8 +fHN1bXJhbmRvLmNvbQpzdW4xOTExLmNvbQp8fHN1bmRheWd1YXJkaWFubGl2ZS5j +b20KLnN1bnBvcm5vLmNvbQp8fHN1bm1lZGlhLmNhCnx8c3VucG9ybm8uY29tCi5z +dW5za3lmb3J1bS5jb20KLnN1bnRhLmNvbS50dwouc3VudnBuLm5ldAouc3VwZXJm +cmVldnBuLmNvbQouc3VwZXJ2cG4ubmV0Cnx8c3VwZXJ2cG4ubmV0Ci5zdXBlcnpv +b2kuY29tCnxodHRwOi8vc3VwZXJ6b29pLmNvbQouc3VwcGlnLm5ldAouc3VwcmVt +ZW1hc3RlcnR2LmNvbQp8aHR0cDovL3N1cHJlbWVtYXN0ZXJ0di5jb20KLnN1cmZl +YXN5LmNvbQp8fHN1cmZlYXN5LmNvbQouc3VyZmVhc3kuY29tLmF1CnxodHRwOi8v +c3VyZmVhc3kuY29tLmF1Cnx8c3VyZnNoYXJrLmNvbQp8fHN1cnJlbmRlcmF0MjAu +bmV0Ci5zdnNmeC5jb20KLnN3aXNzaW5mby5jaAp8fHN3aXNzaW5mby5jaAouc3dp +c3N2cG4ubmV0Cnx8c3dpc3N2cG4ubmV0CnN3aXRjaHZwbi5uZXQKfHxzd2l0Y2h2 +cG4ubmV0Ci5zeWRuZXl0b2RheS5jb20KfHxzeWRuZXl0b2RheS5jb20KLnN5bGZv +dW5kYXRpb24ub3JnCnx8c3lsZm91bmRhdGlvbi5vcmcKfHxzeW5jYmFjay5jb20K +c3lzcmVzY2NkLm9yZwouc3l0ZXMubmV0CmJsb2cuc3l4ODYuY29tLzIwMDkvMDkv +cHVmZgouc3piYnMubmV0Ci5zemV0b3dhaC5vcmcuaGsKCiEtLS0tLS0tLS0tLS0t +LS0tLS0tLVRULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8fHRhbGthdG9uZS5j +b20KfHx0YW5rcy5nZwp8fHRoZWhhbnNpbmRpYS5jb20KfHxydG0udG50LWVhLmNv +bQp8fHRlbGxhcGFydC5jb20KfHx0aHJlYWRzLmNvbQp8fHRnLW1lLmNvbQp8fHR3 +a2FuLmNvbQp8fHR1bmVpbi5zdHJlYW1ndXlzMS5jb20KfHx0b3UudHYKfHx0aW55 +dXJsLmNvbQp8fHRleHRub3cuY29tCnx8dGV4dG5vdy5tZQp8fHRva2VuLmltCnx8 +dG9rZW5sb24uaW0KfHx0YXJkaWdyYWRlLmlvCnx8dG9ycmVudGdhbGF4eS50bwp8 +fHRvbXAzLmNjCnx8dHVrYWFuaS5vcmcKfHx0aGV0YXRva2VuLm9yZwp8fHR5cGVz +ZXQuaW8KfHx0aGVjaGFzZXJuZXdzLmNvLnVrCnx8aG9sZS50aHUubW9uc3Rlcgp8 +fHRodWhvbGUuY29tCnx8dC1nLmNvbQoudDM1LmNvbQoudDY2eS5jb20KfHx0NjZ5 +LmNvbQp8fGVzZy50OTF5LmNvbQoudGFhLXVzYS5vcmcKfGh0dHA6Ly90YWEtdXNh +Lm9yZwoudGFhemUudHcKfHx0YWF6ZS50dwp8aHR0cDovL3d3dy50YWJsZXNnZW5l +cmF0b3IuY29tLwp0YWJ0dGVyLmpwCi50YWNvbmV0LmNvbS50dwp8fHRhZWRwLm9y +Zy50dwoudGFmbS5vcmcKdGFnd2Fsay5jb20KfHx0YWd3YWxrLmNvbQp0YWhyLm9y +Zy50dwoudGFpcGVpc29jaWV0eS5vcmcKfHx0YWlwZWlzb2NpZXR5Lm9yZwp8fHRh +aXBlaXRpbWVzLmNvbQp8fHRhaXNvdW5kcy5jb20KLnRhaXdhbmJpYmxlLmNvbQou +dGFpd2FuZGFpbHkubmV0Cnx8dGFpd2FuZGFpbHkubmV0Ci50YWl3YW5kYy5vcmcK +IS0tfHx0YWl3YW5lbWJhc3N5Lm9yZwp8fHRhaXdhbmhvdC5uZXQKLnRhaXdhbmp1 +c3RpY2UuY29tCnRhaXdhbmtpc3MuY29tCnRhaXdhbm5hdGlvbi5jb20KdGFpd2Fu +bmF0aW9uLmNvbS50dwp8fHRhaXdhbm5jZi5vcmcudHcKfHx0YWl3YW5uZXdzLmNv +bS50dwp8aHR0cDovL3d3dy50YWl3YW5vbmxpbmUuY2MvCiEtLXx8dGFpd2FudG9k +YXkudHcKdGFpd2FudHAubmV0Cnx8dGFpd2FudHQub3JnLnR3CnRhaXdhbnVzLm5l +dAoudGFsazg1My5jb20KLnRhbGtib3hhcHAuY29tCnx8dGFsa2JveGFwcC5jb20K +LnRhbGtjYy5jb20KfHx0YWxrY2MuY29tCi50YWxrb25seS5uZXQKfHx0YWxrb25s +eS5uZXQKfHx0YW5jLm9yZwoudGFuZ3Jlbi51cwoudGFvaXNtLm5ldAp8aHR0cDov +L3Rhb2lzbS5uZXQKLnRhcGF0YWxrLmNvbQp8fHRhcGF0YWxrLmNvbQpibG9nLnRh +cmFnYW5hLmNvbQp8fHRhdXAubmV0Ci50YXdlZXQuY29tCnx8dGF3ZWV0LmNvbQou +dGJjb2xsZWdlLm9yZwp8fHRiY29sbGVnZS5vcmcKLnRiaS5vcmcuaGsKLnRianl0 +Lm9yZwoudGJyYy5vcmcKdGJzLXJhaW5ib3cub3JnCi50YnNlYy5vcmcKfHx0YnNl +Yy5vcmcKdGJza2tpbmFiYWx1LnBhZ2UudGwKLnRic24ub3JnCnx8dGJzbi5vcmcK +LnRic3NlYXR0bGUub3JnCi50YnNzcWgub3JnCnxodHRwOi8vdGJzc3FoLm9yZwp0 +YnN3ZC5vcmcKLnRidGVtcGxlLm9yZy51awoudGJ0aG91c3Rvbi5vcmcKLnRjY3dv +bmxpbmUub3JnCi50Y2V3Zi5vcmcKdGNocmQub3JnCnRjbnluai5vcmcKfHx0Y3Bz +cGVlZC5jbwoudGNzb2ZiYy5vcmcKLnRkbS5jb20ubW8KdGVhbWFtZXJpY2FueS5j +b20KfHx0ZWNoc3BvdC5jb20KIS0tT1ZICnx8dGVjaHZpei5uZXQKfHx0ZWNrLmlu +Ci50ZWVuaWVmdWNrLm5ldAp0ZWVuc2luYXNpYS5jb20KfHx0ZWhyYW50aW1lcy5j +b20KLnRlbGVjb21zcGFjZS5jb20KfHx0ZWxlZ3JhcGguY28udWsKLnRlbmFjeS5j +b20KfHx0ZW5vci5jb20KfHx0ZW56aW5wYWxtby5jb20KLnRldy5vcmcKfHx0ZXcu +b3JnCnx8dGZjLXRhaXdhbi5vcmcudHcKfHx0ZmlmbHZlLmNvbQoudGhhaWNuLmNv +bQp8fHRoZWF0bGFudGljLmNvbQp8fHRoZWF0cnVtLWJlbGxpLmNvbQp8fGNuLnRo +ZWF1c3RyYWxpYW4uY29tLmF1CnRoZWJsZW1pc2guY29tCnx8dGhlYmNvbXBsZXgu +Y29tCnx8dGhlYmxhemUuY29tCi50aGVib2JzLmNvbQp8fHRoZWJvYnMuY29tCi50 +aGVjaGluYWJlYXQub3JnCnx8dGhlY2hpbmFjb2xsZWN0aW9uLm9yZwp8aHR0cDov +L3d3dy50aGVjaGluYXN0b3J5Lm9yZy95ZWFyYm9va3MveWVhcmJvb2stMjAxMi8K +fHx0aGVjb252ZXJzYXRpb24uY29tCi50aGVkYWxhaWxhbWFtb3ZpZS5jb20KfGh0 +dHA6Ly90aGVkYWxhaWxhbWFtb3ZpZS5jb20KfHx0aGVkaXBsb21hdC5jb20KfHx0 +aGVkdy51cwp8fHRoZWVwb2NodGltZXMuY29tCiEtLXx8dGhlZnJlZWxhbmQuY2x1 +Ygp8fHRoZWd1YXJkaWFuLmNvbQp8fHRoZWdheS5jb20KfGh0dHA6Ly90aGVnaW9p +dGluaG9jLnZuLwoudGhlZ2x5LmNvbQp8fHRoZWhpbmR1LmNvbQp8fHRoZWh1bi5u +ZXQKLnRoZWluaXRpdW0uY29tCnx8dGhlaW5pdGl1bS5jb20KLnRoZW5ld3NsZW5z +LmNvbQp8fHRoZW5ld3NsZW5zLmNvbQoudGhlcGlyYXRlYmF5Lm9yZwp8fHRoZXBp +cmF0ZWJheS5vcmcKIS0tfHx0aGVwaXJhdGViYXkuc2UKLnRoZXBvcm5kdWRlLmNv +bQp8fHRoZXBvcm5kdWRlLmNvbQp8fHRoZXBvcnRhbHdpa2kuY29tCnx8dGhlcHJp +bnQuaW4KfHx0aHJlYWRyZWFkZXJhcHAuY29tCnRoZXJvY2submV0Lm56Cnx8dGhl +c2F0dXJkYXlwYXBlci5jb20uYXUKfHx0aGVzdGFuZG5ld3MuY29tCnRoZXRpYmV0 +Y2VudGVyLm9yZwp0aGV0aWJldGNvbm5lY3Rpb24ub3JnCi50aGV0aWJldG11c2V1 +bS5vcmcKLnRoZXRpYmV0cG9zdC5jb20KfHx0aGV0aWJldHBvc3QuY29tCnRoZXRy +b3Rza3ltb3ZpZS5jb20KfHx0aGV0dmRiLmNvbQp8fHRoZXdnby5vcmcKfHx0aGV3 +aXJlY2hpbmEuY29tCi50aGV5bmMuY29tCnxodHRwOi8vdGhleW5jLmNvbQoudGhp +bmtpbmd0YWl3YW4uY29tCnx8dGhpbmtpbmd0YWl3YW4uY29tCnx8dGhpcmRtaWxs +Lm9yZwp8fHRoaXNhdi5jb20KLnRobGliLm9yZwp8fHRob21hc2Jlcm5oYXJkLm9y +ZwoudGhvbmdkcmVhbXMuY29tCnx8dGhyb3VnaG5pZ2h0c2ZpcmUuY29tCi50aHVt +YnppbGxhLmNvbQp8fHRoeXdvcmRzLmNvbQp0aWFuYW5tZW5tb3RoZXIub3JnCi50 +aWFuYW5tZW5kdWl6aGkuY29tCnx8dGlhbmFubWVuZHVpemhpLmNvbQp8fHRpYW5h +bm1lbnVuaXYuY29tCnx8dGlhbmFubWVudW5pdi5uZXQKfHx0aWFuZGl4aW5nLm9y +ZwoudGlhbmh1YXl1YW4uY29tCi50aWFubGF3b2ZmaWNlLmNvbQp8fHRpYW50aS5p +bwp0aWFudGlib29rcy5vcmcKfHx0aWFudGlib29rcy5vcmcKdGlhbnlhbnRvbmcu +b3JnLmNuCi50aWFuemh1Lm9yZwoudGliZXQuYXQKdGliZXQuY2EKLnRpYmV0LmNv +bQp8fHRpYmV0LmNvbQp0aWJldC5mcgoudGliZXQubmV0Cnx8dGliZXQubmV0Cnx8 +dGliZXQubnUKLnRpYmV0Lm9yZwp8fHRpYmV0Lm9yZwp8fHRpYmV0Lm9yZy50dwp8 +fHRpYmV0LnRvCi50aWJldC1lbnZveS5ldQp8fHRpYmV0LWVudm95LmV1Ci50aWJl +dC1mb3VuZGF0aW9uLm9yZwoudGliZXQtaG91c2UtdHJ1c3QuY28udWsKfHx0aWJl +dC1pbml0aWF0aXZlLmRlCi50aWJldC1tdW5pY2guZGUKLnRpYmV0M3JkcG9sZS5v +cmcKfGh0dHA6Ly90aWJldDNyZHBvbGUub3JnCnRpYmV0YWN0aW9uLm5ldAp8fHRp +YmV0YWN0aW9uLm5ldAoudGliZXRhaWQub3JnCnRpYmV0YWxrLmNvbQoudGliZXRh +bi5mcgp0aWJldGFuLWFsbGlhbmNlLm9yZwoudGliZXRhbmFydHMub3JnCi50aWJl +dGFuYnVkZGhpc3RpbnN0aXR1dGUub3JnCnx8dGliZXRhbmJ1ZGRoaXN0aW5zdGl0 +dXRlLm9yZwp8fHRpYmV0YW5jb21tdW5pdHkub3JnCnx8dGliZXRhbmVudHJlcHJl +bmV1cnMub3JnCnx8dGliZXRhbmhlYWx0aC5vcmcKLnRpYmV0YW5qb3VybmFsLmNv +bQoudGliZXRhbmxhbmd1YWdlLm9yZwoudGliZXRhbmxpYmVyYXRpb24ub3JnCnx8 +dGliZXRhbmxpYmVyYXRpb24ub3JnCi50aWJldGNvbGxlY3Rpb24uY29tCi50aWJl +dGFuYWlkcHJvamVjdC5vcmcKLnRpYmV0YW5jb21tdW5pdHl1ay5uZXQKfGh0dHA6 +Ly90aWJldGFuY29tbXVuaXR5dWsubmV0CnRpYmV0YW5jdWx0dXJlLm9yZwp0aWJl +dGFuZmVtaW5pc3Rjb2xsZWN0aXZlLm9yZwoudGliZXRhbnBhaW50aW5ncy5jb20K +LnRpYmV0YW5waG90b3Byb2plY3QuY29tCi50aWJldGFucG9saXRpY2FscmV2aWV3 +Lm9yZwoudGliZXRhbnJldmlldy5uZXQKfGh0dHA6Ly90aWJldGFuc3BvcnRzLm9y +ZwoudGliZXRhbndvbWVuLm9yZwp8aHR0cDovL3RpYmV0YW53b21lbi5vcmcKLnRp +YmV0YW55b3V0aC5vcmcKLnRpYmV0YW55b3V0aGNvbmdyZXNzLm9yZwp8fHRpYmV0 +YW55b3V0aGNvbmdyZXNzLm9yZwoudGliZXRjaGFyaXR5LmRrCnRpYmV0Y2hhcml0 +eS5pbgoudGliZXRjaGlsZC5vcmcKLnRpYmV0Y2l0eS5jb20KfHx0aWJldGNvcnBz +Lm9yZwp8fHRpYmV0ZXhwcmVzcy5uZXQKfHx0aWJldGZvY3VzLmNvbQp8fHRpYmV0 +ZnVuZC5vcmcKLnRpYmV0Z2VybWFueS5jb20KfHx0aWJldGdlcm1hbnkuZGUKLnRp +YmV0aGF1cy5jb20KLnRpYmV0aGVyaXRhZ2VmdW5kLm9yZwp8fHRpYmV0aG91c2Uu +anAKfHx0aWJldGhvdXNlLm9yZwp8fHRpYmV0aG91c2UudXMKLnRpYmV0aW5mb25l +dC5uZXQKLnRpYmV0anVzdGljZS5vcmcKLnRpYmV0a29taXRlLmRrCnx8dGliZXRt +dXNldW0ub3JnCnx8dGliZXRuZXR3b3JrLm9yZwp8fHRpYmV0b2ZmaWNlLmNoCnRp +YmV0b2ZmaWNlLmV1Cnx8dGliZXRvZmZpY2Uub3JnCnx8dGliZXRvbmxpbmUuY29t +Cnx8dGliZXRvZmZpY2UuY29tLmF1Cnx8dGliZXRvbmxpbmUudHYKfHx0aWJldG9y +YWxoaXN0b3J5Lm9yZwp8fHRpYmV0cG9saWN5LmV1Cnx8dGliZXRyZWxpZWZmdW5k +LmNvLnVrCnx8dGliZXRzb2NpZXR5LmNvbQp8fHRpYmV0c3VuLmNvbQp8fHRpYmV0 +c3VwcG9ydGdyb3VwLm9yZwp8fHRpYmV0c3dpc3MuY2gKfHx0aWJldHRlbGVncmFw +aC5jb20KfHx0aWJldHRpbWVzLm5ldAp8fHRpYmV0dHJ1dGguY29tCnx8dGliZXR3 +cml0ZXMub3JnCi50aWNrZXQuY29tLnR3Ci50aWdlcnZwbi5jb20KfHx0aWdlcnZw +bi5jb20KLnRpbWRpci5jb20KfGh0dHA6Ly90aW1kaXIuY29tCi50aW1lLmNvbQp8 +aHR0cDovL3RpbWUuY29tCiEtLS50aW1lLmNvbS90aW1lL3RpbWUxMDAvbGVhZGVy +cy9wcm9maWxlL3JlYmVsCiEtLS50aW1lLmNvbS90aW1lL3NwZWNpYWxzL3BhY2th +Z2VzL2FydGljbGUvMCwyODgwNAohLS0udGltZS5jb20vdGltZS9tYWdhemluZQp8 +fHRpbWVzbm93bmV3cy5jb20KLnRpbXNhaC5jb20KfHx0aW10YWxlcy5jb20KfHxi +bG9nLnRpbmV5LmNvbQp8fHRpbmd0YWxrLm1lCi50aW55LmNjCnx8dGlueS5jYwp8 +fHRpbnljaGF0LmNvbQp8fHRpbnlwYXN0ZS5jb20KfHx0aXBhcy5uZXQKLnRpc3Rv +cnkuY29tCnx8dGtjcy1jb2xsaW5zLmNvbQoudG1hZ2F6aW5lLmNvbQp8fHRtYWdh +emluZS5jb20KfGh0dHA6Ly90bWkubWUKLnRtcHAub3JnCnxodHRwOi8vdG1wcC5v +cmcKLnRuYWZsaXguY29tCnx8dG5hZmxpeC5jb20KLnRucC5vcmcKfGh0dHA6Ly90 +bnAub3JnCi50by1wb3Juby5jb20KfHx0by1wb3Juby5jb20KfHx0b2dldHRlci5j +b20KLnRva3lvLTI0Ny5jb20KLnRva3lvLWhvdC5jb20KfHx0b2t5by1wb3JuLXR1 +YmUuY29tCnx8dG9reW9jbi5jb20KdHcudG9tb25ld3MubmV0Ci50b25naWwub3Iu +a3IKdG9ueXlhbi5uZXQKdG9vbmVsLm5ldAp0b3A4MS53cwoudG9wbmV3cy5pbgou +dG9wcG9ybnNpdGVzLmNvbQp8aHR0cDovL3RvcHBvcm5zaXRlcy5jb20KfHx0b3B0 +b29uLm5ldAoudG9yZ3VhcmQubmV0Cnx8dG9yZ3VhcmQubmV0Cnx8dG9wLnR2Ci50 +b3BzaGFyZXdhcmUuY29tCi50b3BzeS5jb20KfHx0b3BzeS5jb20KfHx0b3B0aXAu +Y2EKdG9yYS50bwoudG9yY24uY29tCnx8dG9ybG9jay5jb20KLnRvcnByb2plY3Qu +b3JnCnx8dG9ycHJvamVjdC5vcmcKfHx0b3JyZW50a2l0dHkudHYKdG9ycmVudHBy +aXZhY3kuY29tCnx8dG9ycmVudHByaXZhY3kuY29tCnxodHRwOi8vdG9ycmVudHBy +b2plY3Quc2UKfHx0b3JyZW50eS5vcmcKfHx0b3J0b2lzZXN2bi5uZXQKfHx0b3J2 +cG4uY29tCnx8dG90YWx2cG4uY29tCi50b3V0aWFvYWJjLmNvbQp0b3duZ2Fpbi5j +b20KdG95cGFyay5pbgp0b3l0cmFjdG9yc2hvdy5jb20KLnRwYXJlbnRzLm9yZwou +dHBpLm9yZy50dwp8fHRwaS5vcmcudHcKfHx0cmFkaW5ndmlldy5jb20KfHx0cmFu +c3BhcmVuY3kub3JnCnx8dHJlZW1hbGwuY29tLnR3CnRyZW5kc21hcC5jb20KfHx0 +cmVuZHNtYXAuY29tCi50cmltb25kaS5kZS9TRExFCi50cm91dy5ubAp8fHRyb3V3 +Lm5sCi50cnQubmV0LnRyCnx8dHJ0Lm5ldC50cgp0cnRjLmNvbS50dwoudHJ1ZWJ1 +ZGRoYS1tZC5vcmcKfHx0cnVlYnVkZGhhLW1kLm9yZwp0cnVseWVyZ29ub21pYy5j +b20KfHx0cnV0aHNvY2lhbC5jb20KLnRydXZlby5jb20KLnRzY3R2Lm5ldAoudHNl +bXR1bGt1LmNvbQp0c3F1YXJlLnR2Ci50c3Uub3JnLnR3CnRzdW5hZ2FydW1vbi5j +b20KIS0tfGh0dHA6Ly93d3cudHN1cnUtYmlyZC5uZXQvCnx8dHQxMDY5LmNvbQou +dHR0YW4uY29tCnx8dHR0YW4uY29tCnx8dHR2LmNvbS50dwp0dTg5NjQuY29tCi50 +dWJhaG9saWMuY29tCi50dWJlLmNvbQp0dWJlOC5jb20KfHx0dWJlOC5jb20KLnR1 +YmU5MTEuY29tCnx8dHViZTkxMS5jb20KLnR1YmVjdXAuY29tCi50dWJlZ2Fscy5j +b20KLnR1YmVpc2xhbS5jb20KfGh0dHA6Ly90dWJlaXNsYW0uY29tCi50dWJlc3Rh +Y2suY29tCnx8dHViZXdvbGYuY29tCi50dWliZWl0dS5uZXQKLnR1aWRhbmcub3Jn +Cnx8dHVpZGFuZy5vcmcKLnR1aWRhbmcuc2UKLnR1bXV0YW56aS5jb20KfGh0dHA6 +Ly90dW11dGFuemkuY29tCnx8dHVtdmlldy5jb20KLnR1bmVpbi5jb20KfGh0dHA6 +Ly90dW5laW4uY29tCnx8dHVubmVsYmVhci5jb20KfHx0dW5uZWxibGljay5uZXQK +LnR1bm5lbHIuY29tCnx8dHVubmVsci5jb20KfHx0dW5zYWZlLmNvbQp0dWl0d2l0 +LmNvbQoudHVyYW5zYW0ub3JnCi50dXJib2JpdC5uZXQKfHx0dXJib2JpdC5uZXQK +LnR1cmJvaGlkZS5jb20KfHx0dXJib2hpZGUuY29tCnx8dHVya2lzdGFudGltZXMu +Y29tCi50dXNoeWNhc2guY29tCnxodHRwOi8vdHVzaHljYXNoLmNvbQoudHV2cG4u +Y29tCnx8dHV2cG4uY29tCnxodHRwOi8vdHV6YWlqaWRpLmNvbQp8aHR0cDovLyou +dHV6YWlqaWRpLmNvbQoudHcwMS5vcmcKfGh0dHA6Ly90dzAxLm9yZwp8fHVzZS50 +eXBla2l0Lm5ldAoKIS0tLVR1bWJsci0tLQoudHVtYmxyLmNvbQp8fHR1bWJsci5j +b20KIS0tQEB8fGFzc2V0cy50dW1ibHIuY29tCiEtLUBAfHxkYXRhLnR1bWJsci5j +b20KIS0tQEB8fG1lZGlhLnR1bWJsci5jb20KIS0tQEB8fHN0YXRpYy50dW1ibHIu +Y29tCiEtLUBAfHx3d3cudHVtYmxyLmNvbQp8fGxlY2xvdWQubmV0Cnx8c2x1dG1v +b25iZWFtLmNvbQp8aHR0cDovL2Jsb2cuc295bGVudC5jb20KCi50di5jb20KfGh0 +dHA6Ly90di5jb20KdHZhbnRzLmNvbQp8fGZvcnVtLnR2Yi5jb20KfHxpbmV3cy1h +cGkudHZiLmNvbQpuZXdzLnR2YnMuY29tLnR3Ci50dmJveG5vdy5jb20KfHx0dmJv +eG5vdy5jb20KdHZpZGVyLmNvbQoudHZtb3N0LmNvbS5oawoudHZwbGF5dmlkZW9z +LmNvbQp8fHR2dW5ldHdvcmtzLmNvbQoudHctYmxvZy5jb20KfGh0dHBzOi8vdHct +YmxvZy5jb20KLnR3LW5wby5vcmcKLnR3YWl0dGVyLmNvbQp0d2FwcGVya2VlcGVy +LmNvbQp8fHR3YXBwZXJrZWVwZXIuY29tCnx8dHdhdWQuaW8KLnR3YXVkLmlvCi50 +d2F2aS5jb20KdHdiYnMub3JnCnx8dHdibG9nZ2VyLmNvbQp0d2VlcG1hZy5jb20K +LnR3ZWVwbWwub3JnCnx8dHdlZXBtbC5vcmcKLnR3ZWV0YmFja3VwLmNvbQp8fHR3 +ZWV0YmFja3VwLmNvbQp0d2VldGJvYXJkLmNvbQp8fHR3ZWV0Ym9hcmQuY29tCi50 +d2VldGNzLmNvbQp8aHR0cDovL3R3ZWV0Y3MuY29tCnxodHRwOi8vZGVjay5seQoh +LS0gT3BlcmF0aW9uIGRpc2NvbnRpbnVlZAohLS18fHR3ZWV0ZS5uZXQKIS0tbS50 +d2VldGUubmV0Cnx8dHdlZXRlZHRpbWVzLmNvbQohLS0gT3BlcmF0aW9uIGRpc2Nv +bnRpbnVlZAohLS10d2VldG1lbWUuY29tCnR3ZWV0cGhvdG8uY29tCnx8dHdlZXRw +aG90by5jb20KdHdlZXRyZWUuY29tCnx8dHdlZXRyZWUuY29tCi50d2VldHR1bm5l +bC5jb20KfHx0d2VldHR1bm5lbC5jb20KfHx0d2VldHdhbGx5LmNvbQp0d2VldHlt +YWlsLmNvbQp8fHR3ZWx2ZS50b2RheQoudHdlZXoubmV0CnxodHRwOi8vdHdlZXou +bmV0Cnx8dHdmdHAub3JnCnx8dHdncmVhdGRhaWx5LmNvbQp0d2liYXNlLmNvbQou +dHdpYmJsZS5kZQp8fHR3aWJibGUuZGUKdHdpYmJvbi5jb20KfHx0d2licy5jb20K +LnR3aWNvdW50cnkub3JnCnxodHRwOi8vdHdpY291bnRyeS5vcmcKdHdpY3N5LmNv +bQoudHdpZW5kcy5jb20KfGh0dHA6Ly90d2llbmRzLmNvbQoudHdpZmFuLmNvbQp8 +aHR0cDovL3R3aWZhbi5jb20KdHdpZmZvLmNvbQp8fHR3aWZmby5jb20KLnR3aWxp +Z2h0c2V4LmNvbQp0d2lsb2cub3JnCnR3aW1ib3cuY29tCnR3aXBwbGUuanAKfHx0 +d2lwcGxlLmpwCnx8dHdpcC5tZQp0d2lzaG9ydC5jb20KfHx0d2lzaG9ydC5jb20K +fHx0d2lzdGVyLm5ldC5jbwp0d2lzdGVybm93LmNvbQp0d2lzdG9yeS5uZXQKfHx0 +d2lnZ2l0Lm9yZwp0d2l0Z29vLmNvbQp0d2l0aXEuY29tCnx8dHdpdGlxLmNvbQou +dHdpdGxvbmdlci5jb20KfHx0d2l0bG9uZ2VyLmNvbQp8aHR0cDovL3RsLmdkLwp0 +d2l0bWFuaWEuY29tCnR3aXRvYXN0ZXIuY29tCnx8dHdpdG9hc3Rlci5jb20KfHx0 +d2l0b25tc24uY29tCiEtLVNhbWUgSVAKLnR3aXRzdGF0LmNvbQp8fHR3aXRzdGF0 +LmNvbQp8fHR3ZWVwZ3VpZGUuY29tCnxodHRwOi8vdHd0LnRsCnR3aXR0Ym90Lm5l +dAp8fGFkcy10d2l0dGVyLmNvbQp8fHR3dHRyLmNvbQp8fHR3aXR0ZXI0ai5vcmcK +LnR3aXR0ZXJjb3VudGVyLmNvbQp8fHR3aXR0ZXJjb3VudGVyLmNvbQp0d2l0dGVy +ZmVlZC5jb20KLnR3aXR0ZXJnYWRnZXQuY29tCnx8dHdpdHRlcmdhZGdldC5jb20K +LnR3aXR0ZXJrci5jb20KfHx0d2l0dGVya3IuY29tCnx8dHdpdHRlcm1haWwuY29t +Cnx8dHdpdHRlcnJpZmljLmNvbQp0d2l0dGVydGltLmVzCnx8dHdpdHRlcnRpbS5l +cwp0d2l0dGhhdC5jb20KfHx0d2l0dHVyay5jb20KLnR3aXR0dXJseS5jb20KfHx0 +d2l0dHVybHkuY29tCi50d2l0emFwLmNvbQp0d2l5aWEuY29tCi50d3Rrci5jb20K +fGh0dHA6Ly90d3Rrci5jb20KLnR3bm9ydGgub3JnLnR3Cnx8dHdyZXBvcnRlci5v +cmcKdHdza3lwZS5jb20KdHd0cmxhbmQuY29tCnR3dXJsLm5sCi50eHh4LmNvbQou +dHljb29sLmNvbQp8fHR5Y29vbC5jb20KCiEtLXR5cGVwYWQKfHx0eXBlcGFkLmNv +bQpAQHx8d3d3LnR5cGVwYWQuY29tCkBAfHxzdGF0aWMudHlwZXBhZC5jb20KfHxi +bG9nLmV4cG9mdXR1cmVzLmNvbQp8fGNvbnRlc3RzLnR3aWxpby5jb20KIS1sYXdw +cm9mZXNzb3JzLnR5cGVwYWQuY29tL2NoaW5hX2xhd19wcm9mCnx8dHlwb3JhLmlv +CgohLS0tLS0tLS0tLS0tLS0tLS0tLS1VVS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0KfHx1ZG9tYWluLmhrCnx8dXBiaXQuY29tCnx8ZGVtby51bmxvY2stbXVzaWMu +ZGV2Ci51OXVuLmNvbQp8fHU5dW4uY29tCi51YmRkbnMub3JnCnxodHRwOi8vdWJk +ZG5zLm9yZwp8fHViZXJwcm94eS5uZXQKLnVjLWphcGFuLm9yZwp8fHVjLWphcGFu +Lm9yZwouc3JjZi51Y2FtLm9yZy9zYWxvbi8KfGh0dHA6Ly9jaGluYS51Y2FuZXdz +LmNvbS8KfGh0dHA6Ly9odW0qLnVjaGljYWdvLmVkdS9mYWN1bHR5L3l3YW5nL2hp +c3RvcnkKfHx1ZGVyem8uaXQKLnVkbi5jb20KfHx1ZG4uY29tCnx8dWRuLmNvbS50 +dwp1ZG5ia2suY29tL2Jicwp8fHVmb3JhZGlvLmNvbS50dwp1ZnJlZXZwbi5jb20K +LnVnby5jb20KIS0tZ2hzCnx8dWhkd2FsbHBhcGVycy5vcmcKfHx1aHJwLm9yZwou +dWlnaHVyLm5sCnx8dWlnaHVyLm5sCnVpZ2h1cmJpei5uZXQKLnVsaWtlLm5ldAp1 +a2NkcC5jby51awp8fHVsdHJhc3VyZi51cwp8fHVsdHJhdnBuLmNvbQp8fHVsdHJh +dnBuLmZyCnVsdHJheHMuY29tCnVtaWNoLmVkdS9+ZmFsdW4KfHx1bmJsb2NrLmNu +LmNvbQoudW5ibG9ja2VyLnl0CnVuYmxvY2stdXMuY29tCnx8dW5ibG9jay11cy5j +b20KLnVuYmxvY2tkbW0uY29tCnxodHRwOi8vdW5ibG9ja2RtbS5jb20KfHx1bmJs +b2Nrc2l0LmVzCnVuY3ljbG9tZWRpYS5vcmcKLnVuY3ljbG9wZWRpYS5oay93aWtp +CnxodHRwOi8vdW5jeWNsb3BlZGlhLmhrCiEtLXVuY3ljbG9wZWRpYS5pbmZvCnxo +dHRwOi8vdW5jeWNsb3BlZGlhLnR3CnVuZGVyd29vZGFtbW8uY29tCnx8dW5kZXJ3 +b29kYW1tby5jb20KfHx1bmhvbHlrbmlnaHQuY29tCi51bmkuY2MKfHxjbGRyLnVu +aWNvZGUub3JnCi51bmlmaWNhdGlvbi5uZXQKLnVuaWZpY2F0aW9uLm9yZy50dwp8 +fHVuaXJ1bGUuY2xvdWQKLnVuaXgxMDAuY29tCnx8dW5rbm93bnNwYWNlLm9yZwou +dW5vZGVkb3MuY29tCnVucG8ub3JnCnx8dW5zdGFibGUuaWN1Cnx8dW53aXJlLmhr +Cnx8dW9jbi5vcmcKdG9yLnVwZGF0ZXN0YXIuY29tCnx8dXBnaHNiYy5jb20KLnVw +aG9sZGp1c3RpY2Uub3JnCnVwbG9hZGVkLm5ldC9maWxlCnxodHRwOi8vdXBsb2Fk +ZWQubmV0L2ZpbGUKfGh0dHA6Ly91cGxvYWRlZC50by9maWxlCi51cGxvYWRzdGF0 +aW9uLmNvbS9maWxlCi51cG1lZGlhLm1nCnx8dXBtZWRpYS5tZwoudXBvcm5pYS5j +b20KfGh0dHA6Ly91cG9ybmlhLmNvbQp8fHVwcm94eS5vcmcKfHx1cHRvZG93bi5j +b20KLnVwd2lsbC5vcmcKdXI3cy5jb20KfHx1cmJhbmRpY3Rpb25hcnkuY29tCnx8 +dXJiYW5zdXJ2aXZhbC5jb20KbXlzaGFyZS51cmwuY29tLnR3Lwp8fHVybGJvcmcu +Y29tCnx8dXJscGFyc2VyLmNvbQp1cy50bwp8fHVzYWNuLmNvbQoudXNhaXAuZXUK +fHx1c2FpcC5ldQp8fHVzY25wbS5vcmcKfHx1c2NhcmRmb3J1bS5jb20KfHx1c21h +LmVkdQoudXNvY2N0bi5jb20KfHx1c3RpYmV0Y29tbWl0dGVlLm9yZwoudXN0cmVh +bS50dgp8fHVzdHJlYW0udHYKdXN1cy5jYwoudXRvcGlhbnBhbC5jb20KfHx1dG9w +aWFucGFsLmNvbQp8fHV1amlhc3UuY29tCi51dnd4eXoueHl6Cnx8dXZ3eHl6Lnh5 +egoudXdhbnRzLmNvbQp8fHV3YW50cy5jb20KLnV3YW50cy5uZXQKdXlnaHVyLmNv +LnVrCnx8dXlnaHVyLWoub3JnCnx8dXlnaHVyYWEub3JnCnx8dXlnaHVyYW1lcmlj +YW4ub3JnCnx8dXlnaHVyYml6Lm9yZwp8fHV5Z2h1cmNvbmdyZXNzLm9yZwp8fHV5 +Z2h1cnBlbi5vcmcKfHx1eWdodXJzdHVkaWVzLm9yZwp8fHV5Z2h1cnRyaWJ1bmFs +LmNvbQp1eWd1ci5vcmcKfGh0dHA6Ly91eW1hYXJpcC5jb20vCgohLS0tLS0tLS0t +LS0tLS0tLS0tLS1WVi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHx2aWxhbmV0 +Lm1lCnx8dmV3YXMubmV0Cnx8djIuaGVscAp8fHZvY2Fyb28uY29tCnx8dmVybi5j +Ywp8fHYyZmx5Lm9yZwoudjJyYXkuY29tCnx8djJyYXkuY29tCnx8djJyYXljbi5j +b20KfHx2YWxldXJzYWN0dWVsbGVzLmNvbQoudmFuMDAxLmNvbQoudmFuNjk4LmNv +bQoudmFuZW11LmNuCi52YW5pbGxhLWpwLmNvbQoudmFucGVvcGxlLmNvbQp8fHZh +bnNreS5jb20KfHx2YXRpY2FubmV3cy52YQp8fHZjZi1vbmxpbmUub3JnCnx8dmNm +YnVpbGRlci5vcmcKLnZlZ2FzcmVkLmNvbQoudmVsa2FlcG9jaGEuc2sKLnZlbmJi +cy5jb20KLnZlbmNoaW5hLmNvbQoudmVuZXRpYW5tYWNhby5jb20KfHx2ZW5ldGlh +bm1hY2FvLmNvbQp2ZW9oLmNvbQp8fHZlcmNlbC5hcHAKbXlzaXRlLnZlcml6b24u +bmV0CnZlcm1vbnR0aWJldC5vcmcKfHx2ZXJ5YnMuY29tCi52ZnQuY29tLnR3Ci52 +aWJlci5jb20KfHx2aWJlci5jb20KLnZpY2EuaW5mbwoudmljdGltc29mY29tbXVu +aXNtLm9yZwp8fHZpY3RpbXNvZmNvbW11bmlzbS5vcmcKfHx2aWQubWUKfHx2aWRi +bGUuY29tCnZpZGVvYmFtLmNvbQp8fHZpZGVvYmFtLmNvbQoudmlkZW9kZXRlY3Rp +dmUuY29tCi52aWRlb21lZ2EudHYKfHx2aWRlb21lZ2EudHYKLnZpZGVvbW8uY29t +CnZpZGVvcGVkaWF3b3JsZC5jb20KLnZpZGVvcHJlc3MuY29tCi52aWRpbmZvLm9y +Zy92aWRlbwp2aWV0ZGFpa3luZ3V5ZW4uY29tCi52aWpheWF0ZW1wbGUub3JnCnx8 +dmlsYXZwbi5jb20KdmltZW8uY29tCnx8dmltZW8uY29tCnx8dmltcGVyYXRvci5v +cmcKfHx2aW5jbmQuY29tCnx8dmlubmlldi5jb20KfGh0dHA6Ly93d3cubGliLnZp +cmdpbmlhLmVkdS9hcmVhLXN0dWRpZXMvVGliZXQvdGliZXQuaHRtbAoudmlydHVh +bHJlYWxwb3JuLmNvbQp8fHZpcnR1YWxyZWFscG9ybi5jb20KdmlzaWJsZXR3ZWV0 +cy5jb20KfHx2aXUuY29tCi52aXZhaGVudGFpNHUubmV0CgohLS1hcGV4IG5vdCBi +bG9ja2VkLCBhZGRpbmcgdG8gcmVkdWNlIGNvbXBsZXhpdHkKfHx2aXZhbGRpLmNv +bQoKLnZpdmF0dWJlLmNvbQoudml2dGhvbWFzLmNvbQp8fHZpdnRob21hcy5jb20K +LnZqYXYuY29tCnx8dmphdi5jb20KLnZqbWVkaWEuY29tLmhrCi52bGxjcy5vcmcK +fGh0dHA6Ly92bGxjcy5vcmcKfHx2bWl4Y29yZS5jb20KfHx2bmV0LmxpbmsKLnZv +Y2F0aXYuY29tCnZvY24udHYKfHx2b2N1cy5jYwp8fHZvaWNldHRhbmsub3JnCi52 +b3Qub3JnCnx8dm90Lm9yZwoudm92bzIwMDAuY29tCnxodHRwOi8vdm92bzIwMDAu +Y29tCi52b3hlci5jb20KfHx2b3hlci5jb20KLnZveS5jb20KfHx2cG4uYWMKfHx2 +cG4ubmV0Ci52cG40YWxsLmNvbQp8fHZwbjRhbGwuY29tCi52cG5hY2NvdW50Lm9y +Zwp8aHR0cDovL3ZwbmFjY291bnQub3JnCi52cG5hY2NvdW50cy5jb20KfHx2cG5h +Y2NvdW50cy5jb20KLnZwbmNvbXBhcmlzb24ub3JnCi52cG5jdXAuY29tCnx8dnBu +Y3VwLmNvbQp2cG5ib29rLmNvbQoudnBuY291cG9ucy5jb20KfGh0dHA6Ly92cG5j +b3Vwb25zLmNvbQoudnBuZGFkYS5jb20KfHx2cG5kYWRhLmNvbQoudnBuZmFuLmNv +bQp2cG5maXJlLmNvbQoudnBuZm9yZ2FtZS5uZXQKfHx2cG5mb3JnYW1lLm5ldAp8 +fHZwbmdhdGUuanAKLnZwbmdhdGUubmV0Cnx8dnBuZ2F0ZS5uZXQKLnZwbmdyYXRp +cy5uZXQKdnBuaHEuY29tCnx8dnBuaHViLmNvbQoudnBubWFzdGVyLmNvbQp8fHZw +bm1hc3Rlci5jb20KLnZwbm1lbnRvci5jb20KfHx2cG5tZW50b3IuY29tCi52cG5p +bmphLm5ldAp8fHZwbmluamEubmV0Ci52cG5pbnRvdWNoLmNvbQp2cG5qYWNrLmNv +bQp8fHZwbmphY2suY29tCi52cG5waWNrLmNvbQp8fHZwbnBpY2suY29tCnx8dnBu +cG9wLmNvbQp8fHZwbnByb25ldC5jb20KfHx2cG5wcm94eW1hc3Rlci5jb20KLnZw +bnJlYWN0b3IuY29tCnx8dnBucmVhY3Rvci5jb20KfHx2cG5yZXZpZXd6LmNvbQou +dnBuc2VjdXJlLm1lCnx8dnBuc2VjdXJlLm1lCi52cG5zaGF6YW0uY29tCnx8dnBu +c2hhemFtLmNvbQoudnBuc2hpZWxkYXBwLmNvbQp8fHZwbnNoaWVsZGFwcC5jb20K +LnZwbnNwLmNvbQoudnBudHJhZmZpYy5jb20KLnZwbnR1bm5lbC5jb20KfHx2cG50 +dW5uZWwuY29tCi52cG51ay5pbmZvCnx8dnBudWsuaW5mbwp8fHZwbnVubGltaXRl +ZGFwcC5jb20KLnZwbnZpcC5jb20KfHx2cG52aXAuY29tCi52cG53b3JsZHdpZGUu +Y29tCi52cG9ybi5jb20KfHx2cG9ybi5jb20KLnZwc2VyLm5ldApAQHx8dnBzZXIu +bmV0CnZyYWllc2FnZXNzZS5uZXQKfHx2cmNoYXQuY29tCi52cm10ci5jb20KfHx2 +cnBvcm4uY29tCnx8dnR1bm5lbC5jb20KfHx2dWt1LmNjCgohLS0tLS0tLS0tLS0t +LS0tLS0tLS1XVy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KfHx3eHcubW9lCnx8 +d3h3LmNhdAp8fHdhbGxldGNvbm5lY3QuY29tCnxodHRwczovL3czcy5saW5rL2lw +ZnMKfHx3b3JrMmljdS5vcmcKfHx3aWtpbGVzcy5mdW5hbWkudGVjaApsaXN0cy53 +My5vcmcvYXJjaGl2ZXMvcHVibGljCnx8d2FmZmxlMTk5OS5jb20KLndhaGFzLmNv +bQp3YWlrZXVuZy5vcmcvcGhwX3dpbmQKfHx3YWluYW8ubWUKfHx3YWxsbWFtYS5j +b20KfHx3YWxscGFwZXJjYXNhLmNvbQoud2FsbHByb3h5LmNvbQpAQHx8d2FsbHBy +b3h5LmNvbS5jbgp8fHdhbGxzdHR2LmNvbQp8fHdhbHRlcm1hcnRpbi5jb20KfHx3 +YWx0ZXJtYXJ0aW4ub3JnCnx8d3d3Lndhbi1wcmVzcy5vcmcKfHx3YW5kZXJpbmdo +b3JzZS5uZXQKfHx3YW5nYWZ1Lm5ldAp8fHdhbmdqaW5iby5vcmcKLndhbmdqaW5i +by5vcmcKd2FuZ2xpeGlvbmcuY29tCi53YW5nby5vcmcKfHx3YW5nby5vcmcKd2Fu +Z3J1b3NodWkubmV0Cnx8d2FudC1kYWlseS5jb20Kd2FwZWRpYS5tb2JpL3poc2lt +cAp8fHdhcnJvb20ub3JnCnx8d2FzZWxwcm8uY29tCnx8d2F0Y2hpbmVzZS5jb20K +fHx3YXRjaG91dC50dwoud2F0dHBhZC5jb20KfHx3YXR0cGFkLmNvbQoud2F0Y2g4 +eC5jb20KfHx3YXRjaG15Z2YubmV0Cnx8d2F2LnR2Cnx8d2F5YmlnLmNvbQp8fHdk +LmJpYmxlCi53ZGY1LmNvbQp8fHdlYWx0aC5jb20udHcKLndlYXJlaGFpcnkuY29t +Ci53ZWFybi5jb20KfHx3ZWFybi5jb20KfGh0dHA6Ly9oa2NvYy53ZWF0aGVyLmNv +bS5oawp8fGh1ZGF0b3JpcS53ZWIuaWQKfHx3ZWIycHJvamVjdC5uZXQKd2ViYmFu +Zy5uZXQKLndlYmV2YWRlci5vcmcKLndlYmZyZWVyLmNvbQp3ZWJsYWd1LmNvbQou +d2ViamIub3JnCi53ZWJydXNoLm5ldAp3ZWJzLXR2Lm5ldAoud2Vic2l0ZXB1bHNl +LmNvbS9oZWxwL3Rlc3R0b29scy5jaGluYS10ZXN0CnxodHRwOi8vd3d3LndlYnNu +YXByLmNvbQoud2Vid2FycGVyLm5ldAp8aHR0cDovL3dlYndhcnBlci5uZXQKd2Vi +d29ya2VyZGFpbHkuY29tCnx8d2VjaGF0bGF3c3VpdC5jb20KfHx3ZWZpZ2h0Y2Vu +c29yc2hpcC5vcmcKLndlZm9uZy5jb20Kd2VpYm9sZWFrLmNvbQoud2VpaHVvLm9y +Zwp8fHdlaWppbmdzaGVuZy5vcmcKLndlaW1pbmcuaW5mbwp8fHdlaW1pbmcuaW5m +bwp3ZWlxdWFud2FuZy5vcmcKfGh0dHA6Ly93ZWlzdW8ud3MKLndlbG92ZWNvY2su +Y29tCnx8d2VsdC5kZQoud2VtaWdyYXRlLm9yZwp8aHR0cDovL3dlbWlncmF0ZS5v +cmcKd2VuZ2V3YW5nLmNvbQp8fHdlbmdld2FuZy5vcmcKLndlbnh1ZWNpdHkuY29t +Cnx8d2VueHVlY2l0eS5jb20KLndlbnl1bmNoYW8uY29tCnx8d2VueXVuY2hhby5j +b20KLndlc3RjYS5jb20KfHx3ZXN0Y2EuY29tCnx8d2VzdGVybndvbHZlcy5jb20K +Lndlc3RraXQubmV0Cnx8d2VzdHBvaW50LmVkdQoud2VzdGVybnNodWdkZW5zb2Np +ZXR5Lm9yZwp3ZXRwdXNzeWdhbWVzLmNvbQoud2V0cGxhY2UuY29tCnx8d2V6b25l +Lm5ldAoud2ZvcnVtLmNvbQp8fHdmb3J1bS5jb20vCi53aGF0YmxvY2tlZC5jb20K +fHx3aGF0YmxvY2tlZC5jb20KfHx3aGVlbG9ja3NsYXRpbi5jb20KLndoaXBwZWRh +c3MuY29tCiEtLXxodHRwOi8vd2hvLmlzLwoud2hvZXIubmV0Cnx8d2hvZXIubmV0 +Cndob3RhbGtpbmcuY29tCndoeWxvdmVyLmNvbQp8fHdoeXgub3JnCnx8d2lraWxl +YWtzLmNoCnx8d2lraWxlYWtzLmNvbQp8fHdpa2lsZWFrcy5kZQp8fHdpa2lsZWFr +cy5ldQp8fHdpa2lsZWFrcy5sdQoud2lraWxlYWtzLm9yZwp8fHdpa2lsZWFrcy5v +cmcKfHx3aWtpbGVha3MucGwKLndpa2lsZWFrcy1mb3J1bS5jb20KfHx3aWxzb25j +ZW50ZXIub3JnCi53aWxsaWFtaGlsbC5jb20KfHxjb2xsYXRlcmFsbXVyZGVyLmNv +bQp8fGNvbGxhdGVyYWxtdXJkZXIub3JnCndpa2lsaXZyZXMuaW5mby93aWtpLyVF +OSU5QiVCNiVFNSU4NSVBQiVFNSVBRSVBQSVFNyVBQiVBMAp8fHdpa2ltYXBpYS5v +cmcKLndpa2l3YW5kLmNvbQp8fHdpa2l3YW5kLmNvbQp8fGNhc2luby53aWxsaWFt +aGlsbC5jb20KfHxzcG9ydHMud2lsbGlhbWhpbGwuY29tCnx8dmVnYXMud2lsbGlh +bWhpbGwuY29tCnx8d2lsbHcubmV0Ci53aW5kc2NyaWJlLmNvbQp8fHdpbmRzY3Jp +YmUuY29tCnx8d2luZ3kuc2l0ZQoud2lubmluZzExLmNvbQp8fHdpb25ld3MuY29t +Cnx8d2lyZWRieXRlcy5jb20KfHx3aXJlZHBlbi5jb20KfHx3aXJlZ3VhcmQuY29t +CiEtLXx8d2lyZXNoYXJrLm9yZwoud2lzZG9tcHVicy5vcmcKLndpc2V2aWQuY29t +Cnx8d2lzZXZpZC5jb20KfHx3aGlzcGVyc3lzdGVtcy5vcmcKLndpdG5lc3NsZWV0 +ZWFjaGluZy5jb20KfHx3aXRvcGlhLm5ldAoud2piay5vcmcKfHx3amJrLm9yZwp8 +fHdtZmxhYnMub3JnCnx8d24uY29tCnx8d25hY2cuY29tCnx8d25hY2cub3JnCnx8 +d28udGMKfHx3b2VzZXIuY29tCnx8d29rYXIub3JnCnx8d29sZmF4LmNvbQp8fHdv +bWJvLmFpCnx8d29vbHlzcy5jb20KfHx3b29waWUuanAKfHx3b29waWUudHYKfHx3 +b3JrYXRydW5hLmNvbQp8fHdvcmtlcmVtcG93ZXJtZW50Lm9yZwoud29ybGRjYXQu +b3JnCndvcmxkam91cm5hbC5jb20KLndvcmxkdnBuLm5ldAp8fHdvcmxkdnBuLm5l +dAoKfHx2aWRlb3ByZXNzLmNvbQoud29yZHByZXNzLmNvbQp8aHR0cDovLyoud29y +ZHByZXNzLmNvbQp8fGNoZW5zaGFuMjAwNDIwMDUud29yZHByZXNzLmNvbQp8fGNo +aW5hdmlldy53b3JkcHJlc3MuY29tCnx8Y25iYm5ld3Mud29yZHByZXNzLmNvbQp8 +fGZyZWVkb21pbmZvbmV0d2ViLndvcmRwcmVzcy5jb20KfHxoa2E4OTY0LndvcmRw +cmVzcy5jb20KfHxoa2FuZXdzLndvcmRwcmVzcy5jb20KfHxocXNibmV0LndvcmRw +cmVzcy5jb20KfHxocXNib25saW5lLndvcmRwcmVzcy5jb20KfHxpbnZlc3RpZ2F0 +aW5nLndvcmRwcmVzcy5jb20KfHxqb2JuZXdlcmEud29yZHByZXNzLmNvbQp8fG1h +dHRoZXdkZ3JlZW4ud29yZHByZXNzLmNvbQp8fG1pbmdodWl5dy53b3JkcHJlc3Mu +Y29tCnx8d28zdHR0LndvcmRwcmVzcy5jb20KfHxzdWppYXR1bi53b3JkcHJlc3Mu +Y29tCnx8eGlqaWUud29yZHByZXNzLmNvbQp8fGlmcmVlY2hpbmEud29yZHByZXNz +LmNvbQp8fHdwLmNvbQoKIS18fHdvcm1zY3VscHRvci5jb20KLndvdy5jb20KfHx3 +b3dwb3JuLmNvbQp8fHdvd2dpcmxzLmNvbQoud293cmsuY29tCi53b3lhb2xpYW4u +b3JnCnxodHRwOi8vd295YW9saWFuLm9yZwoud3BvZm9ydW0uY29tCnx8d3BvZm9y +dW0uY29tCndyY2hpbmEub3JnCndyZXRjaC5jYwp8fHdyaXRlc29uaWMuY29tCi53 +c2ouY29tCnx8d3NqLmNvbQoud3NqLm5ldAp8fHdzai5uZXQKLnd0Ym4ub3JnCi53 +dGZwZW9wbGUuY29tCnd1ZXJrYWl4aS5jb20KfHx3dWZhZmFuZ3dlbi5jb20KfHx3 +dWZpLm9yZy50dwp3dWppZS5uZXQKd3VqaWVsaXVsYW4uY29tCnx8d3VqaWVsaXVs +YW4uY29tCnx8d3V3LnJlZAoud3dpdHYuY29tCnx8d3dpdHYuY29tCnd6eWJveS5p +bS9wb3N0LzE2MAoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tWFgtLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tCnx8d3d3LnhpY29ucy5vcmcKfHx4LmFpCnx8eHQuY29tCnx8 +eHQucHViCnx8eC5jbwoueC1iZXJyeS5jb20KfHx4LWJlcnJ5LmNvbQp8fHgtYXJ0 +LmNvbQp8fHgtd2FsbC5vcmcKfHx4M2d1aWRlLmNvbQp4YW5nYS5jb20KfHx4YmFi +ZS5jb20KLnhib29rY24uY29tCnx8eGJvb2tjbi5jb20KfHx4Y2FmZS5pbgp8fHhj +aXR5LmpwCi54Y3JpdGljLmNvbQp8fHhlcm90aWNhLmNvbQpkZXN0aW55LnhmaWxl +cy50by91YmJ0aHJlYWRzCnx8eGZ4c3NyLm1lCi54Z215ZC5jb20KfHx4Z215ZC5j +b20KeGhhbXN0ZXIuY29tCnx8eGhhbXN0ZXIuY29tCi54aWFuYmEubmV0Ci54aWFu +amlhbi50dwp8aHR0cDovL3hpYW5qaWFuLnR3Ci54aWFvYmFpd3UuY29tCi54aWFv +Y2h1bmNuanAuY29tCi54aWFvaGV4aWUuY29tCnx8eGlhb2xhbi5tZQp8fHhpYW9t +YS5vcmcKfHx4aWFvaGV4aWUuY29tCnx8eGlheGlhb3FpYW5nLm5ldAp4aWV6aHVh +LmNvbQoueGlodWEuZXMKZm9ydW0ueGluYmFvLmRlL2ZvcnVtCi54aW5nLmNvbQp8 +aHR0cDovL3hpbmcuY29tCnx8eGluamlhbmdwb2xpY2VmaWxlcy5vcmcKLnhpbm1p +YW8uY29tLmhrCnx8eGlubWlhby5jb20uaGsKeGluc2hlbmcubmV0CnhpbnNoaWp1 +ZS5jb20KLnhpb25ncGlhbi5jb20KLnhpdXJlbi5vcmcKeGl6YW5nLXpoaXllLm9y +Zwp4anAuY2MKfHx4anAuY2MKfHx4anRyYXZlbGd1aWRlLmNvbQp8fHhtbC10cmFp +bmluZy1ndWlkZS5jb20KeG1vdmllcy5jb20KfHx4bnh4LmNvbQohLS18fHhueHgt +Y2RuLmNvbQp4cGRvLm5ldAp8fHhwdWQub3JnCi54cmVudGR2ZC5jb20KfHx4dHVi +ZS5jb20KfHx4dWNoYW8ub3JnCnh1Y2hhby5uZXQKfHx4dWNoYW8ubmV0Cnh2aWRl +by5jYwoueHZpZGVvcy5jb20KfHx4dmlkZW9zLmNvbQp8fHh2aWRlb3MtY2RuLmNv +bQp8fHh2aWRlb3MuZXMKfHx4dmJlbGluay5jb20KfHx4dmlubGluay5jb20KfHx4 +c2Rlbi5pbmZvCi54eGJieC5jb20KLnh4bG1vdmllcy5jb20KfHx4eHguY29tCi54 +eHgueHh4CnxodHRwOi8veHh4Lnh4eAoueHh4ZnVja21vbS5jb20KfHx4eHh4LmNv +bS5hdQoueHh4eW1vdmllcy5jb20KfGh0dHA6Ly94eHh5bW92aWVzLmNvbQp4eXMu +b3JnCnh5c2Jsb2dzLm9yZwoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tWVktLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tCnx8eWFuZ3poaS5vcmcKfHxzdG9yYWdlLnlhbmRl +eC5uZXQKfHx5Mm1hdGUuY29tCnx8eWFkaS5zawp8fHlha2J1dHRlcmJsdWVzLmNv +bQp8fHlhbS5jb20KfHx5YW0ub3JnLnR3Cnx8eWFuZGUucmUKfHxkaXNrLnlhbmRl +eC5jb20KfHxkaXNrLnlhbmRleC5ydQoueWFuZ2hlbmdqdW4uY29tCi55YXNuaS5j +by51awp8fHlhc25pLmNvLnVrCnx8eWFzdWt1bmkub3IuanAKLnlheWFiYXkuY29t +L2ZvcnVtCnx8bmV3cy55Y29tYmluYXRvci5jb20KLnlkeS5jb20KLnllYWh0ZWVu +dHViZS5jb20KfHx5ZWFodGVlbnR1YmUuY29tCnx8eWVjbC5uZXQKfHx5ZWVsb3Uu +Y29tCnx8eWVleWkuY29tCnllZ2xlLm5ldAp8fHllZ2xlLm5ldAoueWVzLnh4eAp8 +fHllczEyMy5jb20udHcKfHx5ZXNhc2lhLmNvbQp8fHllc2FzaWEuY29tLmhrCi55 +ZXMtbmV3cy5jb20KfGh0dHA6Ly95ZXMtbmV3cy5jb20KLnllc3Bvcm5wbGVhc2Uu +Y29tCnx8eWVzcG9ybnBsZWFzZS5jb20KfGh0dHA6Ly95ZXllY2x1Yi5jb20KIS0t +eWZyb2cuY29tCnx8eWhjdy5uZXQKLnlpYmFkYS5jb20KfHx5aWJhb2NoaW5hLmNv +bQoueWlkaW8uY29tCnx8eWlkaW8uY29tCnx8eWlnZW5pLmNvbQp5aWx1YmJzLmNv +bQp8fHMueWltZy5jb20KLnlpcHViLmNvbQp8fHlpcHViLmNvbQp5aW5sZWkub3Jn +L210Ci55aXpoaWhvbmd4aW5nLmNvbQp8fHlpemhpaG9uZ3hpbmcuY29tCi55b2J0 +LmNvbQoueW9idC50dgp8fHlvYnQudHYKLnlvZ2ljaGVuLm9yZwp8fHlvZ2ljaGVu +Lm9yZwoueW9sYXNpdGUuY29tCi55b21pdXJpLmNvLmpwCnlvbmcuaHUKLnlvcmti +YnMuY2EKfHx5b3UuY29tCnx8eW91eHUuaW5mbwoueW91aml6ei5jb20KfHx5b3Vq +aXp6LmNvbQoueW91bWFrZXIuY29tCnx8eW91bWFrZXIuY29tCi55b3VuZ3Bvcm52 +aWRlb3MuY29tCnlvdW5nc3BpcmF0aW9uLmhrCi55b3VwYWkub3JnCnx8eW91cGFp +Lm9yZwoueW91ci1mcmVlZG9tLm5ldAp8fHlvdXJlcGVhdC5jb20KLnlvdXNlbmRp +dC5jb20KfHx5b3VzZW5kaXQuY29tCi55b3V0aG5ldHJhZGlvLm9yZy90bWl0L2Zv +cnVtCmJsb2cueW91dGh3YW50LmNvbS50dwptZS55b3V0aHdhbnQuY29tLnR3CnNo +YXJlLnlvdXRod2FudC5jb20udHcKdG9waWMueW91dGh3YW50LmNvbS50dwoueW91 +cG9ybi5jb20KfHx5b3Vwb3JuLmNvbQoueW91cG9ybmdheS5jb20KfHx5b3Vwb3Ju +Z2F5LmNvbQoueW91cmxpc3Rlbi5jb20KfHx5b3VybGlzdGVuLmNvbQoueW91cmx1 +c3QuY29tCnx8eW91cmx1c3QuY29tCnlvdXZlcnNpb24uY29tCnx8eW91dmVyc2lv +bi5jb20KeXRodC5uZXQKeXVhbm1pbmcubmV0Ci55dWFuemhlbmd0YW5nLm9yZwou +eXVsZ2h1bi5jb20KfHx5dWxnaHVuLmNvbQp8fHl1bmNoYW8ubmV0Cnx8eXVub21p +LnRva3lvCi55dXZ1dHUuY29tCnx8eXZlc2dlbGV5bi5jb20KLnl3cHcuY29tL2Zv +cnVtcy9oaXN0b3J5L3Bvc3QvQTAvcDAvaHRtbC8yMjcKeXg1MS5uZXQKLnl5aWku +b3JnCnx8eXlpaS5vcmcKfHx5eWpseW1iLnh5egp8fHl5c3ViLm5ldAoueXp6ay5j +b20KfHx5enprLmNvbQoKIS0tLS0tLS0tLS0tLS0tLS0tLS0tWlotLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tCnx8ei1saWJyYXJ5LnNrCnx8ei1saWIuZm0KfHx6LWxp +Yi5nZAp8fHotbGliLmdsCnx8ei1saWIuZm8KfHx6b2RnYW1lLnh5egp8fHpob25n +emlkaS5jb20KfHx6b29xbGUuY29tCnx8ei1saWIuaW8KfHx6LWxpYi5vcmcKemFj +ZWJvb2suY29tCi56YWxtb3MuY29tCnx8emFsbW9zLmNvbQp8fHphb2Jhby5jb20u +c2cKfHx6ZG5ldC5jb20udHcKLnplbGxvLmNvbQp8fHplbGxvLmNvbQouemVuZ2pp +bnlhbi5vcmcKLnplbm1hdGUuY29tCnx8emVubWF0ZS5jb20KfHx6ZW5tYXRlLmNv +bS5ydQp8fHplcm9oZWRnZS5jb20KfHx6ZXJvbmV0LmlvCiEtLXd3dy56ZnJlZXQu +Y29tL3Bvc3QvdXNlanVtcC1icm93bnMuaHRtbAouemZyZWV0LmNvbQouemhhbmdi +b2xpLm5ldAp8fHpoYW5ndGlhbmxpYW5nLmNvbQp8fHpoYW5sdmUub3JnCnpoZW5n +aHVpLm9yZwouemhlbmdqaWFuLm9yZwp8fHpoZW5namlhbi5vcmcKemhlbmd3dW5l +dC5vcmcKfGh0dHA6Ly96aGVueGlhbmcuYml6Cnpob25nZ3VvLmNhCnxodHRwOi8v +emhvbmdndW9yZW5xdWFuLm9yZwp6aG9uZ2d1b3Rlc2UubmV0Cnx8emhvbmdndW90 +ZXNlLm5ldAouemhvdXNodWd1YW5nLmNvbQouemh1YW54aW5nLmNuCnx8emh1YXRp +ZWJhLmNvbQp6aHVpY2hhZ3Vvamkub3JnCnx8emh1aWNoYWd1b2ppLm9yZwp8fHpp +Lm1lZGlhCnxodHRwOi8vYm9vay56aTUubWUKLnppZGR1LmNvbS9kb3dubG9hZAp8 +fHppbGxpb25rLmNvbQouemluaW8uY29tCnx8emluaW8uY29tCi56aXBvcm4uY29t +Ci56aXBweXNoYXJlLmNvbQpyZWFsZm9ydW0uemtpei5jb20KIS0tfHx6bGliLm5l +dAp8fHptZWRpYS5jb20udHcKfHx6bXcuY24KLnpvZGdhbWUudXMKem9tb2JvLm5l +dAouem9uYWV1cm9wYS5jb20KfHx6b25hZXVyb3BhLmNvbQp8fHpvbmdoZXhpbndl +bi5jb20KfHx6b29ndnBuLmNvbQp8fHpvb3Rvb2wuY29tCi56b296bGUubmV0Cnx8 +em9waGFyLm5ldAp3cml0ZXIuem9oby5jb20KfHx6b3Jyb3Zwbi5jb20KfHx6cG4u +aW0KfHx6c3BlZWRlci5tZQouenNyaGFvLmNvbQouenVvLmxhCnx8enVvLmxhCnx8 +enVvYmlhby5tZQouenVvbGEuY29tCnx8enVvbGEuY29tCnx8enZlcmVmZi5jb20K +fHx6eXhlbC5jb20KLnp6Y2FydG9vbi5jb20KISMjIyMjIyMjIyMjIyMjR2VuZXJh +bCBMaXN0IEVuZCMjIyMjIyMjIyMjIyMjIyMjCgohIyMjIyMjIyMjIyNTdXBwbGVt +ZW50YWwgTGlzdCBTdGFydCMjIyMjIyMjIyMjIyMKISMjIyMjIyMjIyMjIyNTdXBw +bGVtZW50YWwgTGlzdCBFbmQjIyMjIyMjIyMjIyMjCgohIyMjIyMjIyMjIyMjIyMj +I1doaXRlbGlzdCBTdGFydCMjIyMjIyMjIyMjIyMjIyMKQEB8fHd3dy5ldHRvZGF5 +Lm5ldAoKQEB8fGFsaXl1bi5jb20KQEB8fGJhaWR1LmNvbQpAQHx8Y2hpbmFzby5j +b20KQEB8fGNoaW5hei5jb20KQEB8aHR0cDovL25yY2guY3VsdHVyZS50dy8KQEB8 +fGkucGtpLmdvb2cKIS0tLVNvbWUgYXJlIHBvd2VyZWQgYnkgR3VYaWFuZyAoQkdQ +KSwgcGxlYXNlIGNvbW1lbnQgb2ZmIGlmCiEtLS15b3UgZW5jb3VudGVyIGNvbm5l +Y3Rpdml0eSBpc3N1ZXMuCkBAfHxhZHNlcnZpY2UuZ29vZ2xlLmNvbQohLS1JU1Ag +Y2FjaGUgd29ya3Mgc29tZXRpbWVzLCB2ZXJpZmllZCBhdCBkcnBlbmcgKyBnZWh1 +YS4KQEB8fGRsLmdvb2dsZS5jb20KIS0tQEB8fGtoLmdvb2dsZS5jb20KIS0tQEB8 +fGtobS5nb29nbGUuY29tCiEtLUBAfHxraG0wLmdvb2dsZS5jb20KIS0tQEB8fGto +bTEuZ29vZ2xlLmNvbQohLS1AQHx8a2htMi5nb29nbGUuY29tCiEtLUBAfHxraG0z +Lmdvb2dsZS5jb20KIS0tQEB8fGtobWRiLmdvb2dsZS5jb20KQEB8fHRvb2xzLmdv +b2dsZS5jb20KQEB8fGNsaWVudHNlcnZpY2VzLmdvb2dsZWFwaXMuY29tCkBAfHxm +b250cy5nb29nbGVhcGlzLmNvbQohLS1AQHx8a2htLmdvb2dsZWFwaXMuY29tCiEt +LUBAfHxraG0wLmdvb2dsZWFwaXMuY29tCiEtLUBAfHxraG0xLmdvb2dsZWFwaXMu +Y29tCiEtLUBAfHxraG0yLmdvb2dsZWFwaXMuY29tCiEtLUBAfHxraG0zLmdvb2ds +ZWFwaXMuY29tCiEtLUBAfHxraG1kYi5nb29nbGVhcGlzLmNvbQpAQHx8dXBkYXRl +Lmdvb2dsZWFwaXMuY29tCkBAfHxzYWZlYnJvd3NpbmcuZ29vZ2xlYXBpcy5jb20K +QEB8fGNvbm5lY3Rpdml0eWNoZWNrLmdzdGF0aWMuY29tCkBAfHxjc2kuZ3N0YXRp +Yy5jb20KQEB8fGZvbnRzLmdzdGF0aWMuY29tCkBAfHxzc2wuZ3N0YXRpYy5jb20K +QEB8fGhhb3NvdS5jb20KQEB8fGlwLmNuCkBAfHxqaWtlLmNvbQpAQHx8dHJhbnNs +YXRlLmdvb2dsZS5jbgpAQHxodHRwOi8vd3d3Lmdvb2dsZS5jbi9tYXBzCkBAfHxo +dHRwMi5nb2xhbmcub3JnCkBAfHxnb3YuY24KQEB8fG9jc3AucGtpLmdvb2cKQEB8 +fHFxLmNvbQpAQHx8c2luYS5jbgpAQHx8c2luYS5jb20uY24KQEB8fHNvZ291LmNv +bQpAQHx8c28uY29tCkBAfHxzb3NvLmNvbQpAQHx8dWx1YWkuY29tLmNuCkBAfHx3 +ZWliby5jb20KQEB8fHlhaG9vLmNuCkBAfHx5b3VkYW8uY29tCkBAfHx6aG9uZ3Nv +dS5jb20KQEB8aHR0cDovL2ltZS5iYWlkdS5qcAohIyMjIyMjIyMjIyMjIyMjI1do +aXRlbGlzdCBFbmQjIyMjIyMjIyMjIyMjIyMjIyMKIS0tLS0tLS0tLS0tLS0tLS0t +LS0tLUVPRi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== diff --git a/data/gfwlist.txt b/data/gfwlist.txt new file mode 100644 index 0000000..0023aa8 --- /dev/null +++ b/data/gfwlist.txt @@ -0,0 +1,7552 @@ +[AutoProxy 0.2.9] +! Checksum: AX5stTgpvx842DA6LdtKAw +! Expires: 6h +! Title: GFWList4LL +! GFWList with EVERYTHING included +! Last Modified: Sat, 13 Sep 2025 04:13:45 +0000 +! +! HomePage: https://github.com/gfwlist/gfwlist +! License: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt +! +! GFWList is unlikely to fully comprise the real +! rules being deployed inside GFW system. We try +! our best to keep the list up to date. Please +! contact us regarding URL submission / removal, +! or suggestion / enhancement at issue tracker: +! https://github.com/gfwlist/gfwlist/issues/. + +!---------403/451/503/520 & URL Redirects--------- +||blogjav.net +||zoominfo.com +||ptwxz.com +||miuipolska.pl +||piaotia.com +||wunderground.com +||500px.com +||500px.org +!--ehentai +|http://85.17.73.31/ +!--||adorama.com +||afreecatv.com +||agnesb.fr +||airitilibrary.com +||abematv.akamaized.net +||linear-abematv.akamaized.net +||vod-abematv.akamaized.net +||akiba-web.com +||altrec.com +||amazonvideo.com +||angela-merkel.de +||angola.org +||anthropic.com +||apartmentratings.com +||apartments.com +||arena.taipei +||assets.bwbx.io +||assimp.org +||athenaeizou.com +||bankmobilevibe.com +||banorte.com +||beeg.com +||global.bing.com +||booktopia.com.au +||boysmaster.com +||bynet.co.il +||byrut.org +||carfax.com +.casinobellini.com +||casinobellini.com +||centauro.com.br +||chobit.cc +||ciciai.com +||cici.com +||claude.ai +||clearsurance.com +||cnbeta.com.tw +||counter.social +||costco.com +||coze.com +||crossfire.co.kr +||crunchyroll.com +||d2pass.com +||darpa.mil +||dawangidc.com +||deezer.com +||desipro.de +||discord.com +||discord.gg +||discordapp.com +||discordapp.net +||dish.com +|http://img.dlsite.jp/ +||dm530.net +||dmhy.org +||dmm.co.jp +|http://www.dmm.com/netgame +||dnvod.tv +||dubox.com +||dvdpac.com +||eesti.ee +||esurance.com +.expekt.com +||expekt.com +.extmatrix.com +||extmatrix.com +||fakku.net +||fastpic.ru +||filesor.com +||financetwitter.com +||flipboard.com +||flitto.com +||fnac.be +||fnac.com +||funkyimg.com +||fxnetworks.com +||g-area.org +||gettyimages.* +@@||gettyimages.com +@@||gettyimages.cn +||getuploader.com +||ghidra-sre.org +!--|https://github.com/programthink/zhao +!--|https://raw.githubusercontent.com/programthink/zhao +||glass8.eu +||glype.com +||go141.com +||hautelook.com +||hautelookcdn.com +||wego.here.com +||grok.com +||hmoegirl.com +||hmvdigital.ca +||hmvdigital.com +||homedepot.com +||hoovers.com +||hulu.com +||huluim.com +|http://secure.hustler.com +|http://hustlercash.com +|http://www.hustlercash.com +||hybrid-analysis.com +||cdn*.i-scmp.com +||ilbe.com +||ilovelongtoes.com +|http://imgmega.com/*.gif.html +|http://imgmega.com/*.jpg.html +|http://imgmega.com/*.jpeg.html +|http://imgmega.com/*.png.html +||imlive.co +||javhub.net +||javhuge.com +.javlibrary.com +||javlibrary.com +||jcpenney.com +||jims.net +||tv.jtbc.joins.com +||jukujo-club.com +||juliepost.com +||kawaiikawaii.jp +||kendatire.com +||khatrimaza.org +||kkbox.com +||leisurepro.com +||lifemiles.com +||lih.kg +||longtoes.com +||lovetvshow.com +||lpsg.com +||lrfz.com +|http://www.m-sport.co.uk +||macgamestore.com +||madonna-av.com +||mandiant.com +||mangafox.com +||mangafox.me +||manta.com +||matome-plus.com +||matome-plus.net +||mattwilcox.net +||metarthunter.com +||mfxmedia.com +||miraheze.org +||mojim.com +||kb.monitorware.com +||monster.com +||moodyz.com +||moonbingo.com +||mos.ru +||addons.mozilla.org/*-*/firefox/addon/ublock-origin/* +||addons.mozilla.org/firefox/downloads/file/*/ublock_origin-*.xpi +||msha.gov +||www.msn.com +||muzu.tv +||mvg.jp +.mybet.com +||mybet.com +||mypikpak.com +||nationwide.com +|http://www.nbc.com/live +||neo-miracle.com +||netflix.com +||netflix.net +||nflximg.com +||nflximg.net +||nflxext.com +||nflxso.net +||nflxvideo.net +||nic.gov +|http://mo.nightlife141.com +||purpose.nike.com +||noxinfluencer.com +@@||cn.noxinfluencer.com +||nordstrom.com +||nordstromimage.com +||nordstromrack.com +||nottinghampost.com +||npsboost.com +||ntdtv.cz +||nusatrip.com +||nuuvem.com +||bbs.nyinfor.com +||olehdtv.com +||omni7.jp +||onapp.com +!--We are confused as well +||ontrac.com +@@|http://blog.ontrac.com +||openai.com +||pandora.com +.pandora.tv +||parkansky.com +||phmsociety.org +|http://*.pimg.tw/ +||podcast.co +||popai.pro +||primevideo.com +||proyectoclubes.com +||pure18.com +||pytorch.org +||qq.co.za +||r18.com +|http://radiko.jp +||ramcity.com.au +||rateyourmusic.com +||rd.com +|https://riseup.net +||sadistic-v.com +||isc.sans.edu +|http://cdn*.search.xxx/ +||shiksha.com +||slacker.com +||sm-miracle.com +||soylentnews.org +||spotify.com +||spreadshirt.es +||springboardplatform.com +||sprite.org +@@|http://store.sprite.org +||superpages.com +||swagbucks.com +||switch1.jp +||tapanwap.com +||gsp.target.com +||login.target.com +!--@@||intl.target.com +||rcam.target.com +||technews.tw +||terabox.com +||thinkgeek.com +||thebodyshop-usa.com +||tma.co.jp +||tracfone.com +||tryheart.jp +||turntable.fm +||twerkingbutt.com +||ulop.net +||uukanshu.com +||vegasred.com +||vevo.com +||vip-enterprise.com +|http://viu.tv/ch/ +|http://viu.tv/encore/ +||vmpsoft.com +||wanz-factory.com +||ssl.webpack.de +||weebly.com +||wheretowatch.com +||wingamestore.com +||wizcrafts.net +||wowhead.com +||vod.wwe.com +||xfinity.com +||xiaomi.eu +||youwin.com +||ytn.co.kr +||zamimg.com +||zattoo.com +||zim.vn +||zozotown.com + +!##############General List Start############### +!-------------------Coin Pool------------------- +||c3pool.com +||unmineable.com +||666pool.cn +||antpool.com +||crazypool.org +||cruxpool.com +||miningpoolhub.com +||huobipool.com +||poolbinance.com +||hiveon.net +||sparkpool.com +||flypool.org +||nanopool.org +||xnpool.com +||beepool.com +||zhizhu.top +||spiderpool.com +||uupool.cn +||flexpool.io +||beepool.org +||dpool.top +||okpool.me +||binancezh.cc +||btc.com +||r-pool.net +||w-pool.com + +!-------------------Pure IP--------------------- +14.102.250.18 +14.102.250.19 +50.7.31.230:8898 +174.142.105.153 +69.65.19.160 + +!----------------------IDN---------------------- +||xn--11xs86f.icu +||xn--4gq171p.com +||xn--czq75pvv1aj5c.org +||xn--i2ru8q2qg.com +||xn--noss43i.com +||xn--oiq.cc +||xn--p8j9a0d9c9a.xn--q9jyb4c +||xn--9pr62r24a.com +@@/^https?:\/\/(?=.*?(2x3|ni5|j5o))[a-z0-9.-]+\.xn--ngstr-lra8j\.com$ +||xn--ngstr-lra8j.com + +!-----------------DNS Poisoning----------------- +!---Amazon--- +!-||cdn-images.mailchimp.com +||abebooks.com +|https://*.s3.amazonaws.com + +||9cache.com +||9gag.com +||agro.hk +||share.america.gov +||apkmirror.com +||arte.tv +||artstation.com +||bangdream.space +||behance.net +||bird.so +||bitterwinter.org +||bnn.co +||businessinsider.com +||bwgyhw.com +||castbox.fm +||clyp.it +||cmcn.org +||cmx.im +||dailyview.tw +||daum.net +||depositphotos.com +||disconnect.me +||documentingreality.com +||doubibackup.com +||encyclopedia.com +||fangeqiang.com +||fanqiangdang.com +||feedx.net +||flyzy2005.com +||foreignpolicy.com +||free-ss.site +||freehongkong.org +||blog.fuckgfw233.org +||g0v.social +||globalvoices.org +||glorystar.me +||goregrish.com +||hanime.tv +||hbo.com +||spaces.hightail.com +||hkgalden.com +||hkgolden.com +||hudson.org +||ipfs.io +||japantimes.co.jp +||jiji.com +||jintian.net +||jinx.com +||joinmastodon.org +||liangzhichuanmei.com +||lighti.me +||lightyearvpn.com +||lihkg.com +||line-scdn.net +||i.lithium.com +||cloud.mail.ru +||cdn-images.mailchimp.com +||mastodon.cloud +||mastodon.host +||mastodon.social +||mastodon.xyz +||matters.news +||me.me +||metart.com +||mohu.club +||msa-it.org +||goo.ne.jp +||nikkei.com +||nitter.cc +||nitter.net +||niu.moe +||now.com +||openvpn.org +||onejav.com +||paste.ee +||my.pcloud.com +||picacomic.com +||pincong.rocks +||pixiv.net +||pixiv.org +||pixivsketch.net +||potato.im +||premproxy.com +||prism-break.org +||proton.me +||protonvpn.com +||api.pureapk.com +||quora.com +||quoracdn.net +||qz.com +||cdn.seatguru.com +||redd.it +||redditspace.com +||reddit.com +||reddithelp.com +.redditlist.com +|http://redditlist.com +||redditmedia.com +||redditstatic.com +!--defunct +||rixcloud.com +||rixcloud.us +||rsdlmonitor.com +||shadowsocks.be +||tn1.shemalez.com +||tn2.shemalez.com +||tn3.shemalez.com +||static.shemalez.com +||six-degrees.io +||softfamous.com +||sosreader.com +||sspanel.net +||supchina.com +||teddysun.com +||textnow.me +||tineye.com +||top10vpn.com +||tubepornclassic.com +||uku.im +||unseen.is +||cn.uptodown.com +||uraban.me +||vrsmash.com +||vultryhw.com +||scache.vzw.com +||scache1.vzw.com +||scache2.vzw.com +||ss7.vzw.com +||ssr.tools +||steemit.com +||taiwanjustice.net +||tinc-vpn.org +||u15.info +||washingtonpost.com +||wenzhao.ca +||whatsonweibo.com +||wire.com +||xm.com +||xuehua.us +||yes-news.com +||yigeni.com +||you-get.org +||zzcloud.me + +!---Digital Currency Exchange(CRYPTO)--- +||aex.com +||allcoin.com +||adcex.com +||bcex.ca +||bibox.com +||big.one +||bigone.com +||binance.com +||bit-z.com +||bitz.ai +||bitbay.net +||bitcoinworld.com +||bitfinex.com +||bithumb.com +||bitmex.com +||bnbstatic.com +||btc98.com +||btcbank.bank +||btctrade.im +||bybit.com +||c2cx.com +||chaoex.com +||cobinhood.com +||coinbase.com +||coinbene.com +||coinex.com +!--|https://www.coinexchange.io/ +||coingecko.com +||coingi.com +||coinmarketcap.com +||coinrail.co.kr +||cointiger.com +||cointobe.com +||coinut.com +||discoins.com +||dragonex.io +||ebtcbank.com +||etherdelta.com +||ethermine.org +||etherscan.io +||exmo.com +||exrates.me +||f2pool.com +||fatbtc.com +||ftx.com +||gate.io +||gatecoin.com +||hbg.com +||hitbtc.com +||hotcoin.com +||huobi.co +||huobi.com +||huobi.me +!--||huobi.li +||huobi.pro +||huobi.sc +||huobipro.com +||bx.in.th +||jex.com +||kex.com +||kraken.com +||kspcoin.com +||kucoin.com +||lbank.info +||liquiditytp.com +||livecoin.net +||localbitcoins.com +||mercatox.com +||oanda.com +||obyte.org +||oex.com +||okex.com +||okx.com +||opensea.io +||otcbtc.com +||paxful.com +||poolin.com +||simpleswap.io +||solv.finance +||topbtc.com +||tronscan.org +||xbtce.com +||yobit.net +||zb.com + +!----------------Frauds & Scams----------------- +!!---Content Farm(fake 500 error)--- +||read01.com +||kknews.cc + +china-mmm.jp.net +.lsxszzg.com +.china-mmm.net +||china-mmm.net + +!---------------------Groups-------------------- +!!---Masterdon--- +||bgme.me +||o3o.ca +||go5.dev +||me.ns.ci +||moresci.sale +||social.edu.ci +||mstdn.social +||douchi.space +||slashine.onl +||social.datalabour.com +||mastodon.online + +!!---Afraid FreeDNS--- +.allowed.org +.now.im + +!!---Amazon--- +||payments-jp.amazon.com +||amazon.co.jp +||s3-ap-*.amazonaws.com +||s3.eu-central-1.amazonaws.com +||s3-eu-central-1.amazonaws.com +||s3.us-east-1.amazonaws.com +||s3-ap-northeast-2.amazonaws.com +||s3.ap-northeast-2.amazonaws.com +||s3-ap-northeast-1.amazonaws.com +||s3-ap-southeast-1.amazonaws.com +||s3-ap-southeast-2.amazonaws.com + +!!---AOL--- +video.aol.ca/video-detail +video.aol.co.uk/video-detail +video.aol.com +||video.aol.com +||search.aol.com +www.aolnews.com + +!!---AvMoo--- +.avmo.pw +!--|http://avmo.pw +.avmoo.com +|http://avmoo.com +.avmoo.net +|http://avmoo.net +||avmoo.pw +.javmoo.xyz +|http://javmoo.xyz +.javtag.com +|http://javtag.com +.javzoo.com +|http://javzoo.com +.tellme.pw + +!!---BBC--- +!--.bbc.co.uk/blogs +!--.bbc.co.uk/chinese +!--.bbc.co.uk/news/world-asia-china +!--.bbc.co.uk/tv +!--.bbc.co.uk/zhongwen +!--.bbc.com/ukchina +!--.bbc.com/zhongwen +!--.bbc.com%2Fzhongwen +!--news.bbc.co.uk/onthisday*newsid_2496000/2496277 +!--newsforums.bbc.co.uk +.bbc.com +||bbc.com +.bbc.co.uk +||bbc.co.uk +||bbci.co.uk +.bbcchinese.com +||bbcchinese.com +|http://bbc.in + +!!---Bloomberg--- +.bloomberg.cn +||bloomberg.cn +.bloomberg.com +||bloomberg.com +bloomberg.de +||bloomberg.de +||bloombergview.com +.businessweek.com + +!!---ChangeIP--- +.1dumb.com +.25u.com +.2waky.com +.3-a.net +.4dq.com +.4mydomain.com +.4pu.com +.acmetoy.com +.almostmy.com +.americanunfinished.com +.authorizeddns.net +.authorizeddns.org +.bigmoney.biz +.changeip.name +.changeip.net +.changeip.org +.cleansite.biz +.cleansite.info +.cleansite.us +.compress.to +.ddns.info +.ddns.me.uk +.ddns.mobi +.ddns.ms +.ddns.name +.ddns.us +.dns-dns.com +.dns-stuff.com +.dns04.com +.dns05.com +.dns1.us +.dns2.us +.dnset.com +.dnsrd.com +.dsmtp.com +.dumb1.com +.dynamic-dns.net +.dynamicdns.biz +.dynamicdns.co.uk +.dynamicdns.me.uk +.dynamicdns.org.uk +.dyndns.pro +.dynssl.com +.epac.to +.esmtp.biz +.ezua.com +.faqserv.com +.fartit.com +.freeddns.com +.freetcp.com +.freewww.info +.ftp1.biz +.ftpserver.biz +.gettrials.com +.got-game.org +.gr8domain.biz +.gr8name.biz +.https443.net +.https443.org +.ikwb.com +.instanthq.com +.iownyour.org +.isasecret.com +.itemdb.com +.itsaol.com +.jetos.com +.jkub.com +.jungleheart.com +.justdied.com +.lflink.com +.lflinkup.com +.lflinkup.net +.lflinkup.org +.longmusic.com +.mefound.com +.moneyhome.biz +.mrbasic.com +.mrbonus.com +.mrface.com +.mrslove.com +.my03.com +.mydad.info +.myddns.com +.myftp.info +.mylftv.com +.mymom.info +.mynetav.net +.mynetav.org +.mynumber.org +.mypicture.info +.mypop3.net +.mypop3.org +.mysecondarydns.com +.mywww.biz +.myz.info +.ns01.biz +.ns01.info +.ns01.us +.ns02.biz +.ns02.info +.ns02.us +.ns1.name +.ns2.name +.ns3.name +.ocry.com +.onedumb.com +.onmypc.biz +.onmypc.info +.onmypc.net +.onmypc.org +.organiccrap.com +.otzo.com +.ourhobby.com +.pcanywhere.net +.port25.biz +.proxydns.com +.qhigh.com +.qpoe.com +.rebatesrule.net +.sellclassics.com +.sendsmtp.com +.serveuser.com +.serveusers.com +.sexidude.com +.squirly.info +.ssl443.org +.toh.info +.toythieves.com +.trickip.net +.vizvaz.com +.wikaba.com +.www1.biz +.wwwhost.biz +@@|http://xx.wwwhost.biz +.x24hr.com +.xxuz.com +.xxxy.info +.ygto.com +.youdontcare.com +.yourtrap.com +.zyns.com +.zzux.com + +!!--Cloudflare-- +!--||pages.dev +||workers.dev +||one.one.one.one +||cloudflare-dns.com + +!!---DtDNS--- +!###https://www.dtdns.com/dtsite/faq +.3d-game.com +.4irc.com +.b0ne.com +.chatnook.com +.darktech.org +.deaftone.com +.effers.com +.etowns.net +.etowns.org +.flnet.org +.gotgeeks.com +.scieron.com +.slyip.com +.slyip.net +.suroot.com + +!!---DynDNS--- +!###https://help.dyn.com/list-of-dyn-dns-pro-remote-access-domain-names/ +.blogdns.org +.dyndns.org +.dyndns-ip.com +.dyndns-pics.com +.from-sd.com +.from-pr.com +.is-a-hunter.com + +!!---Dynu--- +.dynu.com +||dynu.com +.dynu.net +.freeddns.org + +!!---Facebook--- +||accountkit.com +||cdninstagram.com +||f8.com +.facebook.com +||facebook.com +!--/^https?:\/\/[^\/]+facebook\.com/ +@@||v6.facebook.com +||facebook.de +||facebook.design +||connect.facebook.net +||facebook.hu +||facebook.in +||facebook.nl +||facebook.se +||facebookmail.com +||fb.com +||fb.me +||fb.watch +||fbcdn.net +||fbsbx.com +||fbaddins.com +||fbworkmail.com +.instagram.com +||instagram.com +||m.me +||messenger.com +||meta.com +||oculus.com +||oculuscdn.com +||rocksdb.org +@@||ip6.static.sl-reverse.com +||parse.com +||thefacebook.com +||threads.net +||whatsapp.com +||whatsapp.net + +!!---Fandom--- +||auntology.fandom.com +||hongkong.fandom.com + +!!---FTChinese--- +.ftchinese.com +||ftchinese.com + +!!---Google--- +||gle +||google +||doc.new +||form.new +||forms.new +||sheet.new +||sheets.new +||spreadsheet.new +||site.new +||sites.new +||website.new +||slides.new +||deck.new +||presentation.new +||googleapis.com +!###https://www.google.com/supported_domains### +!...GFWList doesn't intend to support typosquatting... +||1e100.net +||466453.com +||abc.xyz +||admob.com +||adsense.com +||advertisercommunity.com +||agoogleaday.com +||ampproject.org +@@|https://www.ampproject.org +@@|https://cdn.ampproject.org +||android.com +@@||ci.android.com +||androidify.com +||androidtv.com +||api.ai +.appspot.com +||appspot.com +||autodraw.com +||blogblog.com +blogspot.com +/^https?:\/\/[^\/]+blogspot\.(.*)/ +.blogspot.hk +.blogspot.jp +.blogspot.tw +||business.page +!--||capitalg.com +||certificate-transparency.org +||chrome.com +||chromecast.com +||chromeexperiments.com +||chromestatus.com +||chromium.org +||cloudfunctions.net +||crbug.com +||creativelab5.com +||crrev.com +||data-vocabulary.org +||debug.com +||deepmind.com +||deja.com +||digisfera.com +||docker.com +||docs.new +||duck.com +||feedburner.com +||firebaseio.com +||g.co +||gcr.io +||get.app +||get.dev +||get.how +||get.page +||getmdl.io +||getoutline.org +||ggpht.com +||gmail.com +||gmodules.com +||godoc.org +||golang.org +||goo.gl +||goo.gle +.google.ae +.google.as +.google.am +.google.at +.google.az +.google.ba +.google.be +.google.bg +.google.ca +.google.cd +.google.ci +.google.co.id +.google.co.jp +.google.co.kr +.google.co.ma +.google.co.uk +.google.com +.google.de +||google.dev +.google.dj +.google.dk +.google.es +.google.fi +.google.fm +.google.fr +.google.gg +.google.gl +.google.gr +.google.ie +.google.is +.google.it +.google.jo +.google.kz +.google.lv +.google.mn +.google.ms +.google.nl +.google.nu +.google.no +.google.ro +.google.ru +.google.rw +.google.sc +.google.sh +.google.sk +.google.sm +.google.sn +.google.tk +.google.tm +.google.to +.google.tt +.google.vu +.google.ws +/^https?:\/\/([^\/]+\.)*google\.(ac|ad|ae|af|ai|al|am|as|at|az|ba|be|bf|bg|bi|bj|bs|bt|by|ca|cat|cd|cf|cg|ch|ci|cl|cm|co.ao|co.bw|co.ck|co.cr|co.id|co.il|co.in|co.jp|co.ke|co.kr|co.ls|co.ma|com|com.af|com.ag|com.ai|com.ar|com.au|com.bd|com.bh|com.bn|com.bo|com.br|com.bz|com.co|com.cu|com.cy|com.do|com.ec|com.eg|com.et|com.fj|com.gh|com.gi|com.gt|com.hk|com.jm|com.kh|com.kw|com.lb|com.ly|com.mm|com.mt|com.mx|com.my|com.na|com.nf|com.ng|com.ni|com.np|com.om|com.pa|com.pe|com.pg|com.ph|com.pk|com.pr|com.py|com.qa|com.sa|com.sb|com.sg|com.sl|com.sv|com.tj|com.tr|com.tw|com.ua|com.uy|com.vc|com.vn|co.mz|co.nz|co.th|co.tz|co.ug|co.uk|co.uz|co.ve|co.vi|co.za|co.zm|co.zw|cv|cz|de|dj|dk|dm|dz|ee|es|eu|fi|fm|fr|ga|ge|gg|gl|gm|gp|gr|gy|hk|hn|hr|ht|hu|ie|im|iq|is|it|it.ao|je|jo|kg|ki|kz|la|li|lk|lt|lu|lv|md|me|mg|mk|ml|mn|ms|mu|mv|mw|mx|ne|nl|no|nr|nu|org|pl|pn|ps|pt|ro|rs|ru|rw|sc|se|sh|si|sk|sm|sn|so|sr|st|td|tg|tk|tl|tm|tn|to|tt|us|vg|vn|vu|ws)\/.*/ +!--||google-analytics.com +!--||googleadservices.com +||googleapps.com +||googleartproject.com +||googleblog.com +||googlebot.com +!--||googlecapital.com +||googlechinawebmaster.com +||googlecode.com +||googlecommerce.com +||googledomains.com +||googlearth.com +||googleearth.com +||googledrive.com +||googlefiber.net +||googlegroups.com +||googlehosted.com +||googleideas.com +||googleinsidesearch.com +||googlemail.com +||googlemashups.com +||googlepagecreator.com +||googleplay.com +||googleplus.com +||googlescholar.com +||googlesource.com +!--||googlesyndication.com +!--||googletagmanager.com +!--||googletagservices.com +||googleusercontent.com +.googlevideo.com +||googlevideo.com +||googleweblight.com +||googlezip.net +||gstatic.com +!--||gv.com +||gvt1.com +@@||redirector.gvt1.com +||gvt3.com +||gwtproject.org +||html5rocks.com +||iam.soy +||igoogle.com +||itasoftware.com +||like.com +||madewithcode.com +||material.io +||on2.com +||panoramio.com +||picasaweb.com +||pki.goog +||plus.codes +||polymer-project.org +||questvisual.com +||admin.recaptcha.net +||api.recaptcha.net +||api-secure.recaptcha.net +||api-verify.recaptcha.net +||redhotlabs.com +||savethedate.foo +||schema.org +||shattered.io +|http://sipml5.org/ +||sheets.new +||slides.new +||snapseed.com +||synergyse.com +||teachparentstech.org +||tensorflow.org +||tfhub.dev +||thinkwithgoogle.com +||tiltbrush.com +||translate.goog +||ua5v.com +||urchin.com +||usercontent.goog +!--||www.google +||waveprotocol.org +||waymo.com +||web.dev +||webmproject.org +||webpkgcache.com +||webrtc.org +||whatbrowser.org +||whats.new +||widevine.com +||withgoogle.com +||withyoutube.com +||x.company +||xn--ngstr-lra8j.com +||youtu.be +.youtube.com +||youtube.com +||youtube-nocookie.com +||youtubeeducation.com +||youtubegaming.com +||youtubekids.com +||yt.be +||ytimg.com +||zynamics.com + +!!---KickASS--- +!--OFFICIAL URL list at: https://kastatus.com + +!!---Microsoft--- +!--@@||bing.com +||copilot.microsoft.com + +!!---NaughtyAmerica--- +||naughtyamerica.com + +!!---NYTimes--- +!--||d1f1eryiqyjs0r.cloudfront.net +!--||d3lar09xbwlsge.cloudfront.net +!--||d3q1qj9jzsu8nw.cloudfront.net +!--||dc8xl0ndzn2cb.cloudfront.net +!--||a1.nyt.com +!--||int.nyt.com +!--||s1.nyt.com +static01.nyt.com +!--||static01.nyt.com +!--||typeface.nyt.com +||nyt.com +nytchina.com +nytcn.me +||nytcn.me +||nytco.com +|http://nyti.ms/ +.nytimes.com +||nytimes.com +||nytimg.com +cn.nytstyle.com +||nytstyle.com + +!!---Steam--- +.steamcommunity.com +||steamcommunity.com +!--steamcommunity.com/profiles/76561198062771609 +!--steamcommunity.com/groups/LibetTibet +!--steamcommunity.com/groups/zhonggong +!--steamcommunity.com/id/CJT_Jackton +||store.steampowered.com +||api.steampowered.com +||steamstatic.com +!!---Telegram--- +!!!---Domain--- +||tx.me +||tg.dev +||telega.one +||cdn-telegram.org +||comments.app +||graph.org +||legra.ph +||quiz.directory +||t.me +||updates.tdesktop.com +||telegram.dog +||telegram.me +||telegram.org +||telegram.space +||telegramdownload.com +||telegra.ph +||telesco.pe +!!!---IP--- + +!!---Tiktok--- +||tiktok.com +||tiktokv.com +||tiktokv.us +||tiktokcdn-us.com +||tiktokcdn.com +||tiktokcdn-eu.com + +!!---Twitch--- +||jtvnw.net +||ttvnw.net +||twitch.tv +||twitchcdn.net + +!!---Twitter/X--- +||periscope.tv +.pscp.tv +||pscp.tv +.t.co +||t.co +.tweetdeck.com +||tweetdeck.com +||twimg.com +.twitpic.com +||twitpic.com +.twitter.com +||twitter.com +||twitter.jp +||vine.co +||x.com + +!!---Taiwan--- +||moj.gov.tw +||gov.taipei +.gov.tw +|https://aiss.anws.gov.tw +||archives.gov.tw +||tacc.cwb.gov.tw +||data.gov.tw +||exam.gov.tw +||ey.gov.tw +||fa.gov.tw +||fda.gov.tw +||hpa.gov.tw +||immigration.gov.tw +||itaiwan.gov.tw +||judicial.gov.tw +||li.taipei +||ly.gov.tw +||mjib.gov.tw +||moeaic.gov.tw +||mofa.gov.tw +||mol.gov.tw +||mvdis.gov.tw +||nat.gov.tw +||nhi.gov.tw +||npa.gov.tw +||nsc.gov.tw +||ntbk.gov.tw +||ntbna.gov.tw +||ntbt.gov.tw +||pcc.gov.tw +||stat.gov.tw +||taipei.gov.tw +||taiwanjobs.gov.tw +||thb.gov.tw +||tipo.gov.tw +||wda.gov.tw + +||teco-hk.org +||teco-mo.org + +@@||aftygh.gov.tw +@@||aide.gov.tw +@@||tpde.aide.gov.tw +@@||arte.gov.tw +@@||chukuang.gov.tw +@@||cwb.gov.tw +@@||cycab.gov.tw +@@||dbnsa.gov.tw +@@||df.gov.tw +@@||eastcoast-nsa.gov.tw +@@||erv-nsa.gov.tw +@@||grb.gov.tw +@@||gysd.nyc.gov.tw +@@||hchcc.gov.tw +@@||hsinchu-cc.gov.tw +@@||iner.gov.tw +@@||klsio.gov.tw +@@||kmseh.gov.tw +@@||lungtanhr.gov.tw +@@||maolin-nsa.gov.tw +@@||matsu-news.gov.tw +@@||matsu-nsa.gov.tw +@@||matsucc.gov.tw +@@||moe.gov.tw +@@||nankan.gov.tw +@@||ncree.gov.tw +@@||cromotc.nat.gov.tw +@@||tax.nat.gov.tw +@@||necoast-nsa.gov.tw +@@||ner.gov.tw +@@||nmmba.gov.tw +@@||nmp.gov.tw +@@||nmvttc.gov.tw +@@||northguan-nsa.gov.tw +||npm.gov.tw +@@||nstm.gov.tw +@@||ntdmh.gov.tw +@@||ntl.gov.tw +@@||ntsec.gov.tw +@@||ntuh.gov.tw +@@||nvri.gov.tw +@@||penghu-nsa.gov.tw +@@||post.gov.tw +@@||siraya-nsa.gov.tw +@@||stdtime.gov.tw +@@||sunmoonlake.gov.tw +@@||taitung-house.gov.tw +@@||taoyuan.gov.tw +@@||tphcc.gov.tw +@@||trimt-nsa.gov.tw +@@||vghtpe.gov.tw +@@||vghks.gov.tw +@@||vghtc.gov.tw +@@||wanfang.gov.tw +@@||yatsen.gov.tw +@@||yda.gov.tw + +!--@@||4pppc.gov.tw +!--@@||921.gov.tw +!--@@||dmtip.gov.tw +!--@@||etraining.gov.tw +!--@@||gsn-cert.nat.gov.tw +!--@@||nici.nat.gov.tw +!--@@||hcc.gov.tw +!--@@||hengchuen.gov.tw +!--@@||khcc.gov.tw +!--@@||khms.gov.tw +!--@@||kk.gov.tw +!--@@||klccab.gov.tw +!--@@||klra.gov.tw +!--@@||nmh.gov.tw +!--@@||nmtl.gov.tw +!--@@||pabp.gov.tw +!--@@||pet.gov.tw +!--@@||tchb.gov.tw +!--@@||tcsac.gov.tw +!--@@||tncsec.gov.tw +||kinmen.org.tw + +!!---USA--- +||americorps.gov +||dma.mil +||jpl.nasa.gov +||pds.nasa.gov +||pacom.mil +||soc.mil +||solarsystem.nasa.gov +iipdigital.usembassy.gov +||uscg.mil +||usfk.mil +|http://tarr.uspto.gov/ +||tsdr.uspto.gov + +!!---V2EX--- +||v2ex.com +!--.v2ex.com +!--Included in above rule: dns.v2ex.com +!--@@|http://v2ex.com +!--@@|http://cdn.v2ex.com +!--@@|http://cn.v2ex.com +!--@@|http://hk.v2ex.com +!--@@|http://i.v2ex.com +!--@@|http://lax.v2ex.com +!--@@|http://neue.v2ex.com +!--@@|http://pagespeed.v2ex.com +!--@@|http://static.v2ex.com +!--@@|http://workspace.v2ex.com +!--@@|http://www.v2ex.com + +!!---VOA--- +||voacambodia.com +.voachineseblog.com +||voachineseblog.com +.voacantonese.com +||voacantonese.com +voachinese.com +||voachinese.com +voagd.com +||voaindonesia.com +.voanews.com +||voanews.com +voatibetan.com +||voatibetan.com +.voatibetanenglish.com +||voatibetanenglish.com + +!!---Wikia--- +||zh.ecdm.wikia.com +||evchk.wikia.com +fq.wikia.com +zh.pttpedia.wikia.com/wiki/%E7%BF%92%E5%8C%85%E5%AD%90%E4%B9%8B%E4%BA%82 +cn.uncyclopedia.wikia.com +zh.uncyclopedia.wikia.com + +!-------------Wikipedia Related------------- +!!Emergency need only(IP/Port block usage)!! +!------0------ +||mediawiki.org +!------1------ +||wikidata.org +!------2------ +||wikimedia.org +!------3------ +||wikibooks.org +!------4------ +||wikiversity.org +!------5------ +||wikisource.org +!------6------ +||zh.wikiquote.org +!------7------ +||wikinews.org +!------8------ +||wikivoyage.org +!------9------ +||wiktionary.org +!----Main----- +||wikipedia.org +||wmfusercontent.org + +!!---Yahoo--- +||shopping.yahoo.co.jp +||auctions.yahoo.co.jp +||search.yahoo.co.jp +||yahoo.com.tw +||yahoo.com.hk +||yahoo.com + +!------------------Numerics--------------------- +||ipfs.4everland.io +||91dasai.com +||i.111666.best +||1lib.sk +||2047.one +||69shuba.cx +||2049bbs.xyz +||611study.com +||18comic.org +||000webhost.com +.030buy.com +.0rz.tw +|http://0rz.tw +1-apple.com.tw +||1-apple.com.tw +.1000giri.net +||1000giri.net +||10beasts.net +.10conditionsoflove.com +||10musume.com +123rf.com +.12bet.com +||12bet.com +.12vpn.com +.12vpn.net +||12vpn.com +||12vpn.net +||1337x.to +.138.com +141hongkong.com/forum +||141jj.com +.141tube.com +||1688.com.au +.173ng.com +||173ng.com +.177pic.info +.17t17p.com +||18board.com +18onlygirls.com +.18p2p.com +.18virginsex.com +zhao.1984.city +||zhao.1984.city +1984bbs.com +||1984bbs.com +!--||1984blog.com +.1991way.com +||1991way.com +.1eew.com +.1mobile.com +||1point3acres.com +||1pondo.tv +.2-hand.info +.2000fun.com/bbs +||2008xianzhang.info +||2021hkcharter.com +||2047.name +21andy.com/blog +21sextury.com +.228.net.tw +||233abc.com +||24hrs.ca +2lipstube.com +.2shared.com +30boxes.com +.315lz.com +||32red.com +||36rain.com +.3a5a.com +3arabtv.com +.3boys2girls.com +.3proxy.ru +.3ren.ca +.3tui.net +||404museum.com +||4bluestones.biz +.4chan.com +!--||4chan.org +.4everproxy.com +||4everproxy.com +||4rbtv.com +||4shared.com +taiwannation.50webs.com +||51.ca +||51jav.org +.51luoben.com +||51luoben.com +||5278.cc +.5299.tv +5i01.com +.5isotoi5.org +.5maodang.com +||611study.icu +||63i.com +.64museum.org +64tianwang.com +64wiki.com +.66.ca +666kb.com +||6do.news +||6do.world +.6park.com +||6park.com +||6parkbbs.com +||6parker.com +||6parknews.com +||7capture.com +.7cow.com +!--||7-zip.org +.8-d.com +|http://8-d.com +.85cc.us +|http://85cc.us +.881903.com/page/zh-tw/ +||881903.com +.888.com +.888poker.com +89.64.charter.constitutionalism.solutions +89-64.org +||89-64.org +||8964museum.com +.8news.com.tw +.8z1.net +||8z1.net +||91porn.com +||91porny.com +||91vps.club +.92ccav.com +.991.com +|http://991.com +.99btgc01.com +||99btgc01.com +.99cn.info +|http://99cn.info +||9bis.com +||9bis.net +||9news.com.au + +!--------------------AA------------------------- +||amuletmc.com +||abplive.com +||cdn.arstechnica.net +||aomedia.org +||aljazeera.com +||akinator.com +||annas-archive.org +||av01.tv +||acg.rip +||annas-archive.se +||a-normal-day.com +a5.com.ru +|http://aamacau.com +!--|http://cdn*.abc.com/ +.abc.com +.abc.net.au +||abc.net.au +.abchinese.com +||abebooks.co.uk +.ablwang.com +.aboluowang.com +||aboluowang.com +||about.me +.abs.edu +||acast.com +.accim.org +.aceros-de-hispania.com +.acevpn.com +||acevpn.com +.acg18.me +|http://acg18.me +||acgbox.org +||acgkj.com +||acgnx.se +.acmedia365.com +.acnw.com.au +actfortibet.org +actimes.com.au +activpn.com +||activpn.com +||aculo.us +||addictedtocoffee.de +||addyoutube.com +.adelaidebbs.com/bbs +.adpl.org.hk +|http://adpl.org.hk +.adult-sex-games.com +||adult-sex-games.com +adultfriendfinder.com +||advanscene.com +||advertfan.com +.ae.org +||aei.org +||aenhancers.com +||af.mil +.afantibbs.com +|http://afantibbs.com +||afr.com +||aiosearch.com +.aiph.net +||aiph.net +.airasia.com +||airconsole.com +|http://download.aircrack-ng.org +.airvpn.org +||airvpn.org +.aisex.com +||ait.org.tw +aiweiwei.com +.aiweiweiblog.com +||aiweiweiblog.com +||www.ajsands.com + +!!---Akamai--- +a248.e.akamai.net +||a248.e.akamai.net + +rfalive1.akacast.akamaistream.net +voa-11.akacast.akamaistream.net + +|https://fbcdn*.akamaihd.net/ +!--||fbexternal-a.akamaihd.net +!--||fbstatic-a.akamaihd.net +!--|https://igcdn*.akamaihd.net +rthklive2-lh.akamaihd.net + +.akademiye.org/ug +|http://akademiye.org/ug +||akiba-online.com +||akow.org +.al-islam.com +||alabout.com +.alanhou.com +|http://alanhou.com +.alarab.qa +||alasbarricadas.org +||alforattv.net +.alhayat.com +.alicejapan.co.jp +aliengu.com +||alive.bar +||alkasir.com +||all4mom.org +||allconnected.co +.alldrawnsex.com +||alldrawnsex.com +||allfinegirls.com +.allgirlmassage.com +allgirlsallowed.org +.allgravure.com +alliance.org.hk +.allinfa.com +||allinfa.com +.alljackpotscasino.com +||allmovie.com +.alphaporno.com +||alternate-tools.com +alternativeto.net/software +alvinalexander.com +alwaysdata.com +||alwaysdata.com +||alwaysdata.net +.alwaysvpn.com +||alwaysvpn.com +||am730.com.hk +ameblo.jp +||ameblo.jp +www1.american.edu/ted/ice/tibet +||americangreencard.com +||amiblockedornot.com +.amigobbs.net +.amitabhafoundation.us +|http://amitabhafoundation.us +.amnesty.org +||amnesty.org +||amnesty.org.hk +.amnesty.tw +.amnestyusa.org +||amnestyusa.org +.amtb-taipei.org +.andygod.com +|http://andygod.com +annatam.com/chinese +||anchor.fm +||anchorfree.com +!--GHS +||ancsconf.org +||andfaraway.net +||android-x86.org +||androidapksfree.com +angelfire.com/hi/hayashi +||angularjs.org +animecrazy.net +aniscartujo.com +||aniscartujo.com +||anobii.com +||anonfiles.com +.anonymitynetwork.com +.anonymizer.com +.anonymouse.org +||anonymouse.org +anontext.com +.anpopo.com +.answering-islam.org +|http://www.antd.org +||anthonycalzadilla.com +antichristendom.com +.antiwave.net +|http://antiwave.net +.anyporn.com +.anysex.com +|http://anysex.com +.ao3.org +||ao3.org +||aobo.com.au +.aofriend.com +|http://aofriend.com +.aojiao.org +||aomiwang.com +||apat1989.org +.apetube.com +||apiary.io +.apigee.com +||apigee.com +||apk.support +||apkcombo.com +.apkmonk.com/app +||apkmonk.com +||apkplz.com +||apkpure.com +||apkpure.net +||appadvice.com +!--||appannie.com +||appbrain.com +.appdownloader.net/Android +.appledaily.com +||appledaily.com +appledaily.com.tw +||appledaily.com.tw +.appshopper.com +|http://appshopper.com +||appsocks.net +||appsto.re +.aptoide.com +||aptoide.com +||archives.gov +.archive.fo +||archive.fo +||archive.vn +||archive.is +||archive.is +||archive.li +||archive.li +||archive.md +||archive.org +||archive.ph +||archive.today +||archiveofourown.com +||archiveofourown.org +.arctosia.com +||arctosia.com +||areca-backup.org +.arethusa.su +||arethusa.su +||arlingtoncemetery.mil +.art4tibet1998.org +artofpeacefoundation.org +artsy.net +||asacp.org +asdfg.jp/dabr +asg.to +.asia-gaming.com +.asiaharvest.org +||asiaharvest.org +||asianage.com +||asianews.it +||asiansexdiary.com +||asiaone.com +.asiatgp.com +||ask.com +||askstudent.com +.askynz.net +||askynz.net +||aspi.org.au +||aspistrategist.org.au +||assembla.com +||astrill.com +||atc.org.au +.atchinese.com +|http://atchinese.com +atgfw.org +.atlanta168.com +||atlanta168.com +.atnext.com +||atnext.com +||audacy.com +ice.audionow.com +.av.com +||av.movie +.av-e-body.com +avaaz.org +||avaaz.org +!--||avast.com +.avcool.com +.avdb.in +||avdb.in +.avdb.tv +||avdb.tv +.avfantasy.com +||avg.com +.avgle.com +||avgle.com +||avidemux.org +||avoision.com +.avyahoo.com +||axios.com +||axureformac.com +azerimix.com +||azirevpn.com +!--boxun.azurewebsites.net doesn't exist. +boxun*.azurewebsites.net +||boxun*.azurewebsites.net + +!--------------------BB------------------------- +||bt4gprx.com +||bt4g.org +||betterhash.net +||binance.org +||bitget.com +||blackmagicdesign.com +||bearteach.com +||btbtt.me +||btbtt.co +||btbit.net +||betaclouds.net +||blocktempo.com +||blockcast.it +||www.bing.com +||bangumi.moe +||b-ok.cc +forum.baby-kingdom.com +||babylonbee.com +babynet.com.hk +backchina.com +||backchina.com +.backpackers.com.tw/forum +backtotiananmen.com +||bad.news +.badiucao.com +||badiucao.com +.badjojo.com +badoo.com +|http://*2.bahamut.com.tw +||baidu.jp +.baijie.org +||baijie.org +||bailandaily.com +||baixing.me +||baizhi.org +.banana-vpn.com +||banana-vpn.com +||band.us +||bandcamp.com +.bandwagonhost.com +||bandwagonhost.com +.bangbrosnetwork.com +.bangchen.net +|http://bangchen.net +||bangkokpost.com +||bangyoulater.com +bannedbook.org +||bannedbook.org +.bannednews.org +.baramangaonline.com +|http://baramangaonline.com +.barenakedislam.com +||barnabu.co.uk +||barton.de +.bastillepost.com +||bastillepost.com +bayvoice.net +||bayvoice.net +||bbchat.tv +||bb-chat.tv +.bbg.gov +.bbkz.com/forum +.bbnradio.org +bbs-tw.com +.bbsdigest.com/thread +bbsland.com +.bbsmo.com +.bbsone.com +bbtoystore.com +.bcc.com.tw/board +.bcchinese.net +.bcmorning.com +bdsmvideos.net +.beaconevents.com +.bebo.com +||bebo.com +.beevpn.com +||beevpn.com +.behindkink.com +||beijing1989.com +||beijing2022.art +beijingspring.com +||beijingspring.com +.belamionline.com +.bell.wiki +|http://bell.wiki +bemywife.cc +beric.me +||berlinerbericht.de +.berlintwitterwall.com +||berlintwitterwall.com +.berm.co.nz +.bestgore.com +.bestpornstardb.com +||bestvpn.com +||bestvpnanalysis.com +||bestvpnforchina.net +||bestvpnserver.com +||bestvpnservice.com +||bestvpnusa.com +||bet365.com +.betfair.com +||betternet.co +.bettervpn.com +||bettervpn.com +.bettween.com +||bettween.com +||betvictor.com +.bewww.net +.beyondfirewall.com +||bfnn.org +||bfsh.hk +.bgvpn.com +||bgvpn.com +.bianlei.com +@@||bianlei.com +biantailajiao.com +||biblesforamerica.org +||vpl.bibliocommons.com +||biedian.me +bigfools.com +||bigjapanesesex.com +.bignews.org +||bignews.org +.bigsound.org +||bild.de +.biliworld.com +|http://biliworld.com +|http://billypan.com/wiki +.binux.me +ai.binwang.me/couplet +.bit.do +|http://bit.do +.bit.ly +|http://bit.ly +!--||bitbucket.org +||bitchute.com +||bitcointalk.org +.bitshare.com +||bitshare.com +bitsnoop.com +.bitvise.com +||bitvise.com +bizhat.com +||bl-doujinsouko.com +.bjnewlife.org +.bjs.org +bjzc.org +||bjzc.org +||blacked.com +.blacklogic.com +.blackvpn.com +||blackvpn.com +blewpass.com +.blinkx.com +||blinkx.com +blinw.com +.blip.tv +||blip.tv +||blockcast.it +.blockcn.com +||blockcn.com +||blockedbyhk.com +||blockless.com +||blog.de +.blog.jp +|http://blog.jp +@@||jpush.cn +.blogcatalog.com +||blogcatalog.com +||blogcity.me +.blogger.com +||blogger.com +blogimg.jp +.bloglines.com +||bloglines.com +||bloglovin.com +rconversation.blogs.com +.blogtd.org +|http://blogtd.org +||bloodshed.net +||bootstrapcdn.com +||bloomfortune.com +blueangellive.com +||blubrry.com +||bmdru.com +||bnext.com.tw +||bnrmetal.com +boardreader.com/thread +||boardreader.com +.bod.asia +||bod.asia +.bodog88.com +.bolehvpn.net +||bolehvpn.net +bonbonme.com +.bonfoundation.org +.bongacams.com +||boobstagram.com +||book.com.tw +||bookdepository.com +bookepub.com +||books.com.tw +||bookwalker.com.tw +||borgenmagazine.com +||botanwang.com +.bot.nu +.bowenpress.com +||bowenpress.com +||app.box.com +dl.box.net +||dl.box.net +.boxpn.com +||boxpn.com +boxun.com +||boxun.com +.boxun.tv +||boxun.tv +.boxunclub.com +boyangu.com +.boyfriendtv.com +.boysfood.com +||br.st +.brainyquote.com/quotes/authors/d/dalai_lama +||braumeister.org +||brave.com +.bravotube.net +||bravotube.net +.brazzers.com +||brazzers.com +||breached.to +.break.com +||break.com +breakgfw.com +||breakgfw.com +breaking911.com +.breakingtweets.com +||breakingtweets.com +||breakwall.net +briian.com/6511/freegate +||brill.com +brizzly.com +||brizzly.com +broadbook.com +.broadpressinc.com +||broadpressinc.com +bbs.brockbbs.com +||brookings.edu +brucewang.net +.brutaltgp.com +||brutaltgp.com +||bsky.app +||bsky.network +||bsky.social +||bt95.com +.btaia.com +.btbtav.com +||btdig.com +||btdigg.org +||btguard.com +.btku.me +||btku.me +||btku.org +.btspread.com +.btsynckeys.com +.budaedu.org +||budaedu.org +.buddhanet.com.tw/zfrop/tibet +||buffered.com +||bullguard.com +.bullog.org +||bullog.org +.bullogger.com +||bullogger.com +||bumingbai.net +||bunbunhk.com +.busayari.com +|http://busayari.com +||business-humanrights.org +.businessinsider.com/bing-could-be-censoring-search-results-2014 +.businessinsider.com/china-banks-preparing-for-debt-implosion-2014 +.businessinsider.com/hong-kong-activists-defy-police-tear-gas-as-protests-continue-overnight-2014 +.businessinsider.com/internet-outages-reported-in-north-korea-2014 +.businessinsider.com/iphone-6-is-approved-for-sale-in-china-2014 +.businessinsider.com/nfl-announcers-surface-tablets-2014 +.businessinsider.com/panama-papers +.businessinsider.com/umbrella-man-hong-kong-2014 +|http://www.businessinsider.com.au/* +.businesstoday.com.tw +||businesstoday.com.tw +.busu.org/news +|http://busu.org/news +busytrade.com +.buzzhand.com +.buzzhand.net +.buzzorange.com +||buzzorange.com +||buzzsprout.com +||bvpn.com +||bwh1.net +||bypasscensorship.org + +!--------------------CC------------------------- +||covenantswatch.org.tw +||cpu-monkey.com +||coffeemanga.to +||ctinews.com +||cachefly.com +||cachefly.net +||cutout.pro +||cixiaoya.club +||campaign-archive.com +||chinauncensored.tv +||catbox.moe +||crosswall.org +||clipconverter.cc +||zh-hans.cfsh99.com +||colacloud.net +||ci-en.jp +||c-span.org +.c-spanvideo.org +||c-spanvideo.org +||c-est-simple.com +.c100tibet.org +||cableav.tv +||cablegatesearch.net +.cachinese.com +.cacnw.com +|http://cacnw.com +.cactusvpn.com +||cactusvpn.com +.cafepress.com +.cahr.org.tw +.calameo.com/books +||calendarz.com +.calgarychinese.ca +.calgarychinese.com +.calgarychinese.net +.cam4.com +.cam4.jp +.cam4.sg +.camfrog.com +||camfrog.com +||campaignforuyghurs.org +||cams.com +.cams.org.sg +canadameet.com +.canalporno.com +|http://bbs.cantonese.asia/ +!--http://www.cantonese.asia/action-bbs.html +.canyu.org +||canyu.org +.caobian.info +||caobian.info +caochangqing.com +||caochangqing.com +.cap.org.hk +||cap.org.hk +||caoporn.us +.carabinasypistolas.com +cardinalkungfoundation.org +||posts.careerengine.us +carmotorshow.com +||carrd.co +.cartoonmovement.com +||cartoonmovement.com +.casadeltibetbcn.org +.casatibet.org.mx +|http://casatibet.org.mx +.cari.com.my +||cari.com.my +||caribbeancom.com +||carousell.com.hk +.casinoking.com +.casinoriva.com +||catch22.net +.catchgod.com +|http://catchgod.com +.catholic.org.hk +||catholic.org.hk +catholic.org.tw +||catholic.org.tw +.cathvoice.org.tw +||cato.org +||cattt.com +||caus.com +.cbc.ca +||cbc.ca +.cbsnews.com/video +.cbtc.org.hk +||southpark.cc.com +!-.ccc.de +!-||ccc.de +||cccat.cc +||cccat.co +||ccfd.org.tw +.cchere.com +||cchere.com +.ccim.org +.cclife.ca +cclife.org +||cclife.org +cclifefl.org +||cclifefl.org +.ccthere.com +||ccthere.com +||ccthere.net +.cctmweb.net +.cctongbao.com/article/2078732 +ccue.ca +ccue.com +.ccvoice.ca +.ccw.org.tw +.cgdepot.org +|http://cgdepot.org +||cdbook.org +.cdef.org +||cdef.org +||cdig.info +cdjp.org +||cdjp.org +!--.cdn-apple.com +!--||cdn-apple.com +.cdnews.com.tw +cdp1989.org +cdp1998.org +||cdp1998.org +cdp2006.org +||cdp2006.org +||cdpeu.org +||cdpuk.co.uk +||cdpweb.org +||cdpweb.org +||cdpwu.org +||cdw.com +||cecc.gov +||cellulo.info +||cenews.eu +||centerforhumanreprod.com +||centralnation.com +.centurys.net +|http://centurys.net +.cfhks.org.hk +.cfos.de +||cfr.org +.cftfc.com +.cgst.edu +.change.org +||change.org +.changp.com +||changp.com +||channelnewsasia.com +||chanworld.org +||chaos.social +||character.ai +||chatgpt.com +.chaturbate.com +||chaturbate.com +.chuang-yen.org +||checkgfw.com +||chengmingmag.com +||chenguangcheng.com +||chenpokong.com +||chenpokongvip.com +||cherrysave.com +||chhongbi.org +||china-week.com +||china101.com +||china18.org +||china21.com +||china21.org +||china5000.us +||chinaaffairs.org +||chinaaid.us +||chinaaid.org +||chinaaid.net +||chinachange.org +||chinachannel.hk +||chinademocrats.org +||chinadialogue.net +||chinadigitaltimes.net +||chinaelections.org +||chinafile.com +||chinafreepress.org +.chinagate.com +chinagfw.org +||chinagfw.org +.chinagonet.com +.chinahorizon.org +||chinahorizon.org +.chinahush.com +.chinainperspective.com +chinalaborwatch.org +chinalawtranslate.com +.chinapost.com.tw/taiwan/national/national-news +chinalawandpolicy.com +.chinamule.com +||chinamule.com +chinamz.org +.chinanewscenter.com +|https://chinanewscenter.com +.chinapress.com.my +||chinapress.com.my +.china-review.com.ua +|http://china-review.com.ua +.chinarightsia.org +chinasmile.net/forums +chinasocialdemocraticparty.com +||chinasocialdemocraticparty.com +chinasoul.org +||chinasoul.org +.chinasucks.net +||chinatopsex.com +.chinatown.com.au +chinaway.org +.chinaworker.info +||chinaworker.info +chinayouth.org.hk +chinese-leaders.org +||chinese-memorial.org +.chinesedaily.com +||chinesedailynews.com +.chinesedemocracy.com +||chinesedemocracy.com +||chinesegay.org +.chinesen.de +||chinesen.de +||chinesenews.net.au +.chinesepen.org +||chineseradioseattle.com +||chineseupress.com +.chingcheong.com +||chingcheong.com +.chinman.net +|http://chinman.net +chithu.org +||cnnews.chosun.com +.chrdnet.com +|http://chrdnet.com +.christianfreedom.org +||christianfreedom.org +christianstudy.com +||christianstudy.com +christusrex.org/www1/sdc +.chubold.com +chubun.com +||christiantimes.org.hk +.chrlawyers.hk +||chrlawyers.hk +.churchinhongkong.org/b5/index.php +|http://churchinhongkong.org/b5/index.php +.chushigangdrug.ch +.cienen.com +.cineastentreff.de +.cipfg.org +||cirosantilli.com +.citizencn.com +||citizencn.com +||citizenlab.ca +||citizenlab.org +.citizenlab.org +citizensradio.org +.city365.ca +|http://city365.ca +city9x.com +||citypopulation.de +.citytalk.tw/event +.civicparty.hk +||civicparty.hk +civilhrfront.org +||civilhrfront.org +.civiliangunner.com +.civilmedia.tw +||civilmedia.tw +||civitai.com +.ck101.com +||ck101.com +.clarionproject.org/news/islamic-state-isis-isil-propaganda +||classicalguitarblog.net +.clb.org.hk +clearharmony.net +clearwisdom.net +||clinica-tibet.ru +.clipfish.de +||app.cloudcone.com +||cloudflare-ipfs.com +||club1069.com +||clubhouseapi.com +||cmegroup.com +||cmi.org.tw +|http://www.cmoinc.org +cmp.hku.hk +||cmule.com +||cms.gov +|http://vpn.cmu.edu +|http://vpn.sv.cmu.edu +.cn6.eu +.cna.com.tw +||cna.com.tw +.cnabc.com +.cnd.org +||cnd.org +download.cnet.com +.cnex.org.cn +.cnineu.com +.cnn.com/video +.cnpolitics.org +||cnpolitics.org +.cn-proxy.com +|http://cn-proxy.com +.cnproxy.com +news.cnyes.com +||coat.co.jp +||cochina.org +||codeshare.io +||codeskulptor.org +||cofacts.tw +||conoha.jp +|http://tosh.comedycentral.com +comefromchina.com +||comefromchina.com +.comic-mega.me +commandarms.com +||commentshk.com +.communistcrimes.org +||communistcrimes.org +||communitychoicecu.com +||comparitech.com +||compileheart.com +||conoha.jp +.contactmagazine.net +.convio.net +||cool18.com +.coolaler.com +||coolaler.com +coolder.com +||coolder.com +||coolloud.org.tw +.coolncute.com +||coolstuffinc.com +corumcollege.com +.cos-moe.com +|http://cos-moe.com +.cosplayjav.pl +|http://cosplayjav.pl +.cotweet.com +||cotweet.com +.coursehero.com +||coursehero.com +cpj.org +||cpj.org +.cq99.us +|http://cq99.us +crackle.com +||crackle.com +.crazys.cc +.crazyshit.com +||crazyshit.com +||crchina.org +crd-net.org +creaders.net +||creaders.net +.creadersnet.com +||cristyli.com +||croxyproxy.com +.crocotube.com +|http://crocotube.com +.crossvpn.net +||crossvpn.net +||crucial.com +||blog.cryptographyengineering.com +csdparty.com +||csdparty.com +||csis.org +||csmonitor.com +||csuchen.de +||csw.org.uk +||ct.org.tw +.ctao.org +||ctitv.com.tw +||ctowc.org +||cts.com.tw +||ctwant.com +|http://library.usc.cuhk.edu.hk/ +|http://mjlsh.usc.cuhk.edu.hk/ +.cuhkacs.org/~benng +.cuiweiping.net +||cuiweiping.net +||culture.tw +.cumlouder.com +||cumlouder.com +||curvefish.com +||cusp.hk +.cutscenes.net +||cutscenes.net +.cw.com.tw +||cw.com.tw +|http://forum.cyberctm.com +cyberghostvpn.com +||cyberghostvpn.com +||cynscribe.com +||ifan.cz.cc +||mike.cz.cc +||nic.cz.cc + +!--------------------DD------------------------- +||deno.dev +||docs.deno.com +||doom9.org +||dweb.link +||docker.io +||disneyplus.com +||ddex.io +||d.cash +||doubiyunbackup.com +||cloud.dify.ai +.d-fukyu.com +|http://d-fukyu.com +.d100.net +||d100.net +.d2bay.com +|http://d2bay.com +.dabr.co.uk +||dabr.co.uk +dabr.eu +dabr.mobi +||dabr.mobi +||dabr.me +dadazim.com +||dadazim.com +.dadi360.com +.dafabet.com +dafagood.com +dafahao.com +.dafoh.org +.daftporn.com +.dagelijksestandaard.nl +.daidostup.ru +|http://daidostup.ru +||dailymail.co.uk +.dailymotion.com +||dailymotion.com +||dailysabah.com +.dajiyuan.com +||dajiyuan.de +dajiyuan.eu +dalailama.com +.dalailama.mn +|http://dalailama.mn +.dalailama.ru +||dalailama.ru +dalailama80.org +.dalailama-archives.org +.dalailamacenter.org +|http://dalailamacenter.org +dalailamafellows.org +.dalailamafilm.com +.dalailamafoundation.org +.dalailamahindi.com +.dalailamainaustralia.org +.dalailamajapanese.com +.dalailamaprotesters.info +.dalailamaquotes.org +.dalailamatrust.org +.dalailamavisit.org.nz +.dalailamaworld.com +||dalailamaworld.com +dalianmeng.org +||dalianmeng.org +.daliulian.org +||daliulian.org +.danke4china.net +||danke4china.net +daolan.net +||darrenliuwei.com +||dashlane.com +||daum.net +.david-kilgour.com +|http://david-kilgour.com +daxa.cn +||daxa.cn +.daylife.com/topic/dalai_lama +||db.tt +||dbgjd.com +||dcard.tw +dcmilitary.com +||ddc.com.tw +||deadhouse.org +||deadline.com +||deepai.org +||decodet.co + +!--Origin:cdn-i30$_ +!--Exception: Homepage access without rst +!--Keyword is $_ +.definebabe.com + +||delcamp.net +delicious.com/GFWbookmark +.democrats.org +||democrats.org +.demosisto.hk +||demosisto.hk +||desc.se +||dessci.com +.destroy-china.jp +||deutsche-welle.de +||deviantart.com +||deviantart.net +||devio.us +||devpn.com +||devv.ai +dfn.org +dharmakara.net +.dharamsalanet.com +.diaoyuislands.org +||diaoyuislands.org +.difangwenge.org +|http://digiland.tw/ +.diigo.com +||diigo.com +.dipity.com +||directcreative.com +!--||discogs.com +!--@@||cdn.discogs.com +.discuss.com.hk +||discuss.com.hk +.discuss4u.com +||disp.cc +.disqus.com +||disqus.com +.dit-inc.us +||dit-inc.us +||diyin.org +.dizhidizhi.com +||dizhuzhishang.com +djangosnippets.org +||dl-laby.jp +||dlive.tv +||dlsite.com +||dlyoutube.com +||dmc.nico +||dmcdn.net +.dnscrypt.org +||dnscrypt.org +||dns2go.com +||dnssec.net +doctorvoice.org + +!--DogFartNetwork +.dogfartnetwork.com/tour +gloryhole.com + +.dojin.com +||dolc.de +||dolf.org.hk +.domain.club.tw +.domaintoday.com.au +chinese.donga.com +dongtaiwang.com +||dongtaiwang.com +.dongtaiwang.net +||dongtaiwang.net +.dongyangjing.com +||danbooru.donmai.us +.dontfilter.us +||doosho.com +||doourbest.org +.dorjeshugden.com +.dotplane.com +||dotplane.com +||dotsub.com +.dotvpn.com +||dotvpn.com +.doub.io +||doub.io +||doublethinklab.org +||dougscripts.com +||doujincafe.com +|https://bartender.dowjones.com +dphk.org +dpp.org.tw +||dpp.org.tw +||dpr.info +||dragonsprings.org +!--||draw.io +.dreamamateurs.com +.drepung.org +||drgan.net +||dropbooks.tv +||dropbox.com +||dropboxapi.com +||dropboxusercontent.com +.drtuber.com +.dscn.info +|http://dscn.info +.dstk.dk +|http://dstk.dk +||dtiblog.com +||dtic.mil +.duckduckgo.com +||duckduckgo.com +.duckload.com/download +||duckmylife.com +.duga.jp +|http://duga.jp +.duihua.org +||duihua.org +||duihuahrjournal.org +duping.net +||duplicati.com +dupola.com +dupola.net +.dushi.ca +||duyaoss.com +||dvorak.org +.dw.com +||dw.com +||dw.de +.dw-world.com +||dw-world.com +.dw-world.de +|http://dw-world.de +www.dwheeler.com +dwnews.com +||dwnews.com +dwnews.net +||dwnews.net +xys.dxiong.com +||dynawebinc.com +||dysfz.cc +.dzze.com + +!--------------------EE------------------------- +||e621.net +||edx-cdn.org +||everipedia.org +||epochtimes.com.tw +||etherscan.com +||elconfidencial.com +||e-classical.com.tw +||e-gold.com +.e-gold.com +.e-hentai.org +||e-hentai.org +.e-hentaidb.com +|http://e-hentaidb.com +e-info.org.tw +.e-zone.com.hk/discuz +|http://e-zone.com.hk/discuz +.e123.hk +||e123.hk +.earlytibet.com +|http://earlytibet.com +.earthcam.com +.earthvpn.com +||earthvpn.com +||eastasiaforum.org +.easternlightning.org +.eastturkestan.com +|http://www.eastturkistan.net/ +.eastturkistan-gov.org +.eastturkistancc.org +.eastturkistangovernmentinexile.us +||eastturkistangovernmentinexile.us +.easyca.ca +.easypic.com +||fnc.ebc.net.tw +||news.ebc.net.tw +.ebony-beauty.com +ebookbrowse.com +ebookee.com +||ecfa.org.tw +||ecimg.tw +ecministry.net +.economist.com +bbs.ecstart.com +edgecastcdn.net +||edgecastcdn.net +/twimg\.edgesuite\.net\/\/?appledaily/ +edicypages.com +.edmontonchina.cn +.edmontonservice.com +edoors.com +.edubridge.com +||edubridge.com +.edupro.org +||eevpn.com +efcc.org.hk +.efukt.com +|http://efukt.com +||eic-av.com +||eireinikotaerukai.com +.eisbb.com +.eksisozluk.com +||eksisozluk.com +electionsmeter.com +||elgoog.im +.elpais.com +||elpais.com +.eltondisney.com +.emaga.com/info/3407 +emilylau.org.hk +.emanna.com/chineseTraditional +.empfil.com +.emule-ed2k.com +|http://emule-ed2k.com +.emulefans.com +|http://emulefans.com +.emuparadise.me +.enanyang.my +!--.enanyang.my/news/20170502/%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3%E5%A4%A7%E5%9C%B0%E9%9C%87%E3%80%8A%E8%8B%B9%E6%9E%9C%E3%80%8B%E7%8B%AC%E5%AE%B6 +||encrypt.me +||enewstree.com +.enfal.de +||chinese.engadget.com +englishforeveryone.org +||englishfromengland.co.uk +englishpen.org +.enlighten.org.tw +||entermap.com +.episcopalchurch.org +.epochhk.com +||epochhk.com +epochtimes-bg.com +||epochtimes-bg.com +epochtimes-romania.com +||epochtimes-romania.com +epochtimes.co.il +||epochtimes.co.il +epochtimes.co.kr +||epochtimes.co.kr +epochtimes.com +||epochtimes.com +.epochtimes.cz +||epochtimes.de +||epochtimes.fr +||epochtimes.it +||epochtimes.jp +||epochtimes.ru +||epochtimes.se +||epochtimestr.com +.epochweek.com +||epochweek.com +||epochweekly.com +||eporner.com +.equinenow.com +erabaru.net +.eracom.com.tw +.eraysoft.com.tr +.erepublik.com +.erights.net +||erights.net +||ernestmandel.org +||erodaizensyu.com +||erodoujinlog.com +||erodoujinworld.com +||eromanga-kingdom.com +||eromangadouzin.com +.eromon.net +|http://eromon.net +.eroprofile.com +.eroticsaloon.net +.eslite.com +||eslite.com +.etaa.org.au +.etadult.com +etaiwannews.com +||etizer.org +||etokki.com +||etsy.com +.ettoday.net +etvonline.hk +.eucasino.com +.eulam.com +.eurekavpt.com +||eurekavpt.com +.euronews.com +||euronews.com +eeas.europa.eu/delegations/china/press_corner/all_news/news/2015/20150716_zh +eeas.europa.eu/statements-eeas/2015/151022 +||apps.evozi.com +||evschool.net +||exblog.jp +@@||www.exblog.jp +.exchristian.hk +||exchristian.hk +|http://blog.excite.co.jp +||exhentai.org +||exmormon.org +||expatshield.com +.expecthim.com +||expecthim.com +experts-univers.com +||exploader.net +.expressvpn.com +||expressvpn.com +.extremetube.com +eyevio.jp +||eyevio.jp +.eyny.com +||eyny.com +.ezpeer.com + +!--------------------FF------------------------- +||feedly.com +||fuckccp.xyz +||fuckccp.com +||furrybar.com +||forbes.com +||financialexpress.com +||fast.com +||factchecklab.org +||ft.com +||fuchsia.dev +||freess.org +||fril.jp +||free.com.tw +||froth.zone +||fanbox.cc +||free.bg +||f-droid.org +||facebookquotes4u.com +.faceless.me +||faceless.me +|http://facesoftibetanselfimmolators.info +||facesofnyfw.com +||factpedia.org +.faith100.org +|http://faith100.org + +!--Enhancement: +!--http://faithfuleye.com.detail.website/ +!--http://faithfuleye.com.ipaddress.com/ +.faithfuleye.com + +||faiththedog.info +.fakku.net +||fallenark.com +.falsefire.com +||falsefire.com +falun-co.org +falunart.org +||falunasia.info +|http://falunau.org +.falunaz.net +falundafa.org +falundafa-dc.org +||falundafa-florida.org +||falundafa-nc.org +||falundafa-pa.net +falun-ny.net +||falundafaindia.org +falundafamuseum.org +.falungong.club +.falungong.de +falungong.org.uk +||falunhr.org +faluninfo.de +faluninfo.net +.falunpilipinas.net +familyfed.org +.fangeming.com +||fanglizhi.info +||fangong.org +fangongheike.com +||fanhaolou.com +.fanqiang.tk +fanqianghou.com +||fanqianghou.com +.fanqiangzhe.com +||fanqiangzhe.com +||fantv.hk +fapdu.com +faproxy.com +!--.farxian.com +.fawanghuihui.org +||famunion.com +.fan-qiang.com +fangeming.com +.fanhaodang.com +||fanqiang.network +||fanswong.com +.fanyue.info +.farwestchina.com + +!--Fastly +en.favotter.net +!--||rnw.global.ssl.fastly.net +.global.ssl.fastly.net +||freetls.fastly.net +nytimes.map.fastly.net +||nytimes.map.fastly.net +||fast.wistia.com + +||fastestvpn.com +||fastssh.com +||faststone.org +favstar.fm +||favstar.fm +faydao.com/weblog +||faz.net +.fc2.com +.fc2china.com +.fc2cn.com +||fc2cn.com +fc2blog.net +|http://uygur.fc2web.com/ +.fdc64.de +.fdc64.org +.fdc89.jp +!--feedbooks.mobi +||feeder.co +||feelssh.com +feer.com +|http://feitianacademy.org +.feitian-california.org +||feixiaohao.com +||feministteacher.com +.fengzhenghu.com +||fengzhenghu.com +.fengzhenghu.net +||fengzhenghu.net +.fevernet.com +|http://ff.im +fffff.at +fflick.com +.ffvpn.com +fgmtv.net +.fgmtv.org +.fhreports.net +|http://fhreports.net +.figprayer.com +||figprayer.com +.fileflyer.com +||fileflyer.com +|http://feeds.fileforum.com +.fileserve.com/file +fillthesquare.org +filmingfortibet.org +.filthdump.com +.finchvpn.com +||finchvpn.com +!--findbook.tw +findmespot.com +||findyoutube.com +||findyoutube.net +.fingerdaily.com +.firearmsworld.net +|http://firearmsworld.net +||relay.firefox.com +||fireofliberty.info +||fireofliberty.org +.firetweet.io +||firetweet.io +||open.firstory.me +||firstpost.com +||firstrade.com +||fish.audio +!--||flagfox.net +.flagsonline.it +fleshbot.com +.fleursdeslettres.com +|http://fleursdeslettres.com +||flgjustice.org + +!--||farm6.staticflickr.com +!--.flickr.com/photos/46231077@N06 +!--.flickr.com/groups/aiweiwei +!--.flickr.com/photos/digitalboy100 +!--.flickr.com/photos/fzhenghu +!--.flickr.com/photos/lonelyfox +!--flickr.com/photos/vanvan/529925157 +!--.flickr.com/photos/winterkanal +!--.flickr.com/photos/zola +||flickr.com +||staticflickr.com + +flickrhivemind.net +.flickriver.com +.fling.com +||flipkart.com +||flog.tw +||flowhongkong.net +.flyvpn.com +||flyvpn.com +|http://cn.fmnnow.com +blog.foolsmountain.com +.forum4hk.com +fangong.forums-free.com +pioneer-worker.forums-free.com +!--foursquare.com +!--|http://4sq.com +|https://ss*.4sqi.net +video.foxbusiness.com +|http://foxgay.com +||fringenetwork.com +||flecheinthepeche.fr +.fochk.org +||fochk.org +||focustaiwan.tw +.focusvpn.com +||fofg.org +.fooooo.com +||fooooo.com +||foreignaffairs.com +||fountmedia.io +||fourthinternational.org +||foxsub.com +foxtang.com +.fpmt.org +|http://fpmt.org +.fpmt.tw +.fpmt-osel.org +||fpmtmexico.org +||fqrouter.com +||frank2019.me +||franklc.com +.freakshare.com +|http://freakshare.com +free-gate.org +.free-hada-now.org +free-proxy.cz +.free.fr/adsl +kineox.free.fr +tibetlibre.free.fr +||freebrowser.org +.freechal.com +.freedomhouse.org +||freedomhouse.org +.freedomsherald.org +||freedomsherald.org +||freegao.com +freeilhamtohti.org +||freekazakhs.org +.freelotto.com +||freelotto.com +freeman2.com +.freeopenvpn.com +freemoren.com +freemorenews.com +freemuse.org/archives/789 +freenet-china.org +freenewscn.com +cn.freeones.com +.freeoz.org/bbs +||freeoz.org +||freessh.us +||freebeacon.com +.freechina.news +||freechinaweibo.com +.freedomcollection.org/interviews/rebiya_kadeer +.freeforums.org +||freenetproject.org +.freeoz.org +.freetibet.net +||freetibet.org +.freetibetanheroes.org +|http://freetibetanheroes.org +||freetribe.me +.freeviewmovies.com +.freevpn.me +|http://freevpn.me +||freewallpaper4.me +.freewebs.com +.freewechat.com +||freewechat.com +freeweibo.com +||freeweibo.com +.freexinwen.com +||freezhihu.org +||friendfeed.com +||friends-of-tibet.org +.friendsoftibet.org +||friendsoftibet.org +freechina.net +|http://www.zensur.freerk.com/ +freevpn.nl +freeyellow.com +hk.frienddy.com/hk +|http://adult.friendfinder.com/ +.fring.com +||fring.com +.fromchinatousa.net +||frommel.net +.frontlinedefenders.org +||frontlinedefenders.org +.frootvpn.com +||frootvpn.com +||fscked.org +.fsurf.com +.ftv.com.tw +||ftv.com.tw +||ftvnews.com.tw +fucd.com +fuckgfw.org +.fulione.com +|https://fulione.com +||fullerconsideration.com +||fullservicegame.com +.funf.tw +funp.com +.fuq.com +.furhhdl.org +||furinkan.com +.futurechinaforum.org +||futuremessage.org +.fux.com +.fuyindiantai.org +.fuyu.org.tw +||fw.cm +.fxcm-chinese.com +||fxcm-chinese.com + +!--------------------GG------------------------- +||gitlab.net +|http://gmp4.com +||getsession.org +||gdaily.org +||gfwatch.org +||go-to-zlibrary.se +||gitbook.io +.g6hentai.com +|http://g6hentai.com +||g-queen.com +||gab.com +||gabocorp.com +.gaeproxy.com +.gaforum.org +.gagaoolala.com +||gagaoolala.com +.galaxymacau.com +||galenwu.com +.galstars.net +||game735.com +gamebase.com.tw +gamejolt.com +|http://wiki.gamerp.jp +||gamer.com.tw +.gamer.com.tw +.gamez.com.tw +||gamez.com.tw +.gamousa.com +.gaoming.net +||gaoming.net +ganges.com +||ganjing.com +||ganjingworld.com +.gaopi.net +|http://gaopi.net +gardennetworks.com +||gardennetworks.org +!--IP of Garden Network +72.52.81.22 +||gartlive.com +||gather.com +.gatherproxy.com +.gaybubble.com +.gaycn.net +.gayhub.com +||gaymap.cc +.gaymenring.com +.gaytube.com +!--||gaytube.com +||images-gaytube.com +.gaywatch.com +|http://gaywatch.com +.gazotube.com +||gazotube.com +||gcc.org.hk +||gclubs.com +||gcmasia.com +.gcpnews.com +|http://gcpnews.com +gdzf.org +||geek-art.net +geekerhome.com/2010/03/xixiang-project-cross-gfw +.gekikame.com +|http://gekikame.com +.gelbooru.com +|http://gelbooru.com +||generated.photos +||genius.com +!--||genuitec.com +.geocities.co.jp +.geocities.com/SiliconValley/Circuit/5683/download.html +hk.geocities.com +geocities.jp +||geph.io +.gerefoundation.org +||getastrill.com +.getchu.com +.getcloak.com +||getcloak.com +||getfoxyproxy.org +||getgom.com +.geti2p.net +||geti2p.net +getiton.com +.getjetso.com/forum +.getlantern.org +||getlantern.org +||getmalus.com +.getsocialscope.com +||getsync.com +||gettr.com +gfbv.de +.gfsale.com +||gfsale.com +.gfw.press +||gfw.press +||gfw.report +.ggssl.com +||ggssl.com +!--||ghost.org +.ghostpath.com +||ghostpath.com +||ghut.org +.giantessnight.com +|http://giantessnight.com +.gifree.com +||giga-web.jp +tw.gigacircle.com +gigporno.ru +||girlbanker.com +.git.io +||git.io +|http://softwaredownload.gitbooks.io +||raw.githack.com + +!---GitHub--- +||github.blog +||github.com +||githubcopilot.com +!--github.com/getlantern +!--|https://gist.github.com +!--http://cthlo.github.io/hktv +!--hahaxixi.github.io +!--|https://hahaxixi.github.io +!--||haoel.github.io +!--|http://onionhacker.github.io +!--||rg3.github.io +!--||sikaozhe1997.github.io +!--||sodatea.github.io +!--||terminus2049.github.io +!--||toutyrater.github.io +!--wsgzao.github.io +!--|https://wsgzao.github.io +.github.io +||github.io +||githubusercontent.com +||githubassets.com + +.gizlen.net +||gizlen.net +.gjczz.com +||gjczz.com +||glarity.app +||globaljihad.net +globalmediaoutreach.com +globalmuseumoncommunism.org +||globalrescue.net +.globaltm.org +.globalvoicesonline.org +||globalvoicesonline.org +||globalvpn.net +.glock.com +gluckman.com/DalaiLama +||gmgard.com +|http://www.gmiddle.com +|http://www.gmiddle.net +.gmll.org +||suche.gmx.net +||gnci.org.hk +||gnews.org +||goagent.biz +||godaddy.com +godfootsteps.org +||godfootsteps.org +godsdirectcontact.co.uk +.godsdirectcontact.org +godsdirectcontact.org.tw +.godsimmediatecontact.com +||gofundme.com +||gohappy.com.tw +.gokbayrak.com +.goldbet.com +||goldbetsports.com +||golden-ages.org +||goldeneyevault.com +.goldenfrog.com +||goldenfrog.com +.goldstep.net +||goldwave.com +||gongm.in +blog.goo.ne.jp/duck-tail_2009 +good.news +.gooday.xyz +||gooday.xyz +||goodhope.school +||goodnewsnetwork.org +.goodreads.com +||goodreads.com +.goodreaders.com +||goodreaders.com +.goodtv.com.tw +.goodtv.tv +||goofind.com +.gopetition.com +||gopetition.com +||goreforum.com +||gotquestions.org +.gotrusted.com +||gotrusted.com +||gotw.ca +||grammaly.com +grandtrial.org +.graphis.ne.jp +||graphis.ne.jp +||graphql.org +||gravatar.com +greatfirewall.biz +.greatfirewallofchina.org +||greatfirewallofchina.org +.greenparty.org.tw +||greenpeace.org +.greenreadings.com/forum +||greasyfork.org +greatroc.org +greatzhonghua.org +.greenpeace.com.tw +.greenvpn.net +||greenvpn.net +.greenvpn.org +||grindr.com +||ground.news +gs-discuss.com +||gsearch.media +||gtricks.com +guancha.org +.guardster.com +.gun-world.net +gunsandammo.com +||gutteruncensored.com +||gvm.com.tw +||gwins.org +.gzm.tv +||gzone-anime.info + +!-------------GHS----- +!-||feeds.cbsnews.com +!-||www.chinesealbumart.com +||clementine-player.org +!-||clemesha.org +!-||www.cloudgirlfriend.com +!-||cocoawithlove.com +!-||blog.controlspace.org +!-D +!-||www.dailygyan.com +!-||dailytodo.org +!-||blog.danmarner.com +!-||github.danmarner.com +!-||design-seeds.com +!-||designers-artists.com +!-||mail.diyang.org +!-||blog.doughellmann.com +!-||downforeveryoneorjustme.com +!-||droidsecurity.com +!-||www.dropmocks.com +!-||dumblittleman.com +!-E +echofon.com +!-||echofon.com +!-||epc-jav.com +!-||everdark.info +!-||evhead.com +!-F +!-||facilelogin.com +!-||*.fatduck.org +!-||blog.fdcn.org +!-||fftogo.com +!-||flightsimtalk.com +!-||mclee.foolme.net +!-||www.frienddeck.com +!-||fringespoilers.com +!-||fringetelevision.com +!-||funpea.com +!-G +!-||blog.gatein.org +!-||feeds.gawker.com +!-||geektang.com +!-||geohot.us +!-||getaround.com +!-||gmer.net +!-||www.gmote.org +!-||blog.go2web20.net +!-||google-melange.com +!-||fame.gonzolabs.org +!-||govecn.org +!-||gqueues.com +!-||graphycalc.com +!-||blog.growlforwindows.com +!-H +!-||hcm.com.tw +!-||blog.headius.com +!-||hogbaysoftware.com +!-||blog.hotot.org +!-||feeds.howstuffworks.com +!-||huhaitai.com +!-||blog.humanrightsfirst.org +!-I +!-||site.icu-project.org +!-||igorware.com +!-||ihas1337code.com +!-||inknouveau.com +!-||inote.tw +!-||ironhelmet.com +!-||iwfwcf.com +!-J +!-||blog.jangmt.com +!-||blog.jayfields.com +!-||blog.joint.net +!-||blog.jsquaredjavascript.com +!-||blog.jtbworld.com +!-K +!-||kathyschwalbe.com +!-||tomatovpn.keithmoyer.com +!-||www.keithmoyer.com +!-||kendalvandyke.com +!-||blog.kengao.tw +!-||log.keso.cn +!-||www.khanacademy.org +||www.klip.me +!-||usbloadergx.koureio.net +!-||blog.kowalczyk.info +!-L +!-||labyrinth2.com +!-||larsgeorge.com +!-||blog.lastpass.com +!-||docs.latexlab.org +!-||leanessays.com +!-||blog.lidaobing.info +!-||log.lightory.net +!-||feeds.limi.net +!-||www.liteapplications.com +!-||blog.liukangxu.info +!-||twitter.liukangxu.info +!-||oasisnewsroom.live4ever.us +!-||www.lockergnome.com +!-||locql.com +@@||site.locql.com +!-||feeds.loiclemeur.com +!-||blog.louisgray.com +!-M +!-||madebysofa.com +!-||mademoisellerobot.com +!-||masamixes.com +!-||www.metamuse.net +!-||blog.metasploit.com +!-||milazi.com +!-||www.miniweather.com +!-||twitter.missiu.com +!-||plurktop-button.mmdays.com +!-||feeds.mobileread.com +!-||www.modernizr.com +!-||www.modk.it +!-||mytwishirt.com +!-N +!-||blog.netflix.com +!-||blog.nihilogic.dk +!-||ntlk.org +!-||nvquan.org +!-||nogoodatcoding.com +!-||blog.notdot.net +!-||www.notify.io +!-O +!-||blog.obvious.com +!-||onebigfluke.com +!-||overstimulate.com +!-P +!-||pcgeekblog.com +!-||feeds.pdfchm.net +!-||feeds.people.com +!-||blog.persistent.info +!-||chrome.plantsvszombies.com +!-||portablesoft.org.ru +!-||prasannatech.net +!-||talk.news.pts.org.tw +!-||python-excel.org +!-Q +!-R +!-||r-chart.com +!-||rameshsubramanian.org +!-||rapid.pk +!-||blog.renanse.com +!-||robertmao.com +!-||www.romeo-foxtrot.com +!-S +!-||salmiyuck.com +!-||samsal.com +!-||blog.seeminglee.com +!-||blog.sflow.com +!-||blog.sigfpe.com +!-||simpletext.ws +!-||www.skulpt.org +!-||rss.slashdot.org +!-||snippetsapp.com +!-||w.sns.ly +!-||www.socialnmobile.com +!-||www.socialwhois.com +!-||spiritjb.org +!-||ssbook.com +!-||sshforwarding.com +!-||stationeria.com +||stephaniered.com +!-||sunjidong.net +!-||syniumsoftware.com +@@||download.syniumsoftware.com +!-T +!-||tagxedo.com +!-||blog.tatoeba.org +!-||www.techfob.com +!-||teachparentstech.org +!-||the8pen.com +!-||theiphonewiki.com +!-||blog.thesilentnumber.me +!-||thesponty.com +!-||theultralinx.com +!-||blog.think-async.com +!-||tornadoweb.org +!-||transparentuptime.com +!-||triangulationblog.com +!-||blog.tsunanet.net +!-||en.tuxero.com +!-||twazzup.com +!-||tweetswell.com +!-||twibes.com +!-||art.twgg.org +!-||twivert.com +!-U +|http://ub0.cc +!-||jonny.ubuntu-tw.net +!-||blog.umonkey.net +!-V +!-||tp.vbap.com.au +!-||www.virtuousrom.com +!-||blog.visibotech.com +!-W +!-||waveprotocol.org +!-||www.wavesandbox.com +!-||webfee.org.ru +!-||blog.webmproject.org +!-||webupd8.org +!-||www.whatbrowser.org +!-||www.wheredoyougo.net +!-||willhains.com +!-||feeds.wired.com +!-||wisemapping.org +wozy.in +!-||wozy.in/ +!-||blog.wundercounter.com +!-X +!-||xdelta.org +!-||xiaogaozi.org +!-||xilou.us +!-||xzy.org.ru +!-Y +!-||yooper.be +!-||tsong.yunxi.net +!-Z + +gospelherald.com +||gospelherald.com +|http://hk.gradconnection.com/ +greatfire.org +||greatfire.org +greatfirewallofchina.org +||gtv.org +||gtv1.org +.gu-chu-sum.org +|http://gu-chu-sum.org +.guaguass.com +|http://guaguass.com +.guangming.com.my +guishan.org +||guishan.org +.gumroad.com +||gumroad.com +||gunsamerica.com +guruonline.hk +|http://gvlib.com +.gyalwarinpoche.com +.gyatsostudio.com + +!--------------------HH------------------------- +||herominers.com +||hinet.net +||hindustantimes.com +||hanime1.me +||halktv.com.tr +||haiwaikan.com +||home.saxo +||hoy.tv +.h528.com +.h5dm.com +.h5galgame.me +||h-china.org +.h-moe.com +|http://h-moe.com +h1n1china.org +.hacken.cc/bbs +.hacker.org +||hackmd.io +||hackthatphone.net +hahlo.com +||haijiao.com +||hakkatv.org.tw +.handcraftedsoftware.org +|http://bbs.hanminzu.org/ +.hao.news/news +|http://ae.hao123.com +|http://ar.hao123.com +|http://br.hao123.com +|http://en.hao123.com +|http://id.hao123.com +|http://jp.hao123.com +|http://ma.hao123.com +|http://mx.hao123.com +|http://sa.hao123.com +|http://th.hao123.com +|http://tw.hao123.com +|http://vn.hao123.com +|http://hk.hao123img.com +|http://ld.hao123img.com +.haproxy.org +||hardsextube.com +||b.hatena.ne.jp +have8.com +@@||haygo.com +.hclips.com +||hdtvb.net +.hdzog.com +|http://hdzog.com +||ordns.he.net +||heartyit.com +.heavy-r.com +.hec.su +|http://hec.su +.hecaitou.net +||hecaitou.net +.hechaji.com +||hechaji.com +||heeact.edu.tw +.hegre-art.com +|http://hegre-art.com +||cdn.helixstudios.net +||helloandroid.com +||helloqueer.com +.hentai.to +.hellouk.org/forum/lofiversion +.helpeachpeople.com +||helpeachpeople.com +||helpster.de +.helpzhuling.org +hentaitube.tv +.hentaivideoworld.com + +!###########--Heroku--########## +!--||getcloudapp.com +!--||cl.ly +!--@@||f.cl.ly +!--EC2 DNS Poisoned +||id.heroku.com +||herokuapp.com + +||heqinglian.net +||heritage.org +.hexieshe.com +||hexieshe.com +||hexieshe.xyz +!--Google employee within Google IP +||hexxeh.net +||heyuedi.com +.heyzo.com +.hgseav.com +.hhdcb3office.org +.hhthesakyatrizin.org +hi-on.org.tw +||hiccears.com +hidden-advent.org +||hidden-advent.org +hidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html +||hide.me +.hideipvpn.com +||hideipvpn.com +.hideman.net +||hideman.net +hideme.nl +||hidemy.name +.hidemyass.com +||hidemyass.com +hidemycomp.com +||hidemycomp.com +.higfw.com +highpeakspureearth.com +||highrockmedia.com +||hiitch.com +||hikinggfw.org +.hilive.tv +.himalayan-foundation.org +||himalayan-foundation.org +himalayanglacier.com +.himemix.com +||himemix.com +.hitomi.la +|http://hitomi.la +.hiwifi.com +@@||hiwifi.com +hizbuttahrir.org +hizb-ut-tahrir.info +hizb-ut-tahrir.org +.hjclub.info +.hk-pub.com/forum +|http://hk-pub.com +.hk01.com +||hk01.com +||hkacg.com +||hkacg.net +.hkatvnews.com +hkbc.net +.hkbf.org +.hkbookcity.com +||hkbookcity.com +||hkchronicles.com +.hkchurch.org +hkci.org.hk +.hkcmi.edu +||hkcnews.com +||hkcoc.com +hkday.net +.hkdailynews.com.hk/china.php +||hkdc.us +hkdf.org +.hkej.com +.hkepc.com/forum/viewthread.php?tid=1153322 +||hket.com +||hkfaa.com +hkfront.org +m.hkgalden.com +|https://m.hkgalden.com +||hkgpao.com +.hkheadline.com*blog +.hkheadline.com/instantnews +hkhkhk.com +hkhrc.org.hk +hkjc.com +.hkjp.org +.hklft.com +.hklts.org.hk +||hklts.org.hk +||hkmap.live +||hkopentv.com +||hkpeanut.com +hkptu.org +.hkreporter.com +||hkreporter.com +.hmv.co.jp/ +hnjhj.com +||hnjhj.com +.hnntube.com +||hojemacau.com.mo +||hola.com +||hola.org +holyspiritspeaks.org +||holyspiritspeaks.org +.homeperversion.com +|http://homeservershow.com +|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html +.hongkongfp.com +||hongkongfp.com +hongmeimei.com +||hongzhi.li +||honven.xyz +.hootsuite.com +||hootsuite.com +||hoover.org +.hopto.org +.hornygamer.com +.hornytrip.com +|http://hornytrip.com +||horrorporn.com +||hostloc.com +||hotair.com +.hotav.tv +.hotels.cn +hotfrog.com.tw +hotgoo.com +hotpot.hk +.hotshame.com +||hotspotshield.com +||hottg.com +.hotvpn.com +||hotvpn.com +||howtoforge.com +||hoxx.com +||hpjav.com +.hqcdp.org +||hqcdp.org +||hqjapanesesex.com +hqmovies.com +.hrcchina.org +.hrea.org +.hrichina.org +||hrichina.org +||hrntt.org +.hrtsea.com +.hrw.org +||hrw.org +hrweb.org +||hsex.men +||hsjp.net +||hsselite.com +||hst.net.tw +.hstern.net +.hstt.net +.htkou.net +||htkou.net +.huaglad.com +||huaglad.com +.huanghuagang.org +||huanghuagang.org +.huangyiyu.com +.huaren.us +||huaren.us +.huaren4us.com +.huashangnews.com +|http://huashangnews.com +bbs.huasing.org +huaxiabao.org +huaxin.ph +||huayuworld.org +||huffingtonpost.com +||huffpost.com +||huggingface.co +||hugoroy.eu +||huhaitai.com +||huhamhire.com +.huhangfei.com +||huhangfei.com +.hulkshare.com +||humanparty.me +||humanrightspressawards.org +||hung-ya.com +||huping.net +hurgokbayrak.com +.hurriyet.com.tr +.hut2.ru +||hutianyi.net +hutong9.net +huyandex.com +.hwadzan.tw +||hwayue.org.tw +||hxwk.org +hxwq.org +||hyperrate.com +||hypothes.is +ebook.hyread.com.tw +||ebook.hyread.com.tw + +!--------------------II------------------------- +||ipify.org +@@||*.ipify.org +||itiger.com +||itch.io +||infura.io +||president.ir +||gov.ir +||irna.ir +||arvanstorage.ir +||irangov.ir +||india.com +||indiatoday.in +||invidio.us +||improd.works +||illawarramercury.com.au +||imago-images.com +||i2p2.de +||i818hk.com +.i-cable.com +.i-part.com.tw +.iamtopone.com +iask.ca +||iask.ca +.iav19.com +||iavian.net +ibiblio.org/pub/packages/ccic +ibros.org +.ibvpn.com +||ibvpn.com +icams.com +||icedrive.net +.icij.org +||icij.org +||icl-fi.org +.icoco.com +||icoco.com + +!--38.103.165.50 +||furbo.org +!--||iconfactory.com + +||iconpaper.org +!-- Google Pages +||icu-project.org +w.idaiwan.com/forum +idemocracy.asia +.identi.ca +||identi.ca +||idiomconnection.com +|http://www.idlcoyote.com +||idope.se +.idouga.com +.idv.tw +.ied2k.net +.ienergy1.com +||ift.tt +.ifcss.org +||ifcss.org +ifjc.org +.ift.tt +|http://ift.tt +||ifreewares.com +||igcd.net +.igfw.net +||igfw.net +.igmg.de +.igotmail.com.tw +||igvita.com +.ihao.org/dz5 +||iicns.com +.ikstar.com +||ilhamtohtiinstitute.org +||illusionfactory.com +||ilove80.be +||im88.tw +||imgchili.net +.imageab.com +.imagefap.com +||imagefap.com +||imageflea.com +||imageglass.org +||imageshack.us +||imagevenue.com +||imagezilla.net +.imb.org +|http://imb.org + +!--IMDB +|http://www.imdb.com/name/nm0482730 +.imdb.com/title/tt0819354 +.imdb.com/title/tt1540068 +.imdb.com/title/tt4908644 + +.img.ly +||img.ly +||imgasd.com +.imgur.com +||imgur.com +.imkev.com +||imkev.com +.imlive.com +.immoral.jp +impact.org.au +in99.org +in-disguise.com +.incapdns.net +.incloak.com +||incloak.com +||incredibox.fr +||independent.co.uk +||indiablooms.com +||indiandefensenews.in +||indianarrative.com +||timesofindia.indiatimes.com +.indiemerch.com +||indiemerch.com +||info-graf.fr +website.informer.com +||inherit.live +||initiativesforchina.org +||inkbunny.net +||inkui.com +||inmediahk.net +||inmediahk.net +||inoreader.com +||inote.tw +||insecam.org +|http://insecam.org +||inside.com.tw +||insidevoa.com +||institut-tibetain.org +||interactivebrokers.com +||internet.org +internetdefenseleague.org +||internetfreedom.org +!--||interpol.int +||internetpopculture.com +.inthenameofconfuciusmovie.com +||inthenameofconfuciusmovie.com +inxian.com +||inxian.com +!--||ipcf.org.tw +||ipdefenseforum.com +||ipfire.org +||iphone4hongkong.com +||iphonetaiwan.org +||iphonix.fr +||ipicture.ru +.ipjetable.net +||ipjetable.net +.ipobar.com/read.php? +ipoock.com/img +.iportal.me +|http://iportal.me +||ippotv.com +.ipredator.se +||ipredator.se +.iptv.com.tw +||iptvbin.com +||ipvanish.com +iredmail.org +chinese.irib.ir +||ironpython.net +.ironsocket.com +||ironsocket.com +.is.gd +||ishr.ch +.islahhaber.net +.islam.org.hk +|http://islam.org.hk +.islamawareness.net/Asia/China +.islamhouse.com +||islamhouse.com +.islamicity.com +.islamicpluralism.org +.islamtoday.net +.isaacmao.com +||isaacmao.com +||isgreat.org +||ismaelan.com +.ismalltits.com +||ismprofessional.net +isohunt.com +||israbox.com +.issuu.com +||issuu.com +.istars.co.nz +oversea.istarshine.com +||oversea.istarshine.com +.istockphoto.com +isunaffairs.com +isuntv.com +||isupportuyghurs.org +||italiatibet.org +||itemfix.com +ithelp.ithome.com.tw +||itshidden.com +.itsky.it +.itweet.net +|http://itweet.net +.iu45.com +.iuhrdf.org +||iuhrdf.org +.iuksky.com +.ivacy.com +||ivacy.com +||ivonblog.com +.ivpn.net +||ivpn.net +||iwara.tv +||ixquick.com +.ixxx.com +.iyouport.com +||iyouport.com +||iyouport.org +.izaobao.us +.izles.net +.izlesem.org + +!--------------------JJ------------------------- +||justmysockscn.com +||justmysocks.net +||jav321.com +||javdb.com +||jifangge.com +||j.mp +||jable.tv +||blog.jackjia.com +jamaat.org +||jamestown.org +||jamyangnorbu.com +||jan.ai +||japan-whores.com +||japanhdv.com +.jav.com +.jav101.com +.jav68.tv +.javakiba.org +||javakiba.org +.javbus.com +||javbus.com +||javfinder.ai +||javfor.me +.javhd.com +.javhip.com +.javmobile.net +||javmobile.net +.javmoo.com +.javseen.com +||javseen.com +jbtalks.cc +jbtalks.com +jbtalks.my +.jdwsy.com +jeanyim.com +||jgoodies.com +.jiangweiping.com +||jiangweiping.com +||jiaoyou8.com +||jichangtj.com +.jiehua.cz +||hk.jiepang.com +||tw.jiepang.com +jieshibaobao.com +.jigglegifs.com +56cun04.jigsy.com +daodu14.jigsy.com +specxinzl.jigsy.com +wlcnew.jigsy.com +.jihadology.net +|http://jihadology.net +.jingsim.org +zhao.jinhai.de +jingpin.org +||jingpin.org +jinpianwang.com +||jinrizhiyi.news +||jitouch.com +jjgirls.com +.jkb.cc +|http://jkb.cc +jkforum.net +||jma.go.jp +||jmsc.hku.hk +.jmscult.com +|http://jmscult.com +||joachims.org +.sunwinism.joinbbs.net +||joinclubhouse.com +||jornaldacidadeonline.com.br +.journalchretien.net +||journalofdemocracy.org +.joymiihub.com +.joyourself.com +jpopforum.net +||jsdelivr.net +||fiddle.jshell.net +!--Doamin parking +.juhuaren.com +||juliereyc.com +||junauza.com +.june4commemoration.org +||bbs.junglobal.net +.juoaa.com +|http://juoaa.com +justfreevpn.com +||justhost.ru +justpaste.it +||justmysocks1.net +justtristan.com +juziyue.com +||juziyue.com +||jwmusic.org +@@||music.jwmusic.org +||cdn.jwplayer.com +.jyxf.net + +!--------------------KK------------------------- +||kingkong.com.tw +||kanald.com.tr +||kpkuang.org +||ka-wai.com +||kadokawa.co.jp +.kagyu.org +||kagyu.org.za +.kagyumonlam.org +.kagyunews.com.hk +.kagyuoffice.org +||kagyuoffice.org +||kagyuoffice.org.tw +.kaiyuan.de +.kakao.com +||kakao.com +.kankan.today +.kannewyork.com +||kannewyork.com +.kanshifang.com +||kanshifang.com +||kantie.org +kanzhongguo.com +kanzhongguo.eu +.kaotic.com +||kaotic.com +||karayou.com +.karmapa.org +.karmapa-teachings.org +||kawase.com +.kba-tx.org +.kcoolonline.com +.kebrum.com +||kebrum.com +.kechara.com +.keepandshare.com/visit/visit_page.php?i=688154 +!--||keepvid.com +.keezmovies.com +.kenengba.com +||kenengba.com +.kepard.com +||kepard.com +wiki.keso.cn/Home +||keycdn.com +.khabdha.org +||kichiku-doujinko.com +.kik.com +||kik.com +.kindleren.com +|http://kindleren.com +|http://www.kindleren.com +.kingdomsalvation.org +||kingdomsalvation.org +kinghost.com +!--.kingstone.com.tw/book/ +||kingstone.com.tw +.kink.com +.kinokuniya.com +||kinokuniya.com +killwall.com +||killwall.com +||kindle4rss.com +||kinmen.travel +.kir.jp +.kissbbao.cn +|http://kiwi.kz +||kk-whys.co.jp +!--||kmt.org.tw +.kmuh.org.tw +.knowledgerush.com/kr/encyclopedia +||knowyourmeme.com +.kobo.com +||kobo.com +.kobobooks.com +||kobobooks.com +||kodingen.com +@@||www.kodingen.com +||kompozer.net +.konachan.com +||konachan.com +.kone.com +||koolsolutions.com +.koornk.com +||koornk.com +||koranmandarin.com +.korenan2.com +||kqes.net +|http://gojet.krtco.com.tw +.ksdl.org +.ksnews.com.tw +||ktzhk.com +||kuaichedao.co +.kui.name/event +||kukuku.uk +kun.im +.kurashsultan.com +||kurtmunger.com +kusocity.com +||kwcg.ca +.kwongwah.com.my +||kwongwah.com.my +.kxsw.life +||kxsw.life +.kyofun.com +kyohk.net +||kzaobao.com +.kzeng.info +||kzeng.info + +!--------------------LL------------------------- +||luckymobile.ca +||ludepress.com +||lingualeo.com +||ldplayer.tw +||ldplayer.net +||ltn.com.tw +||litenews.hk +||www.lorenzetti.com.br +||linktr.ee +la-forum.org +ladbrokes.com +||labiennale.org +.lagranepoca.com +||lagranepoca.com +||lala.im +.lalulalu.com +.lama.com.tw +||lama.com.tw +.lamayeshe.com +|http://lamayeshe.com +.lamnia.co.uk +||lamnia.co.uk +lamrim.com +||landofhope.tv +.lanterncn.cn +|http://lanterncn.cn +.lantosfoundation.org +.laod.cn +|http://laod.cn +laogai.org +||laogai.org +||laogairesearch.org +laomiu.com +.laoyang.info +|http://laoyang.info +.laqingdan.net +||laqingdan.net +||larsgeorge.com +.lastcombat.com +|http://lastcombat.com +||lastfm.es +latelinenews.com +||lausan.hk +||le-vpn.com +.leafyvpn.net +||leafyvpn.net +||ledger.com +leeao.com.cn/bbs/forum.php +!--||leecheukyan.org +lefora.com +||left21.hk +.legalporno.com +.legsjapan.com +leisurecafe.ca +||lematin.ch +.lemonde.fr +||lenwhite.com +blog.lester850.info +||lesoir.be +.letou.com +letscorp.net +||letscorp.net +!69.16.175.42 +||cdn.assets.lfpcontent.com +.lhakar.org +|http://lhakar.org +.lhasocialwork.org +.liangyou.net +||liangyou.net +.lianyue.net +||liaowangxizang.net +.liaowangxizang.net +||liberal.org.hk +||libertysculpturepark.com +||libertytimes.com.tw +||libredd.it +||lighten.org.tw +||lightnovel.cn +||lilaoshibushinilaoshi.com +limiao.net +linkuswell.com +abitno.linpie.com/use-ipv6-to-fuck-gfw +||line.me +||line-apps.com +.linglingfa.com +||lingvodics.com +.link-o-rama.com +|http://link-o-rama.com +||linkedin.com +.linkideo.com +||linux.org.hk +linuxtoy.org/archives/installing-west-chamber-on-ubuntu +.lionsroar.com +.lipuman.com +||liquidvpn.com +||greatfire.us7.list-manage.com +||listennotes.com +||listentoyoutube.com +listorious.com +.liu-xiaobo.org +.liuhanyu.com +.liuxiaobo.net +||liuxiaobo.net +liuxiaotong.com +||liuxiaotong.com +.livedoor.jp +.liveleak.com +||liveleak.com +||livemint.com +livestream.com +||livestream.com +||livingstream.com +||livevideo.com +.livevideo.com +lizhizhuangbi.com +lkcn.net +||chat.lmsys.org +.load.to +.lobsangwangyal.com +.localdomain.ws +||localdomain.ws +localpresshk.com +||lockestek.com +secure.logmein.com +||secure.logmein.com +||logos.com.hk +.londonchinese.ca +.longhair.hk +longmusic.com +||longtermly.net +||lookpic.com +.looktoronto.com +|http://looktoronto.com +.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama +.lotuslight.org.tw +hkreporter.loved.hk +.lrip.org +||lrip.org +.lsd.org.hk +||lsd.org.hk +lsforum.net +.lsm.org +||lsm.org +.lsmchinese.org +||lsmchinese.org +.lsmkorean.org +||lsmkorean.org +.lsmradio.com/rad_archives +.lsmwebcast.com +.ltn.com.tw +||ltn.com.tw +||luckydesigner.space +.luke54.com +.luke54.org +.lupm.org +||lupm.org +||lushstories.com +luxebc.com +lvhai.org +||lvhai.org +||lvv2.com +.lyfhk.net +|http://lyfhk.net +||lzjscript.com +.lzmtnews.org +||lzmtnews.org + +!--------------------MM------------------------- +||mcusercontent.com +||metamask.io +||missav.ws +||news.mt.co.kr +||musixmatch.com +||mergersandinquisitions.com +||m.moegirl.org +||myjs.tw +||mercari.com +||mercari.jp +||mirror.xyz +||mywife.cc +||c.mi.com +||missav.com +||madou.club +||mahjongsoul.com +||mangabz.com +http://*.m-team.cc +!--m-team.cc/forum +.macrovpn.com +||mad-ar.ch +||madrau.com +||madthumbs.com +mahabodhi.org +my.mail.ru +.maiplus.com +|http://maiplus.com +.maizhong.org +makkahnewspaper.com +.mamingzhe.com +||mangmang.run +manicur4ik.ru +||manyvoices.news +.maplew.com +|http://maplew.com +||marc.info +marguerite.su +maskedip.com +.maiio.net +.mail-archive.com +.malaysiakini.com +||makemymood.com +.manchukuo.net +.maniash.com +|http://maniash.com +.mansion.com +.mansionpoker.com +!--||marines.mil +!--markmail.org*message +||martau.com +|http://blog.martinoei.com +.martsangkagyuofficial.org +|http://martsangkagyuofficial.org +maruta.be/forget +.marxist.com +||marxist.net +.marxists.org/chinese +!--||mashable.com +||matainja.com +||matrix.org +||matters.town +mayimayi.com +.maxing.jp +.mcaf.ee +|http://mcaf.ee +||mcadforums.com +mcfog.com +mcreasite.com +.md-t.org +||md-t.org +||meansys.com +.media.org.hk +.mediachinese.com +||mediachinese.com +.mediafire.com/? +.mediafire.com/download +.mediafreakcity.com +||mediafreakcity.com +.medium.com +||medium.com +.meetav.com +||meetup.com +mefeedia.com +jihadintel.meforum.org +||mega.co.nz +||mega.io +||mega.nz +||megalodon.jp +||megaproxy.com +||megurineluka.com +||meizhong.blog +||meizhong.report +.meltoday.com +.memehk.com +||memehk.com +||memes.tw +.memri.org +.memrijttm.org +||mercdn.net +.mercyprophet.org +||mercyprophet.org +.meridian-trust.org +||meridian-trust.org +.meripet.com +||meripet.com +||merit-times.com.tw +.mesotw.com/bbs +||wiki.metacubex.one +||metafilter.com +||meteorshowersonline.com +||metro.taipei +.metrohk.com.hk/?cmd=detail&categoryID=2 +||metrolife.ca +.metroradio.com.hk +||metroradio.com.hk +||mewe.com +||mgoon.com +||mgstage.com +||mh4u.org +mhradio.org +||bbs.mikocon.com +||microvpn.com +middle-way.net +.mihr.com +||mihua.org +||mikanani.me +!--IP +||mikesoltys.com +.milph.net +|http://milph.net +.milsurps.com +mimiai.net +.mimivip.com +.mindrolling.org +|http://mindrolling.org +||mingdemedia.org +.minghui.or.kr +|http://minghui.or.kr +minghui.org +||minghui.org +minghui-school.org +.mingjinglishi.com +||mingjinglishi.com +mingjingnews.com +||mingjingtimes.com +.mingpao.com +||mingpao.com +.mingpaocanada.com +.mingpaomonthly.com +|http://mingpaomonthly.com +mingpaonews.com +.mingpaony.com +.mingpaosf.com +.mingpaotor.com +.mingpaovan.com +.mingshengbao.com +.minhhue.net +.ministrybooks.org +minzhuzhongguo.org +||miroguide.com +mirrorbooks.com +||mirrormedia.mg +.mist.vip +||thecenter.mit.edu +||scratch.mit.edu +.mitbbs.com +||mitbbs.com +.mixero.com +||mixero.com +||mixi.jp +mixpod.com +.mixx.com +||mixx.com +||mizzmona.com +||mlc.ai +.mlcool.com +||mlzs.work +.mm-cg.com +||mmaaxx.com +.mmmca.com +mnewstv.com +||mobatek.net +.mobile01.com +||mobile01.com +||mobileways.de +.mobypicture.com +|http://moby.to +||mod.io +||modernchinastudies.org +||moeerolibrary.com +||moeshare.cc +.mofos.com +||mog.com +||mohu.rocks +molihua.org +||momoshop.com.tw +||mondex.org +||money-link.com.tw +|http://www.monlamit.org +||moon.fm +.moonbbs.com +||moonbbs.com +||moptt.tw +||moneydj.com +||monica.im +||monitorchina.org +||monocloud.me +bbs.morbell.com +||morningsun.org +.motherless.com +|http://motherless.com +motor4ik.ru +.mousebreaker.com +!--||movabletype.com +.movements.org +||movements.org +||moviefap.com +||www.moztw.org +.mp3buscador.com +||mpettis.com +.mpfinance.com +||mpfinance.com +.mpinews.com +||mpinews.com +mponline.hk +mrtweet.com +||mrtweet.com +news.msn.com.tw +msguancha.com +.mswe1.org +|http://mswe1.org +||mthruf.com +||mubi.com +muchosucko.com +||multiply.com +multiproxy.org +multiupload.com +.mullvad.net +||mullvad.net +.mummysgold.com +.musicade.net +.muslimvideo.com +||muzi.com +||muzi.net +||mx981.com +.my-formosa.com +.my-proxy.com +.my-private-network.co.uk +||my-private-network.co.uk +.myactimes.com/actimes +.myaudiocast.com +||myaudiocast.com +.myav.com.tw/bbs +.mybbs.us +.myca168.com +.mycanadanow.com +||bbs.mychat.to +.mychinanet.com +.mychinanews.com +||mychinanews.com +.mychinese.news +||mycnnews.com +||mykomica.org +mycould.com/discuz +.myeasytv.com +||myeclipseide.com +.myfreecams.com +.myfreepaysite.com +.myfreshnet.com +.myiphide.com +||myiphide.com +forum.mymaji.com +||mymoe.moe +||myparagliding.com +||mypopescu.com +.myreadingmanga.info +mysinablog.com +.myspace.com +!--.blogs.myspace.com +!--||blogs.myspace.com +!--vids.myspace.com/index.cfm?fuseaction=vids. +!--viewmorepics.myspace.com +||myspacecdn.com +.mytalkbox.com +.mytizi.com + +!--------------------NN------------------------- +||naver.com +||maven.neoforged.net +||nftstorage.link +||newindianexpress.com +||news18.com +||bbs.naixi.net +||nikke.hotcool.tw +||nikke-kr.com +||nikke-jp.com +||nikke-en.com +||netlify.app +||nightswatch.top +||nbyy.tv +||newthuhole.com +||naacoalition.org +||naitik.net +.nakido.com +||nakido.com +.nakuz.com/bbs +||nalandabodhi.org +||nalandawest.org +.namgyal.org +namgyalmonastery.org +.nanyang.com +||nanyang.com +.nanyangpost.com +||nanyangpost.com +.nanzao.com +!--.nanzao.com/sc/china/20223 +!--.nanzao.com/sc/hk-macau-tw +.naol.ca +.naol.cc +uighur.narod.ru +.nat.moe +||nat.moe +cyberghost.natado.com +||national-lottery.co.uk +||nationalawakening.org +||nationalinterest.org +news.nationalgeographic.com/news/2014/06/140603-tiananmen-square +||nationalreview.com +.nationsonline.org/oneworld/tibet +||line.naver.jp +||navyfamily.navy.mil +||navyreserve.navy.mil +||nko.navy.mil +||usno.navy.mil +naweeklytimes.com +||nbcnews.com +.nbtvpn.com +|http://nbtvpn.com +nccwatch.org.tw +.nch.com.tw +.ncn.org +||nchrd.org +||ncn.org +||etools.ncol.com +.nde.de +||ndi.org +.ndr.de +.ned.org +||nekoslovakia.net +||neowin.net +||netalert.me +!--bbsnew.netbig.com +.netbirds.com +netcolony.com +bolin.netfirms.com +||netflav.com +||netme.cc +||netsarang.com +netsneak.com +.network54.com +networkedblogs.com +.networktunnel.net +new-3lunch.net +.new-akiba.com +.new96.ca +.newcenturymc.com +|http://newcenturymc.com +newcenturynews.com +||newchen.com +.newchen.com +.newgrounds.com +||newhighlandvision.com +newipnow.com +.newlandmagazine.com.au +||newmitbbs.com +.newnews.ca +||news1.kr +news100.com.tw +newschinacomment.org +.newsancai.com +||newsancai.com +||newsblur.com +.newsdetox.ca +.newsdh.com +||newsmax.com +||newstamago.com +||newstapa.org +||newstatesman.com +newstarnet.com +||newsweek.com +.newtaiwan.com.tw +newtalk.tw +||newtalk.tw +||newyorker.com +newyorktimes.com +||nexon.com +.next11.co.jp +||nextdigital.com.hk +.nextmag.com.tw + +!--hk*.nextmedia.com +!--tw*.nextmedia.com +!--static*.nextmedia.com +.nextmedia.com + +||nexton-net.jp +||nexttv.com.tw +.nfjtyd.com +||co.ng.mil +||nga.mil +ngensis.com +.nhentai.net +|http://nhentai.net +.nhk-ondemand.jp +||nicovideo.jp +ninecommentaries.com +.ninjacloak.com +||ninjaproxy.ninja +nintendium.com +taiwanyes.ning.com +usmgtcg.ning.com/forum +||niusnews.com +||njactb.org +||nlfreevpn.com +||nmsl.website +||nnews.eu + +!--no-ip.com#NOIP +.ddns.net/ +||gotdns.ch +.no-ip.org +.opendn.xyz +.servehttp.com +sytes.net +.zapto.org +|http://dynupdate.no-ip.com/ + +||nobel.se +!--.nobelprize.org +!--|http://nobelprize.org +nobelprize.org/nobel_prizes/peace/laureates/1989 +nobelprize.org/nobel_prizes/peace/laureates/2010 +||nodeseek.com +||nokogiri.org +||nokola.com +noodlevpn.com +.norbulingka.org +nordvpn.com +||nordvpn.com +||nos.nl +||notepad-plus-plus.org +||now.com +||nownews.com +.nowtorrents.com +||npa.go.jp +.npnt.me +|http://npnt.me +.nradio.me +|http://nradio.me +.nrk.no +||nrk.no +.ntd.tv +||ntd.tv +.ntdtv.com +||ntdtv.com +||ntdtv.com.tw +.ntdtv.co.kr +ntdtv.ca +ntdtv.org +ntdtv.ru +ntdtvla.com +.ntrfun.com +||cbs.ntu.edu.tw +||media.nu.nl +.nubiles.net +||nuexpo.com +.nukistream.com +||nurgo-software.com +||nutaku.net +||nutsvpn.work +.nuvid.com +||nvdst.com +.nvquan.org +.nvtongzhisheng.org +|http://nvtongzhisheng.org +.nwtca.org +|http://nyaa.eu +||nyaa.si +||nybooks.com +nylon-angel.com +nylonstockingsonline.com +||nypost.com +!--nysingtao.com +.nzchinese.com + +!--------------------OO------------------------- +||oojj.de +||onevps.com +||onedrive.com +||olelive.com +||oann.com +observechina.net +.obutu.com +ocaspro.com +occupytiananmen.com +.ocreampies.com +||october-review.org +||odysee.com +||officeoftibet.com +|http://ofile.org +||ogaoga.org +twtr2src.ogaoga.org +.ogate.org +||ogate.org +www2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf +||ohmyrss.com +.oikos.com.tw/v4 +.oiktv.com +.ok.ru +||ok.ru +.okayfreedom.com +||okayfreedom.com +||okk.tw +||olevod.com +||olumpo.com +.olympicwatch.org +||omct.org +omgili.com +||omnitalk.com +||omnitalk.org +||omny.fm +||on.cc +||onedrive.live.com +||onion.city +||onion.ly +.onlinecha.com +||onlineyoutube.com +||onlygayvideo.com +.onlytweets.com +|http://onlytweets.com +onmoon.net +onmoon.com +.onthehunt.com +|http://onthehunt.com +open.com.hk +opendemocracy.net +||opendemocracy.net +openid.net +||openid.net +.openleaks.org +||openleaks.org +||openstreetmap.org +||opentech.fund +openvpn.net +||openvpn.net +||openwebster.com +.openwrt.org.cn +@@||openwrt.org.cn +my.opera.com/dahema +.opus-gaming.com +|http://opus-gaming.com +.organcare.org.tw +organharvestinvestigation.net +.orgasm.com +.orgfree.com +||oricon.co.jp +||orient-doll.com +orientaldaily.com.my +||orientaldaily.com.my +!--orientaldaily.on.cc +||orn.jp +||osfoora.com +||otto.de +||ourdearamy.com +oursogo.com +.oursteps.com.au +||oursteps.com.au +.oursweb.net +||ourtv.hk +xinqimeng.over-blog.com +||overcast.fm +||overdaily.org +||overplay.net +share.ovi.com/media +||ovpn.com +|http://owl.li +|http://ht.ly +|http://htl.li +|http://mash.to +www.owind.com +||owltail.com +||oxfordscholarship.com +|http://www.oxid.it +oyax.com +oyghan.com/wps +.ozchinese.com/bbs +||ow.ly +.ozvoice.org +||ozvoice.org +.ozxw.com +.ozyoyo.com + +!--------------------PP------------------------- +||pewresearch.org +||privacyguides.org +||pancakeswap.finance +||img.picgo.net +||pornmate.com +||puredns.org +||polymarket.com +||pandafan.pub +||proxz.com +||potatso.com +||pendrivelinux.com +||paimon.moe +||photonmedia.net +||points-media.com +||pkuanvil.com +||pachosting.com +.pacificpoker.com +.packetix.net +||pacopacomama.com +.padmanet.com +||page.link +page2rss.com +.palacemoon.com +forum.palmislife.com +||eriversoft.com +paljorpublications.com +.paltalk.com +!--||pangci.net +||pandapow.co +.pandapow.net +.pandavpn-jp.com +||pandavpn-jp.com +||pandavpnpro.com +||pao-pao.net +paper.li +paperb.us +.paradisehill.cc +.paradisepoker.com +||parler.com +||parsevideo.com +.partycasino.com +.partypoker.com +.passion.com +||passion.com +.passiontimes.hk +pastebin.com +.pastie.org +||pastie.org +||blog.pathtosharepoint.com +||patreon.com +||patreonusercontent.com +||pawoo.net +||pbs.org + +!--Pbwiki +pbwiki.com +||pbworks.com +||developers.box.net +||wiki.oauth.net +||wiki.phonegap.com +||wiki.jqueryui.com + +||pbxes.com +||pbxes.org +pcdvd.com.tw +||pcgamestorrents.com +.pchome.com.tw +||pcij.org +.pcstore.com.tw +||pct.org.tw +pdetails.com +||pdproxy.com +||peace.ca +peacefire.org +.peeasian.com +||peing.net +.pekingduck.org +||pekingduck.org +.pemulihan.or.id +|http://pemulihan.or.id +||pen.io +penchinese.com +||blog.pentalogic.net +.penthouse.com +||pentoy.hk +.peoplebookcafe.com +.peoplenews.tw +||peoplenews.tw +.peopo.org +||peopo.org +.percy.in +.perfectgirls.net +||perfect-privacy.com +||perplexity.ai +.persecutionblog.com +.persiankitty.com +phapluan.org +.phayul.com +||phayul.com +philborges.com +||phncdn.com +||photodharma.net +||photofocus.com +||picacomiccn.com +.picidae.net +||img*.picturedip.com +picturesocial.com +||picuki.com +||pigav.com +||pin-cong.com +.pin6.com +||pin6.com +.ping.fm +||ping.fm +||pinimg.com +.pinkrod.com +||pinoy-n.com +||pinterest.* +@@||pinterest.cn +.pipii.tv +piraattilahti.org +.piring.com +||pixeldrain.com +||pixelqi.com +||css.pixnet.in +||pixnet.net +.pixnet.net +.pk.com +||pkqjiasu.com +||placemix.com +!--.planetsuzy.org +||play-asia.com +||playboy.com +.playboyplus.com +||playboyplus.com +||player.fm +.playno1.com +||playno1.com +||playpcesor.com +||plexvpn.pro +plm.org.hk +plunder.com +.plurk.com +||plurk.com +.plus28.com +.plusbb.com +.pmatehunter.com +||pmatehunter.com +.pmates.com +||po2b.com +pobieramy.top +!--||pocoo.org +||podbean.com +||podictionary.com +||poe.com +.pokerstars.com +||pokerstars.com +||pokerstars.net +||zh.pokerstrategy.com +||politicalchina.org +.politiscales.net +||poloniex.com +||polymerhk.com +.popo.tw +!--||popularpages.net +||popvote.hk +||popxi.click +.popyard.com +||popyard.org +.porn.com +.porn2.com +.porn5.com +.pornbase.org +.pornerbros.com +||pornhd.com +.pornhost.com +.pornhub.com +||pornhub.com +.pornhubdeutsch.net +|http://pornhubdeutsch.net +.pornoxo.com +.pornrapidshare.com +||pornrapidshare.com +.pornsharing.com +|http://pornsharing.com +.pornsocket.com +||pornstarbyface.com +.pornstarclub.com +||pornstarclub.com +.porntube.com +.porntubenews.com +.porntvblog.com +||porntvblog.com +.pornvisit.com +.portablevpn.nl +||poskotanews.com +.post01.com +.post76.com +||post76.com +.post852.com +||post852.com +postadult.com +||potvpn.com +||pourquoi.tw +||powercx.com +.powerphoto.org +||www.powerpointninja.com +||ppy.sh +||presidentlee.tw +||cdn.printfriendly.com +.pritunl.com +provpnaccounts.com +||provpnaccounts.com +.proxfree.com +||proxfree.com +proxyanonimo.es +.proxynetwork.org.uk +||proxynetwork.org.uk +.pttvan.org +||pubu.com.tw +||puffinbrowser.com +||pureinsight.org +.putty.org +||putty.org + +!-------------Posterous----- +||calebelston.com +||blog.fizzik.com +||nf.id.au +||sogrady.me +||vatn.org +||ventureswell.com +||whereiswerner.com + +.power.com +||power.com +powerapple.com +||powerapple.com +||prayforchina.net +||prcleader.org +||presentationzen.com +||prestige-av.com +.prisoneralert.com +||pritunl.com +||privacybox.de +||private.com +||privateinternetaccess.com +privatepaste.com +||privatepaste.com +privatetunnel.com +||privatetunnel.com +||privatevpn.com +||privoxy.org +||procopytips.com +||project-syndicate.org +||proton.me +provideocoalition.com +||prosiben.de +proxifier.com +||proxomitron.info +.proxpn.com +||proxpn.com +proxyroad.com +.proxytunnel.net +||pshvpn.com +||psiphon.ca +.psiphon3.com +||psiphon3.com +.psiphontoday.com +||pstatic.net +||pt.im +.ptt.cc +||ptt.cc +||pttgame.com +.puffstore.com +||main-ecnpaper-economist.content.pugpig.com +||pullfolio.com +.punyu.com/puny +||pureconcepts.net +||pureinsight.org +||purepdf.com +||purevpn.com +.purplelotus.org +.pursuestar.com +||pursuestar.com +.pussyspace.com +.putihome.org +.putlocker.com/file +pwned.com +||pximg.net +python.com +.python.com.tw +||python.com.tw +pythonhackers.com/p +ss.pythonic.life + +!--------------------QQ------------------------- +|http://qmp4.com +||qianmo.tw +||qbittorrent.org +||qgirl.com.tw +||qianbai.tw +||qiandao.today +||qianglie.com +||qiangwaikan.com +.qi-gong.me +||qi-gong.me +!--#921 +||qiangyou.org +.qidian.ca +||qiwen.lu +qixianglu.cn +.qkshare.com +qoos.com +||qoos.com +||efksoft.com +||qstatus.com +||qtrac.eu +||quitccp.org +.quitccp.org +.quora.com/Chinas-Future +.quran.com +|http://quran.com +.quranexplorer.com +qusi8.net +nemesis2.qx.net/pages/MyEnTunnel +qxbbs.org + +!--------------------RR------------------------- +||radmin-vpn.com +||rule34video.com +||r10s.jp +||rakuten.co.jp +||r0.ru +||radio-canada.ca +||radio-en-ligne.fr +||rael.org +radicalparty.org +||radio.garden +||radioaustralia.net.au +.radiohilight.net +||radiohilight.net +||radioline.co +opml.radiotime.com +||radiovaticana.org +||radiovncr.com +||raggedbanner.com +||raidcall.com.tw +.rainbowplan.org/bbs +|https://raindrop.io/ +.raizoji.or.jp +|http://raizoji.or.jp +rangzen.net +rangzen.org +|http://blog.ranxiang.com/ +.rapbull.net +!--|http://rapidgator.net/ +||rapidmoviez.com +rapidvpn.com +||rapidvpn.com +||rarbgprx.org +||rationalwiki.org +||rawgit.com +||rawgithub.com +||rcinet.ca +||reabble.com +.read100.com +.readingtimes.com.tw +||readingtimes.com.tw +||readmoo.com +.readydown.com +|http://readydown.com +||realcourage.org +.realitykings.com +||realitykings.com +.realraptalk.com +.realsexpass.com +||reason.com +.recordhistory.org +.recovery.org.tw +|http://online.recoveryversion.org +||recoveryversion.com.tw +||red-lang.org +||redbubble.com +.redchinacn.net +||redchinacn.net +redchinacn.org +redtube.com +referer.us +||referer.us +||reflectivecode.com +||blog.reimu.net +relaxbbs.com +.relay.com.tw +.releaseinternational.org +||religionnews.com +renminbao.com +||renminbao.com +.renyurenquan.org +||renyurenquan.org +|http://certificate.revocationcheck.com +||resilio.com +.reuters.com +||reuters.com +||reutersmedia.net +.revleft.com +||resistchina.org +retweetist.com +||retweetrank.com +!--connectedchina.reuters.com +!--|http://www.reuters.com/news/video +revver.com +.rfa.org +||rfa.org +.rfachina.com +.rfamobile.org +rfaweb.org +||rferl.org +.rfi.fr +||rfi.fr +||rfi.my +!--.rhcloud.com +!--Edgecast +.rigpa.org +.rileyguide.com +||riku.me +.ritouki.jp +||ritter.vg +.rlwlw.com +||rlwlw.com +||rmbl.ws +.rmjdw.com +.roadshow.hk +.roboforex.com +||robustnessiskey.com +!--||roc-taiwan.org +||rocket.chat +||rocket-inc.net +|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus +|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl +!--||rocmp.org +||rojo.com +||ronjoneswriter.com +||rolfoundation.org +||rolia.net +||rolsociety.org +.roodo.com +.rosechina.net +||rou.video +.rsf.org +||rsf.org +.rsf-chinese.org +||rsf-chinese.org +||rsshub.app +||phosphation13.rssing.com +.rssmeme.com +||rssmeme.com +||rtalabel.org +.rthk.hk +||rthk.hk +.rthk.org.hk +||rthk.org.hk +.rti.org.tw +||rti.org.tw +||rti.tw +.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall +rukor.org +||rule34.xxx +||rumble.com +.runbtx.com +.rushbee.com +||rusvpn.com +.ruten.com.tw +||ruten.com.tw +||rutracker.net +||rutracker.org +rutube.ru +.rxhj.net +|http://rxhj.net + +!--------------------SS------------------------- +||sina.com.hk +||swapspace.co +||storry.tv +||standard.co.uk +||sagernet.org +||simplex.chat +||soundon.fm +||ssrtool.com +||ssrshare.us +||secure.shadowsocks.nu +||synapse.org +||south-plus.net +||silvergatebank.com +||share-videos.se +||ssrshare.us +||cdn.statically.io +||slides.com +||suno.com +||sydney.bing.com +||sehuatang.org +||singlelogin.se +||suno.ai +||syosetu.com +.s1s1s1.com +||s-cute.com +.s-dragon.org +|http://www.s4miniarchive.com +cdn1.lp.saboom.com +||sacks.com +sacom.hk +||sacom.hk +||sadpanda.us +||safechat.com +||safeguarddefenders.com +.safervpn.com +||safervpn.com +.saintyculture.com +|http://saintyculture.com +||sakuralive.com +.sakya.org +.salvation.org.hk +||salvation.org.hk +.samair.ru/proxy/type-01 +.sambhota.org +||cn.sandscotaicentral.com +||sankakucomplex.com +||sankei.com +||sanmin.com.tw +sapikachu.net +savemedia.com +||savethesounds.info +.savetibet.de +||savetibet.de +savetibet.fr +savetibet.nl +.savetibet.org +||savetibet.org +savetibet.ru +.savetibetstore.org +||savetibetstore.org +||saveuighur.org +savevid.com +.sbme.me +|http://sbme.me +.sbs.com.au/yourlanguage +.scasino.com +|http://www.sciencemag.org/content/344/6187/953 +.sciencenets.com +.scmp.com +||scmp.com +.scmpchinese.com +||scramble.io +||scribd.com +||scriptspot.com +||search.com +.searchtruth.com +||searx.me +||seattlefdc.com +.secretchina.com +||secretchina.com +||secretgarden.no +.secretsline.biz +||secretsline.biz +||secureservercdn.net +||securetunnel.com +securityinabox.org +|https://securityinabox.org +.securitykiss.com +||securitykiss.com +||seed4.me +||news.seehua.com +seesmic.com +||seevpn.com +||seezone.net +||sehuatang.net +sejie.com +.sendspace.com +||sensortower.com +sesawe.net +||sesawe.net +||sethwklein.net +||setn.com +.settv.com.tw +.sevenload.com +||sevenload.com +.sex.com +||sex.com +||sex3.com +||sex8.cc +.sexandsubmission.com +.sexbot.com +.sexhu.com +sexinsex.net +||sexinsex.net +.sextvx.com + +!--IP of SexInSex +67.220.91.15 +67.220.91.18 +67.220.91.23 + +|http://*.sf.net +.sfileydy.com +||sfshibao.com +.sftindia.org +.sftuk.org +||sftuk.org +||shadeyouvpn.com +shadow.ma +.shadowsky.xyz +.shadowsocks.asia +||www.shadowsocks.com +.shadowsocks.com +||shadowsocks.com.hk +.shadowsocks.org +||shadowsocks.org +|http://cn.shafaqna.com +||shahit.biz +.shambalapost.com +shapeservices.com +.sharebee.com +||sharecool.org +!--||sharkdolphin.com +.sharpdaily.hk +.sharpdaily.tw +.shat-tibet.com +sheikyermami.com +.shellfire.de +||shellfire.de +shenyun.com +shenyunperformingarts.org +||shenyunperformingarts.org +||shenyunshop.com +shenzhoufilm.com +||shenzhoufilm.com +||shenzhouzhengdao.org +.shiatv.net +.shicheng.org +shipcamouflage.com +.shireyishunjian.com +.shitaotv.org +||shixiao.org +||shizhao.org +shizhao.org +shkspr.mobi/dabr +||shodanhq.com +||shooshtime.com +.shop2000.com.tw +||shopee.tw +.shopping.com +.showhaotu.com +.showtime.jp +||showwe.tw +.shutterstock.com +||shutterstock.com +.shwchurch.org +||shwchurch.org +.shwchurch3.com +|http://shwchurch3.com +.siddharthasintent.org +||sidelinesnews.com +.sidelinessportseatery.com +||signal.org +.sijihuisuo.club +.sijihuisuo.com +.silkbook.com +||simbolostwitter.com +simplecd.org +||simplecd.org +||simplecd.me +simpleproductivityblog.com +bbs.sina.com/ +bbs.sina.com%2F +dailynews.sina.com/ +dailynews.sina.com%2F +home.sina.com +news.sina.com.hk +news.sinchew.com.my +.sinchew.com.my/node/ +.sinchew.com.my/taxonomy/term +.singaporepools.com.sg +||singaporepools.com.sg +.singfortibet.com +.singpao.com.hk +singtao.com +||singtao.com +news.singtao.ca +.singtaousa.com +||singtaousa.com +!--||cdp.sinica.edu.tw +sino-monthly.com +||sinoca.com +||sinocast.com +sinocism.com +sinomontreal.ca +.sinoants.com +||sinoants.com +||sinoinsider.com +.sinoquebec.com +.sierrafriendsoftibet.org +sis.xxx +||sis001.com +sis001.us +.site2unblock.com +.sitebro.tw +||sitekreator.com +||sitemaps.org +||sketchappsources.com +||skimtube.com +||lab.skk.moe +||skybet.com +|http://users.skynet.be/reves/tibethome.html +.skyking.com.tw +bbs.skykiwi.com +|http://www.skype.com/intl/ +|http://www.skype.com/zh-Hant +||skyvegas.com +.xskywalker.com +||xskywalker.com +||skyxvpn.com +.slaytizle.com +.sleazydream.com +||sleazyfork.org +||slheng.com +||slideshare.net +forum.slime.com.tw +.slinkset.com +||slickvpn.com +.slutload.com +||smartdnsproxy.com +.smarthide.com +||app.smartmailcloud.com +smchbooks.com +||smh.com.au +smhric.org +.smith.edu/dalailama +||smn.news +.smyxy.org +!--TODO-no-homepage +||sndcdn.com +sneakme.net +snowlionpub.com +||socialblade.com +.socks-proxy.net +||socks-proxy.net +.sockscap64.com +||sockslist.net +.socrec.org +|http://socrec.org +.sod.co.jp +.softether.org +||softether.org +.softether-download.com +||softether-download.com +||cdn.softlayer.net +||sogclub.com +sohcradio.com +||sohcradio.com +.sokmil.com +||sorting-algorithms.com +||soup.io +@@||static.soup.io +.sobees.com +||sobees.com +.softether.co.jp +||softwarebychuck.com +blog.sogoo.org +soh.tw +||soh.tw +sohfrance.org +||sohfrance.org +chinese.soifind.com +sokamonline.com +||solana.com +.solidaritetibet.org +.solidfiles.com +||somee.com +.songjianjun.com +||songjianjun.com +.sonidodelaesperanza.org +.sopcast.com +.sopcast.org +||nakedsecurity.sophos.com +||sos.org +||sosad.fun +bbs.sou-tong.org +.soubory.com +|http://soubory.com +.soul-plus.net +.soulcaliburhentai.net +||soulcaliburhentai.net +||soundcloud.com +!--|https://soundcloud.com/punkgod +.soundofhope.kr +soundofhope.org +||soundofhope.org +!--.sourceforge.net +!-|http://sourceforge.net +|http://sourceforge.net/p*/shadowsocksgui/ +.sourcewadio.com +||south-plus.org +||southmongolia.org +||southnews.com.tw +||sowers.org.hk +||spankbang.com +.spankingtube.com +.spankwire.com +||spatial.io +||spb.com +||speakerdeck.com +||speedcat.me +||speedify.com +||spencertipping.com +||spendee.com +||spicevpn.com +.spideroak.com +||spideroak.com +.spike.com +.spotflux.com +||spotflux.com +||spreaker.com +.spring4u.info +||spring4u.info +||springwood.me +||sproutcore.com +||squirrelvpn.com +.ss-link.com +||ss-link.com +.ssglobal.co/wp +|http://ssglobal.co +.ssglobal.me +.ssrshare.com +||ssrshare.com +!--|http://cdn.sstatic.net/ +||sstm.moe +||sstmlt.moe +sstmlt.net +||sstmlt.net +|http://stackoverflow.com/users/895245 +||standupfortibet.org +||standwithhk.org +stanford.edu/group/falun +.starfishfx.com +.starp2p.com +||starp2p.com +.startpage.com +||startpage.com +.startuplivingchina.com +|http://startuplivingchina.com +||static-economist.com +||stboy.net +||stc.com.sa +||steel-storm.com +.steganos.com +||steganos.com +.steganos.net +.stepchina.com +!--||stepmania.com +hd.stheadline.com/news/realtime +sthoo.com +||sthoo.com +.stickam.com +stickeraction.com/sesawe +.stileproject.com +||stitcher.com +.sto.cc +.stoporganharvesting.org +||storagenewsletter.com +.storm.mg +||storm.mg +.stoptibetcrisis.net +||stoptibetcrisis.net +||storj.io +.stormmediagroup.com +||stoweboyd.com +||straitstimes.com +stranabg.com +||straplessdildo.com +||streamable.com +||streamate.com +||streamingthe.net +streema.com/tv/NTDTV_Chinese +cn.streetvoice.com/article +cn.streetvoice.com/diary +tw.streetvoice.com +.strikingly.com +||strongvpn.com +.strongwindpress.com +||studentsforafreetibet.org +||stumbleupon.com +stupidvideos.com +||substack.com +||subhd.tv +.successfn.com +panamapapers.sueddeutsche.de +.sugarsync.com +||sugarsync.com +.sugobbs.com +||sugumiru18.com +||suissl.com +summify.com +.sumrando.com +||sumrando.com +sun1911.com +||sundayguardianlive.com +.sunporno.com +||sunmedia.ca +||sunporno.com +.sunskyforum.com +.sunta.com.tw +.sunvpn.net +.superfreevpn.com +.supervpn.net +||supervpn.net +.superzooi.com +|http://superzooi.com +.suppig.net +.suprememastertv.com +|http://suprememastertv.com +.surfeasy.com +||surfeasy.com +.surfeasy.com.au +|http://surfeasy.com.au +||surfshark.com +||surrenderat20.net +.svsfx.com +.swissinfo.ch +||swissinfo.ch +.swissvpn.net +||swissvpn.net +switchvpn.net +||switchvpn.net +.sydneytoday.com +||sydneytoday.com +.sylfoundation.org +||sylfoundation.org +||syncback.com +sysresccd.org +.sytes.net +blog.syx86.com/2009/09/puff +.szbbs.net +.szetowah.org.hk + +!--------------------TT------------------------- +||talkatone.com +||tanks.gg +||thehansindia.com +||rtm.tnt-ea.com +||tellapart.com +||threads.com +||tg-me.com +||twkan.com +||tunein.streamguys1.com +||tou.tv +||tinyurl.com +||textnow.com +||textnow.me +||token.im +||tokenlon.im +||tardigrade.io +||torrentgalaxy.to +||tomp3.cc +||tukaani.org +||thetatoken.org +||typeset.io +||thechasernews.co.uk +||hole.thu.monster +||thuhole.com +||t-g.com +.t35.com +.t66y.com +||t66y.com +||esg.t91y.com +.taa-usa.org +|http://taa-usa.org +.taaze.tw +||taaze.tw +|http://www.tablesgenerator.com/ +tabtter.jp +.taconet.com.tw +||taedp.org.tw +.tafm.org +tagwalk.com +||tagwalk.com +tahr.org.tw +.taipeisociety.org +||taipeisociety.org +||taipeitimes.com +||taisounds.com +.taiwanbible.com +.taiwandaily.net +||taiwandaily.net +.taiwandc.org +!--||taiwanembassy.org +||taiwanhot.net +.taiwanjustice.com +taiwankiss.com +taiwannation.com +taiwannation.com.tw +||taiwanncf.org.tw +||taiwannews.com.tw +|http://www.taiwanonline.cc/ +!--||taiwantoday.tw +taiwantp.net +||taiwantt.org.tw +taiwanus.net +.talk853.com +.talkboxapp.com +||talkboxapp.com +.talkcc.com +||talkcc.com +.talkonly.net +||talkonly.net +||tanc.org +.tangren.us +.taoism.net +|http://taoism.net +.tapatalk.com +||tapatalk.com +blog.taragana.com +||taup.net +.taweet.com +||taweet.com +.tbcollege.org +||tbcollege.org +.tbi.org.hk +.tbjyt.org +.tbrc.org +tbs-rainbow.org +.tbsec.org +||tbsec.org +tbskkinabalu.page.tl +.tbsn.org +||tbsn.org +.tbsseattle.org +.tbssqh.org +|http://tbssqh.org +tbswd.org +.tbtemple.org.uk +.tbthouston.org +.tccwonline.org +.tcewf.org +tchrd.org +tcnynj.org +||tcpspeed.co +.tcsofbc.org +.tdm.com.mo +teamamericany.com +||techspot.com +!--OVH +||techviz.net +||teck.in +.teeniefuck.net +teensinasia.com +||tehrantimes.com +.telecomspace.com +||telegraph.co.uk +.tenacy.com +||tenor.com +||tenzinpalmo.com +.tew.org +||tew.org +||tfc-taiwan.org.tw +||tfiflve.com +.thaicn.com +||theatlantic.com +||theatrum-belli.com +||cn.theaustralian.com.au +theblemish.com +||thebcomplex.com +||theblaze.com +.thebobs.com +||thebobs.com +.thechinabeat.org +||thechinacollection.org +|http://www.thechinastory.org/yearbooks/yearbook-2012/ +||theconversation.com +.thedalailamamovie.com +|http://thedalailamamovie.com +||thediplomat.com +||thedw.us +||theepochtimes.com +!--||thefreeland.club +||theguardian.com +||thegay.com +|http://thegioitinhoc.vn/ +.thegly.com +||thehindu.com +||thehun.net +.theinitium.com +||theinitium.com +.thenewslens.com +||thenewslens.com +.thepiratebay.org +||thepiratebay.org +!--||thepiratebay.se +.theporndude.com +||theporndude.com +||theportalwiki.com +||theprint.in +||threadreaderapp.com +therock.net.nz +||thesaturdaypaper.com.au +||thestandnews.com +thetibetcenter.org +thetibetconnection.org +.thetibetmuseum.org +.thetibetpost.com +||thetibetpost.com +thetrotskymovie.com +||thetvdb.com +||thewgo.org +||thewirechina.com +.theync.com +|http://theync.com +.thinkingtaiwan.com +||thinkingtaiwan.com +||thirdmill.org +||thisav.com +.thlib.org +||thomasbernhard.org +.thongdreams.com +||throughnightsfire.com +.thumbzilla.com +||thywords.com +tiananmenmother.org +.tiananmenduizhi.com +||tiananmenduizhi.com +||tiananmenuniv.com +||tiananmenuniv.net +||tiandixing.org +.tianhuayuan.com +.tianlawoffice.com +||tianti.io +tiantibooks.org +||tiantibooks.org +tianyantong.org.cn +.tianzhu.org +.tibet.at +tibet.ca +.tibet.com +||tibet.com +tibet.fr +.tibet.net +||tibet.net +||tibet.nu +.tibet.org +||tibet.org +||tibet.org.tw +||tibet.to +.tibet-envoy.eu +||tibet-envoy.eu +.tibet-foundation.org +.tibet-house-trust.co.uk +||tibet-initiative.de +.tibet-munich.de +.tibet3rdpole.org +|http://tibet3rdpole.org +tibetaction.net +||tibetaction.net +.tibetaid.org +tibetalk.com +.tibetan.fr +tibetan-alliance.org +.tibetanarts.org +.tibetanbuddhistinstitute.org +||tibetanbuddhistinstitute.org +||tibetancommunity.org +||tibetanentrepreneurs.org +||tibetanhealth.org +.tibetanjournal.com +.tibetanlanguage.org +.tibetanliberation.org +||tibetanliberation.org +.tibetcollection.com +.tibetanaidproject.org +.tibetancommunityuk.net +|http://tibetancommunityuk.net +tibetanculture.org +tibetanfeministcollective.org +.tibetanpaintings.com +.tibetanphotoproject.com +.tibetanpoliticalreview.org +.tibetanreview.net +|http://tibetansports.org +.tibetanwomen.org +|http://tibetanwomen.org +.tibetanyouth.org +.tibetanyouthcongress.org +||tibetanyouthcongress.org +.tibetcharity.dk +tibetcharity.in +.tibetchild.org +.tibetcity.com +||tibetcorps.org +||tibetexpress.net +||tibetfocus.com +||tibetfund.org +.tibetgermany.com +||tibetgermany.de +.tibethaus.com +.tibetheritagefund.org +||tibethouse.jp +||tibethouse.org +||tibethouse.us +.tibetinfonet.net +.tibetjustice.org +.tibetkomite.dk +||tibetmuseum.org +||tibetnetwork.org +||tibetoffice.ch +tibetoffice.eu +||tibetoffice.org +||tibetonline.com +||tibetoffice.com.au +||tibetonline.tv +||tibetoralhistory.org +||tibetpolicy.eu +||tibetrelieffund.co.uk +||tibetsociety.com +||tibetsun.com +||tibetsupportgroup.org +||tibetswiss.ch +||tibettelegraph.com +||tibettimes.net +||tibettruth.com +||tibetwrites.org +.ticket.com.tw +.tigervpn.com +||tigervpn.com +.timdir.com +|http://timdir.com +.time.com +|http://time.com +!--.time.com/time/time100/leaders/profile/rebel +!--.time.com/time/specials/packages/article/0,28804 +!--.time.com/time/magazine +||timesnownews.com +.timsah.com +||timtales.com +||blog.tiney.com +||tingtalk.me +.tiny.cc +||tiny.cc +||tinychat.com +||tinypaste.com +||tipas.net +.tistory.com +||tkcs-collins.com +.tmagazine.com +||tmagazine.com +|http://tmi.me +.tmpp.org +|http://tmpp.org +.tnaflix.com +||tnaflix.com +.tnp.org +|http://tnp.org +.to-porno.com +||to-porno.com +||togetter.com +.tokyo-247.com +.tokyo-hot.com +||tokyo-porn-tube.com +||tokyocn.com +tw.tomonews.net +.tongil.or.kr +tonyyan.net +toonel.net +top81.ws +.topnews.in +.toppornsites.com +|http://toppornsites.com +||toptoon.net +.torguard.net +||torguard.net +||top.tv +.topshareware.com +.topsy.com +||topsy.com +||toptip.ca +tora.to +.torcn.com +||torlock.com +.torproject.org +||torproject.org +||torrentkitty.tv +torrentprivacy.com +||torrentprivacy.com +|http://torrentproject.se +||torrenty.org +||tortoisesvn.net +||torvpn.com +||totalvpn.com +.toutiaoabc.com +towngain.com +toypark.in +toytractorshow.com +.tparents.org +.tpi.org.tw +||tpi.org.tw +||tradingview.com +||transparency.org +||treemall.com.tw +trendsmap.com +||trendsmap.com +.trimondi.de/SDLE +.trouw.nl +||trouw.nl +.trt.net.tr +||trt.net.tr +trtc.com.tw +.truebuddha-md.org +||truebuddha-md.org +trulyergonomic.com +||truthsocial.com +.truveo.com +.tsctv.net +.tsemtulku.com +tsquare.tv +.tsu.org.tw +tsunagarumon.com +!--|http://www.tsuru-bird.net/ +||tt1069.com +.tttan.com +||tttan.com +||ttv.com.tw +tu8964.com +.tubaholic.com +.tube.com +tube8.com +||tube8.com +.tube911.com +||tube911.com +.tubecup.com +.tubegals.com +.tubeislam.com +|http://tubeislam.com +.tubestack.com +||tubewolf.com +.tuibeitu.net +.tuidang.org +||tuidang.org +.tuidang.se +.tumutanzi.com +|http://tumutanzi.com +||tumview.com +.tunein.com +|http://tunein.com +||tunnelbear.com +||tunnelblick.net +.tunnelr.com +||tunnelr.com +||tunsafe.com +tuitwit.com +.turansam.org +.turbobit.net +||turbobit.net +.turbohide.com +||turbohide.com +||turkistantimes.com +.tushycash.com +|http://tushycash.com +.tuvpn.com +||tuvpn.com +|http://tuzaijidi.com +|http://*.tuzaijidi.com +.tw01.org +|http://tw01.org +||use.typekit.net + +!---Tumblr--- +.tumblr.com +||tumblr.com +!--@@||assets.tumblr.com +!--@@||data.tumblr.com +!--@@||media.tumblr.com +!--@@||static.tumblr.com +!--@@||www.tumblr.com +||lecloud.net +||slutmoonbeam.com +|http://blog.soylent.com + +.tv.com +|http://tv.com +tvants.com +||forum.tvb.com +||inews-api.tvb.com +news.tvbs.com.tw +.tvboxnow.com +||tvboxnow.com +tvider.com +.tvmost.com.hk +.tvplayvideos.com +||tvunetworks.com +.tw-blog.com +|https://tw-blog.com +.tw-npo.org +.twaitter.com +twapperkeeper.com +||twapperkeeper.com +||twaud.io +.twaud.io +.twavi.com +twbbs.org +||twblogger.com +tweepmag.com +.tweepml.org +||tweepml.org +.tweetbackup.com +||tweetbackup.com +tweetboard.com +||tweetboard.com +.tweetcs.com +|http://tweetcs.com +|http://deck.ly +!-- Operation discontinued +!--||tweete.net +!--m.tweete.net +||tweetedtimes.com +!-- Operation discontinued +!--tweetmeme.com +tweetphoto.com +||tweetphoto.com +tweetree.com +||tweetree.com +.tweettunnel.com +||tweettunnel.com +||tweetwally.com +tweetymail.com +||twelve.today +.tweez.net +|http://tweez.net +||twftp.org +||twgreatdaily.com +twibase.com +.twibble.de +||twibble.de +twibbon.com +||twibs.com +.twicountry.org +|http://twicountry.org +twicsy.com +.twiends.com +|http://twiends.com +.twifan.com +|http://twifan.com +twiffo.com +||twiffo.com +.twilightsex.com +twilog.org +twimbow.com +twipple.jp +||twipple.jp +||twip.me +twishort.com +||twishort.com +||twister.net.co +twisternow.com +twistory.net +||twiggit.org +twitgoo.com +twitiq.com +||twitiq.com +.twitlonger.com +||twitlonger.com +|http://tl.gd/ +twitmania.com +twitoaster.com +||twitoaster.com +||twitonmsn.com +!--Same IP +.twitstat.com +||twitstat.com +||tweepguide.com +|http://twt.tl +twittbot.net +||ads-twitter.com +||twttr.com +||twitter4j.org +.twittercounter.com +||twittercounter.com +twitterfeed.com +.twittergadget.com +||twittergadget.com +.twitterkr.com +||twitterkr.com +||twittermail.com +||twitterrific.com +twittertim.es +||twittertim.es +twitthat.com +||twitturk.com +.twitturly.com +||twitturly.com +.twitzap.com +twiyia.com +.twtkr.com +|http://twtkr.com +.twnorth.org.tw +||twreporter.org +twskype.com +twtrland.com +twurl.nl +.txxx.com +.tycool.com +||tycool.com + +!--typepad +||typepad.com +@@||www.typepad.com +@@||static.typepad.com +||blog.expofutures.com +||contests.twilio.com +!-lawprofessors.typepad.com/china_law_prof +||typora.io + +!--------------------UU------------------------- +||udomain.hk +||upbit.com +||demo.unlock-music.dev +.u9un.com +||u9un.com +.ubddns.org +|http://ubddns.org +||uberproxy.net +.uc-japan.org +||uc-japan.org +.srcf.ucam.org/salon/ +|http://china.ucanews.com/ +|http://hum*.uchicago.edu/faculty/ywang/history +||uderzo.it +.udn.com +||udn.com +||udn.com.tw +udnbkk.com/bbs +||uforadio.com.tw +ufreevpn.com +.ugo.com +!--ghs +||uhdwallpapers.org +||uhrp.org +.uighur.nl +||uighur.nl +uighurbiz.net +.ulike.net +ukcdp.co.uk +||ultrasurf.us +||ultravpn.com +||ultravpn.fr +ultraxs.com +umich.edu/~falun +||unblock.cn.com +.unblocker.yt +unblock-us.com +||unblock-us.com +.unblockdmm.com +|http://unblockdmm.com +||unblocksit.es +uncyclomedia.org +.uncyclopedia.hk/wiki +|http://uncyclopedia.hk +!--uncyclopedia.info +|http://uncyclopedia.tw +underwoodammo.com +||underwoodammo.com +||unholyknight.com +.uni.cc +||cldr.unicode.org +.unification.net +.unification.org.tw +||unirule.cloud +.unix100.com +||unknownspace.org +.unodedos.com +unpo.org +||unstable.icu +||unwire.hk +||uocn.org +tor.updatestar.com +||upghsbc.com +.upholdjustice.org +uploaded.net/file +|http://uploaded.net/file +|http://uploaded.to/file +.uploadstation.com/file +.upmedia.mg +||upmedia.mg +.upornia.com +|http://upornia.com +||uproxy.org +||uptodown.com +.upwill.org +ur7s.com +||urbandictionary.com +||urbansurvival.com +myshare.url.com.tw/ +||urlborg.com +||urlparser.com +us.to +||usacn.com +.usaip.eu +||usaip.eu +||uscnpm.org +||uscardforum.com +||usma.edu +.usocctn.com +||ustibetcommittee.org +.ustream.tv +||ustream.tv +usus.cc +.utopianpal.com +||utopianpal.com +||uujiasu.com +.uvwxyz.xyz +||uvwxyz.xyz +.uwants.com +||uwants.com +.uwants.net +uyghur.co.uk +||uyghur-j.org +||uyghuraa.org +||uyghuramerican.org +||uyghurbiz.org +||uyghurcongress.org +||uyghurpen.org +||uyghurstudies.org +||uyghurtribunal.com +uygur.org +|http://uymaarip.com/ + +!--------------------VV------------------------- +||vilanet.me +||vewas.net +||v2.help +||vocaroo.com +||vern.cc +||v2fly.org +.v2ray.com +||v2ray.com +||v2raycn.com +||valeursactuelles.com +.van001.com +.van698.com +.vanemu.cn +.vanilla-jp.com +.vanpeople.com +||vansky.com +||vaticannews.va +||vcf-online.org +||vcfbuilder.org +.vegasred.com +.velkaepocha.sk +.venbbs.com +.venchina.com +.venetianmacao.com +||venetianmacao.com +veoh.com +||vercel.app +mysite.verizon.net +vermonttibet.org +||verybs.com +.vft.com.tw +.viber.com +||viber.com +.vica.info +.victimsofcommunism.org +||victimsofcommunism.org +||vid.me +||vidble.com +videobam.com +||videobam.com +.videodetective.com +.videomega.tv +||videomega.tv +.videomo.com +videopediaworld.com +.videopress.com +.vidinfo.org/video +vietdaikynguyen.com +.vijayatemple.org +||vilavpn.com +vimeo.com +||vimeo.com +||vimperator.org +||vincnd.com +||vinniev.com +|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html +.virtualrealporn.com +||virtualrealporn.com +visibletweets.com +||viu.com +.vivahentai4u.net + +!--apex not blocked, adding to reduce complexity +||vivaldi.com + +.vivatube.com +.vivthomas.com +||vivthomas.com +.vjav.com +||vjav.com +.vjmedia.com.hk +.vllcs.org +|http://vllcs.org +||vmixcore.com +||vnet.link +.vocativ.com +vocn.tv +||vocus.cc +||voicettank.org +.vot.org +||vot.org +.vovo2000.com +|http://vovo2000.com +.voxer.com +||voxer.com +.voy.com +||vpn.ac +||vpn.net +.vpn4all.com +||vpn4all.com +.vpnaccount.org +|http://vpnaccount.org +.vpnaccounts.com +||vpnaccounts.com +.vpncomparison.org +.vpncup.com +||vpncup.com +vpnbook.com +.vpncoupons.com +|http://vpncoupons.com +.vpndada.com +||vpndada.com +.vpnfan.com +vpnfire.com +.vpnforgame.net +||vpnforgame.net +||vpngate.jp +.vpngate.net +||vpngate.net +.vpngratis.net +vpnhq.com +||vpnhub.com +.vpnmaster.com +||vpnmaster.com +.vpnmentor.com +||vpnmentor.com +.vpninja.net +||vpninja.net +.vpnintouch.com +vpnjack.com +||vpnjack.com +.vpnpick.com +||vpnpick.com +||vpnpop.com +||vpnpronet.com +||vpnproxymaster.com +.vpnreactor.com +||vpnreactor.com +||vpnreviewz.com +.vpnsecure.me +||vpnsecure.me +.vpnshazam.com +||vpnshazam.com +.vpnshieldapp.com +||vpnshieldapp.com +.vpnsp.com +.vpntraffic.com +.vpntunnel.com +||vpntunnel.com +.vpnuk.info +||vpnuk.info +||vpnunlimitedapp.com +.vpnvip.com +||vpnvip.com +.vpnworldwide.com +.vporn.com +||vporn.com +.vpser.net +@@||vpser.net +vraiesagesse.net +||vrchat.com +.vrmtr.com +||vrporn.com +||vtunnel.com +||vuku.cc + +!--------------------WW------------------------- +||wxw.moe +||wxw.cat +||walletconnect.com +|https://w3s.link/ipfs +||work2icu.org +||wikiless.funami.tech +lists.w3.org/archives/public +||waffle1999.com +.wahas.com +waikeung.org/php_wind +||wainao.me +||wallmama.com +||wallpapercasa.com +.wallproxy.com +@@||wallproxy.com.cn +||wallsttv.com +||waltermartin.com +||waltermartin.org +||www.wan-press.org +||wanderinghorse.net +||wangafu.net +||wangjinbo.org +.wangjinbo.org +wanglixiong.com +.wango.org +||wango.org +wangruoshui.net +||want-daily.com +wapedia.mobi/zhsimp +||warroom.org +||waselpro.com +||watchinese.com +||watchout.tw +.wattpad.com +||wattpad.com +.watch8x.com +||watchmygf.net +||wav.tv +||waybig.com +||wd.bible +.wdf5.com +||wealth.com.tw +.wearehairy.com +.wearn.com +||wearn.com +|http://hkcoc.weather.com.hk +||hudatoriq.web.id +||web2project.net +webbang.net +.webevader.org +.webfreer.com +weblagu.com +.webjb.org +.webrush.net +webs-tv.net +.websitepulse.com/help/testtools.china-test +|http://www.websnapr.com +.webwarper.net +|http://webwarper.net +webworkerdaily.com +||wechatlawsuit.com +||wefightcensorship.org +.wefong.com +weiboleak.com +.weihuo.org +||weijingsheng.org +.weiming.info +||weiming.info +weiquanwang.org +|http://weisuo.ws +.welovecock.com +||welt.de +.wemigrate.org +|http://wemigrate.org +wengewang.com +||wengewang.org +.wenxuecity.com +||wenxuecity.com +.wenyunchao.com +||wenyunchao.com +.westca.com +||westca.com +||westernwolves.com +.westkit.net +||westpoint.edu +.westernshugdensociety.org +wetpussygames.com +.wetplace.com +||wezone.net +.wforum.com +||wforum.com/ +.whatblocked.com +||whatblocked.com +||wheelockslatin.com +.whippedass.com +!--|http://who.is/ +.whoer.net +||whoer.net +whotalking.com +whylover.com +||whyx.org +||wikileaks.ch +||wikileaks.com +||wikileaks.de +||wikileaks.eu +||wikileaks.lu +.wikileaks.org +||wikileaks.org +||wikileaks.pl +.wikileaks-forum.com +||wilsoncenter.org +.williamhill.com +||collateralmurder.com +||collateralmurder.org +wikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0 +||wikimapia.org +.wikiwand.com +||wikiwand.com +||casino.williamhill.com +||sports.williamhill.com +||vegas.williamhill.com +||willw.net +.windscribe.com +||windscribe.com +||wingy.site +.winning11.com +||wionews.com +||wiredbytes.com +||wiredpen.com +||wireguard.com +!--||wireshark.org +.wisdompubs.org +.wisevid.com +||wisevid.com +||whispersystems.org +.witnessleeteaching.com +||witopia.net +.wjbk.org +||wjbk.org +||wmflabs.org +||wn.com +||wnacg.com +||wnacg.org +||wo.tc +||woeser.com +||wokar.org +||wolfax.com +||wombo.ai +||woolyss.com +||woopie.jp +||woopie.tv +||workatruna.com +||workerempowerment.org +.worldcat.org +worldjournal.com +.worldvpn.net +||worldvpn.net + +||videopress.com +.wordpress.com +|http://*.wordpress.com +||chenshan20042005.wordpress.com +||chinaview.wordpress.com +||cnbbnews.wordpress.com +||freedominfonetweb.wordpress.com +||hka8964.wordpress.com +||hkanews.wordpress.com +||hqsbnet.wordpress.com +||hqsbonline.wordpress.com +||investigating.wordpress.com +||jobnewera.wordpress.com +||matthewdgreen.wordpress.com +||minghuiyw.wordpress.com +||wo3ttt.wordpress.com +||sujiatun.wordpress.com +||xijie.wordpress.com +||ifreechina.wordpress.com +||wp.com + +!-||wormsculptor.com +.wow.com +||wowporn.com +||wowgirls.com +.wowrk.com +.woyaolian.org +|http://woyaolian.org +.wpoforum.com +||wpoforum.com +wrchina.org +wretch.cc +||writesonic.com +.wsj.com +||wsj.com +.wsj.net +||wsj.net +.wtbn.org +.wtfpeople.com +wuerkaixi.com +||wufafangwen.com +||wufi.org.tw +wujie.net +wujieliulan.com +||wujieliulan.com +||wuw.red +.wwitv.com +||wwitv.com +wzyboy.im/post/160 + +!--------------------XX------------------------- +||www.xicons.org +||x.ai +||xt.com +||xt.pub +||x.co +.x-berry.com +||x-berry.com +||x-art.com +||x-wall.org +||x3guide.com +xanga.com +||xbabe.com +.xbookcn.com +||xbookcn.com +||xcafe.in +||xcity.jp +.xcritic.com +||xerotica.com +destiny.xfiles.to/ubbthreads +||xfxssr.me +.xgmyd.com +||xgmyd.com +xhamster.com +||xhamster.com +.xianba.net +.xianjian.tw +|http://xianjian.tw +.xiaobaiwu.com +.xiaochuncnjp.com +.xiaohexie.com +||xiaolan.me +||xiaoma.org +||xiaohexie.com +||xiaxiaoqiang.net +xiezhua.com +.xihua.es +forum.xinbao.de/forum +.xing.com +|http://xing.com +||xinjiangpolicefiles.org +.xinmiao.com.hk +||xinmiao.com.hk +xinsheng.net +xinshijue.com +.xiongpian.com +.xiuren.org +xizang-zhiye.org +xjp.cc +||xjp.cc +||xjtravelguide.com +||xml-training-guide.com +xmovies.com +||xnxx.com +!--||xnxx-cdn.com +xpdo.net +||xpud.org +.xrentdvd.com +||xtube.com +||xuchao.org +xuchao.net +||xuchao.net +xvideo.cc +.xvideos.com +||xvideos.com +||xvideos-cdn.com +||xvideos.es +||xvbelink.com +||xvinlink.com +||xsden.info +.xxbbx.com +.xxlmovies.com +||xxx.com +.xxx.xxx +|http://xxx.xxx +.xxxfuckmom.com +||xxxx.com.au +.xxxymovies.com +|http://xxxymovies.com +xys.org +xysblogs.org + +!--------------------YY------------------------- +||yangzhi.org +||storage.yandex.net +||y2mate.com +||yadi.sk +||yakbutterblues.com +||yam.com +||yam.org.tw +||yande.re +||disk.yandex.com +||disk.yandex.ru +.yanghengjun.com +.yasni.co.uk +||yasni.co.uk +||yasukuni.or.jp +.yayabay.com/forum +||news.ycombinator.com +.ydy.com +.yeahteentube.com +||yeahteentube.com +||yecl.net +||yeelou.com +||yeeyi.com +yegle.net +||yegle.net +.yes.xxx +||yes123.com.tw +||yesasia.com +||yesasia.com.hk +.yes-news.com +|http://yes-news.com +.yespornplease.com +||yespornplease.com +|http://yeyeclub.com +!--yfrog.com +||yhcw.net +.yibada.com +||yibaochina.com +.yidio.com +||yidio.com +||yigeni.com +yilubbs.com +||s.yimg.com +.yipub.com +||yipub.com +yinlei.org/mt +.yizhihongxing.com +||yizhihongxing.com +.yobt.com +.yobt.tv +||yobt.tv +.yogichen.org +||yogichen.org +.yolasite.com +.yomiuri.co.jp +yong.hu +.yorkbbs.ca +||you.com +||youxu.info +.youjizz.com +||youjizz.com +.youmaker.com +||youmaker.com +.youngpornvideos.com +youngspiration.hk +.youpai.org +||youpai.org +.your-freedom.net +||yourepeat.com +.yousendit.com +||yousendit.com +.youthnetradio.org/tmit/forum +blog.youthwant.com.tw +me.youthwant.com.tw +share.youthwant.com.tw +topic.youthwant.com.tw +.youporn.com +||youporn.com +.youporngay.com +||youporngay.com +.yourlisten.com +||yourlisten.com +.yourlust.com +||yourlust.com +youversion.com +||youversion.com +ytht.net +yuanming.net +.yuanzhengtang.org +.yulghun.com +||yulghun.com +||yunchao.net +||yunomi.tokyo +.yuvutu.com +||yvesgeleyn.com +.ywpw.com/forums/history/post/A0/p0/html/227 +yx51.net +.yyii.org +||yyii.org +||yyjlymb.xyz +||yysub.net +.yzzk.com +||yzzk.com + +!--------------------ZZ------------------------- +||z-library.sk +||z-lib.fm +||z-lib.gd +||z-lib.gl +||z-lib.fo +||zodgame.xyz +||zhongzidi.com +||zooqle.com +||z-lib.io +||z-lib.org +zacebook.com +.zalmos.com +||zalmos.com +||zaobao.com.sg +||zdnet.com.tw +.zello.com +||zello.com +.zengjinyan.org +.zenmate.com +||zenmate.com +||zenmate.com.ru +||zerohedge.com +||zeronet.io +!--www.zfreet.com/post/usejump-browns.html +.zfreet.com +.zhangboli.net +||zhangtianliang.com +||zhanlve.org +zhenghui.org +.zhengjian.org +||zhengjian.org +zhengwunet.org +|http://zhenxiang.biz +zhongguo.ca +|http://zhongguorenquan.org +zhongguotese.net +||zhongguotese.net +.zhoushuguang.com +.zhuanxing.cn +||zhuatieba.com +zhuichaguoji.org +||zhuichaguoji.org +||zi.media +|http://book.zi5.me +.ziddu.com/download +||zillionk.com +.zinio.com +||zinio.com +.ziporn.com +.zippyshare.com +realforum.zkiz.com +!--||zlib.net +||zmedia.com.tw +||zmw.cn +.zodgame.us +zomobo.net +.zonaeuropa.com +||zonaeuropa.com +||zonghexinwen.com +||zoogvpn.com +||zootool.com +.zoozle.net +||zophar.net +writer.zoho.com +||zorrovpn.com +||zpn.im +||zspeeder.me +.zsrhao.com +.zuo.la +||zuo.la +||zuobiao.me +.zuola.com +||zuola.com +||zvereff.com +||zyxel.com +.zzcartoon.com +!##############General List End################# + +!###########Supplemental List Start############# +!#############Supplemental List End############# + +!################Whitelist Start################ +@@||www.ettoday.net + +@@||aliyun.com +@@||baidu.com +@@||chinaso.com +@@||chinaz.com +@@|http://nrch.culture.tw/ +@@||i.pki.goog +!---Some are powered by GuXiang (BGP), please comment off if +!---you encounter connectivity issues. +@@||adservice.google.com +!--ISP cache works sometimes, verified at drpeng + gehua. +@@||dl.google.com +!--@@||kh.google.com +!--@@||khm.google.com +!--@@||khm0.google.com +!--@@||khm1.google.com +!--@@||khm2.google.com +!--@@||khm3.google.com +!--@@||khmdb.google.com +@@||tools.google.com +@@||clientservices.googleapis.com +@@||fonts.googleapis.com +!--@@||khm.googleapis.com +!--@@||khm0.googleapis.com +!--@@||khm1.googleapis.com +!--@@||khm2.googleapis.com +!--@@||khm3.googleapis.com +!--@@||khmdb.googleapis.com +@@||update.googleapis.com +@@||safebrowsing.googleapis.com +@@||connectivitycheck.gstatic.com +@@||csi.gstatic.com +@@||fonts.gstatic.com +@@||ssl.gstatic.com +@@||haosou.com +@@||ip.cn +@@||jike.com +@@||translate.google.cn +@@|http://www.google.cn/maps +@@||http2.golang.org +@@||gov.cn +@@||ocsp.pki.goog +@@||qq.com +@@||sina.cn +@@||sina.com.cn +@@||sogou.com +@@||so.com +@@||soso.com +@@||uluai.com.cn +@@||weibo.com +@@||yahoo.cn +@@||youdao.com +@@||zhongsou.com +@@|http://ime.baidu.jp +!################Whitelist End################## +!---------------------EOF----------------------- diff --git a/download.sh b/download.sh deleted file mode 100755 index 9b10210..0000000 --- a/download.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -set -e -f -u -x - -# This script syncs companies DB that we bundle with AdGuard Home. The source -# for this database is https://github.com/AdguardTeam/companiesdb. -# -trackers_url='https://raw.githubusercontent.com/AdguardTeam/companiesdb/main/dist/trackers.json' -output='./trackers.json' -readonly trackers_url output - -curl -o "$output" -v "$trackers_url" diff --git a/download/index.html b/download/index.html deleted file mode 100644 index a527b45..0000000 --- a/download/index.html +++ /dev/null @@ -1,34 +0,0 @@ - \ No newline at end of file diff --git a/static/domain-info/domains/domain-info.json b/static/domain-info/domains/domain-info.json index 6ca08f9..12edb4f 100644 --- a/static/domain-info/domains/domain-info.json +++ b/static/domain-info/domains/domain-info.json @@ -440,18 +440,60 @@ }, "company": "广州市动景计算机科技有限公司" }, - "腾讯": { - "微信": { - "name": "微信", - "categoryId": 7, - "url": { - "1": "https://wx.qq.com/", - "2": "https://weixin.qq.com/", - "3": "https://res.wx.qq.com/", - "4": "dns.weixin.qq.com", - "5": "pc.weixin.qq.com" + "腾讯系列": { + "微信相关": { + "微信": { + "name": "微信", + "categoryId": 7, + "url": { + "1": "https://wx.qq.com/", + "2": "https://weixin.qq.com/", + "3": "https://res.wx.qq.com/", + "4": "dns.weixin.qq.com", + "5": "pc.weixin.qq.com" + }, + "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" }, - "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" + "微信公众号文章缩略图CDN节点": { + "name": "微信公众号文章缩略图与广告图片分发CDN节点", + "categoryId": 2, + "url": "wxsnsdythumb.wxs.qq.com", + "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" + }, + "微信公众号动态内容主CDN节点": { + "name": "微信公众号动态内容主CDN/文章正文图片素材分发", + "categoryId": 2, + "url": "wxsnsdy.wxs.qq.com", + "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" + }, + "微信公众号内容备用CDN节点": { + "name": "微信公众号内容备用CDN/图片资源访问分流服务", + "categoryId": 2, + "url": "snsdy.tc.qq.com", + "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" + }, + "微信生态视频缩略图CDN节点": { + "name": "微信生态视频缩略图CDN/公众号视频号封面截图分发", + "categoryId": 2, + "url": "vweixinthumb.tc.qq.com", + "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" + } + }, + "腾讯视频相关": { + "腾讯视频图片缓存CDN节点": { + "name": "腾讯视频封面、海报、截图等静态图片CDN分发节点", + "categoryId": 2, + "url": "imgcache.tc.qq.com", + "icon": "https://v.qq.com/favicon.ico" + } + }, + "QQ音乐相关": { + "QQ音乐音频资源CDN节点": { + "name": "QQ音乐音频资源与封面图片CDN分发节点", + "categoryId": 2, + "url": "tsmusic.tc.qq.com", + "icon": "https://y.qq.com/favicon.ico" + } }, "腾讯会议核心代理服务": { "name": "腾讯会议核心代理服务", diff --git a/static/domain-info/tracker/trackers.json b/static/domain-info/tracker/trackers.json index dddc4b7..9c80c7e 100644 --- a/static/domain-info/tracker/trackers.json +++ b/static/domain-info/tracker/trackers.json @@ -14312,6 +14312,13 @@ "companyId": "tencent", "source": "AdGuard" }, + "weixin":{ + "name": "微信广告", + "categoryId": 12, + "url": "https://wxsnsdythumb.wxs.qq.com", + "companyId": "tencent", + "source": "本地" + }, "qrius": { "name": "Qrius", "categoryId": 7, diff --git a/static/js/dashboard.js b/static/js/dashboard.js index 49aa4e8..986f01a 100644 --- a/static/js/dashboard.js +++ b/static/js/dashboard.js @@ -34,7 +34,7 @@ let errorQueries = 0; // 初始化仪表盘 async function initDashboard() { try { - console.log('页面打开时强制刷新数据...'); + // 优先加载初始数据,确保页面显示最新信息 await loadDashboardData(); @@ -63,14 +63,12 @@ function connectWebSocket() { const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; const wsUrl = `${wsProtocol}//${window.location.host}/ws/stats`; - console.log('正在连接WebSocket:', wsUrl); // 创建WebSocket连接 dashboardWsConnection = new WebSocket(wsUrl); // 连接打开事件 dashboardWsConnection.onopen = function() { - console.log('WebSocket连接已建立'); showNotification('数据更新成功', 'success'); // 清除重连计时器 @@ -86,7 +84,6 @@ function connectWebSocket() { const data = JSON.parse(event.data); if (data.type === 'initial_data' || data.type === 'stats_update') { - console.log('收到实时数据更新'); processRealTimeData(data.data); } } catch (error) { @@ -122,7 +119,6 @@ function setupReconnect() { } const reconnectDelay = 5000; // 5秒后重连 - console.log(`将在${reconnectDelay}ms后尝试重新连接WebSocket`); dashboardWsReconnectTimer = setTimeout(() => { connectWebSocket(); @@ -139,7 +135,6 @@ function processRealTimeData(stats) { lastProcessedTime = now; try { - console.log('收到实时数据:', stats); // 确保stats是有效的对象 if (!stats || typeof stats !== 'object') { @@ -179,15 +174,6 @@ function processRealTimeData(stats) { allowedQueries = Number(stats.allowedQueries) || 0; } - console.log('实时数据处理完成,更新后的值:', { - totalQueries, - allowedQueries, - blockedQueries, - errorQueries - }); - - - if (document.getElementById('top-query-type')) { const queryType = stats.topQueryType || '---'; document.getElementById('top-query-type').textContent = queryType; @@ -472,7 +458,6 @@ function cleanupResources() { // 更新统计卡片 function updateStatsCards(stats) { - console.log('更新统计卡片,收到数据:', stats); // 适配不同的数据结构 // 保存当前显示的值,用于在数据缺失时保留 @@ -876,7 +861,6 @@ function updateStatsCards(stats) { // 更新Top屏蔽域名表格 async function updateTopBlockedTable(domains) { - console.log('更新Top屏蔽域名表格,收到数据:', domains); const tableBody = document.getElementById('top-blocked-table'); let tableData = []; @@ -902,7 +886,6 @@ async function updateTopBlockedTable(domains) { { name: '---.---.---', count: '---' }, { name: '---.---.---', count: '---' } ]; - console.log('使用示例数据填充Top屏蔽域名表格'); } // 计算总拦截次数 @@ -985,12 +968,10 @@ async function updateTopBlockedTable(domains) { // 更新最近屏蔽域名表格 function updateRecentBlockedTable(domains) { - console.log('更新最近屏蔽域名表格,收到数据:', domains); const tableBody = document.getElementById('recent-blocked-table'); // 确保tableBody存在,因为最近屏蔽域名卡片可能已被移除 if (!tableBody) { - console.log('未找到recent-blocked-table元素,跳过更新'); return; } @@ -1015,7 +996,6 @@ function updateRecentBlockedTable(domains) { { name: '---.---.---', timestamp: now - 45 * 60 * 1000, type: '追踪' }, { name: '---.---.---', timestamp: now - 60 * 60 * 1000, type: '恶意' } ]; - console.log('使用示例数据填充最近屏蔽域名表格'); } let html = ''; @@ -1217,7 +1197,6 @@ function isPrivateIP(ip) { // 更新TOP客户端表格 async function updateTopClientsTable(clients) { - console.log('更新TOP客户端表格,收到数据:', clients); const tableBody = document.getElementById('top-clients-table'); // 确保tableBody存在 @@ -1260,7 +1239,6 @@ async function updateTopClientsTable(clients) { { ip: '---.---.---', count: '---' }, { ip: '---.---.---', count: '---' } ]; - console.log('使用示例数据填充TOP客户端表格'); } @@ -1291,7 +1269,6 @@ async function updateTopClientsTable(clients) { // 更新请求域名排行表格 async function updateTopDomainsTable(domains) { - console.log('更新请求域名排行表格,收到数据:', domains); const tableBody = document.getElementById('top-domains-table'); // 确保tableBody存在 @@ -1325,7 +1302,6 @@ async function updateTopDomainsTable(domains) { { name: 'twitter.com', count: 35 }, { name: 'youtube.com', count: 30 } ]; - console.log('使用示例数据填充请求域名排行表格'); } // 计算总请求次数 @@ -1415,7 +1391,6 @@ let detailedCurrentTimeRange = '24h'; // 详细图表当前时间范围 // 初始化时间范围切换 function initTimeRangeToggle() { - console.log('初始化时间范围切换'); // 查找所有可能的时间范围按钮类名 const allTimeRangeButtons = document.querySelectorAll('.time-range-btn, .time-range-button, .timerange-btn, button[data-range]'); @@ -1426,7 +1401,6 @@ function initTimeRangeToggle() { return !chartModal || !chartModal.contains(button); }); - console.log('找到时间范围按钮数量:', timeRangeButtons.length, '排除了图表模态框内的按钮'); if (timeRangeButtons.length === 0) { console.warn('未找到时间范围按钮,请检查HTML中的类名'); @@ -1471,13 +1445,11 @@ function initTimeRangeToggle() { // 移除鼠标悬停提示 - console.log('为按钮设置初始样式:', button.textContent.trim(), '索引:', index, '类名:', Array.from(button.classList).join(', ')); button.addEventListener('click', function(event) { event.preventDefault(); event.stopPropagation(); - console.log('点击按钮:', button.textContent.trim(), '索引:', index); // 重置所有按钮为非选中状态 timeRangeButtons.forEach((btn, btnIndex) => { @@ -1520,7 +1492,6 @@ function initTimeRangeToggle() { } } currentTimeRange = rangeValue; - console.log('更新时间范围为:', currentTimeRange); // 重新加载数据 loadDashboardData(); @@ -1554,7 +1525,6 @@ function initTimeRangeToggle() { defaultButton.classList.add('active'); defaultButton.classList.add(...defaultStyle.active); defaultButton.classList.add(...defaultStyle.activeHover); - console.log('默认选中24小时按钮:', defaultButton.textContent.trim()); // 设置默认时间范围为24小时 currentTimeRange = '24h'; @@ -1877,12 +1847,10 @@ function initExpandButton() { const closeModalBtn = document.getElementById('close-modal-btn'); // 修复ID匹配 // 添加调试日志 - console.log('初始化展开按钮功能:', { expandBtn, chartModal, closeModalBtn }); if (expandBtn && chartModal && closeModalBtn) { // 展开按钮点击事件 expandBtn.addEventListener('click', () => { - console.log('展开按钮被点击'); // 显示浮窗 chartModal.classList.remove('hidden'); @@ -1902,7 +1870,6 @@ function initExpandButton() { // 关闭按钮点击事件 closeModalBtn.addEventListener('click', () => { - console.log('关闭按钮被点击'); chartModal.classList.add('hidden'); }); @@ -1910,7 +1877,6 @@ function initExpandButton() { chartModal.addEventListener('click', (e) => { // 检查点击目标是否是遮罩层本身(即最外层div) if (e.target === chartModal) { - console.log('点击遮罩层关闭'); chartModal.classList.add('hidden'); } }); @@ -1918,7 +1884,6 @@ function initExpandButton() { // ESC键关闭浮窗 document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && !chartModal.classList.contains('hidden')) { - console.log('ESC键关闭浮窗'); chartModal.classList.add('hidden'); } }); @@ -1933,7 +1898,6 @@ function initDetailedTimeRangeToggle() { const chartModal = document.getElementById('chart-modal'); const detailedTimeRangeButtons = chartModal ? chartModal.querySelectorAll('.time-range-btn') : []; - console.log('初始化详细图表时间范围切换,找到按钮数量:', detailedTimeRangeButtons.length); // 初始化详细图表的默认状态,与主图表保持一致 detailedCurrentTimeRange = currentTimeRange; @@ -2016,7 +1980,6 @@ function initDetailedTimeRangeToggle() { } } detailedCurrentTimeRange = rangeValue; - console.log('详细图表更新时间范围为:', detailedCurrentTimeRange); // 重新绘制详细图表 drawDetailedDNSRequestsChart(); @@ -2026,7 +1989,6 @@ function initDetailedTimeRangeToggle() { // 绘制详细的DNS请求趋势图表 function drawDetailedDNSRequestsChart() { - console.log('绘制详细DNS请求趋势图表,时间范围:', detailedCurrentTimeRange); const ctx = document.getElementById('detailed-dns-requests-chart'); if (!ctx) { @@ -2270,8 +2232,6 @@ function drawDNSRequestsChart() { // 更新图表数据 function updateCharts(stats, queryTypeStats) { - console.log('更新图表,收到统计数据:', stats); - console.log('查询类型统计数据:', queryTypeStats); // 空值检查 if (!stats) { @@ -2497,7 +2457,6 @@ function getHostsCountFromStats(stats) { // 初始化统计卡片折线图 function initStatCardCharts() { - console.log('===== 开始初始化统计卡片折线图 ====='); // 清理已存在的图表实例 for (const key in statCardCharts) { @@ -2509,7 +2468,6 @@ function initStatCardCharts() { statCardHistoryData = {}; // 检查Chart.js是否加载 - console.log('Chart.js是否可用:', typeof Chart !== 'undefined'); // 统计卡片配置信息 const cardConfigs = [ @@ -2525,7 +2483,6 @@ function initStatCardCharts() { { id: 'hosts-chart', color: '#16a085', label: 'Hosts条目数' } ]; - console.log('图表配置:', cardConfigs); cardConfigs.forEach(config => { const canvas = document.getElementById(config.id); @@ -3011,7 +2968,6 @@ function addRetryEventListeners() { const retryTopClientsBtn = document.getElementById('retry-top-clients'); if (retryTopClientsBtn) { retryTopClientsBtn.addEventListener('click', async () => { - console.log('重试获取TOP客户端数据'); const clientsData = await api.getTopClients(); if (clientsData && !clientsData.error && Array.isArray(clientsData) && clientsData.length > 0) { // 使用真实数据 @@ -3030,7 +2986,6 @@ function addRetryEventListeners() { const retryTopDomainsBtn = document.getElementById('retry-top-domains'); if (retryTopDomainsBtn) { retryTopDomainsBtn.addEventListener('click', async () => { - console.log('重试获取TOP域名数据'); const domainsData = await api.getTopDomains(); if (domainsData && !domainsData.error && Array.isArray(domainsData) && domainsData.length > 0) { // 使用真实数据 @@ -3068,7 +3023,6 @@ window.addEventListener('DOMContentLoaded', () => { }); });// 重写loadDashboardData函数,修复语法错误 async function loadDashboardData() { - console.log('开始加载仪表盘数据'); try { // 并行获取所有数据,提高加载效率 const [stats, queryTypeStatsResult, topBlockedDomainsResult, recentBlockedDomainsResult, topClientsResult] = await Promise.all([ @@ -3093,26 +3047,22 @@ async function loadDashboardData() { return; } - console.log('统计数据:', stats); // 处理查询类型统计数据 let queryTypeStats = null; if (queryTypeStatsResult) { - console.log('查询类型统计数据:', queryTypeStatsResult); queryTypeStats = queryTypeStatsResult; } else if (stats.dns && stats.dns.QueryTypes) { queryTypeStats = Object.entries(stats.dns.QueryTypes).map(([type, count]) => ({ type, count })); - console.log('从stats中提取的查询类型统计:', queryTypeStats); } // 处理TOP被屏蔽域名 let topBlockedDomains = []; if (topBlockedDomainsResult && Array.isArray(topBlockedDomainsResult)) { topBlockedDomains = topBlockedDomainsResult; - console.log('TOP被屏蔽域名:', topBlockedDomains); } else { topBlockedDomains = [ { domain: 'example-blocked.com', count: 15, lastSeen: new Date().toISOString() }, @@ -3125,7 +3075,6 @@ async function loadDashboardData() { let recentBlockedDomains = []; if (recentBlockedDomainsResult && Array.isArray(recentBlockedDomainsResult)) { recentBlockedDomains = recentBlockedDomainsResult; - console.log('最近屏蔽域名:', recentBlockedDomains); } else { recentBlockedDomains = [ { domain: '---.---.---', ip: '---.---.---.---', timestamp: new Date().toISOString() }, @@ -3145,7 +3094,6 @@ async function loadDashboardData() { let topClients = []; if (topClientsResult && !topClientsResult.error && Array.isArray(topClientsResult) && topClientsResult.length > 0) { topClients = topClientsResult; - console.log('TOP客户端:', topClients); } else { console.warn('获取TOP客户端失败或数据无效,使用模拟数据'); topClients = [ @@ -3162,7 +3110,6 @@ async function loadDashboardData() { let topDomains = []; try { const domainsData = await api.getTopDomains(); - console.log('TOP域名:', domainsData); if (domainsData && !domainsData.error && Array.isArray(domainsData) && domainsData.length > 0) { topDomains = domainsData; diff --git a/static/js/logs.js b/static/js/logs.js index 4a7dfd2..f64897e 100644 --- a/static/js/logs.js +++ b/static/js/logs.js @@ -7,7 +7,7 @@ let logsPerPage = 30; // 默认显示30条记录 let currentFilter = ''; let currentSearch = ''; let logsChart = null; -let currentSortField = ''; +let currentSortField = 'timestamp'; // 默认按时间排序,显示最新记录 let currentSortDirection = 'desc'; // 默认降序 // IP地理位置缓存(检查是否已经存在,避免重复声明) @@ -165,15 +165,12 @@ async function loadTrackersDatabase() { // 加载域名信息数据库 async function loadDomainInfoDatabase() { - console.log('开始加载域名信息数据库'); if (domainInfoLoaded) { - console.log('域名信息数据库已加载,直接返回'); return domainInfoDatabase; } if (domainInfoLoading) { - console.log('域名信息数据库正在加载中,等待完成'); // 等待正在进行的加载完成 while (domainInfoLoading) { await new Promise(resolve => setTimeout(resolve, 100)); @@ -184,7 +181,6 @@ async function loadDomainInfoDatabase() { domainInfoLoading = true; try { - console.log('发起请求获取域名信息数据库'); const response = await fetch('domain-info/domains/domain-info.json'); if (!response.ok) { @@ -194,9 +190,7 @@ async function loadDomainInfoDatabase() { return domainInfoDatabase; } - console.log('域名信息数据库请求成功,开始解析JSON'); domainInfoDatabase = await response.json(); - console.log('域名信息数据库解析成功,包含', Object.keys(domainInfoDatabase.domains || {}).length, '个公司'); domainInfoLoaded = true; return domainInfoDatabase; } catch (error) { @@ -206,7 +200,6 @@ async function loadDomainInfoDatabase() { return domainInfoDatabase; } finally { domainInfoLoading = false; - console.log('域名信息数据库加载完成'); } } @@ -247,10 +240,8 @@ async function isDomainInTrackerDatabase(domain) { // 根据域名查找对应的网站信息 async function getDomainInfo(domain) { - console.log('开始查找域名信息,域名:', domain); if (!domainInfoDatabase || !domainInfoLoaded) { - console.log('域名信息数据库未加载,调用loadDomainInfoDatabase'); await loadDomainInfoDatabase(); } @@ -261,29 +252,23 @@ async function getDomainInfo(domain) { // 规范化域名,移除可能的端口号 const normalizedDomain = domain.replace(/:\d+$/, '').toLowerCase(); - console.log('规范化后的域名:', normalizedDomain); // 遍历所有公司 - console.log('开始遍历公司,总公司数:', Object.keys(domainInfoDatabase.domains).length); for (const companyKey in domainInfoDatabase.domains) { if (domainInfoDatabase.domains.hasOwnProperty(companyKey)) { - console.log('检查公司:', companyKey); const companyData = domainInfoDatabase.domains[companyKey]; const companyName = companyData.company || companyKey; // 遍历公司下的所有网站和类别 for (const websiteKey in companyData) { if (companyData.hasOwnProperty(websiteKey) && websiteKey !== 'company') { - console.log(' 检查网站/类别:', websiteKey); const website = companyData[websiteKey]; // 如果有URL属性,直接检查域名 if (website.url) { // 处理字符串类型的URL if (typeof website.url === 'string') { - console.log(' 检查字符串URL:', website.url); if (isDomainMatch(website.url, normalizedDomain, website.categoryId)) { - console.log(' 匹配成功,返回网站信息'); return { name: website.name, icon: website.icon, @@ -295,13 +280,10 @@ async function getDomainInfo(domain) { } // 处理对象类型的URL else if (typeof website.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(website.url).length, '个URL'); for (const urlKey in website.url) { if (website.url.hasOwnProperty(urlKey)) { const urlValue = website.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); if (isDomainMatch(urlValue, normalizedDomain, website.categoryId)) { - console.log(' 匹配成功,返回网站信息'); return { name: website.name, icon: website.icon, @@ -315,18 +297,14 @@ async function getDomainInfo(domain) { } } else if (typeof website === 'object' && website !== null) { // 没有URL属性,可能是嵌套的类别 - console.log(' 发现嵌套类别,进一步检查'); for (const nestedWebsiteKey in website) { if (website.hasOwnProperty(nestedWebsiteKey) && nestedWebsiteKey !== 'company') { - console.log(' 检查嵌套网站/类别:', nestedWebsiteKey); const nestedWebsite = website[nestedWebsiteKey]; if (nestedWebsite.url) { // 处理字符串类型的URL if (typeof nestedWebsite.url === 'string') { - console.log(' 检查字符串URL:', nestedWebsite.url); if (isDomainMatch(nestedWebsite.url, normalizedDomain, nestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); return { name: nestedWebsite.name, icon: nestedWebsite.icon, @@ -338,13 +316,10 @@ async function getDomainInfo(domain) { } // 处理对象类型的URL else if (typeof nestedWebsite.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(nestedWebsite.url).length, '个URL'); for (const urlKey in nestedWebsite.url) { if (nestedWebsite.url.hasOwnProperty(urlKey)) { const urlValue = nestedWebsite.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); if (isDomainMatch(urlValue, normalizedDomain, nestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); return { name: nestedWebsite.name, icon: nestedWebsite.icon, @@ -358,18 +333,14 @@ async function getDomainInfo(domain) { } } else if (typeof nestedWebsite === 'object' && nestedWebsite !== null) { // 嵌套类别中的嵌套类别,递归检查 - console.log(' 发现二级嵌套类别,进一步检查'); for (const secondNestedWebsiteKey in nestedWebsite) { if (nestedWebsite.hasOwnProperty(secondNestedWebsiteKey) && secondNestedWebsiteKey !== 'company') { - console.log(' 检查二级嵌套网站:', secondNestedWebsiteKey); const secondNestedWebsite = nestedWebsite[secondNestedWebsiteKey]; if (secondNestedWebsite.url) { // 处理字符串类型的URL if (typeof secondNestedWebsite.url === 'string') { - console.log(' 检查字符串URL:', secondNestedWebsite.url); if (isDomainMatch(secondNestedWebsite.url, normalizedDomain, secondNestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); return { name: secondNestedWebsite.name, icon: secondNestedWebsite.icon, @@ -381,13 +352,10 @@ async function getDomainInfo(domain) { } // 处理对象类型的URL else if (typeof secondNestedWebsite.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(secondNestedWebsite.url).length, '个URL'); for (const urlKey in secondNestedWebsite.url) { if (secondNestedWebsite.url.hasOwnProperty(urlKey)) { const urlValue = secondNestedWebsite.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); if (isDomainMatch(urlValue, normalizedDomain, secondNestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); return { name: secondNestedWebsite.name, icon: secondNestedWebsite.icon, @@ -403,83 +371,67 @@ async function getDomainInfo(domain) { } } } else { - console.log(' 嵌套网站没有URL属性且不是对象类型'); } } } } else { - console.log(' 网站没有URL属性'); } } } } } - console.log('未找到匹配的域名信息'); return null; } // 检查域名是否匹配 function isDomainMatch(urlValue, targetDomain, categoryId) { - console.log(' 开始匹配URL:', urlValue, '目标域名:', targetDomain, '类别ID:', categoryId); // 规范化目标域名,去除末尾的点 const normalizedTargetDomain = targetDomain.replace(/\.$/, '').toLowerCase(); try { // 尝试将URL值解析为完整URL - console.log(' 尝试解析URL为完整URL'); const url = new URL(urlValue); let hostname = url.hostname.toLowerCase(); // 规范化主机名,去除末尾的点 hostname = hostname.replace(/\.$/, ''); - console.log(' 解析成功,主机名:', hostname, '规范化目标域名:', normalizedTargetDomain); // 根据类别ID选择匹配方式 if (categoryId === 2) { // CDN类别,使用域名后缀匹配 if (normalizedTargetDomain.endsWith('.' + hostname) || normalizedTargetDomain === hostname) { - console.log(' CDN域名后缀匹配成功'); return true; } else { - console.log(' CDN域名后缀不匹配'); return false; } } else { // 其他类别,使用完整域名匹配 if (hostname === normalizedTargetDomain) { - console.log(' 完整域名匹配成功'); return true; } else { - console.log(' 完整域名不匹配'); return false; } } } catch (e) { - console.log(' 解析URL失败,将其视为纯域名处理,错误信息:', e.message); // 如果是纯域名而不是完整URL let urlDomain = urlValue.toLowerCase(); // 规范化纯域名,去除末尾的点 urlDomain = urlDomain.replace(/\.$/, ''); - console.log(' 处理为纯域名:', urlDomain, '规范化目标域名:', normalizedTargetDomain); // 根据类别ID选择匹配方式 if (categoryId === 2) { // CDN类别,使用域名后缀匹配 if (normalizedTargetDomain.endsWith('.' + urlDomain) || normalizedTargetDomain === urlDomain) { - console.log(' CDN域名后缀匹配成功'); return true; } else { - console.log(' CDN域名后缀不匹配'); return false; } } else { // 其他类别,使用完整域名匹配 if (urlDomain === normalizedTargetDomain) { - console.log(' 完整域名匹配成功'); return true; } else { - console.log(' 完整域名不匹配'); return false; } } @@ -488,42 +440,34 @@ function isDomainMatch(urlValue, targetDomain, categoryId) { // 提取主域名 function extractPrimaryDomain(domain) { - console.log(' 开始提取主域名,原始域名:', domain); const parts = domain.split('.'); - console.log(' 域名分割为:', parts); if (parts.length <= 2) { - console.log(' 域名长度小于等于2,直接返回:', domain); return domain; } // 处理常见的三级域名 const commonSubdomains = ['www', 'mail', 'news', 'map', 'image', 'video', 'cdn', 'api', 'blog', 'shop', 'cloud', 'docs', 'help', 'support', 'dev', 'test', 'staging']; - console.log(' 检查是否为常见三级域名'); if (commonSubdomains.includes(parts[0])) { const result = parts.slice(1).join('.'); - console.log(' 是常见三级域名,返回:', result); return result; } // 处理特殊情况,如co.uk, co.jp等 const countryTLDs = ['co.uk', 'co.jp', 'co.kr', 'co.in', 'co.ca', 'co.au', 'co.nz', 'co.th', 'co.sg', 'co.my', 'co.id', 'co.za', 'com.cn', 'org.cn', 'net.cn', 'gov.cn', 'edu.cn']; - console.log(' 检查是否为特殊国家TLD'); for (const tld of countryTLDs) { if (domain.endsWith('.' + tld)) { const mainParts = domain.split('.'); const result = mainParts.slice(-tld.split('.').length - 1).join('.'); - console.log(' 是特殊国家TLD,返回:', result); return result; } } // 默认情况:返回最后两个部分 const result = parts.slice(-2).join('.'); - console.log(' 默认情况,返回最后两个部分:', result); return result; } @@ -793,7 +737,6 @@ function initResizableColumns() { // 初始化查询日志页面 function initLogsPage() { - console.log('初始化查询日志页面'); // 加载日志统计数据 loadLogsStats(); @@ -992,6 +935,9 @@ function bindLogsEvents() { loadLogs(); }); }); + + // 初始化排序图标 + updateSortIcons(); } // 更新排序图标 @@ -1345,7 +1291,6 @@ async function updateLogsTable(logs) { if (e.target.closest('button')) { return; } - console.log('Row clicked, log object:', log); showLogDetailModal(log); }); @@ -1479,14 +1424,12 @@ function connectLogsWebSocket() { const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; const wsUrl = `${wsProtocol}//${window.location.host}/ws/stats`; - console.log('正在连接WebSocket:', wsUrl); // 创建WebSocket连接 logsWsConnection = new WebSocket(wsUrl); // 连接打开事件 logsWsConnection.onopen = function() { - console.log('WebSocket连接已建立'); }; // 接收消息事件 @@ -1495,7 +1438,6 @@ function connectLogsWebSocket() { const data = JSON.parse(event.data); if (data.type === 'initial_data' || data.type === 'stats_update') { - console.log('收到实时数据更新'); // 只更新统计数据,不更新日志详情 updateLogsStatsFromWebSocket(data.data); } @@ -1530,7 +1472,6 @@ function setupLogsReconnect() { } const reconnectDelay = 5000; // 5秒后重连 - console.log(`将在${reconnectDelay}ms后尝试重新连接WebSocket`); logsWsReconnectTimer = setTimeout(() => { connectLogsWebSocket(); @@ -1567,17 +1508,13 @@ function updateLogsStatsFromWebSocket(stats) { // 拦截域名 async function blockDomain(domain) { try { - console.log(`开始拦截域名: ${domain}`); // 创建拦截规则,使用AdBlock Plus格式 const blockRule = `||${domain}^`; - console.log(`创建的拦截规则: ${blockRule}`); // 调用API添加拦截规则 - console.log(`调用API添加拦截规则,路径: /shield, 方法: POST`); const response = await apiRequest('/shield', 'POST', { rule: blockRule }); - console.log(`API响应:`, response); // 处理不同的响应格式 if (response && (response.success || response.status === 'success')) { @@ -1665,17 +1602,13 @@ async function refreshRulesList() { // 放行域名 async function unblockDomain(domain) { try { - console.log(`开始放行域名: ${domain}`); // 创建放行规则,使用AdBlock Plus格式 const allowRule = `@@||${domain}^`; - console.log(`创建的放行规则: ${allowRule}`); // 调用API添加放行规则 - console.log(`调用API添加放行规则,路径: /shield, 方法: POST`); const response = await apiRequest('/shield', 'POST', { rule: allowRule }); - console.log(`API响应:`, response); // 处理不同的响应格式 if (response && (response.success || response.status === 'success')) { @@ -1808,7 +1741,6 @@ function formatDNSString(str) { // 显示日志详情弹窗 async function showLogDetailModal(log) { - console.log('showLogDetailModal called with log:', JSON.stringify(log, null, 2)); // 输出完整的log对象 if (!log) { console.error('No log data provided!'); diff --git a/staticbak/static/api/css/style.css b/staticbak/static/api/css/style.css deleted file mode 100644 index e647096..0000000 --- a/staticbak/static/api/css/style.css +++ /dev/null @@ -1,488 +0,0 @@ -/* 基础样式 */ - body { - margin: 0; - padding: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; - background-color: #ffffff; - color: #333333; - } - - /* 默认浅色主题样式 */ - .swagger-ui .topbar { - background-color: #2c3e50; - padding: 15px 0; - } - - .swagger-ui .topbar .topbar-wrapper .link { - color: #ecf0f1; - font-size: 1.2rem; - } - - .swagger-ui .info { - margin: 20px 0; - } - - .swagger-ui .info .title { - font-size: 2rem; - margin-bottom: 10px; - color: #333; - } - - .swagger-ui .info .description { - font-size: 1rem; - color: #555; - margin-bottom: 15px; - } - - /* 修复服务器URL输入框样式 */ - .swagger-ui .servers li input[type="text"] { - padding: 8px 12px; - width: 100%; - box-sizing: border-box; - } - - /* 修复服务器选择区域的背景颜色和布局 */ - .swagger-ui .servers { - padding: 16px; - width: 100%; - box-sizing: border-box; - margin: 0; - } - - /* 确保服务器列表容器有正确的背景色和布局 */ - .swagger-ui .servers-wrapper { - width: 100%; - box-sizing: border-box; - margin: 0; - } - - /* 确保整个顶部区域颜色一致和布局正确 */ - .swagger-ui .info { - margin: 0; - padding: 20px 16px; - width: 100%; - box-sizing: border-box; - } - - /* 确保顶部主容器颜色一致和布局正确 */ - .swagger-ui { - width: 100%; - box-sizing: border-box; - margin: 0; - padding: 0; - } - - /* 确保API信息区域颜色一致和布局正确 */ - .swagger-ui .info-container { - width: 100%; - box-sizing: border-box; - } - body.dark-mode .swagger-ui .servers li label { - color: #ffffff !important; - font-weight: 500 !important; - } - - /* 修复服务器URL输入框深色模式样式 */ - body.dark-mode .swagger-ui .servers li input[type="text"] { - background-color: #1a202c !important; - color: #ffffff !important; - border-color: #4a5568 !important; - padding: 8px 12px !important; - width: 100% !important; - } - - /* 修复服务器选择区域的深色模式背景颜色和布局 */ - body.dark-mode .swagger-ui .servers { - background-color: #1a202c !important; - border: none !important; - padding: 16px !important; - width: 100% !important; - box-sizing: border-box !important; - margin: 0 !important; - } - - /* 确保服务器列表容器在深色模式下也有正确的背景色和布局 */ - body.dark-mode .swagger-ui .servers-wrapper { - background-color: #1a202c !important; - width: 100% !important; - box-sizing: border-box !important; - margin: 0 !important; - } - - /* 确保整个顶部区域在深色模式下颜色一致和布局正确 */ - body.dark-mode .swagger-ui .info { - background-color: #1a202c !important; - margin: 0 !important; - padding: 20px 16px !important; - border-bottom: 1px solid #4a5568 !important; - width: 100% !important; - box-sizing: border-box !important; - } - - /* 确保顶部主容器在深色模式下颜色一致和布局正确 */ - body.dark-mode .swagger-ui { - background-color: #1a202c !important; - width: 100% !important; - box-sizing: border-box !important; - margin: 0 !important; - padding: 0 !important; - } - - /* 确保API信息区域在深色模式下颜色一致和布局正确 */ - body.dark-mode .swagger-ui .info-container { - background-color: #1a202c !important; - width: 100% !important; - box-sizing: border-box !important; - margin: 0 !important; - padding: 0 !important; - } - - /* 修复深色模式下内容区域的布局问题 */ - body.dark-mode .swagger-ui .wrapper { - width: 100% !important; - box-sizing: border-box !important; - margin: 0 !important; - padding: 0 !important; - } - - /* 修复深色模式下API操作块的布局 */ - body.dark-mode .swagger-ui .opblock { - margin: 0 !important; - padding: 0 !important; - width: 100% !important; - box-sizing: border-box !important; - } - - /* 修复深色模式下过滤器的布局 */ - body.dark-mode .swagger-ui .filter { - width: 100% !important; - box-sizing: border-box !important; - padding: 16px !important; - margin: 0 !important; - } - - /* 修复深色模式下顶部栏布局 */ - body.dark-mode .swagger-ui .topbar { - width: 100% !important; - box-sizing: border-box !important; - margin: 0 !important; - padding: 15px 0 !important; - } - - /* 修复深色模式下顶部栏包装器布局 */ - body.dark-mode .swagger-ui .topbar .topbar-wrapper { - width: 100% !important; - box-sizing: border-box !important; - padding: 0 16px !important; - } - - /* 修复深色模式下响应容器布局 */ - body.dark-mode .swagger-ui .responses-inner { - width: 100% !important; - box-sizing: border-box !important; - } - - /* 修复深色模式下操作块摘要布局 */ - body.dark-mode .swagger-ui .opblock-summary { - width: 100% !important; - box-sizing: border-box !important; - } - - /* 确保深色模式下所有容器元素都使用box-sizing */ - body.dark-mode * { - box-sizing: border-box !important; - } - - /* 增强标签标题深色模式样式 */ - body.dark-mode .swagger-ui .opblock-tag { - color: #ffffff !important; - background-color: #2d3748 !important; - padding: 12px 16px !important; - border-radius: 6px !important; - margin-bottom: 12px !important; - font-weight: 700 !important; - font-size: 1.1rem !important; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3) !important; - } - - /* 增强标签标题(h3)深色模式样式 */ - body.dark-mode .swagger-ui .opblock-tag.h3 { - color: #ffffff !important; - background-color: #2d3748 !important; - } - - /* 增强标签部分深色模式样式 */ - body.dark-mode .swagger-ui .opblock-tag-section { - background-color: #2d3748 !important; - padding: 16px !important; - border-radius: 8px !important; - margin-bottom: 20px !important; - } - - /* 增强API描述深色模式样式 */ - body.dark-mode .swagger-ui .opblock-description-wrapper { - color: #ffffff !important; - background-color: #2d3748 !important; - padding: 12px 16px !important; - border-radius: 6px !important; - margin-bottom: 12px !important; - font-weight: 500 !important; - } - - body.dark-mode .swagger-ui .opblock-description-wrapper p { - color: #ffffff !important; - line-height: 1.5 !important; - } - - /* 增强stats标签描述深色模式样式 */ - body.dark-mode .swagger-ui .opblock-summary-description { - color: #ffffff !important; - font-weight: 500 !important; - } - - /* 增强操作块标题深色模式样式 */ - body.dark-mode .swagger-ui .opblock-title_normal h4 { - color: #ffffff !important; - font-weight: 600 !important; - } - - /* 增强参数部分深色模式样式 */ - body.dark-mode .swagger-ui .opblock-body { - background-color: #2d3748 !important; - } - - body.dark-mode .swagger-ui .opblock-body .parameter__name { - color: #ffffff !important; - font-weight: 600 !important; - } - - body.dark-mode .swagger-ui .opblock-body .parameter__type { - color: #ffffff !important; - font-weight: 500 !important; - } - - body.dark-mode .swagger-ui .opblock-body .parameter__description { - color: #ffffff !important; - } - - body.dark-mode .swagger-ui .parameters-col_description, - body.dark-mode .swagger-ui .parameters-col_name, - body.dark-mode .swagger-ui .parameters-col_type { - color: #ffffff !important; - } - - body.dark-mode .swagger-ui .parameters-col_description p, - body.dark-mode .swagger-ui .parameters-col_name p, - body.dark-mode .swagger-ui .parameters-col_type p { - color: #ffffff !important; - } - - /* 新增:适配API文档展开界面的所有文字元素 */ - body.dark-mode .swagger-ui .opblock-body { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .parameter__name { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .parameter__type { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .parameter__description { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .body-param-options { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .body-param-options .body-param-type { - color: #ffffff; - } - - body.dark-mode .swagger-ui .responses-inner { - color: #ffffff; - } - - body.dark-mode .swagger-ui .responses-inner h4 { - color: #ffffff; - } - - body.dark-mode .swagger-ui .response-container { - color: #ffffff; - } - - body.dark-mode .swagger-ui .response-container .response-wrapper { - color: #ffffff; - } - - body.dark-mode .swagger-ui .response-container .response-code { - color: #ffffff; - } - - body.dark-mode .swagger-ui .response-container .response-description { - color: #ffffff; - } - - body.dark-mode .swagger-ui .model { - color: #ffffff; - } - - body.dark-mode .swagger-ui .model .property { - color: #ffffff; - } - - body.dark-mode .swagger-ui .model .property .property-name { - color: #ffffff; - } - - body.dark-mode .swagger-ui .model .property .property-description { - color: #ffffff; - } - - body.dark-mode .swagger-ui .model .property .property-type { - color: #ffffff; - } - - body.dark-mode .swagger-ui .model .property .required { - color: #ffffff; - } - - body.dark-mode .swagger-ui .scroll-to-top { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-tag-section { - color: #ffffff; - } - - body.dark-mode .swagger-ui .servers-title { - color: #ffffff; - } - - body.dark-mode .swagger-ui .servers { - color: #ffffff; - } - - body.dark-mode .swagger-ui .servers li { - color: #ffffff; - } - - body.dark-mode .swagger-ui .servers li label { - color: #ffffff; - } - - body.dark-mode .swagger-ui .servers li select { - color: #ffffff; - background-color: #1a202c; - border-color: #4a5568; - } - - body.dark-mode .swagger-ui .auth-wrapper { - color: #ffffff; - } - - body.dark-mode .swagger-ui .auth-wrapper .auth-title { - color: #ffffff; - } - - body.dark-mode .swagger-ui .auth-wrapper .auth-list { - color: #ffffff; - } - - body.dark-mode .swagger-ui .auth-wrapper .auth-item { - color: #ffffff; - } - - body.dark-mode .swagger-ui .auth-wrapper .auth-item label { - color: #ffffff; - } - - /* 确保代码块内的文字也清晰可见 */ - body.dark-mode .swagger-ui pre { - color: #ffffff; - } - - body.dark-mode .swagger-ui code { - color: #ffffff; - } - - /* 确保所有表单元素的文字颜色正确 */ - body.dark-mode .swagger-ui form { - color: #ffffff; - } - - body.dark-mode .swagger-ui form label { - color: #ffffff; - } - - body.dark-mode .swagger-ui select { - color: #ffffff; - background-color: #1a202c; - border-color: #4a5568; - } - - /* 适配可能的嵌套内容 */ - body.dark-mode .swagger-ui .opblock-body .schema { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .schema .title { - color: #ffffff; - } - - body.dark-mode .swagger-ui .opblock-body .schema .required { - color: #ffffff; - } - - /* 适配可能的按钮组 */ - body.dark-mode .swagger-ui .btn-group { - color: #ffffff; - } - - /* 适配可能的标签 */ - body.dark-mode .swagger-ui .tag { - color: #ffffff; - } - - /* 适配可能的警告和提示信息 */ - body.dark-mode .swagger-ui .warning { - color: #ffffff; - } - - body.dark-mode .swagger-ui .hint { - color: #ffffff; - } - - /* 适配可能的表格内容 */ - body.dark-mode .swagger-ui table { - color: #ffffff; - } - - body.dark-mode .swagger-ui table th { - color: #ffffff; - } - - body.dark-mode .swagger-ui table td { - color: #ffffff; - } - - /* 响应式设计 */ - @media (max-width: 768px) { - .topbar-controls { - flex-direction: column; - align-items: flex-end; - gap: 10px; - } - - .theme-toggle-btn { - padding: 6px 10px; - font-size: 12px; - } - - .theme-toggle-btn span { - display: none; - } - } \ No newline at end of file diff --git a/staticbak/static/api/index.html b/staticbak/static/api/index.html deleted file mode 100644 index ebb375d..0000000 --- a/staticbak/static/api/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - DNS Server API 文档 - - - - - -
- - - - - \ No newline at end of file diff --git a/staticbak/static/api/js/index.js b/staticbak/static/api/js/index.js deleted file mode 100644 index 9addc52..0000000 --- a/staticbak/static/api/js/index.js +++ /dev/null @@ -1,1791 +0,0 @@ - // 定义API文档的JSON - const swaggerDocument = { - "openapi": "3.0.3", - "info": { - "title": "DNS Server API", - "description": "DNS服务器完整API文档,包括统计信息、Shield管理、主机管理等功能。", - "version": "1.2.5", - "contact": { - "name": "DNS Server 支持", - "email": "support@dnsserver.com" - }, - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - } - }, - "servers": [ - { - "url": "http://localhost:8080/api", - "description": "本地开发服务器" - }, - { - "url": "http://{host}:{port}/api", - "description": "自定义服务器", - "variables": { - "host": { - "default": "localhost" - }, - "port": { - "default": "8080" - } - } - } - ], - "paths": { - "/login": { - "post": { - "summary": "用户登录", - "description": "使用用户名和密码登录DNS服务器API。", - "tags": ["auth"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "username": {"type": "string", "description": "用户名"}, - "password": {"type": "string", "description": "密码"} - } - }, - "example": { - "username": "admin", - "password": "admin" - } - } - } - }, - "responses": { - "200": { - "description": "登录成功", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"}, - "message": {"type": "string", "description": "操作信息"} - } - }, - "example": { - "status": "success", - "message": "登录成功" - } - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "无效的请求体" - } - } - } - }, - "401": { - "description": "用户名或密码错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "用户名或密码错误" - } - } - } - } - } - } - }, - "/logout": { - "post": { - "summary": "用户注销", - "description": "注销当前登录的用户会话。", - "tags": ["auth"], - "responses": { - "200": { - "description": "注销成功", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"}, - "message": {"type": "string", "description": "操作信息"} - } - }, - "example": { - "status": "success", - "message": "注销成功" - } - } - } - } - } - } - }, - "/change-password": { - "post": { - "summary": "修改密码", - "description": "修改当前登录用户的密码。", - "tags": ["auth"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "currentPassword": {"type": "string", "description": "当前密码"}, - "newPassword": {"type": "string", "description": "新密码"} - } - }, - "example": { - "currentPassword": "admin", - "newPassword": "newpassword" - } - } - } - }, - "responses": { - "200": { - "description": "密码修改成功", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"}, - "message": {"type": "string", "description": "操作信息"} - } - }, - "example": { - "status": "success", - "message": "密码修改成功" - } - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "无效的请求体" - } - } - } - }, - "401": { - "description": "当前密码错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "当前密码错误" - } - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "保存密码失败" - } - } - } - } - } - } - }, - "/stats": { - "get": { - "summary": "获取系统统计信息", - "description": "获取DNS服务器和Shield的详细统计信息,包括查询量、CPU使用率等。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取统计信息", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "dns": { - "type": "object", - "properties": { - "Queries": {"type": "integer", "description": "总查询次数"}, - "Blocked": {"type": "integer", "description": "被阻止的查询次数"}, - "Allowed": {"type": "integer", "description": "允许的查询次数"}, - "Errors": {"type": "integer", "description": "错误查询次数"}, - "LastQuery": {"type": "string", "description": "最近一次查询时间"}, - "AvgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"}, - "TotalResponseTime": {"type": "number", "description": "总响应时间(毫秒)"}, - "QueryTypes": {"type": "object", "description": "查询类型统计"}, - "SourceIPs": {"type": "object", "description": "来源IP统计"}, - "CpuUsage": {"type": "number", "description": "CPU使用率(百分比)"}, - "DNSSECQueries": {"type": "integer", "description": "DNSSEC查询次数"}, - "DNSSECSuccess": {"type": "integer", "description": "DNSSEC成功次数"}, - "DNSSECFailed": {"type": "integer", "description": "DNSSEC失败次数"}, - "DNSSECEnabled": {"type": "boolean", "description": "是否启用DNSSEC"} - } - }, - "shield": {"type": "object", "description": "Shield统计信息"}, - "topQueryType": {"type": "string", "description": "最常见的查询类型"}, - "activeIPs": {"type": "integer", "description": "活跃IP数量"}, - "avgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"}, - "cpuUsage": {"type": "number", "description": "CPU使用率(百分比)"}, - "dnssecEnabled": {"type": "boolean", "description": "是否启用DNSSEC"}, - "dnssecQueries": {"type": "integer", "description": "DNSSEC查询次数"}, - "dnssecSuccess": {"type": "integer", "description": "DNSSEC成功次数"}, - "dnssecFailed": {"type": "integer", "description": "DNSSEC失败次数"}, - "dnssecUsage": {"type": "number", "description": "DNSSEC使用率(百分比)"}, - "time": {"type": "string", "description": "统计时间"} - } - }, - "examples": { - "default": { - "value": { - "dns": { - "Queries": 1250, - "Blocked": 230, - "Allowed": 1020, - "Errors": 0, - "LastQuery": "2023-07-15T14:30:45Z", - "AvgResponseTime": 12.5, - "TotalResponseTime": 15625, - "QueryTypes": {"A": 850, "AAAA": 250, "CNAME": 150}, - "SourceIPs": {"192.168.1.100": 500, "192.168.1.101": 750}, - "CpuUsage": 0.15, - "DNSSECQueries": 500, - "DNSSECSuccess": 480, - "DNSSECFailed": 20, - "DNSSECEnabled": true - }, - "shield": {}, - "topQueryType": "A", - "activeIPs": 2, - "avgResponseTime": 12.5, - "cpuUsage": 0.15, - "dnssecEnabled": true, - "dnssecQueries": 500, - "dnssecSuccess": 480, - "dnssecFailed": 20, - "dnssecUsage": 40.0, - "time": "2023-07-15T14:30:45Z" - } - } - } - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "无法获取统计信息"} - } - } - } - } - } - }, - "/top-blocked": { - "get": { - "summary": "获取TOP被阻止域名", - "description": "获取被阻止次数最多的域名列表。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取TOP被阻止域名", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "domain": {"type": "string", "description": "域名"}, - "count": {"type": "integer", "description": "被阻止次数"} - } - } - }, - "example": [ - {"domain": "ad.example.com", "count": 150}, - {"domain": "tracker.example.net", "count": 120} - ] - } - } - } - } - } - }, - "/top-resolved": { - "get": { - "summary": "获取TOP已解析域名", - "description": "获取解析次数最多的域名列表。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取TOP已解析域名", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "domain": {"type": "string", "description": "域名"}, - "count": {"type": "integer", "description": "解析次数"} - } - } - }, - "example": [ - {"domain": "google.com", "count": 200}, - {"domain": "facebook.com", "count": 150} - ] - } - } - } - } - } - }, - "/top-clients": { - "get": { - "summary": "获取TOP客户端", - "description": "获取查询量最多的客户端IP列表。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取TOP客户端", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ip": {"type": "string", "description": "客户端IP地址"}, - "count": {"type": "integer", "description": "查询次数"} - } - } - }, - "example": [ - {"ip": "192.168.1.100", "count": 500}, - {"ip": "192.168.1.101", "count": 750} - ] - } - } - } - } - } - }, - "/top-domains": { - "get": { - "summary": "获取TOP域名", - "description": "获取查询量最多的域名列表(包括被阻止和已解析的域名)。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取TOP域名", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "domain": {"type": "string", "description": "域名"}, - "count": {"type": "integer", "description": "查询次数"} - } - } - }, - "example": [ - {"domain": "example.com", "count": 150}, - {"domain": "google.com", "count": 120} - ] - } - } - } - } - } - }, - "/recent-blocked": { - "get": { - "summary": "获取最近被阻止的域名", - "description": "获取最近被Shield阻止的域名列表。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取最近被阻止的域名", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "domain": {"type": "string", "description": "域名"}, - "timestamp": {"type": "string", "description": "阻止时间"} - } - } - }, - "example": [ - {"domain": "ad.example.com", "timestamp": "2023-07-15T14:30:45Z"}, - {"domain": "tracker.example.net", "timestamp": "2023-07-15T14:29:30Z"} - ] - } - } - } - } - } - }, - "/hourly-stats": { - "get": { - "summary": "获取小时统计", - "description": "获取按小时统计的DNS查询数据。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取小时统计", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "labels": {"type": "array", "items": {"type": "string"}, "description": "小时标签"}, - "data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"} - } - }, - "example": { - "labels": ["15:00", "16:00", "17:00"], - "data": [120, 90, 150] - } - } - } - } - } - } - }, - "/daily-stats": { - "get": { - "summary": "获取每日统计", - "description": "获取最近7天的DNS查询统计数据。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取每日统计", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "labels": {"type": "array", "items": {"type": "string"}, "description": "日期标签"}, - "data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"} - } - }, - "example": { - "labels": ["01-02", "01-03", "01-04"], - "data": [2500, 2700, 2300] - } - } - } - } - } - } - }, - "/monthly-stats": { - "get": { - "summary": "获取每月统计", - "description": "获取最近30天的DNS查询统计数据。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取每月统计", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "labels": {"type": "array", "items": {"type": "string"}, "description": "日期标签"}, - "data": {"type": "array", "items": {"type": "integer"}, "description": "查询次数数据"} - } - }, - "example": { - "labels": ["01-01", "01-02", "01-03"], - "data": [2500, 2700, 2300] - } - } - } - } - } - } - }, - "/query/type": { - "get": { - "summary": "获取查询类型统计", - "description": "获取DNS查询类型的详细统计信息。", - "tags": ["stats"], - "responses": { - "200": { - "description": "成功获取查询类型统计", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {"type": "string", "description": "查询类型"}, - "count": {"type": "integer", "description": "查询次数"} - } - } - }, - "example": [ - {"type": "A", "count": 850}, - {"type": "AAAA", "count": 250}, - {"type": "CNAME", "count": 150} - ] - } - } - } - } - } - }, - "/logs/stats": { - "get": { - "summary": "获取日志统计信息", - "description": "获取DNS查询日志的统计信息。", - "tags": ["logs"], - "responses": { - "200": { - "description": "成功获取日志统计信息", - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "日志统计信息"} - } - } - } - } - } - }, - "/logs/query": { - "get": { - "summary": "查询日志", - "description": "根据条件查询DNS查询日志。", - "tags": ["logs"], - "parameters": [ - { - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "default": 100 - }, - "description": "返回结果数量限制" - }, - { - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "default": 0 - }, - "description": "结果偏移量" - }, - { - "name": "sort", - "in": "query", - "schema": { - "type": "string" - }, - "description": "排序字段" - }, - { - "name": "direction", - "in": "query", - "schema": { - "type": "string" - }, - "description": "排序方向" - }, - { - "name": "result", - "in": "query", - "schema": { - "type": "string" - }, - "description": "查询结果过滤" - }, - { - "name": "search", - "in": "query", - "schema": { - "type": "string" - }, - "description": "搜索关键词" - } - ], - "responses": { - "200": { - "description": "成功查询日志", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "description": "日志条目" - } - } - } - } - } - } - } - }, - "/logs/count": { - "get": { - "summary": "获取日志总数", - "description": "获取DNS查询日志的总数。", - "tags": ["logs"], - "responses": { - "200": { - "description": "成功获取日志总数", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "count": {"type": "integer", "description": "日志总数"} - } - }, - "example": { - "count": 1000 - } - } - } - } - } - } - }, - "/shield": { - "get": { - "summary": "获取Shield配置和统计信息", - "description": "获取Shield的配置信息和规则统计,包括更新间隔、屏蔽方法、黑名单数量等。", - "deprecated": false, - "tags": ["shield"], - "responses": { - "200": { - "description": "成功获取配置和统计信息", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "updateInterval": {"type": "integer", "description": "更新间隔(秒)"}, - "blockMethod": {"type": "string", "description": "屏蔽方法"}, - "blacklistCount": {"type": "integer", "description": "黑名单数量"}, - "domainRulesCount": {"type": "integer", "description": "域名规则数量"}, - "domainExceptionsCount": {"type": "integer", "description": "域名例外规则数量"}, - "regexRulesCount": {"type": "integer", "description": "正则规则数量"}, - "regexExceptionsCount": {"type": "integer", "description": "正则例外规则数量"}, - "hostsRulesCount": {"type": "integer", "description": "Hosts规则数量"} - } - }, - "example": { - "updateInterval": 3600, - "blockMethod": "NXDOMAIN", - "blacklistCount": 4, - "domainRulesCount": 1000, - "domainExceptionsCount": 100, - "regexRulesCount": 50, - "regexExceptionsCount": 10, - "hostsRulesCount": 200 - } - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "无法获取Shield配置"} - } - } - } - } - }, - "post": { - "summary": "添加屏蔽规则", - "description": "添加新的屏蔽规则到Shield。", - "deprecated": false, - "tags": ["shield"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "rule": {"type": "string", "description": "屏蔽规则"} - } - }, - "example": { - "rule": "example.com" - } - } - } - }, - "responses": { - "200": { - "description": "成功添加规则", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "参数格式错误"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "添加规则失败"} - } - } - } - } - }, - "delete": { - "summary": "删除屏蔽规则", - "description": "从Shield中删除指定的屏蔽规则。", - "deprecated": false, - "tags": ["shield"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "rule": {"type": "string", "description": "要删除的屏蔽规则"} - } - }, - "example": { - "rule": "example.com" - } - } - } - }, - "responses": { - "200": { - "description": "成功删除规则", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "参数格式错误"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "删除规则失败"} - } - } - } - } - }, - "put": { - "summary": "重新加载规则", - "description": "重新加载和应用Shield规则。", - "deprecated": false, - "tags": ["shield"], - "responses": { - "200": { - "description": "成功重新加载规则", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"}, - "message": {"type": "string", "description": "操作信息"} - } - }, - "example": { - "status": "success", - "message": "规则重新加载成功" - } - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "重新加载规则失败"} - } - } - } - } - } - }, - "/shield/blacklists": { - "get": { - "summary": "获取黑名单列表", - "description": "获取Shield的黑名单列表,包括内置黑名单和自定义黑名单。", - "deprecated": false, - "tags": ["shield"], - "responses": { - "200": { - "description": "成功获取黑名单列表", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": {"type": "string", "description": "黑名单名称"}, - "url": {"type": "string", "description": "黑名单URL"}, - "enabled": {"type": "boolean", "description": "是否启用"}, - "lastUpdate": {"type": "string", "description": "最后更新时间"}, - "status": {"type": "string", "description": "状态"}, - "rulesCount": {"type": "integer", "description": "规则数量"} - } - } - }, - "example": [ - { - "name": "AdBlock List", - "url": "https://example.com/ads.txt", - "enabled": true, - "lastUpdate": "2023-07-15T10:00:00Z", - "status": "active", - "rulesCount": 1500 - } - ] - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "获取黑名单列表失败"} - } - } - } - } - }, - "post": { - "summary": "添加黑名单", - "description": "添加新的黑名单URL到Shield。", - "deprecated": false, - "tags": ["shield"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["name", "url"], - "properties": { - "name": {"type": "string", "description": "黑名单名称"}, - "url": {"type": "string", "description": "黑名单URL"}, - "enabled": {"type": "boolean", "description": "是否启用", "default": true} - } - }, - "example": { - "name": "AdBlock List", - "url": "https://example.com/ads.txt", - "enabled": true - } - } - } - }, - "responses": { - "200": { - "description": "成功添加黑名单", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "名称和URL为必填项"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "添加黑名单失败"} - } - } - } - } - }, - "put": { - "summary": "更新黑名单列表(包括启用/禁用状态)", - "description": "更新黑名单列表(包括启用/禁用状态)。", - "deprecated": false, - "tags": ["shield"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "blacklists": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": {"type": "string", "description": "黑名单名称"}, - "url": {"type": "string", "description": "黑名单URL"}, - "enabled": {"type": "boolean", "description": "是否启用"} - } - } - } - } - }, - "example": { - "blacklists": [ - { - "name": "AdBlock List", - "url": "https://example.com/ads.txt", - "enabled": true - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "成功更新黑名单列表", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "无效的请求体"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "更新黑名单列表失败"} - } - } - } - } - } - }, - "/shield/localrules": { - "get": { - "summary": "获取自定义规则", - "description": "获取Shield的自定义规则列表。", - "deprecated": false, - "tags": ["shield"], - "responses": { - "200": { - "description": "成功获取自定义规则", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": {"type": "string", "description": "规则ID"}, - "pattern": {"type": "string", "description": "规则模式"}, - "description": {"type": "string", "description": "规则描述"} - } - } - }, - "example": [ - {"id": "1", "pattern": ".*malware.*", "description": "恶意软件域名"} - ] - } - } - } - } - }, - "post": { - "summary": "添加自定义规则", - "description": "添加新的自定义规则。", - "deprecated": false, - "tags": ["shield"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "pattern": {"type": "string", "description": "规则模式"}, - "description": {"type": "string", "description": "规则描述"} - } - }, - "example": { - "pattern": ".*ad\.com$", - "description": "广告域名" - } - } - } - }, - "responses": { - "200": { - "description": "成功添加规则", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - } - } - }, - "delete": { - "summary": "删除自定义规则", - "description": "删除指定的自定义规则。", - "deprecated": false, - "tags": ["shield"], - "parameters": [ - { - "name": "id", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "规则ID" - } - ], - "responses": { - "200": { - "description": "成功删除规则", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - } - } - } - }, - "/shield/remoterules": { - "get": { - "summary": "获取远程规则状态", - "description": "获取远程规则的更新状态和版本信息。", - "deprecated": false, - "tags": ["shield"], - "responses": { - "200": { - "description": "成功获取远程规则", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": {"type": "string", "description": "规则ID"}, - "pattern": {"type": "string", "description": "规则模式"}, - "source": {"type": "string", "description": "规则来源"} - } - } - }, - "example": [ - {"id": "1001", "pattern": ".*phishing.*", "source": "malwarelist"} - ] - } - } - } - } - } - }, - "/shield/hosts": { - "get": { - "summary": "获取hosts内容", - "description": "获取当前的hosts文件内容。", - "deprecated": false, - "tags": ["shield"], - "responses": { - "200": { - "description": "成功获取hosts列表", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ip": {"type": "string", "description": "IP地址"}, - "domain": {"type": "string", "description": "域名"} - } - } - }, - "example": [ - {"ip": "127.0.0.1", "domain": "localhost"} - ] - } - } - } - } - }, - "post": { - "summary": "添加hosts记录", - "description": "添加新的hosts记录。", - "deprecated": false, - "tags": ["shield"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["ip", "domain"], - "properties": { - "ip": {"type": "string", "description": "IP地址"}, - "domain": {"type": "string", "description": "域名"} - } - }, - "example": { - "ip": "127.0.0.1", - "domain": "example.com" - } - } - } - }, - "responses": { - "200": { - "description": "成功添加hosts记录", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "IP和域名是必填项"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "添加hosts记录失败"} - } - } - } - } - }, - "delete": { - "summary": "删除hosts记录", - "description": "删除指定域名的hosts记录。", - "deprecated": false, - "tags": ["shield"], - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "要删除的域名" - } - ], - "responses": { - "200": { - "description": "成功删除hosts记录", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "域名是必填项"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "删除hosts记录失败"} - } - } - } - } - } - }, - "/dns/query": { - "post": { - "summary": "查询DNS记录", - "description": "查询指定域名的DNS记录,可以指定记录类型。", - "tags": ["dns"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "domain": { - "type": "string", - "description": "要查询的域名" - }, - "recordType": { - "type": "string", - "description": "DNS记录类型(如A、AAAA、MX、NS等)" - } - }, - "required": ["domain"] - }, - "example": { - "domain": "example.com", - "recordType": "A" - } - } - } - }, - "responses": { - "200": { - "description": "成功获取DNS记录", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Type": { - "type": "string", - "description": "DNS记录类型" - }, - "Value": { - "type": "string", - "description": "DNS记录值" - }, - "TTL": { - "type": "integer", - "description": "生存时间" - }, - "Preference": { - "type": "integer", - "description": "MX记录优先级" - } - } - } - }, - "example": [ - {"Type": "A", "Value": "93.184.216.34", "TTL": 172800}, - {"Type": "A", "Value": "93.184.216.35", "TTL": 172800} - ] - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string", - "description": "错误信息" - } - } - }, - "example": { - "error": "Domain parameter is required" - } - } - } - } - } - } - }, - "/status": { - "get": { - "summary": "获取服务器状态", - "description": "获取DNS服务器的状态信息,包括查询统计、运行时间等。", - "tags": ["server"], - "responses": { - "200": { - "description": "成功获取服务器状态", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "服务器状态"}, - "queries": {"type": "integer", "description": "总查询次数"}, - "blocked": {"type": "integer", "description": "被阻止的查询次数"}, - "allowed": {"type": "integer", "description": "允许的查询次数"}, - "errors": {"type": "integer", "description": "错误查询次数"}, - "lastQuery": {"type": "string", "description": "最近一次查询时间"}, - "avgResponseTime": {"type": "number", "description": "平均响应时间(毫秒)"}, - "activeIPs": {"type": "integer", "description": "活跃IP数量"}, - "startTime": {"type": "string", "description": "服务器启动时间"}, - "uptime": {"type": "integer", "description": "运行时间(毫秒)"}, - "cpuUsage": {"type": "number", "description": "CPU使用率(百分比)"}, - "timestamp": {"type": "string", "description": "当前时间"} - } - }, - "example": { - "status": "running", - "queries": 1250, - "blocked": 230, - "allowed": 1020, - "errors": 0, - "lastQuery": "2023-07-15T14:30:45Z", - "avgResponseTime": 12.5, - "activeIPs": 2, - "startTime": "2023-07-15T10:00:00Z", - "uptime": 16200000, - "cpuUsage": 0.15, - "timestamp": "2023-07-15T14:30:45Z" - } - } - } - } - } - } - }, - "/config": { - "get": { - "summary": "获取服务器配置", - "description": "获取DNS服务器的配置信息,包括Shield配置。", - "tags": ["server"], - "responses": { - "200": { - "description": "成功获取服务器配置", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "shield": { - "type": "object", - "properties": { - "blockMethod": {"type": "string", "description": "屏蔽方法"}, - "customBlockIP": {"type": "string", "description": "自定义屏蔽IP"}, - "blacklists": {"type": "array", "description": "黑名单列表", "items": {"type": "object"}}, - "updateInterval": {"type": "integer", "description": "更新间隔(秒)"} - } - } - } - }, - "example": { - "shield": { - "blockMethod": "NXDOMAIN", - "customBlockIP": "", - "blacklists": [ - { - "name": "AdGuard DNS filter", - "url": "https://example.com/ads.txt", - "enabled": true - } - ], - "updateInterval": 3600 - } - } - } - } - } - } - }, - "post": { - "summary": "更新服务器配置", - "description": "更新DNS服务器的配置信息,包括Shield配置。", - "tags": ["server"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "shield": { - "type": "object", - "properties": { - "blockMethod": {"type": "string", "description": "屏蔽方法"}, - "customBlockIP": {"type": "string", "description": "自定义屏蔽IP"}, - "blacklists": {"type": "array", "description": "黑名单列表", "items": {"type": "object"}}, - "updateInterval": {"type": "integer", "description": "更新间隔(秒)"} - } - } - } - }, - "example": { - "shield": { - "blockMethod": "NXDOMAIN", - "customBlockIP": "", - "blacklists": [ - { - "name": "AdGuard DNS filter", - "url": "https://example.com/ads.txt", - "enabled": true - } - ], - "updateInterval": 3600 - } - } - } - } - }, - "responses": { - "200": { - "description": "成功更新服务器配置", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": {"type": "boolean", "description": "是否成功"}, - "message": {"type": "string", "description": "操作信息"} - } - }, - "example": { - "success": true, - "message": "配置已更新" - } - } - } - }, - "400": { - "description": "请求参数错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "无效的请求体" - } - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": { - "error": "保存配置失败" - } - } - } - } - } - } - }, - "/config/restart": { - "post": { - "summary": "重启服务器", - "description": "重启DNS服务器。", - "tags": ["server"], - "responses": { - "200": { - "description": "成功重启服务器", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": {"type": "string", "description": "操作状态"} - } - }, - "example": {"status": "success"} - } - } - }, - "500": { - "description": "服务器内部错误", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": {"type": "string", "description": "错误信息"} - } - }, - "example": {"error": "重启服务器失败"} - } - } - } - } - } - } - }, - "tags": [ - { - "name": "auth", - "description": "认证相关API" - }, - { - "name": "stats", - "description": "统计相关API" - }, - { - "name": "shield", - "description": "Shield相关API" - }, - { - "name": "server", - "description": "服务器相关API" - }, - { - "name": "logs", - "description": "日志相关API" - } - ] - }; - - // 初始化Swagger UI - window.onload = function() { - const ui = SwaggerUIBundle({ - spec: swaggerDocument, - dom_id: '#swagger-ui', - deepLinking: true, - presets: [ - SwaggerUIBundle.presets.apis, - SwaggerUIStandalonePreset - ], - plugins: [ - SwaggerUIBundle.plugins.DownloadUrl - ], - layout: "StandaloneLayout" - }); - - window.ui = ui; - }; \ No newline at end of file diff --git a/staticbak/static/css/animation.css b/staticbak/static/css/animation.css deleted file mode 100644 index 2319b5b..0000000 --- a/staticbak/static/css/animation.css +++ /dev/null @@ -1,62 +0,0 @@ - @layer utilities { - .content-auto { - content-visibility: auto; - } - .card-shadow { - box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); - } - .sidebar-item-active { - background-color: rgba(22, 93, 255, 0.1); - color: #165DFF; - border-right: 4px solid #165DFF; - } - } - - /* 服务器状态组件光晕效果 */ - .glow-effect { - animation: pulse 2s ease-in-out; - } - - @keyframes pulse { - 0% { - box-shadow: 0 0 0 0 rgba(41, 128, 185, 0.4); - } - 70% { - box-shadow: 0 0 0 10px rgba(41, 128, 185, 0); - } - 100% { - box-shadow: 0 0 0 0 rgba(41, 128, 185, 0); - } - } - - /* 服务器状态组件样式优化 */ - .server-status-widget { - min-width: 170px; - transition: all 0.3s ease; - } - - .server-status-widget:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); - } - - - /* 加载状态样式 */ - .status-loading { - animation: status-pulse 1.5s ease-in-out infinite; - } - - /* 状态脉冲动画 */ - @keyframes status-pulse { - 0%, 100% { - opacity: 1; - } - 50% { - opacity: 0.7; - } - } - - /* 保存按钮状态样式 */ - #save-blacklist-status { - transition: all 0.3s ease-in-out; - } \ No newline at end of file diff --git a/staticbak/static/css/style.css b/staticbak/static/css/style.css deleted file mode 100644 index 1bdb257..0000000 --- a/staticbak/static/css/style.css +++ /dev/null @@ -1,1157 +0,0 @@ -/* 全局样式重置 */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -html, body { - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; - background-color: #f5f7fa; - color: #333; - line-height: 1.6; - width: 100%; - height: 100%; - overflow-x: hidden; -} - -body { - position: relative; -} - -/* 基础响应式变量 */ -:root { - --sidebar-width: 250px; - --sidebar-mobile-width: 70px; - --header-height: 130px; - --content-padding: 1rem; - --card-min-width: 300px; -} - -/* 主容器样式 */ -.container { - display: flex; - flex-direction: column; - min-height: 100vh; - width: 100%; - max-width: 100%; - background-color: #fff; - box-shadow: 0 0 20px rgba(0, 0, 0, 0.05); -} - -/* 头部样式 */ -header.header-container { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - padding: 1.5rem; - width: 100%; - text-align: center; - box-sizing: border-box; - position: relative; - z-index: 10; -} - -.logo { - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1rem; -} - -.logo i { - margin-right: 1rem; - color: white; -} - -.logo h1 { - font-size: 1.8rem; - margin: 0; - font-weight: 600; -} - -header p { - font-size: 1rem; - opacity: 0.9; -} - -/* 主体布局容器 */ -.main-layout { - display: flex; - flex: 1; - min-height: 0; - transition: all 0.3s ease; -} - -/* 侧边栏样式 */ -.sidebar { - width: var(--sidebar-width); - background-color: #2c3e50; - color: white; - padding: 1rem 0; - flex-shrink: 0; - overflow-y: auto; - height: calc(100vh - var(--header-height)); /* 减去header的高度 */ - transition: width 0.3s ease; - position: relative; -} - -/* 移动设备侧边栏切换按钮 */ -.sidebar-toggle { - position: fixed; - top: calc(var(--header-height) + 10px); - left: 10px; - z-index: 100; - background-color: #2c3e50; - color: white; - border: none; - border-radius: 4px; - padding: 8px 12px; - cursor: pointer; - display: none; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); -} - -/* 响应式布局 - 平板设备 */ -@media (max-width: 992px) { - .sidebar { - width: var(--sidebar-mobile-width); - } - - .nav-item span { - display: none; - } - - .nav-item i { - margin-right: 0; - } - - .sidebar-toggle { - display: block; - } -} - -/* 响应式布局 - 移动设备 */ -@media (max-width: 768px) { - /* 这些样式已经通过Tailwind CSS类在HTML中实现,这里移除避免冲突 */ -} - -.nav-menu { - list-style: none; -} - -.nav-item { - padding: 1rem 1.5rem; - display: flex; - align-items: center; - cursor: pointer; - transition: all 0.3s ease; -} - -.nav-item:hover { - background-color: #34495e; - padding-left: 1.75rem; -} - -.nav-item.active { - background-color: #3498db; - border-left: 4px solid #fff; -} - -.nav-item i { - margin-right: 1rem; - width: 20px; - text-align: center; -} - -/* 主内容区域样式 */ -.content { - flex: 1; - padding: var(--content-padding); - overflow-y: auto; - background-color: #f8f9fa; - min-width: 0; /* 防止flex子元素溢出 */ - height: calc(100vh - var(--header-height)); /* 减去header的高度 */ - transition: padding-left 0.3s ease; -} - -/* Tooltip趋势信息颜色类 - 替代内联style */ -.tooltip-trend { - font-weight: 500; -} - -/* 注意:这些颜色值与colors.config.js中的COLOR_CONFIG.colorClassMap保持同步 */ -.tooltip-trend.blue { - color: #1890ff; -} - -.tooltip-trend.green { - color: #52c41a; -} - -.tooltip-trend.orange { - color: #fa8c16; -} - -.tooltip-trend.red { - color: #f5222d; -} - -.tooltip-trend.purple { - color: #722ed1; -} - -.tooltip-trend.cyan { - color: #13c2c2; -} - -.tooltip-trend.teal { - color: #36cfc9; -} - -/* 平板设备适配 - 侧边栏折叠时调整内容区域 */ -@media (max-width: 992px) { - .content { - padding-left: calc(var(--content-padding) + 10px); - } -} - -/* 移动设备适配 - 侧边栏隐藏时的内容区域 */ -@media (max-width: 768px) { - .content { - padding-left: var(--content-padding); - } - - /* 响应式头部样式 */ - header.header-container { - padding: 1rem; - } - - .logo h1 { - font-size: 1.5rem; - } - - header p { - font-size: 0.9rem; - } -} - -/* 面板样式 */ -.panel { - display: none; - background-color: white; - border-radius: 8px; - padding: 1.5rem; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); - box-sizing: border-box; - overflow: hidden; -} - -.panel.active { - display: block; -} - -.panel-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 1px solid #e9ecef; -} - -.panel-header h2 { - font-size: 1.5rem; - color: #2c3e50; -} - -/* 状态指示器 */ -.status-indicator { - display: flex; - align-items: center; -} - -.status-dot { - width: 10px; - height: 10px; - border-radius: 50%; - background-color: #e74c3c; - margin-right: 8px; - animation: pulse 2s infinite; -} - -.status-dot.connected { - background-color: #2ecc71; -} - -@keyframes pulse { - 0% { - transform: scale(1); - opacity: 1; - } - 50% { - transform: scale(1.1); - opacity: 0.7; - } - 100% { - transform: scale(1); - opacity: 1; - } -} - -/* 按钮样式 */ -.btn { - padding: 0.5rem 1rem; - border: none; - border-radius: 4px; - cursor: pointer; - font-size: 0.9rem; - font-weight: 500; - transition: all 0.3s ease; - display: inline-flex; - align-items: center; -} - -.btn i { - margin-right: 0.5rem; -} - -.btn-primary { - background-color: #3498db; - color: white; -} - -.btn-primary:hover { - background-color: #2980b9; -} - -.btn-secondary { - background-color: #7f8c8d; - color: white; -} - -.btn-secondary:hover { - background-color: #6c757d; -} - -.btn-success { - background-color: #2ecc71; - color: white; -} - -.btn-success:hover { - background-color: #27ae60; -} - -.btn-danger { - background-color: #e74c3c; - color: white; -} - -.btn-danger:hover { - background-color: #c0392b; -} - -.btn-warning { - background-color: #f39c12; - color: white; -} - -.btn-warning:hover { - background-color: #e67e22; -} - -.btn-sm { - padding: 0.375rem 0.75rem; - font-size: 0.8rem; -} - -.btn-block { - width: 100%; -} - -/* 统计卡片网格 */ -.stats-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(min(250px, 100%), 1fr)); - gap: clamp(1rem, 3vw, 1.5rem); /* 根据屏幕宽度动态调整间距 */ - margin-bottom: 2rem; -} - -/* 图表容器 */ -.charts-container { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); - gap: clamp(1rem, 3vw, 1.5rem); /* 根据屏幕宽度动态调整间距 */ - margin-bottom: 1.5rem; -} - -.stat-card { - background-color: white; - border-radius: 8px; - padding: clamp(1rem, 3vw, 1.5rem); /* 根据屏幕宽度动态调整内边距 */ - text-align: center; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); - transition: transform 0.3s ease, box-shadow 0.3s ease; - min-width: 0; /* 防止内容溢出 */ - display: flex; - flex-direction: column; - justify-content: center; -} - -.stat-card:hover { - transform: translateY(-5px); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); -} - -/* 卡片布局的响应式优化 */ -@media (max-width: 640px) { - /* 在极小屏幕上,调整卡片网格为单列显示 */ - .stats-grid, - .charts-container, - .tables-container { - grid-template-columns: 1fr; - } - - /* 卡片更紧凑的内边距 */ - .stat-card, - .chart-card, - .table-card { - padding: 1rem; - min-height: 120px; - } - - /* 优化统计卡片的图标大小 */ - .stat-card i { - font-size: 1.5rem; - margin-bottom: 0.5rem; - } - - /* 优化统计卡片的数值和标签 */ - .stat-value { - font-size: clamp(1.2rem, 5vw, 1.5rem); - } - - .stat-label { - font-size: clamp(0.7rem, 3vw, 0.8rem); - } - - /* 优化图表卡片标题 */ - .chart-card h3 { - font-size: clamp(1rem, 4vw, 1.1rem); - } - - /* 优化面板标题 */ - .panel-header h2 { - font-size: clamp(1.2rem, 5vw, 1.3rem); - } -} - -.stat-card i { - font-size: 2rem; - margin-bottom: 1rem; - color: #3498db; -} - -.stat-value { - font-size: 2rem; - font-weight: bold; - margin-bottom: 0.5rem; - color: #2c3e50; -} - -.stat-label { - font-size: 0.9rem; - color: #7f8c8d; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -/* 图表容器 */ -.charts-container { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; - margin-bottom: 1.5rem; -} - -.chart-card { - background-color: white; - border-radius: 8px; - padding: 1.5rem; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); -} - -.chart-card h3 { - margin-bottom: 1rem; - font-size: 1.2rem; - color: #2c3e50; -} - -/* 表格容器 */ -.tables-container { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); - gap: 1.5rem; -} - -/* 表格卡片样式 */ -.table-card { - background-color: white; - border-radius: 8px; - padding: 1.5rem; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); - min-width: 0; /* 防止子元素溢出 */ -} - -/* 表格响应式样式 */ -@media (max-width: 768px) { - /* 调整卡片内边距 */ - .table-card, - .stat-card, - .chart-card { - padding: 1rem; - } - - /* 调整表格单元格内边距 */ - th, td { - padding: 0.5rem; - font-size: 0.9rem; - } - - /* 调整表格卡片标题 */ - .table-card h3, - .chart-card h3 { - font-size: 1.1rem; - } - - /* 调整统计卡片数值和标签 */ - .stat-value { - font-size: 1.5rem; - } - - .stat-label { - font-size: 0.8rem; - } - - /* 调整面板标题 */ - .panel-header h2 { - font-size: 1.3rem; - } - - /* 调整按钮大小 */ - .btn { - padding: 0.4rem 0.8rem; - font-size: 0.85rem; - } -} - -.table-card { - background-color: white; - border-radius: 8px; - padding: 1.5rem; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); -} - -.table-card h3 { - margin-bottom: 1rem; - font-size: 1.2rem; - color: #2c3e50; -} -/* 表格样式 */ -.table-wrapper { - overflow-x: auto; - border-radius: 8px; - background-color: #ffffff; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - margin-bottom: 16px; - display: block; - width: 100%; - -webkit-overflow-scrolling: touch; /* iOS平滑滚动 */ -} - -/* 最常屏蔽和最常解析域名表格的特殊样式 */ -#top-blocked-table, #top-resolved-table { - font-size: 0.85rem; -} - -/* 限制域名表格高度,只显示5条内容 */ -.table-card .table-wrapper { - max-height: 220px; - overflow-y: auto; - overflow-x: auto; -} - -table { - width: 100%; - border-collapse: collapse; - background-color: #ffffff; - margin: 0; - table-layout: fixed; /* 固定布局,有助于响应式设计 */ -} - -th, td { - padding: 0.75rem 1rem; - text-align: left; - border-bottom: 1px solid #e9ecef; - word-break: break-word; /* 长文本自动换行 */ -} - -/* 缩小最常屏蔽和最常解析域名表格的单元格内边距 */ -#top-blocked-table th, #top-blocked-table td, -#top-resolved-table th, #top-resolved-table td { - padding: 0.5rem 0.75rem; - font-size: 0.85rem; -} - -/* 移动设备上表格的优化 */ -@media (max-width: 768px) { - /* 确保表格可以水平滚动 */ - .table-wrapper { - max-width: 100%; - margin-left: -1rem; - margin-right: -1rem; - border-radius: 0; - } - - /* 表格单元格内容截断处理 */ - td { - font-size: 0.85rem; - max-width: 150px; /* 限制单元格最大宽度 */ - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - /* 当用户触摸单元格时显示完整内容 */ - td:active { - white-space: normal; - word-break: break-word; - } - - /* 优化百分比条在小屏幕上的显示 */ - .count-cell { - position: relative; - padding-right: 50px; /* 为百分比文本留出空间 */ - } - - .percentage-text { - font-size: 10px; - right: 5px; - } -} - -th { - background-color: #f8f9fa; - font-weight: 600; - color: #2c3e50; -} - -td.loading { - text-align: center; - color: #7f8c8d; - font-style: italic; -} - -tr:hover { - background-color: #f8f9fa; -} - -/* 百分比条样式 */ -.count-cell { - position: relative; -} - -.count-number { - position: relative; - z-index: 2; - display: inline-block; -} - -.percentage-text { - position: absolute; - right: 10px; - top: 50%; - transform: translateY(-50%); - z-index: 2; - font-size: 12px; - color: #bdc3c7; -} - -.percentage-bar-container { - position: absolute; - left: 0; - top: 0; - height: 100%; - width: 100%; - z-index: 1; - overflow: hidden; - border-radius: 4px; - opacity: 0.2; -} - -.percentage-bar { - height: 100%; - transition: width 0.5s ease; - border-radius: 4px; -} - -/* 分页控件样式 */ -.pagination-controls { - background-color: #ffffff; - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - padding: 16px; - display: flex; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; - gap: 16px; -} - -.pagination-info { - font-size: 14px; - color: #666; -} - -.pagination-buttons { - display: flex; - align-items: center; - gap: 16px; - flex-wrap: wrap; -} - -.items-per-page { - display: flex; - align-items: center; - gap: 8px; - font-size: 14px; -} - -.items-per-page select { - padding: 6px 12px; - border: 1px solid #ddd; - border-radius: 4px; - background-color: #fff; - font-size: 14px; - cursor: pointer; -} - -.nav-buttons { - display: flex; - gap: 8px; -} - -.btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* 规则内容样式优化 */ -.rule-content { - max-width: 600px; -} - -.rule-content pre { - margin: 0; - font-family: inherit; - white-space: pre-wrap; - word-break: break-all; - font-size: 14px; -} - -/* 表单样式 */ -.form-group { - margin-bottom: 1rem; -} - -.form-group label { - display: block; - margin-bottom: 0.5rem; - font-weight: 500; - color: #2c3e50; -} - -.form-group input, -.form-group select { - width: 100%; - padding: 0.75rem; - border: 1px solid #ced4da; - border-radius: 4px; - font-size: 1rem; - transition: border-color 0.3s ease; -} - -.form-group input:focus, -.form-group select:focus { - outline: none; - border-color: #3498db; -} - -.form-row { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 1rem; -} - -/* 管理区域样式 */ -.rules-management, -.hosts-management, -.blacklists-management { - margin-top: 1rem; -} - -.rules-input, -.rules-filter, -.hosts-filter { - display: grid; - grid-template-columns: 1fr auto; - gap: 1rem; - margin-bottom: 1.5rem; -} - -.rules-input { - grid-template-columns: 1fr auto auto; -} - -/* 查询表单 */ -.query-form .form-group { - display: grid; - grid-template-columns: 1fr auto; - gap: 1rem; -} - -/* 查询结果样式 */ -.query-result { - margin-top: 2rem; -} - -#query-result-container { - background-color: #f8f9fa; - border-radius: 8px; - padding: 1.5rem; -} - -#query-result-container.hidden { - display: none; -} - -.result-header { - margin-bottom: 1rem; - border-bottom: 1px solid #e9ecef; - padding-bottom: 0.5rem; -} - -.result-header h3 { - font-size: 1.2rem; - color: #2c3e50; -} - -.result-item { - padding: 0.5rem 0; - border-bottom: 1px solid #e9ecef; -} - -.result-item:last-child { - border-bottom: none; -} - -/* 配置表单样式 */ -.config-form { - margin-top: 1rem; -} - -.config-section { - background-color: #f8f9fa; - border-radius: 8px; - padding: 1.5rem; - margin-bottom: 2rem; -} - -.config-section h3 { - margin-bottom: 1.5rem; - font-size: 1.2rem; - color: #2c3e50; -} - -.config-actions { - text-align: center; - margin-top: 2rem; -} - -/* 通知组件 */ -.notification { - position: fixed; - bottom: 20px; - right: 20px; - background-color: #3498db; - color: white; - padding: 1rem 1.5rem; - border-radius: 4px; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); - z-index: 1000; - transform: translateX(100%); - transition: transform 0.3s ease; -} - -.notification.show { - transform: translateX(0); -} - -.notification.success { - background-color: #2ecc71; -} - -.notification.error { - background-color: #e74c3c; -} - -.notification.warning { - background-color: #f39c12; -} - -.notification-content { - display: flex; - align-items: center; -} - -.notification-content i { - margin-right: 1rem; -} - -/* 大屏幕优化 */ -@media (min-width: 1200px) { - .container { - max-width: 1400px; - margin: 0 auto; - } -} - -/* 平板设备 */ -@media (max-width: 1024px) { - .content { - padding: 1rem; - } - - .stats-grid, - .charts-container { - grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); - } - - .tables-container { - grid-template-columns: 1fr; - } -} - -/* 移动设备 */ -@media (max-width: 768px) { - .container { - flex-direction: column; - } - - .sidebar { - width: 100%; - height: auto; - max-height: 120px; - } - - .nav-menu { - display: flex; - overflow-x: auto; - padding-bottom: 0.5rem; - } - - .nav-item { - white-space: nowrap; - padding: 0.75rem 1rem; - } - - .stats-grid, - .charts-container, - .tables-container { - grid-template-columns: 1fr; - } - - .rules-input, - .rules-filter, - .hosts-filter { - grid-template-columns: 1fr; - } - - .form-row { - grid-template-columns: 1fr; - } - - .query-form .form-group { - grid-template-columns: 1fr; - } - - .panel { - padding: 1rem; - } - - .pagination-controls { - flex-direction: column; - align-items: stretch; - gap: 12px; - } - - .pagination-buttons { - flex-direction: column; - align-items: stretch; - gap: 12px; - } - - .nav-buttons { - justify-content: center; - } -} - -/* 小屏幕移动设备 */ -@media (max-width: 480px) { - header { - padding: 1.5rem 1rem; - } - - .logo h1 { - font-size: 1.5rem; - } - - .content { - padding: 0.75rem; - } - - .panel-header { - flex-direction: column; - align-items: flex-start; - gap: 1rem; - } - - .stat-card { - padding: 1rem; - } - - .stat-value { - font-size: 1.5rem; - } - - .chart-card { - padding: 1rem; - } - - th, td { - padding: 0.5rem; - font-size: 0.9rem; - } -} -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -/* 确保按钮在不同容器中保持一致宽度 */ -.w-full { - width: 100%; -} - -/* 确保输入和按钮在表单组中有合适的高度对齐 */ -.form-group button { - height: auto; - align-self: flex-end; -} - -/* 优化表格中的操作按钮间距 */ -.actions-cell { - display: flex; - gap: 0.5rem; -} - -/* 跟踪器状态图标容器 */ -.tracker-icon-container { - position: relative; - display: inline-flex; - align-items: center; - cursor: help; -} - -/* 跟踪器浮窗样式 */ -.tracker-tooltip { - position: absolute; - top: -10px; - left: 100%; - margin-left: 10px; - background-color: white; - border: 1px solid #e2e8f0; - border-radius: 8px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - padding: 12px; - min-width: 250px; - z-index: 50; - font-size: 14px; - color: #333; - /* 添加箭头 */ -} - -/* 浮窗箭头 */ -.tracker-tooltip::before { - content: ''; - position: absolute; - top: 15px; - left: -10px; - width: 0; - height: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-right: 10px solid white; -} - -.tracker-tooltip::after { - content: ''; - position: absolute; - top: 15px; - left: -11px; - width: 0; - height: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-right: 10px solid #e2e8f0; - z-index: -1; -} - -/* 浮窗标题 */ -.tracker-tooltip .font-semibold { - font-weight: 600; - color: #2d3748; - margin-bottom: 8px; -} - -/* 搜索框样式优化 */ -#logs-search { - /* 确保搜索框在所有设备上都有合适的宽度 */ - max-width: 100%; - box-sizing: border-box; -} - -/* 在移动设备上进一步优化搜索框 */ -@media (max-width: 768px) { - /* 确保搜索框在移动设备上占满宽度 */ - #logs-search { - width: 100%; - padding: 0.5rem; - font-size: 0.9rem; - } -} - -/* 浮窗内容项 */ -.tracker-tooltip > div { - margin-bottom: 6px; -} - -/* 浮窗链接样式 */ -.tracker-tooltip a { - color: #3182ce; - text-decoration: none; -} - -.tracker-tooltip a:hover { - text-decoration: underline; -} \ No newline at end of file diff --git a/staticbak/static/css/vendor/all.min.css b/staticbak/static/css/vendor/all.min.css deleted file mode 100644 index 1f367c1..0000000 --- a/staticbak/static/css/vendor/all.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2023 Fonticons, Inc. - */ -.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} - -.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} -.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/staticbak/static/css/webfonts/fa-solid-900.woff2 b/staticbak/static/css/webfonts/fa-solid-900.woff2 deleted file mode 100644 index 5c16cd3e8a008bdcbed97022c005278971f810c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150124 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

gcuh(yM)5x$wXlMQz` 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 DW9(%e diff --git a/staticbak/static/domain-info/domains/domain-info.json b/staticbak/static/domain-info/domains/domain-info.json deleted file mode 100644 index 5202ac5..0000000 --- a/staticbak/static/domain-info/domains/domain-info.json +++ /dev/null @@ -1,535 +0,0 @@ -{ - "timeUpdated": "2025-03-17T10:05:02.622Z", - "categories": { - "0": "官方网站", - "1": "搜索引擎", - "2": "CDN", - "3": "新闻资讯", - "4": "购物网站", - "5": "社交网站", - "6": "工具网站", - "7": "社交工具", - "8": "视频网站", - "9": "混合内容", - "10": "博客/自媒体", - "11": "论坛/社区", - "12": "地图", - "13": "涉政网站", - "14": "政府网站", - "15": "政务网站", - "16": "组织网站", - "17": "事业单位", - "18": "政务服务", - "19": "网络邮件", - "20": "云服务", - "21": "网络存储", - "22": "网络服务", - "23": "CDN网络分发平台", - "24": "支付平台", - "25": "其他" - }, - "domains": { - "网易": { - "网易163": { - "name": "网易163", - "categoryId": 3, - "url": "http://www.163.com/", - "icon": "https://www.163.com/favicon.ico" - }, - "网易163免费邮": { - "name": "网易163免费邮", - "categoryId": 18, - "url": "https://mail.163.com/", - "icon": "https://mail.163.com/favicon.ico" - }, - "网易126免费邮": { - "name": "网易126免费邮", - "categoryId": 18, - "url": "https://www.126.com/", - "icon": "https://www.126.com/favicon.ico" - }, - "网易有道词典": { - "name": "网易有道词典", - "categoryId": 0, - "url": "https://dict.youdao.com/", - "icon": "https://dict.youdao.com/favicon.ico" - }, - "网易uu加速器":{ - "name": "网易uu加速器", - "categoryId": 0, - "url": { - "1": "https://uu.163.com/", - "2": "https://log.uu.163.com/" - } - }, - "company": "网易股份有限公司" - }, - "百度": { - "百度搜索": { - "name": "百度搜索", - "categoryId": 0, - "url": "https://www.baidu.com/", - "icon": "https://www.baidu.com/favicon.ico" - }, - "百度百科": { - "name": "百度百科", - "categoryId": 19, - "url": "https://baike.baidu.com/", - "icon": "https://baike.baidu.com/favicon.ico" - }, - "百度地图": { - "name": "百度地图", - "categoryId": 7, - "url": "https://map.baidu.com/", - "icon": "https://map.baidu.com/favicon.ico" - }, - "百度知道": { - "name": "百度知道", - "categoryId": 12, - "url": "https://zhidao.baidu.com/", - "icon": "https://zhidao.baidu.com/favicon.ico" - }, - "company": "北京百度网讯科技有限公司" - }, - "阿里云": { - "阿里云": { - "name": "阿里云", - "categoryId": 22, - "url": "https://www.aliyun.com/", - "icon": "https://img.alicdn.com/tfs/TB1_ZXuNcfpK1RjSZFOXXa6nFXa-32-32.ico" - }, - "阿里云API服务": { - "name": "阿里云API服务", - "categoryId": 22, - "url": "aliyuncs.com", - "icon": "https://img.alicdn.com/tfs/TB1_ZXuNcfpK1RjSZFOXXa6nFXa-32-32.ico" - }, - "阿里云DNS": { - "name": "阿里云DNS", - "categoryId": 22, - "url": { - "1": "alidns.com", - "2": "alibabadns.com" - }, - "icon": "https://img.alicdn.com/tfs/TB1_ZXuNcfpK1RjSZFOXXa6nFXa-32-32.ico" - }, - "支付宝": { - "name": "支付宝", - "categoryId": 24, - "url": "https://www.alipay.com/", - "icon": "https://www.alipay.com/favicon.ico" - }, - "淘宝": { - "name": "淘宝", - "categoryId": 4, - "url": "https://www.taobao.com/", - "icon": "https://www.taobao.com/favicon.ico" - }, - "天猫": { - "name": "天猫", - "categoryId": 4, - "url": "https://www.tmall.com/", - "icon": "https://www.tmall.com/favicon.ico" - }, - "阿里云镜像源":{ - "name": "阿里巴巴开源镜像站", - "categoryId": 0, - "url": { - "1": "https://mirrors.aliyun.com/" - }, - "icon": "https://www.aliyun.com/favicon.ico" - }, - "company": "阿里云计算有限公司/阿里巴巴集团" - }, - "UC":{ - "UC浏览器官网": { - "name": "UC浏览器官网", - "categoryId": 4, - "url": { - "1": "www.uc.cn", - "2": "https://www.uc.com/" - }, - "icon": "https://www.uc.cn/favicon.ico" - }, - "company": "广州市动景计算机科技有限公司" - }, - "腾讯": { - "微信": { - "name": "微信", - "categoryId": 7, - "url": { - "1": "https://wx.qq.com/", - "2": "https://weixin.qq.com/", - "3": "https://res.wx.qq.com/", - "4": "dns.weixin.qq.com", - "5": "pc.weixin.qq.com" - }, - "icon": "https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico" - }, - "WeChat": { - "name": "WeChat", - "categoryId": 7, - "url": { - "1":"wechat.com", - "2": "support.wechat.com", - "3": "www.wechat.com" - }, - - "icon": "https://wechat.com/favicon.ico" - }, - "微信开放平台": { - "name": "微信开放平台", - "categoryId": 24, - "url": "https://open.weixin.qq.com/", - "icon": "https://open.weixin.qq.com/favicon.ico" - }, - "微信支付": { - "name": "微信支付商户平台", - "categoryId": 24, - "url": {"1": "pay.weixin.qq.com", - "2": "pay.wechatpay.cn", - "3": "act.weixin.qq.com", - "4": "api.wechatpay.cn", - "5": "api.mch.weixin.qq.com", - "6": "api2.mch.weixin.qq.com", - "7": "api.wechatpay.cn", - "8": "api2.wechatpay.cn", - "9": "payapp.weixin.qq.com", - "10": "payapp.wechatpay.cn", - "11": "fraud.mch.weixin.qq.com", - "12": "fraud.wechatpay.cn", - "13": "action.weixin.qq.com", - "14": "action.wechatpay.cn", - "15": "wechatpay.cn" - }, - - "icon": "https://gtimg.wechatpay.cn/core/favicon.ico" - }, - "微信支付海外版": { - "name": "微信支付海外版", - "categoryId": 24, - "url": {"1": "https://pay.wechatpay.global/", - "2": "apihk.mch.weixin.qq.com", - "3": "apius.mch.weixin.qq.com" - }, - "icon": "https://gtimg.wechatpay.cn/core/favicon.ico" - }, - "微信CDN": { - "name": "微信CDN和日志等资源", - "categoryId": 23, - "url": {"1": "https://gtimg.wechatpay.cn/", - "2": "log.wechatpay.cn", - "3": "newres.wechat.com", - "4": "res.wx.qq.com", - "5": "sh.servicewechat.com", - "6": "res.servicewechat.com" - }, - "icon": "https://gtimg.wechatpay.cn/core/favicon.ico" - }, - "腾讯下载加速网络CDN": { - "name": "腾讯下载加速网络CDN", - "categoryId": 23, - "url": {"1": "dldir1v6.qq.com", - "2": "dldir1.qq.com", - "3": "dldir2.qq.com", - "4": "dldir3.qq.com", - "5": "dl.qq.com", - "6": "dldir.tencent.com", - "7": "pc.qq.com" - }, - "icon": "https://www.tencent.com/favicon.ico" - }, - "腾讯QQ": { - "name": "腾讯QQ", - "categoryId": 5, - "url": "https://im.qq.com/", - "icon": "https://im.qq.com/favicon.ico" - }, - "腾讯网": { - "name": "腾讯网", - "categoryId": 3, - "url": "https://www.qq.com/", - "icon": "https://www.qq.com/favicon.ico" - }, - "腾讯3G移动门户": { - "name": "腾讯3G移动门户", - "categoryId": 3, - "url": "3g.qq.com", - "icon": "https://www.tencent.com/favicon.ico" - }, - "3G 移动门户CDN": { - "name": "3G 移动门户CDN", - "categoryId": 23, - "url": "cdnimg.3g.qq.com", - "icon": "https://www.tencent.com/favicon.ico" - }, - "腾讯": { - "name": "腾讯", - "categoryId": 0, - "url": "https://www.tencent.com/", - "icon": "https://www.tencent.com/favicon.ico" - }, - "腾讯地图": { - "name": "腾讯地图", - "categoryId": 8, - "url": "https://map.qq.com/", - "icon": "https://map.qq.com/favicon.ico" - }, - "腾讯视频": { - "name": "腾讯视频", - "categoryId": 8, - "url": "https://v.qq.com/", - "icon": "https://v.qq.com/favicon.ico" - }, - "腾讯广告": { - "name": "腾讯广告", - "categoryId": 0, - "url": { - "1": "ugdtimg.com", - "2": "gdtimg.com", - "3": "ad.qq.com", - "4": "v3.gdt.qq.com", - "5": "c3.gdt.qq.com", - "6": "v2mi.gdt.qq.com", - "7": "gdt.qq.com" - }, - "icon": "https://www.tencent.com/favicon.ico" - }, - "腾讯Beacon事件日志上报": { - "name": "腾讯Beacon事件日志上报", - "categoryId": 0, - "url": "aeventlog.beacon.qq.com", - "icon": "https://www.tencent.com/favicon.ico" - }, - "company": "腾讯计算机系统有限公司" - }, - - "微信青少年相关":{ - "微信守护平台":{ - "name": "微信守护平台", - "categoryId": 24, - "url": "wxguard.weixin.qq.com", - "icon": "https://open.weixin.qq.com/favicon.ico" - }, - "微信未成年人服务短链接":{ - "name": "微信未成年人服务短链接", - "categoryId": 24, - "url": {"1": "minorshort.weixin.qq.com", - "2": "szminorshort.weixin.qq.com" - }, - "icon": "https://open.weixin.qq.com/favicon.ico" - }, - "深圳地区扩展短链接":{ - "name": "深圳地区扩展短链接", - "categoryId": 24, - "url": "szextshort.weixin.qq.com", - "icon": "https://open.weixin.qq.com/favicon.ico" - }, - "company": "腾讯计算机系统有限公司" - }, - "高德地图相关": { - "高德地图": { - "name": "高德地图", - "categoryId": 7, - "url": "https://map.amap.com/", - "icon": "https://a.amap.com/pc/static/favicon.ico" - }, - "高德开放平台": { - "name": "高德开放平台", - "categoryId": 7, - "url": "lbs.amap.com", - "icon": "https://a.amap.com/pc/static/favicon.ico" - }, - "高德地图API": { - "name": "高德地图API", - "categoryId": 7, - "url": "https://restapi.amap.com/", - "icon": "https://a.amap.com/pc/static/favicon.ico" - }, - "company": "北京高德图强科技有限公司" - }, - "微软": { - "微软": { - "name": "微软", - "categoryId": 0, - "url": "https://www.microsoft.com/", - "icon": "https://cdn-dynmedia-1.microsoft.com/is/content/microsoftcorp/Link-List-Icons-Microsoft-365?wid=40&hei=40" - }, - "微软Edge": { - "name": "微软Edge", - "categoryId": 0, - "url": "https://www.microsoftedgeinsider.com/", - "icon": "https://www.microsoftedgeinsider.com/favicon.ico" - }, - "微软Office": { - "name": "微软Office", - "categoryId": 0, - "url": "https://www.office.com/", - "icon": "https://www.office.com/favicon.ico" - }, - "Azure": { - "name": "Azure", - "categoryId": 0, - "url": "https://www.azure.com/", - "icon": "https://portal.azure.com/Content/favicon.ico" - }, - "网络连接状态指示器(NCSI)": { - "name": "网络连接状态指示器(NCSI)", - "categoryId": 0, - "url": "msftncsi.com", - "icon": "https://www.microsoft.com/favicon.ico" - }, - "company": "微软公司" - }, - "字节跳动": { - "抖音": { - "name": "抖音", - "categoryId": 0, - "url": "https://www.douyin.com/", - "icon": "https://www.douyin.com/favicon.ico" - }, - "今日头条": { - "name": "今日头条", - "categoryId": 0, - "url": "https://www.toutiao.com/", - "icon": "https://www.toutiao.com/favicon.ico" - }, - "抖音视频": { - "name": "抖音视频", - "categoryId": 8, - "url": "https://v.douyin.com/", - "icon": "https://v.douyin.com/favicon.ico" - }, - "字节跳动API服务": { - "name": "字节API服务", - "categoryId": 0, - "url": "zijieapi.com", - "icon": "data:image/vnd.microsoft.icon;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAACFlBMVEUAAACp3f8yW7U8jf8zW7U/3vJA5P8AydMzW7VPlP955908jP8AydM8jf8yWrV5590yWrV45908jf8yW7UyW7UyW7V55909jf88jf8yW7UzW7V56N49jf80XLY+j/80XbY/lf8zZr5Ilf9GXbkA2+RCY70zZsx459x5590AydI8jP8AydN4590AydM8jf8AydM8jf88jf94590AyNM8jf8AydN5590AydM8jf8AyNIAytR5594zW7V56N09jf955948jf8AydMAytN65948jf956N56594AytMAy9Q9jv976d8AytYAy9Z66N566uE/jv8AztUAy9cAytV56OSD798A0NYAydM8jP95590yW7R45twAydN45909jP8yWrU8jf945t0AydIyWrV5590AydIyW7UzWrU8jf8AydIzW7UzWrV459145908jf8yW7UAydM8jP8AydM8jf9459155909jf8zW7UAydQAytMAydN56N0AydMzXLYAydM0W7UAydQ8jv8+jv8Ay9QzW7Y9jf965t176N80W7YAydN56N156d4yW7U0XLc+jv8+kP8Ay9VAj/81XbgAzNQ1XbY5XbZAkf9+7eQ7Yrp96+FDlv+F6emI/+4AydN55t15594AydM+jf8+jf8+jv8AydQ1W7QzW7UAydR75942XbUyWrR86OCA8uYAztqA8eN45twyWrQAyNI8jP8bed+KAAAArnRSTlMAAfb9+wUD8HMJ/fr59+jb1dTLt6eamY+Jg3xXTkhHOhIRDQsJBwX59vbr4+Dc1tXRxcC7ubSqoJuak5CKiIN+enlyb21lXVFEQj09NzAnJiQdGBUPDvzx8O/s6Obl397OzsvIyMXEwcG/vbiysbGuqqeknZSTkI2Gf3ZraGViX15YWFVTUk9OS0pEQUA8MzAtLSomHx4bGhkXCwfApKCAdGdjXlxaWTY0MyEUFBKNTPVmAAAFHElEQVR42uzX105UYRSG4YUyiCgqKvbeK3ZFsaCCXUHE3kvU2FvU2EussfcSY2KiiSUDc4fuTcl/xr8/ZuZk7/e9g/UcfcuIiIiIiIiIiIiIiMhf7wFDPxlFKx1UdunBX6NoWGEHqp40GnmwXCWHlzz9YuTBck2cvWzdVyMPlmtSAJYy8mE5sJPXNhYYebBcO06tBMyP5do1v3aTkcPytedb7R8jh+Vr2sVVHyzxpaMXfEZbLNGltcqqHjba8LGWzNJyJdZUeHTws/GWvNJ61hTW5cSQkRMsWXUWqxWsX/HvJC2xTmK5dp4pfp0UsCywXL3633hrCShrLAd2653FvBxgufaV//xoMS5HWK4+5fdHW0zLJZYDu/wolmC5xXIVHlocv6GfcyxX/IZ+HrHiN/TziuWGvsWiLLCULBaBBVZLYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYAmBJQSWEFhCYOW1erCitfn2gqnNYPlruLdwenMQWJ7+rV40I3QCy9PWx1cOhkZgeRq35uqRbYEPWD6o9d+P9wxxwOq41IblcyaHMGB1XNHLFfO6hShgeXpz/WwLFFie6m+e3x1igBVlmgeB5anhV+s0B8tX2zQHK0rB8WCBZQYWWGCBBRZYYIEFFlhggQUWWGCBBRZYYIGVZKyKgcNGmYEVCSuTyXTtO2jEGLCiYYX1mLV0bXewfFiu0mPVz1NgebEc2NzqF0Vg+bBc20/XvCoAy4flmnKupg4sL5Zr74UfdWB5sVz7K++8B8theauovPsZLIflbWYw9MGKiNU+9MGKlBv6YEWvFCwhsMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLDAAgsssMD6325d7cQVhWEY/ocWn9JSoO5GhTqlSo2Wurt72qbu3lRwgruEQCCBE+6RHQ7YR7DWP8OeWSHvewnPwZcPLLDAAgsssMACCyywwAILLLDAAgsssMACCyywwAILLLCmGtbhHclg+Vimkk4f2r4OLLEu8dS3Z2Gw7Ft1/OvjMFj2Xan48uAqWAqwY3s2g6Xo4r/dG8FSdKF/5wawFJ3/9e4WWIoaf7xJBsu+UJ139MHyszr6YKmOfncYLM3RB0sRWGDZBBZYYIEFFlhggQUWWGBFgpWQBZYd1PMFS9cIWMamP5lfvVq8wDJAPdy3eKV4gWVo1ufy5eIFlhigcv6PQoFlwLqbM9AmXmAZsDKyfzeLX6BY6U/FJjexMrJ/NolfoFjTZs9bkipWuYd143VKQ0iiyh5qy9xFK8Q6t7ASslKGfKiAsTZ9KlkmqtzB8q95DLDu7frbIXEvIiz/mscC6877Py3iRJFg+dc8cKz1b/vOiTPprdJk0hsH6tWRenEqpVTmx9JhkeCxruX31obEtRRQM+csvCTq9Fgz8g/WJImLWULl9RS3ijo9VvrW/SdSxdUsoG4XHD0rgRb3az45WDcLitRQ+uJ+zaPHuv6y6ExsRjbu1zw6rLUvvg+6ObKqgsfK3XbgZKKQESv3UWFVl5ARK+1+YWWnkBkrc2/ZZaGJG7vmZC7vQ3G7EBERERERERERERER0dRtBK5Q857p1uutAAAAAElFTkSuQmCC" - }, - "今日头条API服务":{ - "name": "今日头条API 服务", - "categoryId": 0, - "url": "toutiaoapi.com", - "icon": "https://www.toutiao.com/favicon.ico" - }, - "豆包": { - "name": "豆包", - "categoryId": 0, - "url": "doubao.com", - "icon": "https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png" - }, - "company": "字节跳动有限公司" - }, - "金山办公": { - "金山文档": { - "name": "金山文档", - "categoryId": 0, - "url": { - "1":"kdocs.cn", - "2":"www.kdocs.cn", - "3":"365.kdocs.cn", - "4":"account.kdocs.cn" - }, - "icon": "https://qn.cache.wpscdn.cn/kdocs/mobile/touch/apple-180.png" - }, - "WPS Office": { - "name": "WPS Office", - "categoryId": 6, - "url": { - "1":"wps.cn", - "2":"www.wps.cn" - }, - "icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ2SURBVHgB7Va9biRFEK7qWa9XAuSByMEhr0FIzvARkEBgEUHEPQG79wKcTyL3Li/gnxdgl5TgTAQSQmeJxEJCIoIjOc/JyemSW4tbe70z28XX1T0z+zO2U6RzWe3unq6un6+/rl6iW7mV111Y7tzZImMekVAcvkm+NqUnxZy1S0jsQz49PdTF3Q82ych3WNzM1dM/Msp+S4UviQ32RHDlBm5MIgJrz9Bvs6y9e4Ida3MOvRXGnxRTyb2HgM6I/13nZDCQb98/IcNNtQC19J8JXf46InWM5npjfM/qnJ1dtVGjSOLgKkQWnMz4y+clcmgx2TiWb955QENpFsBhT/r7SDhymZMwEnfKOjbiFcSSRuO+k7F7FFk4xsdIECZ6xtxg7HqeuHFYQ583lh59Dgvn0qZXmL/CviGy/3tM9gJOoYPmehcMcaR7vE03Vj9yyNJsxlQf4xgkLrNFUCnvEzUwGZUoRDjjiB7peCzr9Gm9hflOgRokfZHdnfw1HPi9+X/IMu8CpHsznIIN3SgbqzvoOiXAMgBgd/nJ84TmibGx+pgcCTeoS9HSY5hpFnwh6vEPp/cr9jidE3/M+Vfb4ycv7hsf5mifzOQlYPFwM87X2B2qlq62kWnRhW3SOaC8sExDHFUadSt3OFsecg+9csGorgbAfw4GVOMDPef8fCJpy0bcnLcFVI5oFYORbcMpaQBD6/o+HybJYvawAVs4Kgq2Hd96ObqmjHK8h8gGgYw+yuWoGoXzrEXnE2SfCQ0zN3dUqc7e2VAyB0LjdtBSWugWASgK7G7EFNONtGRzFgWdp7JNKYxlCBYd+h4fP0+wFi/oGmp7ZK1WI/jowleyEIAXCy7Yl8UxGGyIzCwKjvXGxj5AZxAR2ElXPorbVDPbs7qmExKRcLUTR75plZkAFIVIDvQY3CYlpW3nKBQZ6VqoGUb6oOwgBPa1bHkUVJcnXwUd9hwAUlPZVyAAGZPnQl6UXBDLsqtrDdvReV6UHFKRuxH2AeZwCGTc2MkymO9JnSfyDN768+4WAggo7IWKxeH8vpRP3mo5TpQVUYPrBSttrabujI1sy8dvfIixZ76x3gajRhzPZq/+qEIUxjR9igr3NlVKqChZtk6NxgC9e9A8AUWL0hn+r+QvDPQTytLP+HiU3IiAmj8KXCh5IEWR8mN9C5xB1a3RfnFz/NGtTL0d7v39vsr5lQH4lTq4YM+U6aVxCuQD3JOpe19zuoNQwALp8qtsE6plvSvdXLWgmRnZL1isJXoSXjLu81GZUaGrL14otVrQ0Eg607oLfugakS2c61L9qf5a8i+e6O+CzLw3b1R1a3XHhZWp1zHhXy7Xr/NhrlvkI73fB2Vh0vvcr8pIdR0Xpisp49reILWbFPjncUe+qK0g83vK5tGbD12xqJQR3pPG0hrq8xZQ+JF/yvp0K7fyf5f/AKzIO6StcaNfAAAAAElFTkSuQmCC" - }, - "WPS CDN": { - "name": "WPS CDN", - "categoryId": 23, - "url": { - "1":"wpsdns.com", - "2":"kdocs-om.wpscdn.cn", - "3":"qn.cache.wpscdn.cn", - "4":"fe-static.wpscdn.cn", - "5":"docer-ks3.wpscdn.cn", - "6":"cloudcdn.wpscdn.cn", - "7":"vasvip-pub.wpscdn.cn", - "8":"ks3.wpsplus.wpscdn.cn", - "9":"op-kdocs.wpscdn.cn", - "10":"volcengine-cache-weboffice.wpscdn.cn", - "11":"ac.wpscdn.cn", - "12":"honeycomb-emergency.wpscdn.cn", - "13":"res-honeycomb.wpscdn.cn", - "14":"kflow.wpscdn.cn", - "15":"personal-act.wpscdn.cn", - "16":"official-package.wpscdn.cn" - }, - "icon": "https://wps.cn/favicon.ico" - }, - "company": "珠海金山办公科技有限公司" - }, - "京东": { - "京东": { - "name": "京东", - "categoryId": 4, - "url": "https://www.jd.com/", - "icon": "https://www.jd.com/favicon.ico" - }, - "company": "京东" - }, - "360": { - "360官网": { - "name": "360", - "categoryId": 0, - "url": "https://www.360.cn/", - "icon": "https://www.360.cn/favicon.ico" - }, - "360搜索": { - "name": "360搜索", - "categoryId": 0, - "url": { - "1":"https://www.so.com/", - "2":"https://so.com/" - }, - "icon": "https://www.so.com/favicon.ico" - }, - "company": "奇虎360" - }, - "绮梦之家": { - "绮梦之家": { - "name": "绮梦之家", - "categoryId": 0, - "url": { - "1": "https://www.amazehome.xyz/", - "2": "amazehome.xyz", - "3": "https://www.amazehome.cn/", - "4": "amazehome.cn" - }, - "icon": "https://www.amazehome.cn/upload/cf3f6d7f-65b5-4df2-a7af-8289fb5aad81-yagB.png" - }, - "company": "绮梦之家" - }, - "南京市中医院": { - "南京市中医院": { - "name": "南京市中医院", - "categoryId": 0, - "url": { - "1":"https://www.njszyy.cn/", - "2":"https://njszyy.cn/" - }, - "icon": "#" - }, - "company": "南京市中医院" - }, - "软件源相关": { - "腾讯镜像源":{ - "name": "腾讯软件源", - "categoryId": 0, - "url": { - "1": "https://mirrors.cloud.tencent.com/" - }, - "icon": "https://www.tencent.com/favicon.ico", - "company": "腾讯计算机系统有限公司" - } - - } - } -} diff --git a/staticbak/static/domain-info/tracker/trackers.json b/staticbak/static/domain-info/tracker/trackers.json deleted file mode 100644 index 4af4065..0000000 --- a/staticbak/static/domain-info/tracker/trackers.json +++ /dev/null @@ -1,25333 +0,0 @@ -{ - "timeUpdated": "2025-03-17T10:05:02.622Z", - "categories": { - "0": "音视频播放", - "1": "comments", - "2": "客户互动", - "3": "色情广告", - "4": "广告", - "5": "基本需求广告", - "6": "网站分析", - "7": "社交媒体", - "8": "混合内容", - "9": "CDN", - "10": "hosting", - "11": "未知的", - "12": "扩展广告", - "13": "邮件", - "14": "consent", - "15": "遥测", - "101": "移动分析" - }, - - "trackers": { - "163": { - "name": "163", - "categoryId": 4, - "url": "http://www.163.com/", - "companyId": "163" - }, - "miui.com":{ - "name": "MIUI", - "categoryId": 101, - "url": "http://tracking.miui.com", - "companyId": "miui" - }, - "1000mercis": { - "name": "1000mercis", - "categoryId": 6, - "url": "http://www.1000mercis.com/", - "companyId": "1000mercis" - }, - "161media": { - "name": "Platform161", - "categoryId": 4, - "url": "https://platform161.com/", - "companyId": "platform161" - }, - "1822direkt.de": { - "name": "1822direkt.de", - "categoryId": 8, - "url": "https://www.1822direkt.de/", - "companyId": "1822direkt", - "source": "AdGuard" - }, - "1dmp.io": { - "name": "1DMP", - "categoryId": 4, - "url": "https://1dmp.io/", - "companyId": "1dmp" - }, - "1plusx": { - "name": "1plusX", - "categoryId": 6, - "url": "https://www.1plusx.com/", - "companyId": "1plusx" - }, - "1sponsor": { - "name": "1sponsor", - "categoryId": 4, - "url": "http://fr.1sponsor.com/", - "companyId": "1sponsor" - }, - "1tag": { - "name": "1tag", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "1und1": { - "name": "1&1 IONOS", - "categoryId": 8, - "url": "http://www.ionos.com/", - "companyId": "1und1", - "source": "AdGuard" - }, - "24-ads.com": { - "name": "24-ADS", - "categoryId": 4, - "url": "http://www.24-ads.com/", - "companyId": "24-ads.com", - "source": "AdGuard" - }, - "24_7": { - "name": "[24]7", - "categoryId": 2, - "url": "http://www.247-inc.com/", - "companyId": "24_7" - }, - "24log": { - "name": "24log", - "categoryId": 6, - "url": "http://24log.ru/", - "companyId": "24log" - }, - "24smi": { - "name": "24SMI", - "categoryId": 8, - "url": "https://24smi.org/", - "companyId": "24smi", - "source": "AdGuard" - }, - "2leep": { - "name": "2leep", - "categoryId": 4, - "url": "http://2leep.com/", - "companyId": "2leep" - }, - "33across": { - "name": "33Across", - "categoryId": 4, - "url": "http://33across.com/", - "companyId": "33across" - }, - "3dstats": { - "name": "3DStats", - "categoryId": 6, - "url": "http://www.3dstats.com/", - "companyId": "3dstats" - }, - "3gpp": { - "name": "3GPP Network", - "categoryId": 5, - "url": "https://www.3gpp.org/", - "companyId": "3gpp", - "source": "AdGuard" - }, - "4chan": { - "name": "4Chan", - "categoryId": 8, - "url": "https://www.4chan.org/", - "companyId": "4chan", - "source": "AdGuard" - }, - "4finance_com": { - "name": "4finance", - "categoryId": 2, - "url": "https://4finance.com/", - "companyId": "4finance", - "source": "AdGuard" - }, - "4w_marketplace": { - "name": "4w Marketplace", - "categoryId": 4, - "url": "http://www.4wmarketplace.com/", - "companyId": "4w_marketplace" - }, - "500friends": { - "name": "500friends", - "categoryId": 2, - "url": "http://500friends.com/", - "companyId": "500friends" - }, - "51.la": { - "name": "51.La", - "categoryId": 6, - "url": "http://www.51.la/", - "companyId": "51.la" - }, - "5min_media": { - "name": "5min Media", - "categoryId": 0, - "url": "http://www.5min.com/", - "companyId": "verizon" - }, - "6sense": { - "name": "6Sense", - "categoryId": 6, - "url": "http://home.grepdata.com", - "companyId": "6sense" - }, - "77tracking": { - "name": "77Tracking", - "categoryId": 6, - "url": "http://www.77agency.com/", - "companyId": "77agency" - }, - "7plus": { - "name": "7plus", - "categoryId": 0, - "url": "https://7plus.com.au/", - "companyId": "seven_group_holdings", - "source": "AdGuard" - }, - "7tv.de": { - "name": "7tv.app", - "categoryId": 0, - "url": "https://www.7tv.app/", - "companyId": "7tv", - "source": "AdGuard" - }, - "888media": { - "name": "888media", - "categoryId": 4, - "url": "http://888media.net/", - "companyId": "888_media" - }, - "8digits": { - "name": "8digits", - "categoryId": 6, - "url": "http://8digits.com/", - "companyId": "8digits" - }, - "94j7afz2nr.xyz": { - "name": "94j7afz2nr.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "99stats": { - "name": "99stats", - "categoryId": 6, - "url": "http://www.99stats.com/", - "companyId": "99stats" - }, - "a3cloud_net": { - "name": "a3cloud.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "a8": { - "name": "A8", - "categoryId": 4, - "url": "http://www.a8.net/", - "companyId": "a8" - }, - "aaxads.com": { - "name": "Acceptable Ads Exchange", - "categoryId": 4, - "url": "https://aax.media/", - "companyId": null - }, - "ab_tasty": { - "name": "AB Tasty", - "categoryId": 6, - "url": "https://en.abtasty.com", - "companyId": "ab_tasty" - }, - "abc": { - "name": "Australian Broadcasting Corporation", - "categoryId": 8, - "url": "https://www.abc.net.au/", - "companyId": "australian_government", - "source": "AdGuard" - }, - "ablida": { - "name": "ablida", - "categoryId": 4, - "url": "https://www.ablida.de/", - "companyId": null - }, - "accelia": { - "name": "Accelia", - "categoryId": 4, - "url": "http://www.durasite.net/", - "companyId": "accelia" - }, - "accengage": { - "name": "Accengage", - "categoryId": 4, - "url": "https://www.accengage.com/", - "companyId": "accengage" - }, - "accessanalyzer": { - "name": "AccessAnalyzer", - "categoryId": 6, - "url": "http://ax.xrea.com/", - "companyId": "accessanalyzer" - }, - "accesstrade": { - "name": "AccessTrade", - "categoryId": 4, - "url": "http://accesstrade.net/", - "companyId": "accesstrade" - }, - "accord_group": { - "name": "Accord Group", - "categoryId": 4, - "url": "http://www.accordgroup.co.uk/", - "companyId": "accord_group" - }, - "accordant_media": { - "name": "Accordant Media", - "categoryId": 4, - "url": "http://www.accordantmedia.com/", - "companyId": "accordant_media" - }, - "accuen_media": { - "name": "Accuen Media", - "categoryId": 4, - "url": "http://www.accuenmedia.com/", - "companyId": "accuen_media" - }, - "acestream.net": { - "name": "ActStream", - "categoryId": 12, - "url": "http://www.acestream.org/", - "companyId": null - }, - "acint.net": { - "name": "Artificial Computation Intelligence", - "categoryId": 6, - "url": "https://www.acint.net/", - "companyId": "acint" - }, - "acloudimages": { - "name": "Acloudimages", - "categoryId": 4, - "url": "http://adsterra.com", - "companyId": "adsterra" - }, - "acpm.fr": { - "name": "ACPM", - "categoryId": 6, - "url": "http://www.acpm.fr/", - "companyId": null - }, - "acquia.com": { - "name": "Acquia", - "categoryId": 6, - "url": "https://www.acquia.com/", - "companyId": null - }, - "acrweb": { - "name": "ACRWEB", - "categoryId": 7, - "url": "http://www.ziyu.net/", - "companyId": "acrweb" - }, - "actionpay": { - "name": "actionpay", - "categoryId": 4, - "url": "http://actionpay.ru/", - "companyId": "actionpay" - }, - "active_agent": { - "name": "Active Agent", - "categoryId": 4, - "url": "http://www.active-agent.com/", - "companyId": "active_agent" - }, - "active_campaign": { - "name": "Active Campaign", - "categoryId": 6, - "url": "https://www.activecampaign.com", - "companyId": "active_campaign" - }, - "active_performance": { - "name": "Active Performance", - "categoryId": 4, - "url": "http://www.active-performance.de/", - "companyId": "active_performance" - }, - "activeconversion": { - "name": "ActiveConversion", - "categoryId": 4, - "url": "http://www.activeconversion.com/", - "companyId": "activeconversion" - }, - "activecore": { - "name": "activecore", - "categoryId": 6, - "url": "http://activecore.jp/", - "companyId": "activecore" - }, - "activemeter": { - "name": "ActiveMeter", - "categoryId": 4, - "url": "http://www.activemeter.com/", - "companyId": "activeconversion" - }, - "activengage": { - "name": "ActivEngage", - "categoryId": 2, - "url": "http://www.activengage.com", - "companyId": "activengage" - }, - "acton": { - "name": "Act-On Beacon", - "categoryId": 4, - "url": "http://www.actonsoftware.com/", - "companyId": "act-on" - }, - "acuity_ads": { - "name": "Acuity Ads", - "categoryId": 4, - "url": "http://www.acuityads.com/", - "companyId": "acuity_ads" - }, - "acxiom": { - "name": "Acxiom", - "categoryId": 4, - "url": "http://www.acxiom.com", - "companyId": "acxiom" - }, - "ad-blocker.org": { - "name": "ad-blocker.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-center": { - "name": "Ad-Center", - "categoryId": 6, - "url": "http://www.ad-center.com", - "companyId": "ad-center" - }, - "ad-delivery.net": { - "name": "ad-delivery.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-sys": { - "name": "Ad-Sys", - "categoryId": 4, - "url": "http://www.ad-sys.com/", - "companyId": "ad-sys" - }, - "ad.agio": { - "name": "Ad.agio", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "ad2click": { - "name": "Ad2Click", - "categoryId": 4, - "url": "http://www.ad2click.com/", - "companyId": "ad2click_media" - }, - "ad2games": { - "name": "ad2games", - "categoryId": 4, - "url": "http://web.ad2games.com/", - "companyId": "ad2games" - }, - "ad360": { - "name": "Ad360", - "categoryId": 4, - "url": "http://ad360.vn", - "companyId": "ad360" - }, - "ad4game": { - "name": "ad4game", - "categoryId": 4, - "url": "http://www.ad4game.com/", - "companyId": "ad4game" - }, - "ad4mat": { - "name": "ad4mat", - "categoryId": 4, - "url": "http://ad4mat.info", - "companyId": "ad4mat" - }, - "ad6media": { - "name": "ad6media", - "categoryId": 4, - "url": "https://www.ad6media.fr/", - "companyId": "ad6media" - }, - "ad_decisive": { - "name": "Ad Decisive", - "categoryId": 4, - "url": "http://www.lagardere-global-advertising.com/", - "companyId": "lagardere_advertising" - }, - "ad_dynamo": { - "name": "Ad Dynamo", - "categoryId": 4, - "url": "http://www.addynamo.com/", - "companyId": "ad_dynamo" - }, - "ad_ebis": { - "name": "AD EBiS", - "categoryId": 4, - "url": "http://www.ebis.ne.jp/en/", - "companyId": "ad_ebis" - }, - "ad_lightning": { - "name": "Ad Lightning", - "categoryId": 4, - "url": "https://www.adlightning.com/", - "companyId": "ad_lightning" - }, - "ad_magnet": { - "name": "Ad Magnet", - "categoryId": 4, - "url": "http://www.admagnet.com/", - "companyId": "ad_magnet" - }, - "ad_spirit": { - "name": "Ad Spirit", - "categoryId": 4, - "url": "http://www.adspirit.de", - "companyId": "adspirit" - }, - "adac_de": { - "name": "adac.de", - "categoryId": 8, - "url": "http://adac.de/", - "companyId": null - }, - "adacado": { - "name": "Adacado", - "categoryId": 4, - "url": "http://www.adacado.com/", - "companyId": "adacado" - }, - "adadyn": { - "name": "Adadyn", - "categoryId": 4, - "url": "http://ozonemedia.com/index.html", - "companyId": "adadyn" - }, - "adality_gmbh": { - "name": "adality GmbH", - "categoryId": 4, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "adalliance.io": { - "name": "Ad Alliance", - "categoryId": 4, - "url": "https://www.ad-alliance.de/", - "companyId": null - }, - "adalyser.com": { - "name": "Adalyser", - "categoryId": 6, - "url": "https://www.adalyser.com/", - "companyId": "onesoon" - }, - "adaos": { - "name": "ADAOS", - "categoryId": 4, - "url": "http://www.24-interactive.com", - "companyId": "24_interactive" - }, - "adap.tv": { - "name": "Adap.tv", - "categoryId": 4, - "url": "http://www.adap.tv/", - "companyId": "verizon" - }, - "adaptiveblue_smartlinks": { - "name": "AdaptiveBlue SmartLinks", - "categoryId": 2, - "url": "http://www.adaptiveblue.com/smartlinks.html", - "companyId": "telfie" - }, - "adara_analytics": { - "name": "ADARA Analytics", - "categoryId": 4, - "url": "http://www.adaramedia.com/", - "companyId": "adara_analytics" - }, - "adasia_holdings": { - "name": "AdAsia Holdings", - "categoryId": 4, - "url": "https://adasiaholdings.com/", - "companyId": "adasia_holdings" - }, - "adbetclickin.pink": { - "name": "adbetnet", - "categoryId": 4, - "url": "http://adbetnet.com/", - "companyId": null - }, - "adbetnet.com": { - "name": "adbetnet", - "categoryId": 4, - "url": "https://adbetnet.com/", - "companyId": null - }, - "adblade.com": { - "name": "Adblade", - "categoryId": 4, - "url": "https://adblade.com/", - "companyId": "adblade" - }, - "adbooth": { - "name": "Adbooth", - "categoryId": 4, - "url": "http://www.adbooth.com/", - "companyId": "adbooth_media_group" - }, - "adbox": { - "name": "AdBox", - "categoryId": 4, - "url": "http://www.adbox.lv/", - "companyId": "adbox" - }, - "adbrain": { - "name": "Adbrain", - "categoryId": 6, - "url": "https://www.adbrain.com/", - "companyId": "adbrain" - }, - "adbrite": { - "name": "AdBrite", - "categoryId": 4, - "url": "http://www.adbrite.com/", - "companyId": "centro" - }, - "adbull": { - "name": "AdBull", - "categoryId": 4, - "url": "http://www.adbull.com/", - "companyId": "adbull" - }, - "adbutler": { - "name": "AdButler", - "categoryId": 4, - "url": "https://www.adbutler.com/d", - "companyId": "sparklit_networks" - }, - "adc_media": { - "name": "ad:C media", - "categoryId": 4, - "url": "http://www.adcmedia.de/en/", - "companyId": "ad:c_media" - }, - "adcash": { - "name": "Adcash", - "categoryId": 4, - "url": "http://www.adcash.com", - "companyId": "adcash" - }, - "adchakra": { - "name": "AdChakra", - "categoryId": 6, - "url": "http://adchakra.com/", - "companyId": "adchakra" - }, - "adchina": { - "name": "AdChina", - "categoryId": 4, - "url": "http://www.adchina.com/", - "companyId": null, - "source": "AdGuard" - }, - "adcito": { - "name": "Adcito", - "categoryId": 4, - "url": "http://adcito.com/", - "companyId": "adcito" - }, - "adclear": { - "name": "AdClear", - "categoryId": 4, - "url": "http://www.adclear.de/en/home.html", - "companyId": "adclear" - }, - "adclerks": { - "name": "Adclerks", - "categoryId": 4, - "url": "https://adclerks.com/", - "companyId": "adclerks" - }, - "adclickmedia": { - "name": "AdClickMedia", - "categoryId": 4, - "url": "http://www.adclickmedia.com/", - "companyId": "adclickmedia" - }, - "adclickzone": { - "name": "AdClickZone", - "categoryId": 4, - "url": "http://www.adclickzone.com/", - "companyId": "adclickzone" - }, - "adcloud": { - "name": "adcloud", - "categoryId": 4, - "url": "https://ad-cloud.jp", - "companyId": "adcloud" - }, - "adcolony": { - "name": "AdColony", - "categoryId": 4, - "url": "https://www.adcolony.com/history-of-adcolony/", - "companyId": "digital_turbine", - "source": "AdGuard" - }, - "adconion": { - "name": "Adconion", - "categoryId": 4, - "url": "http://www.adconion.com/", - "companyId": "singtel" - }, - "adcrowd": { - "name": "Adcrowd", - "categoryId": 4, - "url": "https://www.adcrowd.com", - "companyId": "adcrowd" - }, - "adcurve": { - "name": "AdCurve", - "categoryId": 4, - "url": "http://www.shop2market.com/", - "companyId": "adcurve" - }, - "add_to_calendar": { - "name": "Add To Calendar", - "categoryId": 2, - "url": "http://addtocalendar.com/", - "companyId": "addtocalendar" - }, - "addaptive": { - "name": "Addaptive", - "categoryId": 4, - "url": "http://www.datapointmedia.com/", - "companyId": "addaptive" - }, - "addefend": { - "name": "AdDefend", - "categoryId": 4, - "url": "https://www.addefend.com/", - "companyId": null - }, - "addfreestats": { - "name": "AddFreeStats", - "categoryId": 6, - "url": "http://www.addfreestats.com/", - "companyId": "3dstats" - }, - "addinto": { - "name": "AddInto", - "categoryId": 2, - "url": "http://www.addinto.com/", - "companyId": "addinto" - }, - "addshoppers": { - "name": "AddShoppers", - "categoryId": 7, - "url": "http://www.addshoppers.com/", - "companyId": "addshoppers" - }, - "addthis": { - "name": "AddThis", - "categoryId": 4, - "url": "http://www.addthis.com/", - "companyId": "oracle" - }, - "addvalue": { - "name": "Addvalue", - "categoryId": 6, - "url": "http://www.addvalue.de/en/", - "companyId": "addvalue.de" - }, - "addyon": { - "name": "AddyON", - "categoryId": 4, - "url": "http://www.addyon.com/homepage.php", - "companyId": "addyon" - }, - "adeasy": { - "name": "AdEasy", - "categoryId": 4, - "url": "http://www.adeasy.ru/", - "companyId": "adeasy" - }, - "adelphic": { - "name": "Adelphic", - "categoryId": 6, - "url": "http://www.adelphic.com/", - "companyId": "adelphic" - }, - "adengage": { - "name": "AdEngage", - "categoryId": 4, - "url": "http://www.adengage.com", - "companyId": "synacor" - }, - "adespresso": { - "name": "AdEspresso", - "categoryId": 4, - "url": "http://adespresso.com", - "companyId": "adespresso" - }, - "adexcite": { - "name": "AdExcite", - "categoryId": 4, - "url": "http://adexcite.com", - "companyId": "adexcite" - }, - "adextent": { - "name": "AdExtent", - "categoryId": 4, - "url": "http://www.adextent.com/", - "companyId": "adextent" - }, - "adf.ly": { - "name": "AdF.ly", - "categoryId": 4, - "url": "http://adf.ly/", - "companyId": "adf.ly" - }, - "adfalcon": { - "name": "AdFalcon", - "categoryId": 4, - "url": "http://www.adfalcon.com/", - "companyId": "adfalcon" - }, - "adfocus": { - "name": "AdFocus", - "categoryId": 4, - "url": "http://adfoc.us/", - "companyId": "adfoc.us" - }, - "adforgames": { - "name": "AdForGames", - "categoryId": 4, - "url": "http://www.adforgames.com/", - "companyId": "adforgames" - }, - "adform": { - "name": "Adform", - "categoryId": 4, - "url": "http://www.adform.com", - "companyId": "adform" - }, - "adfox": { - "name": "AdFox", - "categoryId": 4, - "url": "http://adfox.ru", - "companyId": "yandex" - }, - "adfreestyle": { - "name": "adFreestyle", - "categoryId": 4, - "url": "http://www.adfreestyle.pl/", - "companyId": "adfreestyle" - }, - "adfront": { - "name": "AdFront", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "adfrontiers": { - "name": "AdFrontiers", - "categoryId": 4, - "url": "http://www.adfrontiers.com/", - "companyId": "adfrontiers" - }, - "adgear": { - "name": "AdGear", - "categoryId": 4, - "url": "http://adgear.com/", - "companyId": "samsung" - }, - "adgebra": { - "name": "Adgebra", - "categoryId": 4, - "url": "https://adgebra.in/", - "companyId": "adgebra" - }, - "adgenie": { - "name": "adGENIE", - "categoryId": 4, - "url": "http://www.adgenie.co.uk/", - "companyId": "ve" - }, - "adgile": { - "name": "Adgile", - "categoryId": 4, - "url": "http://www.adgile.com/", - "companyId": "adgile_media" - }, - "adglare.net": { - "name": "Adglare", - "categoryId": 4, - "url": "https://www.adglare.com/", - "companyId": null - }, - "adglue": { - "name": "Adglue", - "categoryId": 4, - "url": "http://admans.de/de.html", - "companyId": "admans" - }, - "adgoal": { - "name": "adgoal", - "categoryId": 4, - "url": "http://www.adgoal.de/", - "companyId": "adgoal" - }, - "adgorithms": { - "name": "Adgorithms", - "categoryId": 4, - "url": "http://www.adgorithms.com/", - "companyId": "albert" - }, - "adgoto": { - "name": "ADGoto", - "categoryId": 4, - "url": "http://adgoto.com/", - "companyId": "adgoto" - }, - "adguard": { - "name": "AdGuard", - "categoryId": 8, - "url": "https://adguard.com/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adguard_dns": { - "name": "AdGuard DNS", - "categoryId": 8, - "url": "https://adguard-dns.io/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adguard_vpn": { - "name": "AdGuard VPN", - "categoryId": 8, - "url": "https://adguard-vpn.com/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adhands": { - "name": "AdHands", - "categoryId": 4, - "url": "http://promo.adhands.ru/", - "companyId": "adhands" - }, - "adhese": { - "name": "Adhese", - "categoryId": 4, - "url": "http://adhese.com", - "companyId": "adhese" - }, - "adhitz": { - "name": "AdHitz", - "categoryId": 4, - "url": "http://www.adhitz.com/", - "companyId": "adhitz" - }, - "adhood": { - "name": "adhood", - "categoryId": 4, - "url": "http://www.adhood.com/", - "companyId": "adhood" - }, - "adify": { - "name": "Adify", - "categoryId": 4, - "url": "http://www.adify.com/", - "companyId": "cox_enterpries" - }, - "adikteev": { - "name": "Adikteev", - "categoryId": 4, - "url": "http://www.adikteev.com/", - "companyId": "adikteev" - }, - "adimpact": { - "name": "Adimpact", - "categoryId": 4, - "url": "http://www.adimpact.com/", - "companyId": "adimpact" - }, - "adinch": { - "name": "Adinch", - "categoryId": 4, - "url": "http://adinch.com/", - "companyId": "adinch" - }, - "adition": { - "name": "Adition", - "categoryId": 4, - "url": "http://en.adition.com/", - "companyId": "prosieben_sat1" - }, - "adjal": { - "name": "Adjal", - "categoryId": 4, - "url": "http://adjal.com/", - "companyId": "marketing_adjal" - }, - "adjs": { - "name": "ADJS", - "categoryId": 4, - "url": "https://github.com/widgital/adjs", - "companyId": "adjs" - }, - "adjug": { - "name": "AdJug", - "categoryId": 4, - "url": "http://www.adjug.com/", - "companyId": "adjug" - }, - "adjust": { - "name": "Adjust GmbH", - "categoryId": 101, - "url": "https://www.adjust.com/", - "companyId": "applovin", - "source": "AdGuard" - }, - "adk2": { - "name": "adk2", - "categoryId": 4, - "url": "http://www.adk2.com/", - "companyId": "adk2_plymedia" - }, - "adklip": { - "name": "adklip", - "categoryId": 4, - "url": "http://adklip.com", - "companyId": "adklip" - }, - "adknowledge": { - "name": "Adknowledge", - "categoryId": 4, - "url": "http://www.adknowledge.com/", - "companyId": "adknowledge" - }, - "adkontekst": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://www.en.adkontekst.pl/", - "companyId": "adkontekst" - }, - "adkontekst.pl": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://netsprint.eu/", - "companyId": "netsprint" - }, - "adlabs": { - "name": "AdLabs", - "categoryId": 4, - "url": "https://www.adlabs.ru/", - "companyId": "adlabs" - }, - "adlantic": { - "name": "AdLantic", - "categoryId": 4, - "url": "http://www.adlantic.nl/", - "companyId": "adlantic_online_advertising" - }, - "adlantis": { - "name": "AdLantis", - "categoryId": 4, - "url": "http://www.adlantis.jp/", - "companyId": "adlantis" - }, - "adless": { - "name": "Adless", - "categoryId": 4, - "url": "https://www.adless.io/", - "companyId": "adless" - }, - "adlive_header_bidding": { - "name": "Adlive Header Bidding", - "categoryId": 4, - "url": "http://adlive.io/", - "companyId": "adlive" - }, - "adloox": { - "name": "Adloox", - "categoryId": 4, - "url": "http://www.adloox.com", - "companyId": "adloox" - }, - "admachine": { - "name": "AdMachine", - "categoryId": 4, - "url": "https://admachine.co/", - "companyId": null - }, - "adman": { - "name": "ADMAN", - "categoryId": 4, - "url": "http://www.adman.gr/", - "companyId": "adman" - }, - "adman_media": { - "name": "ADman Media", - "categoryId": 4, - "url": "http://www.admanmedia.com/", - "companyId": "ad_man_media" - }, - "admantx.com": { - "name": "ADmantX", - "categoryId": 4, - "url": "http://www.admantx.com/", - "companyId": "expert_system_spa" - }, - "admaster": { - "name": "AdMaster", - "categoryId": 4, - "url": "http://admaster.net", - "companyId": "admaster" - }, - "admaster.cn": { - "name": "AdMaster.cn", - "categoryId": 4, - "url": "http://www.admaster.com.cn/", - "companyId": "admaster" - }, - "admatic": { - "name": "Admatic", - "categoryId": 4, - "url": "http://www.admatic.com.tr/#1page", - "companyId": "admatic" - }, - "admatrix": { - "name": "Admatrix", - "categoryId": 4, - "url": "https://admatrix.jp/login#block01", - "companyId": "admatrix" - }, - "admax": { - "name": "Admax", - "categoryId": 4, - "url": "http://www.admaxnetwork.com/index.php", - "companyId": "komli" - }, - "admaxim": { - "name": "AdMaxim", - "categoryId": 4, - "url": "http://admaxim.com/", - "companyId": "admaxim" - }, - "admaya": { - "name": "Admaya", - "categoryId": 4, - "url": "http://www.admaya.in/", - "companyId": "admaya" - }, - "admedia": { - "name": "AdMedia", - "categoryId": 4, - "url": "http://admedia.com/", - "companyId": "admedia" - }, - "admedo_com": { - "name": "Admedo", - "categoryId": 4, - "url": "http://admedo.com/", - "companyId": "admedo" - }, - "admeira.ch": { - "name": "AdMeira", - "categoryId": 4, - "url": "http://admeira.ch/", - "companyId": "admeira" - }, - "admeld": { - "name": "AdMeld", - "categoryId": 4, - "url": "http://www.admeld.com", - "companyId": "google" - }, - "admeo": { - "name": "Admeo", - "categoryId": 4, - "url": "http://admeo.ru/", - "companyId": "admeo.ru" - }, - "admeta": { - "name": "Admeta", - "categoryId": 4, - "url": "http://www.admeta.com/", - "companyId": "admeta" - }, - "admicro": { - "name": "AdMicro", - "categoryId": 4, - "url": "http://www.admicro.vn/", - "companyId": "admicro" - }, - "admitad.com": { - "name": "Admitad", - "categoryId": 4, - "url": "https://www.admitad.com/en/#", - "companyId": "admitad" - }, - "admixer": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.com/", - "companyId": "admixer", - "source": "AdGuard" - }, - "admixer.net": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.net/", - "companyId": "admixer" - }, - "admized": { - "name": "ADMIZED", - "categoryId": 8, - "url": null, - "companyId": null - }, - "admo.tv": { - "name": "Admo.tv", - "categoryId": 4, - "url": "https://admo.tv/", - "companyId": "admo.tv" - }, - "admob": { - "name": "AdMob", - "categoryId": 4, - "url": "http://www.admob.com/", - "companyId": "google" - }, - "admost": { - "name": "adMOST", - "categoryId": 4, - "url": "http://www.admost.com/", - "companyId": "admost" - }, - "admotion": { - "name": "Admotion", - "categoryId": 4, - "url": "http://www.admotionus.com/", - "companyId": "admotion" - }, - "admulti": { - "name": "ADmulti", - "categoryId": 4, - "url": "http://admulti.com", - "companyId": "admulti" - }, - "adnegah": { - "name": "Adnegah", - "categoryId": 4, - "url": "https://adnegah.net/", - "companyId": "adnegah" - }, - "adnet": { - "name": "Adnet", - "categoryId": 4, - "url": "http://www.adnet.vn/", - "companyId": "adnet" - }, - "adnet.de": { - "name": "adNET.de", - "categoryId": 4, - "url": "http://www.adnet.de", - "companyId": "adnet.de" - }, - "adnet_media": { - "name": "Adnet Media", - "categoryId": 4, - "url": "http://www.adnetmedia.lt/", - "companyId": "adnet_media" - }, - "adnetwork.net": { - "name": "AdNetwork.net", - "categoryId": 4, - "url": "http://www.adnetwork.net/", - "companyId": "adnetwork.net" - }, - "adnetworkperformance.com": { - "name": "adnetworkperformance.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adnexio": { - "name": "AdNexio", - "categoryId": 4, - "url": "http://adnexio.com/", - "companyId": "adnexio" - }, - "adnium.com": { - "name": "Adnium", - "categoryId": 4, - "url": "https://adnium.com/", - "companyId": null - }, - "adnologies": { - "name": "Adnologies", - "categoryId": 4, - "url": "http://www.adnologies.com/", - "companyId": "adnologies_gmbh" - }, - "adnow": { - "name": "Adnow", - "categoryId": 4, - "url": "http://adnow.com/", - "companyId": "adnow" - }, - "adnymics": { - "name": "Adnymics", - "categoryId": 4, - "url": "http://adnymics.com/en/", - "companyId": "adnymics" - }, - "adobe_audience_manager": { - "name": "Adobe Audience Manager", - "categoryId": 4, - "url": "http://www.demdex.com/", - "companyId": "adobe" - }, - "adobe_developer": { - "name": "Adobe Developer", - "categoryId": 8, - "url": "https://developer.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_dynamic_media": { - "name": "Adobe Dynamic Media", - "categoryId": 4, - "url": "http://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_dynamic_tag_management": { - "name": "Adobe Dynamic Tag Management", - "categoryId": 5, - "url": "https://dtm.adobe.com/sign_in", - "companyId": "adobe" - }, - "adobe_experience_cloud": { - "name": "Adobe Experience Cloud", - "categoryId": 6, - "url": "https://business.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_experience_league": { - "name": "Adobe Experience League", - "categoryId": 6, - "url": "https://experienceleague.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_login": { - "name": "Adobe Login", - "categoryId": 2, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_tagmanager": { - "name": "Adobe TagManager", - "categoryId": 4, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_test_and_target": { - "name": "Adobe Target", - "categoryId": 4, - "url": "https://www.adobe.com/marketing/target.html", - "companyId": "adobe" - }, - "adobe_typekit": { - "name": "Adobe Typekit", - "categoryId": 5, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adocean": { - "name": "AdOcean", - "categoryId": 4, - "url": "http://adocean.cz/en", - "companyId": "adocean" - }, - "adometry": { - "name": "Adometry", - "categoryId": 4, - "url": "http://www.adometry.com/", - "companyId": "google" - }, - "adomik": { - "name": "Adomik", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adon_network": { - "name": "AdOn Network", - "categoryId": 4, - "url": "http://www.adonnetwork.com/", - "companyId": "adon_network" - }, - "adonion": { - "name": "AdOnion", - "categoryId": 4, - "url": "http://www.adonion.com/", - "companyId": "adonion" - }, - "adonly": { - "name": "AdOnly", - "categoryId": 4, - "url": "https://gloadmarket.com/", - "companyId": "adonly" - }, - "adoperator": { - "name": "AdOperator", - "categoryId": 4, - "url": "http://www.adoperator.com/start/", - "companyId": "adoperator" - }, - "adoric": { - "name": "Adoric", - "categoryId": 6, - "url": "https://adoric.com/", - "companyId": "adoric" - }, - "adorika": { - "name": "Adorika", - "categoryId": 4, - "url": "http://www.adorika.com/", - "companyId": "adorika" - }, - "adosia": { - "name": "Adosia", - "categoryId": 4, - "url": "https://adosia.com", - "companyId": "adosia" - }, - "adotmob.com": { - "name": "Adotmob", - "categoryId": 4, - "url": "https://adotmob.com/", - "companyId": "adotmob" - }, - "adotube": { - "name": "AdoTube", - "categoryId": 4, - "url": "http://www.adotube.com", - "companyId": "exponential_interactive" - }, - "adparlor": { - "name": "AdParlor", - "categoryId": 4, - "url": "http://www.adparlor.com/", - "companyId": "fluent" - }, - "adpartner": { - "name": "adpartner", - "categoryId": 4, - "url": "http://adpartner.pro/", - "companyId": "adpartner" - }, - "adpeeps": { - "name": "Ad Peeps", - "categoryId": 4, - "url": "http://www.adpeeps.com/", - "companyId": "ad_peeps" - }, - "adperfect": { - "name": "AdPerfect", - "categoryId": 4, - "url": "http://www.adperfect.com/", - "companyId": "adperfect" - }, - "adperium": { - "name": "AdPerium", - "categoryId": 4, - "url": "http://www.adperium.com/", - "companyId": "adperium" - }, - "adpilot": { - "name": "AdPilot", - "categoryId": 4, - "url": "http://www.adpilotgroup.com/", - "companyId": "adpilot" - }, - "adplan": { - "name": "AdPlan", - "categoryId": 4, - "url": "http://www.adplan.ne.jp/", - "companyId": "adplan" - }, - "adplus": { - "name": "ADPLUS", - "categoryId": 4, - "url": "http://www.adplus.co.id/", - "companyId": "adplus" - }, - "adprofex": { - "name": "AdProfex", - "categoryId": 4, - "url": "https://adprofex.com/", - "companyId": "adprofex", - "source": "AdGuard" - }, - "adprofy": { - "name": "AdProfy", - "categoryId": 4, - "url": "http://adprofy.com/", - "companyId": "adprofy" - }, - "adpulse": { - "name": "AdPulse", - "categoryId": 4, - "url": "http://adpulse.ir/", - "companyId": "adpulse.ir" - }, - "adpv": { - "name": "Adpv", - "categoryId": 4, - "url": "http://www.adpv.com/", - "companyId": "adpv" - }, - "adreactor": { - "name": "AdReactor", - "categoryId": 4, - "url": "http://www.adreactor.com/", - "companyId": "adreactor" - }, - "adrecord": { - "name": "Adrecord", - "categoryId": 4, - "url": "http://www.adrecord.com/", - "companyId": "adrecord" - }, - "adrecover": { - "name": "AdRecover", - "categoryId": 4, - "url": "https://www.adrecover.com/", - "companyId": "adpushup" - }, - "adresult": { - "name": "ADResult", - "categoryId": 4, - "url": "http://www.adresult.jp/", - "companyId": "adresult" - }, - "adriver": { - "name": "AdRiver", - "categoryId": 4, - "url": "http://www.adriver.ru/", - "companyId": "ad_river" - }, - "adroll": { - "name": "AdRoll", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_pixel": { - "name": "AdRoll Pixel", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_roundtrip": { - "name": "AdRoll Roundtrip", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adrom": { - "name": "adRom", - "categoryId": 4, - "url": "http://www.adrom.net/", - "companyId": null - }, - "adru.net": { - "name": "adru.net", - "categoryId": 4, - "url": "http://adru.net/", - "companyId": "adru.net" - }, - "adrunnr": { - "name": "AdRunnr", - "categoryId": 4, - "url": "https://adrunnr.com/", - "companyId": "adrunnr" - }, - "adsame": { - "name": "Adsame", - "categoryId": 4, - "url": "http://adsame.com/", - "companyId": "adsame" - }, - "adsbookie": { - "name": "AdsBookie", - "categoryId": 4, - "url": "http://adsbookie.com/", - "companyId": null - }, - "adscale": { - "name": "AdScale", - "categoryId": 4, - "url": "http://www.adscale.de/", - "companyId": "stroer" - }, - "adscience": { - "name": "Adscience", - "categoryId": 4, - "url": "http://www.adscience.nl/", - "companyId": "adscience" - }, - "adsco.re": { - "name": "Adscore", - "categoryId": 4, - "url": "https://www.adscore.com/", - "companyId": null - }, - "adsensecamp": { - "name": "AdsenseCamp", - "categoryId": 4, - "url": "http://adsensecamp.com", - "companyId": "adsensecamp" - }, - "adserverpub": { - "name": "AdServerPub", - "categoryId": 4, - "url": "http://www.adserverpub.com/", - "companyId": "adserverpub" - }, - "adservice_media": { - "name": "Adservice Media", - "categoryId": 4, - "url": "http://www.adservicemedia.com/", - "companyId": "adservice_media" - }, - "adsfactor": { - "name": "Adsfactor", - "categoryId": 4, - "url": "http://www.adsfactor.com/", - "companyId": "pixels_asia" - }, - "adside": { - "name": "AdSide", - "categoryId": 4, - "url": "http://www.adside.com/", - "companyId": "adside" - }, - "adskeeper": { - "name": "AdsKeeper", - "categoryId": 4, - "url": "http://adskeeper.co.uk/", - "companyId": "adskeeper" - }, - "adskom": { - "name": "ADSKOM", - "categoryId": 4, - "url": "http://adskom.com/", - "companyId": "adskom" - }, - "adslot": { - "name": "Adslot", - "categoryId": 4, - "url": "http://www.adslot.com/", - "companyId": "adslot" - }, - "adsnative": { - "name": "adsnative", - "categoryId": 4, - "url": "http://www.adsnative.com/", - "companyId": "adsnative" - }, - "adsniper.ru": { - "name": "AdSniper", - "categoryId": 4, - "url": "http://ad-sniper.com/", - "companyId": "adsniper" - }, - "adspeed": { - "name": "AdSpeed", - "categoryId": 4, - "url": "http://www.adspeed.com/", - "companyId": "adspeed" - }, - "adspyglass": { - "name": "AdSpyglass", - "categoryId": 4, - "url": "https://www.adspyglass.com/", - "companyId": "adspyglass" - }, - "adstage": { - "name": "AdStage", - "categoryId": 4, - "url": "http://www.adstage.io/", - "companyId": "adstage" - }, - "adstanding": { - "name": "AdStanding", - "categoryId": 4, - "url": "http://www.adstanding.com/en/", - "companyId": "adstanding" - }, - "adstars": { - "name": "Adstars", - "categoryId": 4, - "url": "http://adstars.co.id", - "companyId": "adstars" - }, - "adstir": { - "name": "adstir", - "categoryId": 4, - "url": "https://en.ad-stir.com/", - "companyId": "united_inc" - }, - "adsupply": { - "name": "AdSupply", - "categoryId": 4, - "url": "http://www.adsupply.com/", - "companyId": "adsupply" - }, - "adswizz": { - "name": "AdsWizz", - "categoryId": 4, - "url": "http://www.adswizz.com/", - "companyId": "adswizz" - }, - "adtaily": { - "name": "AdTaily", - "categoryId": 4, - "url": "http://www.adtaily.pl/", - "companyId": "adtaily" - }, - "adtarget.me": { - "name": "Adtarget.me", - "categoryId": 4, - "url": "http://www.adtarget.me/", - "companyId": "adtarget.me" - }, - "adtech": { - "name": "ADTECH", - "categoryId": 6, - "url": "http://www.adtechus.com/", - "companyId": "verizon" - }, - "adtegrity": { - "name": "Adtegrity", - "categoryId": 4, - "url": "http://www.adtegrity.com/", - "companyId": "adtegrity" - }, - "adtelligence.de": { - "name": "Adtelligence", - "categoryId": 4, - "url": "https://adtelligence.com/", - "companyId": null - }, - "adtheorent": { - "name": "Adtheorent", - "categoryId": 4, - "url": "http://adtheorent.com/", - "companyId": "adtheorant" - }, - "adthink": { - "name": "Adthink", - "categoryId": 4, - "url": "https://adthink.com/", - "companyId": "adthink" - }, - "adtiger": { - "name": "AdTiger", - "categoryId": 4, - "url": "http://www.adtiger.de/", - "companyId": "adtiger" - }, - "adtima": { - "name": "Adtima", - "categoryId": 4, - "url": "http://adtima.vn/", - "companyId": "adtima" - }, - "adtng.com": { - "name": "adtng.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "adtoma": { - "name": "Adtoma", - "categoryId": 4, - "url": "http://www.adtoma.com/", - "companyId": "adtoma" - }, - "adtr02.com": { - "name": "adtr02.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adtraction": { - "name": "Adtraction", - "categoryId": 4, - "url": "http://adtraction.com/", - "companyId": "adtraction" - }, - "adtraxx": { - "name": "AdTraxx", - "categoryId": 4, - "url": "https://www1.adtraxx.de/", - "companyId": "adtrax" - }, - "adtriba.com": { - "name": "AdTriba", - "categoryId": 6, - "url": "https://www.adtriba.com/", - "companyId": null - }, - "adtrue": { - "name": "Adtrue", - "categoryId": 4, - "url": "http://adtrue.com/", - "companyId": "adtrue" - }, - "adtrustmedia": { - "name": "AdTrustMedia", - "categoryId": 4, - "url": "https://adtrustmedia.com/", - "companyId": "adtrustmedia" - }, - "adtube": { - "name": "AdTube", - "categoryId": 4, - "url": "http://adtube.ir/", - "companyId": "adtube" - }, - "adult_webmaster_empire": { - "name": "Adult Webmaster Empire", - "categoryId": 3, - "url": "http://www.awempire.com/", - "companyId": "adult_webmaster_empire" - }, - "adultadworld": { - "name": "AdultAdWorld", - "categoryId": 3, - "url": "http://adultadworld.com/", - "companyId": "adult_adworld" - }, - "adup-tech.com": { - "name": "AdUp Technology", - "categoryId": 4, - "url": "https://www.adup-tech.com/", - "companyId": "adup_technology" - }, - "advaction": { - "name": "Advaction", - "categoryId": 4, - "url": "http://advaction.ru/", - "companyId": "advaction" - }, - "advalo": { - "name": "Advalo", - "categoryId": 4, - "url": "https://www.advalo.com", - "companyId": "advalo" - }, - "advanced_hosters": { - "name": "Advanced Hosters", - "categoryId": 9, - "url": "https://advancedhosters.com/", - "companyId": null - }, - "advark": { - "name": "Advark", - "categoryId": 4, - "url": "https://advarkads.com/", - "companyId": "advark" - }, - "adventori": { - "name": "ADventori", - "categoryId": 8, - "url": "https://www.adventori.com/", - "companyId": "adventori" - }, - "adverline": { - "name": "Adverline", - "categoryId": 4, - "url": "http://www.adverline.com/", - "companyId": "adverline" - }, - "adversal": { - "name": "Adversal", - "categoryId": 4, - "url": "https://www.adversal.com/", - "companyId": "adversal" - }, - "adverserve": { - "name": "adverServe", - "categoryId": 4, - "url": "http://www.adverserve.com/", - "companyId": "adverserve" - }, - "adverteerdirect": { - "name": "Adverteerdirect", - "categoryId": 4, - "url": "http://www.adverteerdirect.nl/", - "companyId": "adverteerdirect" - }, - "adverticum": { - "name": "Adverticum", - "categoryId": 4, - "url": "https://adverticum.net/english/", - "companyId": "adverticum" - }, - "advertise.com": { - "name": "Advertise.com", - "categoryId": 4, - "url": "http://advertise.com/", - "companyId": "advertise.com" - }, - "advertisespace": { - "name": "AdvertiseSpace", - "categoryId": 4, - "url": "http://www.advertisespace.com/", - "companyId": "advertisespace" - }, - "advertising.com": { - "name": "Verizon Media", - "categoryId": 4, - "url": "https://www.verizonmedia.com/", - "companyId": "verizon" - }, - "advertlets": { - "name": "Advertlets", - "categoryId": 4, - "url": "http://www.advertlets.com/", - "companyId": "advertlets" - }, - "advertserve": { - "name": "AdvertServe", - "categoryId": 4, - "url": "https://secure.advertserve.com/", - "companyId": "advertserve" - }, - "advidi": { - "name": "Advidi", - "categoryId": 4, - "url": "http://advidi.com/", - "companyId": "advidi" - }, - "advmaker.ru": { - "name": "advmaker.ru", - "categoryId": 4, - "url": "http://advmaker.ru/", - "companyId": "advmaker.ru" - }, - "advolution": { - "name": "Advolution", - "categoryId": 4, - "url": "http://www.advolution.de", - "companyId": "advolution" - }, - "adwebster": { - "name": "adwebster", - "categoryId": 4, - "url": "http://adwebster.com", - "companyId": "adwebster" - }, - "adwit": { - "name": "Adwit", - "categoryId": 4, - "url": "http://www.adwitserver.com", - "companyId": "adwit" - }, - "adworx.at": { - "name": "ADworx", - "categoryId": 4, - "url": "http://www.adworx.at/", - "companyId": "ors" - }, - "adworxs.net": { - "name": "adworxs.net", - "categoryId": 4, - "url": "http://www.adworxs.net/?lang=en", - "companyId": null - }, - "adxion": { - "name": "adXion", - "categoryId": 4, - "url": "http://www.adxion.com", - "companyId": "adxion" - }, - "adxpansion": { - "name": "AdXpansion", - "categoryId": 3, - "url": "http://www.adxpansion.com/", - "companyId": "adxpansion" - }, - "adxpose": { - "name": "AdXpose", - "categoryId": 4, - "url": "http://www.adxpose.com/home.page", - "companyId": "comscore" - }, - "adxprtz.com": { - "name": "adxprtz.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adyoulike": { - "name": "Adyoulike", - "categoryId": 4, - "url": "http://www.adyoulike.com/", - "companyId": "adyoulike" - }, - "adzerk": { - "name": "Adzerk", - "categoryId": 4, - "url": "http://adzerk.com/", - "companyId": "adzerk" - }, - "adzly": { - "name": "adzly", - "categoryId": 4, - "url": "http://www.adzly.com/", - "companyId": "adzly" - }, - "aemediatraffic": { - "name": "Aemediatraffic", - "categoryId": 6, - "url": null, - "companyId": null - }, - "aerify_media": { - "name": "Aerify Media", - "categoryId": 4, - "url": "http://aerifymedia.com/", - "companyId": "aerify_media" - }, - "aeris_weather": { - "name": "Aeris Weather", - "categoryId": 2, - "url": "https://www.aerisweather.com/", - "companyId": "aerisweather" - }, - "affectv": { - "name": "Hybrid Theory", - "categoryId": 4, - "url": "https://hybridtheory.com/", - "companyId": "affectv" - }, - "affilbox": { - "name": "Affilbox", - "categoryId": 4, - "url": "https://affilbox.com/", - "companyId": "affilbox", - "source": "AdGuard" - }, - "affiliate-b": { - "name": "Affiliate-B", - "categoryId": 4, - "url": "https://www.affiliate-b.com/", - "companyId": "affiliate_b" - }, - "affiliate4you": { - "name": "Affiliate4You", - "categoryId": 4, - "url": "http://www.affiliate4you.nl/", - "companyId": "family_blend" - }, - "affiliatebuzz": { - "name": "AffiliateBuzz", - "categoryId": 4, - "url": "http://www.affiliatebuzz.com/", - "companyId": "affiliatebuzz" - }, - "affiliatefuture": { - "name": "AffiliateFuture", - "categoryId": 4, - "url": "http://www.affiliatefuture.com", - "companyId": "affiliatefuture" - }, - "affiliatelounge": { - "name": "AffiliateLounge", - "categoryId": 4, - "url": "http://www.affiliatelounge.com/", - "companyId": "betsson_group_affiliates" - }, - "affiliation_france": { - "name": "Affiliation France", - "categoryId": 4, - "url": "http://www.affiliation-france.com/", - "companyId": "affiliation-france" - }, - "affiliator": { - "name": "Affiliator", - "categoryId": 4, - "url": "http://www.affiliator.com/", - "companyId": "affiliator" - }, - "affiliaweb": { - "name": "Affiliaweb", - "categoryId": 4, - "url": "http://affiliaweb.fr/", - "companyId": "affiliaweb" - }, - "affilinet": { - "name": "affilinet", - "categoryId": 4, - "url": "https://www.affili.net/", - "companyId": "axel_springer" - }, - "affimax": { - "name": "AffiMax", - "categoryId": 4, - "url": "https://www.affimax.de", - "companyId": "affimax" - }, - "affinity": { - "name": "Affinity", - "categoryId": 4, - "url": "http://www.affinity.com/", - "companyId": "affinity" - }, - "affinity.by": { - "name": "Affinity.by", - "categoryId": 4, - "url": "http://affinity.by", - "companyId": "affinity_digital_agency" - }, - "affiz_cpm": { - "name": "Affiz CPM", - "categoryId": 4, - "url": "http://cpm.affiz.com/home", - "companyId": "affiz_cpm" - }, - "afftrack": { - "name": "Afftrack", - "categoryId": 6, - "url": "http://www.afftrack.com/", - "companyId": "afftrack" - }, - "afgr2.com": { - "name": "afgr2.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "afilio": { - "name": "Afilio", - "categoryId": 6, - "url": "http://afilio.com.br/", - "companyId": "afilio" - }, - "afs_analystics": { - "name": "AFS Analystics", - "categoryId": 6, - "url": "https://www.afsanalytics.com/", - "companyId": "afs_analytics" - }, - "aftonbladet_ads": { - "name": "Aftonbladet Ads", - "categoryId": 4, - "url": "http://annonswebb.aftonbladet.se/", - "companyId": "aftonbladet" - }, - "aftv-serving.bid": { - "name": "aftv-serving.bid", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aggregate_knowledge": { - "name": "Aggregate Knowledge", - "categoryId": 4, - "url": "http://www.aggregateknowledge.com/", - "companyId": "neustar" - }, - "agilone": { - "name": "AgilOne", - "categoryId": 6, - "url": "http://www.agilone.com/", - "companyId": "agilone" - }, - "agora": { - "name": "Agora", - "categoryId": 4, - "url": "https://www.agora.pl/", - "companyId": "agora_sa" - }, - "ahalogy": { - "name": "Ahalogy", - "categoryId": 7, - "url": "http://www.ahalogy.com/", - "companyId": "ahalogy" - }, - "ai_media_group": { - "name": "Ai Media Group", - "categoryId": 4, - "url": "http://aimediagroup.com/", - "companyId": "ai_media_group" - }, - "aidata": { - "name": "Aidata", - "categoryId": 4, - "url": "http://aidata.me/", - "companyId": "aidata" - }, - "aim4media": { - "name": "Aim4Media", - "categoryId": 4, - "url": "http://aim4media.com", - "companyId": "aim4media" - }, - "airbnb": { - "name": "Airbnb", - "categoryId": 6, - "url": "https://affiliate.withairbnb.com/", - "companyId": null - }, - "airbrake": { - "name": "Airbrake", - "categoryId": 4, - "url": "https://airbrake.io/", - "companyId": "airbrake" - }, - "airpr.com": { - "name": "AirPR", - "categoryId": 6, - "url": "https://airpr.com/", - "companyId": "airpr" - }, - "airpush": { - "name": "Airpush", - "categoryId": 4, - "url": "http://www.airpush.com/", - "companyId": "airpush" - }, - "akamai_technologies": { - "name": "Akamai Technologies", - "categoryId": 9, - "url": "https://www.akamai.com/", - "companyId": "akamai", - "source": "AdGuard" - }, - "akamoihd.net": { - "name": "akamoihd.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "akane": { - "name": "AkaNe", - "categoryId": 4, - "url": "http://akane-ad.com/", - "companyId": "akane" - }, - "akanoo": { - "name": "Akanoo", - "categoryId": 6, - "url": "http://www.akanoo.com/", - "companyId": "akanoo" - }, - "akavita": { - "name": "Akavita", - "categoryId": 4, - "url": "http://www.akavita.by/en", - "companyId": "akavita" - }, - "al_bawaba_advertising": { - "name": "Al Bawaba Advertising", - "categoryId": 4, - "url": "http://www.albawaba.com/advertising", - "companyId": "al_bawaba" - }, - "albacross": { - "name": "Albacross", - "categoryId": 4, - "url": "https://albacross.com", - "companyId": "albacross" - }, - "aldi-international.com": { - "name": "aldi-international.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "alenty": { - "name": "Alenty", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "alephd.com": { - "name": "alephd", - "categoryId": 4, - "url": "https://www.alephd.com/", - "companyId": "verizon" - }, - "alexa_metrics": { - "name": "Alexa Metrics", - "categoryId": 6, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "alexa_traffic_rank": { - "name": "Alexa Traffic Rank", - "categoryId": 4, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "algolia.net": { - "name": "algolia", - "categoryId": 4, - "url": "https://www.algolia.com/", - "companyId": null - }, - "algovid.com": { - "name": "algovid.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "alibaba.com": { - "name": "Alibaba", - "categoryId": 8, - "url": "http://www.alibaba.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alibaba_cloud": { - "name": "Alibaba Cloud", - "categoryId": 10, - "url": "https://www.alibabacloud.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alibaba_ucbrowser": { - "name": "UC Browser", - "categoryId": 8, - "url": "https://ucweb.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alipay.com": { - "name": "Alipay", - "categoryId": 2, - "url": "https://global.alipay.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alivechat": { - "name": "AliveChat", - "categoryId": 2, - "url": "http://www.websitealive.com/", - "companyId": "websitealive" - }, - "allegro.pl": { - "name": "Allegro", - "categoryId": 8, - "url": "https://allegro.pl", - "companyId": "allegro.pl" - }, - "allin": { - "name": "Allin", - "categoryId": 6, - "url": "http://allin.com.br/", - "companyId": "allin" - }, - "allo-pages.fr": { - "name": "Allo-Pages", - "categoryId": 2, - "url": "http://www.allo-pages.fr/", - "companyId": "links_lab" - }, - "allotraffic": { - "name": "AlloTraffic", - "categoryId": 4, - "url": "http://www.allotraffic.com/", - "companyId": "allotraffic" - }, - "allure_media": { - "name": "Allure Media", - "categoryId": 4, - "url": "http://www.alluremedia.com.au", - "companyId": "allure_media" - }, - "allyes": { - "name": "Allyes", - "categoryId": 4, - "url": "http://www.allyes.com/", - "companyId": "allyes" - }, - "alooma": { - "name": "Alooma", - "categoryId": 4, - "url": "https://www.alooma.com/", - "companyId": "alooma" - }, - "altitude_digital": { - "name": "Altitude Digital", - "categoryId": 4, - "url": "http://www.altitudedigital.com/", - "companyId": "altitude_digital" - }, - "amadesa": { - "name": "Amadesa", - "categoryId": 4, - "url": "http://www.amadesa.com/", - "companyId": "amadesa" - }, - "amap": { - "name": "Amap", - "categoryId": 2, - "url": "https://www.amap.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "amazon": { - "name": "Amazon.com", - "categoryId": 8, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_adsystem": { - "name": "Amazon Advertising", - "categoryId": 4, - "url": "https://advertising.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_associates": { - "name": "Amazon Associates", - "categoryId": 4, - "url": "http://aws.amazon.com/associates/", - "companyId": "amazon_associates" - }, - "amazon_cdn": { - "name": "Amazon CDN", - "categoryId": 9, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_cloudfront": { - "name": "Amazon CloudFront", - "categoryId": 10, - "url": "https://aws.amazon.com/cloudfront/?nc1=h_ls", - "companyId": "amazon_associates" - }, - "amazon_mobile_ads": { - "name": "Amazon Mobile Ads", - "categoryId": 4, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_payments": { - "name": "Amazon Payments", - "categoryId": 2, - "url": "https://pay.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_video": { - "name": "Amazon Instant Video", - "categoryId": 0, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_web_services": { - "name": "Amazon Web Services", - "categoryId": 10, - "url": "https://aws.amazon.com/", - "companyId": "amazon_associates" - }, - "ambient_digital": { - "name": "Ambient Digital", - "categoryId": 4, - "url": "http://www.adnetwork.vn/", - "companyId": "ambient_digital" - }, - "amgload.net": { - "name": "amgload.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "amoad": { - "name": "AMoAd", - "categoryId": 4, - "url": "http://www.amoad.com/", - "companyId": "amoad" - }, - "amobee": { - "name": "Amobee", - "categoryId": 4, - "url": "https://www.amobee.com/", - "companyId": "singtel" - }, - "amp_platform": { - "name": "AMP Platform", - "categoryId": 4, - "url": "http://www.collective.com/", - "companyId": "collective" - }, - "amplitude": { - "name": "Amplitude", - "categoryId": 6, - "url": "https://amplitude.com/", - "companyId": "amplitude" - }, - "ampproject.org": { - "name": "AMP Project", - "categoryId": 8, - "url": "https://www.ampproject.org/", - "companyId": "google" - }, - "anametrix": { - "name": "Anametrix", - "categoryId": 6, - "url": "http://anametrix.com/", - "companyId": "anametrix" - }, - "ancestry_cdn": { - "name": "Ancestry CDN", - "categoryId": 9, - "url": "https://www.ancestry.com/", - "companyId": "ancestry" - }, - "ancora": { - "name": "Ancora", - "categoryId": 6, - "url": "http://www.ancoramediasolutions.com/", - "companyId": "ancora" - }, - "android": { - "name": "Android", - "categoryId": 101, - "url": "https://www.android.com/", - "companyId": "google", - "source": "AdGuard" - }, - "anetwork": { - "name": "Anetwork", - "categoryId": 4, - "url": "http://anetwork.ir/", - "companyId": "anetwork" - }, - "aniview.com": { - "name": "AniView", - "categoryId": 4, - "url": "https://www.aniview.com/", - "companyId": null - }, - "anonymousads": { - "name": "AnonymousAds", - "categoryId": 4, - "url": "https://a-ads.com/", - "companyId": "anonymousads" - }, - "anormal_tracker": { - "name": "Anormal Tracker", - "categoryId": 6, - "url": "http://anormal-tracker.de/", - "companyId": "anormal-tracker" - }, - "answers_cloud_service": { - "name": "Answers Cloud Service", - "categoryId": 1, - "url": "http://www.answers.com/", - "companyId": "answers.com" - }, - "ants": { - "name": "Ants", - "categoryId": 7, - "url": "http://ants.vn/en/", - "companyId": "ants" - }, - "anvato": { - "name": "Anvato", - "categoryId": 0, - "url": "https://www.anvato.com/", - "companyId": "google" - }, - "anyclip": { - "name": "AnyClip", - "categoryId": 0, - "url": "https://anyclip.com", - "companyId": "anyclip" - }, - "aol_be_on": { - "name": "AOL Be On", - "categoryId": 4, - "url": "http://beon.aolnetworks.com/", - "companyId": "verizon" - }, - "aol_cdn": { - "name": "AOL CDN", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "aol_images_cdn": { - "name": "AOL Images CDN", - "categoryId": 5, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "apa.at": { - "name": "Apa", - "categoryId": 8, - "url": "http://www.apa.at/Site/index.de.html", - "companyId": "apa" - }, - "apester": { - "name": "Apester", - "categoryId": 4, - "url": "http://apester.com/", - "companyId": "apester" - }, - "apicit.net": { - "name": "apicit.net", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aplus_analytics": { - "name": "Aplus Analytics", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "appcenter": { - "name": "Microsoft App Center", - "categoryId": 5, - "url": "https://appcenter.ms/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "appcues": { - "name": "Appcues", - "categoryId": 2, - "url": "https://www.appcues.com/", - "companyId": null - }, - "appdynamics": { - "name": "AppDynamics", - "categoryId": 6, - "url": "http://www.appdynamics.com", - "companyId": "appdynamics" - }, - "appier": { - "name": "Appier", - "categoryId": 4, - "url": "http://www.appier.com/en/index.html", - "companyId": "appier" - }, - "apple": { - "name": "Apple", - "categoryId": 8, - "url": "https://www.apple.com/", - "companyId": "apple", - "source": "AdGuard" - }, - "apple_ads": { - "name": "Apple Search Ads", - "categoryId": 4, - "url": "https://searchads.apple.com/", - "companyId": "apple", - "source": "AdGuard" - }, - "applifier": { - "name": "Applifier", - "categoryId": 4, - "url": "http://www.applifier.com/", - "companyId": "applifier" - }, - "applovin": { - "name": "AppLovin", - "categoryId": 4, - "url": "https://www.applovin.com", - "companyId": "applovin" - }, - "appmetrx": { - "name": "AppMetrx", - "categoryId": 4, - "url": "http://www.engago.com", - "companyId": "engago_technologies" - }, - "appnexus": { - "name": "AppNexus", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "appsflyer": { - "name": "AppsFlyer", - "categoryId": 101, - "url": "https://www.appsflyer.com/", - "companyId": "appsflyer", - "source": "AdGuard" - }, - "apptv": { - "name": "appTV", - "categoryId": 4, - "url": "http://www.apptv.com/", - "companyId": "apptv" - }, - "apture": { - "name": "Apture", - "categoryId": 2, - "url": "http://www.apture.com/", - "companyId": "google" - }, - "arcpublishing": { - "name": "Arc Publishing", - "categoryId": 6, - "url": "https://www.arcpublishing.com/", - "companyId": "arc_publishing" - }, - "ard.de": { - "name": "ard.de", - "categoryId": 0, - "url": null, - "companyId": null - }, - "are_you_a_human": { - "name": "Are You a Human", - "categoryId": 6, - "url": "https://areyouahuman.com/", - "companyId": "distil_networks" - }, - "arkoselabs.com": { - "name": "Arkose Labs", - "categoryId": 6, - "url": "https://www.arkoselabs.com/", - "companyId": null - }, - "art19": { - "name": "Art19", - "categoryId": 4, - "url": "https://art19.com/", - "companyId": "art19" - }, - "artimedia": { - "name": "Artimedia", - "categoryId": 4, - "url": "http://arti-media.net/en/", - "companyId": "artimedia" - }, - "artlebedev.ru": { - "name": "Art.Lebedev", - "categoryId": 8, - "url": "https://www.artlebedev.ru/", - "companyId": "art.lebedev_studio" - }, - "aruba_media_marketing": { - "name": "Aruba Media Marketing", - "categoryId": 4, - "url": "http://www.arubamediamarketing.it/", - "companyId": "aruba_media_marketing" - }, - "arvato_canvas_fp": { - "name": "Arvato Canvas FP", - "categoryId": 6, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "asambeauty.com": { - "name": "asambeauty.com", - "categoryId": 8, - "url": "https://www.asambeauty.com/", - "companyId": null - }, - "ask.com": { - "name": "Ask.com", - "categoryId": 7, - "url": null, - "companyId": null - }, - "aspnetcdn": { - "name": "Microsoft Ajax CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "assemblyexchange": { - "name": "Assembly Exchange", - "categoryId": 4, - "url": "https://www.medialab.la/", - "companyId": "medialab", - "source": "AdGuard" - }, - "astronomer": { - "name": "Astronomer", - "categoryId": 6, - "url": "https://www.astronomer.io", - "companyId": "astronomer" - }, - "at_internet": { - "name": "AT Internet", - "categoryId": 6, - "url": "http://www.xiti.com/", - "companyId": "at_internet" - }, - "atedra": { - "name": "Atedra", - "categoryId": 4, - "url": "http://www.atedra.com/", - "companyId": "atedra" - }, - "atg_group": { - "name": "ATG Ad Tech Group", - "categoryId": 4, - "url": "https://ad-tech-group.com/", - "companyId": null - }, - "atg_optimization": { - "name": "ATG Optimization", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/", - "companyId": "oracle" - }, - "atg_recommendations": { - "name": "ATG Recommendations", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/recommendations/", - "companyId": "oracle" - }, - "atlas": { - "name": "Atlas", - "categoryId": 4, - "url": "https://atlassolutions.com", - "companyId": "facebook" - }, - "atlas_profitbuilder": { - "name": "Atlas ProfitBuilder", - "categoryId": 4, - "url": "http://www.atlassolutions.com/", - "companyId": "atlas" - }, - "atlassian.net": { - "name": "Atlassian", - "categoryId": 2, - "url": "https://www.atlassian.com/", - "companyId": "atlassian" - }, - "atlassian_marketplace": { - "name": "Atlassian Marketplace", - "categoryId": 9, - "url": "https://marketplace.atlassian.com/", - "companyId": "atlassian" - }, - "atomz_search": { - "name": "Atomz Search", - "categoryId": 2, - "url": "http://atomz.com/", - "companyId": "atomz" - }, - "atsfi_de": { - "name": "atsfi.de", - "categoryId": 11, - "url": "http://www.axelspringer.de/en/index.html", - "companyId": "axel_springer" - }, - "attracta": { - "name": "Attracta", - "categoryId": 4, - "url": "http://www.attracta.com/", - "companyId": "attracta" - }, - "attraqt": { - "name": "Attraqt", - "categoryId": 6, - "url": "http://www.locayta.com/", - "companyId": "attraqt" - }, - "audience2media": { - "name": "Audience2Media", - "categoryId": 4, - "url": "http://www.audience2media.com/", - "companyId": "audience2media" - }, - "audience_ad_network": { - "name": "Audience Ad Network", - "categoryId": 4, - "url": "http://www.audienceadnetwork.com", - "companyId": "bridgeline_digital" - }, - "audience_science": { - "name": "Audience Science", - "categoryId": 4, - "url": "http://www.audiencescience.com/", - "companyId": "audiencescience" - }, - "audiencerate": { - "name": "AudienceRate", - "categoryId": 4, - "url": "http://www.audiencerate.com/", - "companyId": "audiencerate" - }, - "audiencesquare.com": { - "name": "Audience Square", - "categoryId": 4, - "url": "http://www.audiencesquare.fr/", - "companyId": "audience_square" - }, - "auditude": { - "name": "Auditude", - "categoryId": 0, - "url": "http://www.auditude.com/", - "companyId": "adobe" - }, - "audtd.com": { - "name": "Auditorius", - "categoryId": 4, - "url": "http://www.auditorius.ru/", - "companyId": "auditorius" - }, - "augur": { - "name": "Augur", - "categoryId": 6, - "url": "https://www.augur.io/", - "companyId": "augur" - }, - "aumago": { - "name": "Aumago", - "categoryId": 4, - "url": "http://www.aumago.com/", - "companyId": "aumago" - }, - "aurea_clicktracks": { - "name": "Aurea ClickTracks", - "categoryId": 4, - "url": "http://www.clicktracks.com/", - "companyId": "aurea" - }, - "ausgezeichnet_org": { - "name": "ausgezeichnet.org", - "categoryId": 2, - "url": "http://ausgezeichnet.org/", - "companyId": null - }, - "australia.gov": { - "name": "Australia.gov", - "categoryId": 4, - "url": "http://www.australia.gov.au/", - "companyId": "australian_government" - }, - "auth0": { - "name": "Auth0 Inc.", - "categoryId": 6, - "url": "https://auth0.com/", - "companyId": "auth0" - }, - "autoid": { - "name": "AutoID", - "categoryId": 6, - "url": "http://www.autoid.com/", - "companyId": "autoid" - }, - "autonomy": { - "name": "Autonomy", - "categoryId": 4, - "url": "http://www.optimost.com/", - "companyId": "hp" - }, - "autonomy_campaign": { - "name": "Autonomy Campaign", - "categoryId": 4, - "url": "http://www.autonomy.com/", - "companyId": "hp" - }, - "autopilothq": { - "name": "Auto Pilot", - "categoryId": 4, - "url": "https://www.autopilothq.com/", - "companyId": "autopilothq" - }, - "autoscout24.com": { - "name": "Autoscout24", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "avail": { - "name": "Avail", - "categoryId": 4, - "url": "http://avail.com", - "companyId": "richrelevance" - }, - "avanser": { - "name": "AVANSER", - "categoryId": 2, - "url": "http://www.avanser.com.au/", - "companyId": "avanser" - }, - "avant_metrics": { - "name": "Avant Metrics", - "categoryId": 6, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avantlink": { - "name": "AvantLink", - "categoryId": 4, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avazu_network": { - "name": "Avazu Network", - "categoryId": 4, - "url": "http://www.avazudsp.net/", - "companyId": "avazu_network" - }, - "avenseo": { - "name": "Avenseo", - "categoryId": 4, - "url": "http://avenseo.com", - "companyId": "avenseo" - }, - "avid_media": { - "name": "Avid Media", - "categoryId": 0, - "url": "http://www.avidglobalmedia.com/", - "companyId": "avid_media" - }, - "avocet": { - "name": "Avocet", - "categoryId": 8, - "url": "https://avocet.io/", - "companyId": "avocet" - }, - "aweber": { - "name": "AWeber", - "categoryId": 4, - "url": "http://www.aweber.com/", - "companyId": "aweber_communications" - }, - "awin": { - "name": "AWIN", - "categoryId": 4, - "url": "https://www.awin.com", - "companyId": "axel_springer" - }, - "axill": { - "name": "Axill", - "categoryId": 4, - "url": "http://www.axill.com/", - "companyId": "axill" - }, - "azadify": { - "name": "Azadify", - "categoryId": 4, - "url": "http://azadify.com/engage/index.php", - "companyId": "azadify" - }, - "azure": { - "name": "Microsoft Azure", - "categoryId": 10, - "url": "https://azure.microsoft.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "azure_blob_storage": { - "name": "Azure Blob Storage", - "categoryId": 8, - "url": "https://azure.microsoft.com/en-us/products/storage/blobs", - "companyId": "microsoft", - "source": "AdGuard" - }, - "azureedge.net": { - "name": "Azure CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "b2bcontext": { - "name": "B2BContext", - "categoryId": 4, - "url": "http://b2bcontext.ru/", - "companyId": "b2bcontext" - }, - "b2bvideo": { - "name": "B2Bvideo", - "categoryId": 4, - "url": "http://b2bvideo.ru/", - "companyId": "b2bvideo" - }, - "babator.com": { - "name": "Babator", - "categoryId": 6, - "url": "https://www.babator.com/", - "companyId": null - }, - "back_beat_media": { - "name": "Back Beat Media", - "categoryId": 4, - "url": "http://www.backbeatmedia.com", - "companyId": "backbeat_media" - }, - "backtype_widgets": { - "name": "BackType Widgets", - "categoryId": 4, - "url": "http://www.backtype.com/widgets", - "companyId": "backtype" - }, - "bahn_de": { - "name": "Deutsche Bahn", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baidu_ads": { - "name": "百度", - "categoryId": 4, - "url": "http://www.baidu.com/", - "companyId": "baidu" - }, - "baidu_static": { - "name": "百度统计", - "categoryId": 8, - "url": "https://www.baidu.com/", - "companyId": "baidu" - }, - "baletingo.com": { - "name": "baletingo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bangdom.com": { - "name": "BangBros", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bankrate": { - "name": "Bankrate", - "categoryId": 4, - "url": "https://www.bankrate.com/", - "companyId": "bankrate" - }, - "banner_connect": { - "name": "Banner Connect", - "categoryId": 4, - "url": "http://www.bannerconnect.net/", - "companyId": "bannerconnect" - }, - "bannerflow.com": { - "name": "Bannerflow", - "categoryId": 4, - "url": "https://www.bannerflow.com/", - "companyId": "bannerflow" - }, - "bannerplay": { - "name": "BannerPlay", - "categoryId": 4, - "url": "http://www.bannerplay.com/", - "companyId": "bannerplay" - }, - "bannersnack": { - "name": "Bannersnack", - "categoryId": 4, - "url": "http://www.bannersnack.com/", - "companyId": "bannersnack" - }, - "barilliance": { - "name": "Barilliance", - "categoryId": 4, - "url": "http://www.barilliance.com/", - "companyId": "barilliance" - }, - "barometer": { - "name": "Barometer", - "categoryId": 2, - "url": "http://getbarometer.com/", - "companyId": "barometer" - }, - "basilic.io": { - "name": "basilic.io", - "categoryId": 6, - "url": "https://basilic.io/", - "companyId": null - }, - "batanga_network": { - "name": "Batanga Network", - "categoryId": 4, - "url": "http://www.batanganetwork.com/", - "companyId": "batanga_network" - }, - "batch_media": { - "name": "Batch Media", - "categoryId": 4, - "url": "http://batch.ba/", - "companyId": "prosieben_sat1" - }, - "bauer_media": { - "name": "Bauer Media", - "categoryId": 4, - "url": "http://www.bauermedia.com", - "companyId": "bauer_media" - }, - "baur.de": { - "name": "baur.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baynote_observer": { - "name": "Baynote Observer", - "categoryId": 4, - "url": "http://www.baynote.com/", - "companyId": "baynote" - }, - "bazaarvoice": { - "name": "Bazaarvoice", - "categoryId": 2, - "url": "http://www.bazaarvoice.com/", - "companyId": "bazaarvoice" - }, - "bbci": { - "name": "BBC", - "categoryId": 10, - "url": "https://bbc.co.uk", - "companyId": null - }, - "bd4travel": { - "name": "bd4travel", - "categoryId": 4, - "url": "https://bd4travel.com/", - "companyId": "bd4travel" - }, - "be_opinion": { - "name": "Be Opinion", - "categoryId": 2, - "url": "http://beopinion.com/", - "companyId": "be_opinion" - }, - "beachfront": { - "name": "Beachfront Media", - "categoryId": 4, - "url": "http://beachfrontmedia.com/", - "companyId": null - }, - "beacon_ad_network": { - "name": "Beacon Ad Network", - "categoryId": 4, - "url": "http://beaconads.com/", - "companyId": "beacon_ad_network" - }, - "beampulse.com": { - "name": "BeamPulse", - "categoryId": 4, - "url": "https://en.beampulse.com/", - "companyId": null - }, - "beanstalk_data": { - "name": "Beanstalk Data", - "categoryId": 4, - "url": "http://www.beanstalkdata.com/", - "companyId": "beanstalk_data" - }, - "bebi": { - "name": "Bebi Media", - "categoryId": 4, - "url": "https://www.bebi.com/", - "companyId": "bebi_media" - }, - "beeketing.com": { - "name": "Beeketing", - "categoryId": 4, - "url": "https://beeketing.com/", - "companyId": "beeketing" - }, - "beeline.ru": { - "name": "Beeline", - "categoryId": 4, - "url": "https://moskva.beeline.ru/", - "companyId": null - }, - "beeswax": { - "name": "Beeswax", - "categoryId": 4, - "url": "http://beeswax.com/", - "companyId": "beeswax" - }, - "beezup": { - "name": "BeezUP", - "categoryId": 4, - "url": "http://www.beezup.co.uk/", - "companyId": "beezup" - }, - "begun": { - "name": "Begun", - "categoryId": 4, - "url": "http://begun.ru/", - "companyId": "begun" - }, - "behavioralengine": { - "name": "BehavioralEngine", - "categoryId": 4, - "url": "http://www.behavioralengine.com/", - "companyId": "behavioralengine" - }, - "belboon_gmbh": { - "name": "belboon GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "belco": { - "name": "Belco", - "categoryId": 2, - "url": "https://www.belco.io/", - "companyId": "belco" - }, - "belstat": { - "name": "BelStat", - "categoryId": 6, - "url": "http://www.belstat.com/", - "companyId": "belstat" - }, - "bemobile.ua": { - "name": "Bemobile", - "categoryId": 10, - "url": "http://bemobile.ua/en/", - "companyId": "bemobile" - }, - "bench_platform": { - "name": "Bench Platform", - "categoryId": 4, - "url": "https://benchplatform.com", - "companyId": "bench_platform" - }, - "betterttv": { - "name": "BetterTTV", - "categoryId": 7, - "url": "https://nightdev.com/betterttv/", - "companyId": "nightdev" - }, - "betweendigital.com": { - "name": "Between Digital", - "categoryId": 4, - "url": "http://betweendigital.ru/ssp", - "companyId": "between_digital" - }, - "bid.run": { - "name": "Bid Run", - "categoryId": 4, - "url": "http://bid.run/", - "companyId": "bid.run" - }, - "bidgear": { - "name": "BidGear", - "categoryId": 6, - "url": "https://bidgear.com/", - "companyId": "bidgear" - }, - "bidswitch": { - "name": "Bidswitch", - "categoryId": 4, - "url": "http://www.iponweb.com/", - "companyId": "iponweb" - }, - "bidtellect": { - "name": "Bidtellect", - "categoryId": 4, - "url": "https://www.bidtellect.com/", - "companyId": "bidtellect" - }, - "bidtheatre": { - "name": "BidTheatre", - "categoryId": 4, - "url": "http://www.bidtheatre.com/", - "companyId": "bidtheatre" - }, - "bidvertiser": { - "name": "BidVertiser", - "categoryId": 4, - "url": "http://www.bidvertiser.com/", - "companyId": "bidvertiser" - }, - "big_mobile": { - "name": "Big Mobile", - "categoryId": 4, - "url": "http://www.bigmobile.com/", - "companyId": "big_mobile" - }, - "bigcommerce.com": { - "name": "BigCommerce", - "categoryId": 6, - "url": "https://www.bigcommerce.com/", - "companyId": "bigcommerce" - }, - "bigmir.net": { - "name": "bigmir", - "categoryId": 6, - "url": "https://www.bigmir.net/", - "companyId": "bigmir-internet" - }, - "bigpoint": { - "name": "Bigpoint", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bild": { - "name": "Bild.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bilgin_pro": { - "name": "Bilgin Pro", - "categoryId": 4, - "url": "http://bilgin.pro/", - "companyId": "bilginpro" - }, - "bilin": { - "name": "Bilin", - "categoryId": 4, - "url": "http://www.bilintechnology.com/", - "companyId": "bilin" - }, - "bing_ads": { - "name": "Bing Ads", - "categoryId": 4, - "url": "https://bingads.microsoft.com/", - "companyId": "microsoft" - }, - "bing_maps": { - "name": "Bing Maps", - "categoryId": 2, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "binge": { - "name": "Binge", - "categoryId": 0, - "url": "https://binge.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "binlayer": { - "name": "BinLayer", - "categoryId": 4, - "url": "http://binlayer.com/", - "companyId": "binlayer" - }, - "binotel": { - "name": "Binotel", - "categoryId": 4, - "url": "http://www.binotel.ua/", - "companyId": "binotel" - }, - "bisnode": { - "name": "Bisnode", - "categoryId": 4, - "url": "http://www.esendra.fi/", - "companyId": "bisnode" - }, - "bitcoin_miner": { - "name": "Bitcoin Miner", - "categoryId": 2, - "url": "http://www.bitcoinplus.com/", - "companyId": "bitcoin_plus" - }, - "bitly": { - "name": "Bitly", - "categoryId": 6, - "url": "https://bitly.com/", - "companyId": null - }, - "bitrix": { - "name": "Bitrix24", - "categoryId": 4, - "url": "https://www.bitrix24.com/", - "companyId": "bitrix24" - }, - "bitwarden": { - "name": "Bitwarden", - "categoryId": 8, - "url": "https://bitwarden.com/", - "companyId": "bitwarden", - "source": "AdGuard" - }, - "bizcn": { - "name": "Bizcn", - "categoryId": 4, - "url": "http://www.bizcn.com/", - "companyId": "bizcn" - }, - "blackdragon": { - "name": "BlackDragon", - "categoryId": 4, - "url": "http://www.jd.com/", - "companyId": "jing_dong" - }, - "blau.de": { - "name": "Blau", - "categoryId": 8, - "url": "https://www.blau.de/", - "companyId": null - }, - "blink_new_media": { - "name": "Blink New Media", - "categoryId": 4, - "url": "http://engagebdr.com/", - "companyId": "engage_bdr" - }, - "blis": { - "name": "Blis", - "categoryId": 6, - "url": "http://www.blis.com/index.php", - "companyId": "blis" - }, - "blogad": { - "name": "BlogAD", - "categoryId": 4, - "url": "http://www.blogad.com.tw/", - "companyId": "blogad" - }, - "blogbang": { - "name": "BlogBang", - "categoryId": 4, - "url": "http://www.blogbang.com/", - "companyId": "blogbang" - }, - "blogcatalog": { - "name": "BlogCatalog", - "categoryId": 2, - "url": "http://www.blogcatalog.com/", - "companyId": "blogcatalog" - }, - "blogcounter": { - "name": "BlogCounter", - "categoryId": 6, - "url": "http://blogcounter.com/", - "companyId": "adfire_gmbh" - }, - "blogfoster.com": { - "name": "Blogfoster", - "categoryId": 8, - "url": "http://www.blogfoster.com/", - "companyId": "blogfoster" - }, - "bloggerads": { - "name": "BloggerAds", - "categoryId": 4, - "url": "http://www.bloggerads.net/", - "companyId": "bloggerads" - }, - "blogher": { - "name": "BlogHer Ads", - "categoryId": 4, - "url": "https://www.blogher.com/", - "companyId": "penske_media_corp" - }, - "blogimg.jp": { - "name": "blogimg.jp", - "categoryId": 9, - "url": "https://line.me/", - "companyId": "line" - }, - "blogsmithmedia.com": { - "name": "blogsmithmedia.com", - "categoryId": 8, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "blogspot_com": { - "name": "blogspot.com", - "categoryId": 8, - "url": "http://www.google.com", - "companyId": "google" - }, - "bloomreach": { - "name": "BloomReach", - "categoryId": 4, - "url": "https://www.bloomreach.com/en", - "companyId": "bloomreach" - }, - "blue_cherry_group": { - "name": "Blue Cherry Group", - "categoryId": 4, - "url": "http://www.bluecherrygroup.com", - "companyId": "blue_cherry_group" - }, - "blue_seed": { - "name": "Blue Seed", - "categoryId": 4, - "url": "http://blueseed.tv/#/en/platform", - "companyId": "blue_seed" - }, - "blueconic.net": { - "name": "BlueConic Plugin", - "categoryId": 6, - "url": "https://www.blueconic.com/", - "companyId": "blueconic" - }, - "bluecore": { - "name": "Bluecore", - "categoryId": 4, - "url": "https://www.bluecore.com/", - "companyId": "triggermail" - }, - "bluekai": { - "name": "BlueKai", - "categoryId": 4, - "url": "http://www.bluekai.com/", - "companyId": "oracle" - }, - "bluelithium": { - "name": "Bluelithium", - "categoryId": 4, - "url": "http://www.bluelithium.com/", - "companyId": "verizon" - }, - "bluemetrix": { - "name": "Bluemetrix", - "categoryId": 4, - "url": "http://www.bluemetrix.ie/", - "companyId": "bluemetrix" - }, - "bluenewsupdate.info": { - "name": "bluenewsupdate.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bluestreak": { - "name": "BlueStreak", - "categoryId": 4, - "url": "http://www.bluestreak.com/", - "companyId": "dentsu_aegis_network" - }, - "bluetriangle": { - "name": "Blue Triangle", - "categoryId": 6, - "url": "https://www.bluetriangle.com/", - "companyId": "blue_triangle" - }, - "bodelen.com": { - "name": "bodelen.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "bol_affiliate_program": { - "name": "BOL Affiliate Program", - "categoryId": 4, - "url": "http://www.bol.com", - "companyId": "bol.com" - }, - "bold": { - "name": "Bold", - "categoryId": 4, - "url": "https://boldcommerce.com/", - "companyId": "bold" - }, - "boldchat": { - "name": "Boldchat", - "categoryId": 2, - "url": "http://www.boldchat.com/", - "companyId": "boldchat" - }, - "boltdns.net": { - "name": "boltdns.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bom": { - "name": "Bureau of Meteorology", - "categoryId": 9, - "url": "http://bom.gov.au/", - "companyId": "australian_government", - "source": "AdGuard" - }, - "bombora": { - "name": "Bombora", - "categoryId": 6, - "url": "http://bombora.com/", - "companyId": "bombora" - }, - "bongacams.com": { - "name": "bongacams.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bonial": { - "name": "Bonial Connect", - "categoryId": 2, - "url": "http://www.bonial.com/", - "companyId": null - }, - "boo-box": { - "name": "boo-box", - "categoryId": 4, - "url": "http://boo-box.com/", - "companyId": "boo-box" - }, - "booking.com": { - "name": "Booking.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "boost_box": { - "name": "Boost Box", - "categoryId": 6, - "url": "http://www.boostbox.com.br/", - "companyId": "boost_box" - }, - "booster_video": { - "name": "Booster Video", - "categoryId": 0, - "url": "https://boostervideo.ru/", - "companyId": "booster_video" - }, - "bootstrap": { - "name": "Bootstrap CDN", - "categoryId": 9, - "url": "http://getbootstrap.com/", - "companyId": "bootstrap_cdn" - }, - "borrango.com": { - "name": "borrango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "botscanner": { - "name": "BotScanner", - "categoryId": 6, - "url": "http://botscanner.com", - "companyId": "botscanner" - }, - "boudja.com": { - "name": "boudja.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bounce_exchange": { - "name": "Bounce Exchange", - "categoryId": 4, - "url": "http://bounceexchange.com", - "companyId": "bounce_exchange" - }, - "bouncex": { - "name": "BounceX", - "categoryId": 4, - "url": "https://www.bouncex.com/", - "companyId": null - }, - "box_uk": { - "name": "Box UK", - "categoryId": 6, - "url": "http://www.clickdensity.com", - "companyId": "box_uk" - }, - "boxever": { - "name": "Boxever", - "categoryId": 4, - "url": "https://www.boxever.com/", - "companyId": "boxever" - }, - "brainient": { - "name": "Brainient", - "categoryId": 4, - "url": "http://www.brainient.com/", - "companyId": "brainient" - }, - "brainsins": { - "name": "BrainSINS", - "categoryId": 4, - "url": "http://www.brainsins.com/", - "companyId": "brainsins" - }, - "branch": { - "name": "Branch.io", - "categoryId": 101, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc", - "source": "AdGuard" - }, - "branch_metrics": { - "name": "Branch", - "categoryId": 4, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc" - }, - "brand_affinity": { - "name": "Brand Affinity", - "categoryId": 4, - "url": "http://brandaffinity.net/about", - "companyId": "yoonla" - }, - "brand_networks": { - "name": "Brand Networks", - "categoryId": 4, - "url": "http://www.xa.net/", - "companyId": "brand_networks" - }, - "brandmetrics.com": { - "name": "Brandmetrics.com", - "categoryId": 4, - "url": "https://www.brandmetrics.com/", - "companyId": null - }, - "brandreach": { - "name": "BrandReach", - "categoryId": 4, - "url": "http://www.brandreach.com/", - "companyId": "brandreach" - }, - "brandscreen": { - "name": "Brandscreen", - "categoryId": 4, - "url": "http://www.brandscreen.com/", - "companyId": "zenovia" - }, - "brandwire.tv": { - "name": "BrandWire", - "categoryId": 4, - "url": "https://brandwire.tv/", - "companyId": null - }, - "branica": { - "name": "Branica", - "categoryId": 4, - "url": "http://www.branica.com/", - "companyId": "branica" - }, - "braze": { - "name": "Braze, Inc.", - "categoryId": 6, - "url": "https://www.braze.com/", - "companyId": "braze", - "source": "AdGuard" - }, - "brealtime": { - "name": "EMX Digital", - "categoryId": 4, - "url": "https://emxdigital.com/", - "companyId": null - }, - "bridgetrack": { - "name": "BridgeTrack", - "categoryId": 4, - "url": "http://www.bridgetrack.com/", - "companyId": "bridgetrack" - }, - "brightcove": { - "name": "Brightcove", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightcove_player": { - "name": "Brightcove Player", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightedge": { - "name": "BrightEdge", - "categoryId": 4, - "url": "http://www.brightedge.com/", - "companyId": "brightedge" - }, - "brightfunnel": { - "name": "BrightFunnel", - "categoryId": 6, - "url": "http://www.brightfunnel.com/", - "companyId": "brightfunnel" - }, - "brightonclick.com": { - "name": "brightonclick.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "brightroll": { - "name": "BrightRoll", - "categoryId": 4, - "url": "http://www.brightroll.com/", - "companyId": "verizon" - }, - "brilig": { - "name": "Brilig", - "categoryId": 4, - "url": "http://www.brilig.com/", - "companyId": "dentsu_aegis_network" - }, - "brillen.de": { - "name": "brillen.de", - "categoryId": 8, - "url": "https://www.brillen.de/", - "companyId": null - }, - "broadstreet": { - "name": "Broadstreet", - "categoryId": 4, - "url": "http://broadstreetads.com/", - "companyId": "broadstreet" - }, - "bronto": { - "name": "Bronto", - "categoryId": 4, - "url": "http://bronto.com/", - "companyId": "bronto" - }, - "brow.si": { - "name": "Brow.si", - "categoryId": 4, - "url": "https://brow.si/", - "companyId": "brow.si" - }, - "browser-statistik": { - "name": "Browser-Statistik", - "categoryId": 6, - "url": "http://www.browser-statistik.de/", - "companyId": "browser-statistik" - }, - "browser_update": { - "name": "Browser Update", - "categoryId": 2, - "url": "http://www.browser-update.org/", - "companyId": "browser-update" - }, - "btncdn.com": { - "name": "btncdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "bubblestat": { - "name": "Bubblestat", - "categoryId": 4, - "url": "http://www.bubblestat.com/", - "companyId": "bubblestat" - }, - "buddy_media": { - "name": "Buddy Media", - "categoryId": 7, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "buffer_button": { - "name": "Buffer Button", - "categoryId": 7, - "url": "http://www.bufferapp.com/", - "companyId": "buffer" - }, - "bugherd.com": { - "name": "BugHerd", - "categoryId": 2, - "url": "https://bugherd.com", - "companyId": "bugherd" - }, - "bugsnag": { - "name": "Bugsnag", - "categoryId": 6, - "url": "https://bugsnag.com", - "companyId": "bugsnag" - }, - "bulkhentai.com": { - "name": "bulkhentai.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bumlam.com": { - "name": "bumlam.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bunchbox": { - "name": "Bunchbox", - "categoryId": 6, - "url": "https://app.bunchbox.co/login", - "companyId": "bunchbox" - }, - "burda": { - "name": "BurdaForward", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burda_digital_systems": { - "name": "Burda Digital Systems", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burst_media": { - "name": "Burst Media", - "categoryId": 4, - "url": "http://www.burstmedia.com/", - "companyId": "rhythmone" - }, - "burt": { - "name": "Burt", - "categoryId": 4, - "url": "http://www.burtcorp.com/", - "companyId": "burt" - }, - "businessonline_analytics": { - "name": "BusinessOnLine Analytics", - "categoryId": 6, - "url": "http://www.businessol.com/", - "companyId": "businessonline" - }, - "button": { - "name": "Button", - "categoryId": 4, - "url": "https://www.usebutton.com/", - "companyId": "button", - "source": "AdGuard" - }, - "buysellads": { - "name": "BuySellAds", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "buzzadexchange.com": { - "name": "buzzadexchange.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "buzzador": { - "name": "Buzzador", - "categoryId": 7, - "url": "http://www.buzzador.com", - "companyId": "buzzador" - }, - "buzzfeed": { - "name": "BuzzFeed", - "categoryId": 2, - "url": "http://www.buzzfeed.com", - "companyId": "buzzfeed" - }, - "bwbx.io": { - "name": "Bloomberg CDN", - "categoryId": 9, - "url": "https://www.bloomberg.com/", - "companyId": null - }, - "bypass": { - "name": "Bypass", - "categoryId": 4, - "url": "http://bypass.jp/", - "companyId": "united_inc" - }, - "c1_exchange": { - "name": "C1 Exchange", - "categoryId": 4, - "url": "http://c1exchange.com/", - "companyId": "c1_exchange" - }, - "c3_metrics": { - "name": "C3 Metrics", - "categoryId": 6, - "url": "http://c3metrics.com/", - "companyId": "c3_metrics" - }, - "c8_network": { - "name": "C8 Network", - "categoryId": 4, - "url": "http://c8.net.ua/", - "companyId": "c8_network" - }, - "cackle.me": { - "name": "Cackle", - "categoryId": 3, - "url": "https://cackle.me/", - "companyId": null - }, - "cadreon": { - "name": "Cadreon", - "categoryId": 4, - "url": "http://www.cadreon.com/", - "companyId": "cadreon" - }, - "call_page": { - "name": "Call Page", - "categoryId": 2, - "url": "https://www.callpage.io/", - "companyId": "call_page" - }, - "callbackhunter": { - "name": "CallbackHunter", - "categoryId": 2, - "url": "http://callbackhunter.com/main", - "companyId": "callbackhunter" - }, - "callbox": { - "name": "CallBox", - "categoryId": 2, - "url": "http://www.centuryinteractive.com", - "companyId": "callbox" - }, - "callibri": { - "name": "Callibri", - "categoryId": 4, - "url": "https://callibri.ru/", - "companyId": "callibri" - }, - "callrail": { - "name": "CallRail", - "categoryId": 2, - "url": "http://www.callrail.com/", - "companyId": "callrail" - }, - "calltracking": { - "name": "Calltracking", - "categoryId": 2, - "url": "https://calltracking.ru", - "companyId": "calltracking" - }, - "caltat.com": { - "name": "Caltat", - "categoryId": 2, - "url": "https://caltat.com/", - "companyId": null - }, - "cam-content.com": { - "name": "Cam-Content.com", - "categoryId": 3, - "url": "https://www.cam-content.com/", - "companyId": null - }, - "camakaroda.com": { - "name": "camakaroda.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "campus_explorer": { - "name": "Campus Explorer", - "categoryId": 6, - "url": "http://www.campusexplorer.com/", - "companyId": "campus_explorer" - }, - "canddi": { - "name": "CANDDI", - "categoryId": 6, - "url": "https://www.canddi.com/", - "companyId": "canddi" - }, - "canonical": { - "name": "Canonical", - "categoryId": 8, - "url": "https://canonical.com/", - "companyId": "canonical", - "source": "AdGuard" - }, - "canvas": { - "name": "Canvas", - "categoryId": 2, - "url": "https://www.canvas.net/", - "companyId": null - }, - "capitaldata": { - "name": "CapitalData", - "categoryId": 6, - "url": "https://www.capitaldata.fr/", - "companyId": "highco" - }, - "captora": { - "name": "Captora", - "categoryId": 4, - "url": "http://www.captora.com/", - "companyId": "captora" - }, - "capture_media": { - "name": "Capture Media", - "categoryId": 4, - "url": "http://capturemedia.ch/", - "companyId": "capture_media" - }, - "capturly": { - "name": "Capturly", - "categoryId": 6, - "url": "http://capturly.com/", - "companyId": "capturly" - }, - "carambola": { - "name": "Carambola", - "categoryId": 4, - "url": "http://carambo.la/", - "companyId": "carambola" - }, - "carbonads": { - "name": "Carbon Ads", - "categoryId": 4, - "url": "https://www.carbonads.net/", - "companyId": "buysellads.com" - }, - "cardinal": { - "name": "Cardinal", - "categoryId": 6, - "url": "https://www.cardinalcommerce.com/", - "companyId": "visa" - }, - "cardlytics": { - "name": "Cardlytics", - "categoryId": 6, - "url": "http://www.cardlytics.com/", - "companyId": null - }, - "carrot_quest": { - "name": "Carrot Quest", - "categoryId": 6, - "url": "http://www.carrotquest.io/", - "companyId": "carrot_quest" - }, - "cartstack": { - "name": "CartStack", - "categoryId": 2, - "url": "http://cartstack.com/", - "companyId": "cartstack" - }, - "caspion": { - "name": "Caspion", - "categoryId": 6, - "url": "http://caspion.com/", - "companyId": "caspion" - }, - "castle": { - "name": "Castle", - "categoryId": 2, - "url": "https://castle.io", - "companyId": "castle" - }, - "catchpoint": { - "name": "Catchpoint", - "categoryId": 6, - "url": "http://www.catchpoint.com/", - "companyId": "catchpoint_systems" - }, - "cbox": { - "name": "Cbox", - "categoryId": 2, - "url": "http://cbox.ws", - "companyId": "cbox" - }, - "cbs_interactive": { - "name": "CBS Interactive", - "categoryId": 0, - "url": "http://www.cbsinteractive.com/", - "companyId": "cbs_interactive" - }, - "ccm_benchmark": { - "name": "CCM Benchmark", - "categoryId": 4, - "url": "http://www.ccmbenchmark.com/", - "companyId": null - }, - "cdk_digital_marketing": { - "name": "CDK Digital Marketing", - "categoryId": 4, - "url": "http://www.cobaltgroup.com", - "companyId": "cdk_digital_marketing" - }, - "cdn-net.com": { - "name": "cdn-net.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdn13.com": { - "name": "cdn13.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "cdn77": { - "name": "CDN77", - "categoryId": 9, - "url": "https://www.cdn77.com/", - "companyId": null - }, - "cdnetworks.net": { - "name": "cdnetworks.net", - "categoryId": 9, - "url": "https://www.cdnetworks.com/", - "companyId": null - }, - "cdnnetwok_xyz": { - "name": "cdnnetwok.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "cdnondemand.org": { - "name": "cdnondemand.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnsure.com": { - "name": "cdnsure.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnvideo.com": { - "name": "CDNvideo", - "categoryId": 9, - "url": "https://www.cdnvideo.com/", - "companyId": "cdnvideo" - }, - "cdnwidget.com": { - "name": "cdnwidget.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "cedexis_radar": { - "name": "Cedexis Radar", - "categoryId": 6, - "url": "http://www.cedexis.com/products_radar.html", - "companyId": "cedexis" - }, - "celebrus": { - "name": "Celebrus", - "categoryId": 6, - "url": "https://www.celebrus.com/", - "companyId": "celebrus" - }, - "celtra": { - "name": "Celtra", - "categoryId": 0, - "url": "http://www.celtra.com/", - "companyId": "celtra" - }, - "cendyn": { - "name": "Cendyn", - "categoryId": 4, - "url": "http://www.cendyn.com/", - "companyId": "cendyn" - }, - "centraltag": { - "name": "CentralTag", - "categoryId": 4, - "url": "http://www.centraltag.com/", - "companyId": "centraltag" - }, - "centro": { - "name": "Centro", - "categoryId": 4, - "url": "http://centro.net/", - "companyId": "centro" - }, - "cerberus_speed-trap": { - "name": "Cerberus Speed-Trap", - "categoryId": 6, - "url": "http://cerberusip.com/", - "companyId": "cerberus" - }, - "certainsource": { - "name": "CertainSource", - "categoryId": 4, - "url": "http://www.ewaydirect.com", - "companyId": "certainsource" - }, - "certifica_metric": { - "name": "Certifica Metric", - "categoryId": 4, - "url": "http://www.comscore.com/Products_Services/Product_Index/Certifica_Metric", - "companyId": "comscore" - }, - "certona": { - "name": "Certona", - "categoryId": 4, - "url": "http://www.certona.com/products/recommendation.php", - "companyId": "certona" - }, - "chameleon": { - "name": "Chameleon", - "categoryId": 4, - "url": "http://chameleon.ad/", - "companyId": "chamaleon" - }, - "chango": { - "name": "Chango", - "categoryId": 4, - "url": "http://www.chango.com/", - "companyId": "rubicon_project" - }, - "channel_intelligence": { - "name": "Channel Intelligence", - "categoryId": 4, - "url": "http://www.channelintelligence.com/", - "companyId": "google" - }, - "channel_pilot_solutions": { - "name": "ChannelPilot Solutions", - "categoryId": 6, - "url": "https://www.channelpilot.de/", - "companyId": null - }, - "channeladvisor": { - "name": "ChannelAdvisor", - "categoryId": 4, - "url": "http://www.channeladvisor.com/", - "companyId": "channeladvisor" - }, - "channelfinder": { - "name": "ChannelFinder", - "categoryId": 4, - "url": "http://www.kpicentral.com/", - "companyId": "kaleidoscope_promotions" - }, - "chaordic": { - "name": "Chaordic", - "categoryId": 4, - "url": "https://www.chaordic.com.br/", - "companyId": "chaordic" - }, - "chartbeat": { - "name": "ChartBeat", - "categoryId": 6, - "url": "http://chartbeat.com/", - "companyId": "chartbeat" - }, - "chartboost": { - "name": "Chartboost", - "categoryId": 4, - "url": "http://chartboost.com/", - "companyId": "take-two", - "source": "AdGuard" - }, - "chaser": { - "name": "Chaser", - "categoryId": 2, - "url": "http://chaser.ru/", - "companyId": "chaser" - }, - "chat_beacon": { - "name": "Chat Beacon", - "categoryId": 2, - "url": "https://www.chatbeacon.io/", - "companyId": "chat_beacon" - }, - "chatango": { - "name": "Chatango", - "categoryId": 2, - "url": "http://www.chatango.com/", - "companyId": "chatango" - }, - "chatra": { - "name": "Chatra", - "categoryId": 2, - "url": "https://chatra.io", - "companyId": "chatra" - }, - "chaturbate.com": { - "name": "chaturbate.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "chatwing": { - "name": "ChatWing", - "categoryId": 2, - "url": "http://chatwing.com/", - "companyId": "chatwing" - }, - "checkmystats": { - "name": "CheckMyStats", - "categoryId": 4, - "url": "http://checkmystats.com.au", - "companyId": "checkmystats" - }, - "chefkoch_de": { - "name": "chefkoch.de", - "categoryId": 8, - "url": "http://chefkoch.de/", - "companyId": null - }, - "chin_media": { - "name": "Chin Media", - "categoryId": 4, - "url": "http://www.chinmedia.vn/#", - "companyId": "chin_media" - }, - "chinesean": { - "name": "ChineseAN", - "categoryId": 4, - "url": "http://www.chinesean.com/", - "companyId": "chinesean" - }, - "chitika": { - "name": "Chitika", - "categoryId": 4, - "url": "http://chitika.com/", - "companyId": "chitika" - }, - "choicestream": { - "name": "ChoiceStream", - "categoryId": 4, - "url": "http://www.choicestream.com/", - "companyId": "choicestream" - }, - "chute": { - "name": "Chute", - "categoryId": 5, - "url": "https://www.getchute.com/", - "companyId": "esw_capital" - }, - "circit": { - "name": "circIT", - "categoryId": 6, - "url": "http://www.circit.de/", - "companyId": null - }, - "circulate": { - "name": "Circulate", - "categoryId": 6, - "url": "http://circulate.com/", - "companyId": "circulate" - }, - "city_spark": { - "name": "City Spark", - "categoryId": 4, - "url": "http://www.cityspark.com/", - "companyId": "city_spark" - }, - "cityads": { - "name": "CityAds", - "categoryId": 4, - "url": "http://cityads.ru/", - "companyId": "cityads" - }, - "ciuvo.com": { - "name": "ciuvo.com", - "categoryId": 12, - "url": "https://www.ciuvo.com/", - "companyId": null - }, - "civey_widgets": { - "name": "Civey Widgets", - "categoryId": 2, - "url": "https://civey.com/", - "companyId": "civey" - }, - "civicscience.com": { - "name": "CivicScience", - "categoryId": 6, - "url": "https://civicscience.com/", - "companyId": "civicscience" - }, - "ciwebgroup": { - "name": "CIWebGroup", - "categoryId": 4, - "url": "http://www.ciwebgroup.com/", - "companyId": "ciwebgroup" - }, - "clcknads.pro": { - "name": "clcknads.pro", - "categoryId": 3, - "url": null, - "companyId": null - }, - "clear_pier": { - "name": "ClearPier", - "categoryId": 4, - "url": "http://clearpier.com/", - "companyId": "clear_pier" - }, - "clearbit.com": { - "name": "Clearbit", - "categoryId": 6, - "url": "https://clearbit.com/", - "companyId": "clearbit" - }, - "clearsale": { - "name": "clearsale", - "categoryId": 4, - "url": "https://www.clear.sale/", - "companyId": null - }, - "clearstream.tv": { - "name": "Clearstream.TV", - "categoryId": 4, - "url": "http://clearstream.tv/", - "companyId": "clearstream.tv" - }, - "clerk.io": { - "name": "Clerk.io", - "categoryId": 4, - "url": "https://clerk.io/", - "companyId": "clerk.io" - }, - "clever_push": { - "name": "Clever Push", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_push" - }, - "clever_tap": { - "name": "CleverTap", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_tap" - }, - "cleversite": { - "name": "Cleversite", - "categoryId": 2, - "url": "http://cleversite.ru/", - "companyId": "cleversite" - }, - "click360": { - "name": "Click360", - "categoryId": 6, - "url": "https://www.click360.io/", - "companyId": "click360" - }, - "click_and_chat": { - "name": "Click and Chat", - "categoryId": 2, - "url": "http://www.clickandchat.com/", - "companyId": "clickandchat" - }, - "click_back": { - "name": "Click Back", - "categoryId": 4, - "url": "http://www.clickback.com/", - "companyId": "clickback" - }, - "clickaider": { - "name": "ClickAider", - "categoryId": 4, - "url": "http://clickaider.com/", - "companyId": "clickaider" - }, - "clickaine": { - "name": "Clickaine", - "categoryId": 4, - "url": "https://clickaine.com/", - "companyId": "clickaine", - "source": "AdGuard" - }, - "clickbank": { - "name": "ClickBank", - "categoryId": 4, - "url": "http://www.clickbank.com/", - "companyId": "clickbank" - }, - "clickbank_proads": { - "name": "ClickBank ProAds", - "categoryId": 4, - "url": "http://www.cbproads.com/", - "companyId": "clickbank_proads" - }, - "clickbooth": { - "name": "Clickbooth", - "categoryId": 4, - "url": "http://www.clickbooth.com/", - "companyId": "clickbooth" - }, - "clickcease": { - "name": "ClickCease", - "categoryId": 2, - "url": "https://www.clickcease.com/", - "companyId": "click_cease" - }, - "clickcertain": { - "name": "ClickCertain", - "categoryId": 4, - "url": "http://www.clickcertain.com", - "companyId": "clickcertain" - }, - "clickdesk": { - "name": "ClickDesk", - "categoryId": 2, - "url": "https://www.clickdesk.com/", - "companyId": "clickdesk" - }, - "clickdimensions": { - "name": "ClickDimensions", - "categoryId": 4, - "url": "http://www.clickdimensions.com/", - "companyId": "clickdimensions" - }, - "clickequations": { - "name": "ClickEquations", - "categoryId": 4, - "url": "http://www.clickequations.com/", - "companyId": "acquisio" - }, - "clickexperts": { - "name": "ClickExperts", - "categoryId": 4, - "url": "http://clickexperts.com/corp/index.php?lang=en", - "companyId": "clickexperts" - }, - "clickforce": { - "name": "ClickForce", - "categoryId": 4, - "url": "http://www.clickforce.com.tw/", - "companyId": "clickforce" - }, - "clickinc": { - "name": "ClickInc", - "categoryId": 4, - "url": "http://www.clickinc.com", - "companyId": "clickinc" - }, - "clickintext": { - "name": "ClickInText", - "categoryId": 4, - "url": "http://www.clickintext.com/", - "companyId": "clickintext" - }, - "clickky": { - "name": "Clickky", - "categoryId": 4, - "url": "http://www.clickky.biz/", - "companyId": "clickky" - }, - "clickmeter": { - "name": "ClickMeter", - "categoryId": 4, - "url": "http://www.clickmeter.com", - "companyId": "clickmeter" - }, - "clickonometrics": { - "name": "Clickonometrics", - "categoryId": 4, - "url": "http://clickonometrics.pl/", - "companyId": "clickonometrics" - }, - "clickpoint": { - "name": "Clickpoint", - "categoryId": 4, - "url": "http://clickpoint.com/", - "companyId": "clickpoint" - }, - "clickprotector": { - "name": "ClickProtector", - "categoryId": 6, - "url": "http://www.clickprotector.com/", - "companyId": "clickprotector" - }, - "clickreport": { - "name": "ClickReport", - "categoryId": 6, - "url": "http://clickreport.com/", - "companyId": "clickreport" - }, - "clicks_thru_networks": { - "name": "Clicks Thru Networks", - "categoryId": 4, - "url": "http://www.clicksthrunetwork.com/", - "companyId": "clicksthrunetwork" - }, - "clicksor": { - "name": "Clicksor", - "categoryId": 4, - "url": "http://clicksor.com/", - "companyId": "clicksor" - }, - "clicktale": { - "name": "ClickTale", - "categoryId": 6, - "url": "http://www.clicktale.com/", - "companyId": "clicktale" - }, - "clicktripz": { - "name": "ClickTripz", - "categoryId": 4, - "url": "https://www.clicktripz.com", - "companyId": "clicktripz" - }, - "clickwinks": { - "name": "Clickwinks", - "categoryId": 4, - "url": "http://www.clickwinks.com/", - "companyId": "clickwinks" - }, - "clicky": { - "name": "Clicky", - "categoryId": 6, - "url": "http://getclicky.com/", - "companyId": "clicky" - }, - "clickyab": { - "name": "Clickyab", - "categoryId": 4, - "url": "https://www.clickyab.com/", - "companyId": "clickyab" - }, - "clicmanager": { - "name": "ClicManager", - "categoryId": 4, - "url": "http://www.clicmanager.fr/", - "companyId": "clicmanager" - }, - "clip_syndicate": { - "name": "Clip Syndicate", - "categoryId": 4, - "url": "http://www.clipsyndicate.com/", - "companyId": "clip_syndicate" - }, - "clixgalore": { - "name": "clixGalore", - "categoryId": 4, - "url": "http://www.clixgalore.com/", - "companyId": "clixgalore" - }, - "clixmetrix": { - "name": "ClixMetrix", - "categoryId": 4, - "url": "http://www.clixmetrix.com/", - "companyId": "clixmedia" - }, - "clixsense": { - "name": "ClixSense", - "categoryId": 4, - "url": "http://www.clixsense.com/", - "companyId": "clixsense" - }, - "cloud-media.fr": { - "name": "CloudMedia", - "categoryId": 4, - "url": "https://cloudmedia.fr/", - "companyId": null - }, - "cloudflare": { - "name": "CloudFlare", - "categoryId": 9, - "url": "https://www.cloudflare.com/", - "companyId": "cloudflare" - }, - "cloudimage.io": { - "name": "Cloudimage.io", - "categoryId": 9, - "url": "https://www.cloudimage.io/en/home", - "companyId": "scaleflex_sas" - }, - "cloudinary": { - "name": "Cloudinary", - "categoryId": 9, - "url": "https://cloudinary.com/", - "companyId": null - }, - "clove_network": { - "name": "Clove Network", - "categoryId": 4, - "url": "http://www.clovenetwork.com/", - "companyId": "clove_network" - }, - "clustrmaps": { - "name": "ClustrMaps", - "categoryId": 4, - "url": "http://www.clustrmaps.com/", - "companyId": "clustrmaps" - }, - "cnbc": { - "name": "CNBC", - "categoryId": 8, - "url": "https://www.cnbc.com/", - "companyId": "nbcuniversal" - }, - "cnetcontent.com": { - "name": "Cnetcontent", - "categoryId": 8, - "url": "http://cnetcontent.com/", - "companyId": "cbs_interactive" - }, - "cnstats": { - "name": "CNStats", - "categoryId": 6, - "url": "http://cnstats.ru/", - "companyId": "cnstats" - }, - "cnzz.com": { - "name": "Umeng", - "categoryId": 6, - "url": "http://www.umeng.com/", - "companyId": "umeng" - }, - "coadvertise": { - "name": "COADVERTISE", - "categoryId": 4, - "url": "http://www.coadvertise.com/", - "companyId": "coadvertise" - }, - "cobrowser": { - "name": "CoBrowser", - "categoryId": 2, - "url": "https://www.cobrowser.net/", - "companyId": "cobrowser.net" - }, - "codeonclick.com": { - "name": "codeonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cogocast": { - "name": "CogoCast", - "categoryId": 4, - "url": "http://www.cogocast.com", - "companyId": "cogocast" - }, - "coin_have": { - "name": "Coin Have", - "categoryId": 4, - "url": "https://coin-have.com/", - "companyId": "coin_have" - }, - "coin_traffic": { - "name": "Coin Traffic", - "categoryId": 2, - "url": "https://cointraffic.io/", - "companyId": "coin_traffic" - }, - "coinhive": { - "name": "Coinhive", - "categoryId": 8, - "url": "https://coinhive.com/", - "companyId": "coinhive" - }, - "coinurl": { - "name": "CoinURL", - "categoryId": 4, - "url": "https://coinurl.com/", - "companyId": "coinurl" - }, - "coll1onf.com": { - "name": "coll1onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "coll2onf.com": { - "name": "coll2onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "collarity": { - "name": "Collarity", - "categoryId": 4, - "url": "http://www.collarity.com/", - "companyId": "collarity" - }, - "columbia_online": { - "name": "Columbia Online", - "categoryId": 4, - "url": "https://www.colombiaonline.com/", - "companyId": "columbia_online" - }, - "combotag": { - "name": "ComboTag", - "categoryId": 4, - "url": "https://www.combotag.com/", - "companyId": null - }, - "comcast_technology_solutions": { - "name": "Comcast Technology Solutions", - "categoryId": 0, - "url": "https://www.comcasttechnologysolutions.com/", - "companyId": "comcast_technology_solutions" - }, - "comm100": { - "name": "Comm100", - "categoryId": 2, - "url": "http://www.comm100.com/", - "companyId": "comm100" - }, - "commerce_sciences": { - "name": "Commerce Sciences", - "categoryId": 4, - "url": "http://commercesciences.com/", - "companyId": "commerce_sciences" - }, - "commercehub": { - "name": "CommerceHub", - "categoryId": 4, - "url": "http://www.mercent.com/", - "companyId": "commercehub" - }, - "commercialvalue.org": { - "name": "commercialvalue.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "commission_junction": { - "name": "CJ Affiliate", - "categoryId": 4, - "url": "http://www.cj.com/", - "companyId": "conversant" - }, - "communicator_corp": { - "name": "Communicator Corp", - "categoryId": 4, - "url": "http://www.communicatorcorp.com/", - "companyId": "communicator_corp" - }, - "communigator": { - "name": "CommuniGator", - "categoryId": 6, - "url": "http://www.wowanalytics.co.uk/", - "companyId": "communigator" - }, - "competexl": { - "name": "CompeteXL", - "categoryId": 6, - "url": "http://www.compete.com/help/s12", - "companyId": "wpp" - }, - "complex_media_network": { - "name": "Complex Media", - "categoryId": 4, - "url": "https://www.complex.com/", - "companyId": "verizon" - }, - "comprigo": { - "name": "comprigo", - "categoryId": 12, - "url": "https://www.comprigo.com/", - "companyId": null - }, - "comscore": { - "name": "ComScore, Inc.", - "categoryId": 6, - "url": "https://www.comscore.com/", - "companyId": "comscore" - }, - "conative.de": { - "name": "CoNative", - "categoryId": 4, - "url": "http://www.conative.de/", - "companyId": null - }, - "condenastdigital.com": { - "name": "Condé Nast Digital", - "categoryId": 8, - "url": "http://www.condenast.com/", - "companyId": "conde_nast" - }, - "conduit": { - "name": "Conduit", - "categoryId": 4, - "url": "http://www.conduit.com/", - "companyId": "conduit" - }, - "confirmit": { - "name": "Confirmit", - "categoryId": 4, - "url": "http://confirmit.com/", - "companyId": "confirmit" - }, - "congstar.de": { - "name": "congstar.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "connatix.com": { - "name": "Connatix", - "categoryId": 4, - "url": "https://connatix.com/", - "companyId": "connatix" - }, - "connectad": { - "name": "ConnectAd", - "categoryId": 4, - "url": "https://connectad.io/", - "companyId": "connectad" - }, - "connecto": { - "name": "Connecto", - "categoryId": 6, - "url": "http://www.connecto.io/", - "companyId": "connecto" - }, - "connexity": { - "name": "Connexity", - "categoryId": 4, - "url": "http://www.connexity.com", - "companyId": "shopzilla" - }, - "connextra": { - "name": "Connextra", - "categoryId": 4, - "url": "http://connextra.com/", - "companyId": "connextra" - }, - "constant_contact": { - "name": "Constant Contact", - "categoryId": 4, - "url": "http://www.constantcontact.com/index.jsp", - "companyId": "constant_contact" - }, - "consumable": { - "name": "Consumable", - "categoryId": 4, - "url": "http://consumable.com/index.html", - "companyId": "giftconnect" - }, - "contact_at_once": { - "name": "Contact At Once!", - "categoryId": 2, - "url": "http://www.contactatonce.com/", - "companyId": "contact_at_once!" - }, - "contact_impact": { - "name": "Contact Impact", - "categoryId": 4, - "url": "https://www.contactimpact.de/", - "companyId": "axel_springer" - }, - "contactme": { - "name": "ContactMe", - "categoryId": 4, - "url": "http://www.contactme.com", - "companyId": "contactme" - }, - "contaxe": { - "name": "Contaxe", - "categoryId": 5, - "url": "http://www.contaxe.com/", - "companyId": "contaxe" - }, - "content.ad": { - "name": "Content.ad", - "categoryId": 4, - "url": "https://www.content.ad/", - "companyId": "content.ad" - }, - "content_insights": { - "name": "Content Insights", - "categoryId": 6, - "url": "https://contentinsights.com/", - "companyId": "content_insights" - }, - "contentexchange.me": { - "name": "Content Exchange", - "categoryId": 6, - "url": "https://www.contentexchange.me/", - "companyId": "i.r.v." - }, - "contentful_gmbh": { - "name": "Contentful GmbH", - "categoryId": 9, - "url": "https://www.contentful.com/", - "companyId": "contentful_gmbh" - }, - "contentpass": { - "name": "ContentPass", - "categoryId": 6, - "url": "https://www.contentpass.de/", - "companyId": "contentpass" - }, - "contentsquare.net": { - "name": "ContentSquare", - "categoryId": 4, - "url": "https://www.contentsquare.com/", - "companyId": "content_square" - }, - "contentwrx": { - "name": "Contentwrx", - "categoryId": 6, - "url": "http://contentwrx.com/", - "companyId": "contentwrx" - }, - "context": { - "name": "C|ON|TEXT", - "categoryId": 4, - "url": "http://c-on-text.com", - "companyId": "c_on_text" - }, - "context.ad": { - "name": "Context.ad", - "categoryId": 4, - "url": "http://contextad.pl/", - "companyId": "context.ad" - }, - "continum_net": { - "name": "continum.net", - "categoryId": 10, - "url": "http://continum.net/", - "companyId": null - }, - "contribusource": { - "name": "Contribusource", - "categoryId": 4, - "url": "https://www.contribusource.com/", - "companyId": "contribusource" - }, - "convergetrack": { - "name": "ConvergeTrack", - "categoryId": 6, - "url": "http://www.convergedirect.com/technology/convergetrack.shtml", - "companyId": "convergedirect" - }, - "conversant": { - "name": "Conversant", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "conversio": { - "name": "CM Commerce", - "categoryId": 6, - "url": "https://cm-commerce.com/", - "companyId": "conversio" - }, - "conversion_logic": { - "name": "Conversion Logic", - "categoryId": 6, - "url": "http://www.conversionlogic.com/", - "companyId": "conversion_logic" - }, - "conversionruler": { - "name": "ConversionRuler", - "categoryId": 4, - "url": "http://www.conversionruler.com/", - "companyId": "market_ruler" - }, - "conversions_box": { - "name": "Conversions Box", - "categoryId": 7, - "url": "http://www.conversionsbox.com/", - "companyId": "conversions_box" - }, - "conversions_on_demand": { - "name": "Conversions On Demand", - "categoryId": 5, - "url": "https://www.conversionsondemand.com/", - "companyId": "conversions_on_demand" - }, - "conversive": { - "name": "Conversive", - "categoryId": 4, - "url": "http://www.conversive.nl/", - "companyId": "conversive" - }, - "convert": { - "name": "Convert", - "categoryId": 6, - "url": "https://www.convert.com/", - "companyId": "convert" - }, - "convertfox": { - "name": "ConvertFox", - "categoryId": 2, - "url": "https://convertfox.com/", - "companyId": "convertfox" - }, - "convertro": { - "name": "Convertro", - "categoryId": 4, - "url": "http://www.convertro.com/", - "companyId": "verizon" - }, - "conviva": { - "name": "Conviva", - "categoryId": 6, - "url": "http://www.conviva.com/", - "companyId": "conviva" - }, - "cookie_consent": { - "name": "Cookie Consent", - "categoryId": 5, - "url": "https://silktide.com/", - "companyId": "silktide" - }, - "cookie_script": { - "name": "Cookie Script", - "categoryId": 5, - "url": "https://cookie-script.com/", - "companyId": "cookie_script" - }, - "cookiebot": { - "name": "Cookiebot", - "categoryId": 5, - "url": "https://www.cookiebot.com/en/", - "companyId": "cybot" - }, - "cookieq": { - "name": "CookieQ", - "categoryId": 5, - "url": "http://cookieq.com/CookieQ", - "companyId": "baycloud" - }, - "cooliris": { - "name": "Cooliris", - "categoryId": 2, - "url": "http://www.cooliris.com", - "companyId": "cooliris" - }, - "copacet": { - "name": "Copacet", - "categoryId": 4, - "url": "http://copacet.com/", - "companyId": "copacet" - }, - "coreaudience": { - "name": "CoreAudience", - "categoryId": 4, - "url": "http://www.redaril.com/", - "companyId": "hearst" - }, - "coremotives": { - "name": "CoreMotives", - "categoryId": 4, - "url": "http://coremotives.com/", - "companyId": "coremotives" - }, - "coull": { - "name": "Coull", - "categoryId": 4, - "url": "http://coull.com/", - "companyId": "coull" - }, - "cpm_rocket": { - "name": "CPM Rocket", - "categoryId": 4, - "url": "http://www.cpmrocket.com/", - "companyId": "cpm_rocket" - }, - "cpmprofit": { - "name": "CPMProfit", - "categoryId": 4, - "url": "http://www.cpmprofit.com/", - "companyId": "cpmprofit" - }, - "cpmstar": { - "name": "CPMStar", - "categoryId": 4, - "url": "http://www.cpmstar.com", - "companyId": "cpmstar" - }, - "cpx.to": { - "name": "Captify", - "categoryId": 4, - "url": "https://www.captify.co.uk/", - "companyId": "captify" - }, - "cq_counter": { - "name": "CQ Counter", - "categoryId": 6, - "url": "http://www.cqcounter.com/", - "companyId": "cq_counter" - }, - "cqq5id8n.com": { - "name": "cqq5id8n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cquotient.com": { - "name": "CQuotient", - "categoryId": 6, - "url": "https://www.demandware.com/#cquotient", - "companyId": "salesforce" - }, - "craftkeys": { - "name": "CraftKeys", - "categoryId": 4, - "url": "http://craftkeys.com/", - "companyId": "craftkeys" - }, - "crakmedia_network": { - "name": "Crakmedia Network", - "categoryId": 4, - "url": "http://crakmedia.com/", - "companyId": "crakmedia_network" - }, - "crankyads": { - "name": "CrankyAds", - "categoryId": 4, - "url": "http://www.crankyads.com", - "companyId": "crankyads" - }, - "crashlytics": { - "name": "Crashlytics", - "categoryId": 101, - "url": "https://crashlytics.com/", - "companyId": "google", - "source": "AdGuard" - }, - "crazy_egg": { - "name": "Crazy Egg", - "categoryId": 6, - "url": "http://crazyegg.com/", - "companyId": "crazy_egg" - }, - "creafi": { - "name": "Creafi", - "categoryId": 4, - "url": "http://www.creafi.com/en/home/", - "companyId": "crazy4media" - }, - "createjs": { - "name": "CreateJS", - "categoryId": 9, - "url": "https://createjs.com/", - "companyId": null - }, - "creative_commons": { - "name": "Creative Commons", - "categoryId": 8, - "url": "https://creativecommons.org/", - "companyId": "creative_commons_corp" - }, - "crimsonhexagon_com": { - "name": "Brandwatch", - "categoryId": 6, - "url": "https://www.brandwatch.com/", - "companyId": "brandwatch" - }, - "crimtan": { - "name": "Crimtan", - "categoryId": 4, - "url": "http://www.crimtan.com/", - "companyId": "crimtan" - }, - "crisp": { - "name": "Crisp", - "categoryId": 2, - "url": "https://crisp.chat/", - "companyId": "crisp" - }, - "criteo": { - "name": "Criteo", - "categoryId": 4, - "url": "http://www.criteo.com/", - "companyId": "criteo" - }, - "crm4d": { - "name": "CRM4D", - "categoryId": 6, - "url": "https://crm4d.com/", - "companyId": "crm4d" - }, - "crossengage": { - "name": "CrossEngage", - "categoryId": 6, - "url": "https://www.crossengage.io/", - "companyId": "crossengage" - }, - "crosspixel": { - "name": "Cross Pixel", - "categoryId": 4, - "url": "http://crosspixel.net/", - "companyId": "cross_pixel" - }, - "crosssell.info": { - "name": "econda Cross Sell", - "categoryId": 4, - "url": "https://www.econda.de/en/solutions/personalization/cross-sell/", - "companyId": "econda" - }, - "crossss": { - "name": "Crossss", - "categoryId": 4, - "url": "http://crossss.ru/", - "companyId": "crossss" - }, - "crowd_ignite": { - "name": "Crowd Ignite", - "categoryId": 4, - "url": "http://get.crowdignite.com/", - "companyId": "gorilla_nation_media" - }, - "crowd_science": { - "name": "Crowd Science", - "categoryId": 4, - "url": "http://www.crowdscience.com/", - "companyId": "crowd_science" - }, - "crowdprocess": { - "name": "CrowdProcess", - "categoryId": 2, - "url": "https://crowdprocess.com", - "companyId": "crowdprocess" - }, - "crowdynews": { - "name": "Crowdynews", - "categoryId": 7, - "url": "http://www.crowdynews.com/", - "companyId": "crowdynews" - }, - "crownpeak": { - "name": "Crownpeak", - "categoryId": 5, - "url": "https://www.crownpeak.com/", - "companyId": "crownpeak" - }, - "cryptoloot_miner": { - "name": "CryptoLoot Miner", - "categoryId": 4, - "url": "https://crypto-loot.com/", - "companyId": "cryptoloot" - }, - "ctnetwork": { - "name": "CTnetwork", - "categoryId": 4, - "url": "http://ctnetwork.hu/", - "companyId": "ctnetwork" - }, - "ctrlshift": { - "name": "CtrlShift", - "categoryId": 4, - "url": "http://www.adzcentral.com/", - "companyId": "ctrlshift" - }, - "cubed": { - "name": "Cubed", - "categoryId": 6, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "cuelinks": { - "name": "CueLinks", - "categoryId": 4, - "url": "http://www.cuelinks.com/", - "companyId": "cuelinks" - }, - "cup_interactive": { - "name": "Cup Interactive", - "categoryId": 4, - "url": "http://www.cupinteractive.com/", - "companyId": "cup_interactive" - }, - "curse.com": { - "name": "Curse", - "categoryId": 8, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "cursecdn.com": { - "name": "Curse CDN", - "categoryId": 9, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "customer.io": { - "name": "Customer.io", - "categoryId": 2, - "url": "http://www.customer.io/", - "companyId": "customer.io" - }, - "customerly": { - "name": "Customerly", - "categoryId": 2, - "url": "https://www.customerly.io/", - "companyId": "customerly" - }, - "cxense": { - "name": "cXense", - "categoryId": 4, - "url": "http://www.cxense.com/", - "companyId": "cxense" - }, - "cxo.name": { - "name": "Chip Analytics", - "categoryId": 6, - "url": "http://www.chip.de/", - "companyId": null - }, - "cyber_wing": { - "name": "Cyber Wing", - "categoryId": 4, - "url": "http://www.cyberwing.co.jp/", - "companyId": "cyberwing" - }, - "cybersource": { - "name": "CyberSource", - "categoryId": 6, - "url": "https://www.cybersource.com/en-gb.html", - "companyId": "visa" - }, - "cygnus": { - "name": "Cygnus", - "categoryId": 4, - "url": "http://www.cygnus.com/", - "companyId": "cygnus" - }, - "da-ads.com": { - "name": "da-ads.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dailymail.co.uk": { - "name": "Daily Mail", - "categoryId": 8, - "url": "http://www.dailymail.co.uk/home/index.html", - "companyId": "dmg_media" - }, - "dailymotion": { - "name": "Dailymotion", - "categoryId": 8, - "url": "https://vivendi.com/", - "companyId": "vivendi" - }, - "dailymotion_advertising": { - "name": "Dailymotion Advertising", - "categoryId": 4, - "url": "http://advertising.dailymotion.com/", - "companyId": "vivendi" - }, - "daisycon": { - "name": "Daisycon", - "categoryId": 4, - "url": "http://www.daisycon.com", - "companyId": "daisycon" - }, - "dantrack.net": { - "name": "DANtrack", - "categoryId": 4, - "url": "http://media.dantrack.net/privacy/", - "companyId": "dentsu_aegis_network" - }, - "darwin_marketing": { - "name": "Darwin Marketing", - "categoryId": 4, - "url": "http://www.darwinmarketing.com/", - "companyId": "darwin_marketing" - }, - "dashboard_ad": { - "name": "Dashboard Ad", - "categoryId": 4, - "url": "http://www.dashboardad.com/", - "companyId": "premium_access" - }, - "datacaciques.com": { - "name": "DataCaciques", - "categoryId": 6, - "url": "http://www.datacaciques.com/", - "companyId": null - }, - "datacoral": { - "name": "Datacoral", - "categoryId": 4, - "url": "https://datacoral.com/", - "companyId": "datacoral" - }, - "datacrushers": { - "name": "Datacrushers", - "categoryId": 6, - "url": "https://www.datacrushers.com/", - "companyId": "datacrushers" - }, - "datadome": { - "name": "DataDome", - "categoryId": 6, - "url": "https://datadome.co/", - "companyId": "datadome" - }, - "datalicious_datacollector": { - "name": "Datalicious DataCollector", - "categoryId": 6, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalicious_supertag": { - "name": "Datalicious SuperTag", - "categoryId": 5, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalogix": { - "name": "Datalogix", - "categoryId": 4, - "url": "https://www.oracle.com/corporate/acquisitions/datalogix/", - "companyId": "oracle" - }, - "datamind.ru": { - "name": "DataMind", - "categoryId": 4, - "url": "http://datamind.ru/", - "companyId": "datamind" - }, - "datatables": { - "name": "DataTables", - "categoryId": 2, - "url": "https://datatables.net/", - "companyId": null - }, - "datawrkz": { - "name": "Datawrkz", - "categoryId": 4, - "url": "http://datawrkz.com/", - "companyId": "datawrkz" - }, - "dataxpand": { - "name": "Dataxpand", - "categoryId": 4, - "url": "http://dataxpand.com/", - "companyId": "dataxpand" - }, - "dataxu": { - "name": "DataXu", - "categoryId": 4, - "url": "http://www.dataxu.com/", - "companyId": "dataxu" - }, - "datds.net": { - "name": "datds.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "datonics": { - "name": "Datonics", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "datran": { - "name": "Pulsepoint", - "categoryId": 4, - "url": "https://www.pulsepoint.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "davebestdeals.com": { - "name": "davebestdeals.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dawandastatic.com": { - "name": "Dawanda CDN", - "categoryId": 8, - "url": "https://dawanda.com/", - "companyId": null - }, - "dc_stormiq": { - "name": "DC StormIQ", - "categoryId": 4, - "url": "http://www.dc-storm.com/", - "companyId": "dc_storm" - }, - "dcbap.com": { - "name": "dcbap.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dcmn.com": { - "name": "DCMN", - "categoryId": 4, - "url": "https://www.dcmn.com/", - "companyId": null - }, - "de_persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.nl", - "companyId": "de_persgroep" - }, - "deadline_funnel": { - "name": "Deadline Funnel", - "categoryId": 6, - "url": "https://deadlinefunnel.com/", - "companyId": "deadline_funnel" - }, - "dealer.com": { - "name": "Dealer.com", - "categoryId": 6, - "url": "http://www.dealer.com/", - "companyId": "dealer.com" - }, - "decibel_insight": { - "name": "Decibel Insight", - "categoryId": 6, - "url": "https://www.decibelinsight.com/", - "companyId": "decibel_insight" - }, - "dedicated_media": { - "name": "Dedicated Media", - "categoryId": 4, - "url": "http://www.dedicatedmedia.com/", - "companyId": "dedicated_media" - }, - "deep.bi": { - "name": "Deep.BI", - "categoryId": 6, - "url": "http://www.deep.bi/#", - "companyId": "deep.bi" - }, - "deepintent.com": { - "name": "DeepIntent", - "categoryId": 4, - "url": "https://www.deepintent.com/", - "companyId": "deep_intent" - }, - "defpush.com": { - "name": "defpush.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "deichmann.com": { - "name": "deichmann.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "delacon": { - "name": "Delacon", - "categoryId": 6, - "url": "http://www.delacon.com.au/", - "companyId": "delacon" - }, - "delivr": { - "name": "Delivr", - "categoryId": 6, - "url": "http://www.percentmobile.com/", - "companyId": "delivr" - }, - "delta_projects": { - "name": "Delta Projects", - "categoryId": 4, - "url": "http://www.adaction.se/", - "companyId": "delta_projects" - }, - "deluxe": { - "name": "Deluxe", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "delve_networks": { - "name": "Delve Networks", - "categoryId": 7, - "url": "http://www.delvenetworks.com/", - "companyId": "limelight_networks" - }, - "demandbase": { - "name": "Demandbase", - "categoryId": 4, - "url": "http://www.demandbase.com/", - "companyId": "demandbase" - }, - "demandmedia": { - "name": "DemandMedia", - "categoryId": 4, - "url": "http://www.demandmedia.com", - "companyId": "leaf_group" - }, - "deqwas": { - "name": "Deqwas", - "categoryId": 6, - "url": "http://www.deqwas.com/", - "companyId": "deqwas" - }, - "devatics": { - "name": "Devatics", - "categoryId": 2, - "url": "http://www.devatics.co.uk/", - "companyId": "devatics" - }, - "developer_media": { - "name": "Developer Media", - "categoryId": 4, - "url": "http://www.developermedia.com/", - "companyId": "developer_media" - }, - "deviantart.net": { - "name": "deviantart.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dex_platform": { - "name": "DEX Platform", - "categoryId": 4, - "url": "http://blueadvertise.com/", - "companyId": "dex_platform" - }, - "dgm": { - "name": "dgm", - "categoryId": 4, - "url": "http://www.dgm-au.com/", - "companyId": "apd" - }, - "dialogtech": { - "name": "Dialogtech", - "categoryId": 6, - "url": "https://www.dialogtech.com/", - "companyId": "dialogtech" - }, - "dianomi": { - "name": "Dianomi", - "categoryId": 4, - "url": "http://www.dianomi.com/cms/", - "companyId": "dianomi" - }, - "didit_blizzard": { - "name": "Didit Blizzard", - "categoryId": 4, - "url": "http://www.didit.com/blizzard", - "companyId": "didit" - }, - "didit_maestro": { - "name": "Didit Maestro", - "categoryId": 4, - "url": "http://www.didit.com/maestro", - "companyId": "didit" - }, - "didomi": { - "name": "Didomi", - "categoryId": 5, - "url": "https://www.didomi.io/en/", - "companyId": "didomi" - }, - "digg_widget": { - "name": "Digg Widget", - "categoryId": 2, - "url": "http://digg.com/apple/Digg_Widget", - "companyId": "buysellads.com" - }, - "digicert_trust_seal": { - "name": "Digicert Trust Seal", - "categoryId": 5, - "url": "http://www.digicert.com/", - "companyId": "digicert" - }, - "digidip": { - "name": "Digidip", - "categoryId": 4, - "url": "http://www.digidip.net/", - "companyId": "digidip" - }, - "digiglitz": { - "name": "Digiglitz", - "categoryId": 6, - "url": "http://www.digiglitz.com/", - "companyId": "digiglitz" - }, - "digilant": { - "name": "Digilant", - "categoryId": 4, - "url": "https://www.digilant.com/", - "companyId": "digilant" - }, - "digioh": { - "name": "Digioh", - "categoryId": 4, - "url": "https://digioh.com/", - "companyId": "digioh", - "source": "AdGuard" - }, - "digital.gov": { - "name": "Digital.gov", - "categoryId": 6, - "url": "https://digital.gov/", - "companyId": "us_government" - }, - "digital_control_room": { - "name": "Digital Control Room", - "categoryId": 5, - "url": "http://www.cookiereports.com/", - "companyId": "digital_control_room" - }, - "digital_nomads": { - "name": "Digital Nomads", - "categoryId": 4, - "url": "http://dnomads.net/", - "companyId": null - }, - "digital_remedy": { - "name": "Digital Remedy", - "categoryId": 4, - "url": "https://www.digitalremedy.com/", - "companyId": "digital_remedy" - }, - "digital_river": { - "name": "Digital River", - "categoryId": 4, - "url": "http://corporate.digitalriver.com", - "companyId": "digital_river" - }, - "digital_window": { - "name": "Digital Window", - "categoryId": 4, - "url": "http://www.digitalwindow.com/", - "companyId": "axel_springer" - }, - "digiteka": { - "name": "Digiteka", - "categoryId": 4, - "url": "http://digiteka.com/", - "companyId": "digiteka" - }, - "digitrust": { - "name": "DigiTrust", - "categoryId": 4, - "url": "http://www.digitru.st/", - "companyId": "iab" - }, - "dihitt_badge": { - "name": "diHITT Badge", - "categoryId": 7, - "url": "http://www.dihitt.com.br/", - "companyId": "dihitt" - }, - "dimml": { - "name": "DimML", - "categoryId": 8, - "url": null, - "companyId": null - }, - "direct_keyword_link": { - "name": "Direct Keyword Link", - "categoryId": 4, - "url": "http://www.keywordsconnect.com/", - "companyId": "direct_keyword_link" - }, - "directadvert": { - "name": "Direct/ADVERT", - "categoryId": 4, - "url": "http://www.directadvert.ru/", - "companyId": "directadvert" - }, - "directrev": { - "name": "DirectREV", - "categoryId": 4, - "url": "http://www.directrev.com/", - "companyId": "directrev" - }, - "discord": { - "name": "Discord", - "categoryId": 2, - "url": "https://discordapp.com/", - "companyId": null - }, - "disneyplus": { - "name": "Disney+", - "categoryId": 0, - "url": "https://www.disneyplus.com/", - "companyId": "disney", - "source": "AdGuard" - }, - "disneystreaming": { - "name": "Disney Streaming", - "categoryId": 0, - "url": "https://press.disneyplus.com", - "companyId": "disney", - "source": "AdGuard" - }, - "display_block": { - "name": "display block", - "categoryId": 4, - "url": "https://www.displayblock.com/", - "companyId": "display_block" - }, - "disqus": { - "name": "Disqus", - "categoryId": 1, - "url": "https://disqus.com/", - "companyId": "zeta" - }, - "disqus_ads": { - "name": "Disqus Ads", - "categoryId": 4, - "url": "https://disqusads.com/", - "companyId": "zeta" - }, - "distil_tag": { - "name": "Distil Networks", - "categoryId": 5, - "url": "https://www.distilnetworks.com/", - "companyId": "distil_networks" - }, - "districtm.io": { - "name": "district m", - "categoryId": 4, - "url": "https://districtm.net/", - "companyId": "district_m" - }, - "distroscale": { - "name": "Distroscale", - "categoryId": 6, - "url": "http://www.distroscale.com/", - "companyId": "distroscale" - }, - "div.show": { - "name": "div.show", - "categoryId": 12, - "url": null, - "companyId": null - }, - "diva": { - "name": "DiVa", - "categoryId": 6, - "url": "http://www.vertriebsassistent.de/", - "companyId": "diva" - }, - "divvit": { - "name": "Divvit", - "categoryId": 6, - "url": "https://www.divvit.com/", - "companyId": "divvit" - }, - "dm2": { - "name": "DM2", - "categoryId": 4, - "url": "http://digitalmediamanagement.com/", - "companyId": "digital_media_management" - }, - "dmg_media": { - "name": "DMG Media", - "categoryId": 8, - "url": "https://www.dmgmedia.co.uk/", - "companyId": "dmgt" - }, - "dmm": { - "name": "DMM", - "categoryId": 3, - "url": "http://www.dmm.co.jp", - "companyId": "dmm.r18" - }, - "dmwd": { - "name": "DMWD", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dockvine": { - "name": "dockvine", - "categoryId": 2, - "url": "https://www.dockvine.com", - "companyId": "dockvine" - }, - "docler": { - "name": "Docler", - "categoryId": 0, - "url": "https://www.doclerholding.com/en/about/companies/33/", - "companyId": "docler_ip" - }, - "dogannet": { - "name": "Dogannet", - "categoryId": 4, - "url": "http://s.dogannet.tv/", - "companyId": "dogannet" - }, - "domainglass": { - "name": "Domain Glass", - "categoryId": 8, - "url": "https://domain.glass/", - "companyId": "domainglass", - "source": "AdGuard" - }, - "domodomain": { - "name": "DomoDomain", - "categoryId": 6, - "url": "http://www.domodomain.com/", - "companyId": "intelligencefocus" - }, - "donationtools": { - "name": "iRobinHood", - "categoryId": 12, - "url": "http://www.irobinhood.org", - "companyId": null - }, - "doofinder.com": { - "name": "doofinder", - "categoryId": 2, - "url": "https://www.doofinder.com/", - "companyId": null - }, - "doorbell.io": { - "name": "Doorbell.io", - "categoryId": 5, - "url": "https://doorbell.io/", - "companyId": "doorbell.io" - }, - "dotandmedia": { - "name": "DotAndMedia", - "categoryId": 4, - "url": "http://www.dotandmedia.com", - "companyId": "dotandmedia" - }, - "dotmailer": { - "name": "dotMailer", - "categoryId": 2, - "url": "http://www.dotdigitalgroup.com/", - "companyId": "dotdigital_group" - }, - "dotmetrics.net": { - "name": "Dotmetrics", - "categoryId": 6, - "url": "https://dotmetrics.net/", - "companyId": null - }, - "dotomi": { - "name": "Dotomi", - "categoryId": 4, - "url": "http://www.dotomi.com/", - "companyId": "conversant" - }, - "double.net": { - "name": "Double.net", - "categoryId": 4, - "url": "http://double.net/en/", - "companyId": "double.net" - }, - "doubleclick": { - "name": "DoubleClick", - "categoryId": 4, - "url": "http://www.doubleclick.com", - "companyId": "google" - }, - "doubleclick_ad_buyer": { - "name": "DoubleClick Ad Exchange-Buyer", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doubleclick_bid_manager": { - "name": "DoubleClick Bid Manager", - "categoryId": 4, - "url": "http://www.invitemedia.com", - "companyId": "google" - }, - "doubleclick_floodlight": { - "name": "DoubleClick Floodlight", - "categoryId": 4, - "url": "http://www.google.com/support/dfa/partner/bin/topic.py?topic=23943", - "companyId": "google" - }, - "doubleclick_spotlight": { - "name": "DoubleClick Spotlight", - "categoryId": 4, - "url": "http://www.doubleclick.com/products/richmedia", - "companyId": "google" - }, - "doubleclick_video_stats": { - "name": "Doubleclick Video Stats", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doublepimp": { - "name": "DoublePimp", - "categoryId": 3, - "url": "http://www.doublepimp.com/", - "companyId": "doublepimp" - }, - "doubleverify": { - "name": "DoubleVerify", - "categoryId": 4, - "url": "http://www.doubleverify.com/", - "companyId": "doubleverify" - }, - "dratio": { - "name": "Dratio", - "categoryId": 6, - "url": "http://www.dratio.com/", - "companyId": "dratio" - }, - "drawbridge": { - "name": "Drawbridge", - "categoryId": 4, - "url": "http://www.drawbrid.ge/", - "companyId": "drawbridge" - }, - "dreame_tech": { - "name": "Dreame Technology", - "categoryId": 8, - "url": "https://www.dreame.tech/", - "companyId": "xiaomi", - "source": "AdGuard" - }, - "dreamlab.pl": { - "name": "DreamLab.pl", - "categoryId": 4, - "url": "https://www.dreamlab.pl/", - "companyId": "onet.pl" - }, - "drift": { - "name": "Drift", - "categoryId": 2, - "url": "https://www.drift.com/", - "companyId": "drift" - }, - "drip": { - "name": "Drip", - "categoryId": 2, - "url": "https://www.getdrip.com", - "companyId": "drip" - }, - "dropbox.com": { - "name": "Dropbox", - "categoryId": 2, - "url": "https://www.dropbox.com/", - "companyId": null - }, - "dsnr_media_group": { - "name": "DSNR Media Group", - "categoryId": 4, - "url": "http://www.dsnrmg.com/", - "companyId": "dsnr_media_group" - }, - "dsp_rambler": { - "name": "Rambler DSP", - "categoryId": 4, - "url": "http://dsp.rambler.ru/", - "companyId": "rambler" - }, - "dstillery": { - "name": "Dstillery", - "categoryId": 4, - "url": "https://dstillery.com/", - "companyId": "dstillery" - }, - "dtscout.com": { - "name": "DTScout", - "categoryId": 4, - "url": "http://www.dtscout.com/", - "companyId": "dtscout" - }, - "dudamobile": { - "name": "DudaMobile", - "categoryId": 4, - "url": "https://www.dudamobile.com/", - "companyId": "dudamobile" - }, - "dun_and_bradstreet": { - "name": "Dun and Bradstreet", - "categoryId": 6, - "url": "http://www.dnb.com/#", - "companyId": "dun_&_bradstreet" - }, - "dwstat.cn": { - "name": "dwstat.cn", - "categoryId": 6, - "url": "http://www.dwstat.cn/", - "companyId": "dwstat" - }, - "dynad": { - "name": "DynAd", - "categoryId": 4, - "url": "http://dynad.net/", - "companyId": "dynad" - }, - "dynadmic": { - "name": "DynAdmic", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dynamic_1001_gmbh": { - "name": "Dynamic 1001 GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dynamic_logic": { - "name": "Dynamic Logic", - "categoryId": 4, - "url": "http://www.dynamiclogic.com/", - "companyId": "millward_brown" - }, - "dynamic_yield": { - "name": "Dynamic Yield", - "categoryId": 5, - "url": "https://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynamic_yield_analytics": { - "name": "Dynamic Yield Analytics", - "categoryId": 6, - "url": "http://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynata": { - "name": "Dynata", - "categoryId": 4, - "url": "http://hottraffic.nl/en", - "companyId": "dynata" - }, - "dynatrace.com": { - "name": "Dynatrace", - "categoryId": 6, - "url": "https://www.dynatrace.com/", - "companyId": "thoma_bravo" - }, - "dyncdn.me": { - "name": "dyncdn.me", - "categoryId": 11, - "url": null, - "companyId": null - }, - "e-planning": { - "name": "e-planning", - "categoryId": 4, - "url": "http://www.e-planning.net/", - "companyId": "e-planning" - }, - "eadv": { - "name": "eADV", - "categoryId": 4, - "url": "http://eadv.it/", - "companyId": "eadv" - }, - "eanalyzer.de": { - "name": "eanalyzer.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "early_birds": { - "name": "Early Birds", - "categoryId": 4, - "url": "http://www.early-birds.fr/", - "companyId": "early_birds" - }, - "earnify": { - "name": "Earnify", - "categoryId": 4, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "earnify_tracker": { - "name": "Earnify Tracker", - "categoryId": 6, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "easyads": { - "name": "EasyAds", - "categoryId": 4, - "url": "https://easyads.bg/", - "companyId": "easyads" - }, - "easylist_club": { - "name": "easylist.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ebay": { - "name": "eBay Stats", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "ebay_korea": { - "name": "eBay Korea", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "ebay_partner_network": { - "name": "eBay Partner Network", - "categoryId": 4, - "url": "https://www.ebaypartnernetwork.com/files/hub/en-US/index.html", - "companyId": "ebay_partner_network" - }, - "ebuzzing": { - "name": "eBuzzing", - "categoryId": 4, - "url": "http://www.ebuzzing.com/", - "companyId": "ebuzzing" - }, - "echo": { - "name": "Echo", - "categoryId": 4, - "url": "http://js-kit.com/", - "companyId": "echo" - }, - "eclick": { - "name": "eClick", - "categoryId": 4, - "url": "http://eclick.vn", - "companyId": "eclick" - }, - "econda": { - "name": "Econda", - "categoryId": 6, - "url": "http://www.econda.de/", - "companyId": "econda" - }, - "ecotag": { - "name": "ecotag", - "categoryId": 4, - "url": "http://www.eco-tag.jp/", - "companyId": "ecotag" - }, - "edgio": { - "name": "Edgio", - "categoryId": 9, - "url": "https://edg.io/", - "companyId": "edgio", - "source": "AdGuard" - }, - "edigitalresearch": { - "name": "eDigitalResearch", - "categoryId": 4, - "url": "http://www.edigitalresearch.com/", - "companyId": "edigitalresearch" - }, - "effective_measure": { - "name": "Effective Measure", - "categoryId": 4, - "url": "http://www.effectivemeasure.com/", - "companyId": "effective_measure" - }, - "effiliation": { - "name": "Effiliation", - "categoryId": 4, - "url": "http://www.effiliation.com/", - "companyId": "effiliation" - }, - "egain": { - "name": "eGain", - "categoryId": 2, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "egain_analytics": { - "name": "eGain Analytics", - "categoryId": 6, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "ehi-siegel_de": { - "name": "ehi-siegel.de", - "categoryId": 2, - "url": "http://ehi-siegel.de/", - "companyId": null - }, - "ekmpinpoint": { - "name": "ekmPinPoint", - "categoryId": 6, - "url": "http://ekmpinpoint.com/", - "companyId": "ekmpinpoint" - }, - "ekomi": { - "name": "eKomi", - "categoryId": 1, - "url": "http://www.ekomi.co.uk", - "companyId": "ekomi" - }, - "elastic_ad": { - "name": "Elastic Ad", - "categoryId": 4, - "url": "http://www.elasticad.com", - "companyId": "elastic_ad" - }, - "elastic_beanstalk": { - "name": "Elastic Beanstalk", - "categoryId": 6, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "electronic_arts": { - "name": "Electronic Arts", - "categoryId": 2, - "url": "https://www.ea.com/", - "companyId": "electronic_arts", - "source": "AdGuard" - }, - "element": { - "name": "Element", - "categoryId": 7, - "url": "https://element.io/", - "companyId": "element", - "source": "AdGuard" - }, - "elicit": { - "name": "elicit", - "categoryId": 4, - "url": "http://www.elicitsearch.com/", - "companyId": "elicit" - }, - "eloqua": { - "name": "Eloqua", - "categoryId": 4, - "url": "http://www.eloqua.com/", - "companyId": "oracle" - }, - "eluxer_net": { - "name": "eluxer.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "email_aptitude": { - "name": "Email Aptitude", - "categoryId": 4, - "url": "http://www.emailaptitude.com/", - "companyId": "email_aptitude" - }, - "email_attitude": { - "name": "Email Attitude", - "categoryId": 4, - "url": "http://us.email-attitude.com/Default.aspx", - "companyId": "1000mercis" - }, - "emarketeer": { - "name": "emarketeer", - "categoryId": 4, - "url": "http://www.emarketeer.com/", - "companyId": "emarketeer" - }, - "embed.ly": { - "name": "Embedly", - "categoryId": 6, - "url": "http://embed.ly/", - "companyId": "medium" - }, - "emediate": { - "name": "Emediate", - "categoryId": 4, - "url": "http://www.emediate.biz/", - "companyId": "cxense" - }, - "emetriq": { - "name": "emetriq", - "categoryId": 4, - "url": "http://www.emetriq.com", - "companyId": "emetriq" - }, - "emma": { - "name": "Emma", - "categoryId": 4, - "url": "http://myemma.com/", - "companyId": "emma" - }, - "emnet": { - "name": "eMnet", - "categoryId": 4, - "url": "http://www.emnet.co.kr", - "companyId": "emnet" - }, - "empathy": { - "name": "Empathy", - "categoryId": 4, - "url": "http://www.colbenson.com", - "companyId": "empathy" - }, - "emsmobile.de": { - "name": "EMS Mobile", - "categoryId": 8, - "url": "http://www.emsmobile.com/", - "companyId": null - }, - "encore_metrics": { - "name": "Encore Metrics", - "categoryId": 4, - "url": "http://sitecompass.com", - "companyId": "flashtalking" - }, - "enecto_analytics": { - "name": "Enecto Analytics", - "categoryId": 6, - "url": "http://www.enecto.com/en/", - "companyId": "enecto" - }, - "engage_sciences": { - "name": "Engage Sciences", - "categoryId": 6, - "url": "http://www.engagesciences.com/", - "companyId": "engagesciences" - }, - "engageya_widget": { - "name": "Engageya Widget", - "categoryId": 4, - "url": "http://www.engageya.com/home/", - "companyId": "engageya" - }, - "engagio": { - "name": "Engagio", - "categoryId": 6, - "url": "https://www.engagio.com/", - "companyId": "engagio" - }, - "engineseeker": { - "name": "EngineSeeker", - "categoryId": 4, - "url": "http://www.engineseeker.com/", - "companyId": "engineseeker" - }, - "enquisite": { - "name": "Enquisite", - "categoryId": 4, - "url": "http://www.enquisite.com/", - "companyId": "inboundwriter" - }, - "enreach": { - "name": "Enreach", - "categoryId": 4, - "url": "https://enreach.me/", - "companyId": "enreach" - }, - "ensemble": { - "name": "Ensemble", - "categoryId": 4, - "url": "http://www.tumri.com", - "companyId": "ensemble" - }, - "ensighten": { - "name": "Ensighten", - "categoryId": 5, - "url": "http://www.ensighten.com", - "companyId": "ensighten" - }, - "envolve": { - "name": "Envolve", - "categoryId": 2, - "url": "https://www.envolve.com/", - "companyId": "envolve" - }, - "envybox": { - "name": "Envybox", - "categoryId": 2, - "url": "https://envybox.io/", - "companyId": "envybox" - }, - "eperflex": { - "name": "Eperflex", - "categoryId": 4, - "url": "https://eperflex.com/", - "companyId": "ividence" - }, - "epic_game_ads": { - "name": "Epic Game Ads", - "categoryId": 4, - "url": "http://www.epicgameads.com/", - "companyId": "epic_game_ads" - }, - "epic_marketplace": { - "name": "Epic Marketplace", - "categoryId": 4, - "url": "http://www.trafficmarketplace.com/", - "companyId": "epic_advertising" - }, - "epom": { - "name": "Epom", - "categoryId": 4, - "url": "http://epom.com/", - "companyId": "epom" - }, - "epoq": { - "name": "epoq", - "categoryId": 2, - "url": "http://www.epoq.de/", - "companyId": "epoq" - }, - "eprice": { - "name": "ePrice", - "categoryId": 4, - "url": "http://banzaiadv.it/", - "companyId": "eprice" - }, - "eproof": { - "name": "eProof", - "categoryId": 6, - "url": "http://www.eproof.com/", - "companyId": "eproof" - }, - "eqs_group": { - "name": "EQS Group", - "categoryId": 6, - "url": "https://www.eqs.com/", - "companyId": "eqs_group" - }, - "eqworks": { - "name": "EQWorks", - "categoryId": 4, - "url": "http://eqads.com", - "companyId": "eq_works" - }, - "eroadvertising": { - "name": "EroAdvertising", - "categoryId": 3, - "url": "http://www.ero-advertising.com/", - "companyId": "ero_advertising" - }, - "errorception": { - "name": "Errorception", - "categoryId": 6, - "url": "http://errorception.com/", - "companyId": "errorception" - }, - "eshopcomp.com": { - "name": "eshopcomp.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "espn_cdn": { - "name": "ESPN CDN", - "categoryId": 9, - "url": "http://www.espn.com/", - "companyId": "disney" - }, - "esprit.de": { - "name": "esprit.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "estat": { - "name": "eStat", - "categoryId": 6, - "url": "http://www.mediametrie-estat.com/", - "companyId": "mediametrie" - }, - "etag": { - "name": "etag", - "categoryId": 4, - "url": "http://etagdigital.com.br/", - "companyId": "etag" - }, - "etahub.com": { - "name": "etahub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "etarget": { - "name": "Etarget", - "categoryId": 4, - "url": "http://etargetnet.com/", - "companyId": "etarget" - }, - "ethnio": { - "name": "Ethnio", - "categoryId": 4, - "url": "http://ethn.io/", - "companyId": "ethnio" - }, - "etology": { - "name": "Etology", - "categoryId": 4, - "url": "http://www.etology.com", - "companyId": "etology" - }, - "etp": { - "name": "ETP", - "categoryId": 6, - "url": "https://www.etpgroup.com", - "companyId": "etp" - }, - "etracker": { - "name": "etracker", - "categoryId": 6, - "url": "http://www.etracker.com/en/", - "companyId": "etracker_gmbh" - }, - "etrigue": { - "name": "eTrigue", - "categoryId": 4, - "url": "http://www.etrigue.com/", - "companyId": "etrigue" - }, - "etsystatic": { - "name": "Etsy CDN", - "categoryId": 9, - "url": "https://www.etsy.com/", - "companyId": "etsy" - }, - "eulerian": { - "name": "Eulerian", - "categoryId": 6, - "url": "https://www.eulerian.com/", - "companyId": "eulerian" - }, - "euroads": { - "name": "Euroads", - "categoryId": 4, - "url": "http://euroads.com/en/", - "companyId": "euroads" - }, - "europecash": { - "name": "Europecash", - "categoryId": 4, - "url": "https://www.europacash.com/", - "companyId": "europacash" - }, - "euroweb_counter": { - "name": "Euroweb Counter", - "categoryId": 4, - "url": "http://www.euroweb.de/", - "companyId": "euroweb" - }, - "evergage.com": { - "name": "Evergage", - "categoryId": 2, - "url": "https://www.evergage.com", - "companyId": "evergage" - }, - "everstring": { - "name": "Everstring", - "categoryId": 6, - "url": "http://www.everstring.com/", - "companyId": "everstring" - }, - "everyday_health": { - "name": "Everyday Health", - "categoryId": 7, - "url": "http://www.everydayhealth.com/", - "companyId": "everyday_health" - }, - "evidon": { - "name": "Evidon", - "categoryId": 5, - "url": "https://www.evidon.com/", - "companyId": "crownpeak" - }, - "evisit_analyst": { - "name": "eVisit Analyst", - "categoryId": 4, - "url": "http://www.evisitanalyst.com", - "companyId": "evisit_analyst" - }, - "exact_drive": { - "name": "Exact Drive", - "categoryId": 4, - "url": "http://www.exactdrive.com/", - "companyId": "exact_drive" - }, - "exactag": { - "name": "Exactag", - "categoryId": 6, - "url": "http://www.exactag.com", - "companyId": "exactag" - }, - "exelate": { - "name": "eXelate", - "categoryId": 4, - "url": "http://www.exelate.com/", - "companyId": "nielsen" - }, - "exitjunction": { - "name": "ExitJunction", - "categoryId": 4, - "url": "https://secure.exitjunction.com", - "companyId": "exitjunction" - }, - "exoclick": { - "name": "ExoClick", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "exoticads.com": { - "name": "exoticads", - "categoryId": 3, - "url": "https://exoticads.com/welcome/", - "companyId": null - }, - "expedia": { - "name": "Expedia", - "categoryId": 8, - "url": "https://www.trvl-px.com/", - "companyId": "iac_apps" - }, - "experian": { - "name": "Experian", - "categoryId": 8, - "url": "https://www.experian.com/", - "companyId": "experian_inc" - }, - "experian_marketing_services": { - "name": "Experian Marketing Services", - "categoryId": 4, - "url": "http://www.experian.com/", - "companyId": "experian_inc" - }, - "expo-max": { - "name": "expo-MAX", - "categoryId": 4, - "url": "http://expo-max.com/", - "companyId": "expo-max" - }, - "expose_box": { - "name": "Expose Box", - "categoryId": 4, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "expose_box_widgets": { - "name": "Expose Box Widgets", - "categoryId": 2, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "express.co.uk": { - "name": "express.co.uk", - "categoryId": 8, - "url": "https://www.express.co.uk/", - "companyId": null - }, - "expressvpn": { - "name": "ExpressVPN", - "categoryId": 2, - "url": "https://www.expressvpn.com/", - "companyId": "expressvpn" - }, - "extreme_tracker": { - "name": "eXTReMe Tracker", - "categoryId": 6, - "url": "http://www.extremetracking.com/", - "companyId": "extreme_digital" - }, - "eye_newton": { - "name": "Eye Newton", - "categoryId": 2, - "url": "http://eyenewton.ru/", - "companyId": "eyenewton" - }, - "eyeota": { - "name": "Eyeota", - "categoryId": 4, - "url": "http://www.eyeota.com/", - "companyId": "eyeota" - }, - "eyereturnmarketing": { - "name": "Eyereturn Marketing", - "categoryId": 4, - "url": "https://eyereturnmarketing.com/", - "companyId": "torstar_corp" - }, - "eyeview": { - "name": "Eyeview", - "categoryId": 4, - "url": "http://www.eyeviewdigital.com/", - "companyId": "eyeview" - }, - "ezakus": { - "name": "Ezakus", - "categoryId": 4, - "url": "http://www.ezakus.com/", - "companyId": "np6" - }, - "f11-ads.com": { - "name": "Factor Eleven", - "categoryId": 4, - "url": null, - "companyId": null - }, - "facebook": { - "name": "Facebook", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_audience": { - "name": "Facebook Audience Network", - "categoryId": 4, - "url": "https://www.facebook.com/business/products/audience-network", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_beacon": { - "name": "Facebook Beacon", - "categoryId": 7, - "url": "http://www.facebook.com/beacon/faq.php", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_cdn": { - "name": "Facebook CDN", - "categoryId": 9, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_connect": { - "name": "Facebook Connect", - "categoryId": 6, - "url": "https://developers.facebook.com/connect.php", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_conversion_tracking": { - "name": "Facebook Conversion Tracking", - "categoryId": 4, - "url": "http://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_custom_audience": { - "name": "Facebook Custom Audience", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_graph": { - "name": "Facebook Social Graph", - "categoryId": 7, - "url": "https://developers.facebook.com/docs/reference/api/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_impressions": { - "name": "Facebook Impressions", - "categoryId": 4, - "url": "https://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_social_plugins": { - "name": "Facebook Social Plugins", - "categoryId": 7, - "url": "https://developers.facebook.com/plugins", - "companyId": "meta", - "source": "AdGuard" - }, - "facetz.dca": { - "name": "Facetz.DCA", - "categoryId": 4, - "url": "http://facetz.net", - "companyId": "dca" - }, - "facilitate_digital": { - "name": "Facilitate Digital", - "categoryId": 4, - "url": "http://www.facilitatedigital.com/", - "companyId": "adslot" - }, - "faktor.io": { - "name": "faktor.io", - "categoryId": 6, - "url": "https://faktor.io/", - "companyId": "faktor.io" - }, - "fancy_widget": { - "name": "Fancy Widget", - "categoryId": 7, - "url": "http://www.thefancy.com/", - "companyId": "fancy" - }, - "fanplayr": { - "name": "Fanplayr", - "categoryId": 4, - "url": "http://www.fanplayr.com/", - "companyId": "fanplayr" - }, - "fap.to": { - "name": "Imagefap", - "categoryId": 8, - "url": null, - "companyId": null - }, - "farlight_pte_ltd": { - "name": "Farlight Pte Ltd.", - "categoryId": 8, - "url": "https://farlightgames.com/", - "companyId": "farlight", - "source": "AdGuard" - }, - "fastly_insights": { - "name": "Fastly Insights", - "categoryId": 6, - "url": "https://insights.fastlylabs.com/", - "companyId": "fastly" - }, - "fastlylb.net": { - "name": "Fastly", - "categoryId": 9, - "url": "https://www.fastly.com/", - "companyId": "fastly" - }, - "fastpic.ru": { - "name": "FastPic", - "categoryId": 10, - "url": "http://fastpic.ru/", - "companyId": "fastpic" - }, - "federated_media": { - "name": "Federated Media", - "categoryId": 4, - "url": "http://www.federatedmedia.net/", - "companyId": "hyfn" - }, - "feedbackify": { - "name": "Feedbackify", - "categoryId": 2, - "url": "http://www.feedbackify.com/", - "companyId": "feedbackify" - }, - "feedburner.com": { - "name": "FeedBurner", - "categoryId": 4, - "url": "https://feedburner.com", - "companyId": "google" - }, - "feedify": { - "name": "Feedify", - "categoryId": 7, - "url": "http://feedify.de/", - "companyId": "feedify" - }, - "feedjit": { - "name": "Feedjit", - "categoryId": 4, - "url": "http://feedjit.com/", - "companyId": "feedjit" - }, - "feedperfect": { - "name": "FeedPerfect", - "categoryId": 4, - "url": "http://www.feedperfect.com/", - "companyId": "feedperfect" - }, - "feedsportal": { - "name": "Feedsportal", - "categoryId": 4, - "url": "http://www.mediafed.com/", - "companyId": "mediafed" - }, - "feefo": { - "name": "Feefo", - "categoryId": 2, - "url": "http://www.feefo.com/web/en/us/", - "companyId": "feefo" - }, - "fidelity_media": { - "name": "Fidelity Media", - "categoryId": 4, - "url": "http://fidelity-media.com/", - "companyId": "fidelity_media" - }, - "fiksu": { - "name": "Fiksu", - "categoryId": 4, - "url": "https://fiksu.com/", - "companyId": "noosphere" - }, - "filament.io": { - "name": "Filament.io", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "fileserve": { - "name": "FileServe", - "categoryId": 10, - "url": "http://fileserve.com/", - "companyId": "fileserve" - }, - "financeads": { - "name": "FinanceADs", - "categoryId": 4, - "url": "https://www.financeads.net/", - "companyId": "financeads_gmbh_&_co._kg" - }, - "financial_content": { - "name": "Financial Content", - "categoryId": 4, - "url": "http://www.financialcontent.com", - "companyId": "financial_content" - }, - "findizer.fr": { - "name": "Findizer", - "categoryId": 8, - "url": "http://www.findizer.fr/", - "companyId": null - }, - "findologic.com": { - "name": "Findologic", - "categoryId": 2, - "url": "https://www.findologic.com/", - "companyId": "findologic" - }, - "firebase": { - "name": "Firebase", - "categoryId": 101, - "url": "https://firebase.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "firebaseio.com": { - "name": "Firebase", - "categoryId": 8, - "url": "https://firebase.google.com/", - "companyId": "google" - }, - "first_impression": { - "name": "First Impression", - "categoryId": 4, - "url": "http://www.firstimpression.io", - "companyId": "first_impression" - }, - "fit_analytics": { - "name": "Fit Analytics", - "categoryId": 6, - "url": "http://www.fitanalytics.com/", - "companyId": "fit_analytics" - }, - "fivetran": { - "name": "Fivetran", - "categoryId": 6, - "url": "https://fivetran.com/", - "companyId": "fivetran" - }, - "flag_ads": { - "name": "Flag Ads", - "categoryId": 4, - "url": "http://www.flagads.net/", - "companyId": "flag_ads" - }, - "flag_counter": { - "name": "Flag Counter", - "categoryId": 4, - "url": "http://flagcounter.com/", - "companyId": "flag_counter" - }, - "flash": { - "name": "Flash", - "categoryId": 0, - "url": "https://flashnews.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "flashtalking": { - "name": "Flashtalking", - "categoryId": 4, - "url": "http://www.flashtalking.com/", - "companyId": "flashtalking" - }, - "flattr_button": { - "name": "Flattr Button", - "categoryId": 7, - "url": "http://flattr.com/", - "companyId": "flattr" - }, - "flexoffers": { - "name": "FlexOffers", - "categoryId": 4, - "url": "http://www.flexoffers.com/", - "companyId": "flexoffers.com" - }, - "flickr_badge": { - "name": "Flickr Badge", - "categoryId": 7, - "url": "http://www.flickr.com/", - "companyId": "smugmug" - }, - "flipboard": { - "name": "Flipboard", - "categoryId": 6, - "url": "http://www.flipboard.com/", - "companyId": "flipboard" - }, - "flite": { - "name": "Flite", - "categoryId": 4, - "url": "http://www.flite.com/", - "companyId": "flite" - }, - "flixcdn.com": { - "name": "flixcdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "flixmedia": { - "name": "Flixmedia", - "categoryId": 8, - "url": "https://flixmedia.eu", - "companyId": "flixmedia" - }, - "flocktory.com": { - "name": "Flocktory", - "categoryId": 6, - "url": "https://www.flocktory.com/", - "companyId": "flocktory" - }, - "flowplayer": { - "name": "Flowplayer", - "categoryId": 4, - "url": "https://flowplayer.org/", - "companyId": "flowplayer" - }, - "fluct": { - "name": "Fluct", - "categoryId": 4, - "url": "https://corp.fluct.jp/", - "companyId": "fluct" - }, - "fluent": { - "name": "Fluent", - "categoryId": 4, - "url": "http://www.fluentco.com/", - "companyId": "fluent" - }, - "fluid": { - "name": "Fluid", - "categoryId": 4, - "url": "http://www.8thbridge.com/", - "companyId": "fluid" - }, - "fluidads": { - "name": "FluidAds", - "categoryId": 4, - "url": "http://www.fluidads.co/", - "companyId": "fluidads" - }, - "fluidsurveys": { - "name": "FluidSurveys", - "categoryId": 2, - "url": "http://fluidsurveys.com/", - "companyId": "fluidware" - }, - "flurry": { - "name": "Flurry", - "categoryId": 101, - "url": "http://www.flurry.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "flxone": { - "name": "FLXONE", - "categoryId": 4, - "url": "http://www.flxone.com/", - "companyId": "flxone" - }, - "flyertown": { - "name": "Flyertown", - "categoryId": 6, - "url": "http://www.flyertown.ca/", - "companyId": "flyertown" - }, - "fmadserving": { - "name": "FMAdserving", - "categoryId": 4, - "url": "http://www.fmadserving.dk/", - "companyId": "fm_adserving" - }, - "fonbet": { - "name": "Fonbet", - "categoryId": 6, - "url": "https://www.fonbet.ru", - "companyId": "fonbet" - }, - "fonecta": { - "name": "Fonecta", - "categoryId": 2, - "url": "http://www.fonecta.com/", - "companyId": "fonecta" - }, - "fontawesome_com": { - "name": "fontawesome.com", - "categoryId": 9, - "url": "http://fontawesome.com/", - "companyId": null - }, - "foodie_blogroll": { - "name": "Foodie Blogroll", - "categoryId": 7, - "url": "http://www.foodieblogroll.com", - "companyId": "foodie_blogroll" - }, - "footprint": { - "name": "Footprint", - "categoryId": 4, - "url": "http://www.footprintlive.com/", - "companyId": "opentracker" - }, - "footprintdns.com": { - "name": "Footprint DNS", - "categoryId": 11, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "forcetrac": { - "name": "ForceTrac", - "categoryId": 2, - "url": "http://www.forcetrac.com/", - "companyId": "force_marketing" - }, - "forensiq": { - "name": "Forensiq", - "categoryId": 4, - "url": "http://www.cpadetective.com/", - "companyId": "impact" - }, - "foresee": { - "name": "ForeSee", - "categoryId": 5, - "url": "https://www.foresee.com/", - "companyId": "foresee_results" - }, - "formisimo": { - "name": "Formisimo", - "categoryId": 4, - "url": "https://www.formisimo.com/", - "companyId": "formisimo" - }, - "forter": { - "name": "Forter", - "categoryId": 4, - "url": "https://www.forter.com/", - "companyId": "forter" - }, - "fortlachanhecksof.info": { - "name": "fortlachanhecksof.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "foursquare_widget": { - "name": "Foursquare Widget", - "categoryId": 4, - "url": "https://foursquare.com/", - "companyId": "foursquare" - }, - "fout.jp": { - "name": "FreakOut", - "categoryId": 4, - "url": "https://www.fout.co.jp/", - "companyId": "freakout" - }, - "fox_audience_network": { - "name": "Fox Audience Network", - "categoryId": 4, - "url": "https://publishers.foxaudiencenetwork.com/", - "companyId": "fox_audience_network" - }, - "fox_sports": { - "name": "Fox Sports", - "categoryId": 0, - "url": "https://foxsports.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "foxnews_static": { - "name": "Fox News CDN", - "categoryId": 9, - "url": "http://www.foxnews.com/", - "companyId": "fox_news" - }, - "foxpush": { - "name": "FoxPush", - "categoryId": 4, - "url": "https://www.foxpush.com/", - "companyId": "foxpush" - }, - "foxtel": { - "name": "Foxtel", - "categoryId": 0, - "url": "https://foxtel.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "foxydeal_com": { - "name": "foxydeal.com", - "categoryId": 12, - "url": "https://www.foxydeal.de", - "companyId": null - }, - "fraudlogix": { - "name": "FraudLogix", - "categoryId": 4, - "url": "https://www.fraudlogix.com/", - "companyId": null - }, - "free_counter": { - "name": "Free Counter", - "categoryId": 6, - "url": "http://www.statcounterfree.com/", - "companyId": "free_counter" - }, - "free_online_users": { - "name": "Free Online Users", - "categoryId": 6, - "url": "http://www.freeonlineusers.com", - "companyId": "free_online_users" - }, - "free_pagerank": { - "name": "Free PageRank", - "categoryId": 6, - "url": "http://www.free-pagerank.com/", - "companyId": "free_pagerank" - }, - "freedom_mortgage": { - "name": "Freedom Mortgage", - "categoryId": 6, - "url": "https://www.freedommortgage.com/", - "companyId": "freedom_mortgage" - }, - "freegeoip_net": { - "name": "freegeoip.net", - "categoryId": 6, - "url": "http://freegeoip.net/", - "companyId": null - }, - "freenet_de": { - "name": "freenet.de", - "categoryId": 4, - "url": "http://freenet.de/", - "companyId": "debitel" - }, - "freeview": { - "name": "Freeview", - "categoryId": 0, - "url": "https://freeview.com.au/", - "companyId": "freeview", - "source": "AdGuard" - }, - "freewheel": { - "name": "FreeWheel", - "categoryId": 4, - "url": "http://www.freewheel.tv/", - "companyId": "comcast" - }, - "fresh8": { - "name": "Fresh8", - "categoryId": 6, - "url": "http://fresh8gaming.com/", - "companyId": "fresh_8_gaming" - }, - "freshdesk": { - "name": "Freshdesk", - "categoryId": 2, - "url": "http://www.freshdesk.com", - "companyId": "freshdesk" - }, - "freshplum": { - "name": "Freshplum", - "categoryId": 4, - "url": "https://freshplum.com/", - "companyId": "freshplum" - }, - "friendbuy": { - "name": "FriendBuy", - "categoryId": 6, - "url": "https://www.friendbuy.com", - "companyId": "friendbuy" - }, - "friendfeed": { - "name": "FriendFeed", - "categoryId": 7, - "url": "http://friendfeed.com/", - "companyId": "facebook" - }, - "friendfinder_network": { - "name": "FriendFinder Network", - "categoryId": 3, - "url": "http://www.ffn.com/", - "companyId": "friendfinder_networks" - }, - "frosmo_optimizer": { - "name": "Frosmo Optimizer", - "categoryId": 4, - "url": "http://frosmo.com/", - "companyId": "frosmo" - }, - "fruitflan": { - "name": "FruitFlan", - "categoryId": 4, - "url": "http://flan-tech.com/", - "companyId": "keytiles" - }, - "fstrk.net": { - "name": "24metrics Fraudshield", - "categoryId": 6, - "url": "https://24metrics.com/", - "companyId": "24metrics" - }, - "fuelx": { - "name": "FuelX", - "categoryId": 4, - "url": "http://fuelx.com/", - "companyId": "fuelx" - }, - "fullstory": { - "name": "FullStory", - "categoryId": 6, - "url": "http://fullstory.com", - "companyId": "fullstory" - }, - "funnelytics": { - "name": "Funnelytics", - "categoryId": 6, - "url": "https://funnelytics.io/", - "companyId": "funnelytics" - }, - "fyber": { - "name": "Fyber", - "categoryId": 4, - "url": "https://www.fyber.com/", - "companyId": "fyber" - }, - "ga_audiences": { - "name": "GA Audiences", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "game_advertising_online": { - "name": "Game Advertising Online", - "categoryId": 4, - "url": "http://www.game-advertising-online.com/", - "companyId": "game_advertising_online" - }, - "gameanalytics": { - "name": "GameAnalytics", - "categoryId": 101, - "url": "https://gameanalytics.com/", - "companyId": "mobvista", - "source": "AdGuard" - }, - "gamedistribution.com": { - "name": "Gamedistribution.com", - "categoryId": 8, - "url": "http://gamedistribution.com/", - "companyId": null - }, - "gamerdna": { - "name": "gamerDNA", - "categoryId": 7, - "url": "http://www.gamerdnamedia.com/", - "companyId": "gamerdna_media" - }, - "gannett": { - "name": "Gannett Media", - "categoryId": 0, - "url": "https://www.gannett.com/", - "companyId": "gannett_digital_media_network" - }, - "gaug.es": { - "name": "Gaug.es", - "categoryId": 6, - "url": "http://get.gaug.es/", - "companyId": "euroweb" - }, - "gazprom-media_digital": { - "name": "Gazprom-Media Digital", - "categoryId": 0, - "url": "http://www.gpm-digital.com/", - "companyId": "gazprom-media_digital" - }, - "gb-world": { - "name": "GB-World", - "categoryId": 7, - "url": "http://www.gb-world.net/", - "companyId": "gb-world" - }, - "gdeslon": { - "name": "GdeSlon", - "categoryId": 4, - "url": "http://www.gdeslon.ru/", - "companyId": "gdeslon" - }, - "gdm_digital": { - "name": "GDM Digital", - "categoryId": 4, - "url": "http://www.gdmdigital.com/", - "companyId": "ve_interactive" - }, - "geeen": { - "name": "Geeen", - "categoryId": 6, - "url": "https://www.geeen.co.jp/", - "companyId": "geeen" - }, - "gemius": { - "name": "Gemius", - "categoryId": 4, - "url": "http://www.gemius.com", - "companyId": "gemius_sa" - }, - "generaltracking_de": { - "name": "generaltracking.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "genesis": { - "name": "Genesis", - "categoryId": 4, - "url": "http://genesismedia.com/", - "companyId": "genesis_media" - }, - "geniee": { - "name": "GENIEE", - "categoryId": 4, - "url": "http://geniee.co.jp/", - "companyId": null - }, - "genius": { - "name": "Genius", - "categoryId": 6, - "url": "http://www.genius.com/", - "companyId": "genius" - }, - "genoo": { - "name": "Genoo", - "categoryId": 4, - "url": "http://www.genoo.com/", - "companyId": "genoo" - }, - "geoads": { - "name": "GeoAds", - "categoryId": 4, - "url": "http://www.geoads.com", - "companyId": "geoads" - }, - "geolify": { - "name": "Geolify", - "categoryId": 4, - "url": "http://geolify.com/", - "companyId": "geolify" - }, - "geoplugin": { - "name": "geoPlugin", - "categoryId": 6, - "url": "http://www.geoplugin.com/", - "companyId": "geoplugin" - }, - "geotrust": { - "name": "GeoTrust", - "categoryId": 5, - "url": "http://www.geotrust.com/", - "companyId": "symantec" - }, - "geovisite": { - "name": "Geovisite", - "categoryId": 6, - "url": "http://www.geovisite.com/", - "companyId": "geovisite" - }, - "gestionpub": { - "name": "GestionPub", - "categoryId": 4, - "url": "http://www.gestionpub.com/", - "companyId": "gestionpub" - }, - "get_response": { - "name": "Get Response", - "categoryId": 2, - "url": "https://www.getresponse.com/?marketing_gv=v2", - "companyId": "getresponse" - }, - "get_site_control": { - "name": "Get Site Control", - "categoryId": 4, - "url": "https://getsitecontrol.com/", - "companyId": "getsitecontrol" - }, - "getconversion": { - "name": "GetConversion", - "categoryId": 2, - "url": "http://www.getconversion.net/", - "companyId": "getconversion" - }, - "getglue": { - "name": "GetGlue", - "categoryId": 0, - "url": "http://getglue.com", - "companyId": "telfie" - }, - "getintent": { - "name": "GetIntent", - "categoryId": 4, - "url": "http://www.getintent.com/", - "companyId": "getintent" - }, - "getkudos": { - "name": "GetKudos", - "categoryId": 1, - "url": "https://www.getkudos.me/", - "companyId": "zendesk" - }, - "getmyad": { - "name": "GetMyAd", - "categoryId": 4, - "url": "http://yottos.com", - "companyId": "yottos" - }, - "getsatisfaction": { - "name": "GetSatisfaction", - "categoryId": 1, - "url": "http://getsatisfaction.com/", - "companyId": "get_satisfaction" - }, - "gettyimages": { - "name": "Getty Images", - "categoryId": 8, - "url": "https://www.gettyimages.com/", - "companyId": null - }, - "gfk": { - "name": "GfK", - "categoryId": 4, - "url": "http://nurago.com/", - "companyId": "gfk_nurago" - }, - "gfycat.com": { - "name": "gfycat", - "categoryId": 7, - "url": "https://gfycat.com/", - "companyId": null - }, - "giant_realm": { - "name": "Giant Realm", - "categoryId": 4, - "url": "http://corp.giantrealm.com/", - "companyId": "giant_realm" - }, - "giantmedia": { - "name": "GiantMedia", - "categoryId": 4, - "url": "http://giantmedia.com/", - "companyId": "adknowledge" - }, - "giga": { - "name": "Giga", - "categoryId": 4, - "url": "https://gigaonclick.com", - "companyId": "giga" - }, - "gigya": { - "name": "Gigya", - "categoryId": 6, - "url": "https://www.sap.com/index.html", - "companyId": "sap" - }, - "gigya_beacon": { - "name": "Gigya Beacon", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_socialize": { - "name": "Gigya Socialize", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_toolbar": { - "name": "Gigya Toolbar", - "categoryId": 2, - "url": "http://www.gigya.com/", - "companyId": "sap" - }, - "giosg": { - "name": "Giosg", - "categoryId": 6, - "url": "https://www.giosg.com/", - "companyId": "giosg" - }, - "giphy.com": { - "name": "Giphy", - "categoryId": 7, - "url": "https://giphy.com/", - "companyId": null - }, - "giraff.io": { - "name": "Giraff.io", - "categoryId": 4, - "url": "https://www.giraff.io/", - "companyId": null - }, - "github": { - "name": "GitHub, Inc.", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "github_apps": { - "name": "GitHub Apps", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "github" - }, - "github_pages": { - "name": "Github Pages", - "categoryId": 10, - "url": "https://pages.github.com/", - "companyId": "github" - }, - "gittigidiyor_affiliate_program": { - "name": "GittiGidiyor Affiliate Program", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "gittip": { - "name": "Gittip", - "categoryId": 2, - "url": "https://www.gittip.com/", - "companyId": "gittip" - }, - "glad_cube": { - "name": "Glad Cube", - "categoryId": 6, - "url": "http://www.glad-cube.com/", - "companyId": "glad_cube_inc." - }, - "glganltcs.space": { - "name": "glganltcs.space", - "categoryId": 12, - "url": null, - "companyId": null - }, - "global_web_index": { - "name": "GlobalWebIndex", - "categoryId": 6, - "url": "https://www.globalwebindex.com/", - "companyId": "global_web_index" - }, - "globalnotifier.com": { - "name": "globalnotifier.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "globalsign": { - "name": "GlobalSign", - "categoryId": 8, - "url": null, - "companyId": null - }, - "globaltakeoff": { - "name": "GlobalTakeoff", - "categoryId": 4, - "url": "http://www.globaltakeoff.net/", - "companyId": "globaltakeoff" - }, - "glomex.com": { - "name": "Glomex", - "categoryId": 0, - "url": "https://www.glomex.com/", - "companyId": "glomex" - }, - "glotgrx.com": { - "name": "glotgrx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "gm_delivery": { - "name": "GM Delivery", - "categoryId": 4, - "url": "http://a.gmdelivery.com/", - "companyId": "gm_delivery" - }, - "gmail": { - "name": "Gmail", - "categoryId": 13, - "url": "https://mail.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "gmo": { - "name": "GMO", - "categoryId": 4, - "url": "https://www.gmo.media/", - "companyId": "gmo_media" - }, - "gmx_net": { - "name": "gmx.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "go.com": { - "name": "go.com", - "categoryId": 8, - "url": "go.com", - "companyId": "disney" - }, - "godaddy_affiliate_program": { - "name": "GoDaddy Affiliate Program", - "categoryId": 4, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godaddy_site_analytics": { - "name": "GoDaddy Site Analytics", - "categoryId": 6, - "url": "https://www.godaddy.com/gdshop/hosting/stats_", - "companyId": "godaddy" - }, - "godaddy_site_seal": { - "name": "GoDaddy Site Seal", - "categoryId": 5, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godatafeed": { - "name": "GoDataFeed", - "categoryId": 6, - "url": "http://www.godatafeed.com", - "companyId": "godatafeed" - }, - "goingup": { - "name": "GoingUp", - "categoryId": 6, - "url": "http://www.goingup.com/", - "companyId": "goingup" - }, - "gomez": { - "name": "Gomez", - "categoryId": 6, - "url": "http://www.gomez.com/", - "companyId": "dynatrace" - }, - "goodadvert": { - "name": "GoodADVERT", - "categoryId": 4, - "url": "http://goodadvert.ru/", - "companyId": "goodadvert" - }, - "google": { - "name": "Google", - "categoryId": 4, - "url": "https://www.google.com/", - "companyId": "google" - }, - "google_ads_measurement": { - "name": "Google Ads Measurement", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adsense": { - "name": "Google Adsense", - "categoryId": 4, - "url": "https://www.google.com/adsense/", - "companyId": "google" - }, - "google_adservices": { - "name": "Google AdServices", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adwords_conversion": { - "name": "Google AdWords Conversion", - "categoryId": 4, - "url": "https://adwords.google.com/", - "companyId": "google" - }, - "google_adwords_user_lists": { - "name": "Google Adwords User Lists", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_analytics": { - "name": "Google Analytics", - "categoryId": 6, - "url": "http://www.google.com/analytics/", - "companyId": "google" - }, - "google_appspot": { - "name": "Google Appspot", - "categoryId": 10, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_auth": { - "name": "Google Auth", - "categoryId": 2, - "url": "https://myaccount.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_beacons": { - "name": "Google Beacons", - "categoryId": 6, - "url": "https://google.xyz", - "companyId": "google" - }, - "google_chat": { - "name": "Google Chat", - "categoryId": 7, - "url": "https://mail.google.com/chat/", - "companyId": "google", - "source": "AdGuard" - }, - "google_cloud_platform": { - "name": "Google Cloud Platform", - "categoryId": 10, - "url": "https://cloud.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_cloud_storage": { - "name": "Google Cloud Storage", - "categoryId": 10, - "url": "https://cloud.google.com/storage/", - "companyId": "google", - "source": "AdGuard" - }, - "google_custom_search": { - "name": "Google Custom Search Ads", - "categoryId": 4, - "url": "https://developers.google.com/custom-search-ads/", - "companyId": "google" - }, - "google_custom_search_engine": { - "name": "Google Programmable Search Engine", - "categoryId": 5, - "url": "https://programmablesearchengine.google.com/about/", - "companyId": "google" - }, - "google_dns": { - "name": "Google DNS", - "categoryId": 10, - "url": "https://dns.google/", - "companyId": "google", - "source": "AdGuard" - }, - "google_domains": { - "name": "Google Domains", - "categoryId": 10, - "url": "https://domains.google/", - "companyId": "google", - "source": "AdGuard" - }, - "google_edge": { - "name": "Google Edge CDN", - "categoryId": 9, - "url": "https://peering.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_email": { - "name": "Google Email", - "categoryId": 13, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_fonts": { - "name": "Google Fonts", - "categoryId": 9, - "url": "https://fonts.google.com/", - "companyId": "google" - }, - "google_hosted": { - "name": "Google Hosted", - "categoryId": 10, - "url": "https://workspace.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_ima": { - "name": "Google IMA", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_location": { - "name": "Google Location", - "categoryId": 8, - "url": "https://patents.google.com/patent/WO2007025143A1/", - "companyId": "google", - "source": "AdGuard" - }, - "google_maps": { - "name": "Google Maps", - "categoryId": 2, - "url": "https://www.google.com/maps/", - "companyId": "google", - "source": "AdGuard" - }, - "google_marketing": { - "name": "Google Marketing", - "categoryId": 4, - "url": "https://marketingplatform.google.com/about/enterprise", - "companyId": "google", - "source": "AdGuard" - }, - "google_meet": { - "name": "Google Meet", - "categoryId": 2, - "url": "https://meet.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_photos": { - "name": "Google Photos", - "categoryId": 9, - "url": "https://photos.google.com/", - "companyId": "google" - }, - "google_pingback": { - "name": "Google Pingback", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_play": { - "name": "Google Play", - "categoryId": 8, - "url": "https://play.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_plus": { - "name": "Google+ Platform", - "categoryId": 7, - "url": "http://www.google.com/+1/button/", - "companyId": "google" - }, - "google_publisher_tags": { - "name": "Google Publisher Tags", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_remarketing": { - "name": "Google Dynamic Remarketing", - "categoryId": 4, - "url": "http://adwords.google.com/", - "companyId": "google" - }, - "google_safeframe": { - "name": "Google Safeframe", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_servers": { - "name": "Google Servers", - "categoryId": 8, - "url": "https://support.google.com/faqs/answer/174717?hl=en", - "companyId": "google" - }, - "google_shopping_reviews": { - "name": "Google Shopping Reviews", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_syndication": { - "name": "Google Syndication", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_tag_manager": { - "name": "Google Tag Manager", - "categoryId": 5, - "url": "https://marketingplatform.google.com/about/tag-manager/", - "companyId": "google" - }, - "google_translate": { - "name": "Google Translate", - "categoryId": 2, - "url": "https://translate.google.com/manager", - "companyId": "google" - }, - "google_travel_adds": { - "name": "Google Travel Adds", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_trust_services": { - "name": "Google Trust Services", - "categoryId": 5, - "url": "https://pki.goog/", - "companyId": "google", - "source": "AdGuard" - }, - "google_trusted_stores": { - "name": "Google Trusted Stores", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_users": { - "name": "Google User Content", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_voice": { - "name": "Google Voice", - "categoryId": 2, - "url": "https://voice.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_website_optimizer": { - "name": "Google Website Optimizer", - "categoryId": 6, - "url": "https://www.google.com/analytics/siteopt/prev", - "companyId": "google" - }, - "google_widgets": { - "name": "Google Widgets", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_workspace": { - "name": "Google Workspace", - "categoryId": 2, - "url": "https://workspace.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "googleapis.com": { - "name": "Google APIs", - "categoryId": 9, - "url": "https://www.googleapis.com/", - "companyId": "google" - }, - "goooal": { - "name": "Goooal", - "categoryId": 6, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "gorilla_nation": { - "name": "Gorilla Nation", - "categoryId": 4, - "url": "http://www.gorillanationmedia.com", - "companyId": "gorilla_nation_media" - }, - "gosquared": { - "name": "GoSquared", - "categoryId": 6, - "url": "http://www.gosquared.com/livestats/", - "companyId": "gosquared" - }, - "gostats": { - "name": "GoStats", - "categoryId": 6, - "url": "http://gostats.com/", - "companyId": "gostats" - }, - "govmetric": { - "name": "GovMetric", - "categoryId": 6, - "url": "http://www.govmetric.com/", - "companyId": "govmetric" - }, - "grabo_affiliate": { - "name": "Grabo Affiliate", - "categoryId": 4, - "url": "http://grabo.bg/", - "companyId": "grabo_media" - }, - "grandslammedia": { - "name": "GrandSlamMedia", - "categoryId": 4, - "url": "http://www.grandslammedia.com/", - "companyId": "grand_slam_media" - }, - "granify": { - "name": "Granify", - "categoryId": 6, - "url": "http://granify.com/", - "companyId": "granify" - }, - "grapeshot": { - "name": "Grapeshot", - "categoryId": 4, - "url": "https://www.grapeshot.com/", - "companyId": "oracle" - }, - "graph_comment": { - "name": "Graph Comment", - "categoryId": 5, - "url": "https://graphcomment.com/en/", - "companyId": "graph_comment" - }, - "gravatar": { - "name": "Gravatar", - "categoryId": 7, - "url": "http://en.gravatar.com/", - "companyId": "automattic" - }, - "gravitec": { - "name": "Gravitec", - "categoryId": 6, - "url": "https://gravitec.net/", - "companyId": "gravitec" - }, - "gravity_insights": { - "name": "Gravity Insights", - "categoryId": 6, - "url": "http://www.gravity.com/", - "companyId": "verizon" - }, - "greatviews.de": { - "name": "GreatViews", - "categoryId": 4, - "url": "http://greatviews.de/", - "companyId": "parship" - }, - "green_and_red": { - "name": "Green and Red", - "categoryId": 4, - "url": "http://www.green-red.com/", - "companyId": "green_&_red_technologies" - }, - "green_certified_site": { - "name": "Green Certified Site", - "categoryId": 2, - "url": "http://www.advenity.com/", - "companyId": "advenity" - }, - "green_story": { - "name": "Green Story", - "categoryId": 6, - "url": "https://greenstory.ca/", - "companyId": "green_story" - }, - "greentube.com": { - "name": "Greentube Internet Entertainment Solutions", - "categoryId": 7, - "url": "https://www.greentube.com/", - "companyId": null - }, - "greystripe": { - "name": "Greystripe", - "categoryId": 4, - "url": "http://www.greystripe.com/", - "companyId": "conversant" - }, - "groove": { - "name": "Groove", - "categoryId": 2, - "url": "http://www.groovehq.com/", - "companyId": "groove_networks" - }, - "groovinads": { - "name": "GroovinAds", - "categoryId": 4, - "url": "http://www.groovinads.com/en", - "companyId": "groovinads" - }, - "groundtruth": { - "name": "GroundTruth", - "categoryId": 4, - "url": "http://www.groundtruth.com/", - "companyId": "groundtruth" - }, - "groupm_server": { - "name": "GroupM Server", - "categoryId": 4, - "url": "http://www.groupm.com/", - "companyId": "wpp" - }, - "gsi_media": { - "name": "GSI Media", - "categoryId": 4, - "url": "http://gsimedia.net", - "companyId": "gsi_media_network" - }, - "gstatic": { - "name": "Google Static", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "gtop": { - "name": "GTop", - "categoryId": 6, - "url": "http://www.gtopstats.com", - "companyId": "gtopstats" - }, - "gugaboo": { - "name": "Gugaboo", - "categoryId": 4, - "url": "https://www.gubagoo.com/", - "companyId": "gubagoo" - }, - "guj.de": { - "name": "Gruner + Jahr", - "categoryId": 4, - "url": "https://www.guj.de/", - "companyId": "gruner_jahr_ag" - }, - "gujems": { - "name": "G+J e|MS", - "categoryId": 4, - "url": "http://www.gujmedia.de/", - "companyId": "gruner_jahr_ag" - }, - "gumgum": { - "name": "gumgum", - "categoryId": 4, - "url": "http://gumgum.com/", - "companyId": "gumgum" - }, - "gumroad": { - "name": "Gumroad", - "categoryId": 7, - "url": "https://gumroad.com/", - "companyId": "gumroad" - }, - "gunggo": { - "name": "Gunggo", - "categoryId": 4, - "url": "http://www.gunggo.com/", - "companyId": "gunggo" - }, - "h12_ads": { - "name": "H12 Ads", - "categoryId": 4, - "url": "http://www.h12-media.com/", - "companyId": "h12_media_ads" - }, - "hacker_news_button": { - "name": "Hacker News Button", - "categoryId": 7, - "url": "http://news.ycombinator.com/", - "companyId": "hacker_news" - }, - "haendlerbund.de": { - "name": "Händlerbund", - "categoryId": 2, - "url": "https://www.haendlerbund.de/en", - "companyId": null - }, - "halogen_network": { - "name": "Halogen Network", - "categoryId": 7, - "url": "http://www.halogennetwork.com/", - "companyId": "social_chorus" - }, - "happy_fox_chat": { - "name": "Happy Fox Chat", - "categoryId": 2, - "url": "https://happyfoxchat.com/", - "companyId": "happy_fox_chat" - }, - "harren_media": { - "name": "Harren Media", - "categoryId": 4, - "url": "http://www.harrenmedia.com/index.html", - "companyId": "harren_media" - }, - "hatchbuck": { - "name": "Hatchbuck", - "categoryId": 6, - "url": "http://www.hatchbuck.com/", - "companyId": "hatchbuck" - }, - "head_hunter": { - "name": "Head Hunter", - "categoryId": 6, - "url": "https://hh.ru/", - "companyId": "head_hunter" - }, - "healte.de": { - "name": "healte.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "heap": { - "name": "Heap", - "categoryId": 6, - "url": "https://heapanalytics.com/", - "companyId": "heap" - }, - "heatmap": { - "name": "Heatmap", - "categoryId": 6, - "url": "https://heatmap.me/", - "companyId": "heatmap" - }, - "heimspiel": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "http://www.heimspiel.de", - "companyId": null - }, - "hello_bar": { - "name": "Hello Bar", - "categoryId": 7, - "url": "https://www.hellobar.com/", - "companyId": "crazy_egg" - }, - "hellosociety": { - "name": "HelloSociety", - "categoryId": 6, - "url": "http://hellosociety.com", - "companyId": "hellosociety" - }, - "here": { - "name": "HERE", - "categoryId": 8, - "url": "https://www.here.com/", - "companyId": null - }, - "heroku": { - "name": "Heroku", - "categoryId": 10, - "url": null, - "companyId": null - }, - "heureka-widget": { - "name": "Heureka-Widget", - "categoryId": 4, - "url": "https://www.heurekashopping.cz/", - "companyId": "heureka" - }, - "heybubble": { - "name": "HeyBubble", - "categoryId": 2, - "url": "https://www.heybubble.com/", - "companyId": "heybubble" - }, - "heyos": { - "name": "Heyos", - "categoryId": 4, - "url": "http://www.heyos.com/", - "companyId": "heyos" - }, - "hi-media_performance": { - "name": "Hi-Media Performance", - "categoryId": 4, - "url": "http://www.hi-mediaperformance.co.uk/", - "companyId": "hi-media_performance" - }, - "hiconversion": { - "name": "HiConversion", - "categoryId": 4, - "url": "http://www.hiconversion.com", - "companyId": "hiconversion" - }, - "highwebmedia.com": { - "name": "highwebmedia.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "highwinds": { - "name": "Highwinds", - "categoryId": 6, - "url": "https://www.highwinds.com/", - "companyId": "highwinds" - }, - "hiiir": { - "name": "Hiiir", - "categoryId": 4, - "url": "http://adpower.hiiir.com/", - "companyId": "hiiir" - }, - "hiro": { - "name": "HIRO", - "categoryId": 4, - "url": "http://www.hiro-media.com/", - "companyId": "hiro_media" - }, - "histats": { - "name": "Histats", - "categoryId": 4, - "url": "http://www.histats.com/", - "companyId": "histats" - }, - "hit-parade": { - "name": "Hit-Parade", - "categoryId": 4, - "url": "http://www.hit-parade.com/", - "companyId": "hit-parade" - }, - "hit.ua": { - "name": "HIT.UA", - "categoryId": 4, - "url": "http://hit.ua/", - "companyId": "hit.ua" - }, - "hitslink": { - "name": "HitsLink", - "categoryId": 4, - "url": "http://www.hitslink.com/", - "companyId": "net_applications" - }, - "hitsniffer": { - "name": "HitSniffer", - "categoryId": 4, - "url": "http://hitsniffer.com/", - "companyId": "hit_sniffer" - }, - "hittail": { - "name": "HitTail", - "categoryId": 4, - "url": "http://www.hittail.com/", - "companyId": "hittail" - }, - "hivedx.com": { - "name": "hiveDX", - "categoryId": 4, - "url": "https://www.hivedx.com/", - "companyId": null - }, - "hiveworks": { - "name": "Hive Networks", - "categoryId": 4, - "url": "https://hiveworkscomics.com/", - "companyId": "hive_works" - }, - "hockeyapp": { - "name": "HockeyApp", - "categoryId": 101, - "url": "https://hockeyapp.net/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "hoholikik.club": { - "name": "hoholikik.club", - "categoryId": 12, - "url": null, - "companyId": null - }, - "hola_player": { - "name": "Hola Player", - "categoryId": 0, - "url": "https://holacdn.com/", - "companyId": "hola_cdn" - }, - "homeaway": { - "name": "HomeAway", - "categoryId": 8, - "url": null, - "companyId": null - }, - "honeybadger": { - "name": "Honeybadger", - "categoryId": 6, - "url": "https://www.honeybadger.io/", - "companyId": "honeybadger" - }, - "hooklogic": { - "name": "HookLogic", - "categoryId": 4, - "url": "http://hooklogic.com/", - "companyId": "criteo" - }, - "hop-cube": { - "name": "Hop-Cube", - "categoryId": 4, - "url": "http://www.hop-cube.com/", - "companyId": "hop-cube" - }, - "hotdogsandads.com": { - "name": "hotdogsandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "hotjar": { - "name": "Hotjar", - "categoryId": 6, - "url": "http://www.hotjar.com/", - "companyId": "hotjar" - }, - "hotkeys": { - "name": "HotKeys", - "categoryId": 4, - "url": "http://www.demandmedia.com/", - "companyId": "leaf_group" - }, - "hotlog.ru": { - "name": "HotLog", - "categoryId": 4, - "url": "https://hotlog.ru/", - "companyId": "hotlog" - }, - "hotwords": { - "name": "HOTWords", - "categoryId": 4, - "url": "http://hotwords.com/", - "companyId": "hotwords" - }, - "howtank.com": { - "name": "howtank", - "categoryId": 7, - "url": "https://www.howtank.com/", - "companyId": null - }, - "hqentertainmentnetwork.com": { - "name": "HQ Entertainment Network", - "categoryId": 4, - "url": "https://hqentertainmentnetwork.com/", - "companyId": null - }, - "hsoub": { - "name": "Hsoub", - "categoryId": 4, - "url": "http://www.hsoub.com/", - "companyId": "hsoub" - }, - "hstrck.com": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "https://www.heimspiel.de/", - "companyId": null - }, - "httpool": { - "name": "HTTPool", - "categoryId": 4, - "url": "http://www.httpool.com/", - "companyId": "httpool" - }, - "hubrus": { - "name": "HUBRUS", - "categoryId": 4, - "url": "http://www.hubrus.com/", - "companyId": "hubrus" - }, - "hubspot": { - "name": "HubSpot", - "categoryId": 6, - "url": "http://www.hubspot.com/", - "companyId": "hubspot" - }, - "hubspot_forms": { - "name": "HubSpot Forms", - "categoryId": 2, - "url": "http://www.hubspot.com", - "companyId": "hubspot" - }, - "hubvisor.io": { - "name": "Hubvisor", - "categoryId": 4, - "url": "https://hubvisor.io/", - "companyId": null - }, - "hucksterbot": { - "name": "HucksterBot", - "categoryId": 4, - "url": "http://hucksterbot.ru/", - "companyId": "hucksterbot" - }, - "hupso": { - "name": "Hupso", - "categoryId": 7, - "url": "http://www.hupso.com/", - "companyId": "hupso" - }, - "hurra_tracker": { - "name": "Hurra Tracker", - "categoryId": 4, - "url": "http://www.hurra.com/en/", - "companyId": "hurra_communications" - }, - "hybrid.ai": { - "name": "Hybrid.ai", - "categoryId": 4, - "url": "https://hybrid.ai/", - "companyId": "hybrid_adtech" - }, - "hype_exchange": { - "name": "Hype Exchange", - "categoryId": 4, - "url": "http://www.hypeexchange.com/", - "companyId": "hype_exchange" - }, - "hypercomments": { - "name": "HyperComments", - "categoryId": 1, - "url": "http://www.hypercomments.com/", - "companyId": "hypercomments" - }, - "hyves_widgets": { - "name": "Hyves Widgets", - "categoryId": 4, - "url": "http://www.hyves.nl/", - "companyId": "hyves" - }, - "hyvyd": { - "name": "Hyvyd GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "i-behavior": { - "name": "i-Behavior", - "categoryId": 4, - "url": "http://www.i-behavior.com/", - "companyId": "kbm_group" - }, - "i-mobile": { - "name": "i-mobile", - "categoryId": 4, - "url": "https://www2.i-mobile.co.jp/en/index.aspx", - "companyId": "i-mobile" - }, - "i.ua": { - "name": "i.ua", - "categoryId": 4, - "url": "http://www.i.ua/", - "companyId": "i.ua" - }, - "i10c.net": { - "name": "i10c.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "i2i.jp": { - "name": "i2i.jp", - "categoryId": 6, - "url": "http://www.i2i.jp/", - "companyId": "i2i.jp" - }, - "iab_consent": { - "name": "IAB Consent", - "categoryId": 5, - "url": "https://iabtechlab.com/standards/gdpr-transparency-and-consent-framework/", - "companyId": "iab" - }, - "iadvize": { - "name": "iAdvize", - "categoryId": 2, - "url": "http://www.iadvize.com/", - "companyId": "iadvize" - }, - "ibm_customer_experience": { - "name": "IBM Digital Analytics", - "categoryId": 6, - "url": "http://www.coremetrics.com/", - "companyId": "ibm" - }, - "icerocket_tracker": { - "name": "IceRocket Tracker", - "categoryId": 7, - "url": "http://tracker.icerocket.com/", - "companyId": "meltwater_icerocket" - }, - "icf_technology": { - "name": "ICF Technology", - "categoryId": 2, - "url": "http://www.icftechnology.com/", - "companyId": null - }, - "iclick": { - "name": "iClick", - "categoryId": 4, - "url": "http://optimix.asia/", - "companyId": "iclick_interactive" - }, - "icrossing": { - "name": "iCrossing", - "categoryId": 4, - "url": "http://www.icrossing.com/", - "companyId": "hearst" - }, - "icstats": { - "name": "ICStats", - "categoryId": 6, - "url": "http://www.icstats.nl/", - "companyId": "icstats" - }, - "icuazeczpeoohx.com": { - "name": "icuazeczpeoohx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "id-news.net": { - "name": "Ippen Digital", - "categoryId": 4, - "url": "https://www.ippen-digital.de/", - "companyId": null - }, - "id5-sync": { - "name": "ID5 Sync", - "categoryId": 4, - "url": "https://id5.io/", - "companyId": "id5-sync", - "source": "AdGuard" - }, - "id_services": { - "name": "ID Services", - "categoryId": 6, - "url": "https://id.services/", - "companyId": "id_services" - }, - "ideal_media": { - "name": "Ideal Media", - "categoryId": 4, - "url": "http://idealmedia.com/", - "companyId": "ideal_media" - }, - "idealo_com": { - "name": "idealo.com", - "categoryId": 4, - "url": "http://idealo.com/", - "companyId": null - }, - "identrust": { - "name": "IdenTrust, Inc.", - "categoryId": 5, - "url": "https://identrust.com/", - "companyId": "identrust", - "source": "AdGuard" - }, - "ideoclick": { - "name": "IdeoClick", - "categoryId": 4, - "url": "http://ideoclick.com", - "companyId": "ideoclick" - }, - "idio": { - "name": "Idio", - "categoryId": 4, - "url": "https://www.idio.ai/", - "companyId": "idio" - }, - "ie8eamus.com": { - "name": "ie8eamus.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ientry": { - "name": "iEntry", - "categoryId": 4, - "url": "http://www.ientry.com/", - "companyId": "ientry" - }, - "iflychat": { - "name": "iFlyChat", - "categoryId": 2, - "url": "https://iflychat.com/", - "companyId": "iflychat" - }, - "ignitionone": { - "name": "IgnitionOne", - "categoryId": 6, - "url": "https://www.ignitionone.com/", - "companyId": "zeta" - }, - "igodigital": { - "name": "iGoDigital", - "categoryId": 2, - "url": "http://igodigital.com/", - "companyId": "salesforce" - }, - "ihs_markit": { - "name": "IHS Markit", - "categoryId": 6, - "url": "https://ihsmarkit.com/index.html", - "companyId": "ihs" - }, - "ihs_markit_online_shopper_insigh": { - "name": "IHS Markit Online Shopper Insigh", - "categoryId": 6, - "url": "http://www.visicogn.com/vcu.htm", - "companyId": "ihs" - }, - "ihvmcqojoj.com": { - "name": "ihvmcqojoj.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "iias.eu": { - "name": "Insight Image", - "categoryId": 3, - "url": "http://insightimage.com/", - "companyId": null - }, - "ijento": { - "name": "iJento", - "categoryId": 6, - "url": "http://www.ijento.com/", - "companyId": "ijento" - }, - "imad": { - "name": "imad", - "categoryId": 4, - "url": "http://www.imad.co.kr/", - "companyId": "i'mad_republic" - }, - "image_advantage": { - "name": "Image Advantage", - "categoryId": 4, - "url": "http://www.worthathousandwords.com/", - "companyId": "image_advantage" - }, - "image_space_media": { - "name": "Image Space Media", - "categoryId": 4, - "url": "http://www.imagespacemedia.com/", - "companyId": "image_space_media" - }, - "imgix.net": { - "name": "ImgIX", - "categoryId": 9, - "url": "https://www.imgix.com/", - "companyId": null - }, - "imgur": { - "name": "Imgur", - "categoryId": 8, - "url": "https://imgur.com/", - "companyId": "medialab", - "source": "AdGuard" - }, - "imho_vi": { - "name": "imho vi", - "categoryId": 4, - "url": "http://www.imho.ru", - "companyId": "imho" - }, - "immanalytics": { - "name": "Immanalytics", - "categoryId": 2, - "url": "https://www.roku.com/", - "companyId": "roku" - }, - "immobilienscout24_de": { - "name": "immobilienscout24.de", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "imonomy": { - "name": "imonomy", - "categoryId": 6, - "url": "http://imonomy.com/", - "companyId": "imonomy" - }, - "impact_radius": { - "name": "Impact Radius", - "categoryId": 5, - "url": "http://www.impactradius.com/", - "companyId": "impact_radius" - }, - "impresiones_web": { - "name": "Impresiones Web", - "categoryId": 4, - "url": "http://www.iw-advertising.com/", - "companyId": "impresiones_web" - }, - "improve_digital": { - "name": "Improve Digital", - "categoryId": 4, - "url": "http://www.improvedigital.com/", - "companyId": "improve_digital" - }, - "improvely": { - "name": "Improvely", - "categoryId": 6, - "url": "https://www.improvely.com/", - "companyId": "awio_web_services" - }, - "inbenta": { - "name": "Inbenta", - "categoryId": 6, - "url": "https://www.inbenta.com/en/", - "companyId": "inbenta" - }, - "inboxsdk.com": { - "name": "Inbox SDK", - "categoryId": 8, - "url": "https://www.inboxsdk.com/", - "companyId": null - }, - "indeed": { - "name": "Indeed", - "categoryId": 4, - "url": "http://www.indeed.com/", - "companyId": "indeed" - }, - "index_exchange": { - "name": "Index Exchange", - "categoryId": 4, - "url": "http://www.casalemedia.com/", - "companyId": "index_exchange" - }, - "indieclick": { - "name": "IndieClick", - "categoryId": 4, - "url": "http://www.indieclick.com/", - "companyId": "leaf_group" - }, - "industry_brains": { - "name": "Industry Brains", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "industrybrains" - }, - "infectious_media": { - "name": "Impression Desk", - "categoryId": 4, - "url": "https://impressiondesk.com/", - "companyId": "infectious_media" - }, - "infinite_analytics": { - "name": "Infinite Analytics", - "categoryId": 6, - "url": "http://infiniteanalytics.com/products/", - "companyId": "infinite_analytics" - }, - "infinity_tracking": { - "name": "Infinity Tracking", - "categoryId": 6, - "url": "http://www.infinity-tracking.com", - "companyId": "infinity_tracking" - }, - "influads": { - "name": "InfluAds", - "categoryId": 4, - "url": "http://www.influads.com/", - "companyId": "influads" - }, - "infolinks": { - "name": "InfoLinks", - "categoryId": 4, - "url": "http://www.infolinks.com/", - "companyId": "infolinks" - }, - "infonline": { - "name": "INFOnline", - "categoryId": 6, - "url": "http://www.infonline.de/", - "companyId": "infonline" - }, - "informer_technologies": { - "name": "Informer Technologies", - "categoryId": 6, - "url": "http://www.informer.com/", - "companyId": "informer_technologies" - }, - "infusionsoft": { - "name": "Infusionsoft by Keap", - "categoryId": 4, - "url": "https://keap.com/", - "companyId": "infusionsoft" - }, - "innity": { - "name": "Innity", - "categoryId": 4, - "url": "http://www.innity.com/", - "companyId": "innity" - }, - "innogames.de": { - "name": "InnoGames", - "categoryId": 8, - "url": "https://www.innogames.com/", - "companyId": null - }, - "innovid": { - "name": "Innovid", - "categoryId": 4, - "url": "https://www.innovid.com/", - "companyId": "innovid" - }, - "inside": { - "name": "inside", - "categoryId": 7, - "url": "http://www.inside.tm/", - "companyId": "powerfront" - }, - "insider": { - "name": "Insider", - "categoryId": 6, - "url": "http://useinsider.com/", - "companyId": "insider" - }, - "insightexpress": { - "name": "InsightExpress", - "categoryId": 6, - "url": "https://www.millwardbrowndigital.com/", - "companyId": "millward_brown" - }, - "inskin_media": { - "name": "InSkin Media", - "categoryId": 4, - "url": "http://www.inskinmedia.com/", - "companyId": "inskin_media" - }, - "inspectlet": { - "name": "Inspectlet", - "categoryId": 6, - "url": "https://www.inspectlet.com/", - "companyId": "inspectlet" - }, - "inspsearchapi.com": { - "name": "Infospace Search", - "categoryId": 4, - "url": "http://infospace.com/", - "companyId": "system1" - }, - "instagram_com": { - "name": "Instagram", - "categoryId": 8, - "url": "https://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "instant_check_mate": { - "name": "Instant Check Mate", - "categoryId": 2, - "url": "https://www.instantcheckmate.com/", - "companyId": "instant_check_mate" - }, - "instart_logic": { - "name": "Instart Logic", - "categoryId": 4, - "url": "https://www.instartlogic.com/", - "companyId": "instart_logic_inc" - }, - "insticator": { - "name": "Insticator", - "categoryId": 4, - "url": "https://www.insticator.com/landingpage", - "companyId": "insticator" - }, - "instinctive": { - "name": "Instinctive", - "categoryId": 4, - "url": "https://instinctive.io/", - "companyId": "instinctive" - }, - "intango": { - "name": "Intango", - "categoryId": 4, - "url": "https://intango.com/", - "companyId": "intango" - }, - "integral_ad_science": { - "name": "Integral Ad Science", - "categoryId": 4, - "url": "https://integralads.com/", - "companyId": "integral_ad_science" - }, - "integral_marketing": { - "name": "Integral Marketing", - "categoryId": 4, - "url": "http://integral-marketing.com/", - "companyId": "integral_marketing" - }, - "intelliad": { - "name": "intelliAd", - "categoryId": 6, - "url": "http://www.intelliad.de/", - "companyId": "intelliad" - }, - "intelligencefocus": { - "name": "IntelligenceFocus", - "categoryId": 6, - "url": "http://www.intelligencefocus.com", - "companyId": "intelligencefocus" - }, - "intelligent_reach": { - "name": "Intelligent Reach", - "categoryId": 4, - "url": "http://www.intelligentreach.com/", - "companyId": "intelligent_reach" - }, - "intense_debate": { - "name": "Intense Debate", - "categoryId": 2, - "url": "http://intensedebate.com/", - "companyId": "automattic" - }, - "intent_iq": { - "name": "Intent IQ", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "intent_media": { - "name": "Intent", - "categoryId": 4, - "url": "https://intent.com/", - "companyId": "intent_media" - }, - "intercom": { - "name": "Intercom", - "categoryId": 2, - "url": "http://intercom.io/", - "companyId": "intercom" - }, - "interedy.info": { - "name": "interedy.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "intergi": { - "name": "Intergi", - "categoryId": 4, - "url": "http://www.intergi.com/", - "companyId": "intergi_entertainment" - }, - "intermarkets.net": { - "name": "Intermarkets", - "categoryId": 4, - "url": "http://intermarkets.net/", - "companyId": "intermarkets" - }, - "intermundo_media": { - "name": "InterMundo Media", - "categoryId": 4, - "url": "http://intermundomedia.com/", - "companyId": "intermundo_media" - }, - "internet_billboard": { - "name": "Internet BillBoard", - "categoryId": 4, - "url": "http://www.ibillboard.com/en/", - "companyId": "internet_billboard" - }, - "internetaudioads": { - "name": "InternetAudioAds", - "categoryId": 0, - "url": "http://www.internetaudioads.com/", - "companyId": "internetaudioads" - }, - "internetbrands": { - "name": "InternetBrands", - "categoryId": 7, - "url": "http://www.internetbrands.com/", - "companyId": "internet_brands" - }, - "interpolls": { - "name": "Interpolls", - "categoryId": 4, - "url": "http://www.interpolls.com/", - "companyId": "interpolls" - }, - "interyield": { - "name": "Interyield", - "categoryId": 4, - "url": "http://www.advertise.com/publisher-solutions/", - "companyId": "advertise.com" - }, - "intilery": { - "name": "Intilery", - "categoryId": 6, - "url": "http://www.intilery.com", - "companyId": "intilery" - }, - "intimate_merger": { - "name": "Intimate Merger", - "categoryId": 6, - "url": "https://corp.intimatemerger.com/", - "companyId": "intimate_merger" - }, - "investingchannel": { - "name": "Investing Channel", - "categoryId": 8, - "url": "http://www.investingchannel.com/", - "companyId": "investingchannel" - }, - "inviziads": { - "name": "InviziAds", - "categoryId": 4, - "url": "http://www.inviziads.com", - "companyId": "inviziads" - }, - "invoca": { - "name": "Invoca", - "categoryId": 4, - "url": "http://www.invoca.com/", - "companyId": "invoca" - }, - "invodo": { - "name": "Invodo", - "categoryId": 6, - "url": "http://www.invodo.com/", - "companyId": "invodo" - }, - "ionicframework.com": { - "name": "Ionic", - "categoryId": 8, - "url": "https://ionicframework.com/", - "companyId": null - }, - "iotec": { - "name": "iotec", - "categoryId": 4, - "url": "https://www.iotecglobal.com/", - "companyId": "iotec" - }, - "iovation": { - "name": "iovation", - "categoryId": 5, - "url": "http://www.iovation.com/", - "companyId": "iovation" - }, - "ip-label": { - "name": "ip-label", - "categoryId": 6, - "url": "http://www.ip-label.co.uk/", - "companyId": "ip-label" - }, - "ip_targeting": { - "name": "IP Targeting", - "categoryId": 6, - "url": "https://www.iptargeting.com/", - "companyId": "el_toro" - }, - "ip_tracker": { - "name": "IP Tracker", - "categoryId": 6, - "url": "http://www.ip-tracker.org/", - "companyId": "ip_tracker" - }, - "iperceptions": { - "name": "iPerceptions", - "categoryId": 2, - "url": "http://www.iperceptions.com/", - "companyId": "iperceptions" - }, - "ipfingerprint": { - "name": "IPFingerprint", - "categoryId": 6, - "url": "http://www.ipfingerprint.com/", - "companyId": "ipfingerprint" - }, - "ipg_mediabrands": { - "name": "IPG Mediabrands", - "categoryId": 4, - "url": "https://www.ipgmediabrands.com/", - "companyId": "ipg_mediabrands" - }, - "ipify": { - "name": "ipify", - "categoryId": 8, - "url": "https://www.ipify.org/", - "companyId": null - }, - "ipinfo": { - "name": "Ipinfo", - "categoryId": 2, - "url": "https://ipinfo.io/", - "companyId": "ipinfo.io" - }, - "iplogger": { - "name": "IPLogger", - "categoryId": 6, - "url": "http://iplogger.ru/", - "companyId": "iplogger" - }, - "iprom": { - "name": "iprom", - "categoryId": 4, - "url": "http://www.iprom.si/", - "companyId": "iprom" - }, - "ipromote": { - "name": "iPromote", - "categoryId": 4, - "url": "http://www.ipromote.com/", - "companyId": "ipromote" - }, - "iprospect": { - "name": "iProspect", - "categoryId": 4, - "url": "http://www.iprospect.com/", - "companyId": "dentsu_aegis_network" - }, - "iqiyi": { - "name": "iQiyi", - "categoryId": 0, - "url": "https://www.iqiyi.com/", - "companyId": "iqiyi", - "source": "AdGuard" - }, - "ironsource": { - "name": "ironSource Ltd.", - "categoryId": 4, - "url": "https://www.is.com", - "companyId": "unity", - "source": "AdGuard" - }, - "isocket": { - "name": "isocket", - "categoryId": 4, - "url": "http://www.isocket.com/", - "companyId": "rubicon_project" - }, - "isolarcloud": { - "name": "iSolarCloud", - "categoryId": 6, - "url": "https://isolarcloud.com/", - "companyId": "sungrow", - "source": "AdGuard" - }, - "ispot.tv": { - "name": "iSpot.tv", - "categoryId": 4, - "url": "https://www.ispot.tv/", - "companyId": null - }, - "itineraire.info": { - "name": "itineraire.info", - "categoryId": 2, - "url": "https://www.itineraire.info/", - "companyId": null - }, - "itunes_link_maker": { - "name": "iTunes Link Maker", - "categoryId": 4, - "url": "https://www.apple.com/", - "companyId": "apple" - }, - "ity.im": { - "name": "ity.im", - "categoryId": 4, - "url": "http://ity.im/", - "companyId": "ity.im" - }, - "iubenda.com": { - "name": "iubenda", - "categoryId": 5, - "url": "https://www.iubenda.com/", - "companyId": "iubenda" - }, - "ivcbrasil.org.br": { - "name": "IVC Brasil", - "categoryId": 6, - "url": "https://ivcbrasil.org.br/#/home", - "companyId": null - }, - "ividence": { - "name": "Ividence", - "categoryId": 4, - "url": "https://www.ividence.com/home/", - "companyId": "sien" - }, - "iwiw_widgets": { - "name": "iWiW Widgets", - "categoryId": 2, - "url": "http://iwiw.hu", - "companyId": "iwiw" - }, - "ixi_digital": { - "name": "IXI Digital", - "categoryId": 4, - "url": "http://www.equifax.com/home/en_us", - "companyId": "equifax" - }, - "ixquick.com": { - "name": "ixquick", - "categoryId": 8, - "url": "https://www.ixquick.com/", - "companyId": "startpage" - }, - "izooto": { - "name": "iZooto", - "categoryId": 6, - "url": "https://www.izooto.com/", - "companyId": "izooto" - }, - "j-list_affiliate_program": { - "name": "J-List Affiliate Program", - "categoryId": 4, - "url": "http://www.jlist.com/page/affiliates.html", - "companyId": "j-list" - }, - "jaco": { - "name": "Jaco", - "categoryId": 6, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "janrain": { - "name": "Janrain", - "categoryId": 6, - "url": "http://www.janrain.com/", - "companyId": "akamai" - }, - "jeeng": { - "name": "Jeeng", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jeeng_widgets": { - "name": "Jeeng Widgets", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jet_interactive": { - "name": "Jet Interactive", - "categoryId": 6, - "url": "http://www.jetinteractive.com.au/", - "companyId": "jet_interactive" - }, - "jetbrains": { - "name": "JetBrains", - "categoryId": 8, - "url": "https://www.jetbrains.com/", - "companyId": "jetbrains", - "source": "AdGuard" - }, - "jetlore": { - "name": "Jetlore", - "categoryId": 6, - "url": "http://www.jetlore.com/", - "companyId": "jetlore" - }, - "jetpack": { - "name": "Jetpack", - "categoryId": 6, - "url": "https://jetpack.com/", - "companyId": "automattic" - }, - "jetpack_digital": { - "name": "Jetpack Digital", - "categoryId": 6, - "url": "http://www.jetpack.com/", - "companyId": "jetpack_digital" - }, - "jimdo.com": { - "name": "jimdo.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "jink": { - "name": "Jink", - "categoryId": 4, - "url": "http://www.jink.de/", - "companyId": "jink" - }, - "jirafe": { - "name": "Jirafe", - "categoryId": 6, - "url": "http://jirafe.com/", - "companyId": "jirafe" - }, - "jivochat": { - "name": "JivoSite", - "categoryId": 2, - "url": "https://www.jivochat.com/", - "companyId": "jivochat" - }, - "jivox": { - "name": "Jivox", - "categoryId": 4, - "url": "http://www.jivox.com/", - "companyId": "jivox" - }, - "jobs_2_careers": { - "name": "Jobs 2 Careers", - "categoryId": 4, - "url": "http://www.jobs2careers.com/", - "companyId": "jobs_2_careers" - }, - "joinhoney": { - "name": "Honey", - "categoryId": 8, - "url": "https://www.joinhoney.com/", - "companyId": null - }, - "jornaya": { - "name": "Jornaya", - "categoryId": 6, - "url": "http://leadid.com/", - "companyId": "jornaya" - }, - "jquery": { - "name": "jQuery", - "categoryId": 9, - "url": "https://jquery.org/", - "companyId": "js_foundation" - }, - "js_communications": { - "name": "JS Communications", - "categoryId": 4, - "url": "http://www.jssearch.net/", - "companyId": "js_communications" - }, - "jsdelivr": { - "name": "jsDelivr", - "categoryId": 9, - "url": "https://www.jsdelivr.com/", - "companyId": null - }, - "jse_coin": { - "name": "JSE Coin", - "categoryId": 4, - "url": "https://jsecoin.com/", - "companyId": "jse_coin" - }, - "jsuol.com.br": { - "name": "jsuol.com.br", - "categoryId": 4, - "url": null, - "companyId": null - }, - "juggcash": { - "name": "JuggCash", - "categoryId": 3, - "url": "http://www.juggcash.com", - "companyId": "juggcash" - }, - "juiceadv": { - "name": "JuiceADV", - "categoryId": 4, - "url": "http://juiceadv.com/", - "companyId": "juiceadv" - }, - "juicyads": { - "name": "JuicyAds", - "categoryId": 3, - "url": "http://www.juicyads.com/", - "companyId": "juicyads" - }, - "jumplead": { - "name": "Jumplead", - "categoryId": 6, - "url": "https://jumplead.com/", - "companyId": "jumplead" - }, - "jumpstart_tagging_solutions": { - "name": "Jumpstart Tagging Solutions", - "categoryId": 6, - "url": "http://www.hearst.com/", - "companyId": "hearst" - }, - "jumptap": { - "name": "Jumptap", - "categoryId": 4, - "url": "http://www.jumptap.com/", - "companyId": "verizon" - }, - "jumptime": { - "name": "JumpTime", - "categoryId": 6, - "url": "http://www.jumptime.com/", - "companyId": "openx" - }, - "just_answer": { - "name": "Just Answer", - "categoryId": 2, - "url": "https://www.justanswer.com/", - "companyId": "just_answer" - }, - "just_premium": { - "name": "Just Premium", - "categoryId": 4, - "url": "http://justpremium.com/", - "companyId": "just_premium" - }, - "just_relevant": { - "name": "Just Relevant", - "categoryId": 4, - "url": "http://www.justrelevant.com/", - "companyId": "just_relevant" - }, - "jvc.gg": { - "name": "Jeuxvideo CDN", - "categoryId": 9, - "url": "http://www.jeuxvideo.com/", - "companyId": null - }, - "jw_player": { - "name": "JW Player", - "categoryId": 0, - "url": "https://www.jwplayer.com/", - "companyId": "jw_player" - }, - "jw_player_ad_solutions": { - "name": "JW Player Ad Solutions", - "categoryId": 4, - "url": "http://www.longtailvideo.com/adsolution/", - "companyId": "jw_player" - }, - "kaeufersiegel.de": { - "name": "Käufersiegel", - "categoryId": 2, - "url": "https://www.kaeufersiegel.de/", - "companyId": null - }, - "kairion.de": { - "name": "kairion", - "categoryId": 4, - "url": "https://kairion.de/", - "companyId": "prosieben_sat1" - }, - "kaloo.ga": { - "name": "Kalooga", - "categoryId": 4, - "url": "https://www.kalooga.com/", - "companyId": "kalooga" - }, - "kalooga_widget": { - "name": "Kalooga Widget", - "categoryId": 4, - "url": "http://kalooga.com/", - "companyId": "kalooga" - }, - "kaltura": { - "name": "Kaltura", - "categoryId": 0, - "url": "http://corp.kaltura.com/", - "companyId": "kaltura" - }, - "kameleoon": { - "name": "Kameleoon", - "categoryId": 6, - "url": "http://www.kameleoon.com/", - "companyId": "kameleoon" - }, - "kampyle": { - "name": "Medallia", - "categoryId": 2, - "url": "http://www.kampyle.com/", - "companyId": "medallia" - }, - "kanoodle": { - "name": "Kanoodle", - "categoryId": 4, - "url": "http://www.kanoodle.com/", - "companyId": "kanoodle" - }, - "kantar_media": { - "name": "Kantar Media", - "categoryId": 4, - "url": "https://www.kantarmedia.com/", - "companyId": "wpp" - }, - "karambasecurity": { - "name": "Karamba Security", - "categoryId": 8, - "url": "https://karambasecurity.com/", - "companyId": "karambasecurity", - "source": "AdGuard" - }, - "kargo": { - "name": "Kargo", - "categoryId": 4, - "url": "http://www.kargo.com/", - "companyId": "kargo" - }, - "kaspersky-labs.com": { - "name": "Kaspersky Labs", - "categoryId": 12, - "url": "https://www.kaspersky.com/", - "companyId": "AO Kaspersky Lab" - }, - "kataweb.it": { - "name": "KataWeb", - "categoryId": 4, - "url": "http://www.kataweb.it/", - "companyId": null - }, - "katchup": { - "name": "Katchup", - "categoryId": 4, - "url": "http://www.katchup.fr/", - "companyId": "katchup" - }, - "kauli": { - "name": "Kauli", - "categoryId": 4, - "url": "http://kau.li/", - "companyId": "kauli" - }, - "kavanga": { - "name": "Kavanga", - "categoryId": 4, - "url": "http://kavanga.ru/", - "companyId": "kavanga" - }, - "kayo_sports": { - "name": "Kayo Sports", - "categoryId": 0, - "url": "https://kayosports.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "keen_io": { - "name": "Keen IO", - "categoryId": 6, - "url": "https://keen.io", - "companyId": "keen_io" - }, - "kelkoo": { - "name": "Kelkoo", - "categoryId": 4, - "url": "http://www.kelkoo.com/", - "companyId": "kelkoo" - }, - "kenshoo": { - "name": "Kenshoo", - "categoryId": 6, - "url": "http://www.kenshoo.com/", - "companyId": "kenshoo" - }, - "keymetric": { - "name": "KeyMetric", - "categoryId": 6, - "url": "http://keymetric.net/", - "companyId": "keymetric" - }, - "keytiles": { - "name": "Keytiles", - "categoryId": 6, - "url": "http://keytiles.com/", - "companyId": "keytiles" - }, - "keywee": { - "name": "Keywee", - "categoryId": 6, - "url": "https://keywee.co/", - "companyId": "keywee" - }, - "keywordmax": { - "name": "KeywordMax", - "categoryId": 4, - "url": "http://www.keywordmax.com/", - "companyId": "digital_river" - }, - "khoros": { - "name": "Khoros", - "categoryId": 7, - "url": "http://www.massrelevance.com/", - "companyId": "khoros" - }, - "khzbeucrltin.com": { - "name": "khzbeucrltin.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "kickfactory": { - "name": "Kickfactory", - "categoryId": 4, - "url": "https://kickfactory.com/", - "companyId": "kickfactory" - }, - "kickfire": { - "name": "Kickfire", - "categoryId": 4, - "url": "http://www.visistat.com/", - "companyId": "kickfire" - }, - "kik": { - "name": "Kik", - "categoryId": 7, - "url": "https://kik.com/", - "companyId": "medialab", - "source": "AdGuard" - }, - "king.com": { - "name": "King.com", - "categoryId": 4, - "url": "http://www.king.com/", - "companyId": "king.com" - }, - "king_com": { - "name": "King.com", - "categoryId": 8, - "url": "https://king.com/", - "companyId": "activision_blizzard" - }, - "kinja.com": { - "name": "Kinja", - "categoryId": 6, - "url": "https://kinja.com/", - "companyId": "gizmodo" - }, - "kiosked": { - "name": "Kiosked", - "categoryId": 4, - "url": "http://www.kiosked.com/", - "companyId": "kiosked" - }, - "kissmetrics.com": { - "name": "Kissmetrics", - "categoryId": 6, - "url": "https://www.kissmetrics.com/", - "companyId": "kissmetrics" - }, - "kitara_media": { - "name": "Kitara Media", - "categoryId": 4, - "url": "http://www.kitaramedia.com/", - "companyId": "kitara_media" - }, - "kixer": { - "name": "Kixer", - "categoryId": 4, - "url": "http://www.kixer.com", - "companyId": "kixer" - }, - "klarna.com": { - "name": "Klarna", - "categoryId": 2, - "url": "https://www.klarna.com/", - "companyId": null - }, - "klaviyo": { - "name": "Klaviyo", - "categoryId": 6, - "url": "https://www.klaviyo.com/", - "companyId": "klaviyo" - }, - "klikki": { - "name": "Klikki", - "categoryId": 4, - "url": "http://www.klikki.com/", - "companyId": "klikki" - }, - "kliksaya": { - "name": "KlikSaya", - "categoryId": 4, - "url": "http://www.kliksaya.com", - "companyId": "kliksaya" - }, - "kmeleo": { - "name": "Kméléo", - "categoryId": 4, - "url": "http://www.6peo.com/", - "companyId": "6peo" - }, - "knoopstat": { - "name": "Knoopstat", - "categoryId": 6, - "url": "http://www.knoopstat.nl", - "companyId": "knoopstat" - }, - "knotch": { - "name": "Knotch", - "categoryId": 2, - "url": "http://knotch.it", - "companyId": "knotch" - }, - "komoona": { - "name": "Komoona", - "categoryId": 4, - "url": "http://www.komoona.com/", - "companyId": "komoona" - }, - "kontera_contentlink": { - "name": "Kontera ContentLink", - "categoryId": 4, - "url": "http://www.kontera.com/", - "companyId": "singtel" - }, - "kontextr": { - "name": "Kontextr", - "categoryId": 4, - "url": "https://www.kontextr.com/", - "companyId": "kontext" - }, - "kontextua": { - "name": "Kontextua", - "categoryId": 4, - "url": "http://www.kontextua.com/", - "companyId": "kontextua" - }, - "korrelate": { - "name": "Korrelate", - "categoryId": 4, - "url": "http://korrelate.com/", - "companyId": "korrelate" - }, - "kortx": { - "name": "Kortx", - "categoryId": 6, - "url": "http://www.kortx.io/", - "companyId": "kortx" - }, - "kount": { - "name": "Kount", - "categoryId": 6, - "url": "https://kount.com/", - "companyId": null - }, - "krux_digital": { - "name": "Salesforce DMP", - "categoryId": 4, - "url": "https://www.salesforce.com/products/marketing-cloud/data-management/?mc=DMP", - "companyId": "salesforce" - }, - "kupona": { - "name": "Kupona", - "categoryId": 4, - "url": "http://www.kupona-media.de/en/retargeting-and-performance-media-width-kupona", - "companyId": "kupona" - }, - "kxcdn.com": { - "name": "Keycdn", - "categoryId": 9, - "url": "https://www.keycdn.com/", - "companyId": null - }, - "kyto": { - "name": "Kyto", - "categoryId": 6, - "url": "https://www.kyto.com/", - "companyId": "kyto" - }, - "ladsp.com": { - "name": "Logicad", - "categoryId": 4, - "url": "https://www.logicad.com/", - "companyId": "logicad" - }, - "lanista_concepts": { - "name": "Lanista Concepts", - "categoryId": 4, - "url": "http://lanistaconcepts.com/", - "companyId": "lanista_concepts" - }, - "latimes": { - "name": "Los Angeles Times", - "categoryId": 8, - "url": "http://www.latimes.com/", - "companyId": "latimes" - }, - "launch_darkly": { - "name": "Launch Darkly", - "categoryId": 5, - "url": "https://launchdarkly.com/index.html", - "companyId": "launch_darkly" - }, - "launchbit": { - "name": "LaunchBit", - "categoryId": 4, - "url": "https://www.launchbit.com/", - "companyId": "launchbit" - }, - "launchpad": { - "name": "Launchpad", - "categoryId": 8, - "url": "https://launchpad.net/", - "companyId": "canonical", - "source": "AdGuard" - }, - "layer-ad.org": { - "name": "Layer-ADS.net", - "categoryId": 4, - "url": "http://layer-ads.net/", - "companyId": null - }, - "lazada": { - "name": "Lazada", - "categoryId": 4, - "url": "https://www.lazada.com/", - "companyId": "lazada" - }, - "lcx_digital": { - "name": "LCX Digital", - "categoryId": 4, - "url": "http://www.lcx.com/", - "companyId": "lcx_digital" - }, - "le_monde.fr": { - "name": "Le Monde.fr", - "categoryId": 8, - "url": "http://www.lemonde.fr/", - "companyId": "le_monde.fr" - }, - "lead_liaison": { - "name": "Lead Liaison", - "categoryId": 6, - "url": "https://www.leadliaison.com", - "companyId": "lead_liaison" - }, - "leadback": { - "name": "Leadback", - "categoryId": 6, - "url": "http://leadback.ru/?utm_source=leadback_widget&utm_medium=eas-balt.ru&utm_campaign=self_ad", - "companyId": "leadback" - }, - "leaddyno": { - "name": "LeadDyno", - "categoryId": 4, - "url": "http://www.leaddyno.com", - "companyId": "leaddyno" - }, - "leadforensics": { - "name": "LeadForensics", - "categoryId": 4, - "url": "http://www.leadforensics.com/", - "companyId": "lead_forensics" - }, - "leadgenic": { - "name": "LeadGENIC", - "categoryId": 4, - "url": "https://leadgenic.com/", - "companyId": "leadgenic" - }, - "leadhit": { - "name": "LeadHit", - "categoryId": 2, - "url": "http://leadhit.ru/", - "companyId": "leadhit" - }, - "leadin": { - "name": "Leadin", - "categoryId": 6, - "url": "https://www.hubspot.com/", - "companyId": "hubspot" - }, - "leading_reports": { - "name": "Leading Reports", - "categoryId": 4, - "url": "https://www.leadingreports.de/", - "companyId": "leading_reports" - }, - "leadinspector": { - "name": "LeadInspector", - "categoryId": 6, - "url": "https://www.leadinspector.de/", - "companyId": "leadinspector" - }, - "leadlander": { - "name": "LeadLander", - "categoryId": 6, - "url": "http://www.leadlander.com/", - "companyId": "leadlander" - }, - "leadlife": { - "name": "LeadLife", - "categoryId": 2, - "url": "http://leadlife.com/", - "companyId": "leadlife" - }, - "leadpages": { - "name": "Leadpages", - "categoryId": 6, - "url": "https://www.leadpages.net/", - "companyId": "leadpages" - }, - "leadplace": { - "name": "LeadPlace", - "categoryId": 6, - "url": "https://temelio.com", - "companyId": "leadplace" - }, - "leads_by_web.com": { - "name": "Leads by Web.com", - "categoryId": 4, - "url": "http://www.leadsbyweb.com", - "companyId": "web.com_group" - }, - "leadscoreapp": { - "name": "LeadScoreApp", - "categoryId": 2, - "url": "http://leadscoreapp.com", - "companyId": "leadscoreapp" - }, - "leadsius": { - "name": "Leadsius", - "categoryId": 4, - "url": "http://www.leadsius.com/", - "companyId": "leadsius" - }, - "leady": { - "name": "Leady", - "categoryId": 4, - "url": "http://www.leady.cz/", - "companyId": "leady" - }, - "leiki": { - "name": "Leiki", - "categoryId": 4, - "url": "http://www.leiki.com", - "companyId": "leiki" - }, - "lengow": { - "name": "Lengow", - "categoryId": 4, - "url": "http://www.lengow.com/", - "companyId": "lengow" - }, - "lenmit.com": { - "name": "lenmit.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lentainform.com": { - "name": "lentainform.com", - "categoryId": 8, - "url": "https://www.lentainform.com/", - "companyId": null - }, - "lenua.de": { - "name": "Lenua System", - "categoryId": 4, - "url": "http://lenua.de/", - "companyId": "synatix" - }, - "let_reach": { - "name": "Let Reach", - "categoryId": 2, - "url": "https://letreach.com/", - "companyId": "let_reach" - }, - "lets_encrypt": { - "name": "Let's Encrypt", - "categoryId": 5, - "url": "https://letsencrypt.org/", - "companyId": "isrg", - "source": "AdGuard" - }, - "letv": { - "name": "LeTV", - "categoryId": 6, - "url": "http://www.le.com/", - "companyId": "letv" - }, - "level3_communications": { - "name": "Level 3 Communications, Inc.", - "categoryId": 8, - "url": "http://www.level3.com/en/", - "companyId": "level3_communications" - }, - "lgads": { - "name": "LG Ad Solutions", - "categoryId": 4, - "url": "https://lgads.tv/", - "companyId": "lgcorp", - "source": "AdGuard" - }, - "lgtv": { - "name": "LG TV", - "categoryId": 8, - "url": "https://www.lg.com/", - "companyId": "lgcorp", - "source": "AdGuard" - }, - "licensebuttons.net": { - "name": "licensebuttons.net", - "categoryId": 9, - "url": "https://licensebuttons.net/", - "companyId": null - }, - "lifestreet_media": { - "name": "LifeStreet Media", - "categoryId": 4, - "url": "http://lifestreetmedia.com/", - "companyId": "lifestreet_media" - }, - "ligatus": { - "name": "Ligatus", - "categoryId": 4, - "url": "http://www.ligatus.com/", - "companyId": "outbrain" - }, - "limk": { - "name": "Limk", - "categoryId": 4, - "url": "https://limk.com/", - "companyId": "limk" - }, - "line_apps": { - "name": "Line", - "categoryId": 6, - "url": "https://line.me/en-US/", - "companyId": "line" - }, - "linezing": { - "name": "LineZing", - "categoryId": 4, - "url": "http://www.linezing.com/", - "companyId": "linezing" - }, - "linkbucks": { - "name": "Linkbucks", - "categoryId": 4, - "url": "http://www.linkbucks.com/", - "companyId": "linkbucks" - }, - "linkconnector": { - "name": "LinkConnector", - "categoryId": 4, - "url": "http://www.linkconnector.com", - "companyId": "linkconnector" - }, - "linkedin": { - "name": "LinkedIn", - "categoryId": 8, - "url": "https://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_ads": { - "name": "LinkedIn Ads", - "categoryId": 4, - "url": "http://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_analytics": { - "name": "LinkedIn Analytics", - "categoryId": 6, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "linkedin_marketing_solutions": { - "name": "LinkedIn Marketing Solutions", - "categoryId": 4, - "url": "https://business.linkedin.com/marketing-solutions", - "companyId": "microsoft" - }, - "linkedin_widgets": { - "name": "LinkedIn Widgets", - "categoryId": 7, - "url": "https://www.linkedin.com", - "companyId": "microsoft" - }, - "linker": { - "name": "Linker", - "categoryId": 4, - "url": "https://linker.hr/", - "companyId": "linker" - }, - "linkprice": { - "name": "LinkPrice", - "categoryId": 4, - "url": "http://www.linkprice.com/", - "companyId": "linkprice" - }, - "linkpulse": { - "name": "Linkpulse", - "categoryId": 6, - "url": "http://www.linkpulse.com/", - "companyId": "linkpulse" - }, - "linksalpha": { - "name": "LinksAlpha", - "categoryId": 7, - "url": "http://www.linksalpha.com", - "companyId": "linksalpha" - }, - "linksmart": { - "name": "LinkSmart", - "categoryId": 4, - "url": "http://www.linksmart.com/", - "companyId": "sovrn" - }, - "linkstorm": { - "name": "Linkstorm", - "categoryId": 2, - "url": "http://www.linkstorms.com/", - "companyId": "linkstorm" - }, - "linksynergy.com": { - "name": "Rakuten LinkShare", - "categoryId": 4, - "url": "https://rakutenmarketing.com/affiliate", - "companyId": "rakuten" - }, - "linkup": { - "name": "LinkUp", - "categoryId": 6, - "url": "http://www.linkup.com/", - "companyId": "linkup" - }, - "linkwise": { - "name": "Linkwise", - "categoryId": 4, - "url": "http://linkwi.se/global-en/", - "companyId": "linkwise" - }, - "linkwithin": { - "name": "LinkWithin", - "categoryId": 7, - "url": "http://www.linkwithin.com/", - "companyId": "linkwithin" - }, - "liquidm_technology_gmbh": { - "name": "LiquidM Technology GmbH", - "categoryId": 4, - "url": "https://liquidm.com/", - "companyId": "liquidm" - }, - "liqwid": { - "name": "Liqwid", - "categoryId": 4, - "url": "https://liqwid.com/", - "companyId": "liqwid" - }, - "list.ru": { - "name": "Rating@Mail.Ru", - "categoryId": 7, - "url": "http://list.ru/", - "companyId": "megafon" - }, - "listrak": { - "name": "Listrak", - "categoryId": 2, - "url": "http://www.listrak.com/", - "companyId": "listrak" - }, - "live2support": { - "name": "Live2Support", - "categoryId": 2, - "url": "http://www.live2support.com/", - "companyId": "live2support" - }, - "live800": { - "name": "Live800", - "categoryId": 2, - "url": "http://live800.com", - "companyId": "live800" - }, - "live_agent": { - "name": "Live Agent", - "categoryId": 2, - "url": "https://www.ladesk.com/", - "companyId": "liveagent" - }, - "live_help_now": { - "name": "Live Help Now", - "categoryId": 2, - "url": "http://www.livehelpnow.net/", - "companyId": "live_help_now" - }, - "live_intent": { - "name": "Live Intent", - "categoryId": 6, - "url": "http://www.liveintent.com/", - "companyId": "liveintent" - }, - "live_journal": { - "name": "Live Journal", - "categoryId": 6, - "url": "http://www.livejournal.com/", - "companyId": "livejournal" - }, - "liveadexchanger.com": { - "name": "liveadexchanger.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "livechat": { - "name": "LiveChat", - "categoryId": 2, - "url": "http://www.livechatinc.com", - "companyId": "livechat" - }, - "livechatnow": { - "name": "LiveChatNow", - "categoryId": 2, - "url": "http://www.livechatnow.com/", - "companyId": "livechatnow!" - }, - "liveclicker": { - "name": "Liveclicker", - "categoryId": 2, - "url": "http://www.liveclicker.com", - "companyId": "liveclicker" - }, - "livecounter": { - "name": "Livecounter", - "categoryId": 6, - "url": "http://www.livecounter.dk/", - "companyId": "livecounter" - }, - "livefyre": { - "name": "Livefyre", - "categoryId": 1, - "url": "http://www.livefyre.com/", - "companyId": "adobe" - }, - "liveinternet": { - "name": "LiveInternet", - "categoryId": 1, - "url": "http://www.liveinternet.ru/", - "companyId": "liveinternet" - }, - "liveperson": { - "name": "LivePerson", - "categoryId": 2, - "url": "http://www.liveperson.com/", - "companyId": "liveperson" - }, - "liveramp": { - "name": "LiveRamp", - "categoryId": 4, - "url": "https://liveramp.com/", - "companyId": "acxiom" - }, - "livere": { - "name": "LiveRe", - "categoryId": 7, - "url": "http://www.livere.com/", - "companyId": "livere" - }, - "livesportmedia.eu": { - "name": "Livesport Media", - "categoryId": 8, - "url": "http://www.livesportmedia.eu/", - "companyId": null - }, - "livestream": { - "name": "Livestream", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "livetex.ru": { - "name": "LiveTex", - "categoryId": 2, - "url": "https://livetex.ru/", - "companyId": "livetex" - }, - "lkqd": { - "name": "LKQD", - "categoryId": 4, - "url": "http://www.lkqd.com/", - "companyId": "nexstar" - }, - "loadbee.com": { - "name": "Loadbee", - "categoryId": 4, - "url": "https://company.loadbee.com/de/loadbee-home", - "companyId": null - }, - "loadercdn.com": { - "name": "loadercdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "loadsource.org": { - "name": "loadsource.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "localytics": { - "name": "Localytics", - "categoryId": 101, - "url": "https://uplandsoftware.com/localytics/", - "companyId": "upland", - "source": "AdGuard" - }, - "lockerdome": { - "name": "LockerDome", - "categoryId": 7, - "url": "https://lockerdome.com", - "companyId": "lockerdome" - }, - "lockerz_share": { - "name": "AddToAny", - "categoryId": 7, - "url": "http://www.addtoany.com/", - "companyId": "addtoany" - }, - "logan_media": { - "name": "Logan Media", - "categoryId": 6, - "url": "http://loganmedia.mobi/", - "companyId": "logan_media" - }, - "logdna": { - "name": "LogDNA", - "categoryId": 4, - "url": "http://www.answerbook.com/", - "companyId": "logdna" - }, - "loggly": { - "name": "Loggly", - "categoryId": 6, - "url": "http://loggly.com/", - "companyId": "loggly" - }, - "logly": { - "name": "logly", - "categoryId": 6, - "url": "http://logly.co.jp/", - "companyId": "logly" - }, - "logsss.com": { - "name": "logsss.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lomadee": { - "name": "Lomadee", - "categoryId": 4, - "url": "http://lomadee.com", - "companyId": "lomadee" - }, - "longtail_video_analytics": { - "name": "JW Player Analytics", - "categoryId": 4, - "url": "http://www.longtailvideo.com/", - "companyId": "jw_player" - }, - "loomia": { - "name": "Loomia", - "categoryId": 4, - "url": "http://www.loomia.com/", - "companyId": "loomia" - }, - "loop11": { - "name": "Loop11", - "categoryId": 6, - "url": "https://360i.com/", - "companyId": "360i" - }, - "loopfuse_oneview": { - "name": "LoopFuse OneView", - "categoryId": 4, - "url": "http://www.loopfuse.com/", - "companyId": "loopfuse" - }, - "lotame": { - "name": "Lotame", - "categoryId": 4, - "url": "http://www.lotame.com/", - "companyId": "lotame" - }, - "lottex_inc": { - "name": "vidcpm.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lucid": { - "name": "Lucid", - "categoryId": 4, - "url": "https://luc.id/", - "companyId": "luc.id" - }, - "lucid_media": { - "name": "Lucid Media", - "categoryId": 4, - "url": "http://www.lucidmedia.com/", - "companyId": "singtel" - }, - "lucini": { - "name": "Lucini", - "categoryId": 4, - "url": "http://www.lucinilucini.com/", - "companyId": "lucini_&_lucini_communications" - }, - "lucky_orange": { - "name": "Lucky Orange", - "categoryId": 6, - "url": "http://www.luckyorange.com/", - "companyId": "lucky_orange" - }, - "luckypushh.com": { - "name": "luckypushh.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lxr100": { - "name": "LXR100", - "categoryId": 4, - "url": "http://www.netelixir.com/lxr100_PPC_management_tool.html", - "companyId": "netelixir" - }, - "lynchpin_analytics": { - "name": "Lynchpin Analytics", - "categoryId": 4, - "url": "http://www.lynchpin.com/", - "companyId": "lynchpin_analytics" - }, - "lytics": { - "name": "Lytics", - "categoryId": 6, - "url": "https://www.lytics.com/", - "companyId": "lytics" - }, - "lyuoaxruaqdo.com": { - "name": "lyuoaxruaqdo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "m-pathy": { - "name": "m-pathy", - "categoryId": 4, - "url": "http://www.m-pathy.com/", - "companyId": "m-pathy" - }, - "m._p._newmedia": { - "name": "M. P. NEWMEDIA", - "categoryId": 4, - "url": "http://www.mp-newmedia.com/", - "companyId": "sticky" - }, - "m4n": { - "name": "M4N", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "mad_ads_media": { - "name": "Mad Ads Media", - "categoryId": 4, - "url": "http://www.madadsmedia.com/", - "companyId": "mad_ads_media" - }, - "madeleine.de": { - "name": "madeleine.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "madison_logic": { - "name": "Madison Logic", - "categoryId": 4, - "url": "http://www.madisonlogic.com/", - "companyId": "madison_logic" - }, - "madnet": { - "name": "MADNET", - "categoryId": 4, - "url": "http://madnet.ru/en", - "companyId": "madnet" - }, - "mads": { - "name": "MADS", - "categoryId": 4, - "url": "http://www.mads.com/", - "companyId": "mads" - }, - "magna_advertise": { - "name": "Magna Advertise", - "categoryId": 4, - "url": "http://magna.ru/", - "companyId": "magna_advertise" - }, - "magnetic": { - "name": "Magnetic", - "categoryId": 4, - "url": "http://www.magnetic.is", - "companyId": "magnetic" - }, - "magnetise_group": { - "name": "Magnetise Group", - "categoryId": 4, - "url": "http://magnetisegroup.com/", - "companyId": "magnetise_group" - }, - "magnify360": { - "name": "Magnify360", - "categoryId": 6, - "url": "http://www.magnify360.com/", - "companyId": "magnify360" - }, - "magnuum.com": { - "name": "magnuum.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mail.ru_banner": { - "name": "Mail.Ru Banner Network", - "categoryId": 4, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mail.ru_counter": { - "name": "Mail.Ru Counter", - "categoryId": 2, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mail.ru_group": { - "name": "Mail.Ru Group", - "categoryId": 7, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mailchimp_tracking": { - "name": "MailChimp Tracking", - "categoryId": 4, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "mailerlite.com": { - "name": "Mailerlite", - "categoryId": 10, - "url": "https://www.mailerlite.com/", - "companyId": "mailerlite" - }, - "mailtrack.io": { - "name": "MailTrack.io", - "categoryId": 4, - "url": "https://mailtrack.io", - "companyId": "mailtrack" - }, - "mainadv": { - "name": "mainADV", - "categoryId": 4, - "url": "http://www.mainadv.com/", - "companyId": "mainadv" - }, - "makazi": { - "name": "Makazi", - "categoryId": 4, - "url": "http://www.makazi.com/en/", - "companyId": "makazi_group" - }, - "makeappdev.xyz": { - "name": "makeappdev.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "makesource.cool": { - "name": "makesource.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mango": { - "name": "Mango", - "categoryId": 4, - "url": "https://www.mango-office.ru/", - "companyId": "mango_office" - }, - "manycontacts": { - "name": "ManyContacts", - "categoryId": 4, - "url": "https://www.manycontacts.com/", - "companyId": "manycontacts" - }, - "mapandroute.de": { - "name": "Map and Route", - "categoryId": 2, - "url": "http://www.mapandroute.de/", - "companyId": null - }, - "mapbox": { - "name": "Mapbox", - "categoryId": 2, - "url": "https://www.mapbox.com/", - "companyId": null - }, - "maploco": { - "name": "MapLoco", - "categoryId": 4, - "url": "http://www.maploco.com/", - "companyId": "maploco" - }, - "marchex": { - "name": "Marchex", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "marchex" - }, - "marimedia": { - "name": "Marimedia", - "categoryId": 4, - "url": "http://www.marimedia.net/", - "companyId": "tremor_video" - }, - "marin_search_marketer": { - "name": "Marin Search Marketer", - "categoryId": 4, - "url": "http://www.marinsoftware.com/", - "companyId": "marin_software" - }, - "mark_+_mini": { - "name": "Mark & Mini", - "categoryId": 4, - "url": "http://www.markandmini.com/index.cfm", - "companyId": "edm_group" - }, - "market_thunder": { - "name": "Market Thunder", - "categoryId": 4, - "url": "https://www.makethunder.com/", - "companyId": "market_thunder" - }, - "marketgid": { - "name": "MarketGid", - "categoryId": 4, - "url": "http://www.mgid.com/", - "companyId": "marketgid_usa" - }, - "marketing_automation": { - "name": "Marketing Automation", - "categoryId": 4, - "url": "https://en.frodx.com", - "companyId": "frodx" - }, - "marketo": { - "name": "Marketo", - "categoryId": 4, - "url": "http://www.marketo.com/", - "companyId": "marketo" - }, - "markmonitor": { - "name": "MarkMonitor", - "categoryId": 4, - "url": "https://www.markmonitor.com/", - "companyId": "markmonitor", - "source": "AdGuard" - }, - "marktest": { - "name": "Marktest", - "categoryId": 4, - "url": "http://www.marktest.com/", - "companyId": "marktest_group" - }, - "marshadow.io": { - "name": "marshadow.io", - "categoryId": 4, - "url": null, - "companyId": null - }, - "martini_media": { - "name": "Martini Media", - "categoryId": 4, - "url": "http://martinimediainc.com/", - "companyId": "martini_media" - }, - "maru-edu": { - "name": "Maru-EDU", - "categoryId": 2, - "url": "https://www.maruedr.com", - "companyId": "maruedr" - }, - "marvellous_machine": { - "name": "Marvellous Machine", - "categoryId": 6, - "url": "https://www.marvellousmachine.net/", - "companyId": "marvellous_machine" - }, - "master_banner_network": { - "name": "Master Banner Network", - "categoryId": 4, - "url": "http://www.mbn.com.ua/", - "companyId": "master_banner_network" - }, - "mastertarget": { - "name": "MasterTarget", - "categoryId": 4, - "url": "http://mastertarget.ru/", - "companyId": "mastertarget" - }, - "matelso": { - "name": "Matelso", - "categoryId": 6, - "url": "https://www.matelso.de", - "companyId": "matelso" - }, - "mather_analytics": { - "name": "Mather Analytics", - "categoryId": 6, - "url": "https://www.mathereconomics.com/", - "companyId": "mather_economics" - }, - "mathjax.org": { - "name": "MathJax", - "categoryId": 9, - "url": "https://www.mathjax.org/", - "companyId": null - }, - "matiro": { - "name": "Matiro", - "categoryId": 6, - "url": "http://matiro.com/", - "companyId": "matiro" - }, - "matomo": { - "name": "Matomo", - "categoryId": 6, - "url": "https://matomo.org/s", - "companyId": "matomo" - }, - "matomy_market": { - "name": "Matomy Market", - "categoryId": 4, - "url": "http://www.matomymarket.com/", - "companyId": "matomy_media" - }, - "matrix": { - "name": "Matrix", - "categoryId": 5, - "url": "https://matrix.org/", - "companyId": "matrix", - "source": "AdGuard" - }, - "maxbounty": { - "name": "MaxBounty", - "categoryId": 5, - "url": "http://www.maxbounty.com/", - "companyId": "maxbounty" - }, - "maxcdn": { - "name": "MaxCDN", - "categoryId": 9, - "url": "https://www.maxcdn.com/", - "companyId": null - }, - "maxlab": { - "name": "Maxlab", - "categoryId": 4, - "url": "http://maxlab.ru", - "companyId": "maxlab" - }, - "maxmind": { - "name": "MaxMind", - "categoryId": 4, - "url": "http://www.maxmind.com/", - "companyId": "maxmind" - }, - "maxonclick_com": { - "name": "maxonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "maxpoint_interactive": { - "name": "MaxPoint Interactive", - "categoryId": 4, - "url": "http://www.maxpointinteractive.com/", - "companyId": "maxpoint_interactive" - }, - "maxymiser": { - "name": "Oracle Maxymiser", - "categoryId": 4, - "url": "https://www.oracle.com/marketingcloud/products/testing-and-optimization/index.html", - "companyId": "oracle" - }, - "mbr_targeting": { - "name": "mbr targeting", - "categoryId": 4, - "url": "https://mbr-targeting.com/", - "companyId": "stroer" - }, - "mbuy": { - "name": "MBuy", - "categoryId": 4, - "url": "http://www.adbuyer.com/", - "companyId": "mbuy" - }, - "mcabi": { - "name": "mCabi", - "categoryId": 4, - "url": "https://mcabi.mcloudglobal.com/#", - "companyId": "mcabi" - }, - "mcafee_secure": { - "name": "McAfee Secure", - "categoryId": 5, - "url": "http://www.mcafeesecure.com/us/", - "companyId": "mcafee" - }, - "mconet": { - "name": "MCOnet", - "categoryId": 4, - "url": "http://mconet.biz/", - "companyId": "mconet" - }, - "mdotlabs": { - "name": "MdotLabs", - "categoryId": 4, - "url": "http://www.mdotlabs.com/", - "companyId": "comscore" - }, - "media-clic": { - "name": "Media-clic", - "categoryId": 4, - "url": "http://www.media-clic.com/", - "companyId": "media-click" - }, - "media-imdb.com": { - "name": "IMDB CDN", - "categoryId": 9, - "url": "https://www.imdb.com/", - "companyId": "amazon_associates" - }, - "media.net": { - "name": "Media.net", - "categoryId": 4, - "url": "http://www.media.net/", - "companyId": "media.net" - }, - "media_impact": { - "name": "Media Impact", - "categoryId": 4, - "url": "https://mediaimpact.de/index.html", - "companyId": "media_impact" - }, - "media_innovation_group": { - "name": "Xaxis", - "categoryId": 4, - "url": "https://www.xaxis.com/", - "companyId": "media_innovation_group" - }, - "media_today": { - "name": "Media Today", - "categoryId": 4, - "url": "http://mediatoday.ru/", - "companyId": "media_today" - }, - "mediaad": { - "name": "MediaAd", - "categoryId": 4, - "url": "https://mediaad.org", - "companyId": "mediaad" - }, - "mediaglu": { - "name": "MediaGlu", - "categoryId": 4, - "url": "https://www.mediaglu.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "mediahub": { - "name": "MediaHub", - "categoryId": 4, - "url": "http://www.mediahub.com/", - "companyId": "mediahub" - }, - "medialab": { - "name": "MediaLab.AI Inc.", - "categoryId": 8, - "url": "https://medialab.la/", - "companyId": "medialab", - "source": "AdGuard" - }, - "medialand": { - "name": "Medialand", - "categoryId": 4, - "url": "http://medialand.ru", - "companyId": "medialand" - }, - "medialead": { - "name": "Medialead", - "categoryId": 4, - "url": "https://www.medialead.de/", - "companyId": "the_reach_group" - }, - "mediamath": { - "name": "MediaMath", - "categoryId": 4, - "url": "http://www.mediamath.com/", - "companyId": "mediamath" - }, - "mediametrics": { - "name": "Mediametrics", - "categoryId": 7, - "url": "http://mediametrics.ru", - "companyId": "mediametrics" - }, - "median": { - "name": "Median", - "categoryId": 4, - "url": "http://median.hu", - "companyId": "median" - }, - "mediapass": { - "name": "MediaPass", - "categoryId": 4, - "url": "http://www.mediapass.com/", - "companyId": "mediapass" - }, - "mediapost_communications": { - "name": "Mediapost Communications", - "categoryId": 6, - "url": "https://vrm.mediapostcommunication.net/", - "companyId": "mediapost_communications" - }, - "mediarithmics.com": { - "name": "Mediarithmics", - "categoryId": 4, - "url": "http://www.mediarithmics.com/en/", - "companyId": "mediarithmics" - }, - "mediascope": { - "name": "Mediascope", - "categoryId": 6, - "url": "http://mediascope.net/", - "companyId": "mediascope" - }, - "mediashakers": { - "name": "MediaShakers", - "categoryId": 4, - "url": "http://www.mediashakers.com/", - "companyId": "mediashakers" - }, - "mediashift": { - "name": "MediaShift", - "categoryId": 4, - "url": "http://www.mediashift.com/", - "companyId": "mediashift" - }, - "mediator.media": { - "name": "Mediator", - "categoryId": 6, - "url": "https://mediator.media/", - "companyId": "mycom_bv" - }, - "mediav": { - "name": "MediaV", - "categoryId": 4, - "url": "https://www.mediav.com/", - "companyId": "mediav" - }, - "mediawhiz": { - "name": "Mediawhiz", - "categoryId": 4, - "url": "http://www.mediawhiz.com/", - "companyId": "matomy_media" - }, - "medigo": { - "name": "Medigo", - "categoryId": 4, - "url": "https://www.mediego.com/en/", - "companyId": "mediego" - }, - "medley": { - "name": "Medley", - "categoryId": 4, - "url": "http://medley.com/", - "companyId": "friendfinder_networks" - }, - "medyanet": { - "name": "MedyaNet", - "categoryId": 4, - "url": "http://www.medyanet.com.tr/", - "companyId": "medyanet" - }, - "meebo_bar": { - "name": "Meebo Bar", - "categoryId": 7, - "url": "http://bar.meebo.com/", - "companyId": "google" - }, - "meetrics": { - "name": "Meetrics", - "categoryId": 4, - "url": "http://www.meetrics.de/", - "companyId": "meetrics" - }, - "megaindex": { - "name": "MegaIndex", - "categoryId": 4, - "url": "http://www.megaindex.ru", - "companyId": "megaindex" - }, - "meganz": { - "name": "Mega Ltd.", - "categoryId": 8, - "url": "https://mega.io/", - "companyId": "meganz", - "source": "AdGuard" - }, - "mein-bmi.com": { - "name": "mein-bmi.com", - "categoryId": 12, - "url": "https://www.mein-bmi.com/", - "companyId": null - }, - "melissa": { - "name": "Melissa", - "categoryId": 6, - "url": "https://www.melissa.com/", - "companyId": "melissa_global_intelligence" - }, - "melt": { - "name": "Melt", - "categoryId": 4, - "url": "http://meltdsp.com/", - "companyId": "melt" - }, - "menlo": { - "name": "Menlo", - "categoryId": 4, - "url": "http://www.menlotechnologies.cn/", - "companyId": "menlotechnologies" - }, - "mentad": { - "name": "MentAd", - "categoryId": 4, - "url": "http://www.mentad.com/", - "companyId": "mentad" - }, - "mercado": { - "name": "Mercado", - "categoryId": 4, - "url": "https://www.mercadolivre.com.br/", - "companyId": "mercado_livre" - }, - "merchantadvantage": { - "name": "MerchantAdvantage", - "categoryId": 4, - "url": "http://www.merchantadvantage.com/channelmanagement.cfm", - "companyId": "merchantadvantage" - }, - "merchenta": { - "name": "Merchenta", - "categoryId": 4, - "url": "http://www.merchenta.com/", - "companyId": "merchenta" - }, - "mercury_media": { - "name": "Mercury Media", - "categoryId": 4, - "url": "http://trackingsoft.com/", - "companyId": "mercury_media" - }, - "merkle_research": { - "name": "Merkle Research", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "merkle_rkg": { - "name": "Merkle RKG", - "categoryId": 6, - "url": "https://www.merkleinc.com/what-we-do/digital-agency-services/rkg-now-fully-integrated-merkle", - "companyId": "dentsu_aegis_network" - }, - "messenger.com": { - "name": "Facebook Messenger", - "categoryId": 7, - "url": "https://messenger.com", - "companyId": "facebook" - }, - "meta_network": { - "name": "Meta Network", - "categoryId": 7, - "url": "http://www.metanetwork.com/", - "companyId": "meta_network" - }, - "metaffiliation.com": { - "name": "Netaffiliation", - "categoryId": 4, - "url": "http://netaffiliation.com/", - "companyId": "kwanko" - }, - "metapeople": { - "name": "Metapeople", - "categoryId": 4, - "url": "http://www.metapeople.com/us/", - "companyId": "metapeople" - }, - "metrigo": { - "name": "Metrigo", - "categoryId": 4, - "url": "http://metrigo.com/", - "companyId": "metrigo" - }, - "metriweb": { - "name": "MetriWeb", - "categoryId": 4, - "url": "http://www.metriware.be/", - "companyId": "metriware" - }, - "miaozhen": { - "name": "Miaozhen", - "categoryId": 4, - "url": "http://miaozhen.com/en/index.html", - "companyId": "miaozhen" - }, - "microad": { - "name": "MicroAd", - "categoryId": 4, - "url": "https://www.microad.co.jp/", - "companyId": "microad" - }, - "microsoft": { - "name": "Microsoft Services", - "categoryId": 8, - "url": "http://www.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_adcenter_conversion": { - "name": "Microsoft adCenter Conversion", - "categoryId": 4, - "url": "https://adcenter.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_analytics": { - "name": "Microsoft Analytics", - "categoryId": 4, - "url": "https://adcenter.microsoft.com", - "companyId": "microsoft" - }, - "microsoft_clarity": { - "name": "Microsoft Clarity", - "categoryId": 6, - "url": "https://clarity.microsoft.com/", - "companyId": "microsoft" - }, - "mindset_media": { - "name": "Mindset Media", - "categoryId": 4, - "url": "http://www.mindset-media.com/", - "companyId": "google" - }, - "mindspark": { - "name": "Mindspark", - "categoryId": 6, - "url": "http://www.mindspark.com/", - "companyId": "iac_apps" - }, - "mindviz_tracker": { - "name": "MindViz Tracker", - "categoryId": 4, - "url": "http://mvtracker.com/", - "companyId": "mindviz" - }, - "minewhat": { - "name": "MineWhat", - "categoryId": 4, - "url": "http://www.minewhat.com", - "companyId": "minewhat" - }, - "mints_app": { - "name": "Mints App", - "categoryId": 2, - "url": "https://mintsapp.io/", - "companyId": "mints_app" - }, - "minute.ly": { - "name": "minute.ly", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "minute.ly_video": { - "name": "minute.ly video", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "mirando": { - "name": "Mirando", - "categoryId": 4, - "url": "http://mirando.de", - "companyId": "mirando" - }, - "mirtesen.ru": { - "name": "mirtesen.ru", - "categoryId": 7, - "url": "https://mirtesen.ru/", - "companyId": null - }, - "mister_bell": { - "name": "Mister Bell", - "categoryId": 4, - "url": "http://misterbell.fr/", - "companyId": "mister_bell" - }, - "mixi": { - "name": "mixi", - "categoryId": 7, - "url": "http://mixi.jp/", - "companyId": "mixi" - }, - "mixpanel": { - "name": "Mixpanel", - "categoryId": 6, - "url": "http://mixpanel.com/", - "companyId": "mixpanel" - }, - "mixpo": { - "name": "Mixpo", - "categoryId": 4, - "url": "http://dynamicvideoad.mixpo.com/", - "companyId": "mixpo" - }, - "mluvii": { - "name": "Mluvii", - "categoryId": 2, - "url": "https://www.mluvii.com", - "companyId": "mluvii" - }, - "mncdn.com": { - "name": "MediaNova CDN", - "categoryId": 9, - "url": "https://www.medianova.com/", - "companyId": null - }, - "moat": { - "name": "Moat", - "categoryId": 4, - "url": "http://www.moat.com/", - "companyId": "oracle" - }, - "mobicow": { - "name": "Mobicow", - "categoryId": 4, - "url": "http://www.mobicow.com/", - "companyId": "mobicow" - }, - "mobify": { - "name": "Mobify", - "categoryId": 4, - "url": "http://www.mobify.com/", - "companyId": "mobify" - }, - "mobtrks.com": { - "name": "mobtrks.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mocean_mobile": { - "name": "mOcean Mobile", - "categoryId": 4, - "url": "http://www.moceanmobile.com/", - "companyId": "pubmatic" - }, - "mochapp": { - "name": "MoChapp", - "categoryId": 2, - "url": "http://www.mochapp.com/", - "companyId": "mochapp" - }, - "modern_impact": { - "name": "Modern Impact", - "categoryId": 4, - "url": "http://www.modernimpact.com/", - "companyId": "modern_impact" - }, - "modernus": { - "name": "Modernus", - "categoryId": 6, - "url": "http://www.modernus.is", - "companyId": "modernus" - }, - "modulepush.com": { - "name": "modulepush.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "mogo_interactive": { - "name": "Mogo Interactive", - "categoryId": 4, - "url": "http://www.mogomarketing.com/", - "companyId": "mogo_interactive" - }, - "mokono_analytics": { - "name": "Mokono Analytics", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "monero_miner": { - "name": "Monero Miner", - "categoryId": 8, - "url": "http://devappgrant.space/", - "companyId": null - }, - "monetate": { - "name": "Monetate", - "categoryId": 6, - "url": "http://monetate.com", - "companyId": "monetate" - }, - "monetize_me": { - "name": "Monetize Me", - "categoryId": 4, - "url": "http://www.monetize-me.com/", - "companyId": "monetize_me" - }, - "moneytizer": { - "name": "Moneytizer", - "categoryId": 4, - "url": "https://www.themoneytizer.com/", - "companyId": "the_moneytizer" - }, - "mongoose_metrics": { - "name": "Mongoose Metrics", - "categoryId": 4, - "url": "http://www.mongoosemetrics.com/", - "companyId": "mongoose_metrics" - }, - "monitis": { - "name": "Monitis", - "categoryId": 6, - "url": "http://www.monitis.com/", - "companyId": "monitis" - }, - "monitus": { - "name": "Monitus", - "categoryId": 6, - "url": "http://www.monitus.net/", - "companyId": "monitus" - }, - "monotype_gmbh": { - "name": "Monotype GmbH", - "categoryId": 9, - "url": "http://www.monotype.com/", - "companyId": "monotype" - }, - "monotype_imaging": { - "name": "Fonts.com Store", - "categoryId": 2, - "url": "https://www.fonts.com/", - "companyId": "monotype" - }, - "monsido": { - "name": "Monsido", - "categoryId": 6, - "url": "https://monsido.com/", - "companyId": "monsido" - }, - "monster_advertising": { - "name": "Monster Advertising", - "categoryId": 4, - "url": "http://www.monster.com/", - "companyId": "monster_worldwide" - }, - "mooxar": { - "name": "Mooxar", - "categoryId": 4, - "url": "http://mooxar.com/", - "companyId": "mooxar" - }, - "mopinion.com": { - "name": "Mopinion", - "categoryId": 2, - "url": "https://mopinion.com/", - "companyId": "mopinion" - }, - "mopub": { - "name": "MoPub", - "categoryId": 4, - "url": "https://www.mopub.com/", - "companyId": "twitter" - }, - "more_communication": { - "name": "More Communication", - "categoryId": 4, - "url": "http://www.more-com.co.jp/", - "companyId": "more_communication" - }, - "moreads": { - "name": "moreAds", - "categoryId": 4, - "url": "https://www.moras.jp", - "companyId": "moreads" - }, - "motigo_webstats": { - "name": "Motigo Webstats", - "categoryId": 7, - "url": "http://webstats.motigo.com/", - "companyId": "motigo" - }, - "motionpoint": { - "name": "MotionPoint", - "categoryId": 6, - "url": "http://www.motionpoint.com/", - "companyId": "motionpoint_corporation" - }, - "mouseflow": { - "name": "Mouseflow", - "categoryId": 6, - "url": "http://mouseflow.com/", - "companyId": "mouseflow" - }, - "mousestats": { - "name": "MouseStats", - "categoryId": 4, - "url": "http://www.mousestats.com/", - "companyId": "mousestats" - }, - "mousetrace": { - "name": "MouseTrace", - "categoryId": 6, - "url": "http://www.mousetrace.com/", - "companyId": "mousetrace" - }, - "mov.ad": { - "name": "Mov.ad ", - "categoryId": 8, - "url": null, - "companyId": null - }, - "movable_ink": { - "name": "Movable Ink", - "categoryId": 2, - "url": "https://movableink.com/", - "companyId": "movable_ink" - }, - "movable_media": { - "name": "Movable Media", - "categoryId": 4, - "url": "http://www.movablemedia.com/", - "companyId": "movable_media" - }, - "moz": { - "name": "Moz", - "categoryId": 8, - "url": "https://moz.com/", - "companyId": null - }, - "mozilla": { - "name": "Mozilla Foundation", - "categoryId": 8, - "url": "https://www.mozilla.org/", - "companyId": "mozilla", - "source": "AdGuard" - }, - "mozoo": { - "name": "MoZoo", - "categoryId": 4, - "url": "http://mozoo.com/", - "companyId": "mozoo" - }, - "mrp": { - "name": "MRP", - "categoryId": 4, - "url": "https://www.mrpfd.com/", - "companyId": "mrp" - }, - "mrpdata": { - "name": "MRP", - "categoryId": 6, - "url": "http://mrpdata.com/Account/Login?ReturnUrl=%2F", - "companyId": "fifth_story" - }, - "mrskincash": { - "name": "MrSkinCash", - "categoryId": 3, - "url": "http://mrskincash.com/", - "companyId": "mrskincash.com" - }, - "msedge": { - "name": "Microsoft Edge", - "categoryId": 8, - "url": "https://www.microsoft.com/en-us/edge", - "companyId": "microsoft", - "source": "AdGuard" - }, - "msn": { - "name": "Microsoft Network", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "muscula": { - "name": "Muscula", - "categoryId": 4, - "url": "https://www.universe-surf.de/", - "companyId": "universe_surf" - }, - "mux_inc": { - "name": "Mux", - "categoryId": 0, - "url": "https://mux.com/", - "companyId": "mux_inc" - }, - "mybloglog": { - "name": "MyBlogLog", - "categoryId": 7, - "url": "http://www.mybloglog.com/", - "companyId": "verizon" - }, - "mybuys": { - "name": "MyBuys", - "categoryId": 4, - "url": "http://www.mybuys.com/", - "companyId": "magnetic" - }, - "mycdn.me": { - "name": "Mail.Ru CDN", - "categoryId": 9, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "mycliplister.com": { - "name": "Cliplister", - "categoryId": 2, - "url": "https://www.cliplister.com/", - "companyId": null - }, - "mycounter.ua": { - "name": "MyCounter.ua", - "categoryId": 6, - "url": "http://mycounter.ua", - "companyId": "mycounter.ua" - }, - "myfonts": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "myfonts_counter": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "mypagerank": { - "name": "MyPagerank", - "categoryId": 6, - "url": "http://www.mypagerank.net/", - "companyId": "mypagerank" - }, - "mystat": { - "name": "MyStat", - "categoryId": 7, - "url": "http://mystat.hu/", - "companyId": "myst_statistics" - }, - "mythings": { - "name": "myThings", - "categoryId": 4, - "url": "http://www.mythings.com/", - "companyId": "mythings" - }, - "mytop_counter": { - "name": "Mytop Counter", - "categoryId": 7, - "url": "http://mytop-in.net/", - "companyId": "mytop-in" - }, - "nab": { - "name": "National Australia Bank", - "categoryId": 8, - "url": "https://www.nab.com.au/", - "companyId": "nab", - "source": "AdGuard" - }, - "nakanohito.jp": { - "name": "Nakanohito", - "categoryId": 4, - "url": "http://nakanohito.jp/", - "companyId": "userinsight" - }, - "namogoo": { - "name": "Namoogoo", - "categoryId": 4, - "url": "https://www.namogoo.com/", - "companyId": null - }, - "nanigans": { - "name": "Nanigans", - "categoryId": 4, - "url": "http://www.nanigans.com/", - "companyId": "nanigans" - }, - "nano_interactive": { - "name": "Nano Interactive", - "categoryId": 4, - "url": "http://www.nanointeractive.com/home/de", - "companyId": "nano_interactive" - }, - "nanorep": { - "name": "nanoRep", - "categoryId": 2, - "url": "http://www.nanorep.com/", - "companyId": "logmein" - }, - "narando": { - "name": "Narando", - "categoryId": 0, - "url": "https://narando.com/", - "companyId": "narando" - }, - "narrativ": { - "name": "Narrativ", - "categoryId": 4, - "url": "https://narrativ.com/", - "companyId": "narrativ" - }, - "narrative_io": { - "name": "Narrative", - "categoryId": 6, - "url": "http://www.narrative.io/", - "companyId": "narrative.io" - }, - "natimatica": { - "name": "Natimatica", - "categoryId": 4, - "url": "http://natimatica.com/", - "companyId": "natimatica" - }, - "nativeads.com": { - "name": "native ads", - "categoryId": 4, - "url": "https://nativeads.com/", - "companyId": null - }, - "nativeroll": { - "name": "Nativeroll", - "categoryId": 0, - "url": "http://nativeroll.tv/", - "companyId": "native_roll" - }, - "nativo": { - "name": "Nativo", - "categoryId": 4, - "url": "http://www.nativo.net/", - "companyId": "nativo" - }, - "navegg_dmp": { - "name": "Navegg", - "categoryId": 6, - "url": "https://www.navegg.com/en/", - "companyId": "navegg" - }, - "naver.com": { - "name": "Naver", - "categoryId": 4, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "naver_search": { - "name": "Naver Search", - "categoryId": 2, - "url": "http://www.naver.com/", - "companyId": "naver" - }, - "nbc_news": { - "name": "NBC News", - "categoryId": 8, - "url": "https://www.nbcnews.com/", - "companyId": null - }, - "ncol": { - "name": "NCOL", - "categoryId": 4, - "url": "http://www.ncol.com/", - "companyId": "ncol" - }, - "needle": { - "name": "Needle", - "categoryId": 2, - "url": "http://www.needle.com", - "companyId": "needle" - }, - "nekudo.com": { - "name": "Nekudo", - "categoryId": 2, - "url": "https://nekudo.com/", - "companyId": "nekudo" - }, - "neodata": { - "name": "Neodata", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "neory": { - "name": "NEORY ", - "categoryId": 4, - "url": "https://www.neory.com/", - "companyId": "neory" - }, - "nerfherdersolo_com": { - "name": "nerfherdersolo.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "net-metrix": { - "name": "NET-Metrix", - "categoryId": 6, - "url": "http://www.net-metrix.ch/", - "companyId": "net-metrix" - }, - "net-results": { - "name": "Net-Results", - "categoryId": 4, - "url": "http://www.net-results.com/", - "companyId": "net-results" - }, - "net_avenir": { - "name": "Net Avenir", - "categoryId": 4, - "url": "http://www.netavenir.com/", - "companyId": "net_avenir" - }, - "net_communities": { - "name": "Net Communities", - "categoryId": 4, - "url": "http://www.netcommunities.com/", - "companyId": "net_communities" - }, - "net_visibility": { - "name": "NET Visibility", - "categoryId": 4, - "url": "http://www.netvisibility.co.uk", - "companyId": "net_visibility" - }, - "netbiscuits": { - "name": "Netbiscuits", - "categoryId": 6, - "url": "http://www.netbiscuits.net/", - "companyId": "netbiscuits" - }, - "netbooster_group": { - "name": "NetBooster Group", - "categoryId": 4, - "url": "http://www.netbooster.com/", - "companyId": "netbooster_group" - }, - "netflix": { - "name": "Netflix", - "categoryId": 0, - "url": "https://www.netflix.com/", - "companyId": "netflix", - "source": "AdGuard" - }, - "netify": { - "name": "Netify", - "categoryId": 8, - "url": "https://www.netify.ai/", - "companyId": "netify", - "source": "AdGuard" - }, - "netletix": { - "name": "Netletix", - "categoryId": 4, - "url": "http://www.netletix.com//", - "companyId": "ip_de" - }, - "netminers": { - "name": "Netminers", - "categoryId": 6, - "url": "http://netminers.dk/", - "companyId": "netminers" - }, - "netmining": { - "name": "Netmining", - "categoryId": 4, - "url": "http://www.netmining.com/", - "companyId": "zeta" - }, - "netmonitor": { - "name": "NetMonitor", - "categoryId": 6, - "url": "http://www.netmanager.net/en/", - "companyId": "netmonitor" - }, - "netratings_sitecensus": { - "name": "NetRatings SiteCensus", - "categoryId": 4, - "url": "http://www.nielsen-online.com/intlpage.html", - "companyId": "nielsen" - }, - "netrk.net": { - "name": "nfxTrack", - "categoryId": 6, - "url": "https://netrk.net/", - "companyId": "netzeffekt" - }, - "netseer": { - "name": "NetSeer", - "categoryId": 4, - "url": "http://www.netseer.com/", - "companyId": "netseer" - }, - "netshelter": { - "name": "NetShelter", - "categoryId": 4, - "url": "http://www.netshelter.net/", - "companyId": "netshelter" - }, - "netsprint_audience": { - "name": "Netsprint Audience", - "categoryId": 6, - "url": "http://audience.netsprint.eu/", - "companyId": "netsprint" - }, - "networkedblogs": { - "name": "NetworkedBlogs", - "categoryId": 7, - "url": "http://w.networkedblogs.com/", - "companyId": "networkedblogs" - }, - "neustar_adadvisor": { - "name": "Neustar AdAdvisor", - "categoryId": 4, - "url": "http://www.targusinfo.com/", - "companyId": "neustar" - }, - "new_relic": { - "name": "New Relic", - "categoryId": 6, - "url": "http://newrelic.com/", - "companyId": "new_relic" - }, - "newscgp.com": { - "name": "News Connect", - "categoryId": 4, - "url": "https://newscorp.com/", - "companyId": "news_corp" - }, - "newsmax": { - "name": "Newsmax", - "categoryId": 4, - "url": "http://www.newsmax.com/", - "companyId": "newsmax" - }, - "newstogram": { - "name": "Newstogram", - "categoryId": 4, - "url": "http://www.newstogram.com/", - "companyId": "dailyme" - }, - "newsupdatedir.info": { - "name": "newsupdatedir.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "newsupdatewe.info": { - "name": "newsupdatewe.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "newtention": { - "name": "Newtention", - "categoryId": 4, - "url": "http://www.newtention.de/", - "companyId": "next_audience" - }, - "nexage": { - "name": "Nexage", - "categoryId": 4, - "url": "http://www.nexage.com/", - "companyId": "verizon" - }, - "nexeps.com": { - "name": "neXeps", - "categoryId": 4, - "url": "http://nexeps.com/", - "companyId": null - }, - "next_performance": { - "name": "Next Performance", - "categoryId": 4, - "url": "http://www.nextperformance.com/", - "companyId": "nextperf" - }, - "next_user": { - "name": "Next User", - "categoryId": 4, - "url": "https://www.nextuser.com/", - "companyId": "next_user" - }, - "nextag_roi_optimizer": { - "name": "Nextag ROI Optimizer", - "categoryId": 4, - "url": "http://www.nextag.com/", - "companyId": "nextag" - }, - "nextclick": { - "name": "Nextclick", - "categoryId": 4, - "url": "http://nextclick.pl/", - "companyId": "leadbullet" - }, - "nextstat": { - "name": "NextSTAT", - "categoryId": 6, - "url": "http://www.nextstat.com/", - "companyId": "nextstat" - }, - "neytiv": { - "name": "Neytiv", - "categoryId": 6, - "url": "http://neytiv.com/", - "companyId": "neytiv" - }, - "ngage_inc.": { - "name": "NGage INC.", - "categoryId": 6, - "url": "https://www.nginx.com/", - "companyId": "nginx" - }, - "nice264.com": { - "name": "Nice264", - "categoryId": 0, - "url": "http://nice264.com/", - "companyId": null - }, - "nimblecommerce": { - "name": "NimbleCommerce", - "categoryId": 4, - "url": "http://www.nimblecommerce.com/", - "companyId": "nimblecommerce" - }, - "nine_direct_digital": { - "name": "Nine Digital Direct", - "categoryId": 4, - "url": "https://ninedigitaldirect.com.au/", - "companyId": "nine_entertainment", - "source": "AdGuard" - }, - "ninja_access_analysis": { - "name": "Ninja Access Analysis", - "categoryId": 6, - "url": "http://www.ninja.co.jp/analysis/", - "companyId": "samurai_factory" - }, - "nirror": { - "name": "Nirror", - "categoryId": 6, - "url": "https://www.nirror.com/", - "companyId": "nirror" - }, - "nitropay": { - "name": "NitroPay", - "categoryId": 4, - "url": "https://nitropay.com/", - "companyId": "gg_software" - }, - "nk.pl_widgets": { - "name": "NK.pl Widgets", - "categoryId": 4, - "url": "http://nk.pl", - "companyId": "nk.pl" - }, - "noaa.gov": { - "name": "National Oceanic and Atmospheric Administration", - "categoryId": 8, - "url": "https://noaa.gov/", - "companyId": null - }, - "noddus": { - "name": "Noddus", - "categoryId": 4, - "url": "https://www.enterprise.noddus.com/", - "companyId": "noddus" - }, - "nolix": { - "name": "Nolix", - "categoryId": 4, - "url": "http://nolix.ru/", - "companyId": "nolix" - }, - "nonli": { - "name": "Nonli", - "categoryId": 4, - "url": "https://www.nonli.com/", - "companyId": "nonli", - "source": "AdGuard" - }, - "nonstop_consulting": { - "name": "Resolution Media", - "categoryId": 4, - "url": "https://resolutionmedia.com/", - "companyId": "resolution_media" - }, - "noop.style": { - "name": "noop.style", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nosto.com": { - "name": "nosto", - "categoryId": 6, - "url": "http://www.nosto.com/", - "companyId": null - }, - "notify": { - "name": "Notify", - "categoryId": 4, - "url": "http://notify.ag/en/", - "companyId": null - }, - "notifyfox": { - "name": "Notifyfox", - "categoryId": 6, - "url": "https://notifyfox.com/", - "companyId": "notifyfox" - }, - "notion": { - "name": "Notion", - "categoryId": 8, - "url": "https://www.notion.so/", - "companyId": "notion", - "source": "AdGuard" - }, - "now_interact": { - "name": "Now Interact", - "categoryId": 6, - "url": "http://nowinteract.com/", - "companyId": "now_interact" - }, - "npario": { - "name": "nPario", - "categoryId": 6, - "url": "http://npario.com/", - "companyId": "npario" - }, - "nplexmedia": { - "name": "nPlexMedia", - "categoryId": 4, - "url": "http://www.nplexmedia.com/", - "companyId": "nplexmedia" - }, - "nrelate": { - "name": "nRelate", - "categoryId": 2, - "url": "http://nrelate.com/", - "companyId": "iac_apps" - }, - "ns8": { - "name": "NS8", - "categoryId": 4, - "url": "https://www.ns8.com/", - "companyId": null - }, - "nt.vc": { - "name": "Next Tuesday GmbH", - "categoryId": 8, - "url": "http://www.nexttuesday.de/", - "companyId": null - }, - "ntent": { - "name": "NTENT", - "categoryId": 4, - "url": "http://www.verticalsearchworks.com", - "companyId": "ntent" - }, - "ntppool": { - "name": "Network Time Protocol", - "categoryId": 5, - "url": "https://ntp.org/", - "companyId": "network_time_foundation", - "source": "AdGuard" - }, - "nttcom_online_marketing_solutions": { - "name": "NTTCom Online Marketing Solutions", - "categoryId": 6, - "url": "http://www.digitalforest.co.jp/", - "companyId": "nttcom_online_marketing_solutions" - }, - "nuffnang": { - "name": "Nuffnang", - "categoryId": 4, - "url": "http://nuffnang.com/", - "companyId": "nuffnang" - }, - "nugg.ad": { - "name": "Nugg.Ad", - "categoryId": 4, - "url": "http://www.nugg.ad/", - "companyId": "nugg.ad" - }, - "nui_media": { - "name": "NUI Media", - "categoryId": 4, - "url": "http://adjuggler.com/", - "companyId": "nui_media" - }, - "numbers.md": { - "name": "Numbers.md", - "categoryId": 6, - "url": "https://numbers.md/", - "companyId": "numbers.md" - }, - "numerator": { - "name": "Numerator", - "categoryId": 5, - "url": "http://www.channeliq.com/", - "companyId": "numerator" - }, - "ny_times_tagx": { - "name": "NY Times TagX", - "categoryId": 6, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "nyacampwk.com": { - "name": "nyacampwk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyetm2mkch.com": { - "name": "nyetm2mkch.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyt.com": { - "name": "The New York Times", - "categoryId": 8, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "o12zs3u2n.com": { - "name": "o12zs3u2n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "o2.pl": { - "name": "o2.pl", - "categoryId": 8, - "url": "https://www.o2.pl/", - "companyId": "o2.pl" - }, - "o2online.de": { - "name": "o2online.de", - "categoryId": 8, - "url": "https://www.o2online.de/", - "companyId": null - }, - "oath_inc": { - "name": "Oath", - "categoryId": 8, - "url": "https://www.oath.com/", - "companyId": "verizon" - }, - "observer": { - "name": "Observer", - "categoryId": 4, - "url": "http://www.observerapp.com", - "companyId": "observer" - }, - "ocioso": { - "name": "Ocioso", - "categoryId": 7, - "url": "http://ocioso.com.br/", - "companyId": "ocioso" - }, - "oclasrv.com": { - "name": "oclasrv.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octapi.net": { - "name": "octapi.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octavius": { - "name": "Octavius", - "categoryId": 4, - "url": "http://octavius.rocks/", - "companyId": "octavius" - }, - "office.com": { - "name": "office.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office.net": { - "name": "office.net", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office365.com": { - "name": "office365.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "oghub.io": { - "name": "OG Hub", - "categoryId": 11, - "url": null, - "companyId": null - }, - "oh_my_stats": { - "name": "Oh My Stats", - "categoryId": 6, - "url": "https://ohmystats.com/", - "companyId": "oh_my_stats" - }, - "ohana_advertising_network": { - "name": "Ohana Advertising Network", - "categoryId": 4, - "url": "http://adohana.com/", - "companyId": "ohana_advertising_network" - }, - "olapic": { - "name": "Olapic", - "categoryId": 4, - "url": "https://www.olapic.com/", - "companyId": "olapic" - }, - "olark": { - "name": "Olark", - "categoryId": 2, - "url": "http://www.olark.com/", - "companyId": "olark" - }, - "olx-st.com": { - "name": "OLX", - "categoryId": 8, - "url": "http://www.olx.com/", - "companyId": null - }, - "omarsys.com": { - "name": "Omarsys", - "categoryId": 4, - "url": "http://omarsys.com/", - "companyId": "xcaliber" - }, - "ometria": { - "name": "Ometria", - "categoryId": 4, - "url": "http://www.ometria.com/", - "companyId": "ometria" - }, - "omg": { - "name": "OMG", - "categoryId": 7, - "url": "http://uk.omgpm.com/", - "companyId": "optimise_media" - }, - "omniconvert.com": { - "name": "Omniconvert", - "categoryId": 4, - "url": "https://www.omniconvert.com/", - "companyId": "omniconvert" - }, - "omniscienta": { - "name": "Omniscienta", - "categoryId": 4, - "url": "http://www.omniscienta.com/", - "companyId": null - }, - "oms": { - "name": "OMS", - "categoryId": 4, - "url": "http://oms.eu/", - "companyId": null - }, - "onaudience": { - "name": "OnAudience", - "categoryId": 4, - "url": "http://www.onaudience.com/", - "companyId": "cloud_technologies" - }, - "oneall": { - "name": "Oneall", - "categoryId": 7, - "url": "http://www.oneall.com/", - "companyId": "oneall" - }, - "onefeed": { - "name": "Onefeed", - "categoryId": 6, - "url": "http://www.onefeed.co.uk", - "companyId": "onefeed" - }, - "onesignal": { - "name": "OneSignal", - "categoryId": 5, - "url": "https://onesignal.com/", - "companyId": "onesignal" - }, - "onestat": { - "name": "OneStat", - "categoryId": 6, - "url": "http://www.onestat.com/", - "companyId": "onestat_international_b.v." - }, - "onet.pl": { - "name": "onet", - "categoryId": 8, - "url": "https://www.onet.pl/", - "companyId": null - }, - "onetag": { - "name": "OneTag", - "categoryId": 4, - "url": "https://www.onetag.com/", - "companyId": "onetag" - }, - "onetrust": { - "name": "OneTrust", - "categoryId": 5, - "url": "https://www.onetrust.com/", - "companyId": "onetrust" - }, - "onfocus.io": { - "name": "OnFocus", - "categoryId": 4, - "url": "http://onfocus.io/", - "companyId": "onfocus" - }, - "onlinewebstat": { - "name": "Onlinewebstat", - "categoryId": 6, - "url": "http://www.onlinewebstats.com/index.php?lang=en", - "companyId": "onlinewebstat" - }, - "onswipe": { - "name": "Onswipe", - "categoryId": 4, - "url": "http://www.onswipe.com/", - "companyId": "onswipe" - }, - "onthe.io": { - "name": "OnThe.io", - "categoryId": 6, - "url": "https://t.onthe.io/media", - "companyId": "onthe.io" - }, - "ontraport_autopilot": { - "name": "Ontraport Autopilot", - "categoryId": 4, - "url": "http://www.moon-ray.com/", - "companyId": "ontraport" - }, - "ooyala.com": { - "name": "Ooyala Player", - "categoryId": 0, - "url": "https://www.ooyala.com/", - "companyId": "telstra" - }, - "ooyala_analytics": { - "name": "Ooyala Analytics", - "categoryId": 6, - "url": "https://www.telstraglobal.com/", - "companyId": "telstra" - }, - "open_adexchange": { - "name": "Open AdExchange", - "categoryId": 4, - "url": "http://openadex.dk/", - "companyId": "open_adexchange" - }, - "open_adstream": { - "name": "Open Adstream", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "open_share_count": { - "name": "Open Share Count", - "categoryId": 4, - "url": "http://opensharecount.com/", - "companyId": "open_share_count" - }, - "openai": { - "name": "OpenAI", - "categoryId": 8, - "url": "https://openai.com/", - "companyId": "openai", - "source": "AdGuard" - }, - "openload": { - "name": "Openload", - "categoryId": 9, - "url": "https://openload.co/", - "companyId": null - }, - "openstat": { - "name": "OpenStat", - "categoryId": 6, - "url": "https://www.openstat.ru/", - "companyId": "openstat" - }, - "opentracker": { - "name": "Opentracker", - "categoryId": 6, - "url": "http://www.opentracker.net/", - "companyId": "opentracker" - }, - "openwebanalytics": { - "name": "Open Web Analytics", - "categoryId": 6, - "url": "http://www.openwebanalytics.com/", - "companyId": "open_web_analytics" - }, - "openx": { - "name": "OpenX", - "categoryId": 4, - "url": "https://www.openx.com", - "companyId": "openx" - }, - "operative_media": { - "name": "Operative Media", - "categoryId": 4, - "url": "http://www.operative.com/", - "companyId": "operative_media" - }, - "opinary": { - "name": "Opinary", - "categoryId": 2, - "url": "http://opinary.com/", - "companyId": "opinary" - }, - "opinionbar": { - "name": "OpinionBar", - "categoryId": 2, - "url": "http://www.metrixlab.com", - "companyId": "metrixlab" - }, - "oplytic": { - "name": "Oplytic", - "categoryId": 6, - "url": "http://www.oplytic.com", - "companyId": "oplytic" - }, - "oppo": { - "name": "OPPO", - "categoryId": 101, - "url": "https://www.oppo.com/", - "companyId": "bbk", - "source": "AdGuard" - }, - "opta.net": { - "name": "Opta", - "categoryId": 6, - "url": "http://www.optasports.de/", - "companyId": "opta_sports" - }, - "optaim": { - "name": "OptAim", - "categoryId": 4, - "url": "http://optaim.com/", - "companyId": "optaim" - }, - "optanaon": { - "name": "Optanaon by OneTrust", - "categoryId": 5, - "url": "https://www.cookielaw.org/", - "companyId": "onetrust" - }, - "optify": { - "name": "Optify", - "categoryId": 4, - "url": "http://www.optify.net", - "companyId": "optify" - }, - "optimatic": { - "name": "Optimatic", - "categoryId": 0, - "url": "http://www.optimatic.com/", - "companyId": "optimatic" - }, - "optimax_media_delivery": { - "name": "Optimax Media Delivery", - "categoryId": 4, - "url": "http://optmd.com/", - "companyId": "optimax_media_delivery" - }, - "optimicdn.com": { - "name": "OptimiCDN", - "categoryId": 9, - "url": "https://en.optimicdn.com/", - "companyId": null - }, - "optimizely": { - "name": "Optimizely", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_error_log": { - "name": "Optimizely Error Log", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_geo_targeting": { - "name": "Optimizely Geographical Targeting", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_logging": { - "name": "Optimizely Logging", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimonk": { - "name": "Optimonk", - "categoryId": 6, - "url": "https://www.optimonk.com/", - "companyId": "optimonk" - }, - "optinmonster": { - "name": "OptInMonster", - "categoryId": 2, - "url": "https://optinmonster.com/", - "companyId": "optinmonster" - }, - "optinproject.com": { - "name": "OptinProject", - "categoryId": 4, - "url": "https://www.optincollect.com/en", - "companyId": "optincollect" - }, - "optomaton": { - "name": "Optomaton", - "categoryId": 4, - "url": "http://www.optomaton.com/", - "companyId": "ve" - }, - "ora.tv": { - "name": "Ora.TV", - "categoryId": 4, - "url": "http://www.ora.tv/", - "companyId": "ora.tv" - }, - "oracle_infinity": { - "name": "Oracle Infinity Behavioral Intelligence", - "categoryId": 6, - "url": "https://www.oracle.com/au/cx/marketing/digital-intelligence/", - "companyId": "oracle", - "source": "AdGuard" - }, - "oracle_live_help": { - "name": "Oracle Live Help", - "categoryId": 2, - "url": "http://www.oracle.com/us/products/applications/atg/live-help-on-demand/index.html", - "companyId": "oracle" - }, - "oracle_rightnow": { - "name": "Oracle RightNow", - "categoryId": 8, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "orange": { - "name": "Orange", - "categoryId": 4, - "url": "http://www.orange.co.uk/", - "companyId": "orange_mobile" - }, - "orange142": { - "name": "Orange142", - "categoryId": 4, - "url": "http://www.orange142.com/", - "companyId": "orange142" - }, - "orange_france": { - "name": "Orange France", - "categoryId": 8, - "url": "https://www.orange.fr/", - "companyId": "orange_france" - }, - "orangesoda": { - "name": "OrangeSoda", - "categoryId": 4, - "url": "http://www.orangesoda.com/", - "companyId": "orangesoda" - }, - "orc_international": { - "name": "ORC International", - "categoryId": 4, - "url": "https://orcinternational.com/", - "companyId": "engine_group" - }, - "order_groove": { - "name": "Order Groove", - "categoryId": 4, - "url": "http://ordergroove.com/", - "companyId": "order_groove" - }, - "orel_site": { - "name": "Orel Site", - "categoryId": 2, - "url": "https://www.orelsite.ru/", - "companyId": "orel_site" - }, - "otclick": { - "name": "otClick", - "categoryId": 4, - "url": "http://otclick-adv.ru/", - "companyId": "otclick" - }, - "othersearch.info": { - "name": "FlowSurf", - "categoryId": 8, - "url": null, - "companyId": null - }, - "otm-r.com": { - "name": "OTM", - "categoryId": 4, - "url": "http://otm-r.com/", - "companyId": null - }, - "otto.de": { - "name": "Otto Group", - "categoryId": 8, - "url": null, - "companyId": null - }, - "outbrain": { - "name": "Outbrain", - "categoryId": 4, - "url": "https://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_amplify": { - "name": "Outbrain Amplify", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_analytics": { - "name": "Outbrain Analytics", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_logger": { - "name": "Outbrain Logger", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_pixel": { - "name": "Outbrain Pixel", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_utilities": { - "name": "Outbrain Utilities", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_widgets": { - "name": "Outbrain Widgets", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outlook": { - "name": "Microsoft Outlook", - "categoryId": 13, - "url": "https://outlook.live.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "overheat.it": { - "name": "overheat", - "categoryId": 6, - "url": "https://overheat.io/", - "companyId": null - }, - "owa": { - "name": "OWA", - "categoryId": 6, - "url": "http://oewa.at/", - "companyId": "the_austrian_web_analysis" - }, - "owneriq": { - "name": "OwnerIQ", - "categoryId": 4, - "url": "http://www.owneriq.com/", - "companyId": "owneriq" - }, - "ownpage": { - "name": "Ownpage", - "categoryId": 2, - "url": "http://www.ownpage.fr/index.en.html", - "companyId": null - }, - "owox.com": { - "name": "OWOX", - "categoryId": 6, - "url": "https://www.owox.com/", - "companyId": "owox_inc" - }, - "oxamedia": { - "name": "OxaMedia", - "categoryId": 2, - "url": "http://www.oxamedia.com/", - "companyId": "oxamedia" - }, - "oxomi.com": { - "name": "Oxomi", - "categoryId": 4, - "url": "https://oxomi.com/", - "companyId": null - }, - "oztam": { - "name": "OzTAM", - "categoryId": 8, - "url": "https://oztam.com.au/", - "companyId": "oztam", - "source": "AdGuard" - }, - "pageanalytics.space": { - "name": "pageanalytics.space", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pagefair": { - "name": "PageFair", - "categoryId": 2, - "url": "https://pagefair.com/", - "companyId": "blockthrough" - }, - "pagescience": { - "name": "PageScience", - "categoryId": 4, - "url": "http://www.precisionhealthmedia.com/index.html", - "companyId": "pagescience" - }, - "paid-to-promote": { - "name": "Paid-To-Promote", - "categoryId": 4, - "url": "http://www.paid-to-promote.net/", - "companyId": "paid-to-promote" - }, - "paperg": { - "name": "PaperG", - "categoryId": 4, - "url": "http://www.paperg.com/", - "companyId": "paperg" - }, - "pardot": { - "name": "Pardot", - "categoryId": 6, - "url": "http://www.pardot.com/", - "companyId": "pardot" - }, - "parsely": { - "name": "Parse.ly", - "categoryId": 6, - "url": "https://www.parse.ly/", - "companyId": "parse.ly" - }, - "partner-ads": { - "name": "Partner-Ads", - "categoryId": 4, - "url": "http://www.partner-ads.com/", - "companyId": "partner-ads" - }, - "passionfruit": { - "name": "Passionfruit", - "categoryId": 4, - "url": "http://passionfruitads.com/", - "companyId": "passionfruit" - }, - "pathful": { - "name": "Pathful", - "categoryId": 6, - "url": "http://www.pathful.com/", - "companyId": "pathful" - }, - "pay-hit": { - "name": "Pay-Hit", - "categoryId": 4, - "url": "http://pay-hit.com/", - "companyId": "pay-hit" - }, - "payclick": { - "name": "PayClick", - "categoryId": 4, - "url": "http://payclick.it/", - "companyId": "payclick" - }, - "paykickstart": { - "name": "PayKickstart", - "categoryId": 6, - "url": "https://paykickstart.com/", - "companyId": "paykickstart" - }, - "paypal": { - "name": "PayPal", - "categoryId": 2, - "url": "https://www.paypal.com", - "companyId": "ebay" - }, - "pcvark.com": { - "name": "pcvark.com", - "categoryId": 11, - "url": "https://pcvark.com/", - "companyId": null - }, - "peer39": { - "name": "Peer39", - "categoryId": 4, - "url": "http://www.peer39.com/", - "companyId": "peer39" - }, - "peer5.com": { - "name": "Peer5", - "categoryId": 9, - "url": "https://www.peer5.com/", - "companyId": "peer5" - }, - "peerius": { - "name": "Peerius", - "categoryId": 2, - "url": "http://www.peerius.com/", - "companyId": "peerius" - }, - "pendo.io": { - "name": "pendo", - "categoryId": 6, - "url": "https://www.pendo.io/", - "companyId": null - }, - "pepper.com": { - "name": "Pepper", - "categoryId": 4, - "url": "https://www.pepper.com/", - "companyId": "6minutes" - }, - "pepperjam": { - "name": "Pepperjam", - "categoryId": 4, - "url": "http://www.pepperjam.com", - "companyId": "pepperjam" - }, - "pepsia": { - "name": "Pepsia", - "categoryId": 6, - "url": "http://pepsia.com/en/", - "companyId": "pepsia" - }, - "perfdrive.com": { - "name": "perfdrive.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "perfect_audience": { - "name": "Perfect Audience", - "categoryId": 4, - "url": "https://www.perfectaudience.com/", - "companyId": "perfect_audience" - }, - "perfect_market": { - "name": "Perfect Market", - "categoryId": 4, - "url": "http://perfectmarket.com/", - "companyId": "perfect_market" - }, - "perfops": { - "name": "PerfOps", - "categoryId": 6, - "url": "https://perfops.net/", - "companyId": "perfops", - "source": "AdGuard" - }, - "perform_group": { - "name": "Perform Group", - "categoryId": 5, - "url": "http://www.performgroup.co.uk/", - "companyId": "perform_group" - }, - "performable": { - "name": "Performable", - "categoryId": 6, - "url": "http://www.performable.com/", - "companyId": "hubspot" - }, - "performancing_metrics": { - "name": "Performancing Metrics", - "categoryId": 6, - "url": "http://pmetrics.performancing.com", - "companyId": "performancing" - }, - "performax": { - "name": "Performax", - "categoryId": 4, - "url": "https://www.performax.cz/", - "companyId": "performax" - }, - "perimeterx.net": { - "name": "Perimeterx", - "categoryId": 6, - "url": "https://www.perimeterx.com/", - "companyId": null - }, - "permutive": { - "name": "Permutive", - "categoryId": 4, - "url": "http://permutive.com/", - "companyId": "permutive" - }, - "persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.be/", - "companyId": "de_persgroep" - }, - "persianstat": { - "name": "PersianStat", - "categoryId": 6, - "url": "http://www.persianstat.com", - "companyId": "persianstat" - }, - "persio": { - "name": "Persio", - "categoryId": 4, - "url": "http://www.pers.io/", - "companyId": "pers.io" - }, - "personyze": { - "name": "Personyze", - "categoryId": 2, - "url": "http://personyze.com/", - "companyId": "personyze" - }, - "petametrics": { - "name": "LiftIgniter", - "categoryId": 2, - "url": "https://www.liftigniter.com/", - "companyId": "liftigniter" - }, - "pheedo": { - "name": "Pheedo", - "categoryId": 4, - "url": "http://pheedo.com/", - "companyId": "pheedo" - }, - "phonalytics": { - "name": "Phonalytics", - "categoryId": 2, - "url": "http://www.phonalytics.com/", - "companyId": "phonalytics" - }, - "phunware": { - "name": "Phunware", - "categoryId": 4, - "url": "https://www.phunware.com", - "companyId": "phunware" - }, - "piguiqproxy.com": { - "name": "piguiqproxy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pilot": { - "name": "Pilot", - "categoryId": 6, - "url": "http://www.pilot.de/en/home.html", - "companyId": "pilot_gmbh" - }, - "pingdom": { - "name": "Pingdom", - "categoryId": 6, - "url": "https://www.pingdom.com/", - "companyId": "pingdom" - }, - "pinterest": { - "name": "Pinterest", - "categoryId": 7, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pinterest_conversion_tracker": { - "name": "Pinterest Conversion Tracker", - "categoryId": 6, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pipz": { - "name": "Pipz", - "categoryId": 4, - "url": "https://pipz.com/br/", - "companyId": "pipz_automation" - }, - "piwik": { - "name": "Tombstone (Matomo/Piwik before the split)", - "categoryId": 6, - "url": "http://piwik.org/", - "companyId": "matomo" - }, - "piwik_pro_analytics_suite": { - "name": "Piwik PRO Analytics Suite", - "categoryId": 6, - "url": "https://piwik.pro/", - "companyId": "piwik_pro" - }, - "pixalate": { - "name": "Pixalate", - "categoryId": 4, - "url": "http://www.pixalate.com/", - "companyId": "pixalate" - }, - "pixel_union": { - "name": "Pixel Union", - "categoryId": 4, - "url": "https://www.pixelunion.net/", - "companyId": "pixel_union" - }, - "pixfuture": { - "name": "PixFuture", - "categoryId": 4, - "url": "http://www.pixfuture.com", - "companyId": "pixfuture" - }, - "piximedia": { - "name": "Piximedia", - "categoryId": 4, - "url": "http://www.piximedia.com/piximedia?en", - "companyId": "piximedia" - }, - "pizzaandads_com": { - "name": "pizzaandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "placester": { - "name": "Placester", - "categoryId": 4, - "url": "https://placester.com/", - "companyId": "placester" - }, - "pladform.ru": { - "name": "Pladform", - "categoryId": 4, - "url": "https://distribution.pladform.ru/", - "companyId": "pladform" - }, - "plan.net_experience_cloud": { - "name": "Plan.net Experience Cloud", - "categoryId": 6, - "url": "https://www.serviceplan.com/", - "companyId": "serviceplan" - }, - "platform360": { - "name": "Platform360", - "categoryId": 4, - "url": "http://www.platform360.co/#home", - "companyId": null - }, - "platformone": { - "name": "Platform One", - "categoryId": 4, - "url": "https://www.platform-one.co.jp/", - "companyId": "daconsortium" - }, - "play_by_mamba": { - "name": "Play by Mamba", - "categoryId": 4, - "url": "http://play.mamba.ru/", - "companyId": "mamba" - }, - "playbuzz.com": { - "name": "Playbuzz", - "categoryId": 2, - "url": "https://www.playbuzz.com/", - "companyId": "playbuzz" - }, - "plenty_of_fish": { - "name": "Plenty Of Fish", - "categoryId": 6, - "url": "http://www.pof.com/", - "companyId": "plentyoffish" - }, - "plex": { - "name": "Plex", - "categoryId": 0, - "url": "https://www.plex.tv/", - "companyId": "plex", - "source": "AdGuard" - }, - "plex_metrics": { - "name": "Plex Metrics", - "categoryId": 6, - "url": "https://www.plex.tv/", - "companyId": "plex" - }, - "plista": { - "name": "Plista", - "categoryId": 4, - "url": "http://www.plista.com", - "companyId": "plista" - }, - "plugrush": { - "name": "PlugRush", - "categoryId": 4, - "url": "http://www.plugrush.com/", - "companyId": "plugrush" - }, - "pluso.ru": { - "name": "Pluso", - "categoryId": 7, - "url": "https://share.pluso.ru/", - "companyId": "pluso" - }, - "plutusads": { - "name": "Plutusads", - "categoryId": 4, - "url": "http://plutusads.com", - "companyId": "plutusads" - }, - "pmddby.com": { - "name": "pmddby.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "pnamic.com": { - "name": "pnamic.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "po.st": { - "name": "Po.st", - "categoryId": 7, - "url": "https://www.po.st/", - "companyId": "rythmone" - }, - "pocket": { - "name": "Pocket", - "categoryId": 6, - "url": "http://getpocket.com/", - "companyId": "pocket" - }, - "pocketcents": { - "name": "PocketCents", - "categoryId": 4, - "url": "http://pocketcents.com/", - "companyId": "pocketcents" - }, - "pointific": { - "name": "Pointific", - "categoryId": 6, - "url": "http://www.pontiflex.com/", - "companyId": "pontiflex" - }, - "pointroll": { - "name": "PointRoll", - "categoryId": 4, - "url": "http://www.pointroll.com/", - "companyId": "gannett_digital_media_network" - }, - "poirreleast.club": { - "name": "poirreleast.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "polar.me": { - "name": "Polar", - "categoryId": 4, - "url": "https://polar.me/", - "companyId": "polar_inc" - }, - "polldaddy": { - "name": "Polldaddy", - "categoryId": 2, - "url": "http://polldaddy.com/", - "companyId": "automattic" - }, - "polyad": { - "name": "PolyAd", - "categoryId": 4, - "url": "http://polyad.net", - "companyId": "polyad" - }, - "polyfill.io": { - "name": "Polyfill", - "categoryId": 8, - "url": "https://polyfill.io/", - "companyId": "polyfill.io" - }, - "popads": { - "name": "PopAds", - "categoryId": 4, - "url": "https://www.popads.net/", - "companyId": "popads" - }, - "popcash": { - "name": "Popcash", - "categoryId": 4, - "url": "http://popcash.net/", - "companyId": "popcash_network" - }, - "popcorn_metrics": { - "name": "Popcorn Metrics", - "categoryId": 6, - "url": "https://www.popcornmetrics.com/", - "companyId": "popcorn_metrics" - }, - "popin.cc": { - "name": "popIn", - "categoryId": 7, - "url": "https://www.popin.cc/", - "companyId": "popin" - }, - "popmyads": { - "name": "PopMyAds", - "categoryId": 4, - "url": "http://popmyads.com/", - "companyId": "popmyads" - }, - "poponclick": { - "name": "PopOnClick", - "categoryId": 4, - "url": "http://poponclick.com", - "companyId": "poponclick" - }, - "populis": { - "name": "Populis", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "pornhub": { - "name": "PornHub", - "categoryId": 3, - "url": "https://www.pornhub.com/", - "companyId": "pornhub" - }, - "pornwave": { - "name": "Pornwave", - "categoryId": 3, - "url": "http://pornwave.com", - "companyId": "pornwave.com" - }, - "porta_brazil": { - "name": "Porta Brazil", - "categoryId": 4, - "url": "http://brasil.gov.br/", - "companyId": "portal_brazil" - }, - "post_affiliate_pro": { - "name": "Post Affiliate Pro", - "categoryId": 4, - "url": "http://www.qualityunit.com/", - "companyId": "qualityunit" - }, - "powerlinks": { - "name": "PowerLinks", - "categoryId": 4, - "url": "http://www.powerlinks.com/", - "companyId": "powerlinks" - }, - "powerreviews": { - "name": "PowerReviews", - "categoryId": 2, - "url": "http://www.powerreviews.com/", - "companyId": "powerreviews" - }, - "powr.io": { - "name": "POWr", - "categoryId": 6, - "url": "https://www.powr.io/", - "companyId": "powr" - }, - "pozvonim": { - "name": "Pozvonim", - "categoryId": 4, - "url": "https://pozvonim.com/", - "companyId": "pozvonim" - }, - "prebid": { - "name": "Prebid", - "categoryId": 4, - "url": "http://prebid.org/", - "companyId": null - }, - "precisionclick": { - "name": "PrecisionClick", - "categoryId": 4, - "url": "http://www.precisionclick.com/", - "companyId": "precisionclick" - }, - "predicta": { - "name": "Predicta", - "categoryId": 4, - "url": "http://predicta.com.br/", - "companyId": "predicta" - }, - "premonix": { - "name": "Premonix", - "categoryId": 4, - "url": "http://www.premonix.com/", - "companyId": "premonix" - }, - "press": { - "name": "Press+", - "categoryId": 4, - "url": "http://www.mypressplus.com/", - "companyId": "press+" - }, - "pressly": { - "name": "Pressly", - "categoryId": 4, - "url": "https://www.pressly.com/", - "companyId": "pressly" - }, - "pricegrabber": { - "name": "PriceGrabber", - "categoryId": 4, - "url": "http://www.pricegrabber.com", - "companyId": "pricegrabber" - }, - "pricespider": { - "name": "Pricespider", - "categoryId": 4, - "url": "http://www.pricespider.com/", - "companyId": "price_spider" - }, - "prismamediadigital.com": { - "name": "Prisma Media Digital", - "categoryId": 4, - "url": "http://www.pmdrecrute.com/", - "companyId": "prisma_media_digital" - }, - "privy.com": { - "name": "Privy", - "categoryId": 2, - "url": "https://privy.com/", - "companyId": "privy" - }, - "proclivity": { - "name": "Proclivity", - "categoryId": 4, - "url": "http://www.proclivitysystems.com/", - "companyId": "proclivity_media" - }, - "prodperfect": { - "name": "ProdPerfect", - "categoryId": 6, - "url": "https://prodperfect.com/", - "companyId": "prodperfect" - }, - "productsup": { - "name": "ProductsUp", - "categoryId": 4, - "url": "https://productsup.io/", - "companyId": "productsup" - }, - "profiliad": { - "name": "Profiliad", - "categoryId": 6, - "url": "http://profiliad.com/", - "companyId": "profiliad" - }, - "profitshare": { - "name": "Profitshare", - "categoryId": 6, - "url": "https://profitshare.ro/", - "companyId": "profitshare" - }, - "proformics": { - "name": "Proformics", - "categoryId": 6, - "url": "http://proformics.com/", - "companyId": "proformics_digital" - }, - "programattik": { - "name": "Programattik", - "categoryId": 4, - "url": "http://www.programattik.com/", - "companyId": "ttnet" - }, - "project_wonderful": { - "name": "Project Wonderful", - "categoryId": 4, - "url": "http://www.projectwonderful.com/", - "companyId": "project_wonderful" - }, - "propel_marketing": { - "name": "Propel Marketing", - "categoryId": 4, - "url": "http://propelmarketing.com/", - "companyId": "propel_marketing" - }, - "propeller_ads": { - "name": "Propeller Ads", - "categoryId": 4, - "url": "http://www.propellerads.com/", - "companyId": "propeller_ads" - }, - "propermedia": { - "name": "Proper Media", - "categoryId": 4, - "url": "https://proper.io/", - "companyId": "propermedia" - }, - "props": { - "name": "Props", - "categoryId": 4, - "url": "http://props.id/", - "companyId": "props" - }, - "propvideo_net": { - "name": "propvideo.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "prospecteye": { - "name": "ProspectEye", - "categoryId": 4, - "url": "https://www.prospecteye.com/", - "companyId": "prospecteye" - }, - "prosperent": { - "name": "Prosperent", - "categoryId": 4, - "url": "http://prosperent.com", - "companyId": "prosperent" - }, - "prostor": { - "name": "Prostor", - "categoryId": 4, - "url": "http://prostor-lite.ru/", - "companyId": "prostor" - }, - "proton_ag": { - "name": "Proton AG", - "categoryId": 2, - "url": "https://proton.me/", - "companyId": "proton_foundation", - "source": "AdGuard" - }, - "provide_support": { - "name": "Provide Support", - "categoryId": 2, - "url": "http://www.providesupport.com/", - "companyId": "provide_support" - }, - "proximic": { - "name": "Proximic", - "categoryId": 4, - "url": "http://www.proximic.com/", - "companyId": "proximic" - }, - "proxistore.com": { - "name": "Proxistore", - "categoryId": 4, - "url": "https://www.proxistore.com/", - "companyId": "proxistore" - }, - "pscp.tv": { - "name": "Periscope", - "categoryId": 7, - "url": "https://www.pscp.tv/", - "companyId": "periscope" - }, - "pstatic.net": { - "name": "Naver CDN", - "categoryId": 9, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "psyma": { - "name": "Psyma", - "categoryId": 4, - "url": "http://www.psyma.com/", - "companyId": "psyma" - }, - "pt_engine": { - "name": "Pt engine", - "categoryId": 6, - "url": "http://www.ptengine.jp/", - "companyId": "pt_engine" - }, - "pub-fit": { - "name": "Pub-Fit", - "categoryId": 4, - "url": "http://www.pub-fit.com/", - "companyId": "pub-fit" - }, - "pub.network": { - "name": "pub.network", - "categoryId": 4, - "url": null, - "companyId": null - }, - "pubble": { - "name": "Pubble", - "categoryId": 2, - "url": "http://www.pubble.co/", - "companyId": "pubble" - }, - "pubdirecte": { - "name": "Pubdirecte", - "categoryId": 4, - "url": "http://www.pubdirecte.com/", - "companyId": "pubdirecte" - }, - "pubgears": { - "name": "PubGears", - "categoryId": 4, - "url": "http://pubgears.com/", - "companyId": "pubgears" - }, - "public_ideas": { - "name": "Public Ideas", - "categoryId": 4, - "url": "http://www.publicidees.co.uk/", - "companyId": "public-idees" - }, - "publicidad.net": { - "name": "Publicidad.net", - "categoryId": 4, - "url": "http://www.en.publicidad.net/", - "companyId": "publicidad.net" - }, - "publir": { - "name": "Publir", - "categoryId": 4, - "url": "http://www.publir.com", - "companyId": "publir" - }, - "pubmatic": { - "name": "PubMatic", - "categoryId": 4, - "url": "http://www.pubmatic.com/", - "companyId": "pubmatic" - }, - "pubnub.com": { - "name": "PubNub", - "categoryId": 8, - "url": "https://www.pubnub.com/", - "companyId": null - }, - "puboclic": { - "name": "Puboclic", - "categoryId": 4, - "url": "http://www.puboclic.com/", - "companyId": "puboclic" - }, - "pulpix.com": { - "name": "Pulpix", - "categoryId": 4, - "url": "https://www.pulpix.com/", - "companyId": "adyoulike" - }, - "pulpo_media": { - "name": "Pulpo Media", - "categoryId": 4, - "url": "http://www.pulpomedia.com/home.html", - "companyId": "pulpo_media" - }, - "pulse360": { - "name": "Pulse360", - "categoryId": 4, - "url": "http://www.pulse360.com", - "companyId": "pulse360" - }, - "pulse_insights": { - "name": "Pulse Insights", - "categoryId": 6, - "url": "http://pulseinsights.com/", - "companyId": "pulse_insights" - }, - "pulsepoint": { - "name": "PulsePoint", - "categoryId": 4, - "url": "http://www.contextweb.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "punchtab": { - "name": "PunchTab", - "categoryId": 4, - "url": "http://www.punchtab.com/", - "companyId": "punchtab" - }, - "purch": { - "name": "Purch", - "categoryId": 4, - "url": "http://www.purch.com/", - "companyId": "purch" - }, - "pure_chat": { - "name": "Pure Chat", - "categoryId": 2, - "url": "https://www.purechat.com", - "companyId": "pure_chat" - }, - "pureprofile": { - "name": "Pureprofile", - "categoryId": 6, - "url": "https://www.pureprofile.com/us/", - "companyId": "pureprofile" - }, - "purlive": { - "name": "PurLive", - "categoryId": 4, - "url": "http://www.purlive.com/", - "companyId": "purlive" - }, - "puserving.com": { - "name": "puserving.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "push.world": { - "name": "Push.world", - "categoryId": 2, - "url": "https://push.world/en", - "companyId": "push.world" - }, - "push_engage": { - "name": "Push Engage", - "categoryId": 2, - "url": "https://www.pushengage.com/", - "companyId": "push_engage" - }, - "pushame.com": { - "name": "pushame.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushbullet": { - "name": "Pushbullet", - "categoryId": 2, - "url": "https://www.pushbullet.com/", - "companyId": "pushbullet" - }, - "pushcrew": { - "name": "VWO Engage", - "categoryId": 2, - "url": "https://vwo.com/engage/", - "companyId": "wingify" - }, - "pusher.com": { - "name": "Pusher", - "categoryId": 6, - "url": "https://pusher.com/", - "companyId": null - }, - "pushnative.com": { - "name": "pushnative.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushnews": { - "name": "Pushnews", - "categoryId": 4, - "url": "https://www.pushnews.eu/", - "companyId": "pushnews" - }, - "pushno.com": { - "name": "pushno.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwhy.com": { - "name": "pushwhy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwoosh.com": { - "name": "Pushwoosh", - "categoryId": 2, - "url": "https://www.pushwoosh.com/", - "companyId": "pushwoosh" - }, - "pvclouds.com": { - "name": "pvclouds.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "q1media": { - "name": "Q1Media", - "categoryId": 4, - "url": "http://q1media.com/", - "companyId": "q1media" - }, - "q_division": { - "name": "Q-Division", - "categoryId": 4, - "url": "https://q-division.de/", - "companyId": null - }, - "qbaka": { - "name": "Qbaka", - "categoryId": 6, - "url": "https://qbaka.com/", - "companyId": "qbaka" - }, - "qcri_analytics": { - "name": "QCRI Analytics", - "categoryId": 6, - "url": "http://qcri.org/", - "companyId": "qatar_computing_research_institute" - }, - "qeado": { - "name": "Qeado", - "categoryId": 6, - "url": "https://www.qeado.com/", - "companyId": "qeado" - }, - "qihoo_360": { - "name": "Qihoo 360", - "categoryId": 6, - "url": "https://www.360totalsecurity.com/en/", - "companyId": "qihoo_360_technology" - }, - "qq.com": { - "name": "QQ International", - "categoryId": 2, - "url": "https://www.qq.com/", - "companyId": "tencent", - "source": "AdGuard" - }, - "qrius": { - "name": "Qrius", - "categoryId": 7, - "url": "http://www.qrius.me/", - "companyId": "mediafed" - }, - "qualaroo": { - "name": "Qualaroo", - "categoryId": 6, - "url": null, - "companyId": null - }, - "qualcomm": { - "name": "Qualcomm", - "categoryId": 8, - "url": "https://www.qualcomm.com/", - "companyId": "qualcomm", - "source": "AdGuard" - }, - "qualcomm_location_service": { - "name": "Qualcomm Location Service", - "categoryId": 15, - "url": "https://www.qualcomm.com/site/privacy/services", - "companyId": "qualcomm", - "source": "AdGuard" - }, - "qualia": { - "name": "Qualia", - "categoryId": 4, - "url": "http://www.bluecava.com/", - "companyId": "qualia" - }, - "qualtrics": { - "name": "Qualtrics", - "categoryId": 6, - "url": "http://www.qualtrics.com/", - "companyId": "qualtrics" - }, - "quantcast": { - "name": "Quantcast", - "categoryId": 4, - "url": "http://www.quantcast.com/", - "companyId": "quantcast" - }, - "quantcount": { - "name": "Quantcount", - "categoryId": 6, - "url": "http://www.quantcast.com", - "companyId": "quantcast" - }, - "quantum_metric": { - "name": "Quantum Metric", - "categoryId": 6, - "url": "https://www.quantummetric.com/", - "companyId": "quantum_metric" - }, - "quartic.pl": { - "name": "Quartic", - "categoryId": 6, - "url": "https://www.quarticon.com/", - "companyId": "quarticon" - }, - "qubit": { - "name": "Qubit Opentag", - "categoryId": 6, - "url": "http://www.qubit.com/", - "companyId": "qubit" - }, - "questback": { - "name": "Questback", - "categoryId": 2, - "url": "http://www1.questback.com/", - "companyId": "questback" - }, - "queue-it": { - "name": "Queue-it", - "categoryId": 6, - "url": "https://queue-it.com/", - "companyId": null - }, - "quick-counter.net": { - "name": "Quick-counter.net", - "categoryId": 6, - "url": "http://www.quick-counter.net/", - "companyId": "quick-counter.net" - }, - "quigo_adsonar": { - "name": "Quigo AdSonar", - "categoryId": 4, - "url": "http://www.quigo.com", - "companyId": "verizon" - }, - "quinstreet": { - "name": "QuinStreet", - "categoryId": 4, - "url": "http://www.quinstreet.com/", - "companyId": "quinstreet" - }, - "quintelligence": { - "name": "Quintelligence", - "categoryId": 6, - "url": "http://www.quintelligence.com/", - "companyId": "quintelligence" - }, - "quisma": { - "name": "Quisma", - "categoryId": 4, - "url": "http://www.quisma.com/en/", - "companyId": "wpp" - }, - "quora.com": { - "name": "Quora", - "categoryId": 7, - "url": "https://quora.com/", - "companyId": null - }, - "r_advertising": { - "name": "R-Advertising", - "categoryId": 4, - "url": "http://www.r-advertising.com/", - "companyId": "r-advertising" - }, - "rackcdn.com": { - "name": "Rackspace", - "categoryId": 9, - "url": "https://www.rackspace.com/", - "companyId": null - }, - "radarurl": { - "name": "RadarURL", - "categoryId": 6, - "url": "http://radarurl.com/", - "companyId": "radarurl" - }, - "radial": { - "name": "Radial", - "categoryId": 4, - "url": "http://www.clearsaleing.com/", - "companyId": "radial" - }, - "radiumone": { - "name": "RadiumOne", - "categoryId": 4, - "url": "http://www.radiumone.com/index.html", - "companyId": "rythmone" - }, - "raisenow": { - "name": "RaiseNow", - "categoryId": 6, - "url": "https://www.raisenow.com/de", - "companyId": "raisenow" - }, - "rakuten_display": { - "name": "Rakuten Display", - "categoryId": 4, - "url": "https://rakutenmarketing.com/display", - "companyId": "rakuten" - }, - "rakuten_globalmarket": { - "name": "Rakuten", - "categoryId": 4, - "url": "https://www.rakuten.co.jp/", - "companyId": "rakuten" - }, - "rakuten_widget": { - "name": "Rakuten Widget", - "categoryId": 4, - "url": "http://global.rakuten.com/corp/", - "companyId": "rakuten" - }, - "rambler": { - "name": "Rambler", - "categoryId": 6, - "url": "https://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_count": { - "name": "Rambler Count", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_widget": { - "name": "Rambler Widget", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rapidspike": { - "name": "RapidSpike", - "categoryId": 6, - "url": "https://www.rapidspike.com", - "companyId": "rapidspike" - }, - "ravelin": { - "name": "Ravelin", - "categoryId": 6, - "url": "https://www.ravelin.com/", - "companyId": null - }, - "rawgit": { - "name": "RawGit", - "categoryId": 9, - "url": "http://rawgit.com/", - "companyId": null - }, - "raygun": { - "name": "Raygun", - "categoryId": 4, - "url": "https://raygun.com/", - "companyId": "raygun" - }, - "rbc_counter": { - "name": "RBC Counter", - "categoryId": 6, - "url": "http://www.rbc.ru/", - "companyId": "rbc_group" - }, - "rcs.it": { - "name": "RCS", - "categoryId": 4, - "url": "http://www.rcsmediagroup.it/", - "companyId": "rcs" - }, - "rd_station": { - "name": "RD Station", - "categoryId": 6, - "url": "http://www.rdstation.com/en/", - "companyId": "rd_station" - }, - "rea_group": { - "name": "REA Group Ltd.", - "categoryId": 4, - "url": "https://www.rea-group.com/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "reachforce": { - "name": "ReachForce", - "categoryId": 6, - "url": "http://www.reachforce.com/", - "companyId": "reachforce" - }, - "reachjunction": { - "name": "ReachJunction", - "categoryId": 4, - "url": "http://www.reachjunction.com/", - "companyId": "reachjunction" - }, - "reachlocal": { - "name": "ReachLocal", - "categoryId": 4, - "url": "http://www.reachlocal.com/", - "companyId": "reachlocal" - }, - "reactful": { - "name": "Reactful", - "categoryId": 4, - "url": "http://www.reactful.com/", - "companyId": "reactful" - }, - "reactivpub": { - "name": "Reactivpub", - "categoryId": 6, - "url": "http://www.reactivpub.com/", - "companyId": "r-advertising" - }, - "reactx": { - "name": "ReactX", - "categoryId": 4, - "url": "http://home.skinected.com", - "companyId": "reactx" - }, - "readerboard": { - "name": "ReaderBoard", - "categoryId": 7, - "url": "http://www.readrboard.com", - "companyId": "centre_phi" - }, - "readme": { - "name": "ReadMe", - "categoryId": 6, - "url": "https://readme.com/", - "companyId": "readme" - }, - "readspeaker.com": { - "name": "ReadSpeaker", - "categoryId": 2, - "url": "https://www.readspeaker.com/", - "companyId": null - }, - "realclick": { - "name": "RealClick", - "categoryId": 4, - "url": "http://www.realclick.co.kr/", - "companyId": "realclick" - }, - "realestate.com.au": { - "name": "realestate.com.au Pty Limited", - "categoryId": 4, - "url": "https://www.realestate.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "realperson.de": { - "name": "Realperson Chat", - "categoryId": 2, - "url": "http://www.optimise-it.de/", - "companyId": "optimise_it" - }, - "realtime": { - "name": "Realtime", - "categoryId": 2, - "url": "http://www.realtime.co/", - "companyId": "realtime" - }, - "realytics": { - "name": "Realytics", - "categoryId": 6, - "url": "https://www.realytics.io/", - "companyId": "realytics" - }, - "rebel_mouse": { - "name": "Rebel Mouse", - "categoryId": 6, - "url": "https://www.rebelmouse.com/", - "companyId": "rebelmouse" - }, - "recaptcha": { - "name": "reCAPTCHA", - "categoryId": 8, - "url": "https://www.google.com/recaptcha/about/", - "companyId": "google", - "source": "AdGuard" - }, - "recettes.net": { - "name": "Recettes.net", - "categoryId": 8, - "url": "http://www.recettes.net/", - "companyId": "recettes.net" - }, - "recopick": { - "name": "RecoPick", - "categoryId": 4, - "url": "https://recopick.com/", - "companyId": "recopick" - }, - "recreativ": { - "name": "Recreativ", - "categoryId": 4, - "url": "http://recreativ.ru/", - "companyId": "recreativ" - }, - "recruitics": { - "name": "Recruitics", - "categoryId": 6, - "url": "http://recruitics.com/", - "companyId": "recruitics" - }, - "red_ventures": { - "name": "Red Ventures", - "categoryId": 6, - "url": "https://www.redventures.com/", - "companyId": "red_ventures" - }, - "redblue_de": { - "name": "redblue", - "categoryId": 6, - "url": "https://www.redblue.de/", - "companyId": null - }, - "redcdn.pl": { - "name": "redGalaxy CDN", - "categoryId": 9, - "url": "http://www.atendesoftware.pl/", - "companyId": "atende_software" - }, - "reddit": { - "name": "Reddit", - "categoryId": 7, - "url": "https://www.reddit.com", - "companyId": "advance", - "source": "AdGuard" - }, - "redhelper": { - "name": "RedHelper", - "categoryId": 2, - "url": "http://redhelper.com/", - "companyId": "redhelper" - }, - "redlotus": { - "name": "RedLotus", - "categoryId": 4, - "url": "http://triggit.com/", - "companyId": "redlotus" - }, - "redtram": { - "name": "RedTram", - "categoryId": 4, - "url": "http://www.redtram.com/", - "companyId": "redtram" - }, - "redtube.com": { - "name": "redtube.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "redux_media": { - "name": "Redux Media", - "categoryId": 4, - "url": "http://reduxmedia.com/", - "companyId": "redux_media" - }, - "reed_business_information": { - "name": "Reed Business Information", - "categoryId": 6, - "url": "http://www.reedbusiness.com/", - "companyId": "andera_partners" - }, - "reembed.com": { - "name": "reEmbed", - "categoryId": 0, - "url": "https://www.reembed.com/", - "companyId": "reembed" - }, - "reevoo.com": { - "name": "Reevoo", - "categoryId": 4, - "url": "https://www.reevoo.com/en/", - "companyId": "reevoo" - }, - "refericon": { - "name": "Refericon", - "categoryId": 4, - "url": "https://refericon.pl/#", - "companyId": "refericon" - }, - "referlocal": { - "name": "ReferLocal", - "categoryId": 4, - "url": "http://referlocal.com/", - "companyId": "referlocal" - }, - "refersion": { - "name": "Refersion", - "categoryId": 4, - "url": "https://www.refersion.com/", - "companyId": "refersion" - }, - "refined_labs": { - "name": "Refined Labs", - "categoryId": 4, - "url": "http://www.refinedlabs.com", - "companyId": "refined_labs" - }, - "reflektion": { - "name": "Reflektion", - "categoryId": 4, - "url": "http://", - "companyId": "reflektion" - }, - "reformal": { - "name": "Reformal", - "categoryId": 2, - "url": "http://reformal.ru/", - "companyId": "reformal" - }, - "reinvigorate": { - "name": "Reinvigorate", - "categoryId": 6, - "url": "http://www.reinvigorate.net/", - "companyId": "media_temple" - }, - "rekko": { - "name": "Rekko", - "categoryId": 4, - "url": "http://convert.us/", - "companyId": "rekko" - }, - "reklam_store": { - "name": "Reklam Store", - "categoryId": 4, - "url": "http://www.reklamstore.com", - "companyId": "reklam_store" - }, - "reklamport": { - "name": "Reklamport", - "categoryId": 4, - "url": "http://www.reklamport.com/", - "companyId": "reklamport" - }, - "reklamz": { - "name": "ReklamZ", - "categoryId": 4, - "url": "http://www.reklamz.com/", - "companyId": "reklamz" - }, - "rekmob": { - "name": "Rekmob", - "categoryId": 4, - "url": "https://www.rekmob.com/", - "companyId": "rekmob" - }, - "relap": { - "name": "Relap", - "categoryId": 4, - "url": "https://relap.io/", - "companyId": "relap" - }, - "relay42": { - "name": "Relay42", - "categoryId": 5, - "url": "http://synovite.com", - "companyId": "relay42" - }, - "relestar": { - "name": "Relestar", - "categoryId": 6, - "url": "https://relestar.com/", - "companyId": "relestar" - }, - "relevant4.com": { - "name": "relevant4 GmbH", - "categoryId": 8, - "url": "https://www.relevant4.com/", - "companyId": null - }, - "remintrex": { - "name": "Remintrex", - "categoryId": 4, - "url": "http://www.remintrex.com/", - "companyId": null - }, - "remove.video": { - "name": "remove.video", - "categoryId": 12, - "url": null, - "companyId": null - }, - "repost.us": { - "name": "Repost.us", - "categoryId": 4, - "url": "http://www.freerangecontent.com/", - "companyId": "repost" - }, - "republer.com": { - "name": "Republer", - "categoryId": 4, - "url": "http://republer.com/", - "companyId": "republer" - }, - "res-meter": { - "name": "Res-meter", - "categoryId": 6, - "url": "http://respublica.al/res-meter", - "companyId": "respublica" - }, - "research_now": { - "name": "Research Now", - "categoryId": 4, - "url": "http://www.researchnow.com/", - "companyId": "research_now" - }, - "resonate_networks": { - "name": "Resonate Networks", - "categoryId": 4, - "url": "http://www.resonatenetworks.com/", - "companyId": "resonate" - }, - "respond": { - "name": "Respond", - "categoryId": 4, - "url": "http://respondhq.com/", - "companyId": "respond" - }, - "responsetap": { - "name": "ResponseTap", - "categoryId": 4, - "url": "http://www.adinsight.eu/", - "companyId": "responsetap" - }, - "result_links": { - "name": "Result Links", - "categoryId": 4, - "url": "http://www.resultlinks.com/", - "companyId": "result_links" - }, - "resultspage.com": { - "name": "SLI Systems", - "categoryId": 6, - "url": "https://www.sli-systems.com/", - "companyId": "sli_systems" - }, - "retailrocket.net": { - "name": "Retail Rocket", - "categoryId": 4, - "url": "https://retailrocket.net/", - "companyId": "retail_rocket" - }, - "retarget_app": { - "name": "Retarget App", - "categoryId": 4, - "url": "https://retargetapp.com/", - "companyId": "retargetapp" - }, - "retargeter_beacon": { - "name": "ReTargeter Beacon", - "categoryId": 4, - "url": "http://www.retargeter.com/", - "companyId": "retargeter" - }, - "retargeting.cl": { - "name": "Retargeting.cl", - "categoryId": 4, - "url": "http://retargeting.cl/", - "companyId": "retargeting" - }, - "retention_science": { - "name": "Retention Science", - "categoryId": 4, - "url": "http://retentionscience.com/", - "companyId": "retention_science" - }, - "reuters_media": { - "name": "Reuters media", - "categoryId": 9, - "url": "https://reuters.com", - "companyId": null - }, - "revcontent": { - "name": "RevContent", - "categoryId": 4, - "url": "https://www.revcontent.com/", - "companyId": "revcontent" - }, - "reve_marketing": { - "name": "Reve Marketing", - "categoryId": 4, - "url": "http://tellafriend.socialtwist.com/", - "companyId": "reve_marketing" - }, - "revenue": { - "name": "Revenue", - "categoryId": 4, - "url": "https://revenue.com/", - "companyId": "revenue" - }, - "revenuehits": { - "name": "RevenueHits", - "categoryId": 4, - "url": "http://www.revenuehits.com/", - "companyId": "revenuehits" - }, - "revenuemantra": { - "name": "RevenueMantra", - "categoryId": 4, - "url": "http://www.revenuemantra.com/", - "companyId": "revenuemantra" - }, - "revive_adserver": { - "name": "Revive Adserver", - "categoryId": 4, - "url": "https://www.revive-adserver.com/", - "companyId": "revive_adserver" - }, - "revolver_maps": { - "name": "Revolver Maps", - "categoryId": 6, - "url": "http://www.revolvermaps.com/", - "companyId": "revolver_maps" - }, - "revresponse": { - "name": "RevResponse", - "categoryId": 4, - "url": "http://www.netline.com/", - "companyId": "netline" - }, - "rewords": { - "name": "ReWords", - "categoryId": 4, - "url": "http://www.rewords.pl/", - "companyId": "rewords" - }, - "rhythmone": { - "name": "RhythmOne", - "categoryId": 4, - "url": "http://www.adconductor.com/", - "companyId": "rhythmone" - }, - "rhythmone_beacon": { - "name": "Rhythmone Beacon", - "categoryId": 4, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "ria.ru": { - "name": "ria.ru", - "categoryId": 8, - "url": "https://ria.ru/", - "companyId": null - }, - "rich_media_banner_network": { - "name": "Rich Media Banner Network", - "categoryId": 4, - "url": "http://rmbn.ru/", - "companyId": "rich_media_banner_network" - }, - "richrelevance": { - "name": "RichRelevance", - "categoryId": 2, - "url": "http://www.richrelevance.com/", - "companyId": "richrelevance" - }, - "ringier.ch": { - "name": "Ringier", - "categoryId": 6, - "url": "http://ringier.ch/en", - "companyId": "ringier" - }, - "rio_seo": { - "name": "Rio SEO", - "categoryId": 7, - "url": "http://www.meteorsolutions.com", - "companyId": "rio_seo" - }, - "riskfield.com": { - "name": "Riskified", - "categoryId": 2, - "url": "https://www.riskified.com/", - "companyId": "riskfield" - }, - "rncdn3.com": { - "name": "Reflected Networks", - "categoryId": 9, - "url": "http://www.rncdn3.com/", - "companyId": null - }, - "ro2.biz": { - "name": "Ro2.biz", - "categoryId": 4, - "url": "http://ro2.biz/index.php?r=adikku", - "companyId": "ro2.biz" - }, - "roblox": { - "name": "Roblox", - "categoryId": 8, - "url": "https://www.roblox.com/", - "companyId": null - }, - "rockerbox": { - "name": "Rockerbox", - "categoryId": 6, - "url": "https://www.rockerbox.com/privacy", - "companyId": "rockerbox" - }, - "rocket.ia": { - "name": "Rocket.ia", - "categoryId": 4, - "url": "https://rocket.la/", - "companyId": "rocket.la" - }, - "roi_trax": { - "name": "ROI trax", - "categoryId": 4, - "url": "http://www.oneupweb.com/", - "companyId": "oneupweb" - }, - "roistat": { - "name": "Roistat", - "categoryId": 6, - "url": "https://roistat.com", - "companyId": "roistat" - }, - "rollad": { - "name": "Rollad", - "categoryId": 4, - "url": "http://rollad.ru", - "companyId": "rollad" - }, - "rollbar": { - "name": "Rollbar", - "categoryId": 6, - "url": "http://www.rollbar.com/", - "companyId": "rollbar" - }, - "roost": { - "name": "Roost", - "categoryId": 6, - "url": "http://roost.me/", - "companyId": "roost" - }, - "rooster": { - "name": "Rooster", - "categoryId": 6, - "url": "http://www.getrooster.com/", - "companyId": "rooster" - }, - "roq.ad": { - "name": "Roq.ad", - "categoryId": 4, - "url": "https://www.roq.ad/", - "companyId": "roq.ad" - }, - "rotaban": { - "name": "RotaBan", - "categoryId": 4, - "url": "http://www.rotaban.ru/", - "companyId": "rotaban" - }, - "routenplaner-karten.com": { - "name": "Routenplaner Karten", - "categoryId": 2, - "url": "https://www.routenplaner-karten.com/", - "companyId": null - }, - "rovion": { - "name": "Rovion", - "categoryId": 4, - "url": "http://www.rovion.com/", - "companyId": "rovion" - }, - "rsspump": { - "name": "RSSPump", - "categoryId": 2, - "url": "http://www.rsspump.com", - "companyId": "rsspump" - }, - "rtb_house": { - "name": "RTB House", - "categoryId": 4, - "url": "http://en.adpilot.com/", - "companyId": "rtb_house" - }, - "rtblab": { - "name": "RTBmarkt", - "categoryId": 4, - "url": "http://www.rtbmarkt.de/en/home/", - "companyId": "rtbmarkt" - }, - "rtbsuperhub.com": { - "name": "rtbsuperhub.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "rtl_group": { - "name": "RTL Group", - "categoryId": 8, - "url": "http://www.rtlgroup.com/www/htm/home.aspx", - "companyId": "rtl_group" - }, - "rtmark.net": { - "name": "Advertising Technologies Ltd", - "categoryId": 4, - "url": "http://rtmark.net/", - "companyId": "big_wall_vision" - }, - "rubicon": { - "name": "Rubicon", - "categoryId": 4, - "url": "http://rubiconproject.com/", - "companyId": "rubicon_project" - }, - "ruhrgebiet": { - "name": "Ruhrgebiet", - "categoryId": 4, - "url": "https://www.ruhrgebiet-onlineservices.de/", - "companyId": "ruhrgebiet" - }, - "rummycircle": { - "name": "RummyCircle", - "categoryId": 4, - "url": "https://www.rummycircle.com/", - "companyId": "rummycircle" - }, - "run": { - "name": "RUN", - "categoryId": 4, - "url": "http://www.rundsp.com/", - "companyId": "run" - }, - "runative": { - "name": "Runative", - "categoryId": 4, - "url": "https://runative.com/", - "companyId": null - }, - "rune": { - "name": "Rune", - "categoryId": 6, - "url": "http://www.secretrune.com/", - "companyId": "rune_inc." - }, - "runmewivel.com": { - "name": "runmewivel.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "rythmxchange": { - "name": "Rythmxchange", - "categoryId": 0, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "s24_com": { - "name": "Shopping24 internet group", - "categoryId": 4, - "url": "https://www.s24.com/", - "companyId": null - }, - "s3xified.com": { - "name": "s3xified.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sabavision": { - "name": "SabaVision", - "categoryId": 4, - "url": "http://www.sabavision.com/en/", - "companyId": "sabavision" - }, - "sagemetrics": { - "name": "SageMetrics", - "categoryId": 4, - "url": "http://www.sagemetrics.com", - "companyId": "ipmg" - }, - "sailthru_horizon": { - "name": "Sailthru Horizon", - "categoryId": 4, - "url": "https://www.sailthru.com", - "companyId": "sailthru" - }, - "salecycle": { - "name": "SaleCycle", - "categoryId": 4, - "url": "http://www.salecycle.com/", - "companyId": "salecycle" - }, - "sales_feed": { - "name": "Sales Feed", - "categoryId": 4, - "url": "https://www.salesfeed.com/", - "companyId": "sales_feed" - }, - "sales_manago": { - "name": "SALESmanago", - "categoryId": 6, - "url": "https://www.salesmanago.com/", - "companyId": "sales_manago" - }, - "salesforce.com": { - "name": "Salesforce", - "categoryId": 4, - "url": "https://www.salesforce.com/eu/", - "companyId": "salesforce" - }, - "salesforce_live_agent": { - "name": "Salesforce Live Agent", - "categoryId": 2, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "salesfusion": { - "name": "SalesFUSION", - "categoryId": 4, - "url": "http://salesfusion.com/", - "companyId": "salesfusion" - }, - "salespider_media": { - "name": "SaleSpider Media", - "categoryId": 4, - "url": "http://salespidermedia.com/", - "companyId": "salespider_media" - }, - "salesviewer": { - "name": "SalesViewer", - "categoryId": 6, - "url": "https://www.salesviewer.com/", - "companyId": "salesviewer" - }, - "samba.tv": { - "name": "Samba TV", - "categoryId": 4, - "url": "https://samba.tv/", - "companyId": "samba_tv" - }, - "samsung": { - "name": "Samsung", - "categoryId": 8, - "url": "https://www.samsung.com/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungads": { - "name": "Samsung Ads", - "categoryId": 4, - "url": "https://www.samsung.com/business/samsungads/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungapps": { - "name": "Samsung Apps", - "categoryId": 101, - "url": "https://www.samsung.com/au/apps/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungmobile": { - "name": "Samsung Mobile", - "categoryId": 101, - "url": "https://www.samsung.com/mobile/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungpush": { - "name": "Samsung Push", - "categoryId": 8, - "url": null, - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungsds": { - "name": "Samsung SDS", - "categoryId": 10, - "url": "https://www.samsungsds.com/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungtv": { - "name": "Samsung TV", - "categoryId": 15, - "url": "https://www.samsung.com/au/tvs/", - "companyId": "samsung", - "source": "AdGuard" - }, - "sanoma.fi": { - "name": "Sanoma", - "categoryId": 4, - "url": "https://sanoma.com/", - "companyId": "sanoma" - }, - "sap_crm": { - "name": "SAP CRM", - "categoryId": 6, - "url": "https://www.sap.com/products/crm.html", - "companyId": "sap" - }, - "sap_sales_cloud": { - "name": "SAP Sales Cloud", - "categoryId": 2, - "url": "http://leadforce1.com/", - "companyId": "sap" - }, - "sap_xm": { - "name": "SAP Exchange Media", - "categoryId": 4, - "url": "http://sapexchange.media/", - "companyId": null - }, - "sape.ru": { - "name": "Sape", - "categoryId": 6, - "url": "https://www.sape.ru/en", - "companyId": "sape" - }, - "sapo_ads": { - "name": "SAPO Ads", - "categoryId": 4, - "url": "http://www.sapo.pt/", - "companyId": "sapo" - }, - "sas": { - "name": "SAS", - "categoryId": 6, - "url": "http://www.sas.com/", - "companyId": "sas" - }, - "say.ac": { - "name": "Say.ac", - "categoryId": 4, - "url": "http://say.ac", - "companyId": "say.ac" - }, - "say_media": { - "name": "Say Media", - "categoryId": 4, - "url": "http://www.saymedia.com/", - "companyId": "say_media" - }, - "sayyac": { - "name": "Sayyac", - "categoryId": 6, - "url": "http://www.sayyac.com/", - "companyId": "sayyac" - }, - "scarabresearch": { - "name": "Scarab Research", - "categoryId": 4, - "url": "https://www.scarabresearch.com/", - "companyId": "emarsys" - }, - "schibsted": { - "name": "Schibsted Media Group", - "categoryId": 8, - "url": "http://www.schibsted.com/", - "companyId": "schibsted_asa" - }, - "schneevonmorgen.com": { - "name": "Schnee von Morgen", - "categoryId": 0, - "url": "http://www.schneevonmorgen.com/", - "companyId": null - }, - "scoota": { - "name": "Scoota", - "categoryId": 4, - "url": "http://scoota.com/", - "companyId": "rockabox" - }, - "scorecard_research_beacon": { - "name": "ScoreCard Research Beacon", - "categoryId": 6, - "url": "https://www.scorecardresearch.com/", - "companyId": "comscore" - }, - "scout_analytics": { - "name": "Scout Analytics", - "categoryId": 4, - "url": "http://scoutanalytics.com/", - "companyId": "scout_analytics" - }, - "scribblelive": { - "name": "ScribbleLive", - "categoryId": 8, - "url": null, - "companyId": null - }, - "scribol": { - "name": "Scribol", - "categoryId": 4, - "url": "http://scribol.com/", - "companyId": "scribol" - }, - "scripps_analytics": { - "name": "Scripps Analytics", - "categoryId": 6, - "url": "http://www.scrippsnetworksinteractive.com/", - "companyId": "scripps_networks" - }, - "scroll": { - "name": "Scroll", - "categoryId": 5, - "url": "https://scroll.com/", - "companyId": "scroll" - }, - "scupio": { - "name": "Scupio", - "categoryId": 4, - "url": "http://ad.scupio.com/", - "companyId": "bridgewell" - }, - "search123": { - "name": "Search123", - "categoryId": 4, - "url": "http://www.search123.com/", - "companyId": "search123" - }, - "searchforce": { - "name": "SearchForce", - "categoryId": 4, - "url": "http://www.searchforce.com/", - "companyId": "searchforce" - }, - "searchignite": { - "name": "SearchIgnite", - "categoryId": 4, - "url": "https://searchignite.com/", - "companyId": "zeta" - }, - "searchrev": { - "name": "SearchRev", - "categoryId": 4, - "url": "http://www.searchrev.com/", - "companyId": "searchrev" - }, - "second_media": { - "name": "Second Media", - "categoryId": 4, - "url": "http://www.secondmedia.com/", - "companyId": "second_media" - }, - "sectigo": { - "name": "Sectigo Limited", - "categoryId": 5, - "url": "https://www.sectigo.com", - "companyId": "sectigo", - "source": "AdGuard" - }, - "securedtouch": { - "name": "SecuredTouch", - "categoryId": 6, - "url": "https://www.securedtouch.com/", - "companyId": null - }, - "securedvisit": { - "name": "SecuredVisit", - "categoryId": 4, - "url": "http://securedvisit.com/", - "companyId": "securedvisit" - }, - "seeding_alliance": { - "name": "Seeding Alliance", - "categoryId": 4, - "url": "http://seeding-alliance.de", - "companyId": "stroer" - }, - "seedtag.com": { - "name": "Seedtag", - "categoryId": 4, - "url": "https://www.seedtag.com/en/", - "companyId": "seedtag" - }, - "seevolution": { - "name": "SeeVolution", - "categoryId": 6, - "url": "http://www.seevolution.com", - "companyId": "seevolution" - }, - "segment": { - "name": "Segment", - "categoryId": 6, - "url": "https://segment.io/", - "companyId": "segment" - }, - "segmento": { - "name": "Segmento", - "categoryId": 4, - "url": "https://segmento.ru/en", - "companyId": "segmento" - }, - "segmint": { - "name": "Segmint", - "categoryId": 6, - "url": "http://www.segmint.com/", - "companyId": "segmint" - }, - "sekindo": { - "name": "Sekindo", - "categoryId": 4, - "url": "http://www.sekindo.com/", - "companyId": "sekindo" - }, - "sellpoints": { - "name": "Sellpoints", - "categoryId": 4, - "url": "https://www.sellpoints.com/", - "companyId": "sellpoints" - }, - "semantiqo.com": { - "name": "Semantiqo", - "categoryId": 4, - "url": "https://semantiqo.com/", - "companyId": null - }, - "semasio": { - "name": "Semasio", - "categoryId": 4, - "url": "http://semasio.com/", - "companyId": "semasio" - }, - "semilo": { - "name": "Semilo", - "categoryId": 4, - "url": "http://www.semilo.nl/", - "companyId": "semilo" - }, - "semknox.com": { - "name": "SEMKNOX GmbH", - "categoryId": 5, - "url": "https://semknox.com/", - "companyId": null - }, - "sendinblue": { - "name": "sendinblue", - "categoryId": 4, - "url": "https://fr.sendinblue.com/", - "companyId": "sendinblue" - }, - "sendpulse.com": { - "name": "SendPulse", - "categoryId": 3, - "url": "https://sendpulse.com/", - "companyId": null - }, - "sendsay": { - "name": "Sendsay", - "categoryId": 2, - "url": "https://sendsay.ru", - "companyId": "sendsay" - }, - "sense_digital": { - "name": "Sense Digital", - "categoryId": 6, - "url": "http://sensedigital.in/", - "companyId": "sense_digital" - }, - "sensors_data": { - "name": "Sensors Data", - "categoryId": 6, - "url": "https://www.sensorsdata.cn/", - "companyId": "sensors_data" - }, - "sentifi.com": { - "name": "Sentifi", - "categoryId": 6, - "url": "https://sentifi.com/", - "companyId": "sentifi" - }, - "sentry": { - "name": "Sentry", - "categoryId": 6, - "url": "https://sentry.io/", - "companyId": "sentry" - }, - "sepyra": { - "name": "Sepyra", - "categoryId": 4, - "url": "http://sepyra.com/", - "companyId": "sepyra" - }, - "sessioncam": { - "name": "SessionCam", - "categoryId": 6, - "url": "http://www.sessioncam.com/", - "companyId": "sessioncam" - }, - "sessionly": { - "name": "Sessionly", - "categoryId": 2, - "url": "https://www.sessionly.io/", - "companyId": "sessionly" - }, - "sevenone_media": { - "name": "SevenOne Media", - "categoryId": 4, - "url": null, - "companyId": null - }, - "sexadnetwork": { - "name": "SexAdNetwork", - "categoryId": 3, - "url": "http://www.sexadnetwork.com/", - "companyId": "sexadnetwork" - }, - "sexinyourcity": { - "name": "SexInYourCity", - "categoryId": 3, - "url": "http://www.sexinyourcity.com/", - "companyId": "sexinyourcity" - }, - "sextracker": { - "name": "SexTracker", - "categoryId": 3, - "url": "http://webmasters.sextracker.com/", - "companyId": "sextracker" - }, - "sexypartners.net": { - "name": "sexypartners.net", - "categoryId": 3, - "url": null, - "companyId": null - }, - "seznam": { - "name": "Seznam", - "categoryId": 6, - "url": "https://onas.seznam.cz/cz/", - "companyId": "seznam" - }, - "shareaholic": { - "name": "Shareaholic", - "categoryId": 6, - "url": "https://www.shareaholic.com/", - "companyId": "shareaholic" - }, - "shareasale": { - "name": "ShareASale", - "categoryId": 4, - "url": "http://www.shareasale.com/", - "companyId": "shareasale" - }, - "sharecompany": { - "name": "ShareCompany", - "categoryId": 2, - "url": "http://sharecompany.nl", - "companyId": "sharecompany" - }, - "sharepoint": { - "name": "SharePoint", - "categoryId": 8, - "url": "https://www.microsoft.com/microsoft-365/sharepoint/collaboration", - "companyId": "microsoft", - "source": "AdGuard" - }, - "sharethis": { - "name": "ShareThis", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "sharethrough": { - "name": "ShareThrough", - "categoryId": 4, - "url": "http://www.sharethrough.com/", - "companyId": "sharethrough" - }, - "sharpspring": { - "name": "Sharpspring", - "categoryId": 6, - "url": "https://sharpspring.com/", - "companyId": "sharpspring" - }, - "sheego.de": { - "name": "sheego.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "sheerid": { - "name": "SheerID", - "categoryId": 4, - "url": "http://www.sheerid.com/", - "companyId": "sheerid" - }, - "shinystat": { - "name": "ShinyStat", - "categoryId": 6, - "url": "http://www.shinystat.com/", - "companyId": "shinystat" - }, - "shop_target": { - "name": "Shop Target", - "categoryId": 4, - "url": "http://shoptarget.com.br/", - "companyId": "shopback" - }, - "shopauskunft.de": { - "name": "ShopAuskunft.de", - "categoryId": 2, - "url": "https://shopauskunft.de/", - "companyId": null - }, - "shopgate.com": { - "name": "Shopgate", - "categoryId": 2, - "url": "https://www.shopgate.com/", - "companyId": null - }, - "shopify": { - "name": "Shopify Inc.", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify", - "source": "AdGuard" - }, - "shopify_stats": { - "name": "Shopify Stats", - "categoryId": 6, - "url": "http://www.shopify.com/", - "companyId": "shopify", - "source": "AdGuard" - }, - "shopifycdn.com": { - "name": "Shopify CDN", - "categoryId": 9, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopifycloud.com": { - "name": "Shopify Cloud", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopper_approved": { - "name": "Shopper Approved", - "categoryId": 2, - "url": "http://www.shopperapproved.com", - "companyId": "shopper_approved" - }, - "shopping_com": { - "name": "Shopping.com", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "shopping_flux": { - "name": "Shopping Flux", - "categoryId": 6, - "url": "http://www.shopping-flux.com/", - "companyId": "shopping_flux" - }, - "shoprunner": { - "name": "ShopRunner", - "categoryId": 2, - "url": "https://www.shoprunner.com", - "companyId": "shoprunner" - }, - "shopsocially": { - "name": "ShopSocially", - "categoryId": 2, - "url": "http://shopsocially.com/", - "companyId": "shopsocially" - }, - "shopzilla": { - "name": "Shopzilla", - "categoryId": 4, - "url": "http://www.shopzilla.com/", - "companyId": "shopzilla" - }, - "shortnews": { - "name": "ShortNews.de", - "categoryId": 8, - "url": "http://www.shortnews.de/#", - "companyId": null - }, - "showrss": { - "name": "showRSS", - "categoryId": 8, - "url": "https://showrss.info/", - "companyId": "showrss", - "source": "AdGuard" - }, - "shrink": { - "name": "Shrink", - "categoryId": 2, - "url": "http://shink.in/", - "companyId": "shrink.in" - }, - "shutterstock": { - "name": "Shutterstock", - "categoryId": 8, - "url": "https://www.shutterstock.com/", - "companyId": "shutterstock_inc" - }, - "siblesectiveal.club": { - "name": "siblesectiveal.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sidecar": { - "name": "Sidecar", - "categoryId": 6, - "url": "http://hello.getsidecar.com/", - "companyId": "sidecar" - }, - "sift_science": { - "name": "Sift Science", - "categoryId": 6, - "url": "https://siftscience.com/", - "companyId": "sift_science" - }, - "signal": { - "name": "Signal", - "categoryId": 5, - "url": "https://www.signal.co/", - "companyId": "signal_digital" - }, - "signifyd": { - "name": "Signifyd", - "categoryId": 6, - "url": "https://www.signifyd.com/", - "companyId": "signifyd" - }, - "silverpop": { - "name": "Silverpop", - "categoryId": 2, - "url": "http://www.silverpop.com/", - "companyId": "ibm" - }, - "similardeals.net": { - "name": "SimilarDeals", - "categoryId": 8, - "url": "http://www.similardeals.net/", - "companyId": null - }, - "similarweb": { - "name": "SimilarWeb", - "categoryId": 6, - "url": "https://www.similarweb.com/", - "companyId": "similarweb", - "source": "AdGuard" - }, - "simplereach": { - "name": "SimpleReach", - "categoryId": 6, - "url": "https://www.nativo.com/simplereach", - "companyId": "nativo" - }, - "simpli.fi": { - "name": "Simpli.fi", - "categoryId": 4, - "url": "http://www.simpli.fi", - "companyId": "simpli.fi" - }, - "sina": { - "name": "Sina", - "categoryId": 6, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "sina_cdn": { - "name": "Sina CDN", - "categoryId": 9, - "url": "https://www.sina.com.cn/", - "companyId": "sina" - }, - "singlefeed": { - "name": "SingleFeed", - "categoryId": 4, - "url": "https://www.singlefeed.com/", - "companyId": "singlefeed" - }, - "sirdata": { - "name": "Sirdata", - "categoryId": 6, - "url": "http://www.sirdata.com/home/", - "companyId": "sirdata" - }, - "site24x7": { - "name": "Site24x7", - "categoryId": 6, - "url": "https://www.site24x7.com/", - "companyId": "zoho_corp" - }, - "site_booster": { - "name": "Site Booster", - "categoryId": 7, - "url": "https://sitebooster.com/", - "companyId": "site_booster" - }, - "site_stratos": { - "name": "Site Stratos", - "categoryId": 4, - "url": "http://www.infocube.co.jp/", - "companyId": "infocube" - }, - "siteapps": { - "name": "SiteApps", - "categoryId": 2, - "url": "http://siteapps.com", - "companyId": "siteapps" - }, - "sitebro": { - "name": "SiteBro", - "categoryId": 6, - "url": "http://www.sitebro.net/", - "companyId": "sitebro" - }, - "siteheart": { - "name": "SiteHeart", - "categoryId": 2, - "url": "http://siteheart.com/", - "companyId": "siteheart" - }, - "siteimprove": { - "name": "Siteimprove", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "siteimprove_analytics": { - "name": "SiteImprove Analytics", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "sitelabweb.com": { - "name": "sitelabweb.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sitemeter": { - "name": "SiteMeter", - "categoryId": 6, - "url": "http://www.sitemeter.com/", - "companyId": "sitemeter,_inc." - }, - "sitescout": { - "name": "SiteScout by Centro", - "categoryId": 4, - "url": "http://www.sitescout.com", - "companyId": "centro" - }, - "sitetag": { - "name": "SiteTag", - "categoryId": 2, - "url": "http://www.sitetag.us/", - "companyId": "sitetag" - }, - "sitewit": { - "name": "SiteWit", - "categoryId": 4, - "url": "http://www.sitewit.com/", - "companyId": "sitewit" - }, - "six_apart_advertising": { - "name": "Six Apart Advertising", - "categoryId": 4, - "url": "http://www.sixapart.com/advertising/", - "companyId": "six_apart" - }, - "sixt-neuwagen.de": { - "name": "sixt-neuwagen.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "skadtec.com": { - "name": "GP One GmbH", - "categoryId": 6, - "url": "http://www.gp-one.com/", - "companyId": null - }, - "skimlinks": { - "name": "SkimLinks", - "categoryId": 4, - "url": "http://www.skimlinks.com/", - "companyId": "skimlinks" - }, - "skroutz": { - "name": "Skroutz", - "categoryId": 6, - "url": "https://www.skroutz.gr/", - "companyId": "skroutz" - }, - "skyglue": { - "name": "SkyGlue", - "categoryId": 6, - "url": "http://www.skyglue.com/", - "companyId": "skyglue_technology" - }, - "skype": { - "name": "Skype", - "categoryId": 2, - "url": "http://www.skype.com", - "companyId": "microsoft" - }, - "skysa": { - "name": "Skysa", - "categoryId": 2, - "url": "http://www.skysa.com/", - "companyId": "skysa" - }, - "skyscnr.com": { - "name": "Skyscanner CDN", - "categoryId": 9, - "url": "https://www.skyscanner.net/", - "companyId": null - }, - "slack": { - "name": "Slack", - "categoryId": 8, - "url": "https://www.slack.com/", - "companyId": "salesforce", - "source": "AdGuard" - }, - "slashdot_widget": { - "name": "Slashdot Widget", - "categoryId": 2, - "url": "http://slashdot.org", - "companyId": "slashdot" - }, - "sleeknote": { - "name": "Sleeknote", - "categoryId": 2, - "url": "https://sleeknote.com/", - "companyId": "sleeknote" - }, - "sli_systems": { - "name": "SLI Systems", - "categoryId": 2, - "url": "http://www.sli-systems.com", - "companyId": "sli_systems" - }, - "slice_factory": { - "name": "Slice Factory", - "categoryId": 2, - "url": "http://www.slicefactory.com/", - "companyId": "slice_factory" - }, - "slimcutmedia": { - "name": "SlimCutMedia", - "categoryId": 6, - "url": "http://www.slimcutmedia.com/", - "companyId": "slimcutmedia" - }, - "slingpic": { - "name": "Slingpic", - "categoryId": 4, - "url": "http://slingpic.com/", - "companyId": "affectv" - }, - "smaato": { - "name": "Smaato", - "categoryId": 4, - "url": "http://www.smaato.com/", - "companyId": "smaato" - }, - "smart4ads": { - "name": "smart4ads", - "categoryId": 4, - "url": "http://www.smart4ads.com", - "companyId": "smart4ads" - }, - "smart_adserver": { - "name": "SMART AdServer", - "categoryId": 4, - "url": "https://smartadserver.com/", - "companyId": "smart_adserver" - }, - "smart_call": { - "name": "Smart Call", - "categoryId": 2, - "url": "https://smartcall.kz/", - "companyId": "smart_call" - }, - "smart_content": { - "name": "Smart Content", - "categoryId": 4, - "url": "http://www.getsmartcontent.com", - "companyId": "get_smart_content" - }, - "smart_device_media": { - "name": "Smart Device Media", - "categoryId": 4, - "url": "http://www.smartdevicemedia.com/", - "companyId": "smart_device_media" - }, - "smart_leads": { - "name": "Smart Leads", - "categoryId": 4, - "url": "http://www.cnt.my/", - "companyId": "smart_leads" - }, - "smart_selling": { - "name": "Smart Selling", - "categoryId": 2, - "url": "https://smartselling.cz/", - "companyId": "smart_selling" - }, - "smartad": { - "name": "smartAD", - "categoryId": 4, - "url": "http://smartad.eu/", - "companyId": "smartad" - }, - "smartbn": { - "name": "SmartBN", - "categoryId": 4, - "url": "http://smartbn.ru/", - "companyId": "smartbn" - }, - "smartclick.net": { - "name": "SmartClick", - "categoryId": 4, - "url": "http://smartclick.net/", - "companyId": null - }, - "smartclip": { - "name": "SmartClip", - "categoryId": 4, - "url": "http://www.smartclip.com/", - "companyId": "smartclip" - }, - "smartcontext": { - "name": "SmartContext", - "categoryId": 4, - "url": "http://smartcontext.pl/", - "companyId": "smartcontext" - }, - "smarter_remarketer": { - "name": "SmarterHQ", - "categoryId": 4, - "url": "https://smarterhq.com", - "companyId": "smarterhq" - }, - "smarter_travel": { - "name": "Smarter Travel Media", - "categoryId": 4, - "url": "https://www.smartertravel.com/", - "companyId": "iac_apps" - }, - "smarterclick": { - "name": "Smarterclick", - "categoryId": 4, - "url": "http://www.smarterclick.co.uk/", - "companyId": "smarter_click" - }, - "smartertrack": { - "name": "SmarterTrack", - "categoryId": 4, - "url": "http://www.smartertrack.com/", - "companyId": "smartertrack" - }, - "smartlink.cool": { - "name": "smartlink.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "smartlook": { - "name": "Smartlook", - "categoryId": 2, - "url": "https://www.smartlook.com/", - "companyId": "smartlook" - }, - "smartstream.tv": { - "name": "SmartStream.TV", - "categoryId": 4, - "url": "https://www.smartstream.tv/en", - "companyId": "smartstream" - }, - "smartsupp_chat": { - "name": "Smartsupp Chat", - "categoryId": 2, - "url": "https://www.smartsupp.com/", - "companyId": "smartsuppp" - }, - "smi2.ru": { - "name": "smi2.ru", - "categoryId": 6, - "url": "https://smi2.net/", - "companyId": "media2_stat.media" - }, - "smooch": { - "name": "Smooch", - "categoryId": 2, - "url": "https://smooch.io/", - "companyId": "smooch" - }, - "smowtion": { - "name": "Smowtion", - "categoryId": 4, - "url": "http://www.smowtion.com/", - "companyId": "smowtion" - }, - "smx_ventures": { - "name": "SMX Ventures", - "categoryId": 6, - "url": "http://smxeventures.com/", - "companyId": "smx_ventures" - }, - "smyte": { - "name": "Smyte", - "categoryId": 6, - "url": "https://www.smyte.com/", - "companyId": "smyte" - }, - "snacktv": { - "name": "SnackTV", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snacktv_player": { - "name": "SnackTV-Player", - "categoryId": 0, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snap": { - "name": "Snap", - "categoryId": 2, - "url": "http://www.snap.com/", - "companyId": "snap_technologies" - }, - "snap_engage": { - "name": "Snap Engage", - "categoryId": 2, - "url": "https://snapengage.com/", - "companyId": "snap_engage" - }, - "snapchat": { - "name": "Snapchat For Business", - "categoryId": 4, - "url": "https://www.snapchat.com/", - "companyId": "snap_technologies" - }, - "snapcraft": { - "name": "Snapcraft", - "categoryId": 8, - "url": "https://snapcraft.io", - "companyId": "canonical", - "source": "AdGuard" - }, - "snigelweb": { - "name": "SnigelWeb, Inc.", - "categoryId": 4, - "url": "http://www.snigelweb.com/", - "companyId": "snigelweb_inc" - }, - "snoobi": { - "name": "Snoobi", - "categoryId": 6, - "url": "http://www.snoobi.eu/", - "companyId": "snoobi" - }, - "snoobi_analytics": { - "name": "Snoobi Analytics", - "categoryId": 6, - "url": "http://www.snoobi.com/", - "companyId": "snoobi_oy" - }, - "snowplow": { - "name": "Snowplow", - "categoryId": 6, - "url": "http://snowplowanalytics.com/", - "companyId": "snowplow" - }, - "soasta_mpulse": { - "name": "SOASTA mPulse", - "categoryId": 6, - "url": "http://www.soasta.com/", - "companyId": "akamai" - }, - "sociable_labs": { - "name": "Sociable Labs", - "categoryId": 4, - "url": "http://www.sociablelabs.com/", - "companyId": "sociable_labs" - }, - "social_amp": { - "name": "Social Amp", - "categoryId": 4, - "url": "http://www.merkleinc.com/", - "companyId": "dentsu_aegis_network" - }, - "social_annex": { - "name": "Social Annex", - "categoryId": 4, - "url": "http://www.socialannex.com", - "companyId": "social_annex" - }, - "social_miner": { - "name": "Social Miner", - "categoryId": 7, - "url": "https://socialminer.com/", - "companyId": "social_miner" - }, - "socialbeat": { - "name": "socialbeat", - "categoryId": 4, - "url": "http://www.socialbeat.it/", - "companyId": "socialbeat" - }, - "socialrms": { - "name": "SocialRMS", - "categoryId": 7, - "url": "http://socialinterface.com/socialrms/", - "companyId": "socialinterface" - }, - "sociaplus.com": { - "name": "SociaPlus", - "categoryId": 6, - "url": "https://sociaplus.com/", - "companyId": null - }, - "sociomantic": { - "name": "Sociomantic", - "categoryId": 4, - "url": "http://www.sociomantic.com/", - "companyId": "sociomantic_labs_gmbh" - }, - "sohu": { - "name": "Sohu", - "categoryId": 7, - "url": "http://www.sohu.com", - "companyId": "sohu" - }, - "sojern": { - "name": "Sojern", - "categoryId": 4, - "url": "http://www.sojern.com/", - "companyId": "sojern" - }, - "sokrati": { - "name": "Sokrati", - "categoryId": 4, - "url": "http://sokrati.com/", - "companyId": "sokrati" - }, - "solads.media": { - "name": "solads.media", - "categoryId": 4, - "url": "http://solads.media/", - "companyId": null - }, - "solaredge": { - "name": "SolarEdge Technologies, Inc.", - "categoryId": 8, - "url": "https://www.solaredge.com/", - "companyId": "solaredge", - "source": "AdGuard" - }, - "solidopinion": { - "name": "SolidOpinion", - "categoryId": 2, - "url": "https://solidopinion.com/", - "companyId": "solidopinion" - }, - "solve_media": { - "name": "Solve Media", - "categoryId": 4, - "url": "http://solvemedia.com/", - "companyId": "solve_media" - }, - "soma_2": { - "name": "SOMA 2", - "categoryId": 4, - "url": "http://www.webcombi.de/", - "companyId": "soma_2_gmbh" - }, - "somoaudience": { - "name": "SoMo Audience", - "categoryId": 4, - "url": "https://somoaudience.com/", - "companyId": "somoaudience" - }, - "sonobi": { - "name": "Sonobi", - "categoryId": 4, - "url": "http://sonobi.com/", - "companyId": "sonobi" - }, - "sonos": { - "name": "Sonos", - "categoryId": 8, - "url": "https://www.sonos.com/", - "companyId": "sonos", - "source": "AdGuard" - }, - "sophus3": { - "name": "Sophus3", - "categoryId": 4, - "url": "http://www.sophus3.com/", - "companyId": "sophus3" - }, - "sortable": { - "name": "Sortable", - "categoryId": 4, - "url": "https://sortable.com/", - "companyId": "sortable" - }, - "soundcloud": { - "name": "SoundCloud", - "categoryId": 0, - "url": "http://soundcloud.com/", - "companyId": "soundcloud" - }, - "sourceknowledge_pixel": { - "name": "SourceKnowledge Pixel", - "categoryId": 4, - "url": "http://www.provenpixel.com/", - "companyId": "sourceknowledge" - }, - "sourcepoint": { - "name": "Sourcepoint", - "categoryId": 4, - "url": "https://www.sourcepoint.com/", - "companyId": "sourcepoint" - }, - "sovrn": { - "name": "sovrn", - "categoryId": 4, - "url": "https://www.sovrn.com/", - "companyId": "sovrn" - }, - "sovrn_viewability_solutions": { - "name": "Sovrn Signal", - "categoryId": 4, - "url": "https://www.sovrn.com/publishers/signal/", - "companyId": "sovrn" - }, - "spark_studios": { - "name": "Spark Studios", - "categoryId": 0, - "url": "http://www.sparkstudios.com/", - "companyId": "spark_studios" - }, - "sparkasse.de": { - "name": "sparkasse.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "speakpipe": { - "name": "SpeakPipe", - "categoryId": 2, - "url": "http://www.speakpipe.com/", - "companyId": "speakpipe" - }, - "specific_media": { - "name": "Specific Media", - "categoryId": 4, - "url": "http://www.specificmedia.com", - "companyId": "specific_media" - }, - "spectate": { - "name": "Spectate", - "categoryId": 6, - "url": "http://spectate.com/", - "companyId": "spectate" - }, - "speed_shift_media": { - "name": "Speed Shift Media", - "categoryId": 4, - "url": "http://www.speedshiftmedia.com/", - "companyId": "speed_shift_media" - }, - "speedcurve": { - "name": "SpeedCurve", - "categoryId": 6, - "url": "https://speedcurve.com/", - "companyId": null - }, - "speedyads": { - "name": "SpeedyAds", - "categoryId": 4, - "url": "http://www.entireweb.com/speedyads/", - "companyId": "entireweb" - }, - "speee": { - "name": "Speee", - "categoryId": 4, - "url": "https://speee.jp", - "companyId": "speee" - }, - "sphere": { - "name": "Sphere", - "categoryId": 4, - "url": "http://www.sphere.com/", - "companyId": "verizon" - }, - "spheremall": { - "name": "SphereMall", - "categoryId": 6, - "url": "https://spheremall.com", - "companyId": "spheremall" - }, - "sphereup": { - "name": "SphereUp", - "categoryId": 2, - "url": "http://zoomd.com/", - "companyId": "zoomd" - }, - "spicy": { - "name": "Spicy", - "categoryId": 4, - "url": "http://sspicy.ru/#main", - "companyId": "spicy_ssp" - }, - "spider.ad": { - "name": "Spider.Ad", - "categoryId": 4, - "url": "http://spider.ad/", - "companyId": "spider.ad" - }, - "spider_ads": { - "name": "Spider Ads", - "categoryId": 4, - "url": "http://www.spiderads.eu/", - "companyId": "spiderads" - }, - "spinnakr": { - "name": "Spinnakr", - "categoryId": 6, - "url": "http://spinnakr.com/", - "companyId": "spinnakr" - }, - "spokenlayer": { - "name": "SpokenLayer", - "categoryId": 0, - "url": "http://www.spokenlayer.com", - "companyId": "spokenlayer" - }, - "spongecell": { - "name": "Spongecell", - "categoryId": 4, - "url": "http://www.spongecell.com/", - "companyId": "spongecell" - }, - "sponsorads.de": { - "name": "SponsorAds.de", - "categoryId": 4, - "url": "http://sponsorads.de", - "companyId": "sponsorads.de" - }, - "sportsbet_affiliates": { - "name": "Sportsbet Affiliates", - "categoryId": 4, - "url": "http://www.sportsbetaffiliates.com.au/", - "companyId": "sportsbet_affiliates" - }, - "spot.im": { - "name": "Spot.IM", - "categoryId": 7, - "url": "https://www.spot.im/", - "companyId": "spot.im" - }, - "spoteffect": { - "name": "Spoteffect", - "categoryId": 6, - "url": "http://www.spoteffects.com/home/", - "companyId": "spoteffect" - }, - "spotify": { - "name": "Spotify", - "categoryId": 0, - "url": "https://www.spotify.com/", - "companyId": "spotify" - }, - "spotify_embed": { - "name": "Spotify Embed", - "categoryId": 0, - "url": "https://www.spotify.com", - "companyId": "spotify" - }, - "spotscenered.info": { - "name": "spotscenered.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "spotxchange": { - "name": "SpotX", - "categoryId": 4, - "url": "https://www.spotx.tv/", - "companyId": "rtl_group" - }, - "spoutable": { - "name": "Spoutable", - "categoryId": 4, - "url": "http://spoutable.com/", - "companyId": "spoutable" - }, - "springboard": { - "name": "SpringBoard", - "categoryId": 4, - "url": "http://home.springboardplatform.com/", - "companyId": "springboard" - }, - "springserve": { - "name": "SpringServe", - "categoryId": 4, - "url": "http://springserve.com/", - "companyId": "springserve" - }, - "sprinklr": { - "name": "Sprinklr", - "categoryId": 4, - "url": "https://www.sprinklr.com/", - "companyId": "sprinklr" - }, - "sputnik": { - "name": "Sputnik", - "categoryId": 6, - "url": "https://cnt.sputnik.ru/", - "companyId": "sputnik" - }, - "squadata": { - "name": "Squadata", - "categoryId": 4, - "url": "http://www.email-match.net/", - "companyId": "squadata" - }, - "squarespace.com": { - "name": "Squarespace", - "categoryId": 6, - "url": "https://www.squarespace.com/", - "companyId": null - }, - "srvtrck.com": { - "name": "srvtrck.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "srvvtrk.com": { - "name": "srvvtrk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sstatic.net": { - "name": "Stack Exchange", - "categoryId": 9, - "url": "https://sstatic.net/", - "companyId": null - }, - "st-hatena": { - "name": "Hatena", - "categoryId": 7, - "url": "http://www.hatena.ne.jp/", - "companyId": "hatena_jp" - }, - "stackadapt": { - "name": "StackAdapt", - "categoryId": 4, - "url": "http://www.stackadapt.com/", - "companyId": "stackadapt" - }, - "stackpathdns.com": { - "name": "StackPath", - "categoryId": 9, - "url": "https://www.stackpath.com/", - "companyId": null - }, - "stailamedia_com": { - "name": "stailamedia.com", - "categoryId": 4, - "url": "http://stailamedia.com/", - "companyId": null - }, - "stalluva.pro": { - "name": "stalluva.pro", - "categoryId": 11, - "url": null, - "companyId": null - }, - "startapp": { - "name": "StartApp", - "categoryId": 4, - "url": "https://www.startapp.com/", - "companyId": null - }, - "stat24": { - "name": "Stat24", - "categoryId": 6, - "url": "http://www.stat24.com/en/", - "companyId": "stat24" - }, - "stat4u": { - "name": "stat4u", - "categoryId": 6, - "url": "http://stat.4u.pl/", - "companyId": "stat4u" - }, - "statcounter": { - "name": "Statcounter", - "categoryId": 6, - "url": "http://www.statcounter.com/", - "companyId": "statcounter" - }, - "stathat": { - "name": "StatHat", - "categoryId": 6, - "url": "http://www.stathat.com/", - "companyId": "stathat" - }, - "statisfy": { - "name": "Statisfy", - "categoryId": 6, - "url": "http://www.statisfy.com/", - "companyId": "statisfy" - }, - "statsy.net": { - "name": "statsy.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "statuscake": { - "name": "StatusCake", - "categoryId": 6, - "url": "https://www.statuscake.com/", - "companyId": "statuscake" - }, - "statuspage.io": { - "name": "Statuspage", - "categoryId": 2, - "url": "https://www.statuspage.io/", - "companyId": "atlassian" - }, - "stayfriends.de": { - "name": "stayfriends.de", - "categoryId": 8, - "url": "https://www.stayfriends.de/", - "companyId": null - }, - "steelhouse": { - "name": "Steel House Media", - "categoryId": 4, - "url": "https://steelhouse.com/", - "companyId": "steelhouse" - }, - "steepto.com": { - "name": "Steepto", - "categoryId": 4, - "url": "https://www.steepto.com/", - "companyId": null - }, - "stepstone.com": { - "name": "StepStone", - "categoryId": 8, - "url": "https://www.stepstone.com/", - "companyId": null - }, - "stetic": { - "name": "Stetic", - "categoryId": 6, - "url": "https://www.stetic.com/", - "companyId": "stetic" - }, - "stickyads": { - "name": "StickyAds", - "categoryId": 4, - "url": "http://corporate.comcast.com/", - "companyId": "comcast" - }, - "stocktwits": { - "name": "StockTwits", - "categoryId": 2, - "url": "http://stocktwits.com", - "companyId": "stocktwits" - }, - "storify": { - "name": "Storify", - "categoryId": 4, - "url": "https://storify.com/", - "companyId": "adobe" - }, - "storygize": { - "name": "Storygize", - "categoryId": 4, - "url": "http://www.storygize.com/", - "companyId": null - }, - "strands_recommender": { - "name": "Strands Recommender", - "categoryId": 4, - "url": "http://recommender.strands.com", - "companyId": "strands" - }, - "strava": { - "name": "Strava", - "categoryId": 6, - "url": "https://strava.com", - "companyId": "strava" - }, - "streak": { - "name": "Streak", - "categoryId": 2, - "url": "http://www.streak.com/", - "companyId": "streak" - }, - "streamotion": { - "name": "Streamotion", - "categoryId": 0, - "url": "https://streamotion.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "streamrail.com": { - "name": "StreamRail", - "categoryId": 4, - "url": "https://www.streamrail.com/", - "companyId": "ironsource" - }, - "stride": { - "name": "Stride", - "categoryId": 6, - "url": "https://www.getstride.com/", - "companyId": "stride_software" - }, - "stripchat.com": { - "name": "stripchat.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stripe.com": { - "name": "Stripe", - "categoryId": 2, - "url": "https://stripe.com/", - "companyId": null - }, - "stripst.com": { - "name": "stripst.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stroer_digital_media": { - "name": "Stroer Digital Media", - "categoryId": 4, - "url": "http://www.stroeer.de/", - "companyId": "stroer" - }, - "strossle": { - "name": "Strossle", - "categoryId": 4, - "url": "https://strossle.com/", - "companyId": "strossle" - }, - "struq": { - "name": "Struq", - "categoryId": 4, - "url": "http://www.struq.com/", - "companyId": "quantcast" - }, - "stumbleupon_widgets": { - "name": "StumbleUpon Widgets", - "categoryId": 7, - "url": "http://www.stumbleupon.com/", - "companyId": "stumbleupon" - }, - "sub2": { - "name": "Sub2", - "categoryId": 4, - "url": "http://www.sub2tech.com/", - "companyId": "sub2" - }, - "sublime_skinz": { - "name": "Sublime", - "categoryId": 4, - "url": "https://sublimeskinz.com/home", - "companyId": "sublime_skinz" - }, - "suggest.io": { - "name": "Suggest.io", - "categoryId": 4, - "url": "https://suggest.io/", - "companyId": "suggest.io" - }, - "sumologic.com": { - "name": "Sumologic", - "categoryId": 6, - "url": "https://www.sumologic.com/", - "companyId": null - }, - "sumome": { - "name": "Sumo", - "categoryId": 6, - "url": "https://sumo.com/", - "companyId": "sumome" - }, - "sundaysky": { - "name": "SundaySky", - "categoryId": 4, - "url": "http://www.sundaysky.com/", - "companyId": "sundaysky" - }, - "supercell": { - "name": "Supercell", - "categoryId": 2, - "url": "https://supercell.com/", - "companyId": "supercell", - "source": "AdGuard" - }, - "supercounters": { - "name": "SuperCounters", - "categoryId": 6, - "url": "http://www.supercounters.com/", - "companyId": "supercounters" - }, - "superfastcdn.com": { - "name": "superfastcdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "supership": { - "name": "Supership", - "categoryId": 4, - "url": "https://supership.jp/en/", - "companyId": "supership" - }, - "supplyframe": { - "name": "SupplyFrame", - "categoryId": 4, - "url": "https://supplyframe.com/", - "companyId": "supplyframe" - }, - "surf_by_surfingbird": { - "name": "Surf by Surfingbird", - "categoryId": 2, - "url": "http://surfingbird.ru/", - "companyId": "surfingbird" - }, - "survata": { - "name": "Survata", - "categoryId": 4, - "url": "https://www.survata.com/", - "companyId": "survata" - }, - "sweettooth": { - "name": "Sweettooth", - "categoryId": 2, - "url": "https://www.sweettoothrewards.com/", - "companyId": "sweet_tooth_rewards" - }, - "swiftype": { - "name": "Swiftype", - "categoryId": 9, - "url": "https://swiftype.com/", - "companyId": "elastic" - }, - "swisscom": { - "name": "Swisscom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "switch_concepts": { - "name": "Switch Concepts", - "categoryId": 4, - "url": "http://www.switchconcepts.co.uk/", - "companyId": "switch_concepts" - }, - "switchtv": { - "name": "Switch Media", - "categoryId": 8, - "url": "https://www.switch.tv/", - "companyId": "switchtv", - "source": "AdGuard" - }, - "swoop": { - "name": "Swoop", - "categoryId": 4, - "url": "http://swoop.com/", - "companyId": "swoop" - }, - "sykes": { - "name": "Sykes", - "categoryId": 6, - "url": "http://www.sykescottages.co.uk/", - "companyId": "sykes_cottages" - }, - "symantec": { - "name": "Symantec (Norton Secured Seal)", - "categoryId": 5, - "url": "https://www.symantec.com/page.jsp?id=ssl-resources&tabID=3#", - "companyId": "symantec" - }, - "symphony_talent": { - "name": "Symphony Talent", - "categoryId": 2, - "url": "http://www.symphonytalent.com/", - "companyId": "symphony_talent" - }, - "synacor": { - "name": "Synacor", - "categoryId": 4, - "url": "https://www.synacor.com/", - "companyId": "synacor" - }, - "syncapse": { - "name": "Syncapse", - "categoryId": 4, - "url": "http://www.clickable.com/", - "companyId": "syncapse" - }, - "synergy-e": { - "name": "Synergy-E", - "categoryId": 4, - "url": "http://synergy-e.com/", - "companyId": "synergy-e" - }, - "t-mobile": { - "name": "Deutsche Telekom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "t8cdn.com": { - "name": "t8cdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "tableteducation.com": { - "name": "tableteducation.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "taboola": { - "name": "Taboola", - "categoryId": 4, - "url": "http://www.taboola.com", - "companyId": "taboola" - }, - "tacoda": { - "name": "Tacoda", - "categoryId": 4, - "url": "http://www.tacoda.com/", - "companyId": "verizon" - }, - "tag_commander": { - "name": "Commanders Act", - "categoryId": 5, - "url": "https://www.commandersact.com/en/", - "companyId": "tag_commander" - }, - "tagcade": { - "name": "Tagcade", - "categoryId": 4, - "url": "https://www.pubvantage.com/", - "companyId": "pubvantage" - }, - "taggify": { - "name": "Taggify", - "categoryId": 4, - "url": "http://new.taggify.net/", - "companyId": "taggify" - }, - "taggy": { - "name": "TAGGY", - "categoryId": 4, - "url": "http://taggy.jp/", - "companyId": "taggy" - }, - "tagman": { - "name": "TagMan", - "categoryId": 5, - "url": "http://www.tagman.com/", - "companyId": "ensighten" - }, - "tail_target": { - "name": "Tail", - "categoryId": 6, - "url": "https://www.tail.digital/", - "companyId": "tail.digital" - }, - "tailsweep": { - "name": "Tailsweep", - "categoryId": 4, - "url": "http://www.tailsweep.se/", - "companyId": "tailsweep" - }, - "tamedia.ch": { - "name": "Tamedia", - "categoryId": 4, - "url": "https://www.tamedia.ch/", - "companyId": null - }, - "tanx": { - "name": "Tanx", - "categoryId": 4, - "url": "http://tanx.com/", - "companyId": "tanx" - }, - "taobao": { - "name": "Taobao", - "categoryId": 4, - "url": "https://world.taobao.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "tapad": { - "name": "Tapad", - "categoryId": 4, - "url": "http://www.tapad.com/", - "companyId": "telenor" - }, - "tapinfluence": { - "name": "TapInfluence", - "categoryId": 4, - "url": "http://theblogfrog.com/", - "companyId": "tapinfluence" - }, - "tarafdari": { - "name": "Tarafdari", - "categoryId": 4, - "url": "https://www.tarafdari.com/", - "companyId": "tarafdari" - }, - "target_2_sell": { - "name": "Target 2 Sell", - "categoryId": 4, - "url": "http://www.target2sell.com/en/", - "companyId": "target_2_sell" - }, - "target_circle": { - "name": "Target Circle", - "categoryId": 6, - "url": "http://targetcircle.com", - "companyId": "target_circle" - }, - "target_fuel": { - "name": "Target Fuel", - "categoryId": 6, - "url": "http://targetfuel.com/", - "companyId": "target_fuel" - }, - "tawk": { - "name": "Tawk", - "categoryId": 2, - "url": "https://www.tawk.to/", - "companyId": "tawk" - }, - "tbn.ru": { - "name": "TBN.ru", - "categoryId": 4, - "url": "http://www.agava.ru", - "companyId": "agava" - }, - "tchibo_de": { - "name": "tchibo.de", - "categoryId": 8, - "url": "http://tchibo.de/", - "companyId": null - }, - "tdsrmbl_net": { - "name": "tdsrmbl.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "teads": { - "name": "Teads", - "categoryId": 4, - "url": "http://teads.tv/", - "companyId": "teads" - }, - "tealeaf": { - "name": "Tealeaf", - "categoryId": 6, - "url": "https://www.ibm.com/digital-marketing", - "companyId": "ibm" - }, - "tealium": { - "name": "Tealium", - "categoryId": 5, - "url": "http://www.tealium.com/", - "companyId": "tealium" - }, - "teaser.cc": { - "name": "Teaser.cc", - "categoryId": 4, - "url": "http://www.teaser.cc/", - "companyId": "teaser.cc" - }, - "tedemis": { - "name": "Tedemis", - "categoryId": 4, - "url": "http://www.tedemis.com", - "companyId": "tedemis" - }, - "teletech": { - "name": "TeleTech", - "categoryId": 4, - "url": "http://www.webmetro.com/whoweare/technology.aspx", - "companyId": "teletech" - }, - "telstra": { - "name": "Telstra", - "categoryId": 8, - "url": "https://www.telstra.com.au/", - "companyId": "telstra", - "source": "AdGuard" - }, - "tender": { - "name": "Tender", - "categoryId": 2, - "url": "http://www.tenderapp.com/", - "companyId": "tender" - }, - "tensitionschoo.club": { - "name": "tensitionschoo.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "teroti": { - "name": "Teroti", - "categoryId": 4, - "url": "http://www.teroti.com/", - "companyId": "teroti" - }, - "terren": { - "name": "Terren", - "categoryId": 4, - "url": "http://www.webterren.com/", - "companyId": "terren" - }, - "teufel.de": { - "name": "teufel.de", - "categoryId": 8, - "url": "https://www.teufel.de/", - "companyId": null - }, - "the_adex": { - "name": "The ADEX", - "categoryId": 4, - "url": "http://www.theadex.com/", - "companyId": "prosieben_sat1" - }, - "the_deck": { - "name": "The DECK", - "categoryId": 4, - "url": "http://decknetwork.net/", - "companyId": "the_deck" - }, - "the_guardian": { - "name": "The Guardian", - "categoryId": 8, - "url": "https://www.theguardian.com/", - "companyId": "the_guardian" - }, - "the_reach_group": { - "name": "The Reach Group", - "categoryId": 4, - "url": "http://www.redvertisment.com", - "companyId": "the_reach_group" - }, - "the_search_agency": { - "name": "The Search Agency", - "categoryId": 4, - "url": "http://www.thesearchagency.com/", - "companyId": "the_search_agency" - }, - "the_sun": { - "name": "The Sun", - "categoryId": 8, - "url": "https://www.thesun.co.uk/", - "companyId": "the_sun" - }, - "the_weather_company": { - "name": "The Weather Company", - "categoryId": 4, - "url": "http://www.theweathercompany.com/", - "companyId": "ibm" - }, - "themoviedb": { - "name": "The Movie DB", - "categoryId": 8, - "url": "https://www.themoviedb.org/", - "companyId": "themoviedb" - }, - "thinglink": { - "name": "ThingLink", - "categoryId": 4, - "url": "http://www.thinglink.com/", - "companyId": "thinglink" - }, - "threatmetrix": { - "name": "ThreatMetrix", - "categoryId": 6, - "url": "http://threatmetrix.com/", - "companyId": "threatmetrix" - }, - "tidbit": { - "name": "Tidbit", - "categoryId": 2, - "url": "http://tidbit.co.in/", - "companyId": "tidbit" - }, - "tidio": { - "name": "Tidio", - "categoryId": 2, - "url": "https://www.tidio.com/", - "companyId": "tidio_chat" - }, - "tiktok_analytics": { - "name": "TikTok Analytics", - "categoryId": 6, - "url": "https://analytics.tiktok.com", - "companyId": "bytedance_inc" - }, - "tiller": { - "name": "Tiller", - "categoryId": 4, - "url": "https://www.tiller.com/", - "companyId": "tiller" - }, - "timezondb": { - "name": "TimezonDB", - "categoryId": 4, - "url": "https://timezonedb.com/", - "companyId": "timezonedb" - }, - "tinypass": { - "name": "Piano", - "categoryId": 5, - "url": "https://piano.io/", - "companyId": "piano" - }, - "tisoomi": { - "name": "Tisoomi", - "categoryId": 4, - "url": "https://tisoomi-services.com/", - "companyId": null - }, - "tlv_media": { - "name": "TLV Media", - "categoryId": 4, - "url": "http://www.tlvmedia.com", - "companyId": "tlvmedia" - }, - "tns": { - "name": "TNS", - "categoryId": 6, - "url": "http://www.tnsglobal.com/", - "companyId": "wpp" - }, - "tomnewsupdate.info": { - "name": "tomnewsupdate.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "tomorrow_focus": { - "name": "Tomorrow Focus", - "categoryId": 4, - "url": "http://www.tomorrow-focus.com", - "companyId": "hubert_burda_media" - }, - "tonefuse": { - "name": "ToneFuse", - "categoryId": 4, - "url": "http://www.tonefuse.com/", - "companyId": "tonefuse" - }, - "top_mail": { - "name": "Top Mail", - "categoryId": 6, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "toplist.cz": { - "name": "toplist.cz", - "categoryId": 11, - "url": null, - "companyId": null - }, - "toponclick_com": { - "name": "toponclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "topsy": { - "name": "Topsy", - "categoryId": 4, - "url": "http://topsy.com/", - "companyId": "topsy" - }, - "torbit": { - "name": "Torbit", - "categoryId": 6, - "url": "http://torbit.com/", - "companyId": "torbit" - }, - "toro": { - "name": "TORO", - "categoryId": 4, - "url": "http://toroadvertising.com/", - "companyId": "toro_advertising" - }, - "tororango.com": { - "name": "tororango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "total_media": { - "name": "Total Media", - "categoryId": 4, - "url": "http://www.totalmedia.co.il/eng/", - "companyId": "total_media" - }, - "touchcommerce": { - "name": "Nuance", - "categoryId": 2, - "url": "https://www.nuance.com/omni-channel-customer-engagement/digital.html", - "companyId": "touchcommerce" - }, - "tovarro.com": { - "name": "Tovarro", - "categoryId": 4, - "url": "https://www.tovarro.com/", - "companyId": null - }, - "tp-cdn.com": { - "name": "TrialPay", - "categoryId": 4, - "url": "https://www.trialpay.com/", - "companyId": null - }, - "tracc.it": { - "name": "Kiwe.io", - "categoryId": 6, - "url": "https://www.kiwe.io/", - "companyId": null - }, - "tracemyip": { - "name": "TraceMyIP", - "categoryId": 4, - "url": "http://www.tracemyip.org/", - "companyId": "tracemyip" - }, - "traceview": { - "name": "TraceView", - "categoryId": 6, - "url": "http://www.appneta.com/", - "companyId": "appneta" - }, - "track_duck": { - "name": "Track Duck", - "categoryId": 6, - "url": "https://trackduck.com/", - "companyId": "track_duck" - }, - "trackjs": { - "name": "TrackJS", - "categoryId": 6, - "url": "http://www.trackjs.com/", - "companyId": "trackjs" - }, - "trackset_conversionlab": { - "name": "Trackset ConversionLab", - "categoryId": 4, - "url": "http://www.trackset.com/", - "companyId": "trackset" - }, - "trackuity": { - "name": "Trackuity", - "categoryId": 2, - "url": "http://www.trackuity.com/", - "companyId": "trackuity" - }, - "tradedesk": { - "name": "TradeDesk", - "categoryId": 4, - "url": "http://www.thetradedesk.com/", - "companyId": "the_trade_desk" - }, - "tradedoubler": { - "name": "TradeDoubler", - "categoryId": 4, - "url": "http://www.tradedoubler.com/", - "companyId": "tradedoubler" - }, - "tradelab": { - "name": "Tradelab", - "categoryId": 4, - "url": "http://www.tradelab.fr/", - "companyId": "tradelab" - }, - "tradetracker": { - "name": "TradeTracker", - "categoryId": 4, - "url": "http://www.tradetracker.com", - "companyId": "tradetracker" - }, - "traffective": { - "name": "Traffective", - "categoryId": 4, - "url": "https://traffective.com/", - "companyId": null - }, - "traffic_fuel": { - "name": "Traffic Fuel", - "categoryId": 4, - "url": "https://trafficfuel.com/", - "companyId": "traffic_fuel" - }, - "traffic_revenue": { - "name": "Traffic Revenue", - "categoryId": 4, - "url": "http://www.trafficrevenue.net/", - "companyId": "traffic_revenue" - }, - "traffic_stars": { - "name": "Traffic Stars", - "categoryId": 3, - "url": "https://trafficstars.com/#index_page", - "companyId": "traffic_stars" - }, - "trafficbroker": { - "name": "TrafficBroker", - "categoryId": 4, - "url": "http://trafficbroker.com/", - "companyId": "trafficbroker" - }, - "trafficfabrik.com": { - "name": "Traffic Fabrik", - "categoryId": 3, - "url": "https://www.trafficfabrik.com/", - "companyId": null - }, - "trafficfactory": { - "name": "Traffic Factory", - "categoryId": 4, - "url": "https://www.trafficfactory.biz/", - "companyId": null - }, - "trafficforce": { - "name": "TrafficForce", - "categoryId": 4, - "url": "http://www.trafficforce.com/", - "companyId": "trafficforce" - }, - "traffichaus": { - "name": "TrafficHaus", - "categoryId": 3, - "url": "http://www.traffichaus.com", - "companyId": "traffichaus" - }, - "trafficjunky": { - "name": "TrafficJunky", - "categoryId": 3, - "url": "http://www.trafficjunky.net/", - "companyId": "trafficjunky" - }, - "traffiliate": { - "name": "Traffiliate", - "categoryId": 4, - "url": "http://www.traffiliate.com/", - "companyId": "dsnr_media_group" - }, - "trafic": { - "name": "Trafic", - "categoryId": 6, - "url": "http://www.trafic.ro/", - "companyId": "trafic" - }, - "trafmag.com": { - "name": "TrafMag", - "categoryId": 4, - "url": "https://trafmag.com/", - "companyId": "trafmag" - }, - "transcend": { - "name": "Transcend Consent", - "categoryId": 14, - "url": "https://transcend.io/consent/", - "companyId": "transcend" - }, - "transcend_telemetry": { - "name": "Transcend Telemetry", - "categoryId": 6, - "url": "https://transcend.io", - "companyId": "transcend" - }, - "transmatic": { - "name": "Transmatic", - "categoryId": 6, - "url": "http://www.transmatico.com/en/", - "companyId": "transmatico" - }, - "travel_audience": { - "name": "Travel Audience", - "categoryId": 6, - "url": "https://travelaudience.com/", - "companyId": "travel_audience" - }, - "trbo": { - "name": "trbo", - "categoryId": 4, - "url": "http://www.trbo.com/", - "companyId": "trbo" - }, - "treasuredata": { - "name": "Treasure Data", - "categoryId": 6, - "url": "https://www.treasuredata.com/", - "companyId": "arm" - }, - "tremor_video": { - "name": "Tremor Video", - "categoryId": 0, - "url": "http://www.tremormedia.com/", - "companyId": "tremor_video" - }, - "trendcounter": { - "name": "trendcounter", - "categoryId": 6, - "url": "http://www.trendcounter.com/", - "companyId": "trendcounter" - }, - "trendemon": { - "name": "TrenDemon", - "categoryId": 6, - "url": "http://trendemon.com", - "companyId": "trendemon" - }, - "tribal_fusion": { - "name": "Tribal Fusion", - "categoryId": 4, - "url": "http://www.tribalfusion.com/", - "companyId": "exponential_interactive" - }, - "tribal_fusion_notice": { - "name": "Tribal Fusion Notice", - "categoryId": 4, - "url": "http://www.tribalfusion.com", - "companyId": "exponential_interactive" - }, - "triblio": { - "name": "Triblio", - "categoryId": 6, - "url": "https://triblio.com/", - "companyId": "triblio" - }, - "trigger_mail_marketing": { - "name": "Trigger Mail Marketing", - "categoryId": 4, - "url": "http://www.triggeremailmarketing.com/", - "companyId": "trigger_mail_marketing" - }, - "triggerbee": { - "name": "Triggerbee", - "categoryId": 2, - "url": "https://triggerbee.com/", - "companyId": "triggerbee" - }, - "tripadvisor": { - "name": "TripAdvisor", - "categoryId": 8, - "url": "http://iac.com/", - "companyId": "iac_apps" - }, - "triplelift": { - "name": "TripleLift", - "categoryId": 4, - "url": "http://triplelift.com/", - "companyId": "triplelift" - }, - "triptease": { - "name": "Triptease", - "categoryId": 2, - "url": "https://www.triptease.com", - "companyId": "triptease" - }, - "triton_digital": { - "name": "Triton Digital", - "categoryId": 0, - "url": "http://www.tritondigital.com/", - "companyId": "triton_digital" - }, - "trovus_revelations": { - "name": "Trovus Revelations", - "categoryId": 4, - "url": "http://www.trovus.co.uk/", - "companyId": "trovus_revelations" - }, - "trsv3.com": { - "name": "trsv3.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "true_fit": { - "name": "True Fit", - "categoryId": 4, - "url": "https://www.truefit.com/", - "companyId": "true_fit" - }, - "trueanthem": { - "name": "True Anthem", - "categoryId": 4, - "url": "https://www.trueanthem.com/", - "companyId": "trueanthem" - }, - "trueffect": { - "name": "TruEffect", - "categoryId": 4, - "url": "http://www.trueffect.com/", - "companyId": "trueffect" - }, - "truehits.net": { - "name": "Truehits.net", - "categoryId": 6, - "url": "http://truehits.net/", - "companyId": "truehits.net" - }, - "trumba": { - "name": "Trumba", - "categoryId": 4, - "url": "http://www.trumba.com", - "companyId": "trumba" - }, - "truoptik": { - "name": "Tru Optik", - "categoryId": 6, - "url": "http://truoptik.com/", - "companyId": null - }, - "trustarc": { - "name": "TrustArc", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_consent": { - "name": "Truste Consent", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_notice": { - "name": "TRUSTe Notice", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "truste_seal": { - "name": "TRUSTe Seal", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "trusted_shops": { - "name": "Trusted Shops", - "categoryId": 5, - "url": "http://www.trustedshops.com/", - "companyId": "trusted_shops" - }, - "trustev": { - "name": "Trustev", - "categoryId": 6, - "url": "http://www.trustev.com/", - "companyId": "trustev" - }, - "trustlogo": { - "name": "TrustLogo", - "categoryId": 5, - "url": "http://www.comodo.com/", - "companyId": "comodo" - }, - "trustpilot": { - "name": "Trustpilot", - "categoryId": 2, - "url": "http://www.trustpilot.com", - "companyId": "trustpilot" - }, - "trustwave.com": { - "name": "Trustwave", - "categoryId": 8, - "url": "https://www.trustwave.com/home/", - "companyId": null - }, - "tubecorporate": { - "name": "Tube Corporate", - "categoryId": 3, - "url": "https://tubecorporate.com/", - "companyId": null - }, - "tubecup.org": { - "name": "tubecup.org", - "categoryId": 3, - "url": null, - "companyId": null - }, - "tubemogul": { - "name": "TubeMogul", - "categoryId": 4, - "url": "http://tubemogul.com/", - "companyId": "tubemogul" - }, - "tumblr_analytics": { - "name": "Tumblr Analytics", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "tumblr_buttons": { - "name": "Tumblr Buttons", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tumblr_dashboard": { - "name": "Tumblr Dashboard", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tune_in": { - "name": "Tune In", - "categoryId": 0, - "url": "http://tunein.com/", - "companyId": "tunein" - }, - "turbo": { - "name": "Turbo", - "categoryId": 4, - "url": "http://www.turboadv.com/", - "companyId": "turbo" - }, - "turn_inc.": { - "name": "Turn Inc.", - "categoryId": 4, - "url": "https://www.amobee.com/company/", - "companyId": "singtel" - }, - "turner": { - "name": "Warner Media", - "categoryId": 6, - "url": "https://www.warnermedia.com/", - "companyId": "turner" - }, - "turnsocial": { - "name": "TurnSocial", - "categoryId": 7, - "url": "http://turnsocial.com/", - "companyId": "turnsocial" - }, - "turnto": { - "name": "TurnTo", - "categoryId": 2, - "url": "http://www.turntonetworks.com/", - "companyId": "turnto_networks" - }, - "tvsquared.com": { - "name": "TVSquared", - "categoryId": 4, - "url": "http://tvsquared.com/", - "companyId": "tvsquared" - }, - "tweetboard": { - "name": "Tweetboard", - "categoryId": 7, - "url": "http://tweetboard.com/alpha/", - "companyId": "tweetboard" - }, - "tweetmeme": { - "name": "TweetMeme", - "categoryId": 7, - "url": "http://tweetmeme.com/", - "companyId": "tweetmeme" - }, - "twenga": { - "name": "Twenga Solutions", - "categoryId": 4, - "url": "https://www.twenga-solutions.com/", - "companyId": null - }, - "twiago": { - "name": "Twiago", - "categoryId": 4, - "url": "https://www.twiago.com/", - "companyId": "twiago" - }, - "twine": { - "name": "Twine", - "categoryId": 6, - "url": "http://twinedigital.com/", - "companyId": "twine_digital" - }, - "twitch.tv": { - "name": "Twitch", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitch_cdn": { - "name": "Twitch CDN", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitter": { - "name": "X (formerly Twitter)", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter", - "source": "AdGuard" - }, - "twitter_ads": { - "name": "Twitter Advertising", - "categoryId": 4, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_analytics": { - "name": "Twitter Analytics", - "categoryId": 6, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twitter_badge": { - "name": "Twitter Badge", - "categoryId": 7, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_button": { - "name": "Twitter Button", - "categoryId": 7, - "url": "http://twitter.com", - "companyId": "twitter" - }, - "twitter_conversion_tracking": { - "name": "Twitter Conversion Tracking", - "categoryId": 4, - "url": "https://twitter.com/", - "companyId": "twitter" - }, - "twitter_for_business": { - "name": "Twitter for Business", - "categoryId": 4, - "url": "https://business.twitter.com/", - "companyId": "twitter" - }, - "twitter_syndication": { - "name": "Twitter Syndication", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twittercounter": { - "name": "TwitterCounter", - "categoryId": 6, - "url": "http://twittercounter.com/", - "companyId": "twitter_counter" - }, - "twyn": { - "name": "Twyn", - "categoryId": 4, - "url": "http://www.twyn.com", - "companyId": "twyn" - }, - "txxx.com": { - "name": "txxx.com", - "categoryId": 8, - "url": "https://txxx.com", - "companyId": null - }, - "tynt": { - "name": "33Across", - "categoryId": 4, - "url": "http://www.tynt.com/", - "companyId": "33across" - }, - "typeform": { - "name": "Typeform", - "categoryId": 2, - "url": "https://www.typeform.com/", - "companyId": null - }, - "typepad_stats": { - "name": "Typepad Stats", - "categoryId": 6, - "url": "http://www.typepad.com/features/statistics.ht", - "companyId": "typepad" - }, - "typography.com": { - "name": "Webfonts by Hoefler&Co", - "categoryId": 9, - "url": "https://www.typography.com/", - "companyId": null - }, - "tyroo": { - "name": "Tyroo", - "categoryId": 7, - "url": "http://www.tyroo.com/", - "companyId": "tyroo" - }, - "tzetze": { - "name": "TzeTze", - "categoryId": 2, - "url": "http://www.tzetze.it/", - "companyId": "tzetze" - }, - "ubersetzung-app.com": { - "name": "ubersetzung-app.com", - "categoryId": 12, - "url": "https://www.ubersetzung-app.com/", - "companyId": null - }, - "ubuntu": { - "name": "Ubuntu", - "categoryId": 8, - "url": "https://ubuntu.com/", - "companyId": "canonical", - "source": "AdGuard" - }, - "ucfunnel": { - "name": "ucfunnel", - "categoryId": 4, - "url": "https://www.ucfunnel.com/", - "companyId": "ucfunnel" - }, - "ucoz": { - "name": "uCoz", - "categoryId": 6, - "url": "http://www.ucoz.net/", - "companyId": "ucoz" - }, - "uliza": { - "name": "Uliza", - "categoryId": 4, - "url": "http://uliza.jp/index.html", - "companyId": "uliza" - }, - "umbel": { - "name": "Umbel", - "categoryId": 6, - "url": "http://umbel.com", - "companyId": "umbel" - }, - "umebiggestern.club": { - "name": "umebiggestern.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "unanimis": { - "name": "Unanimis", - "categoryId": 4, - "url": "http://www.unanimis.co.uk/", - "companyId": "switch_concepts" - }, - "unbounce": { - "name": "Unbounce", - "categoryId": 6, - "url": "http://unbounce.com/", - "companyId": "unbounce" - }, - "unbxd": { - "name": "UNBXD", - "categoryId": 6, - "url": "http://unbxd.com/", - "companyId": "unbxd" - }, - "under-box.com": { - "name": "under-box.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "undercomputer.com": { - "name": "undercomputer.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "underdog_media": { - "name": "Underdog Media", - "categoryId": 4, - "url": "http://www.underdogmedia.com", - "companyId": "underdog_media" - }, - "undertone": { - "name": "Undertone", - "categoryId": 4, - "url": "https://www.undertone.com/", - "companyId": "perion" - }, - "unica": { - "name": "Unica", - "categoryId": 2, - "url": "http://www.unica.com/", - "companyId": "ibm" - }, - "unister": { - "name": "Unister", - "categoryId": 6, - "url": "http://www.unister.de/", - "companyId": "unister" - }, - "unite": { - "name": "Unite", - "categoryId": 4, - "url": "http://unite.me/#", - "companyId": "unite" - }, - "united_digital_group": { - "name": "United Digital Group", - "categoryId": 4, - "url": "https://www.udg.de/", - "companyId": "united_digital_group" - }, - "united_internet_media_gmbh": { - "name": "United Internet Media GmbH", - "categoryId": 4, - "url": "https://www.united-internet.de/", - "companyId": "united_internet" - }, - "unity": { - "name": "Unity", - "categoryId": 8, - "url": "https://unity.com/", - "companyId": "unity", - "source": "AdGuard" - }, - "unity_ads": { - "name": "Unity Ads", - "categoryId": 4, - "url": "https://unity.com/products/unity-ads", - "companyId": "unity", - "source": "AdGuard" - }, - "univide": { - "name": "Univide", - "categoryId": 4, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "unpkg.com": { - "name": "unpkg", - "categoryId": 9, - "url": "https://unpkg.com/#/", - "companyId": null - }, - "unruly_media": { - "name": "Unruly Media", - "categoryId": 4, - "url": "http://www.unrulymedia.com/", - "companyId": "unruly" - }, - "untriel_finger_printing": { - "name": "Untriel Finger Printing", - "categoryId": 6, - "url": "https://www.untriel.nl/", - "companyId": "untriel" - }, - "upland_clickability_beacon": { - "name": "Upland Clickability Beacon", - "categoryId": 4, - "url": "http://www.clickability.com/", - "companyId": "upland_software" - }, - "uppr.de": { - "name": "uppr GmbH", - "categoryId": 4, - "url": "https://uppr.de/", - "companyId": null - }, - "upravel.com": { - "name": "upravel.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "upsellit": { - "name": "UpSellit", - "categoryId": 2, - "url": "http://www.upsellit.com", - "companyId": "upsellit" - }, - "upsight": { - "name": "Upsight", - "categoryId": 6, - "url": "http://www.upsight.com/", - "companyId": "upsight" - }, - "uptain": { - "name": "Uptain", - "categoryId": 6, - "url": "http://www.uptain.de/en/regaining-lost-customers/", - "companyId": "uptain" - }, - "uptolike.com": { - "name": "Uptolike", - "categoryId": 7, - "url": "https://www.uptolike.com/", - "companyId": "uptolike" - }, - "uptrends": { - "name": "Uptrends", - "categoryId": 6, - "url": "http://www.uptrends.com/", - "companyId": "uptrends" - }, - "urban-media.com": { - "name": "Urban Media GmbH", - "categoryId": 4, - "url": "https://www.urban-media.com/", - "companyId": null - }, - "urban_airship": { - "name": "Urban Airship", - "categoryId": 6, - "url": "https://www.urbanairship.com/", - "companyId": "urban_airship" - }, - "usability_tools": { - "name": "Usability Tools", - "categoryId": 6, - "url": "http://usabilitytools.com/", - "companyId": "usability_tools" - }, - "usabilla": { - "name": "Usabilla", - "categoryId": 2, - "url": "https://usabilla.com/", - "companyId": "usabilla" - }, - "usemax": { - "name": "Usemax", - "categoryId": 4, - "url": "http://www.usemax.de", - "companyId": "usemax" - }, - "usemessages.com": { - "name": "usemessages.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "usercycle": { - "name": "USERcycle", - "categoryId": 6, - "url": "http://usercycle.com/", - "companyId": "usercycle" - }, - "userdive": { - "name": "USERDIVE", - "categoryId": 6, - "url": "http://userdive.com/", - "companyId": "userdive" - }, - "userecho": { - "name": "UserEcho", - "categoryId": 2, - "url": "http://userecho.com", - "companyId": "userecho" - }, - "userlike.com": { - "name": "Userlike", - "categoryId": 2, - "url": "https://www.userlike.com/", - "companyId": "userlike" - }, - "userpulse": { - "name": "UserPulse", - "categoryId": 2, - "url": "http://www.userpulse.com/", - "companyId": "userpulse" - }, - "userreplay": { - "name": "UserReplay", - "categoryId": 6, - "url": "https://www.userreplay.com/", - "companyId": "userreplay" - }, - "userreport": { - "name": "UserReport", - "categoryId": 2, - "url": "http://www.userreport.com/", - "companyId": "userreport" - }, - "userrules": { - "name": "UserRules", - "categoryId": 2, - "url": "http://www.userrules.com/", - "companyId": "userrules_software" - }, - "usersnap": { - "name": "Usersnap", - "categoryId": 2, - "url": "http://usersnap.com/", - "companyId": "usersnap" - }, - "uservoice": { - "name": "UserVoice", - "categoryId": 2, - "url": "http://uservoice.com/", - "companyId": "uservoice" - }, - "userzoom.com": { - "name": "UserZoom", - "categoryId": 2, - "url": "https://www.userzoom.com/", - "companyId": "userzoom" - }, - "usocial": { - "name": "Usocial", - "categoryId": 7, - "url": "https://usocial.pro/en", - "companyId": "usocial" - }, - "utarget": { - "name": "uTarget", - "categoryId": 4, - "url": "http://utarget.ru/", - "companyId": "utarget" - }, - "uuidksinc.net": { - "name": "uuidksinc.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "v12_group": { - "name": "V12 Group", - "categoryId": 6, - "url": null, - "companyId": null - }, - "vacaneedasap.com": { - "name": "vacaneedasap.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "valassis": { - "name": "Valassis", - "categoryId": 4, - "url": "http://www.brand.net/", - "companyId": "valassis" - }, - "validclick": { - "name": "ValidClick", - "categoryId": 4, - "url": "http://inuvo.com/", - "companyId": "inuvo" - }, - "valiton": { - "name": "Valiton", - "categoryId": 4, - "url": "https://www.valiton.com/", - "companyId": "hubert_burda_media" - }, - "valueclick_media": { - "name": "ValueClick Media", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "valuecommerce": { - "name": "ValueCommerce", - "categoryId": 4, - "url": "https://www.valuecommerce.ne.jp", - "companyId": "valuecommerce" - }, - "valued_opinions": { - "name": "Valued Opinions", - "categoryId": 4, - "url": "http://valuedopinions.com", - "companyId": "valued_opinions" - }, - "vanksen": { - "name": "Vanksen", - "categoryId": 4, - "url": "http://www.buzzparadise.com/", - "companyId": "vanksen" - }, - "varick_media_management": { - "name": "Varick Media Management", - "categoryId": 4, - "url": "http://www.varickmm.com/", - "companyId": "varick_media_management" - }, - "vcita": { - "name": "Vcita", - "categoryId": 6, - "url": "https://www.vcita.com/", - "companyId": "vcita" - }, - "vcommission": { - "name": "vCommission", - "categoryId": 4, - "url": "http://www.vcommission.com/", - "companyId": "vcommission" - }, - "vdopia": { - "name": "Vdopia", - "categoryId": 4, - "url": "http://mobile.vdopia.com/", - "companyId": "vdopia" - }, - "ve_interactive": { - "name": "Ve Interactive", - "categoryId": 4, - "url": "https://www.veinteractive.com", - "companyId": "ve_interactive" - }, - "vee24": { - "name": "VEE24", - "categoryId": 0, - "url": "https://www.vee24.com/", - "companyId": "vee24" - }, - "velocecdn.com": { - "name": "velocecdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "velti_mgage_visualize": { - "name": "Velti mGage Visualize", - "categoryId": 4, - "url": "http://www.velti.com/", - "companyId": "velti" - }, - "vendemore": { - "name": "Vendemore", - "categoryId": 1, - "url": "https://vendemore.com/", - "companyId": "ratos" - }, - "venturead.com": { - "name": "venturead.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "venyoo": { - "name": "Venyoo", - "categoryId": 2, - "url": "http://venyoo.ru/", - "companyId": "venyoo" - }, - "veoxa": { - "name": "Veoxa", - "categoryId": 4, - "url": "http://www.veoxa.com/", - "companyId": "veoxa" - }, - "vergic.com": { - "name": "Vergic", - "categoryId": 1, - "url": "https://www.vergic.com/", - "companyId": null - }, - "vero": { - "name": "Vero", - "categoryId": 4, - "url": "http://www.getvero.com/", - "companyId": "vero" - }, - "vertical_acuity": { - "name": "Vertical Acuity", - "categoryId": 4, - "url": "http://www.verticalacuity.com/", - "companyId": "outbrain" - }, - "vertical_leap": { - "name": "Vertical Leap", - "categoryId": 4, - "url": "http://www.vertical-leap.co.uk/", - "companyId": "vertical_leap" - }, - "verticalresponse": { - "name": "VerticalResponse", - "categoryId": 4, - "url": "http://www.verticalresponse.com", - "companyId": "verticalresponse" - }, - "verticalscope": { - "name": "VerticalScope", - "categoryId": 4, - "url": "http://www.verticalscope.com", - "companyId": "verticalscope" - }, - "vertoz": { - "name": "Vertoz", - "categoryId": 4, - "url": "http://www.vertoz.com/", - "companyId": "vertoz" - }, - "veruta": { - "name": "Veruta", - "categoryId": 4, - "url": "http://www.veruta.com/", - "companyId": "veruta" - }, - "verve_mobile": { - "name": "Verve Mobile", - "categoryId": 4, - "url": "http://www.vervemobile.com/", - "companyId": "verve_mobile" - }, - "vg_wort": { - "name": "VG Wort", - "categoryId": 6, - "url": "https://tom.vgwort.de/portal/showHelp", - "companyId": "vg_wort" - }, - "vi": { - "name": "Vi", - "categoryId": 4, - "url": "http://www.vi.ru/", - "companyId": "vi" - }, - "viacom_tag_container": { - "name": "Viacom Tag Container", - "categoryId": 4, - "url": "http://www.viacom.com/", - "companyId": "viacom" - }, - "viafoura": { - "name": "Viafoura", - "categoryId": 4, - "url": "http://www.viafoura.com/", - "companyId": "viafoura" - }, - "vibrant_ads": { - "name": "Vibrant Ads", - "categoryId": 4, - "url": "http://www.vibrantmedia.com/", - "companyId": "vibrant_media" - }, - "vicomi.com": { - "name": "Vicomi", - "categoryId": 6, - "url": "http://www.vicomi.com/", - "companyId": "vicomi" - }, - "vidazoo.com": { - "name": "Vidazoo", - "categoryId": 4, - "url": "https://www.vidazoo.com/", - "companyId": null - }, - "video_desk": { - "name": "Video Desk", - "categoryId": 0, - "url": "https://www.videodesk.com/", - "companyId": "video_desk" - }, - "video_potok": { - "name": "Video Potok", - "categoryId": 0, - "url": "http://videopotok.pro/", - "companyId": "videopotok" - }, - "videoadex.com": { - "name": "VideoAdX", - "categoryId": 4, - "url": "https://www.videoadex.com/", - "companyId": "digiteka" - }, - "videology": { - "name": "Videology", - "categoryId": 4, - "url": "https://videologygroup.com/", - "companyId": "singtel" - }, - "videonow": { - "name": "VideoNow", - "categoryId": 4, - "url": "https://videonow.ru/", - "companyId": "videonow" - }, - "videoplayerhub.com": { - "name": "videoplayerhub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "videoplaza": { - "name": "Videoplaza", - "categoryId": 4, - "url": "http://www.videoplaza.com/", - "companyId": "videoplaza" - }, - "videostep": { - "name": "VideoStep", - "categoryId": 4, - "url": "https://www.videostep.com/", - "companyId": "videostep" - }, - "vidgyor": { - "name": "Vidgyor", - "categoryId": 0, - "url": "http://vidgyor.com/", - "companyId": "vidgyor" - }, - "vidible": { - "name": "Vidible", - "categoryId": 4, - "url": "http://vidible.tv/", - "companyId": "verizon" - }, - "vidora": { - "name": "Vidora", - "categoryId": 0, - "url": "https://www.vidora.com/", - "companyId": "vidora" - }, - "vietad": { - "name": "VietAd", - "categoryId": 4, - "url": "http://vietad.vn/", - "companyId": "vietad" - }, - "viglink": { - "name": "VigLink", - "categoryId": 4, - "url": "http://www.viglink.com", - "companyId": "viglink" - }, - "vigo": { - "name": "Vigo", - "categoryId": 6, - "url": "https://vigo.one/", - "companyId": "vigo" - }, - "vimeo": { - "name": "Vimeo", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "vindico_group": { - "name": "Vindico Group", - "categoryId": 4, - "url": "http://www.vindicogroup.com/", - "companyId": "vindico_group" - }, - "vinted": { - "name": "Vinted", - "categoryId": 8, - "url": "https://www.vinted.com/", - "companyId": null - }, - "viral_ad_network": { - "name": "Viral Ad Network", - "categoryId": 4, - "url": "http://viraladnetwork.joinvan.com/", - "companyId": "viral_ad_network" - }, - "viral_loops": { - "name": "Viral Loops", - "categoryId": 2, - "url": "https://viral-loops.com/", - "companyId": "viral-loops" - }, - "viralgains": { - "name": "ViralGains", - "categoryId": 4, - "url": "https://www.viralgains.com/", - "companyId": null - }, - "viralmint": { - "name": "ViralMint", - "categoryId": 7, - "url": "http://www.viralmint.com", - "companyId": "viralmint" - }, - "virgul": { - "name": "Virgul", - "categoryId": 4, - "url": "http://www.virgul.com/", - "companyId": "virgul" - }, - "virool_player": { - "name": "Virool Player", - "categoryId": 4, - "url": "https://www.virool.com/", - "companyId": "virool" - }, - "virtusize": { - "name": "Virtusize", - "categoryId": 5, - "url": "http://www.virtusize.com/", - "companyId": "virtusize" - }, - "visible_measures": { - "name": "Visible Measures", - "categoryId": 4, - "url": "http://www.visiblemeasures.com/", - "companyId": "visible_measures" - }, - "vision_critical": { - "name": "Vision Critical", - "categoryId": 6, - "url": "http://visioncritical.com/", - "companyId": "vision_critical" - }, - "visit_streamer": { - "name": "Visit Streamer", - "categoryId": 6, - "url": "http://www.visitstreamer.com/", - "companyId": "visit_streamer" - }, - "visitortrack": { - "name": "VisitorTrack", - "categoryId": 4, - "url": "http://www.netfactor.com/", - "companyId": "netfactor" - }, - "visitorville": { - "name": "VisitorVille", - "categoryId": 6, - "url": "http://www.visitorville.com", - "companyId": "visitorville" - }, - "visscore": { - "name": "VisScore", - "categoryId": 4, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "visual_iq": { - "name": "Visual IQ", - "categoryId": 6, - "url": "http://visualiq.com/", - "companyId": "visualiq" - }, - "visual_revenue": { - "name": "Visual Revenue", - "categoryId": 6, - "url": "http://visualrevenue.com/", - "companyId": "outbrain" - }, - "visual_website_optimizer": { - "name": "VWO", - "categoryId": 6, - "url": "https://vwo.com/", - "companyId": "wingify" - }, - "visualdna": { - "name": "VisualDNA", - "categoryId": 4, - "url": "http://www.visualdna.com/", - "companyId": "nielsen" - }, - "visualstudio.com": { - "name": "Visualstudio.com", - "categoryId": 8, - "url": "https://www.visualstudio.com/", - "companyId": "microsoft" - }, - "visualvisitor": { - "name": "VisualVisitor", - "categoryId": 6, - "url": "http://www.visualvisitor.com/", - "companyId": "visualvisitor" - }, - "vivalu": { - "name": "VIVALU", - "categoryId": 4, - "url": "https://www.vivalu.com/", - "companyId": "vivalu" - }, - "vivistats": { - "name": "ViviStats", - "categoryId": 6, - "url": "http://en.vivistats.com/", - "companyId": "vivistats" - }, - "vizury": { - "name": "Vizury", - "categoryId": 4, - "url": "http://www.vizury.com/website/", - "companyId": "vizury" - }, - "vizzit": { - "name": "Vizzit", - "categoryId": 4, - "url": "http://www.vizzit.se/h/en/", - "companyId": "vizzit" - }, - "vk.com": { - "name": "Vk.com", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vkontakte": { - "name": "VKontakte", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vkontakte_widgets": { - "name": "VKontakte Widgets", - "categoryId": 7, - "url": "https://dev.vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vntsm.com": { - "name": "Venatus Media", - "categoryId": 4, - "url": "https://www.venatusmedia.com/", - "companyId": "venatus" - }, - "vodafone.de": { - "name": "vodafone.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "voicefive": { - "name": "VoiceFive", - "categoryId": 6, - "url": "https://www.voicefive.com", - "companyId": "comscore" - }, - "volusion_chat": { - "name": "Volusion Chat", - "categoryId": 2, - "url": "https://www.volusion.com/", - "companyId": "volusion" - }, - "voluum": { - "name": "Voluum", - "categoryId": 4, - "url": "https://voluum.com/", - "companyId": "codewise" - }, - "vooxe.com": { - "name": "vooxe.com", - "categoryId": 8, - "url": "http://www.vooxe.com/", - "companyId": null - }, - "vorwerk.de": { - "name": "vorwerk.de", - "categoryId": 8, - "url": "https://corporate.vorwerk.de/home/", - "companyId": null - }, - "vox": { - "name": "Vox", - "categoryId": 2, - "url": "https://www.voxmedia.com/", - "companyId": "vox" - }, - "voxus": { - "name": "Voxus", - "categoryId": 4, - "url": "http://www.voxus.tv/", - "companyId": "voxus" - }, - "vpon": { - "name": "VPON", - "categoryId": 4, - "url": "http://www.vpon.com/en/", - "companyId": "vpon" - }, - "vpscash": { - "name": "VPSCash", - "categoryId": 4, - "url": "http://vpscash.nl/home", - "companyId": "vps_cash" - }, - "vs": { - "name": "Visual Studio", - "categoryId": 8, - "url": "https://visualstudio.microsoft.com", - "companyId": "microsoft", - "source": "AdGuard" - }, - "vscode": { - "name": "Visual Studio Code", - "categoryId": 8, - "url": "https://code.visualstudio.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "vtracy.de": { - "name": "vtracy.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "vungle": { - "name": "Vungle", - "categoryId": 4, - "url": "https://vungle.com/", - "companyId": "blackstone", - "source": "AdGuard" - }, - "vuukle": { - "name": "Vuukle", - "categoryId": 6, - "url": "http://vuukle.com/", - "companyId": "vuukle" - }, - "vzaar": { - "name": "Vzaar", - "categoryId": 0, - "url": "http://vzaar.com/", - "companyId": "vzaar" - }, - "w3counter": { - "name": "W3Counter", - "categoryId": 6, - "url": "http://www.w3counter.com/", - "companyId": "awio_web_services" - }, - "w3roi": { - "name": "w3roi", - "categoryId": 6, - "url": "http://www.w3roi.com/", - "companyId": "w3roi" - }, - "wahoha": { - "name": "Wahoha", - "categoryId": 2, - "url": "http://wahoha.com/", - "companyId": "wahoha" - }, - "walkme.com": { - "name": "WalkMe", - "categoryId": 2, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "wall_street_on_demand": { - "name": "Wall Street on Demand", - "categoryId": 4, - "url": "http://www.wallst.com", - "companyId": "markit_on_demand" - }, - "walmart": { - "name": "Walmart", - "categoryId": 8, - "url": null, - "companyId": null - }, - "wamcash": { - "name": "Wamcash", - "categoryId": 3, - "url": "http://wamcash.com/", - "companyId": "wamcash" - }, - "wanelo": { - "name": "Wanelo", - "categoryId": 2, - "url": "https://wanelo.com/", - "companyId": "wanelo" - }, - "warp.ly": { - "name": "Warp.ly", - "categoryId": 6, - "url": "https://warp.ly/", - "companyId": "warp.ly" - }, - "way2traffic": { - "name": "Way2traffic", - "categoryId": 4, - "url": "http://www.way2traffic.com/", - "companyId": "way2traffic" - }, - "wayfair_com": { - "name": "Wayfair", - "categoryId": 8, - "url": "https://www.wayfair.com/", - "companyId": null - }, - "wdr.de": { - "name": "wdr.de", - "categoryId": 8, - "url": "https://www1.wdr.de/index.html", - "companyId": null - }, - "web-stat": { - "name": "Web-Stat", - "categoryId": 6, - "url": "http://www.web-stat.net/", - "companyId": "web-stat" - }, - "web.de": { - "name": "web.de", - "categoryId": 8, - "url": "https://web.de/", - "companyId": null - }, - "web.stat": { - "name": "Web.STAT", - "categoryId": 6, - "url": "http://webstat.net/", - "companyId": "web.stat" - }, - "web_service_award": { - "name": "Web Service Award", - "categoryId": 6, - "url": "http://webserviceaward.com/english/", - "companyId": "web_service_award" - }, - "web_traxs": { - "name": "Web Traxs", - "categoryId": 6, - "url": "http://websolutions.thomasnet.com/web-traxs-analytics.php", - "companyId": "thomasnet_websolutions" - }, - "web_wipe_analytics": { - "name": "Web Wipe Analytics", - "categoryId": 6, - "url": "http://tensquare.de", - "companyId": "tensquare" - }, - "webads": { - "name": "WebAds", - "categoryId": 4, - "url": "http://www.webads.co.uk/", - "companyId": "webads" - }, - "webantenna": { - "name": "WebAntenna", - "categoryId": 6, - "url": "http://www.bebit.co.jp/webantenna/", - "companyId": "webantenna" - }, - "webclicks24_com": { - "name": "webclicks24.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "webclose.net": { - "name": "webclose.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "webcollage": { - "name": "Webcollage", - "categoryId": 2, - "url": "http://www.webcollage.com/", - "companyId": "webcollage" - }, - "webedia": { - "name": "Webedia", - "categoryId": 4, - "url": "http://fr.webedia-group.com/", - "companyId": "fimalac_group" - }, - "webeffective": { - "name": "WebEffective", - "categoryId": 6, - "url": "http://www.keynote.com/", - "companyId": "keynote_systems" - }, - "webengage": { - "name": "WebEngage", - "categoryId": 2, - "url": "http://webengage.com/", - "companyId": "webengage" - }, - "webgains": { - "name": "Webgains", - "categoryId": 8, - "url": null, - "companyId": null - }, - "webgozar": { - "name": "WebGozar", - "categoryId": 6, - "url": "http://webgozar.com/", - "companyId": "webgozar" - }, - "webhelpje": { - "name": "Webhelpje", - "categoryId": 2, - "url": "http://www.webhelpje.nl/", - "companyId": "webhelpje" - }, - "webleads_tracker": { - "name": "Webleads Tracker", - "categoryId": 6, - "url": "http://www.webleads-tracker.fr/", - "companyId": "webleads_tracker" - }, - "webmecanik": { - "name": "Webmecanik", - "categoryId": 6, - "url": "http://www.webmecanik.com/en/", - "companyId": "webmecanik" - }, - "weborama": { - "name": "Weborama", - "categoryId": 4, - "url": "https://weborama.com/", - "companyId": "weborama" - }, - "webprospector": { - "name": "WebProspector", - "categoryId": 6, - "url": "http://www.webprospector.de/", - "companyId": "webprospector" - }, - "webstat": { - "name": "WebSTAT", - "categoryId": 6, - "url": "http://www.webstat.com/", - "companyId": "webstat" - }, - "webstat.se": { - "name": "Webstat.se", - "categoryId": 6, - "url": "http://www.webstat.se/", - "companyId": "webstat.se" - }, - "webtrack": { - "name": "webtrack", - "categoryId": 6, - "url": "http://www.webtrack.biz/", - "companyId": "webtrack" - }, - "webtraffic": { - "name": "Webtraffic", - "categoryId": 6, - "url": "http://www.webtraffic.se/", - "companyId": "schibsted_asa" - }, - "webtrekk": { - "name": "Webtrekk", - "categoryId": 6, - "url": "http://www.webtrekk.com/", - "companyId": "webtrekk" - }, - "webtrekk_cc": { - "name": "Webtrek Control Cookie", - "categoryId": 6, - "url": "https://www.webtrekk.com/en/home/", - "companyId": "webtrekk" - }, - "webtrends": { - "name": "Webtrends", - "categoryId": 6, - "url": "http://www.webtrends.com/", - "companyId": "webtrends" - }, - "webtrends_ads": { - "name": "Webtrends Ads", - "categoryId": 4, - "url": "http://www.webtrends.com", - "companyId": "webtrends" - }, - "webvisor": { - "name": "WebVisor", - "categoryId": 6, - "url": "http://webvisor.ru", - "companyId": "yandex" - }, - "wedcs": { - "name": "WEDCS", - "categoryId": 4, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "weebly_ads": { - "name": "Weebly Ads", - "categoryId": 4, - "url": "http://www.weebly.com", - "companyId": "weebly" - }, - "weibo_widget": { - "name": "Weibo Widget", - "categoryId": 4, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "westlotto_com": { - "name": "westlotto.com", - "categoryId": 8, - "url": "http://westlotto.com/", - "companyId": null - }, - "wetter_com": { - "name": "Wetter.com", - "categoryId": 8, - "url": "http://www.wetter.com/", - "companyId": null - }, - "whatbroadcast": { - "name": "Whatbroadcast", - "categoryId": 2, - "url": "https://www.whatsbroadcast.com/", - "companyId": "whatsbroadcast" - }, - "whatsapp": { - "name": "WhatsApp", - "categoryId": 8, - "url": "https://www.whatsapp.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "whisper": { - "name": "Whisper", - "categoryId": 7, - "url": "https://whisper.sh/", - "companyId": "medialab", - "source": "AdGuard" - }, - "whos.amung.us": { - "name": "Whos.amung.us", - "categoryId": 6, - "url": "http://whos.amung.us/", - "companyId": "whos.amung.us" - }, - "whoson": { - "name": "WhosOn", - "categoryId": 6, - "url": "http://www.whoson.com/", - "companyId": "whoson" - }, - "wibbitz": { - "name": "Wibbitz", - "categoryId": 0, - "url": "http://www.wibbitz.com/", - "companyId": "wibbitz" - }, - "wibiya_toolbar": { - "name": "Wibiya Toolbar", - "categoryId": 7, - "url": "http://www.wibiya.com/", - "companyId": "wibiya" - }, - "widdit": { - "name": "Widdit", - "categoryId": 2, - "url": "http://www.predictad.com/", - "companyId": "widdit" - }, - "widerplanet": { - "name": "WiderPlanet", - "categoryId": 4, - "url": "http://widerplanet.com/", - "companyId": "wider_planet" - }, - "widespace": { - "name": "Widespace", - "categoryId": 4, - "url": "https://www.widespace.com/", - "companyId": "widespace" - }, - "widgetbox": { - "name": "WidgetBox", - "categoryId": 2, - "url": "http://www.widgetbox.com/", - "companyId": "widgetbox" - }, - "wiget_media": { - "name": "Wiget Media", - "categoryId": 4, - "url": "http://wigetmedia.com", - "companyId": "wiget_media" - }, - "wigzo": { - "name": "Wigzo", - "categoryId": 4, - "url": "https://www.wigzo.com/", - "companyId": "wigzo" - }, - "wikia-services.com": { - "name": "Wikia Services", - "categoryId": 8, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikia_beacon": { - "name": "Wikia Beacon", - "categoryId": 6, - "url": "http://www.wikia.com/", - "companyId": "wikia" - }, - "wikia_cdn": { - "name": "Wikia CDN", - "categoryId": 9, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikimedia.org": { - "name": "WikiMedia", - "categoryId": 9, - "url": "https://wikimediafoundation.org/", - "companyId": "wikimedia_foundation" - }, - "winaffiliates": { - "name": "Winaffiliates", - "categoryId": 6, - "url": "http://www.winaffiliates.com/", - "companyId": "winaffiliates" - }, - "windows_maps": { - "name": "Windows Maps", - "categoryId": 8, - "url": "https://www.microsoft.com/store/apps/9wzdncrdtbvb", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windows_notifications": { - "name": "The Windows Push Notification Services", - "categoryId": 8, - "url": "https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/windows-push-notification-services--wns--overview", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windows_time": { - "name": "Windows Time Service", - "categoryId": 8, - "url": "https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/how-the-windows-time-service-works", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windowsupdate": { - "name": "Windows Update", - "categoryId": 9, - "url": "https://support.microsoft.com/en-us/windows/windows-update-faq-8a903416-6f45-0718-f5c7-375e92dddeb2", - "companyId": "microsoft", - "source": "AdGuard" - }, - "wipmania": { - "name": "WIPmania", - "categoryId": 6, - "url": "http://www.wipmania.com/", - "companyId": "wipmania" - }, - "wiqhit": { - "name": "WiQhit", - "categoryId": 6, - "url": "https://wiqhit.com/nl/", - "companyId": "wiqhit" - }, - "wirecard": { - "name": "Wirecard", - "categoryId": 2, - "url": "https://www.wirecard.com/", - "companyId": null - }, - "wiredminds": { - "name": "WiredMinds", - "categoryId": 6, - "url": "http://www.wiredminds.de/", - "companyId": "wiredminds" - }, - "wirtualna_polska": { - "name": "Wirtualna Polska", - "categoryId": 4, - "url": "http://reklama.wp.pl/", - "companyId": "wirtualna_polska" - }, - "wisepops": { - "name": "WisePops", - "categoryId": 4, - "url": "http://wisepops.com/", - "companyId": "wisepops" - }, - "wishpond": { - "name": "Wishpond", - "categoryId": 2, - "url": "http://wishpond.com", - "companyId": "wishpond" - }, - "wistia": { - "name": "Wistia", - "categoryId": 6, - "url": "http://wistia.com/", - "companyId": "wistia" - }, - "wix.com": { - "name": "Wix", - "categoryId": 8, - "url": "https://www.wix.com/", - "companyId": "wix" - }, - "wixab": { - "name": "Wixab", - "categoryId": 6, - "url": "http://wixab.com/en/", - "companyId": "wixab" - }, - "wixmp": { - "name": "Wix Media Platform", - "categoryId": 9, - "url": "https://www.wixmp.com/", - "companyId": "wix" - }, - "wnzmauurgol.com": { - "name": "wnzmauurgol.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "wonderpush": { - "name": "WonderPush", - "categoryId": 2, - "url": "https://www.wonderpush.com/", - "companyId": "wonderpush" - }, - "woopic.com": { - "name": "woopic.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "woopra": { - "name": "Woopra", - "categoryId": 6, - "url": "http://www.woopra.com/", - "companyId": "woopra" - }, - "wordpress_ads": { - "name": "Wordpress Ads", - "categoryId": 4, - "url": "https://wordpress.com/", - "companyId": "automattic" - }, - "wordpress_stats": { - "name": "WordPress Stats", - "categoryId": 6, - "url": "http://wordpress.org/extend/plugins/stats/", - "companyId": "automattic" - }, - "wordstream": { - "name": "WordStream", - "categoryId": 6, - "url": "http://www.wordstream.com/", - "companyId": "wordstream" - }, - "worldnaturenet_xyz": { - "name": "worldnaturenet.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "wp.pl": { - "name": "Wirtualna Polska ", - "categoryId": 4, - "url": "https://www.wp.pl/", - "companyId": "wp" - }, - "wp_engine": { - "name": "WP Engine", - "categoryId": 5, - "url": "https://wpengine.com/", - "companyId": "wp_engine" - }, - "writeup_clickanalyzer": { - "name": "WriteUp ClickAnalyzer", - "categoryId": 6, - "url": "http://www.writeup.co.jp/", - "companyId": "writeup" - }, - "wurfl": { - "name": "WURFL", - "categoryId": 6, - "url": "https://web.wurfl.io/", - "companyId": "scientiamobile" - }, - "wwwpromoter": { - "name": "WWWPromoter", - "categoryId": 4, - "url": "http://wwwpromoter.com/", - "companyId": "wwwpromoter" - }, - "wykop": { - "name": "Wykop", - "categoryId": 7, - "url": "http://www.wykop.pl", - "companyId": "wykop" - }, - "wysistat.com": { - "name": "WysiStat", - "categoryId": 6, - "url": "https://www.wysistat.net/", - "companyId": "wysistat" - }, - "wywy.com": { - "name": "wywy", - "categoryId": 4, - "url": "http://wywy.com/", - "companyId": "tvsquared" - }, - "x-lift": { - "name": "X-lift", - "categoryId": 4, - "url": "https://www.x-lift.jp/", - "companyId": "x-lift" - }, - "xapads": { - "name": "Xapads", - "categoryId": 4, - "url": "http://www.xapads.com/", - "companyId": "xapads" - }, - "xen-media.com": { - "name": "Xen Media", - "categoryId": 11, - "url": "https://www.xenmedia.net/", - "companyId": "xenmedia", - "source": "AdGuard" - }, - "xfreeservice.com": { - "name": "xfreeservice.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "xhamster": { - "name": "xHamster", - "categoryId": 3, - "url": "https://xhamster.com/", - "companyId": "xhamster", - "source": "AdGuard" - }, - "xiaomi": { - "name": "Xiaomi", - "categoryId": 8, - "url": "https://www.mi.com/", - "companyId": "xiaomi", - "source": "AdGuard" - }, - "xing": { - "name": "Xing", - "categoryId": 6, - "url": "http://www.xing.com/", - "companyId": "xing" - }, - "xmediaclicks": { - "name": "XmediaClicks", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "xnxx_cdn": { - "name": "XNXX", - "categoryId": 9, - "url": "https://www.xnxx.com", - "companyId": "xnxx", - "source": "AdGuard" - }, - "xplosion": { - "name": "xplosion", - "categoryId": 4, - "url": "http://www.xplosion.de/", - "companyId": "xplosion_interactive" - }, - "xtend": { - "name": "XTEND", - "categoryId": 4, - "url": "http://www.xtendmedia.com/", - "companyId": "matomy_media" - }, - "xvideos_com": { - "name": "Xvideos", - "categoryId": 8, - "url": "https://www.xvideos.com", - "companyId": "xvideos", - "source": "AdGuard" - }, - "xxxlshop.de": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz", - "source": "AdGuard" - }, - "xxxlutz": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz" - }, - "yabbi": { - "name": "Yabbi", - "categoryId": 4, - "url": "https://yabbi.me/", - "companyId": "yabbi", - "source": "AdGuard" - }, - "yabuka": { - "name": "Yabuka", - "categoryId": 4, - "url": "http://www.yabuka.com/", - "companyId": "yabuka" - }, - "yahoo": { - "name": "Yahoo!", - "categoryId": 6, - "url": "https://yahoo.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_ad_exchange": { - "name": "Yahoo! Ad Exchange", - "categoryId": 4, - "url": "https://www.verizonmedia.com/advertising", - "companyId": "verizon" - }, - "yahoo_ad_manager": { - "name": "Yahoo! Ad Manager Plus", - "categoryId": 4, - "url": "https://developer.yahoo.com/analytics/", - "companyId": "verizon" - }, - "yahoo_advertising": { - "name": "Yahoo! Advertising", - "categoryId": 4, - "url": "https://www.advertising.yahooinc.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_analytics": { - "name": "Yahoo! Analytics", - "categoryId": 6, - "url": "http://web.analytics.yahoo.com/", - "companyId": "verizon" - }, - "yahoo_commerce_central": { - "name": "Yahoo! Commerce Central", - "categoryId": 4, - "url": "http://lexity.com/", - "companyId": "verizon" - }, - "yahoo_dot_tag": { - "name": "Yahoo! DOT tag", - "categoryId": 4, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "yahoo_japan_retargeting": { - "name": "Yahoo! Japan Retargeting", - "categoryId": 4, - "url": "http://www.yahoo.com/", - "companyId": "yahoo_japan" - }, - "yahoo_overture": { - "name": "Yahoo! Overture", - "categoryId": 4, - "url": "http://searchmarketing.yahoo.com", - "companyId": "verizon" - }, - "yahoo_search": { - "name": "Yahoo! Search", - "categoryId": 4, - "url": "https://search.yahooinc.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_small_business": { - "name": "Yahoo! Small Business", - "categoryId": 4, - "url": "http://www.pixazza.com/", - "companyId": "verizon" - }, - "yandex": { - "name": "Yandex", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex.api": { - "name": "Yandex.API", - "categoryId": 2, - "url": "http://api.yandex.ru/", - "companyId": "yandex" - }, - "yandex_adexchange": { - "name": "Yandex AdExchange", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex_advisor": { - "name": "Yandex.Advisor", - "categoryId": 12, - "url": "https://sovetnik.yandex.ru/", - "companyId": "yandex" - }, - "yandex_appmetrica": { - "name": "Yandex AppMetrica", - "categoryId": 101, - "url": "https://appmetrica.yandex.com/", - "companyId": "yandex", - "source": "AdGuard" - }, - "yandex_direct": { - "name": "Yandex.Direct", - "categoryId": 6, - "url": "https://direct.yandex.com/", - "companyId": "yandex" - }, - "yandex_metrika": { - "name": "Yandex Metrika", - "categoryId": 6, - "url": "https://metrica.yandex.com/", - "companyId": "yandex" - }, - "yandex_passport": { - "name": "Yandex Passport", - "categoryId": 2, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yapfiles.ru": { - "name": "yapfiles.ru", - "categoryId": 8, - "url": "https://www.yapfiles.ru/", - "companyId": null - }, - "yashi": { - "name": "Yashi", - "categoryId": 4, - "url": "http://www.yashi.com/", - "companyId": "mass2" - }, - "ybrant_media": { - "name": "Ybrant Media", - "categoryId": 4, - "url": "http://www.addynamix.com/index.html", - "companyId": "ybrant_media" - }, - "ycontent": { - "name": "Ycontent", - "categoryId": 0, - "url": "http://ycontent.com.br/", - "companyId": "ycontent" - }, - "yektanet": { - "name": "Yektanet", - "categoryId": 4, - "url": "https://yektanet.com/", - "companyId": "yektanet" - }, - "yengo": { - "name": "Yengo", - "categoryId": 4, - "url": "http://www.yengo.com/", - "companyId": "yengo" - }, - "yesmail": { - "name": "Yesmail", - "categoryId": 4, - "url": "http://www.yesmail.com/", - "companyId": "yes_mail" - }, - "yesup_advertising": { - "name": "YesUp Advertising", - "categoryId": 4, - "url": "http://yesup.net/", - "companyId": "yesup" - }, - "yesware": { - "name": "Yesware", - "categoryId": 2, - "url": "http://www.yesware.com/", - "companyId": "yesware" - }, - "yieldbot": { - "name": "Yieldbot", - "categoryId": 6, - "url": "https://www.yieldbot.com/", - "companyId": "yieldbot" - }, - "yieldify": { - "name": "Yieldify", - "categoryId": 4, - "url": "http://www.yieldify.com/", - "companyId": "yieldify" - }, - "yieldlab": { - "name": "Yieldlab", - "categoryId": 4, - "url": "http://www.yieldlab.de/", - "companyId": "prosieben_sat1" - }, - "yieldlove": { - "name": "Yieldlove", - "categoryId": 4, - "url": "https://www.yieldlove.com/", - "companyId": "yieldlove" - }, - "yieldmo": { - "name": "Yieldmo", - "categoryId": 4, - "url": "https://www.yieldmo.com/", - "companyId": "yieldmo" - }, - "yieldr": { - "name": "Yieldr Ads", - "categoryId": 4, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldr_air": { - "name": "Yieldr Air", - "categoryId": 6, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldsquare": { - "name": "YieldSquare", - "categoryId": 4, - "url": "http://www.yieldsquare.com/", - "companyId": "yieldsquare" - }, - "yle": { - "name": "YLE", - "categoryId": 6, - "url": "http://yle.fi/", - "companyId": "yle" - }, - "yllixmedia": { - "name": "YllixMedia", - "categoryId": 4, - "url": "http://yllix.com/", - "companyId": "yllixmedia" - }, - "ymetrica1.com": { - "name": "ymetrica1.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ymzrrizntbhde.com": { - "name": "ymzrrizntbhde.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "yo_button": { - "name": "Yo Button", - "categoryId": 2, - "url": "http://www.justyo.co/", - "companyId": "yo" - }, - "yodle": { - "name": "Yodle", - "categoryId": 4, - "url": "http://www.yodle.com/", - "companyId": "yodle" - }, - "yola_analytics": { - "name": "Yola Analytics", - "categoryId": 6, - "url": "https://www.yola.com/", - "companyId": "yola" - }, - "yomedia": { - "name": "Yomedia", - "categoryId": 4, - "url": "http://www.pinetech.vn/", - "companyId": "yomedia" - }, - "yoochoose.net": { - "name": "Ibexa Personalizaton Software", - "categoryId": 4, - "url": "https://yoochoose.net/", - "companyId": "ibexa", - "source": "AdGuard" - }, - "yotpo": { - "name": "Yotpo", - "categoryId": 1, - "url": "https://www.yotpo.com/", - "companyId": "yotpo" - }, - "yottaa": { - "name": "Yottaa", - "categoryId": 6, - "url": "https://www.yottaa.com/", - "companyId": "yottaa" - }, - "yottly": { - "name": "Yottly", - "categoryId": 4, - "url": "https://yottly.com/", - "companyId": "yottly" - }, - "youcanbookme": { - "name": "YouCanBookMe", - "categoryId": 2, - "url": "https://youcanbook.me/", - "companyId": "youcanbookme" - }, - "youku": { - "name": "Youku", - "categoryId": 0, - "url": "http://www.youku.com/", - "companyId": "youku" - }, - "youporn": { - "name": "YouPorn", - "categoryId": 3, - "url": "https://www.youporn.com/", - "companyId": "youporn", - "source": "AdGuard" - }, - "youtube": { - "name": "YouTube", - "categoryId": 0, - "url": "https://www.youtube.com/", - "companyId": "google" - }, - "youtube_subscription": { - "name": "YouTube Subscription", - "categoryId": 2, - "url": "http://www.youtube.com/", - "companyId": "google" - }, - "yp": { - "name": "YellowPages", - "categoryId": 4, - "url": "https://www.yellowpages.com/", - "companyId": "thryv" - }, - "ysance": { - "name": "YSance", - "categoryId": 4, - "url": "http://www.ysance.com/en/index.html", - "companyId": "ysance" - }, - "yume": { - "name": "YuMe", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yume,_inc.": { - "name": "YuMe, Inc.", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yusp": { - "name": "Yusp", - "categoryId": 6, - "url": "https://www.yusp.com/", - "companyId": "yusp" - }, - "zadarma": { - "name": "Zadarma", - "categoryId": 2, - "url": "https://zadarma.com/", - "companyId": "zadarma" - }, - "zalando_de": { - "name": "zalando.de", - "categoryId": 8, - "url": "https://zalando.de/", - "companyId": "zalando" - }, - "zalo": { - "name": "Zalo", - "categoryId": 2, - "url": "https://zaloapp.com/", - "companyId": "zalo" - }, - "zanox": { - "name": "Zanox", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "zaparena": { - "name": "zaparena", - "categoryId": 4, - "url": "http://www.zaparena.com/", - "companyId": "zapunited" - }, - "zappos": { - "name": "Zappos", - "categoryId": 4, - "url": "http://www.zappos.com/", - "companyId": "zappos" - }, - "zdassets.com": { - "name": "Zendesk CDN", - "categoryId": 8, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zebestof.com": { - "name": "Zebestof", - "categoryId": 4, - "url": "http://www.zebestof.com/en/home/", - "companyId": "zebestof" - }, - "zedo": { - "name": "Zedo", - "categoryId": 4, - "url": "http://www.zedo.com/", - "companyId": "zedo" - }, - "zemanta": { - "name": "Zemanta", - "categoryId": 2, - "url": "http://www.zemanta.com/", - "companyId": "zemanta" - }, - "zencoder": { - "name": "Zencoder", - "categoryId": 0, - "url": "https://zencoder.com/en/", - "companyId": "zencoder" - }, - "zendesk": { - "name": "Zendesk", - "categoryId": 2, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zergnet": { - "name": "ZergNet", - "categoryId": 2, - "url": "http://www.zergnet.com/info", - "companyId": "zergnet" - }, - "zero.kz": { - "name": "ZERO.kz", - "categoryId": 6, - "url": "http://zero.kz/", - "companyId": "neolabs_zero" - }, - "zeta": { - "name": "Zeta", - "categoryId": 2, - "url": "https://zetaglobal.com/", - "companyId": "zeta" - }, - "zeusclicks": { - "name": "ZeusClicks", - "categoryId": 4, - "url": "http://zeusclicks.com/", - "companyId": "zeusclicks", - "source": "AdGuard" - }, - "ziff_davis": { - "name": "Ziff Davis", - "categoryId": 4, - "url": "https://www.ziffdavis.com/", - "companyId": "ziff_davis" - }, - "zift_solutions": { - "name": "Zift Solutions", - "categoryId": 6, - "url": "https://ziftsolutions.com/", - "companyId": "zift_solutions" - }, - "zimbio.com": { - "name": "Zimbio", - "categoryId": 8, - "url": "http://www.zimbio.com/", - "companyId": "livinglymedia", - "source": "AdGuard" - }, - "zippyshare_widget": { - "name": "Zippyshare Widget", - "categoryId": 2, - "url": "http://www.zippyshare.com", - "companyId": "zippyshare" - }, - "zmags": { - "name": "Zmags", - "categoryId": 6, - "url": "https://zmags.com/", - "companyId": "zmags" - }, - "zmctrack.net": { - "name": "zmctrack.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zog.link": { - "name": "zog.link", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zoho": { - "name": "Zoho", - "categoryId": 6, - "url": "https://www.zohocorp.com/index.html", - "companyId": "zoho_corp" - }, - "zononi.com": { - "name": "zononi.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "zopim": { - "name": "Zopim", - "categoryId": 2, - "url": "http://www.zopim.com/", - "companyId": "zendesk" - }, - "zukxd6fkxqn.com": { - "name": "zukxd6fkxqn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zwaar": { - "name": "Zwaar", - "categoryId": 4, - "url": "http://www.zwaar.org", - "companyId": "zwaar" - }, - "zypmedia": { - "name": "ZypMedia", - "categoryId": 4, - "url": "http://www.zypmedia.com/", - "companyId": "zypmedia" - } - }, - "trackerDomains": { - "mmtro.com": "1000mercis", - "creative-serving.com": "161media", - "p161.net": "161media", - "analytics.163.com": "163", - "1822direkt.de": "1822direkt.de", - "1dmp.io": "1dmp.io", - "opecloud.com": "1plusx", - "1sponsor.com": "1sponsor", - "tm.dentsu.de": "1tag", - "1and1.com": "1und1", - "1und1.de": "1und1", - "uicdn.com": "1und1", - "website-start.de": "1und1", - "24-ads.com": "24-ads.com", - "247-inc.net": "24_7", - "d1af033869koo7.cloudfront.net": "24_7", - "counter.24log.ru": "24log", - "24smi.net": "24smi", - "24smi.org": "24smi", - "2leep.com": "2leep", - "33across.com": "33across", - "3dstats.com": "3dstats", - "3gpp.org": "3gpp", - "3gppnetwork.org": "3gpp", - "4cdn.org": "4chan", - "4finance.com": "4finance_com", - "4wnet.com": "4w_marketplace", - "d3aa0ztdn3oibi.cloudfront.net": "500friends", - "51.la": "51.la", - "5min.com": "5min_media", - "d1lm7kd3bd3yo9.cloudfront.net": "6sense", - "grepdata.com": "6sense", - "77tracking.com": "77tracking", - "swm.digital": "7plus", - "7tv.de": "7tv.de", - "888media.net": "888media", - "hit.8digits.com": "8digits", - "94j7afz2nr.xyz": "94j7afz2nr.xyz", - "statsanalytics.com": "99stats", - "a3cloud.net": "a3cloud_net", - "a8.net": "a8", - "aaxads.com": "aaxads.com", - "abtasty.com": "ab_tasty", - "d1447tq2m68ekg.cloudfront.net": "ab_tasty", - "ab.co": "abc", - "abc-cdn.net.au": "abc", - "abc-host.net": "abc", - "abc-host.net.au": "abc", - "abc-prod.net.au": "abc", - "abc-stage.net.au": "abc", - "abc-test.net.au": "abc", - "abc.net.au": "abc", - "abcaustralia.net.au": "abc", - "abcradio.net.au": "abc", - "ablida.de": "ablida", - "ablida.net": "ablida", - "durasite.net": "accelia", - "accengage.net": "accengage", - "ax.xrea.com": "accessanalyzer", - "accesstrade.net": "accesstrade", - "agcdn.com": "accord_group", - "accmgr.com": "accordant_media", - "p-td.com": "accuen_media", - "acestream.net": "acestream.net", - "acint.net": "acint.net", - "acloudimages.com": "acloudimages", - "acpm.fr": "acpm.fr", - "acquia.com": "acquia.com", - "ziyu.net": "acrweb", - "actionpay.ru": "actionpay", - "adnwb.ru": "actionpay", - "adonweb.ru": "actionpay", - "active-agent.com": "active_agent", - "trackcmp.net": "active_campaign", - "active-srv02.de": "active_performance", - "active-tracking.de": "active_performance", - "activeconversion.com": "activeconversion", - "a-cast.jp": "activecore", - "activemeter.com": "activemeter", - "go.activengage.com": "activengage", - "actonsoftware.com": "acton", - "acuityplatform.com": "acuity_ads", - "acxiom-online.com": "acxiom", - "acxiom.com": "acxiom", - "ad-blocker.org": "ad-blocker.org", - "ads.ad-center.com": "ad-center", - "ad-delivery.net": "ad-delivery.net", - "ad-sys.com": "ad-sys", - "adagionet.com": "ad.agio", - "ad2click.go2cloud.org": "ad2click", - "ad2games.com": "ad2games", - "ad360.vn": "ad360", - "ads.ad4game.com": "ad4game", - "ad4mat.ar": "ad4mat", - "ad4mat.at": "ad4mat", - "ad4mat.be": "ad4mat", - "ad4mat.bg": "ad4mat", - "ad4mat.br": "ad4mat", - "ad4mat.ch": "ad4mat", - "ad4mat.co.uk": "ad4mat", - "ad4mat.cz": "ad4mat", - "ad4mat.de": "ad4mat", - "ad4mat.dk": "ad4mat", - "ad4mat.es": "ad4mat", - "ad4mat.fi": "ad4mat", - "ad4mat.fr": "ad4mat", - "ad4mat.gr": "ad4mat", - "ad4mat.hu": "ad4mat", - "ad4mat.it": "ad4mat", - "ad4mat.mx": "ad4mat", - "ad4mat.net": "ad4mat", - "ad4mat.nl": "ad4mat", - "ad4mat.no": "ad4mat", - "ad4mat.pl": "ad4mat", - "ad4mat.ro": "ad4mat", - "ad4mat.ru": "ad4mat", - "ad4mat.se": "ad4mat", - "ad4mat.tr": "ad4mat", - "ad6.fr": "ad6media", - "ad6media.co.uk": "ad6media", - "ad6media.com": "ad6media", - "ad6media.es": "ad6media", - "ad6media.fr": "ad6media", - "a2dfp.net": "ad_decisive", - "addynamo.net": "ad_dynamo", - "ebis.ne.jp": "ad_ebis", - "adlightning.com": "ad_lightning", - "admagnet.net": "ad_magnet", - "amimg.net": "ad_magnet", - "adspirit.de": "ad_spirit", - "adspirit.net": "ad_spirit", - "adac.de": "adac_de", - "adacado.com": "adacado", - "ozonemedia.com": "adadyn", - "adrtx.net": "adality_gmbh", - "adalliance.io": "adalliance.io", - "adalyser.com": "adalyser.com", - "adaos-ads.net": "adaos", - "adap.tv": "adap.tv", - "smrtlnks.com": "adaptiveblue_smartlinks", - "yieldoptimizer.com": "adara_analytics", - "adnetwork.adasiaholdings.com": "adasia_holdings", - "adbetclickin.pink": "adbetclickin.pink", - "adbetnet.com": "adbetnet.com", - "adblade.com": "adblade.com", - "adbooth.com": "adbooth", - "adbooth.net": "adbooth", - "adbox.lv": "adbox", - "adbrn.com": "adbrain", - "adbrite.com": "adbrite", - "adbull.com": "adbull", - "adbutler.com": "adbutler", - "adc-serv.net": "adc_media", - "adc-srv.net": "adc_media", - "adcash.com": "adcash", - "vuroll.in": "adchakra", - "acs86.com": "adchina", - "csbew.com": "adchina", - "irs09.com": "adchina", - "adcito.com": "adcito", - "adcitomedia.com": "adcito", - "adclear.net": "adclear", - "swift.adclerks.com": "adclerks", - "adclickmedia.com": "adclickmedia", - "adclickzone.go2cloud.org": "adclickzone", - "ad-cloud.jp": "adcloud", - "admarvel.s3.amazonaws.com": "adcolony", - "ads.admarvel.com": "adcolony", - "adcolony.com": "adcolony", - "adrdgt.com": "adconion", - "amgdgt.com": "adconion", - "adcrowd.com": "adcrowd", - "shop2market.com": "adcurve", - "addtocalendar.com": "add_to_calendar", - "dpmsrv.com": "addaptive", - "yagiay.com": "addefend", - "addfreestats.com": "addfreestats", - "addinto.com": "addinto", - "addshoppers.com": "addshoppers", - "shop.pe": "addshoppers", - "addthis.com": "addthis", - "addthiscdn.com": "addthis", - "addthisedge.com": "addthis", - "b2btracking.addvalue.de": "addvalue", - "addyon.com": "addyon", - "adeasy.ru": "adeasy", - "ipredictive.com": "adelphic", - "adengage.com": "adengage", - "adespresso.com": "adespresso", - "adexcite.com": "adexcite", - "adextent.com": "adextent", - "adf.ly": "adf.ly", - "adfalcon.com": "adfalcon", - "adfoc.us": "adfocus", - "js.adforgames.com": "adforgames", - "adform.net": "adform", - "adformdsp.net": "adform", - "seadform.net": "adform", - "adfox.ru": "adfox", - "adwolf.ru": "adfox", - "adfreestyle.pl": "adfreestyle", - "adfront.org": "adfront", - "adfrontiers.com": "adfrontiers", - "adgebra.co.in": "adgebra", - "adgenie.co.uk": "adgenie", - "ad.adgile.com": "adgile", - "ad.antventure.com": "adgile", - "adglare.net": "adglare.net", - "adsafety.net": "adglue", - "smartadcheck.de": "adgoal", - "smartredirect.de": "adgoal", - "adgorithms.com": "adgorithms", - "adgoto.com": "adgoto", - "adguard.com": "adguard", - "adguard.app": "adguard", - "adguard.info": "adguard", - "adguard.io": "adguard", - "adguard.org": "adguard", - "adtidy.org": "adguard", - "agrd.io": "adguard", - "agrd.eu": "adguard", - "adguard-dns.com": "adguard_dns", - "adguard-dns.io": "adguard_dns", - "adguard-vpn.com": "adguard_vpn", - "adguard-vpn.online": "adguard_vpn", - "adguardvpn.com": "adguard_vpn", - "adhands.ru": "adhands", - "adhese.be": "adhese", - "adhese.com": "adhese", - "adhese.net": "adhese", - "adhitzads.com": "adhitz", - "adhood.com": "adhood", - "afy11.net": "adify", - "cdn.adikteev.com": "adikteev", - "adimpact.com": "adimpact", - "adinch.com": "adinch", - "adition.com": "adition", - "adjal.com": "adjal", - "cdn.adjs.net": "adjs", - "adjug.com": "adjug", - "adjust.com": "adjust", - "adj.st": "adjust", - "adjust.io": "adjust", - "adjust.net.in": "adjust", - "adjust.world": "adjust", - "apptrace.com": "adjust", - "adk2.com": "adk2", - "cdn.adsrvmedia.com": "adk2", - "cdn.cdnrl.com": "adk2", - "adklip.com": "adklip", - "adkengage.com": "adknowledge", - "adknowledge.com": "adknowledge", - "bidsystem.com": "adknowledge", - "blogads.com": "adknowledge", - "cubics.com": "adknowledge", - "yarpp.org": "adknowledge", - "adsearch.adkontekst.pl": "adkontekst", - "netsprint.eu": "adkontekst.pl", - "adlabs.ru": "adlabs", - "clickiocdn.com": "adlabs", - "luxup.ru": "adlabs", - "mixmarket.biz": "adlabs", - "ad-serverparc.nl": "adlantic", - "adimg.net": "adlantis", - "adlantis.jp": "adlantis", - "cdn.adless.io": "adless", - "api.publishers.adlive.io": "adlive_header_bidding", - "adlooxtracking.com": "adloox", - "adx1.com": "admachine", - "adman.gr": "adman", - "adman.in.gr": "adman", - "admanmedia.com": "adman_media", - "admantx.com": "admantx.com", - "admaster.net": "admaster", - "cdnmaster.com": "admaster", - "admaster.com.cn": "admaster.cn", - "admasterapi.com": "admaster.cn", - "admatic.com.tr": "admatic", - "ads5.admatic.com.tr": "admatic", - "cdn2.admatic.com.tr": "admatic", - "lib-3pas.admatrix.jp": "admatrix", - "admaxserver.com": "admax", - "admaxim.com": "admaxim", - "admaya.in": "admaya", - "admedia.com": "admedia", - "adizio.com": "admedo_com", - "admedo.com": "admedo_com", - "admeira.ch": "admeira.ch", - "admeld.com": "admeld", - "admeo.ru": "admeo", - "admaym.com": "admeta", - "atemda.com": "admeta", - "admicro.vn": "admicro", - "vcmedia.vn": "admicro", - "admitad.com": "admitad.com", - "admixer.net": "admixer", - "admixer.com": "admixer", - "admized.com": "admized", - "admo.tv": "admo.tv", - "a.admob.com": "admob", - "mm.admob.com": "admob", - "mmv.admob.com": "admob", - "p.admob.com": "admob", - "run.admost.com": "admost", - "dmmotion.com": "admotion", - "nspmotion.com": "admotion", - "admulti.com": "admulti", - "adnegah.net": "adnegah", - "adnet.vn": "adnet", - "adnet.biz": "adnet.de", - "adnet.de": "adnet.de", - "adclick.lt": "adnet_media", - "adnet.lt": "adnet_media", - "ad.adnetwork.net": "adnetwork.net", - "adnetworkperformance.com": "adnetworkperformance.com", - "adserver.adnexio.com": "adnexio", - "adnium.com": "adnium.com", - "heias.com": "adnologies", - "smaclick.com": "adnow", - "st-n.ads3-adnow.com": "adnow", - "adnymics.com": "adnymics", - "adobe.com": "adobe_audience_manager", - "demdex.net": "adobe_audience_manager", - "everestjs.net": "adobe_audience_manager", - "everesttech.net": "adobe_audience_manager", - "adobe.io": "adobe_developer", - "scene7.com": "adobe_dynamic_media", - "adobedtm.com": "adobe_dynamic_tag_management", - "2o7.net": "adobe_experience_cloud", - "du8783wkf05yr.cloudfront.net": "adobe_experience_cloud", - "hitbox.com": "adobe_experience_cloud", - "imageg.net": "adobe_experience_cloud", - "nedstat.com": "adobe_experience_cloud", - "omtrdc.net": "adobe_experience_cloud", - "sitestat.com": "adobe_experience_cloud", - "adobedc.net": "adobe_experience_league", - "adobelogin.com": "adobe_login", - "adobetag.com": "adobe_tagmanager", - "typekit.com": "adobe_typekit", - "typekit.net": "adobe_typekit", - "adocean.pl": "adocean", - "dmtry.com": "adometry", - "adomik.com": "adomik", - "adcde.com": "adon_network", - "addlvr.com": "adon_network", - "adfeedstrk.com": "adon_network", - "adtrgt.com": "adon_network", - "bannertgt.com": "adon_network", - "cptgt.com": "adon_network", - "cpvfeed.com": "adon_network", - "cpvtgt.com": "adon_network", - "mygeek.com": "adon_network", - "popcde.com": "adon_network", - "sdfje.com": "adon_network", - "urtbk.com": "adon_network", - "adonion.com": "adonion", - "t.adonly.com": "adonly", - "adoperator.com": "adoperator", - "adoric.com": "adoric", - "adorika.com": "adorika", - "adorika.net": "adorika", - "adosia.com": "adosia", - "adotmob.com": "adotmob.com", - "adotube.com": "adotube", - "adparlor.com": "adparlor", - "adparlour.com": "adparlor", - "a4p.adpartner.pro": "adpartner", - "adpeepshosted.com": "adpeeps", - "adperfect.com": "adperfect", - "adperium.com": "adperium", - "adpilot.at": "adpilot", - "erne.co": "adpilot", - "adplan-ds.com": "adplan", - "advg.jp": "adplan", - "c.p-advg.com": "adplan", - "adplus.co.id": "adplus", - "adprofex.com": "adprofex", - "ads2.bid": "adprofex", - "adframesrc.com": "adprofy", - "adserve.adpulse.ir": "adpulse", - "ads.adpv.com": "adpv", - "adreactor.com": "adreactor", - "adrecord.com": "adrecord", - "adrecover.com": "adrecover", - "ad.vcm.jp": "adresult", - "adresult.jp": "adresult", - "adriver.ru": "adriver", - "adroll.com": "adroll", - "adrom.net": "adrom", - "txt.eu": "adrom", - "adru.net": "adru.net", - "adrunnr.com": "adrunnr", - "adsame.com": "adsame", - "adsbookie.com": "adsbookie", - "adscale.de": "adscale", - "adscience.nl": "adscience", - "adsco.re": "adsco.re", - "adsensecamp.com": "adsensecamp", - "adserverpub.com": "adserverpub", - "online.adservicemedia.dk": "adservice_media", - "adsfactor.net": "adsfactor", - "ads.doclix.com": "adside", - "adskeeper.co.uk": "adskeeper", - "ssp.adskom.com": "adskom", - "adslot.com": "adslot", - "adsnative.com": "adsnative", - "adsniper.ru": "adsniper.ru", - "adspeed.com": "adspeed", - "adspeed.net": "adspeed", - "o333o.com": "adspyglass", - "adstage-analytics.herokuapp.com": "adstage", - "code.adstanding.com": "adstanding", - "adstars.co.id": "adstars", - "ad-stir.com": "adstir", - "4dsply.com": "adsupply", - "cdn.engine.adsupply.com": "adsupply", - "trklnks.com": "adsupply", - "adswizz.com": "adswizz", - "adtaily.com": "adtaily", - "adtaily.pl": "adtaily", - "adtarget.me": "adtarget.me", - "adtech.de": "adtech", - "adtechus.com": "adtech", - "adtegrity.net": "adtegrity", - "adtpix.com": "adtegrity", - "adtelligence.de": "adtelligence.de", - "adentifi.com": "adtheorent", - "adthink.com": "adthink", - "advertstream.com": "adthink", - "audienceinsights.net": "adthink", - "adtiger.de": "adtiger", - "adtimaserver.vn": "adtima", - "adtng.com": "adtng.com", - "adtoma.com": "adtoma", - "adtomafusion.com": "adtoma", - "adtr02.com": "adtr02.com", - "track.adtraction.com": "adtraction", - "adtraxx.de": "adtraxx", - "adtriba.com": "adtriba.com", - "adtrue.com": "adtrue", - "adtrustmedia.com": "adtrustmedia", - "ad.adtube.ir": "adtube", - "awempire.com": "adult_webmaster_empire", - "dditscdn.com": "adult_webmaster_empire", - "livejasmin.com": "adult_webmaster_empire", - "adultadworld.com": "adultadworld", - "adworldmedia.com": "adultadworld", - "adup-tech.com": "adup-tech.com", - "advaction.ru": "advaction", - "aucourant.info": "advaction", - "schetu.net": "advaction", - "dqfw2hlp4tfww.cloudfront.net": "advalo", - "ahcdn.com": "advanced_hosters", - "pix-cdn.org": "advanced_hosters", - "s3.advarkads.com": "advark", - "adventori.com": "adventori", - "adnext.fr": "adverline", - "adverline.com": "adverline", - "surinter.net": "adverline", - "adversaldisplay.com": "adversal", - "adversalservers.com": "adversal", - "go.adversal.com": "adversal", - "adverserve.net": "adverserve", - "ad.adverteerdirect.nl": "adverteerdirect", - "adverticum.net": "adverticum", - "advertise.com": "advertise.com", - "advertisespace.com": "advertisespace", - "adsdk.com": "advertising.com", - "advertising.com": "advertising.com", - "aol.com": "advertising.com", - "atwola.com": "advertising.com", - "pictela.net": "advertising.com", - "verizonmedia.com": "advertising.com", - "advertlets.com": "advertlets", - "advertserve.com": "advertserve", - "advidi.com": "advidi", - "am10.ru": "advmaker.ru", - "am15.net": "advmaker.ru", - "advolution.de": "advolution", - "adwebster.com": "adwebster", - "ads.adwitserver.com": "adwit", - "adworx.at": "adworx.at", - "adworxs.net": "adworxs.net", - "adxion.com": "adxion", - "adxpansion.com": "adxpansion", - "ads.adxpose.com": "adxpose", - "event.adxpose.com": "adxpose", - "servedby.adxpose.com": "adxpose", - "adxprtz.com": "adxprtz.com", - "adyoulike.com": "adyoulike", - "omnitagjs.com": "adyoulike", - "adzerk.net": "adzerk", - "adzly.com": "adzly", - "aemediatraffic.com": "aemediatraffic", - "hprofits.com": "aemediatraffic", - "amxdt.com": "aerify_media", - "aerisapi.com": "aeris_weather", - "aerisweather.com": "aeris_weather", - "affectv.com": "affectv", - "go.affec.tv": "affectv", - "hybridtheory.com": "affectv", - "affilbox.com": "affilbox", - "affilbox.cz": "affilbox", - "track.affiliate-b.com": "affiliate-b", - "affiliate4you.nl": "affiliate4you", - "ads.affbuzzads.com": "affiliatebuzz", - "affiliatefuture.com": "affiliatefuture", - "affiliatelounge.com": "affiliatelounge", - "affiliation-france.com": "affiliation_france", - "affiliator.com": "affiliator", - "affiliaweb.fr": "affiliaweb", - "banner-rotation.com": "affilinet", - "webmasterplan.com": "affilinet", - "affimax.de": "affimax", - "affinity.com": "affinity", - "countby.com": "affinity.by", - "affiz.net": "affiz_cpm", - "pml.afftrack.com": "afftrack", - "afgr2.com": "afgr2.com", - "v2.afilio.com.br": "afilio", - "afsanalytics.com": "afs_analystics", - "ads.aftonbladet.se": "aftonbladet_ads", - "aftv-serving.bid": "aftv-serving.bid", - "agkn.com": "aggregate_knowledge", - "agilone.com": "agilone", - "adview.pl": "agora", - "pingagenow.com": "ahalogy", - "aimediagroup.com": "ai_media_group", - "advombat.ru": "aidata", - "aidata.io": "aidata", - "aim4media.com": "aim4media", - "muscache.com": "airbnb", - "musthird.com": "airbnb", - "airbrake.io": "airbrake", - "airpr.com": "airpr.com", - "ab.airpush.com": "airpush", - "abmr.net": "akamai_technologies", - "akamai.net": "akamai_technologies", - "akamaihd.net": "akamai_technologies", - "akamaized.net": "akamai_technologies", - "akstat.io": "akamai_technologies", - "edgekey.net": "akamai_technologies", - "edgesuite.net": "akamai_technologies", - "imiclk.com": "akamai_technologies", - "akadns.net": "akamai_technologies", - "akamaiedge.net": "akamai_technologies", - "akaquill.net": "akamai_technologies", - "akamoihd.net": "akamoihd.net", - "adn-d.sp.gmossp-sp.jp": "akane", - "akanoo.com": "akanoo", - "akavita.com": "akavita", - "ads.albawaba.com": "al_bawaba_advertising", - "serve.albacross.com": "albacross", - "aldi-international.com": "aldi-international.com", - "alenty.com": "alenty", - "alephd.com": "alephd.com", - "alexametrics.com": "alexa_metrics", - "d31qbv1cthcecs.cloudfront.net": "alexa_metrics", - "d5nxst8fruw4z.cloudfront.net": "alexa_metrics", - "alexa.com": "alexa_traffic_rank", - "algolia.com": "algolia.net", - "algolia.net": "algolia.net", - "algovid.com": "algovid.com", - "alibaba.com": "alibaba.com", - "alicdn.com": "alibaba.com", - "aliapp.org": "alibaba.com", - "alibabachengdun.com": "alibaba.com", - "alibabausercontent.com": "alibaba.com", - "aliexpress.com": "alibaba.com", - "alikunlun.com": "alibaba.com", - "aliyuncs.com": "alibaba.com", - "alibabacloud.com": "alibaba_cloud", - "alibabadns.com": "alibaba_cloud", - "aliyun.com": "alibaba_cloud", - "ucweb.com": "alibaba_ucbrowser", - "alipay.com": "alipay.com", - "alipayobjects.com": "alipay.com", - "websitealive.com": "alivechat", - "allegroimg.com": "allegro.pl", - "allegrostatic.com": "allegro.pl", - "allegrostatic.pl": "allegro.pl", - "ngacm.com": "allegro.pl", - "ngastatic.com": "allegro.pl", - "i.btg360.com.br": "allin", - "allo-pages.fr": "allo-pages.fr", - "allotraffic.com": "allotraffic", - "edge.alluremedia.com.au": "allure_media", - "allyes.com": "allyes", - "inputs.alooma.com": "alooma", - "arena.altitude-arena.com": "altitude_digital", - "amadesa.com": "amadesa", - "amap.com": "amap", - "amazon.ca": "amazon", - "amazon.co.jp": "amazon", - "amazon.co.uk": "amazon", - "amazon.com": "amazon", - "amazon.de": "amazon", - "amazon.es": "amazon", - "amazon.fr": "amazon", - "amazon.it": "amazon", - "d3io1k5o0zdpqr.cloudfront.net": "amazon", - "a2z.com": "amazon", - "aamazoncognito.com": "amazon", - "amazon-corp.com": "amazon", - "amazon-dss.com": "amazon", - "amazon.com.au": "amazon", - "amazon.com.mx": "amazon", - "amazon.dev": "amazon", - "amazon.in": "amazon", - "amazon.nl": "amazon", - "amazon.sa": "amazon", - "amazonbrowserapp.co.uk": "amazon", - "amazonbrowserapp.es": "amazon", - "amazoncrl.com": "amazon", - "firetvcaptiveportal.com": "amazon", - "ntp-fireos.com": "amazon", - "amazon-adsystem.com": "amazon_adsystem", - "serving-sys.com": "amazon_adsystem", - "sizmek.com": "amazon_adsystem", - "assoc-amazon.ca": "amazon_associates", - "assoc-amazon.co.uk": "amazon_associates", - "assoc-amazon.com": "amazon_associates", - "assoc-amazon.de": "amazon_associates", - "assoc-amazon.fr": "amazon_associates", - "assoc-amazon.jp": "amazon_associates", - "images-amazon.com": "amazon_cdn", - "media-amazon.com": "amazon_cdn", - "ssl-images-amazon.com": "amazon_cdn", - "amazontrust.com": "amazon_cdn", - "associates-amazon.com": "amazon_cdn", - "cloudfront.net": "amazon_cloudfront", - "ota-cloudfront.net": "amazon_cloudfront", - "axx-eu.amazon-adsystem.com": "amazon_mobile_ads", - "amazonpay.com": "amazon_payments", - "payments-amazon.com": "amazon_payments", - "amazonpay.in": "amazon_payments", - "aiv-cdn.net": "amazon_video", - "aiv-delivery.net": "amazon_video", - "amazonvideo.com": "amazon_video", - "pv-cdn.net": "amazon_video", - "primevideo.com": "amazon_video", - "amazonaws.com": "amazon_web_services", - "amazonwebservices.com": "amazon_web_services", - "awsstatic.com": "amazon_web_services", - "adnetwork.net.vn": "ambient_digital", - "adnetwork.vn": "ambient_digital", - "ambientplatform.vn": "ambient_digital", - "amgload.net": "amgload.net", - "amoad.com": "amoad", - "ad.amgdgt.com": "amobee", - "ads.amgdgt.com": "amobee", - "amobee.com": "amobee", - "collective-media.net": "amp_platform", - "amplitude.com": "amplitude", - "d24n15hnbwhuhn.cloudfront.net": "amplitude", - "ampproject.org": "ampproject.org", - "anametrix.net": "anametrix", - "ancestrycdn.com": "ancestry_cdn", - "ancoraplatform.com": "ancora", - "android.com": "android", - "anetwork.ir": "anetwork", - "aniview.com": "aniview.com", - "a-ads.com": "anonymousads", - "anormal-tracker.de": "anormal_tracker", - "answerscloud.com": "answers_cloud_service", - "anthill.vn": "ants", - "ants.vn": "ants", - "rt.analytics.anvato.net": "anvato", - "tkx2-prod.anvato.net": "anvato", - "w3.cdn.anvato.net": "anvato", - "player.anyclip.com": "anyclip", - "video-loader.com": "aol_be_on", - "aolcdn.com": "aol_cdn", - "isp.netscape.com": "aol_cdn", - "apa.at": "apa.at", - "apester.com": "apester", - "apicit.net": "apicit.net", - "carrierzone.com": "aplus_analytics", - "appcenter.ms": "appcenter", - "appcues.com": "appcues", - "appdynamics.com": "appdynamics", - "de8of677fyt0b.cloudfront.net": "appdynamics", - "eum-appdynamics.com": "appdynamics", - "jscdn.appier.net": "appier", - "apple.com": "apple", - "aaplimg.com": "apple", - "apple-cloudkit.com": "apple", - "apple-dns.net": "apple", - "apple-livephotoskit.com": "apple", - "apple-mapkit.com": "apple", - "apple.news": "apple", - "apzones.com": "apple", - "cdn-apple.com": "apple", - "icloud-content.com": "apple", - "icloud.com": "apple", - "icons.axm-usercontent-apple.com": "apple", - "itunes.com": "apple", - "me.com": "apple", - "mzstatic.com": "apple", - "safebrowsing.apple": "apple", - "safebrowsing.g.applimg.com": "apple", - "iadsdk.apple.com": "apple_ads", - "applifier.com": "applifier", - "assets.applovin.com": "applovin", - "applovin.com": "applovin", - "applvn.com": "applovin", - "appmetrx.com": "appmetrx", - "adnxs.com": "appnexus", - "adnxs.net": "appnexus", - "appsflyer.com": "appsflyer", - "appsflyersdk.com": "appsflyer", - "adne.tv": "apptv", - "readserver.net": "apptv", - "www.apture.com": "apture", - "arcpublishing.com": "arcpublishing", - "ard.de": "ard.de", - "areyouahuman.com": "are_you_a_human", - "arkoselabs.com": "arkoselabs.com", - "art19.com": "art19", - "banners.advsnx.net": "artimedia", - "artlebedev.ru": "artlebedev.ru", - "ammadv.it": "aruba_media_marketing", - "arubamediamarketing.it": "aruba_media_marketing", - "cya2.net": "arvato_canvas_fp", - "asambeauty.com": "asambeauty.com", - "ask.com": "ask.com", - "aspnetcdn.com": "aspnetcdn", - "ads.assemblyexchange.com": "assemblyexchange", - "cdn.astronomer.io": "astronomer", - "ati-host.net": "at_internet", - "aticdn.net": "at_internet", - "xiti.com": "at_internet", - "atedra.com": "atedra", - "oadts.com": "atg_group", - "as00.estara.com": "atg_optimization", - "atgsvcs.com": "atg_recommendations", - "adbureau.net": "atlas", - "atdmt.com": "atlas", - "atlassbx.com": "atlas", - "track.roiservice.com": "atlas_profitbuilder", - "atl-paas.net": "atlassian.net", - "atlassian.com": "atlassian.net", - "atlassian.net": "atlassian.net", - "d12ramskps3070.cloudfront.net": "atlassian.net", - "bitbucket.org": "atlassian.net", - "jira.com": "atlassian.net", - "ss-inf.net": "atlassian.net", - "d1xfq2052q7thw.cloudfront.net": "atlassian_marketplace", - "marketplace.atlassian.com": "atlassian_marketplace", - "atomz.com": "atomz_search", - "atsfi.de": "atsfi_de", - "cdn.attracta.com": "attracta", - "locayta.com": "attraqt", - "ads.audience2media.com": "audience2media", - "qwobl.net": "audience_ad_network", - "revsci.net": "audience_science", - "wunderloop.net": "audience_science", - "12mlbe.com": "audiencerate", - "audiencesquare.com": "audiencesquare.com", - "ad.gt": "audiencesquare.com", - "audigent.com": "audiencesquare.com", - "hadronid.net": "audiencesquare.com", - "auditude.com": "auditude", - "audtd.com": "audtd.com", - "cdn.augur.io": "augur", - "aumago.com": "aumago", - "clicktracks.com": "aurea_clicktracks", - "ausgezeichnet.org": "ausgezeichnet_org", - "advertising.gov.au": "australia.gov", - "auth0.com": "auth0", - "ai.autoid.com": "autoid", - "optimost.com": "autonomy", - "oc-track.autonomycloud.com": "autonomy_campaign", - "track.yieldsoftware.com": "autonomy_campaign", - "api.autopilothq.com": "autopilothq", - "autoscout24.com": "autoscout24.com", - "autoscout24.net": "autoscout24.com", - "avail.net": "avail", - "analytics.avanser.com.au": "avanser", - "avmws.com": "avant_metrics", - "avantlink.com": "avantlink", - "ads.avazu.net": "avazu_network", - "avenseo.com": "avenseo", - "adspdbl.com": "avid_media", - "avocet.io": "avocet", - "aweber.com": "aweber", - "awin.com": "awin", - "awin1.com": "awin", - "perfb.com": "awin", - "ad.globe7.com": "axill", - "azadify.com": "azadify", - "azure.com": "azure", - "azure.net": "azure", - "azurefd.net": "azure", - "trafficmanager.net": "azure", - "blob.core.windows.net": "azure_blob_storage", - "azureedge.net": "azureedge.net", - "b2bcontext.ru": "b2bcontext", - "b2bvideo.ru": "b2bvideo", - "babator.com": "babator.com", - "backbeatmedia.com": "back_beat_media", - "widgets.backtype.com": "backtype_widgets", - "bahn.de": "bahn_de", - "img-bahn.de": "bahn_de", - "baidu.com": "baidu_ads", - "baidustatic.com": "baidu_ads", - "bdimg.com": "baidu_static", - "bdstatic.com": "baidu_static", - "baletingo.com": "baletingo.com", - "bangdom.com": "bangdom.com", - "widgets.bankrate.com": "bankrate", - "bannerconnect.net": "banner_connect", - "bannerflow.com": "bannerflow.com", - "bannerplay.com": "bannerplay", - "cdn.bannersnack.com": "bannersnack", - "dn3y71tq7jf07.cloudfront.net": "barilliance", - "getbarometer.s3.amazonaws.com": "barometer", - "basilic.io": "basilic.io", - "batanga.com": "batanga_network", - "t4ft.de": "batch_media", - "bauernative.com": "bauer_media", - "baur.de": "baur.de", - "baynote.net": "baynote_observer", - "bazaarvoice.com": "bazaarvoice", - "bbci.co.uk": "bbci", - "tracking.bd4travel.com": "bd4travel", - "beopinion.com": "be_opinion", - "bfmio.com": "beachfront", - "beaconads.com": "beacon_ad_network", - "beampulse.com": "beampulse.com", - "beanstalkdata.com": "beanstalk_data", - "bebi.com": "bebi", - "beeketing.com": "beeketing.com", - "beeline.ru": "beeline.ru", - "bidr.io": "beeswax", - "tracker.beezup.com": "beezup", - "begun.ru": "begun", - "behavioralengine.com": "behavioralengine", - "belboon.de": "belboon_gmbh", - "cdn.belco.io": "belco", - "belstat.be": "belstat", - "belstat.com": "belstat", - "belstat.de": "belstat", - "belstat.fr": "belstat", - "belstat.nl": "belstat", - "bemobile.ua": "bemobile.ua", - "tag.benchplatform.com": "bench_platform", - "betterttv.net": "betterttv", - "betweendigital.com": "betweendigital.com", - "intencysrv.com": "betweendigital.com", - "bid.run": "bid.run", - "bidgear.com": "bidgear", - "bidswitch.net": "bidswitch", - "exe.bid": "bidswitch", - "bttrack.com": "bidtellect", - "bidtheatre.com": "bidtheatre", - "bidvertiser.com": "bidvertiser", - "bigmobileads.com": "big_mobile", - "bigcommerce.com": "bigcommerce.com", - "bigmir.net": "bigmir.net", - "bigpoint-payment.com": "bigpoint", - "bigpoint.com": "bigpoint", - "bigpoint.net": "bigpoint", - "bpcdn.net": "bigpoint", - "bpsecure.com": "bigpoint", - "bildstatic.de": "bild", - "ad-cdn.bilgin.pro": "bilgin_pro", - "pixel.bilinmedia.net": "bilin", - "bat.r.msn.com": "bing_ads", - "bing.com": "bing_ads", - "bing.net": "bing_ads", - "virtualearth.net": "bing_maps", - "binge.com.au": "binge", - "view.binlayer.com": "binlayer", - "widgets.binotel.com": "binotel", - "esendra.fi": "bisnode", - "bitcoinplus.com": "bitcoin_miner", - "bit.ly": "bitly", - "bitrix.de": "bitrix", - "bitrix.info": "bitrix", - "bitrix.ru": "bitrix", - "bitrix24.com": "bitrix", - "bitrix24.com.br": "bitrix", - "bitwarden.com": "bitwarden", - "traffic.adxprts.com": "bizcn", - "jssr.jd.com": "blackdragon", - "blau.de": "blau.de", - "bnmla.com": "blink_new_media", - "blismedia.com": "blis", - "blogad.com.tw": "blogad", - "blogbang.com": "blogbang", - "www.blogcatalog.com": "blogcatalog", - "track.blogcounter.de": "blogcounter", - "blogfoster.com": "blogfoster.com", - "bloggerads.net": "bloggerads", - "blogher.com": "blogher", - "blogherads.com": "blogher", - "blogimg.jp": "blogimg.jp", - "blogsmithmedia.com": "blogsmithmedia.com", - "blogblog.com": "blogspot_com", - "blogger.com": "blogspot_com", - "blogspot.com": "blogspot_com", - "brcdn.com": "bloomreach", - "brsrvr.com": "bloomreach", - "brtstats.com": "bloomreach", - "offerpoint.net": "blue_cherry_group", - "blueserving.com": "blue_seed", - "blueconic.net": "blueconic.net", - "bluecore.com": "bluecore", - "triggeredmail.appspot.com": "bluecore", - "bkrtx.com": "bluekai", - "bluekai.com": "bluekai", - "adrevolver.com": "bluelithium", - "bluelithium.com": "bluelithium", - "bmmetrix.com": "bluemetrix", - "japanmetrix.jp": "bluemetrix", - "bluenewsupdate.info": "bluenewsupdate.info", - "bluestreak.com": "bluestreak", - "bluetriangletech.com": "bluetriangle", - "btttag.com": "bluetriangle", - "bodelen.com": "bodelen.com", - "tracking.bol.com": "bol_affiliate_program", - "qb.boldapps.net": "bold", - "secure.apps.shappify.com": "bold", - "boldchat.com": "boldchat", - "boltdns.net": "boltdns.net", - "bom.gov.au": "bom", - "ml314.com": "bombora", - "bongacams.com": "bongacams.com", - "bonial.com": "bonial", - "bonialconnect.com": "bonial", - "bonialserviceswidget.de": "bonial", - "boo-box.com": "boo-box", - "booking.com": "booking.com", - "bstatic.com": "booking.com", - "boostbox.com.br": "boost_box", - "boostervideo.ru": "booster_video", - "bootstrapcdn.com": "bootstrap", - "borrango.com": "borrango.com", - "scan.botscanner.com": "botscanner", - "boudja.com": "boudja.com", - "bounceexchange.com": "bounce_exchange", - "bouncex.com": "bouncex", - "bouncex.net": "bouncex", - "j.clickdensity.com": "box_uk", - "boxever.com": "boxever", - "brainient.com": "brainient", - "brainsins.com": "brainsins", - "d2xkqxdy6ewr93.cloudfront.net": "brainsins", - "mobileapptracking.com": "branch", - "app.link": "branch_metrics", - "branch.io": "branch_metrics", - "brandaffinity.net": "brand_affinity", - "go.cpmadvisors.com": "brand_networks", - "optorb.com": "brand_networks", - "brandmetrics.com": "brandmetrics.com", - "brandreachsys.com": "brandreach", - "rtbidder.net": "brandscreen", - "brandwire.tv": "brandwire.tv", - "branica.com": "branica", - "appboycdn.com": "braze", - "braze.com": "braze", - "brealtime.com": "brealtime", - "bridgetrack.com": "bridgetrack", - "brightcove.com": "brightcove", - "brightcove.net": "brightcove_player", - "analytics.brightedge.com": "brightedge", - "munchkin.brightfunnel.com": "brightfunnel", - "brightonclick.com": "brightonclick.com", - "btrll.com": "brightroll", - "p.brilig.com": "brilig", - "brillen.de": "brillen.de", - "broadstreetads.com": "broadstreet", - "bm23.com": "bronto", - "brow.si": "brow.si", - "browser-statistik.de": "browser-statistik", - "browser-update.org": "browser_update", - "btncdn.com": "btncdn.com", - "in.bubblestat.com": "bubblestat", - "brighteroption.com": "buddy_media", - "bufferapp.com": "buffer_button", - "bugherd.com": "bugherd.com", - "bugsnag.com": "bugsnag", - "d2wy8f7a9ursnm.cloudfront.net": "bugsnag", - "bulkhentai.com": "bulkhentai.com", - "bumlam.com": "bumlam.com", - "bunchbox.co": "bunchbox", - "bf-ad.net": "burda", - "bf-tools.net": "burda", - "bstatic.de": "burda_digital_systems", - "burstbeacon.com": "burst_media", - "burstnet.com": "burst_media", - "burt.io": "burt", - "d3q6px0y2suh5n.cloudfront.net": "burt", - "rich-agent.s3.amazonaws.com": "burt", - "richmetrics.com": "burt", - "stats.businessol.com": "businessonline_analytics", - "bttn.io": "button", - "buysellads.com": "buysellads", - "servedby-buysellads.com": "buysellads", - "buzzadexchange.com": "buzzadexchange.com", - "buzzador.com": "buzzador", - "buzzfed.com": "buzzfeed", - "bwbx.io": "bwbx.io", - "bypass.jp": "bypass", - "c1exchange.com": "c1_exchange", - "c3metrics.com": "c3_metrics", - "c3tag.com": "c3_metrics", - "c8.net.ua": "c8_network", - "cackle.me": "cackle.me", - "d1cerpgff739r9.cloudfront.net": "cadreon", - "d1qpxk1wfeh8v1.cloudfront.net": "cadreon", - "callpage.io": "call_page", - "callbackhunter.com": "callbackhunter", - "callmeasurement.com": "callbox", - "callibri.ru": "callibri", - "callrail.com": "callrail", - "calltracking.ru": "calltracking", - "caltat.com": "caltat.com", - "cam-content.com": "cam-content.com", - "camakaroda.com": "camakaroda.com", - "s.edkay.com": "campus_explorer", - "canddi.com": "canddi", - "canonical.com": "canonical", - "canvas.net": "canvas", - "canvasnetwork.com": "canvas", - "du11hjcvx0uqb.cloudfront.net": "canvas", - "kdata.fr": "capitaldata", - "captora.com": "captora", - "edge.capturemedia.network": "capture_media", - "cdn.capturly.com": "capturly", - "route.carambo.la": "carambola", - "carbonads.com": "carbonads", - "carbonads.net": "carbonads", - "fusionads.net": "carbonads", - "cardinalcommerce.com": "cardinal", - "cardlytics.com": "cardlytics", - "cdn.carrotquest.io": "carrot_quest", - "api.cartstack.com": "cartstack", - "caspion.com": "caspion", - "t.castle.io": "castle", - "3gl.net": "catchpoint", - "cbox.ws": "cbox", - "adlog.com.com": "cbs_interactive", - "cbsinteractive.com": "cbs_interactive", - "dw.com.com": "cbs_interactive", - "ccmbg.com": "ccm_benchmark", - "admission.net": "cdk_digital_marketing", - "cdn-net.com": "cdn-net.com", - "cdn13.com": "cdn13.com", - "cdn77.com": "cdn77", - "cdn77.org": "cdn77", - "cdnetworks.com": "cdnetworks.net", - "cdnetworks.net": "cdnetworks.net", - "cdnnetwok.xyz": "cdnnetwok_xyz", - "cdnondemand.org": "cdnondemand.org", - "cdnsure.com": "cdnsure.com", - "cdnvideo.com": "cdnvideo.com", - "cdnwidget.com": "cdnwidget.com", - "cedexis-radar.net": "cedexis_radar", - "cedexis-test.com": "cedexis_radar", - "cedexis.com": "cedexis_radar", - "cedexis.fastlylb.net": "cedexis_radar", - "cedexis.net": "cedexis_radar", - "celebrus.com": "celebrus", - "celtra.com": "celtra", - "cendyn.adtrack.calls.net": "cendyn", - "centraltag.com": "centraltag", - "brand-server.com": "centro", - "speed-trap.nl": "cerberus_speed-trap", - "link.ixs1.net": "certainsource", - "hits.e.cl": "certifica_metric", - "certona.net": "certona", - "res-x.com": "certona", - "gsn.chameleon.ad": "chameleon", - "chango.ca": "chango", - "chango.com": "chango", - "channelintelligence.com": "channel_intelligence", - "cptrack.de": "channel_pilot_solutions", - "channeladvisor.com": "channeladvisor", - "searchmarketing.com": "channeladvisor", - "channelfinder.net": "channelfinder", - "chaordicsystems.com": "chaordic", - "chartbeat.com": "chartbeat", - "chartbeat.net": "chartbeat", - "chartboost.com": "chartboost", - "chaser.ru": "chaser", - "cloud.chatbeacon.io": "chat_beacon", - "chatango.com": "chatango", - "call.chatra.io": "chatra", - "chaturbate.com": "chaturbate.com", - "chatwing.com": "chatwing", - "checkmystats.com.au": "checkmystats", - "chefkoch-cdn.de": "chefkoch_de", - "chefkoch.de": "chefkoch_de", - "tracker.chinmedia.vn": "chin_media", - "chinesean.com": "chinesean", - "chitika.net": "chitika", - "choicestream.com": "choicestream", - "api.getchute.com": "chute", - "media.chute.io": "chute", - "iqcontentplatform.de": "circit", - "data.circulate.com": "circulate", - "p.cityspark.com": "city_spark", - "cityads.ru": "cityads", - "gameleads.ru": "cityads", - "ciuvo.com": "ciuvo.com", - "widget.civey.com": "civey_widgets", - "civicscience.com": "civicscience.com", - "ciweb.ciwebgroup.com": "ciwebgroup", - "clcknads.pro": "clcknads.pro", - "pulseradius.com": "clear_pier", - "clearbit.com": "clearbit.com", - "clearsale.com.br": "clearsale", - "tag.clrstm.com": "clearstream.tv", - "api.clerk.io": "clerk.io", - "cleverpush.com": "clever_push", - "wzrkt.com": "clever_tap", - "cleversite.ru": "cleversite", - "script.click360.io": "click360", - "clickandchat.com": "click_and_chat", - "software.clickback.com": "click_back", - "hit.clickaider.com": "clickaider", - "clickaine.com": "clickaine", - "clickbank.net": "clickbank", - "cbproads.com": "clickbank_proads", - "adtoll.com": "clickbooth", - "clickbooth.com": "clickbooth", - "clickboothlnk.com": "clickbooth", - "clickcease.com": "clickcease", - "clickcertain.com": "clickcertain", - "remarketstats.com": "clickcertain", - "clickdesk.com": "clickdesk", - "analytics.clickdimensions.com": "clickdimensions", - "clickequations.net": "clickequations", - "clickexperts.net": "clickexperts", - "doublemax.net": "clickforce", - "clickinc.com": "clickinc", - "clickintext.net": "clickintext", - "clickky.biz": "clickky", - "9nl.be": "clickmeter", - "9nl.com": "clickmeter", - "9nl.eu": "clickmeter", - "9nl.it": "clickmeter", - "9nl.me": "clickmeter", - "clickmeter.com": "clickmeter", - "clickonometrics.pl": "clickonometrics", - "clickpoint.com": "clickpoint", - "clickpoint.it": "clickpoint", - "clickprotector.com": "clickprotector", - "clickreport.com": "clickreport", - "doogleonduty.com": "clickreport", - "ctn.go2cloud.org": "clicks_thru_networks", - "clicksor.com": "clicksor", - "hatid.com": "clicksor", - "lzjl.com": "clicksor", - "myroitracking.com": "clicksor", - "clicktale.com": "clicktale", - "clicktale.net": "clicktale", - "clicktale.pantherssl.com": "clicktale", - "clicktalecdn.sslcs.cdngc.net": "clicktale", - "clicktripz.com": "clicktripz", - "clickwinks.com": "clickwinks", - "getclicky.com": "clicky", - "staticstuff.net": "clicky", - "clickyab.com": "clickyab", - "clicmanager.fr": "clicmanager", - "eplayer.clipsyndicate.com": "clip_syndicate", - "www.is1.clixgalore.com": "clixgalore", - "clixmetrix.com": "clixmetrix", - "clixsense.com": "clixsense", - "cloud-media.fr": "cloud-media.fr", - "cloudflare.com": "cloudflare", - "cloudflare.net": "cloudflare", - "cloudflare-dm-cmpimg.com": "cloudflare", - "cloudflare-dns.com": "cloudflare", - "cloudflare-ipfs.com": "cloudflare", - "cloudflare-quic.com": "cloudflare", - "cloudflare-terms-of-service-abuse.com": "cloudflare", - "cloudflare.tv": "cloudflare", - "cloudflareaccess.com": "cloudflare", - "cloudflareclient.com": "cloudflare", - "cloudflareinsights.com": "cloudflare", - "cloudflareok.com": "cloudflare", - "cloudflareportal.com": "cloudflare", - "cloudflareresolve.com": "cloudflare", - "cloudflaressl.com": "cloudflare", - "cloudflarestatus.com": "cloudflare", - "cloudflarestream.com": "cloudflare", - "pacloudflare.com": "cloudflare", - "sn-cloudflare.com": "cloudflare", - "videodelivery.net": "cloudflare", - "cloudimg.io": "cloudimage.io", - "cloudinary.com": "cloudinary", - "clovenetwork.com": "clove_network", - "clustrmaps.com": "clustrmaps", - "cnbc.com": "cnbc", - "cnetcontent.com": "cnetcontent.com", - "cnstats.ru": "cnstats", - "cnzz.com": "cnzz.com", - "umeng.com": "cnzz.com", - "acc-hd.de": "coadvertise", - "client.cobrowser.net": "cobrowser", - "codeonclick.com": "codeonclick.com", - "cogocast.net": "cogocast", - "coin-have.com": "coin_have", - "appsha1.cointraffic.io": "coin_traffic", - "authedmine.com": "coinhive", - "coin-hive.com": "coinhive", - "coinhive.com": "coinhive", - "coinurl.com": "coinurl", - "coll1onf.com": "coll1onf.com", - "coll2onf.com": "coll2onf.com", - "service.collarity.com": "collarity", - "static.clmbtech.com": "columbia_online", - "combotag.com": "combotag", - "pdk.theplatform.com": "comcast_technology_solutions", - "theplatform.com": "comcast_technology_solutions", - "comm100.cn": "comm100", - "comm100.com": "comm100", - "cdn-cs.com": "commerce_sciences", - "cdn.mercent.com": "commercehub", - "link.mercent.com": "commercehub", - "commercialvalue.org": "commercialvalue.org", - "afcyhf.com": "commission_junction", - "anrdoezrs.net": "commission_junction", - "apmebf.com": "commission_junction", - "awltovhc.com": "commission_junction", - "emjcd.com": "commission_junction", - "ftjcfx.com": "commission_junction", - "lduhtrp.net": "commission_junction", - "qksz.net": "commission_junction", - "tkqlhce.com": "commission_junction", - "tqlkg.com": "commission_junction", - "yceml.net": "commission_junction", - "communicatorcorp.com": "communicator_corp", - "wowanalytics.co.uk": "communigator", - "c-col.com": "competexl", - "c.compete.com": "competexl", - "complex.com": "complex_media_network", - "complexmedianetwork.com": "complex_media_network", - "comprigo.com": "comprigo", - "comscore.com": "comscore", - "zqtk.net": "comscore", - "conative.de": "conative.de", - "condenast.com": "condenastdigital.com", - "conduit-banners.com": "conduit", - "conduit-data.com": "conduit", - "conduit.com": "conduit", - "confirmit.com": "confirmit", - "congstar.de": "congstar.de", - "connatix.com": "connatix.com", - "connected-by.connectad.io": "connectad", - "cdn.connecto.io": "connecto", - "connexity.net": "connexity", - "cxt.ms": "connexity", - "connextra.com": "connextra", - "rs6.net": "constant_contact", - "serverbid.com": "consumable", - "contactatonce.com": "contact_at_once", - "adrolays.de": "contact_impact", - "c-i.as": "contact_impact", - "df-srv.de": "contact_impact", - "d1uwd25yvxu96k.cloudfront.net": "contactme", - "static.contactme.com": "contactme", - "contaxe.com": "contaxe", - "content.ad": "content.ad", - "ingestion.contentinsights.com": "content_insights", - "contentexchange.me": "contentexchange.me", - "ctfassets.net": "contentful_gmbh", - "contentpass.de": "contentpass", - "contentpass.net": "contentpass", - "contentsquare.net": "contentsquare.net", - "d1aug3dv5magti.cloudfront.net": "contentwrx", - "d39se0h2uvfakd.cloudfront.net": "contentwrx", - "c-on-text.com": "context", - "intext.contextad.pl": "context.ad", - "continum.net": "continum_net", - "s2.contribusourcesyndication.com": "contribusource", - "hits.convergetrack.com": "convergetrack", - "fastclick.net": "conversant", - "mediaplex.com": "conversant", - "mplxtms.com": "conversant", - "cm-commerce.com": "conversio", - "media.conversio.com": "conversio", - "c.conversionlogic.net": "conversion_logic", - "conversionruler.com": "conversionruler", - "conversionsbox.com": "conversions_box", - "conversionsondemand.com": "conversions_on_demand", - "ant.conversive.nl": "conversive", - "convertexperiments.com": "convert", - "d3sjgucddk68ji.cloudfront.net": "convertfox", - "convertro.com": "convertro", - "d1ivexoxmp59q7.cloudfront.net": "convertro", - "conviva.com": "conviva", - "cookieconsent.silktide.com": "cookie_consent", - "cookie-script.com": "cookie_script", - "cookiebot.com": "cookiebot", - "cookieq.com": "cookieq", - "lite.piclens.com": "cooliris", - "copacet.com": "copacet", - "raasnet.com": "coreaudience", - "coremotives.com": "coremotives", - "coull.com": "coull", - "cpmrocket.com": "cpm_rocket", - "cpmprofit.com": "cpmprofit", - "cpmstar.com": "cpmstar", - "captifymedia.com": "cpx.to", - "cpx.to": "cpx.to", - "cqcounter.com": "cq_counter", - "cqq5id8n.com": "cqq5id8n.com", - "cquotient.com": "cquotient.com", - "craftkeys.com": "craftkeys", - "ads.crakmedia.com": "crakmedia_network", - "craktraffic.com": "crakmedia_network", - "crankyads.com": "crankyads", - "crashlytics.com": "crashlytics", - "cetrk.com": "crazy_egg", - "crazyegg.com": "crazy_egg", - "dnn506yrbagrg.cloudfront.net": "crazy_egg", - "creafi-online-media.com": "creafi", - "createjs.com": "createjs", - "creativecommons.org": "creative_commons", - "brandwatch.com": "crimsonhexagon_com", - "crimsonhexagon.com": "crimsonhexagon_com", - "hexagon-analytics.com": "crimsonhexagon_com", - "ctnsnet.com": "crimtan", - "crisp.chat": "crisp", - "crisp.im": "crisp", - "criteo.com": "criteo", - "criteo.net": "criteo", - "p.crm4d.com": "crm4d", - "crossengage.io": "crossengage", - "crosspixel.net": "crosspixel", - "crsspxl.com": "crosspixel", - "crosssell.info": "crosssell.info", - "crossss.com": "crossss", - "widget.crowdignite.com": "crowd_ignite", - "static.crowdscience.com": "crowd_science", - "ss.crowdprocess.com": "crowdprocess", - "our.glossip.nl": "crowdynews", - "widget.breakingburner.com": "crowdynews", - "widget.crowdynews.com": "crowdynews", - "searchg2.crownpeak.net": "crownpeak", - "snippet.omm.crownpeak.com": "crownpeak", - "cryptoloot.pro": "cryptoloot_miner", - "ctnetwork.hu": "ctnetwork", - "adzhub.com": "ctrlshift", - "data.withcubed.com": "cubed", - "cuelinks.com": "cuelinks", - "cdn.cupinteractive.com": "cup_interactive", - "curse.com": "curse.com", - "cursecdn.com": "cursecdn.com", - "assets.customer.io": "customer.io", - "widget.customerly.io": "customerly", - "cxense.com": "cxense", - "cxo.name": "cxo.name", - "cyberwing.co.jp": "cyber_wing", - "cybersource.com": "cybersource", - "cygnus.com": "cygnus", - "da-ads.com": "da-ads.com", - "dailymail.co.uk": "dailymail.co.uk", - "dailymotion.com": "dailymotion", - "dailymotionbus.com": "dailymotion", - "dm-event.net": "dailymotion", - "dmcdn.net": "dailymotion", - "dmxleo.com": "dailymotion_advertising", - "ds1.nl": "daisycon", - "dantrack.net": "dantrack.net", - "dmclick.cn": "darwin_marketing", - "tags.dashboardad.net": "dashboard_ad", - "datacaciques.com": "datacaciques.com", - "datacoral.com": "datacoral", - "abandonaid.com": "datacrushers", - "datacrushers.com": "datacrushers", - "datadome.co": "datadome", - "optimahub.com": "datalicious_datacollector", - "supert.ag": "datalicious_supertag", - "inextaction.net": "datalogix", - "nexac.com": "datalogix", - "datamind.ru": "datamind.ru", - "datatables.net": "datatables", - "adunits.datawrkz.com": "datawrkz", - "dataxpand.script.ag": "dataxpand", - "tc.dataxpand.com": "dataxpand", - "w55c.net": "dataxu", - "datds.net": "datds.net", - "pro-market.net": "datonics", - "displaymarketplace.com": "datran", - "davebestdeals.com": "davebestdeals.com", - "dawandastatic.com": "dawandastatic.com", - "dc-storm.com": "dc_stormiq", - "h4k5.com": "dc_stormiq", - "stormcontainertag.com": "dc_stormiq", - "stormiq.com": "dc_stormiq", - "dcbap.com": "dcbap.com", - "dcmn.com": "dcmn.com", - "statslogger.rocket.persgroep.cloud": "de_persgroep", - "deadlinefunnel.com": "deadline_funnel", - "cc2.dealer.com": "dealer.com", - "d9lq0o81skkdj.cloudfront.net": "dealer.com", - "esm1.net": "dealer.com", - "static.dealer.com": "dealer.com", - "decibelinsight.net": "decibel_insight", - "ads.dedicatedmedia.com": "dedicated_media", - "api.deep.bi": "deep.bi", - "deepintent.com": "deepintent.com", - "defpush.com": "defpush.com", - "deichmann.com": "deichmann.com", - "vxml4.delacon.com.au": "delacon", - "tracking.percentmobile.com": "delivr", - "adaction.se": "delta_projects", - "de17a.com": "delta_projects", - "deluxe.script.ag": "deluxe", - "delvenetworks.com": "delve_networks", - "company-target.com": "demandbase", - "demandbase.com": "demandbase", - "dmd53.com": "demandmedia", - "dmtracker.com": "demandmedia", - "deqwas.net": "deqwas", - "devatics.com": "devatics", - "developermedia.com": "developer_media", - "dapxl.com": "deviantart.net", - "deviantart.net": "deviantart.net", - "my.blueadvertise.com": "dex_platform", - "dgm-au.com": "dgm", - "s2d6.com": "dgm", - "d31y97ze264gaa.cloudfront.net": "dialogtech", - "d3von6il1wr7wo.cloudfront.net": "dianomi", - "dianomi.com": "dianomi", - "dianomioffers.co.uk": "dianomi", - "tag.didit.com": "didit_blizzard", - "track.did-it.com": "didit_maestro", - "privacy-center.org": "didomi", - "digg.com": "digg_widget", - "digicert.com": "digicert_trust_seal", - "phicdn.net": "digicert_trust_seal", - "digidip.net": "digidip", - "digiglitzmarketing.go2cloud.org": "digiglitz", - "wtp101.com": "digilant", - "digioh.com": "digioh", - "lightboxcdn.com": "digioh", - "digitalgov.gov": "digital.gov", - "cookiereports.com": "digital_control_room", - "adtag.cc": "digital_nomads", - "adready.com": "digital_remedy", - "adreadytractions.com": "digital_remedy", - "cpxinteractive.com": "digital_remedy", - "directtrack.com": "digital_river", - "onenetworkdirect.net": "digital_river", - "track.digitalriver.com": "digital_river", - "dwin1.com": "digital_window", - "digiteka.net": "digiteka", - "ultimedia.com": "digiteka", - "digitru.st": "digitrust", - "widget.dihitt.com.br": "dihitt_badge", - "dimml.io": "dimml", - "keywordsconnect.com": "direct_keyword_link", - "directadvert.ru": "directadvert", - "directrev.com": "directrev", - "discordapp.com": "discord", - "disneyplus.com": "disneyplus", - "bamgrid.com": "disneystreaming", - "dssedge.com": "disneystreaming", - "dssott.com": "disneystreaming", - "d81mfvml8p5ml.cloudfront.net": "display_block", - "disqus.com": "disqus", - "disquscdn.com": "disqus", - "disqusads.com": "disqus_ads", - "distiltag.com": "distil_tag", - "districtm.ca": "districtm.io", - "districtm.io": "districtm.io", - "jsrdn.com": "distroscale", - "div.show": "div.show", - "stats.vertriebsassistent.de": "diva", - "tag.divvit.com": "divvit", - "d-msquared.com": "dm2", - "and.co.uk": "dmg_media", - "dmm.co.jp": "dmm", - "ctret.de": "dmwd", - "toolbar.dockvine.com": "dockvine", - "awecr.com": "docler", - "fwbntw.com": "docler", - "s.dogannet.tv": "dogannet", - "domain.glass": "domainglass", - "www.domodomain.com": "domodomain", - "donation-tools.org": "donationtools", - "doofinder.com": "doofinder.com", - "embed.doorbell.io": "doorbell.io", - "dotandad.com": "dotandmedia", - "trackedlink.net": "dotmailer", - "dotmetrics.net": "dotmetrics.net", - "dotomi.com": "dotomi", - "dtmc.com": "dotomi", - "dtmpub.com": "dotomi", - "double.net": "double.net", - "2mdn.net": "doubleclick", - "doublepimp.com": "doublepimp", - "doublepimpssl.com": "doublepimp", - "redcourtside.com": "doublepimp", - "xeontopa.com": "doublepimp", - "zerezas.com": "doublepimp", - "doubleverify.com": "doubleverify", - "wrating.com": "dratio", - "adsymptotic.com": "drawbridge", - "dreame.tech": "dreame_tech", - "dreametech.com": "dreame_tech", - "dreamlab.pl": "dreamlab.pl", - "drift.com": "drift", - "js.driftt.com": "drift", - "getdrip.com": "drip", - "dropbox.com": "dropbox.com", - "dropboxstatic.com": "dropbox.com", - "z5x.net": "dsnr_media_group", - "dsp-rambler.ru": "dsp_rambler", - "m6d.com": "dstillery", - "media6degrees.com": "dstillery", - "dtscout.com": "dtscout.com", - "dd-cdn.multiscreensite.com": "dudamobile", - "px.multiscreensite.com": "dudamobile", - "cdn-0.d41.co": "dun_and_bradstreet", - "cn01.dwstat.cn": "dwstat.cn", - "dynad.net": "dynad", - "dyntrk.com": "dynadmic", - "dyntracker.de": "dynamic_1001_gmbh", - "media01.eu": "dynamic_1001_gmbh", - "content.dl-rms.com": "dynamic_logic", - "dlqm.net": "dynamic_logic", - "questionmarket.com": "dynamic_logic", - "dynamicyield.com": "dynamic_yield", - "beacons.hottraffic.nl": "dynata", - "dynatrace.com": "dynatrace.com", - "dyncdn.me": "dyncdn.me", - "e-planning.net": "e-planning", - "eadv.it": "eadv", - "eanalyzer.de": "eanalyzer.de", - "early-birds.fr": "early_birds", - "cdn.earnify.com": "earnify", - "earnify.com": "earnify_tracker", - "easyads.bg": "easyads", - "easylist.club": "easylist_club", - "classistatic.de": "ebay", - "ebay-us.com": "ebay", - "ebay.com": "ebay", - "ebay.de": "ebay", - "ebayclassifiedsgroup.com": "ebay", - "ebaycommercenetwork.com": "ebay", - "ebaydesc.com": "ebay", - "ebayimg.com": "ebay", - "ebayrtm.com": "ebay", - "ebaystatic.com": "ebay", - "ad.about.co.kr": "ebay_korea", - "adcheck.about.co.kr": "ebay_korea", - "adn.ebay.com": "ebay_partner_network", - "beead.co.uk": "ebuzzing", - "beead.fr": "ebuzzing", - "beead.net": "ebuzzing", - "ebuzzing.com": "ebuzzing", - "ebz.io": "ebuzzing", - "echoenabled.com": "echo", - "eclick.vn": "eclick", - "econda-monitor.de": "econda", - "eco-tag.jp": "ecotag", - "alphacdn.net": "edgio", - "edg.io": "edgio", - "edgecast.com": "edgio", - "edgecastcdn.net": "edgio", - "edgecastdns.net": "edgio", - "sigmacdn.net": "edgio", - "ecustomeropinions.com": "edigitalresearch", - "effectivemeasure.net": "effective_measure", - "effiliation.com": "effiliation", - "egain.net": "egain", - "cloud-emea.analytics-egain.com": "egain_analytics", - "ehi-siegel.de": "ehi-siegel_de", - "ekmpinpoint.com": "ekmpinpoint", - "ekomi.de": "ekomi", - "elasticad.net": "elastic_ad", - "elasticbeanstalk.com": "elastic_beanstalk", - "cloudcell.com": "electronic_arts", - "ea.com": "electronic_arts", - "eamobile.com": "electronic_arts", - "element.io": "element", - "riot.im": "element", - "elicitapp.com": "elicit", - "eloqua.com": "eloqua", - "en25.com": "eloqua", - "eluxer.net": "eluxer_net", - "tracker.emailaptitude.com": "email_aptitude", - "tag.email-attitude.com": "email_attitude", - "app.emarketeer.com": "emarketeer", - "embed.ly": "embed.ly", - "embedly.com": "embed.ly", - "emediate.dk": "emediate", - "emediate.eu": "emediate", - "emediate.se": "emediate", - "emetriq.de": "emetriq", - "e2ma.net": "emma", - "adinsight.co.kr": "emnet", - "colbenson.es": "empathy", - "emsmobile.de": "emsmobile.de", - "sitecompass.com": "encore_metrics", - "enectoanalytics.com": "enecto_analytics", - "trk.enecto.com": "enecto_analytics", - "track.engagesciences.com": "engage_sciences", - "widget.engageya.com": "engageya_widget", - "engagio.com": "engagio", - "engineseeker.com": "engineseeker", - "enquisite.com": "enquisite", - "adtlgc.com": "enreach", - "ats.tumri.net": "ensemble", - "ensighten.com": "ensighten", - "envolve.com": "envolve", - "cdn.callbackkiller.com": "envybox", - "email-reflex.com": "eperflex", - "epicgameads.com": "epic_game_ads", - "trafficmp.com": "epic_marketplace", - "adshost1.com": "epom", - "adshost2.com": "epom", - "epom.com": "epom", - "epoq.de": "epoq", - "banzaiadv.it": "eprice", - "eproof.com": "eproof", - "equitystory.com": "eqs_group", - "eqads.com": "eqworks", - "ero-advertising.com": "eroadvertising", - "eroadvertising.com": "eroadvertising", - "d15qhc0lu1ghnk.cloudfront.net": "errorception", - "errorception.com": "errorception", - "eshopcomp.com": "eshopcomp.com", - "espncdn.com": "espn_cdn", - "esprit.de": "esprit.de", - "cybermonitor.com": "estat", - "estat.com": "estat", - "teste-s3-maycon.s3.amazonaws.com": "etag", - "etahub.com": "etahub.com", - "etargetnet.com": "etarget", - "ethn.io": "ethnio", - "pages.etology.com": "etology", - "sa.etp-prod.com": "etp", - "etracker.com": "etracker", - "etracker.de": "etracker", - "sedotracker.com": "etracker", - "etrigue.com": "etrigue", - "etsystatic.com": "etsystatic", - "eulerian.net": "eulerian", - "eultech.fnac.com": "eulerian", - "ew3.io": "eulerian", - "euroads.dk": "euroads", - "euroads.fi": "euroads", - "euroads.no": "euroads", - "newpromo.europacash.com": "europecash", - "tracker.euroweb.net": "euroweb_counter", - "apptegic.com": "evergage.com", - "evergage.com": "evergage.com", - "listener.everstring.com": "everstring", - "waterfrontmedia.com": "everyday_health", - "betrad.com": "evidon", - "evidon.com": "evidon", - "evisitanalyst.com": "evisit_analyst", - "evisitcs.com": "evisit_analyst", - "websiteperform.com": "evisit_analyst", - "ads.exactdrive.com": "exact_drive", - "exactag.com": "exactag", - "exelator.com": "exelate", - "dynamicoxygen.com": "exitjunction", - "exitjunction.com": "exitjunction", - "exdynsrv.com": "exoclick", - "exoclick.com": "exoclick", - "exosrv.com": "exoclick", - "exoticads.com": "exoticads.com", - "expedia.com": "expedia", - "trvl-px.com": "expedia", - "eccmp.com": "experian", - "audienceiq.com": "experian_marketing_services", - "techlightenment.com": "experian_marketing_services", - "expo-max.com": "expo-max", - "server.exposebox.com": "expose_box", - "sf.exposebox.com": "expose_box_widgets", - "express.co.uk": "express.co.uk", - "d1lp05q4sghme9.cloudfront.net": "expressvpn", - "extreme-dm.com": "extreme_tracker", - "eyenewton.ru": "eye_newton", - "eyeota.net": "eyeota", - "eyereturn.com": "eyereturnmarketing", - "eyeviewads.com": "eyeview", - "ezakus.net": "ezakus", - "f11-ads.com": "f11-ads.com", - "facebook.com": "facebook", - "facebook.net": "facebook", - "graph.facebook.com": "facebook_audience", - "fbcdn.net": "facebook_cdn", - "fbsbx.com": "facebook_cdn", - "facetz.net": "facetz.dca", - "adsfac.eu": "facilitate_digital", - "adsfac.net": "facilitate_digital", - "adsfac.sg": "facilitate_digital", - "adsfac.us": "facilitate_digital", - "faktor.io": "faktor.io", - "thefancy.com": "fancy_widget", - "d1q7pknmpq2wkm.cloudfront.net": "fanplayr", - "fap.to": "fap.to", - "farlightgames.com": "farlight_pte_ltd", - "fastly-insights.com": "fastly_insights", - "fastly.net": "fastlylb.net", - "fastlylb.net": "fastlylb.net", - "fastly-edge.com": "fastlylb.net", - "fastly-masque.net": "fastlylb.net", - "fastpic.ru": "fastpic.ru", - "fmpub.net": "federated_media", - "fby.s3.amazonaws.com": "feedbackify", - "feedbackify.com": "feedbackify", - "feedburner.com": "feedburner.com", - "feedify.de": "feedify", - "feedjit.com": "feedjit", - "log.feedjit.com": "feedjit", - "tracking.feedperfect.com": "feedperfect", - "feedsportal.com": "feedsportal", - "feefo.com": "feefo", - "fidelity-media.com": "fidelity_media", - "fiksu.com": "fiksu", - "filamentapp.s3.amazonaws.com": "filament.io", - "fileserve.xyz": "fileserve", - "tools.financeads.net": "financeads", - "tracker.financialcontent.com": "financial_content", - "findizer.fr": "findizer.fr", - "findologic.com": "findologic.com", - "app-measurement.com": "firebase", - "fcm.googleapis.com": "firebase", - "firebase.com": "firebase", - "firebase.google.com": "firebase", - "firebase.googleapis.com": "firebase", - "firebaseapp.com": "firebase", - "firebaseappcheck.googleapis.com": "firebase", - "firebasedynamiclinks-ipv4.googleapis.com": "firebase", - "firebasedynamiclinks-ipv6.googleapis.com": "firebase", - "firebasedynamiclinks.googleapis.com": "firebase", - "firebaseinappmessaging.googleapis.com": "firebase", - "firebaseinstallations.googleapis.com": "firebase", - "firebaselogging-pa.googleapis.com": "firebase", - "firebaselogging.googleapis.com": "firebase", - "firebaseperusertopics-pa.googleapis.com": "firebase", - "firebaseremoteconfig.googleapis.com": "firebase", - "firebaseio.com": "firebaseio.com", - "firstimpression.io": "first_impression", - "fitanalytics.com": "fit_analytics", - "fivetran.com": "fivetran", - "flagads.net": "flag_ads", - "flagcounter.com": "flag_counter", - "flashnews.com.au": "flash", - "flashtalking.com": "flashtalking", - "flattr.com": "flattr_button", - "flexlinks.com": "flexoffers", - "linkoffers.net": "flexoffers", - "flickr.com": "flickr_badge", - "staticflickr.com": "flickr_badge", - "lflipboard.com": "flipboard", - "flipboard.com": "flipboard", - "flite.com": "flite", - "flixcdn.com": "flixcdn.com", - "flix360.com": "flixmedia", - "flixcar.com": "flixmedia", - "flocktory.com": "flocktory.com", - "flowplayer.org": "flowplayer", - "adingo.jp": "fluct", - "clicken.us": "fluent", - "strcst.net": "fluid", - "fluidads.co": "fluidads", - "fluidsurveys.com": "fluidsurveys", - "cdn.flurry.com": "flurry", - "data.flurry.com": "flurry", - "flurry.com": "flurry", - "flx1.com": "flxone", - "flxpxl.com": "flxone", - "api.flyertown.ca": "flyertown", - "adservinghost.com": "fmadserving", - "adservinginternational.com": "fmadserving", - "special.matchtv.ru": "fonbet", - "kavijaseuranta.fi": "fonecta", - "fontawesome.com": "fontawesome_com", - "foodieblogroll.com": "foodie_blogroll", - "footprintlive.com": "footprint", - "footprintdns.com": "footprintdns.com", - "forcetrac.com": "forcetrac", - "fqsecure.com": "forensiq", - "fqtag.com": "forensiq", - "securepaths.com": "forensiq", - "4seeresults.com": "foresee", - "foresee.com": "foresee", - "cdn-static.formisimo.com": "formisimo", - "forter.com": "forter", - "fortlachanhecksof.info": "fortlachanhecksof.info", - "platform.foursquare.com": "foursquare_widget", - "fout.jp": "fout.jp", - "fimserve.com": "fox_audience_network", - "foxsports.com.au": "fox_sports", - "fncstatic.com": "foxnews_static", - "cdn.foxpush.net": "foxpush", - "foxpush.com": "foxpush", - "foxtel.com.au": "foxtel", - "foxtelgroupcdn.net.au": "foxtel", - "foxydeal.com": "foxydeal_com", - "yabidos.com": "fraudlogix", - "besucherstatistiken.com": "free_counter", - "compteurdevisite.com": "free_counter", - "contadorvisitasgratis.com": "free_counter", - "contatoreaccessi.com": "free_counter", - "freecounterstat.com": "free_counter", - "statcounterfree.com": "free_counter", - "webcontadores.com": "free_counter", - "fastonlineusers.com": "free_online_users", - "fastwebcounter.com": "free_online_users", - "freeonlineusers.com": "free_online_users", - "atoomic.com": "free_pagerank", - "free-pagerank.com": "free_pagerank", - "freedom.com": "freedom_mortgage", - "freegeoip.net": "freegeoip_net", - "freenet.de": "freenet_de", - "freent.de": "freenet_de", - "freeview.com": "freeview", - "freeview.com.au": "freeview", - "freeviewaustralia.tv": "freeview", - "fwmrm.net": "freewheel", - "heimdall.fresh8.co": "fresh8", - "d36mpcpuzc4ztk.cloudfront.net": "freshdesk", - "freshdesk.com": "freshdesk", - "freshplum.com": "freshplum", - "friendbuy.com": "friendbuy", - "friendfeed.com": "friendfeed", - "adultfriendfinder.com": "friendfinder_network", - "amigos.com": "friendfinder_network", - "board-books.com": "friendfinder_network", - "cams.com": "friendfinder_network", - "facebookofsex.com": "friendfinder_network", - "getiton.com": "friendfinder_network", - "nostringsattached.com": "friendfinder_network", - "pop6.com": "friendfinder_network", - "streamray.com": "friendfinder_network", - "inpref.com": "frosmo_optimizer", - "inpref.s3-external-3.amazonaws.com": "frosmo_optimizer", - "inpref.s3.amazonaws.com": "frosmo_optimizer", - "adflan.com": "fruitflan", - "fruitflan.com": "fruitflan", - "fstrk.net": "fstrk.net", - "cookie.fuel451.com": "fuelx", - "fullstory.com": "fullstory", - "track.funnelytics.io": "funnelytics", - "angsrvr.com": "fyber", - "fyber.com": "fyber", - "game-advertising-online.com": "game_advertising_online", - "gameanalytics.com": "gameanalytics", - "gamedistribution.com": "gamedistribution.com", - "gamerdna.com": "gamerdna", - "gannett-cdn.com": "gannett", - "gaug.es": "gaug.es", - "gpm-digital.com": "gazprom-media_digital", - "js.gb-world.net": "gb-world", - "gdeslon.ru": "gdeslon", - "gdmdigital.com": "gdm_digital", - "gntm.geeen.co.jp": "geeen", - "lpomax.net": "geeen", - "gemius.pl": "gemius", - "generaltracking.de": "generaltracking_de", - "genesismedia.com": "genesis", - "gssprt.jp": "geniee", - "rsvpgenius.com": "genius", - "genoo.com": "genoo", - "js.geoads.com": "geoads", - "geolify.com": "geolify", - "geoplugin.net": "geoplugin", - "geotrust.com": "geotrust", - "geovisite.com": "geovisite", - "gestionpub.com": "gestionpub", - "app.getresponse.com": "get_response", - "getsitecontrol.com": "get_site_control", - "getconversion.net": "getconversion", - "widgets.getglue.com": "getglue", - "adhigh.net": "getintent", - "static.getkudos.me": "getkudos", - "yottos.com": "getmyad", - "gsfn.us": "getsatisfaction", - "gettyimages.com": "gettyimages", - "sensic.net": "gfk", - "gfycat.com": "gfycat.com", - "a.giantrealm.com": "giant_realm", - "videostat.com": "giantmedia", - "gigaonclick.com": "giga", - "analytics.gigyahosting1.com": "gigya", - "gigcount.com": "gigya", - "gigya.com": "gigya", - "service.giosg.com": "giosg", - "giphy.com": "giphy.com", - "giraff.io": "giraff.io", - "github.com": "github", - "githubassets.com": "github", - "githubusercontent.com": "github", - "ghcr.io": "github", - "github.blog": "github", - "github.dev": "github", - "octocaptcha.com": "github", - "githubapp.com": "github_apps", - "github.io": "github_pages", - "aff3.gittigidiyor.com": "gittigidiyor_affiliate_program", - "gittip.com": "gittip", - "sitest.jp": "glad_cube", - "glganltcs.space": "glganltcs.space", - "globalwebindex.net": "global_web_index", - "globalnotifier.com": "globalnotifier.com", - "globalsign.com": "globalsign", - "ad.globaltakeoff.net": "globaltakeoff", - "glomex.cloud": "glomex.com", - "glomex.com": "glomex.com", - "glotgrx.com": "glotgrx.com", - "a.gmdelivery.com": "gm_delivery", - "gmail.com": "gmail", - "ad.atown.jp": "gmo", - "gmx.net": "gmx_net", - "gmxpro.net": "gmx_net", - "go.com": "go.com", - "affiliate.godaddy.com": "godaddy_affiliate_program", - "trafficfacts.com": "godaddy_site_analytics", - "seal.godaddy.com": "godaddy_site_seal", - "tracking.godatafeed.com": "godatafeed", - "counter.goingup.com": "goingup", - "axf8.net": "gomez", - "goodadvert.ru": "goodadvert", - "google.at": "google", - "google.be": "google", - "google.ca": "google", - "google.ch": "google", - "google.co.id": "google", - "google.co.in": "google", - "google.co.jp": "google", - "google.co.ma": "google", - "google.co.th": "google", - "google.co.uk": "google", - "google.com": "google", - "google.com.ar": "google", - "google.com.au": "google", - "google.com.br": "google", - "google.com.mx": "google", - "google.com.tr": "google", - "google.com.tw": "google", - "google.com.ua": "google", - "google.cz": "google", - "google.de": "google", - "google.dk": "google", - "google.dz": "google", - "google.es": "google", - "google.fi": "google", - "google.fr": "google", - "google.gr": "google", - "google.hu": "google", - "google.ie": "google", - "google.it": "google", - "google.nl": "google", - "google.no": "google", - "google.pl": "google", - "google.pt": "google", - "google.ro": "google", - "google.rs": "google", - "google.ru": "google", - "google.se": "google", - "google.tn": "google", - "1e100.net": "google", - "agnss.goog": "google", - "channel.status.request.url": "google", - "g.cn": "google", - "g.co": "google", - "google.ad": "google", - "google.ae": "google", - "google.al": "google", - "google.am": "google", - "google.as": "google", - "google.az": "google", - "google.ba": "google", - "google.bf": "google", - "google.bg": "google", - "google.bi": "google", - "google.bj": "google", - "google.bs": "google", - "google.bt": "google", - "google.by": "google", - "google.cat": "google", - "google.cd": "google", - "google.cf": "google", - "google.cg": "google", - "google.ci": "google", - "google.cl": "google", - "google.cm": "google", - "google.cn": "google", - "google.co.ao": "google", - "google.co.bw": "google", - "google.co.ck": "google", - "google.co.cr": "google", - "google.co.il": "google", - "google.co.ke": "google", - "google.co.kr": "google", - "google.co.ls": "google", - "google.co.mz": "google", - "google.co.nz": "google", - "google.co.tz": "google", - "google.co.ug": "google", - "google.co.uz": "google", - "google.co.ve": "google", - "google.co.vi": "google", - "google.co.za": "google", - "google.co.zm": "google", - "google.co.zw": "google", - "google.com.af": "google", - "google.com.ag": "google", - "google.com.ai": "google", - "google.com.bd": "google", - "google.com.bh": "google", - "google.com.bn": "google", - "google.com.bo": "google", - "google.com.bz": "google", - "google.com.co": "google", - "google.com.cu": "google", - "google.com.cy": "google", - "google.com.ec": "google", - "google.com.eg": "google", - "google.com.et": "google", - "google.com.fj": "google", - "google.com.gh": "google", - "google.com.gi": "google", - "google.com.gt": "google", - "google.com.hk": "google", - "google.com.jm": "google", - "google.com.kh": "google", - "google.com.kw": "google", - "google.com.lb": "google", - "google.com.my": "google", - "google.com.na": "google", - "google.com.nf": "google", - "google.com.ng": "google", - "google.com.ni": "google", - "google.com.np": "google", - "google.com.om": "google", - "google.com.pa": "google", - "google.com.pe": "google", - "google.com.pg": "google", - "google.com.ph": "google", - "google.com.pk": "google", - "google.com.pr": "google", - "google.com.py": "google", - "google.com.qa": "google", - "google.com.sa": "google", - "google.com.sb": "google", - "google.com.sg": "google", - "google.com.sl": "google", - "google.com.sv": "google", - "google.com.tj": "google", - "google.com.uy": "google", - "google.com.vc": "google", - "google.com.vn": "google", - "google.cv": "google", - "google.dj": "google", - "google.dm": "google", - "google.ee": "google", - "google.fm": "google", - "google.ga": "google", - "google.ge": "google", - "google.gg": "google", - "google.gl": "google", - "google.gm": "google", - "google.gp": "google", - "google.gy": "google", - "google.hn": "google", - "google.hr": "google", - "google.ht": "google", - "google.im": "google", - "google.in": "google", - "google.iq": "google", - "google.is": "google", - "google.je": "google", - "google.jo": "google", - "google.kg": "google", - "google.ki": "google", - "google.kz": "google", - "google.la": "google", - "google.li": "google", - "google.lk": "google", - "google.lt": "google", - "google.lu": "google", - "google.lv": "google", - "google.md": "google", - "google.me": "google", - "google.mg": "google", - "google.mk": "google", - "google.ml": "google", - "google.mn": "google", - "google.ms": "google", - "google.mu": "google", - "google.mv": "google", - "google.mw": "google", - "google.ne": "google", - "google.net": "google", - "google.nr": "google", - "google.nu": "google", - "google.org": "google", - "google.pn": "google", - "google.ps": "google", - "google.rw": "google", - "google.sc": "google", - "google.sh": "google", - "google.si": "google", - "google.sk": "google", - "google.sm": "google", - "google.sn": "google", - "google.so": "google", - "google.sr": "google", - "google.st": "google", - "google.td": "google", - "google.tg": "google", - "google.tk": "google", - "google.tl": "google", - "google.tm": "google", - "google.to": "google", - "google.tt": "google", - "google.us": "google", - "google.vg": "google", - "google.vu": "google", - "google.ws": "google", - "googleapis.cn": "google", - "googlecode.com": "google", - "googledownloads.cn": "google", - "googleoptimize.com": "google", - "googleweblight.in": "google", - "googlezip.net": "google", - "gstatic.cn": "google", - "news.google.com": "google", - "oo.gl": "google", - "withgoogle.com": "google", - "googleadservices.com": "google_adservices", - "google-analytics.com": "google_analytics", - "app-analytics-services.com": "google_analytics", - "ssl-google-analytics.l.google.com": "google_analytics", - "www-googletagmanager.l.google.com": "google_analytics", - "appspot.com": "google_appspot", - "googlehosted.com": "google_appspot", - "accounts.google.com": "google_auth", - "myaccount.google.com": "google_auth", - "oauth2.googleapis.com": "google_auth", - "ogs.google.com": "google_auth", - "securetoken.googleapis.com": "google_auth", - "beacons-google.com": "google_beacons", - "alt1-mtalk.google.com": "google_chat", - "alt2-mtalk.google.com": "google_chat", - "alt3-mtalk.google.com": "google_chat", - "alt4-mtalk.google.com": "google_chat", - "alt5-mtalk.google.com": "google_chat", - "alt6-mtalk.google.com": "google_chat", - "alt7-mtalk.google.com": "google_chat", - "alt8-mtalk.google.com": "google_chat", - "chat.google.com": "google_chat", - "mobile-gtalk.l.google.com": "google_chat", - "mobile-gtalk4.l.google.com": "google_chat", - "mtalk.google.com": "google_chat", - "mtalk4.google.com": "google_chat", - "talk.google.com": "google_chat", - "talk.l.google.com": "google_chat", - "talkx.l.google.com": "google_chat", - "cloud.google.com": "google_cloud_platform", - "gcp.gvt2.com": "google_cloud_platform", - "storage.googleapis.com": "google_cloud_storage", - "adsensecustomsearchads.com": "google_custom_search", - "dns.google": "google_dns", - "dns.google.com": "google_dns", - "google-public-dns-a.google.com": "google_dns", - "google-public-dns-b.google.com": "google_dns", - "domains.google": "google_domains", - "googledomains.com": "google_domains", - "nic.google": "google_domains", - "registry.google": "google_domains", - "edge.google.com": "google_edge", - "mail-ads.google.com": "google_email", - "fonts.googleapis.com": "google_fonts", - "cloudfunctions.net": "google_hosted", - "ghs.googlehosted.com": "google_hosted", - "ghs4.googlehosted.com": "google_hosted", - "ghs46.googlehosted.com": "google_hosted", - "ghs6.googlehosted.com": "google_hosted", - "googlehosted.l.googleusercontent.com": "google_hosted", - "run.app": "google_hosted", - "supl.google.com": "google_location", - "earth.app.goo.gl": "google_maps", - "geo0.ggpht.com": "google_maps", - "geo1.ggpht.com": "google_maps", - "geo2.ggpht.com": "google_maps", - "geo3.ggpht.com": "google_maps", - "kh.google.com": "google_maps", - "maps.app.goo.gl": "google_maps", - "maps.google.ca": "google_maps", - "maps.google.ch": "google_maps", - "maps.google.co.jp": "google_maps", - "maps.google.co.uk": "google_maps", - "maps.google.com": "google_maps", - "maps.google.com.mx": "google_maps", - "maps.google.es": "google_maps", - "maps.google.se": "google_maps", - "maps.gstatic.com": "google_maps", - "doubleclick.net": "google_marketing", - "invitemedia.com": "google_marketing", - "adsense.google.com": "google_marketing", - "adservice.google.ca": "google_marketing", - "adservice.google.co.in": "google_marketing", - "adservice.google.co.kr": "google_marketing", - "adservice.google.co.uk": "google_marketing", - "adservice.google.co.za": "google_marketing", - "adservice.google.com": "google_marketing", - "adservice.google.com.ar": "google_marketing", - "adservice.google.com.au": "google_marketing", - "adservice.google.com.br": "google_marketing", - "adservice.google.com.co": "google_marketing", - "adservice.google.com.gt": "google_marketing", - "adservice.google.com.mx": "google_marketing", - "adservice.google.com.pe": "google_marketing", - "adservice.google.com.ph": "google_marketing", - "adservice.google.com.pk": "google_marketing", - "adservice.google.com.tr": "google_marketing", - "adservice.google.com.tw": "google_marketing", - "adservice.google.com.vn": "google_marketing", - "adservice.google.de": "google_marketing", - "adservice.google.dk": "google_marketing", - "adservice.google.es": "google_marketing", - "adservice.google.fr": "google_marketing", - "adservice.google.nl": "google_marketing", - "adservice.google.no": "google_marketing", - "adservice.google.pl": "google_marketing", - "adservice.google.ru": "google_marketing", - "adservice.google.vg": "google_marketing", - "adtrafficquality.google": "google_marketing", - "dai.google.com": "google_marketing", - "doubleclick.com": "google_marketing", - "doubleclickbygoogle.com": "google_marketing", - "googlesyndication-cn.com": "google_marketing", - "duo.google.com": "google_meet", - "hangouts.clients6.google.com": "google_meet", - "hangouts.google.com": "google_meet", - "hangouts.googleapis.com": "google_meet", - "meet.google.com": "google_meet", - "meetings.googleapis.com": "google_meet", - "stun.l.google.com": "google_meet", - "stun1.l.google.com": "google_meet", - "ggpht.com": "google_photos", - "play-fe.googleapis.com": "google_play", - "play-lh.googleusercontent.com": "google_play", - "play.google.com": "google_play", - "play.googleapis.com": "google_play", - "1e100cdn.net": "google_servers", - "gvt1.com": "google_servers", - "gvt2.com": "google_servers", - "gvt3.com": "google_servers", - "googlesyndication.com": "google_syndication", - "googletagmanager.com": "google_tag_manager", - "googletagservices.com": "google_tag_manager", - "translate.google.com": "google_translate", - "googletraveladservices.com": "google_travel_adds", - "pki.goog": "google_trust_services", - "googlecommerce.com": "google_trusted_stores", - "googleusercontent.com": "google_users", - "telephony.goog": "google_voice", - "voice.google.com": "google_voice", - "gmodules.com": "google_widgets", - "calendar.google.com": "google_workspace", - "contacts.google.com": "google_workspace", - "currents.google.com": "google_workspace", - "docs.google.com": "google_workspace", - "drive.google.com": "google_workspace", - "forms.google.com": "google_workspace", - "gsuite.google.com": "google_workspace", - "jamboard.google.com": "google_workspace", - "keep.google.com": "google_workspace", - "plus.google.com": "google_workspace", - "sheets.google.com": "google_workspace", - "slides.google.com": "google_workspace", - "spreadsheets.google.com": "google_workspace", - "googleapis.com": "googleapis.com", - "gooal.herokuapp.com": "goooal", - "gooo.al": "goooal", - "cdn.triggertag.gorillanation.com": "gorilla_nation", - "evolvemediametrics.com": "gorilla_nation", - "d1l6p2sc9645hc.cloudfront.net": "gosquared", - "gosquared.com": "gosquared", - "gostats.com": "gostats", - "govmetric.com": "govmetric", - "servmetric.com": "govmetric", - "b.grabo.bg": "grabo_affiliate", - "trw12.com": "grandslammedia", - "tuberewards.com": "grandslammedia", - "d2bw638ufki166.cloudfront.net": "granify", - "granify.com": "granify", - "grapeshot.co.uk": "grapeshot", - "gscontxt.net": "grapeshot", - "graphcomment.com": "graph_comment", - "gravatar.com": "gravatar", - "cdn.gravitec.net": "gravitec", - "gravity.com": "gravity_insights", - "grvcdn.com": "gravity_insights", - "greatviews.de": "greatviews.de", - "gandrad.org": "green_and_red", - "green-red.com": "green_and_red", - "co2stats.com": "green_certified_site", - "greenstory.ca": "green_story", - "greentube.com": "greentube.com", - "gt-cdn.net": "greentube.com", - "greystripe.com": "greystripe", - "groovehq.com": "groove", - "groovinads.com": "groovinads", - "bidagent.xad.com": "groundtruth", - "gmads.net": "groupm_server", - "grmtech.net": "groupm_server", - "media.gsimedia.net": "gsi_media", - "gstatic.com": "gstatic", - "fx.gtop.ro": "gtop", - "fx.gtopstats.com": "gtop", - "gubagootracking.com": "gugaboo", - "guj.de": "guj.de", - "emsservice.de": "gujems", - "gumgum.com": "gumgum", - "gumroad.com": "gumroad", - "gunggo.com": "gunggo", - "h12-media.com": "h12_ads", - "h12-media.net": "h12_ads", - "hnbutton.appspot.com": "hacker_news_button", - "haendlerbund.de": "haendlerbund.de", - "halogennetwork.com": "halogen_network", - "d1l7z5ofrj6ab8.cloudfront.net": "happy_fox_chat", - "ad.harrenmedianetwork.com": "harren_media", - "ads.networkhm.com": "harren_media", - "app.hatchbuck.com": "hatchbuck", - "hhcdn.ru": "head_hunter", - "healte.de": "healte.de", - "d36lvucg9kzous.cloudfront.net": "heap", - "heapanalytics.com": "heap", - "heatmap.it": "heatmap", - "weltsport.net": "heimspiel", - "hellobar.com": "hello_bar", - "hellosociety.com": "hellosociety", - "here.com": "here", - "herokuapp.com": "heroku", - "heureka.cz": "heureka-widget", - "heybubble.com": "heybubble", - "heyos.com": "heyos", - "adlink.net": "hi-media_performance", - "comclick.com": "hi-media_performance", - "hi-mediaserver.com": "hi-media_performance", - "himediads.com": "hi-media_performance", - "himediadx.com": "hi-media_performance", - "hiconversion.com": "hiconversion", - "highwebmedia.com": "highwebmedia.com", - "hwcdn.net": "highwinds", - "hiiir.com": "hiiir", - "hiro.tv": "hiro", - "histats.com": "histats", - "hit-parade.com": "hit-parade", - "hit.ua": "hit.ua", - "hitslink.com": "hitslink", - "hitsprocessor.com": "hitslink", - "hitsniffer.com": "hitsniffer", - "hittail.com": "hittail", - "hivedx.com": "hivedx.com", - "ads.thehiveworks.com": "hiveworks", - "hockeyapp.net": "hockeyapp", - "hoholikik.club": "hoholikik.club", - "h-cdn.com": "hola_player", - "homeaway.com": "homeaway", - "honeybadger.io": "honeybadger", - "hlserve.com": "hooklogic", - "apiae.hopscore.com": "hop-cube", - "hotdogsandads.com": "hotdogsandads.com", - "hotjar.com": "hotjar", - "hotkeys.com": "hotkeys", - "hotlog.ru": "hotlog.ru", - "hotwords.com": "hotwords", - "hotwords.es": "hotwords", - "howtank.com": "howtank.com", - "hqentertainmentnetwork.com": "hqentertainmentnetwork.com", - "justservingfiles.net": "hqentertainmentnetwork.com", - "hsoub.com": "hsoub", - "hstrck.com": "hstrck.com", - "httpool.com": "httpool", - "toboads.com": "httpool", - "hubrus.com": "hubrus", - "hs-analytics.net": "hubspot", - "hs-scripts.com": "hubspot", - "hsleadflows.net": "hubspot", - "hubapi.com": "hubspot", - "hubspot.com": "hubspot", - "forms.hubspot.com": "hubspot_forms", - "hubvisor.io": "hubvisor.io", - "files.hucksterbot.com": "hucksterbot", - "hupso.com": "hupso", - "hurra.com": "hurra_tracker", - "hybrid.ai": "hybrid.ai", - "targetix.net": "hybrid.ai", - "hypeads.org": "hype_exchange", - "hypercomments.com": "hypercomments", - "hyves.nl": "hyves_widgets", - "hyvyd.com": "hyvyd", - "ib-ibi.com": "i-behavior", - "i-mobile.co.jp": "i-mobile", - "r.i.ua": "i.ua", - "i10c.net": "i10c.net", - "i2i.jp": "i2i.jp", - "i2idata.com": "i2i.jp", - "consensu.org": "iab_consent", - "iadvize.com": "iadvize", - "cmcore.com": "ibm_customer_experience", - "coremetrics.com": "ibm_customer_experience", - "coremetrics.eu": "ibm_customer_experience", - "tracker.icerocket.com": "icerocket_tracker", - "nsimg.net": "icf_technology", - "optimix.asia": "iclick", - "ic-live.com": "icrossing", - "icstats.nl": "icstats", - "icuazeczpeoohx.com": "icuazeczpeoohx.com", - "id-news.net": "id-news.net", - "idcdn.de": "id-news.net", - "eu-1-id5-sync.com": "id5-sync", - "id5-sync.com": "id5-sync", - "id5.io": "id5-sync", - "cdn.id.services": "id_services", - "e-generator.com": "ideal_media", - "idealo.com": "idealo_com", - "identrust.com": "identrust", - "ideoclick.com": "ideoclick", - "s.idio.co": "idio", - "ie8eamus.com": "ie8eamus.com", - "600z.com": "ientry", - "api.iflychat.com": "iflychat", - "ignitionone.com": "ignitionone", - "knotice.net": "ignitionone", - "igodigital.com": "igodigital", - "ad.wsod.com": "ihs_markit", - "collserve.com": "ihs_markit_online_shopper_insigh", - "ihvmcqojoj.com": "ihvmcqojoj.com", - "iias.eu": "iias.eu", - "ijento.com": "ijento", - "adv.imadrep.co.kr": "imad", - "worthathousandwords.com": "image_advantage", - "picadmedia.com": "image_space_media", - "imgix.net": "imgix.net", - "imgur.com": "imgur", - "vidigital.ru": "imho_vi", - "immanalytics.com": "immanalytics", - "immobilienscout24.de": "immobilienscout24_de", - "static-immobilienscout24.de": "immobilienscout24_de", - "imonomy.com": "imonomy", - "7eer.net": "impact_radius", - "d3cxv97fi8q177.cloudfront.net": "impact_radius", - "evyy.net": "impact_radius", - "impactradius-event.com": "impact_radius", - "impactradius-tag.com": "impact_radius", - "impactradius.com": "impact_radius", - "ojrq.net": "impact_radius", - "r7ls.net": "impact_radius", - "impresionesweb.com": "impresiones_web", - "360yield.com": "improve_digital", - "iljmp.com": "improvely", - "inbenta.com": "inbenta", - "inboxsdk.com": "inboxsdk.com", - "indeed.com": "indeed", - "casalemedia.com": "index_exchange", - "indexww.com": "index_exchange", - "indieclick.com": "indieclick", - "industrybrains.com": "industry_brains", - "impdesk.com": "infectious_media", - "impressiondesk.com": "infectious_media", - "zachysprod.infiniteanalytics.com": "infinite_analytics", - "infinity-tracking.net": "infinity_tracking", - "engine.influads.com": "influads", - "infolinks.com": "infolinks", - "intextscript.com": "infolinks", - "ioam.de": "infonline", - "iocnt.net": "infonline", - "ivwbox.de": "infonline", - "informer.com": "informer_technologies", - "infusionsoft.com": "infusionsoft", - "keap.com": "infusionsoft", - "innity.com": "innity", - "innity.net": "innity", - "innogames.com": "innogames.de", - "innogames.de": "innogames.de", - "innogamescdn.com": "innogames.de", - "innovid.com": "innovid", - "inside-graph.com": "inside", - "useinsider.com": "insider", - "insightexpressai.com": "insightexpress", - "inskinad.com": "inskin_media", - "inskinmedia.com": "inskin_media", - "inspectlet.com": "inspectlet", - "inspsearchapi.com": "inspsearchapi.com", - "cdninstagram.com": "instagram_com", - "instagram.com": "instagram_com", - "tcgtrkr.com": "instant_check_mate", - "sdad.guru": "instart_logic", - "insticator.com": "insticator", - "load.instinctiveads.com": "instinctive", - "intango.com": "intango", - "adsafeprotected.com": "integral_ad_science", - "iasds01.com": "integral_ad_science", - "integral-marketing.com": "integral_marketing", - "intelliad.com": "intelliad", - "intelliad.de": "intelliad", - "saas.intelligencefocus.com": "intelligencefocus", - "ist-track.com": "intelligent_reach", - "intensedebate.com": "intense_debate", - "intentiq.com": "intent_iq", - "intentmedia.net": "intent_media", - "intercom.com": "intercom", - "intercom.io": "intercom", - "intercomassets.com": "intercom", - "intercomcdn.com": "intercom", - "interedy.info": "interedy.info", - "ads.intergi.com": "intergi", - "intermarkets.net": "intermarkets.net", - "intermundomedia.com": "intermundo_media", - "bbelements.com": "internet_billboard", - "goadservices.com": "internet_billboard", - "ibillboard.com": "internet_billboard", - "mediainter.net": "internet_billboard", - "voice2page.com": "internetaudioads", - "ibpxl.com": "internetbrands", - "ibsrv.net": "internetbrands", - "interpolls.com": "interpolls", - "ps7894.com": "interyield", - "intilery-analytics.com": "intilery", - "im-apps.net": "intimate_merger", - "investingchannel.com": "investingchannel", - "inviziads.com": "inviziads", - "js12.invoca.net": "invoca", - "ringrevenue.com": "invoca", - "invodo.com": "invodo", - "ionicframework.com": "ionicframework.com", - "dsp.io": "iotec", - "iesnare.com": "iovation", - "iovation.com": "iovation", - "ip-label.net": "ip-label", - "eltoro.com": "ip_targeting", - "iptargeting.com": "ip_targeting", - "ip-tracker.org": "ip_tracker", - "iptrack.io": "ip_tracker", - "iperceptions.com": "iperceptions", - "dust.ipfingerprint.com": "ipfingerprint", - "mbww.com": "ipg_mediabrands", - "ipify.org": "ipify", - "ipinfo.io": "ipinfo", - "iplogger.ru": "iplogger", - "centraliprom.com": "iprom", - "iprom.net": "iprom", - "ipromote.com": "ipromote", - "clickmanage.com": "iprospect", - "iq.com": "iqiyi", - "iqiyi.com": "iqiyi", - "qy.net": "iqiyi", - "addelive.com": "ironsource", - "afdads.com": "ironsource", - "delivery47.com": "ironsource", - "ironsrc.com": "ironsource", - "ironsrc.net": "ironsource", - "is.com": "ironsource", - "soom.la": "ironsource", - "supersonicads.com": "ironsource", - "tapjoy.com": "ironsource", - "adsbyisocket.com": "isocket", - "isocket.com": "isocket", - "isolarcloud.com": "isolarcloud", - "isolarcloud.com.a.lahuashanbx.com": "isolarcloud", - "isolarcloud.com.w.cdngslb.com": "isolarcloud", - "isolarcloud.com.w.kunlunsl.com": "isolarcloud", - "ispot.tv": "ispot.tv", - "itineraire.info": "itineraire.info", - "autolinkmaker.itunes.apple.com": "itunes_link_maker", - "ity.im": "ity.im", - "iubenda.com": "iubenda.com", - "ivcbrasil.org.br": "ivcbrasil.org.br", - "ivitrack.com": "ividence", - "iwiw.hu": "iwiw_widgets", - "ixiaa.com": "ixi_digital", - "ixquick.com": "ixquick.com", - "cdn.izooto.com": "izooto", - "jlist.com": "j-list_affiliate_program", - "getjaco.com": "jaco", - "janrainbackplane.com": "janrain", - "rpxnow.com": "janrain", - "jeeng.com": "jeeng", - "api.jeeng.com": "jeeng_widgets", - "phone-analytics.com": "jet_interactive", - "grazie.ai": "jetbrains", - "intellij.net": "jetbrains", - "jb.gg": "jetbrains", - "jetbrains.ai": "jetbrains", - "jetbrains.com": "jetbrains", - "jetbrains.com.cn": "jetbrains", - "jetbrains.dev": "jetbrains", - "jetbrains.net": "jetbrains", - "jetbrains.org": "jetbrains", - "jetbrains.ru": "jetbrains", - "jetbrains.space": "jetbrains", - "kotl.in": "jetbrains", - "kotlinconf.com": "jetbrains", - "kotlinlang.org": "jetbrains", - "myjetbrains.com": "jetbrains", - "talkingkotlin.com": "jetbrains", - "jetlore.com": "jetlore", - "pixel.wp.com": "jetpack", - "stats.wp.com": "jetpack", - "jetpackdigital.com": "jetpack_digital", - "jimcdn.com": "jimdo.com", - "jimdo.com": "jimdo.com", - "jimstatic.com": "jimdo.com", - "ads.jinkads.com": "jink", - "jirafe.com": "jirafe", - "jivosite.com": "jivochat", - "jivox.com": "jivox", - "jobs2careers.com": "jobs_2_careers", - "joinhoney.com": "joinhoney", - "create.leadid.com": "jornaya", - "d1tprjo2w7krrh.cloudfront.net": "jornaya", - "cdnjquery.com": "jquery", - "jquery.com": "jquery", - "cjmooter.xcache.kinxcdn.com": "js_communications", - "jsdelivr.net": "jsdelivr", - "jsecoin.com": "jse_coin", - "jsuol.com.br": "jsuol.com.br", - "contentabc.com": "juggcash", - "mofos.com": "juggcash", - "juiceadv.com": "juiceadv", - "juicyads.com": "juicyads", - "cdn.jumplead.com": "jumplead", - "jumpstarttaggingsolutions.com": "jumpstart_tagging_solutions", - "jumptap.com": "jumptap", - "jump-time.net": "jumptime", - "jumptime.com": "jumptime", - "components.justanswer.com": "just_answer", - "justpremium.com": "just_premium", - "justpremium.nl": "just_premium", - "justrelevant.com": "just_relevant", - "jvc.gg": "jvc.gg", - "d21rhj7n383afu.cloudfront.net": "jw_player", - "jwpcdn.com": "jw_player", - "jwplatform.com": "jw_player", - "jwplayer.com": "jw_player", - "jwpltx.com": "jw_player", - "jwpsrv.com": "jw_player", - "ltassrv.com": "jw_player_ad_solutions", - "kaeufersiegel.de": "kaeufersiegel.de", - "kairion.de": "kairion.de", - "kctag.net": "kairion.de", - "kaloo.ga": "kaloo.ga", - "kaltura.com": "kaltura", - "kameleoon.com": "kameleoon", - "kameleoon.eu": "kameleoon", - "kampyle.com": "kampyle", - "kanoodle.com": "kanoodle", - "kmi-us.com": "kantar_media", - "tnsinternet.be": "kantar_media", - "karambasecurity.com": "karambasecurity", - "kargo.com": "kargo", - "kaspersky-labs.com": "kaspersky-labs.com", - "kataweb.it": "kataweb.it", - "cen.katchup.fr": "katchup", - "kau.li": "kauli", - "kavanga.ru": "kavanga", - "kayosports.com.au": "kayo_sports", - "dc8na2hxrj29i.cloudfront.net": "keen_io", - "keen.io": "keen_io", - "widget.kelkoo.com": "kelkoo", - "xg4ken.com": "kenshoo", - "keymetric.net": "keymetric", - "lb.keytiles.com": "keytiles", - "keywee.co": "keywee", - "keywordmax.com": "keywordmax", - "massrelevance.com": "khoros", - "tweetriver.com": "khoros", - "khzbeucrltin.com": "khzbeucrltin.com", - "ping.kickfactory.com": "kickfactory", - "sa-as.com": "kickfire", - "sniff.visistat.com": "kickfire", - "stats.visistat.com": "kickfire", - "apikik.com": "kik", - "kik-gateway-use1.meetme.com": "kik", - "kik-live.com": "kik", - "kik-stream.meetme.com": "kik", - "kik.com": "kik", - "king.com": "king.com", - "midasplayer.com": "king_com", - "kinja-img.com": "kinja.com", - "kinja-static.com": "kinja.com", - "kinja.com": "kinja.com", - "kiosked.com": "kiosked", - "doug1izaerwt3.cloudfront.net": "kissmetrics.com", - "kissmetrics.com": "kissmetrics.com", - "ad.103092804.com": "kitara_media", - "kmdisplay.com": "kitara_media", - "kixer.com": "kixer", - "klarna.com": "klarna.com", - "a.klaviyo.com": "klaviyo", - "klaviyo.com": "klaviyo", - "klikki.com": "klikki", - "scr.kliksaya.com": "kliksaya", - "mediapeo2.com": "kmeleo", - "knoopstat.nl": "knoopstat", - "knotch.it": "knotch", - "komoona.com": "komoona", - "kona.kontera.com": "kontera_contentlink", - "ktxtr.com": "kontextr", - "kontextua.com": "kontextua", - "cleanrm.net": "korrelate", - "korrelate.net": "korrelate", - "trackit.ktxlytics.io": "kortx", - "kaptcha.com": "kount", - "krxd.net": "krux_digital", - "d31bfnnwekbny6.cloudfront.net": "kupona", - "kpcustomer.de": "kupona", - "q-sis.de": "kupona", - "kxcdn.com": "kxcdn.com", - "cdn.kyto.com": "kyto", - "cd-ladsp-com.s3.amazonaws.com": "ladsp.com", - "ladmp.com": "ladsp.com", - "ladsp.com": "ladsp.com", - "lanistaads.com": "lanista_concepts", - "latimes.com": "latimes", - "events.launchdarkly.com": "launch_darkly", - "launchdarkly.com": "launch_darkly", - "launchbit.com": "launchbit", - "launchpad.net": "launchpad", - "launchpadcontent.net": "launchpad", - "layer-ad.org": "layer-ad.org", - "ph-live.slatic.net": "lazada", - "slatic.net": "lazada", - "lcxdigital.com": "lcx_digital", - "lemde.fr": "le_monde.fr", - "t1.llanalytics.com": "lead_liaison", - "leadback.ru": "leadback", - "leaddyno.com": "leaddyno", - "123-tracker.com": "leadforensics", - "55-trk-srv.com": "leadforensics", - "business-path-55.com": "leadforensics", - "click-to-trace.com": "leadforensics", - "cloud-exploration.com": "leadforensics", - "cloud-journey.com": "leadforensics", - "cloud-trail.com": "leadforensics", - "cloudpath82.com": "leadforensics", - "cloudtracer101.com": "leadforensics", - "discover-path.com": "leadforensics", - "discovertrail.net": "leadforensics", - "domainanalytics.net": "leadforensics", - "dthvdr9.com": "leadforensics", - "explore-123.com": "leadforensics", - "finger-info.net": "leadforensics", - "forensics1000.com": "leadforensics", - "ip-route.net": "leadforensics", - "ipadd-path.com": "leadforensics", - "iproute66.com": "leadforensics", - "lead-123.com": "leadforensics", - "lead-analytics-1000.com": "leadforensics", - "lead-watcher.com": "leadforensics", - "leadforensics.com": "leadforensics", - "ledradn.com": "leadforensics", - "letterbox-path.com": "leadforensics", - "letterboxtrail.com": "leadforensics", - "network-handle.com": "leadforensics", - "path-follower.com": "leadforensics", - "path-trail.com": "leadforensics", - "scan-trail.com": "leadforensics", - "site-research.net": "leadforensics", - "srv1010elan.com": "leadforensics", - "the-lead-tracker.com": "leadforensics", - "trace-2000.com": "leadforensics", - "track-web.net": "leadforensics", - "trackdiscovery.net": "leadforensics", - "trackercloud.net": "leadforensics", - "trackinvestigate.net": "leadforensics", - "trail-viewer.com": "leadforensics", - "trail-web.com": "leadforensics", - "trailbox.net": "leadforensics", - "trailinvestigator.com": "leadforensics", - "web-path.com": "leadforensics", - "webforensics.co.uk": "leadforensics", - "websiteexploration.com": "leadforensics", - "www-path.com": "leadforensics", - "gate.leadgenic.com": "leadgenic", - "leadhit.ru": "leadhit", - "js.leadin.com": "leadin", - "io.leadingreports.de": "leading_reports", - "js.leadinspector.de": "leadinspector", - "formalyzer.com": "leadlander", - "trackalyzer.com": "leadlander", - "analytics.leadlifesolutions.net": "leadlife", - "my.leadpages.net": "leadpages", - "leadplace.fr": "leadplace", - "scorecard.wspisp.net": "leads_by_web.com", - "www.leadscoreapp.dk": "leadscoreapp", - "tracker.leadsius.com": "leadsius", - "leady.com": "leady", - "leady.cz": "leady", - "leiki.com": "leiki", - "lengow.com": "lengow", - "lenmit.com": "lenmit.com", - "lentainform.com": "lentainform.com", - "lenua.de": "lenua.de", - "letreach.com": "let_reach", - "lencr.org": "lets_encrypt", - "letsencrypt.org": "lets_encrypt", - "js.letvcdn.com": "letv", - "footprint.net": "level3_communications", - "alphonso.tv": "lgads", - "lgads.tv": "lgads", - "lg.com": "lgtv", - "lge.com": "lgtv", - "lgsmartad.com": "lgtv", - "lgtvcommon.com": "lgtv", - "lgtvsdp.com": "lgtv", - "licensebuttons.net": "licensebuttons.net", - "lfstmedia.com": "lifestreet_media", - "content-recommendation.net": "ligatus", - "ligadx.com": "ligatus", - "ligatus.com": "ligatus", - "ligatus.de": "ligatus", - "veeseo.com": "ligatus", - "limk.com": "limk", - "line-apps.com": "line_apps", - "line-scdn.net": "line_apps", - "line.me": "line_apps", - "tongji.linezing.com": "linezing", - "linkbucks.com": "linkbucks", - "linkconnector.com": "linkconnector", - "bizo.com": "linkedin", - "licdn.com": "linkedin", - "linkedin.com": "linkedin", - "lynda.com": "linkedin", - "ads.linkedin.com": "linkedin_ads", - "snap.licdn.com": "linkedin_analytics", - "bizographics.com": "linkedin_marketing_solutions", - "platform.linkedin.com": "linkedin_widgets", - "linker.hr": "linker", - "linkprice.com": "linkprice", - "lp4.io": "linkpulse", - "linksalpha.com": "linksalpha", - "erovinmo.com": "linksmart", - "linksmart.com": "linksmart", - "linkstorm.net": "linkstorm", - "linksynergy.com": "linksynergy.com", - "linkup.com": "linkup", - "linkwi.se": "linkwise", - "linkwithin.com": "linkwithin", - "lqm.io": "liquidm_technology_gmbh", - "lqmcdn.com": "liquidm_technology_gmbh", - "liqwid.net": "liqwid", - "list.ru": "list.ru", - "listrakbi.com": "listrak", - "live2support.com": "live2support", - "live800.com": "live800", - "ladesk.com": "live_agent", - "livehelpnow.net": "live_help_now", - "liadm.com": "live_intent", - "l-stat.livejournal.net": "live_journal", - "liveadexchanger.com": "liveadexchanger.com", - "livechat.s3.amazonaws.com": "livechat", - "livechatinc.com": "livechat", - "livechatinc.net": "livechat", - "livechatnow.com": "livechatnow", - "livechatnow.net": "livechatnow", - "liveclicker.net": "liveclicker", - "livecounter.dk": "livecounter", - "fyre.co": "livefyre", - "livefyre.com": "livefyre", - "yadro.ru": "liveinternet", - "liveperson.net": "liveperson", - "lpsnmedia.net": "liveperson", - "pippio.com": "liveramp", - "rapleaf.com": "liveramp", - "rlcdn.com": "liveramp", - "livere.co.kr": "livere", - "livere.co.kr.cizion.ixcloud.net": "livere", - "livesportmedia.eu": "livesportmedia.eu", - "analytics.livestream.com": "livestream", - "livetex.ru": "livetex.ru", - "lkqd.net": "lkqd", - "loadbee.com": "loadbee.com", - "loadercdn.com": "loadercdn.com", - "loadsource.org": "loadsource.org", - "web.localytics.com": "localytics", - "localytics.com": "localytics", - "cdn2.lockerdome.com": "lockerdome", - "addtoany.com": "lockerz_share", - "pixel.loganmedia.mobi": "logan_media", - "ping.answerbook.com": "logdna", - "loggly.com": "loggly", - "logly.co.jp": "logly", - "logsss.com": "logsss.com", - "lomadee.com": "lomadee", - "assets.loomia.com": "loomia", - "loop11.com": "loop11", - "lfov.net": "loopfuse_oneview", - "crwdcntrl.net": "lotame", - "vidcpm.com": "lottex_inc", - "tracker.samplicio.us": "lucid", - "lucidmedia.com": "lucid_media", - "lead.adsender.us": "lucini", - "livestatserver.com": "lucky_orange", - "luckyorange.com": "lucky_orange", - "luckyorange.net": "lucky_orange", - "luckypushh.com": "luckypushh.com", - "adelixir.com": "lxr100", - "lypn.com": "lynchpin_analytics", - "lypn.net": "lynchpin_analytics", - "lytics.io": "lytics", - "lyuoaxruaqdo.com": "lyuoaxruaqdo.com", - "m-pathy.com": "m-pathy", - "mpnrs.com": "m._p._newmedia", - "m4n.nl": "m4n", - "madadsmedia.com": "mad_ads_media", - "madeleine.de": "madeleine.de", - "dinclinx.com": "madison_logic", - "madisonlogic.com": "madison_logic", - "madnet.ru": "madnet", - "eu2.madsone.com": "mads", - "magna.ru": "magna_advertise", - "d3ezl4ajpp2zy8.cloudfront.net": "magnetic", - "domdex.com": "magnetic", - "domdex.net": "magnetic", - "magnetisemedia.com": "magnetise_group", - "magnify360.com": "magnify360", - "magnuum.com": "magnuum.com", - "ad.mail.ru": "mail.ru_banner", - "imgsmail.ru": "mail.ru_group", - "mail.ru": "mail.ru_group", - "mradx.net": "mail.ru_group", - "odnoklassniki.ru": "mail.ru_group", - "ok.ru": "mail.ru_group", - "chimpstatic.com": "mailchimp_tracking", - "list-manage.com": "mailchimp_tracking", - "mailchimp.com": "mailchimp_tracking", - "mailerlite.com": "mailerlite.com", - "mailtrack.io": "mailtrack.io", - "mainadv.com": "mainadv", - "makazi.com": "makazi", - "makeappdev.xyz": "makeappdev.xyz", - "makesource.cool": "makesource.cool", - "widgets.mango-office.ru": "mango", - "manycontacts.com": "manycontacts", - "mapandroute.de": "mapandroute.de", - "mapbox.com": "mapbox", - "www.maploco.com": "maploco", - "px.marchex.io": "marchex", - "voicestar.com": "marchex", - "mmadsgadget.com": "marimedia", - "qadabra.com": "marimedia", - "qadserve.com": "marimedia", - "qadservice.com": "marimedia", - "marinsm.com": "marin_search_marketer", - "markandmini.com": "mark_+_mini", - "ak-cdn.placelocal.com": "market_thunder", - "dt00.net": "marketgid", - "dt07.net": "marketgid", - "marketgid.com": "marketgid", - "mgid.com": "marketgid", - "marketingautomation.si": "marketing_automation", - "marketo.com": "marketo", - "marketo.net": "marketo", - "mktoresp.com": "marketo", - "caanalytics.com": "markmonitor", - "mmstat.com": "markmonitor", - "markmonitor.com": "markmonitor", - "netscope.data.marktest.pt": "marktest", - "marshadow.io": "marshadow.io", - "martiniadnetwork.com": "martini_media", - "edigitalsurvey.com": "maru-edu", - "marvellousmachine.net": "marvellous_machine", - "mbn.com.ua": "master_banner_network", - "mastertarget.ru": "mastertarget", - "rns.matelso.de": "matelso", - "matheranalytics.com": "mather_analytics", - "mathjax.org": "mathjax.org", - "nzaza.com": "matiro", - "matomo.cloud": "matomo", - "matomo.org": "matomo", - "piwik.org": "matomo", - "adsmarket.com": "matomy_market", - "m2pub.com": "matomy_market", - "matrix.org": "matrix", - "mb01.com": "maxbounty", - "maxcdn.com": "maxcdn", - "netdna-cdn.com": "maxcdn", - "netdna-ssl.com": "maxcdn", - "maxlab.ru": "maxlab", - "maxmind.com": "maxmind", - "maxonclick.com": "maxonclick_com", - "mxptint.net": "maxpoint_interactive", - "maxymiser.hs.llnwd.net": "maxymiser", - "maxymiser.net": "maxymiser", - "m6r.eu": "mbr_targeting", - "pixel.adbuyer.com": "mbuy", - "mcabi.mcloudglobal.com": "mcabi", - "scanalert.com": "mcafee_secure", - "ywxi.net": "mcafee_secure", - "mconet.biz": "mconet", - "mdotlabs.com": "mdotlabs", - "media-clic.com": "media-clic", - "media-imdb.com": "media-imdb.com", - "media.net": "media.net", - "mediaimpact.de": "media_impact", - "mookie1.com": "media_innovation_group", - "idntfy.ru": "media_today", - "s1.mediaad.org": "mediaad", - "mlnadvertising.com": "mediaglu", - "fhserve.com": "mediahub", - "media-lab.ai": "medialab", - "medialab.la": "medialab", - "adnet.ru": "medialand", - "medialand.ru": "medialand", - "medialead.de": "medialead", - "mathads.com": "mediamath", - "mathtag.com": "mediamath", - "mediametrics.ru": "mediametrics", - "audit.median.hu": "median", - "mediapass.com": "mediapass", - "mt.mediapostcommunication.net": "mediapost_communications", - "mediarithmics.com": "mediarithmics.com", - "tns-counter.ru": "mediascope", - "ad.media-servers.net": "mediashakers", - "adsvc1107131.net": "mediashift", - "mediator.media": "mediator.media", - "mediav.com": "mediav", - "adnetinteractive.com": "mediawhiz", - "adnetinteractive.net": "mediawhiz", - "mediego.com": "medigo", - "medleyads.com": "medley", - "adnet.com.tr": "medyanet", - "e-kolay.net": "medyanet", - "medyanetads.com": "medyanet", - "cim.meebo.com": "meebo_bar", - "meetrics.net": "meetrics", - "mxcdn.net": "meetrics", - "research.de.com": "meetrics", - "counter.megaindex.ru": "megaindex", - "mega.co.nz": "meganz", - "mega.io": "meganz", - "mega.nz": "meganz", - "mein-bmi.com": "mein-bmi.com", - "webvisitor.melissadata.net": "melissa", - "meltdsp.com": "melt", - "mlt01.com": "menlo", - "mentad.com": "mentad", - "mercadoclics.com": "mercado", - "mercadolivre.com.br": "mercado", - "mlstatic.com": "mercado", - "merchantadvantage.com": "merchantadvantage", - "merchenta.com": "merchenta", - "roia.biz": "mercury_media", - "cdn.merklesearch.com": "merkle_research", - "rkdms.com": "merkle_rkg", - "messenger.com": "messenger.com", - "ad.metanetwork.com": "meta_network", - "metaffiliation.com": "metaffiliation.com", - "netaffiliation.com": "metaffiliation.com", - "metalyzer.com": "metapeople", - "mlsat02.de": "metapeople", - "metrigo.com": "metrigo", - "metriweb.be": "metriweb", - "miaozhen.com": "miaozhen", - "microad.co.jp": "microad", - "microad.jp": "microad", - "microad.net": "microad", - "microadinc.com": "microad", - "azurewebsites.net": "microsoft", - "cloudapp.net": "microsoft", - "gfx.ms": "microsoft", - "microsoft.com": "microsoft", - "microsoftonline-p.com": "microsoft", - "microsoftonline.com": "microsoft", - "microsofttranslator.com": "microsoft", - "msecnd.net": "microsoft", - "msedge.net": "microsoft", - "msocdn.com": "microsoft", - "onestore.ms": "microsoft", - "s-microsoft.com": "microsoft", - "trouter.io": "microsoft", - "windows.net": "microsoft", - "aka.ms": "microsoft", - "microsoftazuread-sso.com": "microsoft", - "bingapis.com": "microsoft", - "msauth.net": "microsoft", - "msauthimages.net": "microsoft", - "msftauth.net": "microsoft", - "msftstatic.com": "microsoft", - "msidentity.com": "microsoft", - "nelreports.net": "microsoft", - "windowscentral.com": "microsoft", - "analytics.live.com": "microsoft_analytics", - "a.clarity.ms": "microsoft_clarity", - "b.clarity.ms": "microsoft_clarity", - "c.clarity.ms": "microsoft_clarity", - "d.clarity.ms": "microsoft_clarity", - "e.clarity.ms": "microsoft_clarity", - "f.clarity.ms": "microsoft_clarity", - "g.clarity.ms": "microsoft_clarity", - "h.clarity.ms": "microsoft_clarity", - "i.clarity.ms": "microsoft_clarity", - "j.clarity.ms": "microsoft_clarity", - "log.clarity.ms": "microsoft_clarity", - "www.clarity.ms": "microsoft_clarity", - "mmismm.com": "mindset_media", - "imgfarm.com": "mindspark", - "mindspark.com": "mindspark", - "staticimgfarm.com": "mindspark", - "mvtracker.com": "mindviz_tracker", - "minewhat.com": "minewhat", - "mintsapp.io": "mints_app", - "snackly.co": "minute.ly", - "snippet.minute.ly": "minute.ly", - "apv.configuration.minute.ly": "minute.ly_video", - "get.mirando.de": "mirando", - "mirtesen.ru": "mirtesen.ru", - "misterbell.com": "mister_bell", - "mixi.jp": "mixi", - "mixpanel.com": "mixpanel", - "mxpnl.com": "mixpanel", - "mxpnl.net": "mixpanel", - "swf.mixpo.com": "mixpo", - "app.mluvii.com": "mluvii", - "mncdn.com": "mncdn.com", - "moatads.com": "moat", - "moatpixel.com": "moat", - "mobicow.com": "mobicow", - "a.mobify.com": "mobify", - "mobtrks.com": "mobtrks.com", - "ads.mocean.mobi": "mocean_mobile", - "ads.moceanads.com": "mocean_mobile", - "chat.mochapp.com": "mochapp", - "intelligentpixel.modernimpact.com": "modern_impact", - "teljari.is": "modernus", - "modulepush.com": "modulepush.com", - "mogointeractive.com": "mogo_interactive", - "mokonocdn.com": "mokono_analytics", - "devappgrant.space": "monero_miner", - "monetate.net": "monetate", - "monetize-me.com": "monetize_me", - "ads.themoneytizer.com": "moneytizer", - "mongoosemetrics.com": "mongoose_metrics", - "track.monitis.com": "monitis", - "monitus.net": "monitus", - "fonts.net": "monotype_gmbh", - "fonts.com": "monotype_imaging", - "cdn.monsido.com": "monsido", - "monster.com": "monster_advertising", - "mooxar.com": "mooxar", - "mopinion.com": "mopinion.com", - "mopub.com": "mopub", - "ad.ad-arata.com": "more_communication", - "moras.jp": "moreads", - "nedstatbasic.net": "motigo_webstats", - "webstats.motigo.com": "motigo_webstats", - "analytics.convertlanguage.com": "motionpoint", - "mouseflow.com": "mouseflow", - "mousestats.com": "mousestats", - "s.mousetrace.com": "mousetrace", - "movad.de": "mov.ad", - "movad.net": "mov.ad", - "micpn.com": "movable_ink", - "mvb.me": "movable_media", - "moz.com": "moz", - "firefox.com": "mozilla", - "mozaws.net": "mozilla", - "mozgcp.net": "mozilla", - "mozilla.com": "mozilla", - "mozilla.net": "mozilla", - "mozilla.org": "mozilla", - "storage.mozoo.com": "mozoo", - "tracker.mrpfd.com": "mrp", - "mrpdata.com": "mrpdata", - "mrpdata.net": "mrpdata", - "mrskincash.com": "mrskincash", - "a-msedge.net": "msedge", - "b-msedge.net": "msedge", - "dual-s-msedge.net": "msedge", - "e-msedge.net": "msedge", - "k-msedge.net": "msedge", - "l-msedge.net": "msedge", - "s-msedge.net": "msedge", - "spo-msedge.net": "msedge", - "t-msedge.net": "msedge", - "wac-msedge.net": "msedge", - "msn.com": "msn", - "s-msn.com": "msn", - "musculahq.appspot.com": "muscula", - "litix.io": "mux_inc", - "mybloglog.com": "mybloglog", - "t.p.mybuys.com": "mybuys", - "mycdn.me": "mycdn.me", - "mycliplister.com": "mycliplister.com", - "mycounter.com.ua": "mycounter.ua", - "mycounter.ua": "mycounter.ua", - "myfonts.net": "myfonts", - "mypagerank.net": "mypagerank", - "stat.mystat.hu": "mystat", - "mythings.com": "mythings", - "mystat-in.net": "mytop_counter", - "nab.com": "nab", - "nab.com.au": "nab", - "nab.net": "nab", - "nabgroup.com": "nab", - "national.com.au": "nab", - "nationalaustraliabank.com.au": "nab", - "nationalbank.com.au": "nab", - "nakanohito.jp": "nakanohito.jp", - "namogoo.coom": "namogoo", - "nanigans.com": "nanigans", - "audiencemanager.de": "nano_interactive", - "nanorep.com": "nanorep", - "narando.com": "narando", - "static.bam-x.com": "narrativ", - "narrative.io": "narrative_io", - "p1.ntvk1.ru": "natimatica", - "nativeads.com": "nativeads.com", - "cdn01.nativeroll.tv": "nativeroll", - "ntv.io": "nativo", - "postrelease.com": "nativo", - "navdmp.com": "navegg_dmp", - "naver.com": "naver.com", - "naver.net": "naver.com", - "s-nbcnews.com": "nbc_news", - "richmedia247.com": "ncol", - "needle.com": "needle", - "nekudo.com": "nekudo.com", - "neodatagroup.com": "neodata", - "ad-srv.net": "neory", - "contentspread.net": "neory", - "neory-tm.com": "neory", - "simptrack.com": "neory", - "nerfherdersolo.com": "nerfherdersolo_com", - "wemfbox.ch": "net-metrix", - "cdnma.com": "net-results", - "nr7.us": "net-results", - "netavenir.com": "net_avenir", - "netcommunities.com": "net_communities", - "visibility-stats.com": "net_visibility", - "netbiscuits.net": "netbiscuits", - "bbtrack.net": "netbooster_group", - "netbooster.com": "netbooster_group", - "netflix.com": "netflix", - "nflxext.com": "netflix", - "nflximg.net": "netflix", - "nflxso.net": "netflix", - "nflxvideo.net": "netflix", - "flxvpn.net": "netflix", - "netflix.ca": "netflix", - "netflix.com.au": "netflix", - "netflix.net": "netflix", - "netflixdnstest1.com": "netflix", - "netflixdnstest10.com": "netflix", - "netflixdnstest2.com": "netflix", - "netflixdnstest3.com": "netflix", - "netflixdnstest4.com": "netflix", - "netflixdnstest5.com": "netflix", - "netflixdnstest6.com": "netflix", - "netflixdnstest7.com": "netflix", - "netflixdnstest8.com": "netflix", - "netflixdnstest9.com": "netflix", - "netflixinvestor.com": "netflix", - "netflixstudios.com": "netflix", - "netflixtechblog.com": "netflix", - "nflximg.com": "netflix", - "netify.ai": "netify", - "netzathleten-media.de": "netletix", - "netminers.dk": "netminers", - "netmining.com": "netmining", - "netmng.com": "netmining", - "stat.netmonitor.fi": "netmonitor", - "glanceguide.com": "netratings_sitecensus", - "imrworldwide.com": "netratings_sitecensus", - "vizu.com": "netratings_sitecensus", - "netrk.net": "netrk.net", - "netseer.com": "netseer", - "netshelter.net": "netshelter", - "nsaudience.pl": "netsprint_audience", - "nwidget.networkedblogs.com": "networkedblogs", - "adadvisor.net": "neustar_adadvisor", - "d1ros97qkrwjf5.cloudfront.net": "new_relic", - "newrelic.com": "new_relic", - "nr-data.net": "new_relic", - "codestream.com": "new_relic", - "newscgp.com": "newscgp.com", - "nmcdn.us": "newsmax", - "newstogram.com": "newstogram", - "newsupdatedir.info": "newsupdatedir.info", - "newsupdatewe.info": "newsupdatewe.info", - "ads.newtention.net": "newtention", - "ads.newtentionassets.net": "newtention", - "nexage.com": "nexage", - "nexeps.com": "nexeps.com", - "nxtck.com": "next_performance", - "track.nextuser.com": "next_user", - "imgsrv.nextag.com": "nextag_roi_optimizer", - "nextclick.pl": "nextclick", - "nextstat.com": "nextstat", - "d1d8vn0fpluuz7.cloudfront.net": "neytiv", - "ads.ngageinc.com": "ngage_inc.", - "nice264.com": "nice264.com", - "nimblecommerce.com": "nimblecommerce", - "nineanalytics.io": "nine_direct_digital", - "cho-chin.com": "ninja_access_analysis", - "donburako.com": "ninja_access_analysis", - "hishaku.com": "ninja_access_analysis", - "shinobi.jp": "ninja_access_analysis", - "static.nirror.com": "nirror", - "nitropay.com": "nitropay", - "nk.pl": "nk.pl_widgets", - "noaa.gov": "noaa.gov", - "track.noddus.com": "noddus", - "contextbar.ru": "nolix", - "nonli.com": "nonli", - "non.li": "nonli", - "trkme.net": "nonstop_consulting", - "noop.style": "noop.style", - "nosto.com": "nosto.com", - "adleadevent.com": "notify", - "notifyfox.com": "notifyfox", - "notion.so": "notion", - "nowinteract.com": "now_interact", - "npario-inc.net": "npario", - "nplexmedia.com": "nplexmedia", - "nrelate.com": "nrelate", - "ns8.com": "ns8", - "nt.vc": "nt.vc", - "featurelink.com": "ntent", - "ntp.org": "ntppool", - "ntppool.org": "ntppool", - "tracer.jp": "nttcom_online_marketing_solutions", - "nuffnang.com": "nuffnang", - "nuggad.net": "nugg.ad", - "rotator.adjuggler.com": "nui_media", - "numbers.md": "numbers.md", - "channeliq.com": "numerator", - "nyacampwk.com": "nyacampwk.com", - "nyetm2mkch.com": "nyetm2mkch.com", - "nyt.com": "nyt.com", - "nytimes.com": "nyt.com", - "o12zs3u2n.com": "o12zs3u2n.com", - "o2.pl": "o2.pl", - "o2online.de": "o2online.de", - "oath.com": "oath_inc", - "observerapp.com": "observer", - "ocioso.com.br": "ocioso", - "oclasrv.com": "oclasrv.com", - "octapi.net": "octapi.net", - "service.octavius.rocks": "octavius", - "office.com": "office.com", - "office.net": "office.net", - "office365.com": "office365.com", - "oghub.io": "oghub.io", - "ohmystats.com": "oh_my_stats", - "adohana.com": "ohana_advertising_network", - "photorank.me": "olapic", - "olark.com": "olark", - "olx-st.com": "olx-st.com", - "onap.io": "olx-st.com", - "omarsys.com": "omarsys.com", - "ometria.com": "ometria", - "omgpm.com": "omg", - "omniconvert.com": "omniconvert.com", - "omnidsp.com": "omniscienta", - "oms.eu": "oms", - "omsnative.de": "oms", - "onaudience.com": "onaudience", - "btc-echode.api.oneall.com": "oneall", - "tracking.onefeed.co.uk": "onefeed", - "onesignal.com": "onesignal", - "os.tc": "onesignal", - "stat.onestat.com": "onestat", - "ocdn.eu": "onet.pl", - "onet.pl": "onet.pl", - "onetag.com": "onetag", - "s-onetag.com": "onetag", - "onetrust.com": "onetrust", - "fogl1onf.com": "onfocus.io", - "onfocus.io": "onfocus.io", - "onlinewebstat.com": "onlinewebstat", - "onlinewebstats.com": "onlinewebstat", - "onswipe.com": "onswipe", - "onthe.io": "onthe.io", - "moon-ray.com": "ontraport_autopilot", - "moonraymarketing.com": "ontraport_autopilot", - "ooyala.com": "ooyala.com", - "openadex.dk": "open_adexchange", - "247realmedia.com": "open_adstream", - "oaserve.com": "open_adstream", - "realmedia.com": "open_adstream", - "realmediadigital.com": "open_adstream", - "opensharecount.com": "open_share_count", - "chatgpt.com": "openai", - "oaistatic.com": "openai", - "oaiusercontent.com": "openai", - "openai.com": "openai", - "oloadcdn.net": "openload", - "openload.co": "openload", - "openstat.net": "openstat", - "spylog.com": "openstat", - "spylog.ru": "openstat", - "opentracker.net": "opentracker", - "openwebanalytics.com": "openwebanalytics", - "odnxs.net": "openx", - "openx.net": "openx", - "openx.org": "openx", - "openxenterprise.com": "openx", - "servedbyopenx.com": "openx", - "adsummos.net": "operative_media", - "opinary.com": "opinary", - "opinionbar.com": "opinionbar", - "emagazines.com": "oplytic", - "allawnos.com": "oppo", - "allawntech.com": "oppo", - "heytapdl.com": "oppo", - "heytapmobi.com": "oppo", - "heytapmobile.com": "oppo", - "oppomobile.com": "oppo", - "opta.net": "opta.net", - "optaim.com": "optaim", - "cookielaw.org": "optanaon", - "service.optify.net": "optify", - "optimatic.com": "optimatic", - "optmd.com": "optimax_media_delivery", - "optimicdn.com": "optimicdn.com", - "optimizely.com": "optimizely", - "episerver.net": "optimizely", - "optimonk.com": "optimonk", - "mstrlytcs.com": "optinmonster", - "optmnstr.com": "optinmonster", - "optmstr.com": "optinmonster", - "optnmstr.com": "optinmonster", - "optincollect.com": "optinproject.com", - "volvelle.tech": "optomaton", - "ora.tv": "ora.tv", - "oracleinfinity.io": "oracle_infinity", - "instantservice.com": "oracle_live_help", - "ts.istrack.com": "oracle_live_help", - "rightnowtech.com": "oracle_rightnow", - "rnengage.com": "oracle_rightnow", - "orange.fr": "orange", - "orangeads.fr": "orange", - "ads.orange142.com": "orange142", - "wanadoo.fr": "orange_france", - "otracking.com": "orangesoda", - "emxdgt.com": "orc_international", - "static.ordergroove.com": "order_groove", - "orelsite.ru": "orel_site", - "otclick-adv.ru": "otclick", - "othersearch.info": "othersearch.info", - "otm-r.com": "otm-r.com", - "otto.de": "otto.de", - "ottogroup.media": "otto.de", - "outbrain.com": "outbrain", - "outbrainimg.com": "outbrain", - "live.com": "outlook", - "cloud.microsoft": "outlook", - "hotmail.com": "outlook", - "outlook.com": "outlook", - "svc.ms": "outlook", - "overheat.it": "overheat.it", - "oewabox.at": "owa", - "owneriq.net": "owneriq", - "ownpage.fr": "ownpage", - "owox.com": "owox.com", - "adconnexa.com": "oxamedia", - "adsbwm.com": "oxamedia", - "oxomi.com": "oxomi.com", - "oztam.com.au": "oztam", - "pageanalytics.space": "pageanalytics.space", - "blockmetrics.com": "pagefair", - "pagefair.com": "pagefair", - "pagefair.net": "pagefair", - "btloader.com": "pagefair", - "ghmedia.com": "pagescience", - "777seo.com": "paid-to-promote", - "paid-to-promote.net": "paid-to-promote", - "ptp22.com": "paid-to-promote", - "ptp33.com": "paid-to-promote", - "paperg.com": "paperg", - "pardot.com": "pardot", - "d1z2jf7jlzjs58.cloudfront.net": "parsely", - "parsely.com": "parsely", - "partner-ads.com": "partner-ads", - "passionfruitads.com": "passionfruit", - "pathful.com": "pathful", - "pay-hit.com": "pay-hit", - "payclick.it": "payclick", - "app.paykickstart.com": "paykickstart", - "paypal.com": "paypal", - "paypalobjects.com": "paypal", - "pcvark.com": "pcvark.com", - "peer39.com": "peer39", - "peer39.net": "peer39", - "peer5.com": "peer5.com", - "peerius.com": "peerius", - "pendo.io": "pendo.io", - "pepper.com": "pepper.com", - "gopjn.com": "pepperjam", - "pjatr.com": "pepperjam", - "pjtra.com": "pepperjam", - "pntra.com": "pepperjam", - "pntrac.com": "pepperjam", - "pntrs.com": "pepperjam", - "player.pepsia.com": "pepsia", - "perfdrive.com": "perfdrive.com", - "perfectaudience.com": "perfect_audience", - "prfct.co": "perfect_audience", - "perfectmarket.com": "perfect_market", - "perfops.io": "perfops", - "performgroup.com": "perform_group", - "analytics.performable.com": "performable", - "performancing.com": "performancing_metrics", - "performax.cz": "performax", - "perimeterx.net": "perimeterx.net", - "permutive.com": "permutive", - "persgroep.net": "persgroep", - "persianstat.com": "persianstat", - "code.pers.io": "persio", - "counter.personyze.com": "personyze", - "petametrics.com": "petametrics", - "ads.pheedo.com": "pheedo", - "app.phonalytics.com": "phonalytics", - "d2bgg7rjywcwsy.cloudfront.net": "phunware", - "piguiqproxy.com": "piguiqproxy.com", - "trgt.eu": "pilot", - "pingdom.net": "pingdom", - "pinimg.com": "pinterest", - "pinterest.com": "pinterest", - "app.pipz.io": "pipz", - "disabled.invalid": "piwik", - "piwik.pro": "piwik_pro_analytics_suite", - "adrta.com": "pixalate", - "app.pixelpop.co": "pixel_union", - "pixfuture.net": "pixfuture", - "vast1.pixfuture.com": "pixfuture", - "piximedia.com": "piximedia", - "pizzaandads.com": "pizzaandads_com", - "ads.placester.net": "placester", - "d3uemyw1e5n0jw.cloudfront.net": "placester", - "pladform.com": "pladform.ru", - "tag.bi.serviceplan.com": "plan.net_experience_cloud", - "pfrm.co": "platform360", - "impact-ad.jp": "platformone", - "loveadvert.ru": "play_by_mamba", - "playbuzz.com": "playbuzz.com", - "pof.com": "plenty_of_fish", - "plex.bz": "plex", - "plex.direct": "plex", - "plex.tv": "plex", - "analytics.plex.tv": "plex_metrics", - "metrics.plex.tv": "plex_metrics", - "plista.com": "plista", - "plugrush.com": "plugrush", - "pluso.ru": "pluso.ru", - "plutusads.com": "plutusads", - "pmddby.com": "pmddby.com", - "pnamic.com": "pnamic.com", - "po.st": "po.st", - "widgets.getpocket.com": "pocket", - "pocketcents.com": "pocketcents", - "pointificsecure.com": "pointific", - "pointroll.com": "pointroll", - "poirreleast.club": "poirreleast.club", - "mediavoice.com": "polar.me", - "polar.me": "polar.me", - "polarmobile.com": "polar.me", - "polldaddy.com": "polldaddy", - "polyad.net": "polyad", - "polyfill.io": "polyfill.io", - "popads.net": "popads", - "popadscdn.net": "popads", - "popcash.net": "popcash", - "popcashjs.b-cdn.net": "popcash", - "desv383oqqc0.cloudfront.net": "popcorn_metrics", - "popin.cc": "popin.cc", - "cdn.popmyads.com": "popmyads", - "poponclick.com": "poponclick", - "populis.com": "populis", - "populisengage.com": "populis", - "phncdn.com": "pornhub", - "pornhub.com": "pornhub", - "prscripts.com": "pornwave", - "prstatics.com": "pornwave", - "prwidgets.com": "pornwave", - "barra.brasil.gov.br": "porta_brazil", - "postaffiliatepro.com": "post_affiliate_pro", - "powerlinks.com": "powerlinks", - "powerreviews.com": "powerreviews", - "powr.io": "powr.io", - "api.pozvonim.com": "pozvonim", - "prebid.org": "prebid", - "precisionclick.com": "precisionclick", - "adserver.com.br": "predicta", - "predicta.net": "predicta", - "prnx.net": "premonix", - "ppjol.com": "press", - "ppjol.net": "press", - "api.pressly.com": "pressly", - "pricegrabber.com": "pricegrabber", - "cdn.pricespider.com": "pricespider", - "pmdrecrute.com": "prismamediadigital.com", - "prismamediadigital.com": "prismamediadigital.com", - "privy.com": "privy.com", - "pswec.com": "proclivity", - "prodperfect.com": "prodperfect", - "lib.productsup.io": "productsup", - "proadsnet.com": "profiliad", - "profitshare.ro": "profitshare", - "tracking.proformics.com": "proformics", - "programattik.com": "programattik", - "projectwonderful.com": "project_wonderful", - "propelmarketing.com": "propel_marketing", - "oclaserver.com": "propeller_ads", - "onclasrv.com": "propeller_ads", - "onclickads.net": "propeller_ads", - "onclkds.com": "propeller_ads", - "propellerads.com": "propeller_ads", - "propellerpops.com": "propeller_ads", - "proper.io": "propermedia", - "st-a.props.id": "props", - "propvideo.net": "propvideo_net", - "tr.prospecteye.com": "prospecteye", - "prosperent.com": "prosperent", - "prostor-lite.ru": "prostor", - "reports.proton.me": "proton_ag", - "providesupport.com": "provide_support", - "proximic.com": "proximic", - "proxistore.com": "proxistore.com", - "pscp.tv": "pscp.tv", - "pstatic.net": "pstatic.net", - "psyma.com": "psyma", - "ptengine.jp": "pt_engine", - "pub-fit.com": "pub-fit", - "pub.network": "pub.network", - "learnpipe.com": "pubble", - "pubble.co": "pubble", - "pubdirecte.com": "pubdirecte", - "pubgears.com": "pubgears", - "publicidees.com": "public_ideas", - "publicidad.net": "publicidad.net", - "intgr.net": "publir", - "pubmatic.com": "pubmatic", - "pubnub.com": "pubnub.com", - "puboclic.com": "puboclic", - "pulpix.com": "pulpix.com", - "tentaculos.net": "pulpo_media", - "pulse360.com": "pulse360", - "pulseinsights.com": "pulse_insights", - "contextweb.com": "pulsepoint", - "pulsepoint.com": "pulsepoint", - "punchtab.com": "punchtab", - "purch.com": "purch", - "servebom.com": "purch", - "purechat.com": "pure_chat", - "cdn.pprl.io": "pureprofile", - "oopt.fr": "purlive", - "puserving.com": "puserving.com", - "push.world": "push.world", - "pushengage.com": "push_engage", - "pushame.com": "pushame.com", - "zebra.pushbullet.com": "pushbullet", - "pushcrew.com": "pushcrew", - "pusher.com": "pusher.com", - "pusherapp.com": "pusher.com", - "pushnative.com": "pushnative.com", - "cdn.pushnews.eu": "pushnews", - "pushno.com": "pushno.com", - "pushwhy.com": "pushwhy.com", - "pushwoosh.com": "pushwoosh.com", - "pvclouds.com": "pvclouds.com", - "ads.q1media.com": "q1media", - "q1mediahydraplatform.com": "q1media", - "q-divisioncdn.de": "q_division", - "qbaka.net": "qbaka", - "track.qcri.org": "qcri_analytics", - "collect.qeado.com": "qeado", - "s.lianmeng.360.cn": "qihoo_360", - "qq.com": "qq.com", - "qrius.me": "qrius", - "qualaroo.com": "qualaroo", - "qualcomm.com": "qualcomm", - "gpsonextra.net": "qualcomm_location_service", - "izatcloud.net": "qualcomm_location_service", - "xtracloud.net": "qualcomm_location_service", - "bluecava.com": "qualia", - "qualtrics.com": "qualtrics", - "quantcast.com": "quantcast", - "quantserve.com": "quantcast", - "quantcount.com": "quantcount", - "quantummetric.com": "quantum_metric", - "quartic.pl": "quartic.pl", - "quarticon.com": "quartic.pl", - "d3c3cq33003psk.cloudfront.net": "qubit", - "qubit.com": "qubit", - "easyresearch.se": "questback", - "queue-it.net": "queue-it", - "quick-counter.net": "quick-counter.net", - "adsonar.com": "quigo_adsonar", - "qnsr.com": "quinstreet", - "quinstreet.com": "quinstreet", - "thecounter.com": "quinstreet", - "quintelligence.com": "quintelligence", - "qservz.com": "quisma", - "quisma.com": "quisma", - "quora.com": "quora.com", - "ads-digitalkeys.com": "r_advertising", - "rackcdn.com": "rackcdn.com", - "radarurl.com": "radarurl", - "dsa.csdata1.com": "radial", - "gwallet.com": "radiumone", - "r1-cdn.net": "radiumone", - "widget.raisenow.com": "raisenow", - "mediaforge.com": "rakuten_display", - "rmtag.com": "rakuten_display", - "rakuten.co.jp": "rakuten_globalmarket", - "trafficgate.net": "rakuten_globalmarket", - "mtwidget04.affiliate.rakuten.co.jp": "rakuten_widget", - "xml.affilliate.rakuten.co.jp": "rakuten_widget", - "rambler.ru": "rambler", - "top100.ru": "rambler", - "rapidspike.com": "rapidspike", - "ravelin.com": "ravelin", - "rawgit.com": "rawgit", - "raygun.io": "raygun", - "count.rbc.ru": "rbc_counter", - "rcs.it": "rcs.it", - "rcsmediagroup.it": "rcs.it", - "d335luupugsy2.cloudfront.net": "rd_station", - "rea-group.com": "rea_group", - "reagroupdata.com.au": "rea_group", - "reastatic.net": "rea_group", - "d12ulf131zb0yj.cloudfront.net": "reachforce", - "reachforce.com": "reachforce", - "reachjunction.com": "reachjunction", - "cdn.rlets.com": "reachlocal", - "reachlocal.com": "reachlocal", - "reachlocallivechat.com": "reachlocal", - "rlcdn.net": "reachlocal", - "plugin.reactful.com": "reactful", - "reactivpub.fr": "reactivpub", - "skinected.com": "reactx", - "readrboard.com": "readerboard", - "readme.com": "readme", - "readme.io": "readme", - "readspeaker.com": "readspeaker.com", - "realclick.co.kr": "realclick", - "realestate.com.au": "realestate.com.au", - "realperson.de": "realperson.de", - "powermarketing.com": "realtime", - "realtime.co": "realtime", - "webspectator.com": "realtime", - "dcniko1cv0rz.cloudfront.net": "realytics", - "realytics.io": "realytics", - "static.rbl.ms": "rebel_mouse", - "recaptcha.net": "recaptcha", - "recettes.net": "recettes.net", - "static.recopick.com": "recopick", - "recreativ.ru": "recreativ", - "analytics.recruitics.com": "recruitics", - "analytics.cohesionapps.com": "red_ventures", - "cdn.cohesionapps.com": "red_ventures", - "redblue.de": "redblue_de", - "atendesoftware.pl": "redcdn.pl", - "redd.it": "reddit", - "reddit-image.s3.amazonaws.com": "reddit", - "reddit.com": "reddit", - "redditmedia.com": "reddit", - "redditstatic.com": "reddit", - "redhelper.ru": "redhelper", - "pixelinteractivemedia.com": "redlotus", - "triggit.com": "redlotus", - "grt01.com": "redtram", - "grt02.com": "redtram", - "redtram.com": "redtram", - "rdtcdn.com": "redtube.com", - "redtube.com": "redtube.com", - "reduxmedia.com": "redux_media", - "reduxmediagroup.com": "redux_media", - "reedbusiness.net": "reed_business_information", - "reembed.com": "reembed.com", - "reevoo.com": "reevoo.com", - "refericon.pl": "refericon", - "ads.referlocal.com": "referlocal", - "refersion.com": "refersion", - "refinedads.com": "refined_labs", - "product.reflektion.com": "reflektion", - "reformal.ru": "reformal", - "reinvigorate.net": "reinvigorate", - "convertglobal.com": "rekko", - "convertglobal.s3.amazonaws.com": "rekko", - "dnhgz729v27ca.cloudfront.net": "rekko", - "reklamstore.com": "reklam_store", - "ad.reklamport.com": "reklamport", - "delivery.reklamz.com": "reklamz", - "adimg.rekmob.com": "rekmob", - "relap.io": "relap", - "svtrd.com": "relay42", - "synovite-scripts.com": "relay42", - "tdn.r42tag.com": "relay42", - "relestar.com": "relestar", - "relevant4.com": "relevant4.com", - "remintrex.com": "remintrex", - "remove.video": "remove.video", - "rp-api.com": "repost.us", - "republer.com": "republer.com", - "resmeter.respublica.al": "res-meter", - "researchnow.com": "research_now", - "reson8.com": "resonate_networks", - "respondhq.com": "respond", - "adinsight.com": "responsetap", - "adinsight.eu": "responsetap", - "responsetap.com": "responsetap", - "data.resultlinks.com": "result_links", - "sli-system.com": "resultspage.com", - "retailrocket.net": "retailrocket.net", - "retailrocket.ru": "retailrocket.net", - "shopify.retargetapp.com": "retarget_app", - "retargeter.com": "retargeter_beacon", - "retargeting.cl": "retargeting.cl", - "d1stxfv94hrhia.cloudfront.net": "retention_science", - "waves.retentionscience.com": "retention_science", - "reutersmedia.net": "reuters_media", - "revcontent.com": "revcontent", - "socialtwist.com": "reve_marketing", - "revenue.com": "revenue", - "clkads.com": "revenuehits", - "clkmon.com": "revenuehits", - "clkrev.com": "revenuehits", - "clksite.com": "revenuehits", - "eclkspbn.com": "revenuehits", - "imageshack.host": "revenuehits", - "revenuemantra.com": "revenuemantra", - "revive-adserver.com": "revive_adserver", - "revolvermaps.com": "revolver_maps", - "cts.tradepub.com": "revresponse", - "revresponse.com": "revresponse", - "incontext.pl": "rewords", - "pl-engine.intextad.net": "rewords", - "addesktop.com": "rhythmone", - "1rx.io": "rhythmone_beacon", - "ria.ru": "ria.ru", - "rmbn.ru": "rich_media_banner_network", - "ics0.com": "richrelevance", - "richrelevance.com": "richrelevance", - "ringier.ch": "ringier.ch", - "meteorsolutions.com": "rio_seo", - "riskified.com": "riskfield.com", - "rncdn3.com": "rncdn3.com", - "ro2.biz": "ro2.biz", - "rbxcdn.com": "roblox", - "getrockerbox.com": "rockerbox", - "rocket.la": "rocket.ia", - "trk.sodoit.com": "roi_trax", - "collector.roistat.com": "roistat", - "rollad.ru": "rollad", - "d37gvrvc0wt4s1.cloudfront.net": "rollbar", - "get.roost.me": "roost", - "getrooster.com": "rooster", - "rqtrk.eu": "roq.ad", - "rotaban.ru": "rotaban", - "routenplaner-karten.com": "routenplaner-karten.com", - "rovion.com": "rovion", - "rsspump.com": "rsspump", - "creativecdn.com": "rtb_house", - "rvty.net": "rtblab", - "rtbsuperhub.com": "rtbsuperhub.com", - "rtl.de": "rtl_group", - "static-fra.de": "rtl_group", - "technical-service.net": "rtl_group", - "rtmark.net": "rtmark.net", - "dpclk.com": "rubicon", - "mobsmith.com": "rubicon", - "nearbyad.com": "rubicon", - "rubiconproject.com": "rubicon", - "tracker.ruhrgebiet-onlineservices.de": "ruhrgebiet", - "click.rummycircle.com": "rummycircle", - "runadtag.com": "run", - "rundsp.com": "run", - "un-syndicate.com": "runative", - "cdn.secretrune.com": "rune", - "runmewivel.com": "runmewivel.com", - "rhythmxchange.com": "rythmxchange", - "s24.com": "s24_com", - "s3xified.com": "s3xified.com", - "camp.sabavision.com": "sabavision", - "sageanalyst.net": "sagemetrics", - "sail-horizon.com": "sailthru_horizon", - "sail-personalize.com": "sailthru_horizon", - "sailthru.com": "sailthru_horizon", - "d16fk4ms6rqz1v.cloudfront.net": "salecycle", - "salecycle.com": "salecycle", - "api.salesfeed.com": "sales_feed", - "salesmanago.com": "sales_manago", - "salesmanago.pl": "sales_manago", - "force.com": "salesforce.com", - "salesforce.com": "salesforce.com", - "liveagentforsalesforce.com": "salesforce_live_agent", - "salesforceliveagent.com": "salesforce_live_agent", - "msgapp.com": "salesfusion", - "salespidermedia.com": "salespider_media", - "salesviewer.com": "salesviewer", - "samba.tv": "samba.tv", - "game-mode.net": "samsung", - "gos-gsp.io": "samsung", - "lldns.net": "samsung", - "pavv.co.kr": "samsung", - "remotesamsung.com": "samsung", - "samsung-gamelauncher.com": "samsung", - "samsung.co.kr": "samsung", - "samsung.com": "samsung", - "samsung.com.cn": "samsung", - "samsungcloud.com": "samsung", - "samsungcloudcdn.com": "samsung", - "samsungcloudprint.com": "samsung", - "samsungcloudsolution.com": "samsung", - "samsungcloudsolution.net": "samsung", - "samsungelectronics.com": "samsung", - "samsunghealth.com": "samsung", - "samsungiotcloud.com": "samsung", - "samsungknox.com": "samsung", - "samsungnyc.com": "samsung", - "samsungosp.com": "samsung", - "samsungotn.net": "samsung", - "samsungpositioning.com": "samsung", - "samsungqbe.com": "samsung", - "samsungrm.net": "samsung", - "samsungrs.com": "samsung", - "samsungsemi.com": "samsung", - "samsungsetup.com": "samsung", - "samsungusa.com": "samsung", - "secb2b.com": "samsung", - "smartthings.com": "samsung", - "adgear.com": "samsungads", - "adgrx.com": "samsungads", - "samsungacr.com": "samsungads", - "samsungadhub.com": "samsungads", - "samsungads.com": "samsungads", - "samsungtifa.com": "samsungads", - "aibixby.com": "samsungapps", - "findmymobile.samsung.com": "samsungapps", - "samsapps.cust.lldns.net": "samsungapps", - "samsung-omc.com": "samsungapps", - "samsungapps.com": "samsungapps", - "samsungdiroute.net": "samsungapps", - "samsungdive.com": "samsungapps", - "samsungdm.com": "samsungapps", - "samsungdmroute.com": "samsungapps", - "samsungmdec.com": "samsungapps", - "samsungvisioncloud.com": "samsungapps", - "sbixby.com": "samsungapps", - "ospserver.net": "samsungmobile", - "samsungdms.net": "samsungmobile", - "samsungmax.com": "samsungmobile", - "samsungmobile.com": "samsungmobile", - "secmobilesvc.com": "samsungmobile", - "push.samsungosp.com": "samsungpush", - "pushmessage.samsung.com": "samsungpush", - "scs.samsungqbe.com": "samsungpush", - "ssp.samsung.com": "samsungpush", - "samsungsds.com": "samsungsds", - "internetat.tv": "samsungtv", - "samsungcloud.tv": "samsungtv", - "tizenservice.com": "samsungtv", - "ilsemedia.nl": "sanoma.fi", - "sanoma.fi": "sanoma.fi", - "d13im3ek7neeqp.cloudfront.net": "sap_crm", - "d28ethi6slcjbm.cloudfront.net": "sap_crm", - "d2uevgmgh16uk4.cloudfront.net": "sap_crm", - "d3m83gvgzupli.cloudfront.net": "sap_crm", - "saas.seewhy.com": "sap_crm", - "leadforce1.com": "sap_sales_cloud", - "vlog.leadformix.com": "sap_sales_cloud", - "sap-xm.org": "sap_xm", - "sape.ru": "sape.ru", - "js.sl.pt": "sapo_ads", - "aimatch.com": "sas", - "sas.com": "sas", - "say.ac": "say.ac", - "ads.saymedia.com": "say_media", - "srv.sayyac.net": "sayyac", - "scarabresearch.com": "scarabresearch", - "schibsted.com": "schibsted", - "schibsted.io": "schibsted", - "schneevonmorgen.com": "schneevonmorgen.com", - "svonm.com": "schneevonmorgen.com", - "rockabox.co": "scoota", - "scorecardresearch.com": "scorecard_research_beacon", - "scoreresearch.com": "scorecard_research_beacon", - "scrsrch.com": "scorecard_research_beacon", - "securestudies.com": "scorecard_research_beacon", - "scout.scoutanalytics.net": "scout_analytics", - "scribblelive.com": "scribblelive", - "scribol.com": "scribol", - "analytics.snidigital.com": "scripps_analytics", - "scroll.com": "scroll", - "scupio.com": "scupio", - "search123.uk.com": "search123", - "searchforce.net": "searchforce", - "searchignite.com": "searchignite", - "srtk.net": "searchrev", - "tacticalrepublic.com": "second_media", - "sectigo.com": "sectigo", - "securedtouch.com": "securedtouch", - "securedvisit.com": "securedvisit", - "bacontent.de": "seeding_alliance", - "nativendo.de": "seeding_alliance", - "seedtag.com": "seedtag.com", - "svlu.net": "seevolution", - "d2dq2ahtl5zl1z.cloudfront.net": "segment", - "d47xnnr8b1rki.cloudfront.net": "segment", - "segment.com": "segment", - "segment.io": "segment", - "rutarget.ru": "segmento", - "segmint.net": "segmint", - "sekindo.com": "sekindo", - "sellpoint.net": "sellpoints", - "sellpoints.com": "sellpoints", - "semantiqo.com": "semantiqo.com", - "semasio.net": "semasio", - "semilo.com": "semilo", - "semknox.com": "semknox.com", - "sibautomation.com": "sendinblue", - "sendpulse.com": "sendpulse.com", - "sendsay.ru": "sendsay", - "track.sensedigital.in": "sense_digital", - "static.sensorsdata.cn": "sensors_data", - "sentifi.com": "sentifi.com", - "d3nslu0hdya83q.cloudfront.net": "sentry", - "getsentry.com": "sentry", - "ravenjs.com": "sentry", - "sentry.io": "sentry", - "sepyra.com": "sepyra", - "d2oh4tlt9mrke9.cloudfront.net": "sessioncam", - "sessioncam.com": "sessioncam", - "sessionly.io": "sessionly", - "71i.de": "sevenone_media", - "sexad.net": "sexadnetwork", - "ads.sexinyourcity.com": "sexinyourcity", - "sextracker.com": "sextracker", - "sexypartners.net": "sexypartners.net", - "im.cz": "seznam", - "imedia.cz": "seznam", - "szn.cz": "seznam", - "dtym7iokkjlif.cloudfront.net": "shareaholic", - "shareaholic.com": "shareaholic", - "shareasale.com": "shareasale", - "quintrics.nl": "sharecompany", - "sharecompany.nl": "sharecompany", - "sharepointonline.com": "sharepoint", - "onmicrosoft.com": "sharepoint", - "sharepoint.com": "sharepoint", - "sharethis.com": "sharethis", - "shareth.ru": "sharethrough", - "sharethrough.com": "sharethrough", - "marketingautomation.services": "sharpspring", - "sharpspring.com": "sharpspring", - "sheego.de": "sheego.de", - "services.sheerid.com": "sheerid", - "shinystat.com": "shinystat", - "shinystat.it": "shinystat", - "app.shoptarget.com.br": "shop_target", - "retargeter.com.br": "shop_target", - "shopauskunft.de": "shopauskunft.de", - "shopgate.com": "shopgate.com", - "shopify.com": "shopify", - "shopifycdn.com": "shopify", - "cdn.shopify.com": "shopify", - "myshopify.com": "shopify", - "shop.app": "shopify", - "shopify.co.za": "shopify", - "shopify.com.au": "shopify", - "shopify.com.mx": "shopify", - "shopify.dev": "shopify", - "shopifyapps.com": "shopify", - "shopifycdn.net": "shopify", - "shopifynetwork.com": "shopify", - "shopifypreview.com": "shopify", - "shopifysvc.com": "shopify_stats", - "stats.shopify.com": "shopify_stats", - "v.shopify.com": "shopify_stats", - "shopifycloud.com": "shopifycloud.com", - "shopperapproved.com": "shopper_approved", - "shoppingshadow.com": "shopping_com", - "tracking.shopping-flux.com": "shopping_flux", - "shoprunner.com": "shoprunner", - "shopsocially.com": "shopsocially", - "shopzilla.com": "shopzilla", - "shortnews.de": "shortnews", - "showrss.info": "showrss", - "shink.in": "shrink", - "shutterstock.com": "shutterstock", - "siblesectiveal.club": "siblesectiveal.club", - "d3v27wwd40f0xu.cloudfront.net": "sidecar", - "getsidecar.com": "sidecar", - "dtlilztwypawv.cloudfront.net": "sift_science", - "siftscience.com": "sift_science", - "btstatic.com": "signal", - "signal.co": "signal", - "thebrighttag.com": "signal", - "cdn-scripts.signifyd.com": "signifyd", - "signifyd.com": "signifyd", - "gw-services.vtrenz.net": "silverpop", - "mkt51.net": "silverpop", - "mkt912.com": "silverpop", - "mkt922.com": "silverpop", - "mkt941.com": "silverpop", - "pages01.net": "silverpop", - "pages02.net": "silverpop", - "pages04.net": "silverpop", - "pages05.net": "silverpop", - "similardeals.net": "similardeals.net", - "similarweb.com": "similarweb", - "similarweb.io": "similarweb", - "d8rk54i4mohrb.cloudfront.net": "simplereach", - "simplereach.com": "simplereach", - "simpli.fi": "simpli.fi", - "sina.com.cn": "sina", - "sinaimg.cn": "sina_cdn", - "reporting.singlefeed.com": "singlefeed", - "sddan.com": "sirdata", - "site24x7rum.com": "site24x7", - "site24x7rum.eu": "site24x7", - "sitebooster-fjfmworld-production.azureedge.net": "site_booster", - "a5.ogt.jp": "site_stratos", - "siteapps.com": "siteapps", - "sitebro.com": "sitebro", - "sitebro.com.tw": "sitebro", - "sitebro.net": "sitebro", - "sitebro.tw": "sitebro", - "siteheart.com": "siteheart", - "siteimprove.com": "siteimprove", - "siteimproveanalytics.com": "siteimprove_analytics", - "sitelabweb.com": "sitelabweb.com", - "sitemeter.com": "sitemeter", - "pixel.ad": "sitescout", - "sitescout.com": "sitescout", - "ad.sitemaji.com": "sitetag", - "sitetag.us": "sitetag", - "analytics.sitewit.com": "sitewit", - "ads.sixapart.com": "six_apart_advertising", - "sixt-neuwagen.de": "sixt-neuwagen.de", - "skadtec.com": "skadtec.com", - "redirectingat.com": "skimlinks", - "skimlinks.com": "skimlinks", - "skimresources.com": "skimlinks", - "analytics.skroutz.gr": "skroutz", - "skyglue.com": "skyglue", - "skype.com": "skype", - "skypeassets.com": "skype", - "skysa.com": "skysa", - "skyscnr.com": "skyscnr.com", - "slack-edge.com": "slack", - "slack-imgs.com": "slack", - "slack.com": "slack", - "slackb.com": "slack", - "slashdot.org": "slashdot_widget", - "sleeknotestaticcontent.sleeknote.com": "sleeknote", - "resultspage.com": "sli_systems", - "builder.extensionfactory.com": "slice_factory", - "freeskreen.com": "slimcutmedia", - "slingpic.com": "slingpic", - "smaato.net": "smaato", - "smart4ads.com": "smart4ads", - "sascdn.com": "smart_adserver", - "smartadserver.com": "smart_adserver", - "styria-digital.com": "smart_adserver", - "yoc-adserver.com": "smart_adserver", - "smartcall.kz": "smart_call", - "getsmartcontent.com": "smart_content", - "smartdevicemedia.com": "smart_device_media", - "x.cnt.my": "smart_leads", - "tracking.smartselling.cz": "smart_selling", - "bepolite.eu": "smartad", - "smartbn.ru": "smartbn", - "smartclick.net": "smartclick.net", - "smartclip.net": "smartclip", - "smartcontext.pl": "smartcontext", - "d1n00d49gkbray.cloudfront.net": "smarter_remarketer", - "dhxtx5wtu812h.cloudfront.net": "smarter_remarketer", - "smartertravel.com": "smarter_travel", - "travelsmarter.net": "smarter_travel", - "smct.co": "smarterclick", - "smartertrack.com": "smartertrack", - "smartlink.cool": "smartlink.cool", - "getsmartlook.com": "smartlook", - "smartlook.com": "smartlook", - "smartstream.tv": "smartstream.tv", - "smartsuppchat.com": "smartsupp_chat", - "smi2.net": "smi2.ru", - "smi2.ru": "smi2.ru", - "stat.media": "smi2.ru", - "cdn.smooch.io": "smooch", - "smowtion.com": "smowtion", - "smxindia.in": "smx_ventures", - "smyte.com": "smyte", - "snacktv.de": "snacktv", - "snap.com": "snap", - "addlive.io": "snap", - "feelinsonice.com": "snap", - "sc-cdn.net": "snap", - "sc-corp.net": "snap", - "sc-gw.com": "snap", - "sc-jpl.com": "snap", - "sc-prod.net": "snap", - "snap-dev.net": "snap", - "snapads.com": "snap", - "snapkit.com": "snap", - "snapengage.com": "snap_engage", - "sc-static.net": "snapchat", - "snapchat.com": "snapchat", - "snapcraft.io": "snapcraft", - "snapcraftcontent.com": "snapcraft", - "h-bid.com": "snigelweb", - "eu2.snoobi.eu": "snoobi", - "snoobi.com": "snoobi_analytics", - "d346whrrklhco7.cloudfront.net": "snowplow", - "d78fikflryjgj.cloudfront.net": "snowplow", - "dc8xl0ndzn2cb.cloudfront.net": "snowplow", - "playwire.com": "snowplow", - "snplow.net": "snowplow", - "go-mpulse.net": "soasta_mpulse", - "mpstat.us": "soasta_mpulse", - "tiaa-cref.org": "soasta_mpulse", - "sociablelabs.com": "sociable_labs", - "socialamp.com": "social_amp", - "socialannex.com": "social_annex", - "soclminer.com.br": "social_miner", - "duu8lzqdm8tsz.cloudfront.net": "socialbeat", - "ratevoice.com": "socialrms", - "sociaplus.com": "sociaplus.com", - "sociomantic.com": "sociomantic", - "images.sohu.com": "sohu", - "sojern.com": "sojern", - "sokrati.com": "sokrati", - "solads.media": "solads.media", - "solaredge.com": "solaredge", - "solidopinion.com": "solidopinion", - "pixel.solvemedia.com": "solve_media", - "soma2.de": "soma_2", - "mobileadtrading.com": "somoaudience", - "sonobi.com": "sonobi", - "sonos.com": "sonos", - "sophus3.com": "sophus3", - "deployads.com": "sortable", - "sndcdn.com": "soundcloud", - "soundcloud.com": "soundcloud", - "provenpixel.com": "sourceknowledge_pixel", - "decenthat.com": "sourcepoint", - "summerhamster.com": "sourcepoint", - "d3pkae9owd2lcf.cloudfront.net": "sovrn", - "lijit.com": "sovrn", - "onscroll.com": "sovrn_viewability_solutions", - "rts.sparkstudios.com": "spark_studios", - "sparkasse.de": "sparkasse.de", - "speakpipe.com": "speakpipe", - "adviva.net": "specific_media", - "specificclick.net": "specific_media", - "specificmedia.com": "specific_media", - "spectate.com": "spectate", - "speedshiftmedia.com": "speed_shift_media", - "speedcurve.com": "speedcurve", - "admarket.entireweb.com": "speedyads", - "affiliate.entireweb.com": "speedyads", - "sa.entireweb.com": "speedyads", - "speee-ad.akamaized.net": "speee", - "sphere.com": "sphere", - "surphace.com": "sphere", - "api.spheremall.com": "spheremall", - "zdwidget3-bs.sphereup.com": "sphereup", - "static.sspicy.ru": "spicy", - "spider.ad": "spider.ad", - "metrics.spiderads.eu": "spider_ads", - "spn.ee": "spinnakr", - "embed.spokenlayer.com": "spokenlayer", - "spongecell.com": "spongecell", - "sponsorads.de": "sponsorads.de", - "sportsbetaffiliates.com.au": "sportsbet_affiliates", - "spot.im": "spot.im", - "spoteffects.net": "spoteffect", - "scdn.co": "spotify", - "spotify.com": "spotify", - "pscdn.co": "spotify", - "spotifycdn.com": "spotify", - "spotifycdn.net": "spotify", - "spotilocal.com": "spotify", - "embed.spotify.com": "spotify_embed", - "spotscenered.info": "spotscenered.info", - "spotx.tv": "spotxchange", - "spotxcdn.com": "spotxchange", - "spotxchange.com": "spotxchange", - "spoutable.com": "spoutable", - "cdn.springboardplatform.com": "springboard", - "springserve.com": "springserve", - "pixel.sprinklr.com": "sprinklr", - "stat.sputnik.ru": "sputnik", - "email-match.com": "squadata", - "squarespace.com": "squarespace.com", - "srvtrck.com": "srvtrck.com", - "srvvtrk.com": "srvvtrk.com", - "sstatic.net": "sstatic.net", - "hatena.ne.jp": "st-hatena", - "st-hatena.com": "st-hatena", - "stackadapt.com": "stackadapt", - "stackpathdns.com": "stackpathdns.com", - "stailamedia.com": "stailamedia_com", - "stalluva.pro": "stalluva.pro", - "startappservice.com": "startapp", - "hit.stat24.com": "stat24", - "adstat.4u.pl": "stat4u", - "stat.4u.pl": "stat4u", - "statcounter.com": "statcounter", - "stathat.com": "stathat", - "statisfy.net": "statisfy", - "statsy.net": "statsy.net", - "statuscake.com": "statuscake", - "statuspage.io": "statuspage.io", - "stspg-customer.com": "statuspage.io", - "stayfriends.de": "stayfriends.de", - "steelhousemedia.com": "steelhouse", - "steepto.com": "steepto.com", - "stepstone.com": "stepstone.com", - "4stats.de": "stetic", - "stetic.com": "stetic", - "stickyadstv.com": "stickyads", - "stocktwits.com": "stocktwits", - "storify.com": "storify", - "storygize.net": "storygize", - "bizsolutions.strands.com": "strands_recommender", - "strava.com": "strava", - "mailfoogae.appspot.com": "streak", - "streamotion.com.au": "streamotion", - "streamrail.com": "streamrail.com", - "streamrail.net": "streamrail.com", - "stridespark.com": "stride", - "stripcdn.com": "stripchat.com", - "stripchat.com": "stripchat.com", - "stripe.com": "stripe.com", - "stripe.network": "stripe.com", - "stripst.com": "stripst.com", - "interactivemedia.net": "stroer_digital_media", - "stroeerdigitalgroup.de": "stroer_digital_media", - "stroeerdigitalmedia.de": "stroer_digital_media", - "stroeerdp.de": "stroer_digital_media", - "stroeermediabrands.de": "stroer_digital_media", - "spklw.com": "strossle", - "sprinklecontent.com": "strossle", - "strossle.it": "strossle", - "struq.com": "struq", - "stumble-upon.com": "stumbleupon_widgets", - "stumbleupon.com": "stumbleupon_widgets", - "su.pr": "stumbleupon_widgets", - "sub2tech.com": "sub2", - "ayads.co": "sublime_skinz", - "suggest.io": "suggest.io", - "sumologic.com": "sumologic.com", - "sumo.com": "sumome", - "sumome.com": "sumome", - "sundaysky.com": "sundaysky", - "supercell.com": "supercell", - "supercellsupport.com": "supercell", - "supercounters.com": "supercounters", - "superfastcdn.com": "superfastcdn.com", - "socdm.com": "supership", - "supplyframe.com": "supplyframe", - "surfingbird.ru": "surf_by_surfingbird", - "px.surveywall-api.survata.com": "survata", - "cdn.sweettooth.io": "sweettooth", - "swiftypecdn.com": "swiftype", - "swisscom.ch": "swisscom", - "myswitchads.com": "switch_concepts", - "switchadhub.com": "switch_concepts", - "switchads.com": "switch_concepts", - "switchafrica.com": "switch_concepts", - "switch.tv": "switchtv", - "shopximity.com": "swoop", - "swoop.com": "swoop", - "analytics-cdn.sykescottages.co.uk": "sykes", - "norton.com": "symantec", - "seal.verisign.com": "symantec", - "symantec.com": "symantec", - "d.hodes.com": "symphony_talent", - "technorati.com": "synacor", - "technoratimedia.com": "synacor", - "cn.clickable.net": "syncapse", - "synergy-e.com": "synergy-e", - "sdp-campaign.de": "t-mobile", - "t-online.de": "t-mobile", - "telekom-dienste.de": "t-mobile", - "telekom.com": "t-mobile", - "telekom.de": "t-mobile", - "toi.de": "t-mobile", - "t8cdn.com": "t8cdn.com", - "tableteducation.com": "tableteducation.com", - "basebanner.com": "taboola", - "taboola.com": "taboola", - "taboolasyndication.com": "taboola", - "tacoda.net": "tacoda", - "commander1.com": "tag_commander", - "tagcommander.com": "tag_commander", - "tags.tagcade.com": "tagcade", - "taggify.net": "taggify", - "taggyad.jp": "taggy", - "levexis.com": "tagman", - "tailtarget.com": "tail_target", - "tailsweep.com": "tailsweep", - "tamedia.ch": "tamedia.ch", - "tanx.com": "tanx", - "alipcsec.com": "taobao", - "taobao.com": "taobao", - "tapad.com": "tapad", - "theblogfrog.com": "tapinfluence", - "tarafdari.com": "tarafdari", - "target2sell.com": "target_2_sell", - "trackmytarget.com": "target_circle", - "cdn.targetfuel.com": "target_fuel", - "tawk.to": "tawk", - "tbn.ru": "tbn.ru", - "tchibo-content.de": "tchibo_de", - "tchibo.de": "tchibo_de", - "tdsrmbl.net": "tdsrmbl_net", - "teads.tv": "teads", - "tealeaf.ibmcloud.com": "tealeaf", - "tealium.com": "tealium", - "tealium.hs.llnwd.net": "tealium", - "tealiumiq.com": "tealium", - "tiqcdn.com": "tealium", - "teaser.cc": "teaser.cc", - "emailretargeting.com": "tedemis", - "tracking.dsmmadvantage.com": "teletech", - "telstra.com": "telstra", - "telstra.com.au": "telstra", - "tenderapp.com": "tender", - "tensitionschoo.club": "tensitionschoo.club", - "watch.teroti.com": "teroti", - "webterren.com": "terren", - "teufel.de": "teufel.de", - "theadex.com": "the_adex", - "connect.decknetwork.net": "the_deck", - "gu-web.net": "the_guardian", - "guardianapps.co.uk": "the_guardian", - "guim.co.uk": "the_guardian", - "deepthought.online": "the_reach_group", - "reachgroup.com": "the_reach_group", - "redintelligence.net": "the_reach_group", - "thesearchagency.net": "the_search_agency", - "thesun.co.uk": "the_sun", - "w-x.co": "the_weather_company", - "weather.com": "the_weather_company", - "wfxtriggers.com": "the_weather_company", - "tmdb.org": "themoviedb", - "thinglink.com": "thinglink", - "online-metrix.net": "threatmetrix", - "tidbit.co.in": "tidbit", - "code.tidio.co": "tidio", - "widget-v4.tidiochat.com": "tidio", - "analytics.tiktok.com": "tiktok_analytics", - "optimized.by.tiller.co": "tiller", - "vip.timezonedb.com": "timezondb", - "npttech.com": "tinypass", - "tinypass.com": "tinypass", - "tisoomi-services.com": "tisoomi", - "ad.tlvmedia.com": "tlv_media", - "ads.tlvmedia.com": "tlv_media", - "tag.tlvmedia.com": "tlv_media", - "research-int.se": "tns", - "sesamestats.com": "tns", - "spring-tns.net": "tns", - "statistik-gallup.net": "tns", - "tns-cs.net": "tns", - "tns-gallup.dk": "tns", - "tomnewsupdate.info": "tomnewsupdate.info", - "tfag.de": "tomorrow_focus", - "srv.clickfuse.com": "tonefuse", - "toplist.cz": "toplist.cz", - "toponclick.com": "toponclick_com", - "topsy.com": "topsy", - "insight.torbit.com": "torbit", - "toro-tags.com": "toro", - "toroadvertising.com": "toro", - "toroadvertisingmedia.com": "toro", - "tororango.com": "tororango.com", - "i.total-media.net": "total_media", - "inq.com": "touchcommerce", - "tovarro.com": "tovarro.com", - "rialpay.com": "tp-cdn.com", - "tp-cdn.com": "tp-cdn.com", - "kiwe.io": "tracc.it", - "tracc.it": "tracc.it", - "ipnoid.com": "tracemyip", - "tracemyip.org": "tracemyip", - "d2gfdmu30u15x7.cloudfront.net": "traceview", - "tracelytics.com": "traceview", - "cdn.trackduck.com": "track_duck", - "d2zah9y47r7bi2.cloudfront.net": "trackjs", - "dl1d2m8ri9v3j.cloudfront.net": "trackjs", - "trackjs.com": "trackjs", - "conversionlab.trackset.com": "trackset_conversionlab", - "trackuity.com": "trackuity", - "adsrvr.org": "tradedesk", - "tradedoubler.com": "tradedoubler", - "tradelab.fr": "tradelab", - "tradetracker.net": "tradetracker", - "cdntrf.com": "traffective", - "traffective.com": "traffective", - "my.trafficfuel.com": "traffic_fuel", - "trafficrevenue.net": "traffic_revenue", - "trafficstars.com": "traffic_stars", - "tsyndicate.com": "traffic_stars", - "trafficbroker.com": "trafficbroker", - "trafficfabrik.com": "trafficfabrik.com", - "trafficfactory.biz": "trafficfactory", - "trafficforce.com": "trafficforce", - "traffichaus.com": "traffichaus", - "trafficjunky.net": "trafficjunky", - "traffiliate.com": "traffiliate", - "storage.trafic.ro": "trafic", - "trafmag.com": "trafmag.com", - "api.transcend.io": "transcend", - "cdn.transcend.io": "transcend", - "sync-transcend-cdn.com": "transcend", - "transcend-cdn.com": "transcend", - "transcend.io": "transcend", - "telemetry.transcend.io": "transcend_telemetry", - "backoffice.transmatico.com": "transmatic", - "travelaudience.com": "travel_audience", - "trbo.com": "trbo", - "treasuredata.com": "treasuredata", - "scanscout.com": "tremor_video", - "tremorhub.com": "tremor_video", - "tremormedia.com": "tremor_video", - "tremorvideo.com": "tremor_video", - "videohub.tv": "tremor_video", - "s.tcimg.com": "trendcounter", - "tcimg.com": "trendcounter", - "trendemon.com": "trendemon", - "exponential.com": "tribal_fusion", - "tribalfusion.com": "tribal_fusion", - "tribl.io": "triblio", - "api.temails.com": "trigger_mail_marketing", - "t.myvisitors.se": "triggerbee", - "jscache.com": "tripadvisor", - "tacdn.com": "tripadvisor", - "tamgrt.com": "tripadvisor", - "tripadvisor.co.uk": "tripadvisor", - "tripadvisor.com": "tripadvisor", - "tripadvisor.de": "tripadvisor", - "3lift.com": "triplelift", - "d3iwjrnl4m67rd.cloudfront.net": "triplelift", - "triplelift.com": "triplelift", - "static.triptease.io": "triptease", - "andomedia.com": "triton_digital", - "tritondigital.com": "triton_digital", - "revelations.trovus.co.uk": "trovus_revelations", - "trsv3.com": "trsv3.com", - "truefitcorp.com": "true_fit", - "tru.am": "trueanthem", - "adlegend.com": "trueffect", - "addoer.com": "truehits.net", - "truehits.in.th": "truehits.net", - "truehits.net": "truehits.net", - "trumba.com": "trumba", - "truoptik.com": "truoptik", - "trustarc.com": "trustarc", - "truste.com": "trustarc", - "consent.truste.com": "truste_consent", - "choices-or.truste.com": "truste_notice", - "choices.truste.com": "truste_notice", - "privacy-policy.truste.com": "truste_seal", - "trustedshops.com": "trusted_shops", - "trustev.com": "trustev", - "secure.comodo.net": "trustlogo", - "trustlogo.com": "trustlogo", - "usertrust.com": "trustlogo", - "trustpilot.com": "trustpilot", - "trustwave.com": "trustwave.com", - "tubecorporate.com": "tubecorporate", - "tubecup.org": "tubecup.org", - "tubemogul.com": "tubemogul", - "sre-perim.com": "tumblr_analytics", - "txmblr.com": "tumblr_analytics", - "platform.tumblr.com": "tumblr_buttons", - "lib.tunein.com": "tune_in", - "adagio.turboadv.com": "turbo", - "turn.com": "turn_inc.", - "ngtv.io": "turner", - "turner.com": "turner", - "warnermedia.com": "turner", - "turnsocial.com": "turnsocial", - "turnto.com": "turnto", - "tvsquared.com": "tvsquared.com", - "tweetboard.com": "tweetboard", - "tweetmeme.com": "tweetmeme", - "c4tw.net": "twenga", - "twiago.com": "twiago", - "twinedigital.go2cloud.org": "twine", - "ext-twitch.tv": "twitch.tv", - "twitch.tv": "twitch.tv", - "jtvnw.net": "twitch_cdn", - "ttvnw.net": "twitch_cdn", - "twitchcdn.net": "twitch_cdn", - "twitchsvc.net": "twitch_cdn", - "t.co": "twitter", - "twimg.com": "twitter", - "twitter.com": "twitter", - "twttr.com": "twitter", - "x.com": "twitter", - "ads-twitter.com": "twitter_ads", - "analytics.twitter.com": "twitter_analytics", - "tellapart.com": "twitter_for_business", - "syndication.twitter.com": "twitter_syndication", - "twittercounter.com": "twittercounter", - "twyn.com": "twyn", - "txxx.com": "txxx.com", - "tynt.com": "tynt", - "typeform.com": "typeform", - "typepad.com": "typepad_stats", - "typography.com": "typography.com", - "tyroodirect.com": "tyroo", - "tyroodr.com": "tyroo", - "tzetze.it": "tzetze", - "ubersetzung-app.com": "ubersetzung-app.com", - "ubuntu.com": "ubuntu", - "ubuntucompanyservices.co.za": "ubuntu", - "aralego.net": "ucfunnel", - "ucfunnel.com": "ucfunnel", - "at.ua": "ucoz", - "do.am": "ucoz", - "ucoz.net": "ucoz", - "ad-api-v01.uliza.jp": "uliza", - "api.umbel.com": "umbel", - "umebiggestern.club": "umebiggestern.club", - "unanimis.co.uk": "unanimis", - "d3pkntwtp2ukl5.cloudfront.net": "unbounce", - "t.unbounce.com": "unbounce", - "d21gpk1vhmjuf5.cloudfront.net": "unbxd", - "tracker.unbxdapi.com": "unbxd", - "under-box.com": "under-box.com", - "undercomputer.com": "undercomputer.com", - "udmserve.net": "underdog_media", - "undertone.com": "undertone", - "roitesting.com": "unica", - "unica.com": "unica", - "unister-adservices.com": "unister", - "unister-gmbh.de": "unister", - "uadx.com": "unite", - "nonstoppartner.net": "united_digital_group", - "tifbs.net": "united_internet_media_gmbh", - "ui-portal.de": "united_internet_media_gmbh", - "uimserv.net": "united_internet_media_gmbh", - "unity.com": "unity", - "unity3d.com": "unity", - "unity3dusercontent.com": "unity", - "unityads.unity3d.com": "unity_ads", - "univide.com": "univide", - "unpkg.com": "unpkg.com", - "unrulymedia.com": "unruly_media", - "src.kitcode.net": "untriel_finger_printing", - "s.clickability.com": "upland_clickability_beacon", - "uppr.de": "uppr.de", - "upravel.com": "upravel.com", - "upsellit.com": "upsellit", - "kontagent.net": "upsight", - "app.uptain.de": "uptain", - "uptolike.com": "uptolike.com", - "uptrends.com": "uptrends", - "urban-media.com": "urban-media.com", - "urbanairship.com": "urban_airship", - "mobile.usabilitytools.com": "usability_tools", - "usabilla.com": "usabilla", - "usemax.de": "usemax", - "usemaxserver.de": "usemax", - "usemessages.com": "usemessages.com", - "api.usercycle.com": "usercycle", - "userdive.com": "userdive", - "userecho.com": "userecho", - "dq4irj27fs462.cloudfront.net": "userlike.com", - "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com": "userlike.com", - "userlike.com": "userlike.com", - "contactusplus.com": "userpulse", - "user-pulse.appspot.com": "userpulse", - "userpulse.com": "userpulse", - "userreplay.net": "userreplay", - "sdsbucket.s3.amazonaws.com": "userreport", - "userreport.com": "userreport", - "dtkm4pd19nw6z.cloudfront.net": "userrules", - "api.usersnap.com": "usersnap", - "d3mvnvhjmkxpjz.cloudfront.net": "usersnap", - "uservoice.com": "uservoice", - "userzoom.com": "userzoom.com", - "usocial.pro": "usocial", - "utarget.ru": "utarget", - "uuidksinc.net": "uuidksinc.net", - "v12group.com": "v12_group", - "vacaneedasap.com": "vacaneedasap.com", - "ads.brand.net": "valassis", - "vdrn.redplum.com": "valassis", - "api.searchlinks.com": "validclick", - "js.searchlinks.com": "validclick", - "vinsight.de": "valiton", - "valueclick.net": "valueclick_media", - "valuecommerce.com": "valuecommerce", - "valuedopinions.co.uk": "valued_opinions", - "buzzparadise.com": "vanksen", - "vmmpxl.com": "varick_media_management", - "vcita.com": "vcita", - "tracking.vcommission.com": "vcommission", - "vdopia.com": "vdopia", - "veinteractive.com": "ve_interactive", - "vee24.com": "vee24", - "velocecdn.com": "velocecdn.com", - "mdcn.mobi": "velti_mgage_visualize", - "velti.com": "velti_mgage_visualize", - "vendemore.com": "vendemore", - "venturead.com": "venturead.com", - "api.venyoo.ru": "venyoo", - "veoxa.com": "veoxa", - "vergic.com": "vergic.com", - "d3qxef4rp70elm.cloudfront.net": "vero", - "getvero.com": "vero", - "verticalacuity.com": "vertical_acuity", - "roi.vertical-leap.co.uk": "vertical_leap", - "cts.vresp.com": "verticalresponse", - "verticalscope.com": "verticalscope", - "ads.vertoz.com": "vertoz", - "banner.vrtzads.com": "vertoz", - "veruta.com": "veruta", - "vrvm.com": "verve_mobile", - "vgwort.de": "vg_wort", - "digitaltarget.ru": "vi", - "btg.mtvnservices.com": "viacom_tag_container", - "viafoura.com": "viafoura", - "viafoura.net": "viafoura", - "intellitxt.com": "vibrant_ads", - "vicomi.com": "vicomi.com", - "vidazoo.com": "vidazoo.com", - "module-videodesk.com": "video_desk", - "vidtok.ru": "video_potok", - "videoadex.com": "videoadex.com", - "tidaltv.com": "videology", - "videonow.ru": "videonow", - "videoplayerhub.com": "videoplayerhub.com", - "videoplaza.tv": "videoplaza", - "kweb.videostep.com": "videostep", - "content.vidgyor.com": "vidgyor", - "vidible.tv": "vidible", - "assets.vidora.com": "vidora", - "vietad.vn": "vietad", - "viglink.com": "viglink", - "vigo.one": "vigo", - "vigo.ru": "vigo", - "vimeo.com": "vimeo", - "vimeocdn.com": "vimeo", - "vindicosuite.com": "vindico_group", - "vinted.net": "vinted", - "viraladnetwork.net": "viral_ad_network", - "app.viral-loops.com": "viral_loops", - "viralgains.com": "viralgains", - "viralmint.com": "viralmint", - "virgul.com": "virgul", - "ssp.virool.com": "virool_player", - "virtusize.com": "virtusize", - "viewablemedia.net": "visible_measures", - "visiblemeasures.com": "visible_measures", - "visioncriticalpanels.com": "vision_critical", - "visitstreamer.com": "visit_streamer", - "visitortracklog.com": "visitortrack", - "visitorville.com": "visitorville", - "d2hkbi3gan6yg6.cloudfront.net": "visscore", - "myvisualiq.net": "visual_iq", - "visualrevenue.com": "visual_revenue", - "d5phz18u4wuww.cloudfront.net": "visual_website_optimizer", - "visualwebsiteoptimizer.com": "visual_website_optimizer", - "wingify.com": "visual_website_optimizer", - "vdna-assets.com": "visualdna", - "visualdna.com": "visualdna", - "visualstudio.com": "visualstudio.com", - "id-visitors.com": "visualvisitor", - "vi-tag.net": "vivalu", - "vivistats.com": "vivistats", - "vizury.com": "vizury", - "vizzit.se": "vizzit", - "cdn-vk.com": "vk.com", - "vk-analytics.com": "vk.com", - "vkuservideo.net": "vk.com", - "userapi.com": "vkontakte", - "vk.com": "vkontakte", - "vkontakte.ru": "vkontakte", - "vntsm.com": "vntsm.com", - "vodafone.de": "vodafone.de", - "voicefive.com": "voicefive", - "volusion.com": "volusion_chat", - "cwkuki.com": "voluum", - "volumtrk.com": "voluum", - "voluumtrk3.com": "voluum", - "vooxe.com": "vooxe.com", - "vorwerk.de": "vorwerk.de", - "vox-cdn.com": "vox", - "embed.voxus.tv": "voxus", - "voxus-targeting-voxusmidia.netdna-ssl.com": "voxus", - "c-dsp.vpadn.com": "vpon", - "tools.vpscash.nl": "vpscash", - "vsassets.io": "vs", - "exp-tas.com": "vscode", - "v0cdn.net": "vscode", - "vscode-cdn.net": "vscode", - "vscode-unpkg.net": "vscode", - "vtracy.de": "vtracy.de", - "liftoff.io": "vungle", - "vungle.com": "vungle", - "vuukle.com": "vuukle", - "view.vzaar.com": "vzaar", - "w3counter.com": "w3counter", - "w3roi.com": "w3roi", - "contentwidgets.net": "wahoha", - "wahoha.com": "wahoha", - "walkme.com": "walkme.com", - "wsod.com": "wall_street_on_demand", - "walmart.com": "walmart", - "wamcash.com": "wamcash", - "cdn-saveit.wanelo.com": "wanelo", - "static.warp.ly": "warp.ly", - "way2traffic.com": "way2traffic", - "wayfair.com": "wayfair_com", - "wdr.de": "wdr.de", - "web-stat.com": "web-stat", - "web.de": "web.de", - "webde.de": "web.de", - "webstat.net": "web.stat", - "ssl.webserviceaward.com": "web_service_award", - "webtraxs.com": "web_traxs", - "wipe.de": "web_wipe_analytics", - "webads.nl": "webads", - "tr.webantenna.info": "webantenna", - "webclicks24.com": "webclicks24_com", - "webclose.net": "webclose.net", - "webcollage.net": "webcollage", - "goutee.top": "webedia", - "mediaathay.org.uk": "webedia", - "wbdx.fr": "webedia", - "webeffective.keynote.com": "webeffective", - "widgets.webengage.com": "webengage", - "webgains.com": "webgains", - "webgozar.com": "webgozar", - "webgozar.ir": "webgozar", - "webhelpje.be": "webhelpje", - "webhelpje.nl": "webhelpje", - "webleads-tracker.com": "webleads_tracker", - "automation.webmecanik.com": "webmecanik", - "adrcdn.com": "weborama", - "adrcntr.com": "weborama", - "weborama.com": "weborama", - "weborama.fr": "weborama", - "webprospector.de": "webprospector", - "webstat.com": "webstat", - "webstat.se": "webstat.se", - "stat.webtrack.biz": "webtrack", - "webtraffic.no": "webtraffic", - "webtraffic.se": "webtraffic", - "d1r27qvpjiaqj3.cloudfront.net": "webtrekk", - "mateti.net": "webtrekk", - "wbtrk.net": "webtrekk", - "wcfbc.net": "webtrekk", - "webtrekk-asia.net": "webtrekk", - "webtrekk.com": "webtrekk", - "webtrekk.de": "webtrekk", - "webtrekk.net": "webtrekk", - "wt-eu02.net": "webtrekk", - "wt-safetag.com": "webtrekk", - "webtrends.com": "webtrends", - "webtrendslive.com": "webtrends", - "rd.clickshift.com": "webtrends_ads", - "web-visor.com": "webvisor", - "weebly.com": "weebly_ads", - "widget.weibo.com": "weibo_widget", - "westlotto.com": "westlotto_com", - "wetter.com": "wetter_com", - "wettercomassets.com": "wetter_com", - "whatsbroadcast.com": "whatbroadcast", - "whatsapp.com": "whatsapp", - "whatsapp.net": "whatsapp", - "whisper.onelink.me": "whisper", - "whisper.sh": "whisper", - "amung.us": "whos.amung.us", - "whoson.com": "whoson", - "api.wibbitz.com": "wibbitz", - "cdn4.wibbitz.com": "wibbitz", - "cdn.wibiya.com": "wibiya_toolbar", - "predictad.com": "widdit", - "widerplanet.com": "widerplanet", - "widespace.com": "widespace", - "widgetserver.com": "widgetbox", - "3c45d848d99.se": "wiget_media", - "wigetmedia.com": "wiget_media", - "tracker.wigzopush.com": "wigzo", - "wikia-services.com": "wikia-services.com", - "wikia-beacon.com": "wikia_beacon", - "nocookie.net": "wikia_cdn", - "wikimedia.org": "wikimedia.org", - "wikipedia.org": "wikimedia.org", - "wikiquote.org": "wikimedia.org", - "tracking.winaffiliates.com": "winaffiliates", - "maps.windows.com": "windows_maps", - "client.wns.windows.com": "windows_notifications", - "time.windows.com": "windows_time", - "windowsupdate.com": "windowsupdate", - "api.wipmania.com": "wipmania", - "col1.wiqhit.com": "wiqhit", - "wirecard.com": "wirecard", - "wirecard.de": "wirecard", - "leadlab.click": "wiredminds", - "wiredminds.com": "wiredminds", - "wiredminds.de": "wiredminds", - "adtotal.pl": "wirtualna_polska", - "wisepops.com": "wisepops", - "cdn.wishpond.net": "wishpond", - "wistia.com": "wistia", - "wistia.net": "wistia", - "parastorage.com": "wix.com", - "wix.com": "wix.com", - "public.wixab-cloud.com": "wixab", - "wixmp.com": "wixmp", - "wnzmauurgol.com": "wnzmauurgol.com", - "wonderpush.com": "wonderpush", - "woopic.com": "woopic.com", - "woopra.com": "woopra", - "pubmine.com": "wordpress_ads", - "w.org": "wordpress_stats", - "wordpress.com": "wordpress_stats", - "wp.com": "wordpress_stats", - "tracker.wordstream.com": "wordstream", - "worldnaturenet.xyz": "worldnaturenet_xyz", - "wp.pl": "wp.pl", - "wpimg.pl": "wp.pl", - "wpengine.com": "wp_engine", - "clickanalyzer.jp": "writeup_clickanalyzer", - "wurfl.io": "wurfl", - "wwwpromoter.com": "wwwpromoter", - "imgwykop.pl": "wykop", - "wykop.pl": "wykop", - "wysistat.com": "wysistat.com", - "wysistat.net": "wysistat.com", - "wywy.com": "wywy.com", - "wywyuserservice.com": "wywy.com", - "cdn.x-lift.jp": "x-lift", - "xapads.com": "xapads", - "xen-media.com": "xen-media.com", - "xfreeservice.com": "xfreeservice.com", - "xhamster.com": "xhamster", - "xhamsterlive.com": "xhamster", - "xhamsterpremium.com": "xhamster", - "xhcdn.com": "xhamster", - "huami.com": "xiaomi", - "mi-img.com": "xiaomi", - "mi.com": "xiaomi", - "miui.com": "xiaomi", - "xiaomi.com": "xiaomi", - "xiaomi.net": "xiaomi", - "xiaomiyoupin.com": "xiaomi", - "xing-share.com": "xing", - "xing.com": "xing", - "xmediaclicks.com": "xmediaclicks", - "xnxx-cdn.com": "xnxx_cdn", - "xplosion.de": "xplosion", - "xtendmedia.com": "xtend", - "xvideos-cdn.com": "xvideos_com", - "xvideos.com": "xvideos_com", - "xxxlshop.de": "xxxlshop.de", - "xxxlutz.de": "xxxlutz", - "adx.com.ru": "yabbi", - "yabbi.me": "yabbi", - "yabuka.com": "yabuka", - "tumblr.com": "yahoo", - "yahoo.com": "yahoo", - "yahooapis.com": "yahoo", - "yimg.com": "yahoo", - "oath.cloud": "yahoo", - "yahoo.net": "yahoo", - "yahooinc.com": "yahoo", - "yahoodns.net": "yahoo", - "yads.yahoo.com": "yahoo_ad_exchange", - "yieldmanager.com": "yahoo_ad_exchange", - "pr-bh.ybp.yahoo.com": "yahoo_ad_manager", - "ads.yahoo.com": "yahoo_advertising", - "adtech.yahooinc.com": "yahoo_advertising", - "analytics.yahoo.com": "yahoo_analytics", - "np.lexity.com": "yahoo_commerce_central", - "storage-yahoo.jp": "yahoo_japan_retargeting", - "yahoo.co.jp": "yahoo_japan_retargeting", - "yahooapis.jp": "yahoo_japan_retargeting", - "yimg.jp": "yahoo_japan_retargeting", - "yjtag.jp": "yahoo_japan_retargeting", - "ov.yahoo.co.jp": "yahoo_overture", - "overture.com": "yahoo_overture", - "search.yahooinc.com": "yahoo_search", - "luminate.com": "yahoo_small_business", - "pixazza.com": "yahoo_small_business", - "awaps.yandex.ru": "yandex", - "d31j93rd8oukbv.cloudfront.net": "yandex", - "webvisor.org": "yandex", - "yandex.net": "yandex", - "yandex.ru": "yandex", - "yastatic.net": "yandex", - "ya.ru": "yandex", - "yandex.by": "yandex", - "yandex.com": "yandex", - "yandex.com.tr": "yandex", - "yandex.fr": "yandex", - "yandex.kz": "yandex", - "yandex.st": "yandex.api", - "yandexadexchange.net": "yandex_adexchange", - "metabar.ru": "yandex_advisor", - "appmetrica.yandex.com": "yandex_appmetrica", - "an.webvisor.org": "yandex_direct", - "an.yandex.ru": "yandex_direct", - "bs.yandex.ru": "yandex_direct", - "mc.yandex.ru": "yandex_metrika", - "passport.yandex.ru": "yandex_passport", - "yapfiles.ru": "yapfiles.ru", - "yashi.com": "yashi", - "ad.adserverplus.com": "ybrant_media", - "player.sambaads.com": "ycontent", - "cdn.yektanet.com": "yektanet", - "fetch.yektanet.com": "yektanet", - "yengo.com": "yengo", - "yengointernational.com": "yengo", - "link.p0.com": "yesmail", - "adsrevenue.net": "yesup_advertising", - "infinityads.com": "yesup_advertising", - "momentsharing.com": "yesup_advertising", - "multipops.com": "yesup_advertising", - "onlineadultadvertising.com": "yesup_advertising", - "paypopup.com": "yesup_advertising", - "popupxxx.com": "yesup_advertising", - "xtargeting.com": "yesup_advertising", - "xxxwebtraffic.com": "yesup_advertising", - "app.yesware.com": "yesware", - "yldbt.com": "yieldbot", - "yieldify.com": "yieldify", - "yieldlab.net": "yieldlab", - "yieldlove-ad-serving.net": "yieldlove", - "yieldlove.com": "yieldlove", - "yieldmo.com": "yieldmo", - "254a.com": "yieldr", - "collect.yldr.io": "yieldr_air", - "yieldsquare.com": "yieldsquare", - "analytics-sdk.yle.fi": "yle", - "yllix.com": "yllixmedia", - "ymetrica1.com": "ymetrica1.com", - "ymzrrizntbhde.com": "ymzrrizntbhde.com", - "yoapp.s3.amazonaws.com": "yo_button", - "natpal.com": "yodle", - "analytics.yola.net": "yola_analytics", - "pixel.yola.net": "yola_analytics", - "delivery.yomedia.vn": "yomedia", - "yoochoose.net": "yoochoose.net", - "yotpo.com": "yotpo", - "yottaa.net": "yottaa", - "yottlyscript.com": "yottly", - "api.youcanbook.me": "youcanbookme", - "youcanbook.me": "youcanbookme", - "player.youku.com": "youku", - "youporn.com": "youporn", - "ypncdn.com": "youporn", - "googlevideo.com": "youtube", - "youtube-nocookie.com": "youtube", - "youtube.com": "youtube", - "ytimg.com": "youtube", - "c.ypcdn.com": "yp", - "i1.ypcdn.com": "yp", - "yellowpages.com": "yp", - "prod-js.aws.y-track.com": "ysance", - "y-track.com": "ysance", - "yume.com": "yume", - "yumenetworks.com": "yume,_inc.", - "gravityrd-services.com": "yusp", - "api.zadarma.com": "zadarma", - "zalan.do": "zalando_de", - "zalando.de": "zalando_de", - "ztat.net": "zalando_de", - "zaloapp.com": "zalo", - "zanox-affiliate.de": "zanox", - "zanox.com": "zanox", - "zanox.ws": "zanox", - "zaparena.com": "zaparena", - "zapunited.com": "zaparena", - "track.zappos.com": "zappos", - "zdassets.com": "zdassets.com", - "zebestof.com": "zebestof.com", - "zedo.com": "zedo", - "zemanta.com": "zemanta", - "zencdn.net": "zencoder", - "zendesk.com": "zendesk", - "zergnet.com": "zergnet", - "zero.kz": "zero.kz", - "app.insightgrit.com": "zeta", - "app.ubertags.com": "zeta", - "cdn.boomtrain.com": "zeta", - "events.api.boomtrain.com": "zeta", - "rfihub.com": "zeta", - "rfihub.net": "zeta", - "ru4.com": "zeta", - "xplusone.com": "zeta", - "zeusclicks.com": "zeusclicks", - "webtest.net": "ziff_davis", - "zdbb.net": "ziff_davis", - "ziffdavis.com": "ziff_davis", - "ziffdavisinternational.com": "ziff_davis", - "ziffprod.com": "ziff_davis", - "ziffstatic.com": "ziff_davis", - "analytics.ziftsolutions.com": "zift_solutions", - "zimbio.com": "zimbio.com", - "api.zippyshare.com": "zippyshare_widget", - "zmags.com": "zmags", - "zmctrack.net": "zmctrack.net", - "zog.link": "zog.link", - "js.zohostatic.eu": "zoho", - "zononi.com": "zononi.com", - "zopim.com": "zopim", - "zukxd6fkxqn.com": "zukxd6fkxqn.com", - "zwaar.net": "zwaar", - "zwaar.org": "zwaar", - "extend.tv": "zypmedia" - } -} diff --git a/staticbak/static/domain-info/tracker/trackers.json.bak b/staticbak/static/domain-info/tracker/trackers.json.bak deleted file mode 100644 index ee042be..0000000 --- a/staticbak/static/domain-info/tracker/trackers.json.bak +++ /dev/null @@ -1,25333 +0,0 @@ -{ - "timeUpdated": "2025-03-17T10:05:02.622Z", - "categories": { - "0": "audio_video_player", - "1": "comments", - "2": "customer_interaction", - "3": "pornvertising", - "4": "advertising", - "5": "essential", - "6": "site_analytics", - "7": "social_media", - "8": "misc", - "9": "cdn", - "10": "hosting", - "11": "unknown", - "12": "extensions", - "13": "email", - "14": "consent", - "15": "telemetry", - "101": "mobile_analytics" - }, - - "trackers": { - "163": { - "name": "163", - "categoryId": 4, - "url": "http://www.163.com/", - "companyId": "163" - }, - "miui.com":{ - "name": "MIUI", - "categoryId": 101, - "url": "http://tracking.miui.com", - "companyId": "miui" - }, - "1000mercis": { - "name": "1000mercis", - "categoryId": 6, - "url": "http://www.1000mercis.com/", - "companyId": "1000mercis" - }, - "161media": { - "name": "Platform161", - "categoryId": 4, - "url": "https://platform161.com/", - "companyId": "platform161" - }, - "1822direkt.de": { - "name": "1822direkt.de", - "categoryId": 8, - "url": "https://www.1822direkt.de/", - "companyId": "1822direkt", - "source": "AdGuard" - }, - "1dmp.io": { - "name": "1DMP", - "categoryId": 4, - "url": "https://1dmp.io/", - "companyId": "1dmp" - }, - "1plusx": { - "name": "1plusX", - "categoryId": 6, - "url": "https://www.1plusx.com/", - "companyId": "1plusx" - }, - "1sponsor": { - "name": "1sponsor", - "categoryId": 4, - "url": "http://fr.1sponsor.com/", - "companyId": "1sponsor" - }, - "1tag": { - "name": "1tag", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "1und1": { - "name": "1&1 IONOS", - "categoryId": 8, - "url": "http://www.ionos.com/", - "companyId": "1und1", - "source": "AdGuard" - }, - "24-ads.com": { - "name": "24-ADS", - "categoryId": 4, - "url": "http://www.24-ads.com/", - "companyId": "24-ads.com", - "source": "AdGuard" - }, - "24_7": { - "name": "[24]7", - "categoryId": 2, - "url": "http://www.247-inc.com/", - "companyId": "24_7" - }, - "24log": { - "name": "24log", - "categoryId": 6, - "url": "http://24log.ru/", - "companyId": "24log" - }, - "24smi": { - "name": "24SMI", - "categoryId": 8, - "url": "https://24smi.org/", - "companyId": "24smi", - "source": "AdGuard" - }, - "2leep": { - "name": "2leep", - "categoryId": 4, - "url": "http://2leep.com/", - "companyId": "2leep" - }, - "33across": { - "name": "33Across", - "categoryId": 4, - "url": "http://33across.com/", - "companyId": "33across" - }, - "3dstats": { - "name": "3DStats", - "categoryId": 6, - "url": "http://www.3dstats.com/", - "companyId": "3dstats" - }, - "3gpp": { - "name": "3GPP Network", - "categoryId": 5, - "url": "https://www.3gpp.org/", - "companyId": "3gpp", - "source": "AdGuard" - }, - "4chan": { - "name": "4Chan", - "categoryId": 8, - "url": "https://www.4chan.org/", - "companyId": "4chan", - "source": "AdGuard" - }, - "4finance_com": { - "name": "4finance", - "categoryId": 2, - "url": "https://4finance.com/", - "companyId": "4finance", - "source": "AdGuard" - }, - "4w_marketplace": { - "name": "4w Marketplace", - "categoryId": 4, - "url": "http://www.4wmarketplace.com/", - "companyId": "4w_marketplace" - }, - "500friends": { - "name": "500friends", - "categoryId": 2, - "url": "http://500friends.com/", - "companyId": "500friends" - }, - "51.la": { - "name": "51.La", - "categoryId": 6, - "url": "http://www.51.la/", - "companyId": "51.la" - }, - "5min_media": { - "name": "5min Media", - "categoryId": 0, - "url": "http://www.5min.com/", - "companyId": "verizon" - }, - "6sense": { - "name": "6Sense", - "categoryId": 6, - "url": "http://home.grepdata.com", - "companyId": "6sense" - }, - "77tracking": { - "name": "77Tracking", - "categoryId": 6, - "url": "http://www.77agency.com/", - "companyId": "77agency" - }, - "7plus": { - "name": "7plus", - "categoryId": 0, - "url": "https://7plus.com.au/", - "companyId": "seven_group_holdings", - "source": "AdGuard" - }, - "7tv.de": { - "name": "7tv.app", - "categoryId": 0, - "url": "https://www.7tv.app/", - "companyId": "7tv", - "source": "AdGuard" - }, - "888media": { - "name": "888media", - "categoryId": 4, - "url": "http://888media.net/", - "companyId": "888_media" - }, - "8digits": { - "name": "8digits", - "categoryId": 6, - "url": "http://8digits.com/", - "companyId": "8digits" - }, - "94j7afz2nr.xyz": { - "name": "94j7afz2nr.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "99stats": { - "name": "99stats", - "categoryId": 6, - "url": "http://www.99stats.com/", - "companyId": "99stats" - }, - "a3cloud_net": { - "name": "a3cloud.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "a8": { - "name": "A8", - "categoryId": 4, - "url": "http://www.a8.net/", - "companyId": "a8" - }, - "aaxads.com": { - "name": "Acceptable Ads Exchange", - "categoryId": 4, - "url": "https://aax.media/", - "companyId": null - }, - "ab_tasty": { - "name": "AB Tasty", - "categoryId": 6, - "url": "https://en.abtasty.com", - "companyId": "ab_tasty" - }, - "abc": { - "name": "Australian Broadcasting Corporation", - "categoryId": 8, - "url": "https://www.abc.net.au/", - "companyId": "australian_government", - "source": "AdGuard" - }, - "ablida": { - "name": "ablida", - "categoryId": 4, - "url": "https://www.ablida.de/", - "companyId": null - }, - "accelia": { - "name": "Accelia", - "categoryId": 4, - "url": "http://www.durasite.net/", - "companyId": "accelia" - }, - "accengage": { - "name": "Accengage", - "categoryId": 4, - "url": "https://www.accengage.com/", - "companyId": "accengage" - }, - "accessanalyzer": { - "name": "AccessAnalyzer", - "categoryId": 6, - "url": "http://ax.xrea.com/", - "companyId": "accessanalyzer" - }, - "accesstrade": { - "name": "AccessTrade", - "categoryId": 4, - "url": "http://accesstrade.net/", - "companyId": "accesstrade" - }, - "accord_group": { - "name": "Accord Group", - "categoryId": 4, - "url": "http://www.accordgroup.co.uk/", - "companyId": "accord_group" - }, - "accordant_media": { - "name": "Accordant Media", - "categoryId": 4, - "url": "http://www.accordantmedia.com/", - "companyId": "accordant_media" - }, - "accuen_media": { - "name": "Accuen Media", - "categoryId": 4, - "url": "http://www.accuenmedia.com/", - "companyId": "accuen_media" - }, - "acestream.net": { - "name": "ActStream", - "categoryId": 12, - "url": "http://www.acestream.org/", - "companyId": null - }, - "acint.net": { - "name": "Artificial Computation Intelligence", - "categoryId": 6, - "url": "https://www.acint.net/", - "companyId": "acint" - }, - "acloudimages": { - "name": "Acloudimages", - "categoryId": 4, - "url": "http://adsterra.com", - "companyId": "adsterra" - }, - "acpm.fr": { - "name": "ACPM", - "categoryId": 6, - "url": "http://www.acpm.fr/", - "companyId": null - }, - "acquia.com": { - "name": "Acquia", - "categoryId": 6, - "url": "https://www.acquia.com/", - "companyId": null - }, - "acrweb": { - "name": "ACRWEB", - "categoryId": 7, - "url": "http://www.ziyu.net/", - "companyId": "acrweb" - }, - "actionpay": { - "name": "actionpay", - "categoryId": 4, - "url": "http://actionpay.ru/", - "companyId": "actionpay" - }, - "active_agent": { - "name": "Active Agent", - "categoryId": 4, - "url": "http://www.active-agent.com/", - "companyId": "active_agent" - }, - "active_campaign": { - "name": "Active Campaign", - "categoryId": 6, - "url": "https://www.activecampaign.com", - "companyId": "active_campaign" - }, - "active_performance": { - "name": "Active Performance", - "categoryId": 4, - "url": "http://www.active-performance.de/", - "companyId": "active_performance" - }, - "activeconversion": { - "name": "ActiveConversion", - "categoryId": 4, - "url": "http://www.activeconversion.com/", - "companyId": "activeconversion" - }, - "activecore": { - "name": "activecore", - "categoryId": 6, - "url": "http://activecore.jp/", - "companyId": "activecore" - }, - "activemeter": { - "name": "ActiveMeter", - "categoryId": 4, - "url": "http://www.activemeter.com/", - "companyId": "activeconversion" - }, - "activengage": { - "name": "ActivEngage", - "categoryId": 2, - "url": "http://www.activengage.com", - "companyId": "activengage" - }, - "acton": { - "name": "Act-On Beacon", - "categoryId": 4, - "url": "http://www.actonsoftware.com/", - "companyId": "act-on" - }, - "acuity_ads": { - "name": "Acuity Ads", - "categoryId": 4, - "url": "http://www.acuityads.com/", - "companyId": "acuity_ads" - }, - "acxiom": { - "name": "Acxiom", - "categoryId": 4, - "url": "http://www.acxiom.com", - "companyId": "acxiom" - }, - "ad-blocker.org": { - "name": "ad-blocker.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-center": { - "name": "Ad-Center", - "categoryId": 6, - "url": "http://www.ad-center.com", - "companyId": "ad-center" - }, - "ad-delivery.net": { - "name": "ad-delivery.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ad-sys": { - "name": "Ad-Sys", - "categoryId": 4, - "url": "http://www.ad-sys.com/", - "companyId": "ad-sys" - }, - "ad.agio": { - "name": "Ad.agio", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "ad2click": { - "name": "Ad2Click", - "categoryId": 4, - "url": "http://www.ad2click.com/", - "companyId": "ad2click_media" - }, - "ad2games": { - "name": "ad2games", - "categoryId": 4, - "url": "http://web.ad2games.com/", - "companyId": "ad2games" - }, - "ad360": { - "name": "Ad360", - "categoryId": 4, - "url": "http://ad360.vn", - "companyId": "ad360" - }, - "ad4game": { - "name": "ad4game", - "categoryId": 4, - "url": "http://www.ad4game.com/", - "companyId": "ad4game" - }, - "ad4mat": { - "name": "ad4mat", - "categoryId": 4, - "url": "http://ad4mat.info", - "companyId": "ad4mat" - }, - "ad6media": { - "name": "ad6media", - "categoryId": 4, - "url": "https://www.ad6media.fr/", - "companyId": "ad6media" - }, - "ad_decisive": { - "name": "Ad Decisive", - "categoryId": 4, - "url": "http://www.lagardere-global-advertising.com/", - "companyId": "lagardere_advertising" - }, - "ad_dynamo": { - "name": "Ad Dynamo", - "categoryId": 4, - "url": "http://www.addynamo.com/", - "companyId": "ad_dynamo" - }, - "ad_ebis": { - "name": "AD EBiS", - "categoryId": 4, - "url": "http://www.ebis.ne.jp/en/", - "companyId": "ad_ebis" - }, - "ad_lightning": { - "name": "Ad Lightning", - "categoryId": 4, - "url": "https://www.adlightning.com/", - "companyId": "ad_lightning" - }, - "ad_magnet": { - "name": "Ad Magnet", - "categoryId": 4, - "url": "http://www.admagnet.com/", - "companyId": "ad_magnet" - }, - "ad_spirit": { - "name": "Ad Spirit", - "categoryId": 4, - "url": "http://www.adspirit.de", - "companyId": "adspirit" - }, - "adac_de": { - "name": "adac.de", - "categoryId": 8, - "url": "http://adac.de/", - "companyId": null - }, - "adacado": { - "name": "Adacado", - "categoryId": 4, - "url": "http://www.adacado.com/", - "companyId": "adacado" - }, - "adadyn": { - "name": "Adadyn", - "categoryId": 4, - "url": "http://ozonemedia.com/index.html", - "companyId": "adadyn" - }, - "adality_gmbh": { - "name": "adality GmbH", - "categoryId": 4, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "adalliance.io": { - "name": "Ad Alliance", - "categoryId": 4, - "url": "https://www.ad-alliance.de/", - "companyId": null - }, - "adalyser.com": { - "name": "Adalyser", - "categoryId": 6, - "url": "https://www.adalyser.com/", - "companyId": "onesoon" - }, - "adaos": { - "name": "ADAOS", - "categoryId": 4, - "url": "http://www.24-interactive.com", - "companyId": "24_interactive" - }, - "adap.tv": { - "name": "Adap.tv", - "categoryId": 4, - "url": "http://www.adap.tv/", - "companyId": "verizon" - }, - "adaptiveblue_smartlinks": { - "name": "AdaptiveBlue SmartLinks", - "categoryId": 2, - "url": "http://www.adaptiveblue.com/smartlinks.html", - "companyId": "telfie" - }, - "adara_analytics": { - "name": "ADARA Analytics", - "categoryId": 4, - "url": "http://www.adaramedia.com/", - "companyId": "adara_analytics" - }, - "adasia_holdings": { - "name": "AdAsia Holdings", - "categoryId": 4, - "url": "https://adasiaholdings.com/", - "companyId": "adasia_holdings" - }, - "adbetclickin.pink": { - "name": "adbetnet", - "categoryId": 4, - "url": "http://adbetnet.com/", - "companyId": null - }, - "adbetnet.com": { - "name": "adbetnet", - "categoryId": 4, - "url": "https://adbetnet.com/", - "companyId": null - }, - "adblade.com": { - "name": "Adblade", - "categoryId": 4, - "url": "https://adblade.com/", - "companyId": "adblade" - }, - "adbooth": { - "name": "Adbooth", - "categoryId": 4, - "url": "http://www.adbooth.com/", - "companyId": "adbooth_media_group" - }, - "adbox": { - "name": "AdBox", - "categoryId": 4, - "url": "http://www.adbox.lv/", - "companyId": "adbox" - }, - "adbrain": { - "name": "Adbrain", - "categoryId": 6, - "url": "https://www.adbrain.com/", - "companyId": "adbrain" - }, - "adbrite": { - "name": "AdBrite", - "categoryId": 4, - "url": "http://www.adbrite.com/", - "companyId": "centro" - }, - "adbull": { - "name": "AdBull", - "categoryId": 4, - "url": "http://www.adbull.com/", - "companyId": "adbull" - }, - "adbutler": { - "name": "AdButler", - "categoryId": 4, - "url": "https://www.adbutler.com/d", - "companyId": "sparklit_networks" - }, - "adc_media": { - "name": "ad:C media", - "categoryId": 4, - "url": "http://www.adcmedia.de/en/", - "companyId": "ad:c_media" - }, - "adcash": { - "name": "Adcash", - "categoryId": 4, - "url": "http://www.adcash.com", - "companyId": "adcash" - }, - "adchakra": { - "name": "AdChakra", - "categoryId": 6, - "url": "http://adchakra.com/", - "companyId": "adchakra" - }, - "adchina": { - "name": "AdChina", - "categoryId": 4, - "url": "http://www.adchina.com/", - "companyId": null, - "source": "AdGuard" - }, - "adcito": { - "name": "Adcito", - "categoryId": 4, - "url": "http://adcito.com/", - "companyId": "adcito" - }, - "adclear": { - "name": "AdClear", - "categoryId": 4, - "url": "http://www.adclear.de/en/home.html", - "companyId": "adclear" - }, - "adclerks": { - "name": "Adclerks", - "categoryId": 4, - "url": "https://adclerks.com/", - "companyId": "adclerks" - }, - "adclickmedia": { - "name": "AdClickMedia", - "categoryId": 4, - "url": "http://www.adclickmedia.com/", - "companyId": "adclickmedia" - }, - "adclickzone": { - "name": "AdClickZone", - "categoryId": 4, - "url": "http://www.adclickzone.com/", - "companyId": "adclickzone" - }, - "adcloud": { - "name": "adcloud", - "categoryId": 4, - "url": "https://ad-cloud.jp", - "companyId": "adcloud" - }, - "adcolony": { - "name": "AdColony", - "categoryId": 4, - "url": "https://www.adcolony.com/history-of-adcolony/", - "companyId": "digital_turbine", - "source": "AdGuard" - }, - "adconion": { - "name": "Adconion", - "categoryId": 4, - "url": "http://www.adconion.com/", - "companyId": "singtel" - }, - "adcrowd": { - "name": "Adcrowd", - "categoryId": 4, - "url": "https://www.adcrowd.com", - "companyId": "adcrowd" - }, - "adcurve": { - "name": "AdCurve", - "categoryId": 4, - "url": "http://www.shop2market.com/", - "companyId": "adcurve" - }, - "add_to_calendar": { - "name": "Add To Calendar", - "categoryId": 2, - "url": "http://addtocalendar.com/", - "companyId": "addtocalendar" - }, - "addaptive": { - "name": "Addaptive", - "categoryId": 4, - "url": "http://www.datapointmedia.com/", - "companyId": "addaptive" - }, - "addefend": { - "name": "AdDefend", - "categoryId": 4, - "url": "https://www.addefend.com/", - "companyId": null - }, - "addfreestats": { - "name": "AddFreeStats", - "categoryId": 6, - "url": "http://www.addfreestats.com/", - "companyId": "3dstats" - }, - "addinto": { - "name": "AddInto", - "categoryId": 2, - "url": "http://www.addinto.com/", - "companyId": "addinto" - }, - "addshoppers": { - "name": "AddShoppers", - "categoryId": 7, - "url": "http://www.addshoppers.com/", - "companyId": "addshoppers" - }, - "addthis": { - "name": "AddThis", - "categoryId": 4, - "url": "http://www.addthis.com/", - "companyId": "oracle" - }, - "addvalue": { - "name": "Addvalue", - "categoryId": 6, - "url": "http://www.addvalue.de/en/", - "companyId": "addvalue.de" - }, - "addyon": { - "name": "AddyON", - "categoryId": 4, - "url": "http://www.addyon.com/homepage.php", - "companyId": "addyon" - }, - "adeasy": { - "name": "AdEasy", - "categoryId": 4, - "url": "http://www.adeasy.ru/", - "companyId": "adeasy" - }, - "adelphic": { - "name": "Adelphic", - "categoryId": 6, - "url": "http://www.adelphic.com/", - "companyId": "adelphic" - }, - "adengage": { - "name": "AdEngage", - "categoryId": 4, - "url": "http://www.adengage.com", - "companyId": "synacor" - }, - "adespresso": { - "name": "AdEspresso", - "categoryId": 4, - "url": "http://adespresso.com", - "companyId": "adespresso" - }, - "adexcite": { - "name": "AdExcite", - "categoryId": 4, - "url": "http://adexcite.com", - "companyId": "adexcite" - }, - "adextent": { - "name": "AdExtent", - "categoryId": 4, - "url": "http://www.adextent.com/", - "companyId": "adextent" - }, - "adf.ly": { - "name": "AdF.ly", - "categoryId": 4, - "url": "http://adf.ly/", - "companyId": "adf.ly" - }, - "adfalcon": { - "name": "AdFalcon", - "categoryId": 4, - "url": "http://www.adfalcon.com/", - "companyId": "adfalcon" - }, - "adfocus": { - "name": "AdFocus", - "categoryId": 4, - "url": "http://adfoc.us/", - "companyId": "adfoc.us" - }, - "adforgames": { - "name": "AdForGames", - "categoryId": 4, - "url": "http://www.adforgames.com/", - "companyId": "adforgames" - }, - "adform": { - "name": "Adform", - "categoryId": 4, - "url": "http://www.adform.com", - "companyId": "adform" - }, - "adfox": { - "name": "AdFox", - "categoryId": 4, - "url": "http://adfox.ru", - "companyId": "yandex" - }, - "adfreestyle": { - "name": "adFreestyle", - "categoryId": 4, - "url": "http://www.adfreestyle.pl/", - "companyId": "adfreestyle" - }, - "adfront": { - "name": "AdFront", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "adfrontiers": { - "name": "AdFrontiers", - "categoryId": 4, - "url": "http://www.adfrontiers.com/", - "companyId": "adfrontiers" - }, - "adgear": { - "name": "AdGear", - "categoryId": 4, - "url": "http://adgear.com/", - "companyId": "samsung" - }, - "adgebra": { - "name": "Adgebra", - "categoryId": 4, - "url": "https://adgebra.in/", - "companyId": "adgebra" - }, - "adgenie": { - "name": "adGENIE", - "categoryId": 4, - "url": "http://www.adgenie.co.uk/", - "companyId": "ve" - }, - "adgile": { - "name": "Adgile", - "categoryId": 4, - "url": "http://www.adgile.com/", - "companyId": "adgile_media" - }, - "adglare.net": { - "name": "Adglare", - "categoryId": 4, - "url": "https://www.adglare.com/", - "companyId": null - }, - "adglue": { - "name": "Adglue", - "categoryId": 4, - "url": "http://admans.de/de.html", - "companyId": "admans" - }, - "adgoal": { - "name": "adgoal", - "categoryId": 4, - "url": "http://www.adgoal.de/", - "companyId": "adgoal" - }, - "adgorithms": { - "name": "Adgorithms", - "categoryId": 4, - "url": "http://www.adgorithms.com/", - "companyId": "albert" - }, - "adgoto": { - "name": "ADGoto", - "categoryId": 4, - "url": "http://adgoto.com/", - "companyId": "adgoto" - }, - "adguard": { - "name": "AdGuard", - "categoryId": 8, - "url": "https://adguard.com/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adguard_dns": { - "name": "AdGuard DNS", - "categoryId": 8, - "url": "https://adguard-dns.io/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adguard_vpn": { - "name": "AdGuard VPN", - "categoryId": 8, - "url": "https://adguard-vpn.com/", - "companyId": "adguard", - "source": "AdGuard" - }, - "adhands": { - "name": "AdHands", - "categoryId": 4, - "url": "http://promo.adhands.ru/", - "companyId": "adhands" - }, - "adhese": { - "name": "Adhese", - "categoryId": 4, - "url": "http://adhese.com", - "companyId": "adhese" - }, - "adhitz": { - "name": "AdHitz", - "categoryId": 4, - "url": "http://www.adhitz.com/", - "companyId": "adhitz" - }, - "adhood": { - "name": "adhood", - "categoryId": 4, - "url": "http://www.adhood.com/", - "companyId": "adhood" - }, - "adify": { - "name": "Adify", - "categoryId": 4, - "url": "http://www.adify.com/", - "companyId": "cox_enterpries" - }, - "adikteev": { - "name": "Adikteev", - "categoryId": 4, - "url": "http://www.adikteev.com/", - "companyId": "adikteev" - }, - "adimpact": { - "name": "Adimpact", - "categoryId": 4, - "url": "http://www.adimpact.com/", - "companyId": "adimpact" - }, - "adinch": { - "name": "Adinch", - "categoryId": 4, - "url": "http://adinch.com/", - "companyId": "adinch" - }, - "adition": { - "name": "Adition", - "categoryId": 4, - "url": "http://en.adition.com/", - "companyId": "prosieben_sat1" - }, - "adjal": { - "name": "Adjal", - "categoryId": 4, - "url": "http://adjal.com/", - "companyId": "marketing_adjal" - }, - "adjs": { - "name": "ADJS", - "categoryId": 4, - "url": "https://github.com/widgital/adjs", - "companyId": "adjs" - }, - "adjug": { - "name": "AdJug", - "categoryId": 4, - "url": "http://www.adjug.com/", - "companyId": "adjug" - }, - "adjust": { - "name": "Adjust GmbH", - "categoryId": 101, - "url": "https://www.adjust.com/", - "companyId": "applovin", - "source": "AdGuard" - }, - "adk2": { - "name": "adk2", - "categoryId": 4, - "url": "http://www.adk2.com/", - "companyId": "adk2_plymedia" - }, - "adklip": { - "name": "adklip", - "categoryId": 4, - "url": "http://adklip.com", - "companyId": "adklip" - }, - "adknowledge": { - "name": "Adknowledge", - "categoryId": 4, - "url": "http://www.adknowledge.com/", - "companyId": "adknowledge" - }, - "adkontekst": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://www.en.adkontekst.pl/", - "companyId": "adkontekst" - }, - "adkontekst.pl": { - "name": "Adkontekst", - "categoryId": 4, - "url": "http://netsprint.eu/", - "companyId": "netsprint" - }, - "adlabs": { - "name": "AdLabs", - "categoryId": 4, - "url": "https://www.adlabs.ru/", - "companyId": "adlabs" - }, - "adlantic": { - "name": "AdLantic", - "categoryId": 4, - "url": "http://www.adlantic.nl/", - "companyId": "adlantic_online_advertising" - }, - "adlantis": { - "name": "AdLantis", - "categoryId": 4, - "url": "http://www.adlantis.jp/", - "companyId": "adlantis" - }, - "adless": { - "name": "Adless", - "categoryId": 4, - "url": "https://www.adless.io/", - "companyId": "adless" - }, - "adlive_header_bidding": { - "name": "Adlive Header Bidding", - "categoryId": 4, - "url": "http://adlive.io/", - "companyId": "adlive" - }, - "adloox": { - "name": "Adloox", - "categoryId": 4, - "url": "http://www.adloox.com", - "companyId": "adloox" - }, - "admachine": { - "name": "AdMachine", - "categoryId": 4, - "url": "https://admachine.co/", - "companyId": null - }, - "adman": { - "name": "ADMAN", - "categoryId": 4, - "url": "http://www.adman.gr/", - "companyId": "adman" - }, - "adman_media": { - "name": "ADman Media", - "categoryId": 4, - "url": "http://www.admanmedia.com/", - "companyId": "ad_man_media" - }, - "admantx.com": { - "name": "ADmantX", - "categoryId": 4, - "url": "http://www.admantx.com/", - "companyId": "expert_system_spa" - }, - "admaster": { - "name": "AdMaster", - "categoryId": 4, - "url": "http://admaster.net", - "companyId": "admaster" - }, - "admaster.cn": { - "name": "AdMaster.cn", - "categoryId": 4, - "url": "http://www.admaster.com.cn/", - "companyId": "admaster" - }, - "admatic": { - "name": "Admatic", - "categoryId": 4, - "url": "http://www.admatic.com.tr/#1page", - "companyId": "admatic" - }, - "admatrix": { - "name": "Admatrix", - "categoryId": 4, - "url": "https://admatrix.jp/login#block01", - "companyId": "admatrix" - }, - "admax": { - "name": "Admax", - "categoryId": 4, - "url": "http://www.admaxnetwork.com/index.php", - "companyId": "komli" - }, - "admaxim": { - "name": "AdMaxim", - "categoryId": 4, - "url": "http://admaxim.com/", - "companyId": "admaxim" - }, - "admaya": { - "name": "Admaya", - "categoryId": 4, - "url": "http://www.admaya.in/", - "companyId": "admaya" - }, - "admedia": { - "name": "AdMedia", - "categoryId": 4, - "url": "http://admedia.com/", - "companyId": "admedia" - }, - "admedo_com": { - "name": "Admedo", - "categoryId": 4, - "url": "http://admedo.com/", - "companyId": "admedo" - }, - "admeira.ch": { - "name": "AdMeira", - "categoryId": 4, - "url": "http://admeira.ch/", - "companyId": "admeira" - }, - "admeld": { - "name": "AdMeld", - "categoryId": 4, - "url": "http://www.admeld.com", - "companyId": "google" - }, - "admeo": { - "name": "Admeo", - "categoryId": 4, - "url": "http://admeo.ru/", - "companyId": "admeo.ru" - }, - "admeta": { - "name": "Admeta", - "categoryId": 4, - "url": "http://www.admeta.com/", - "companyId": "admeta" - }, - "admicro": { - "name": "AdMicro", - "categoryId": 4, - "url": "http://www.admicro.vn/", - "companyId": "admicro" - }, - "admitad.com": { - "name": "Admitad", - "categoryId": 4, - "url": "https://www.admitad.com/en/#", - "companyId": "admitad" - }, - "admixer": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.com/", - "companyId": "admixer", - "source": "AdGuard" - }, - "admixer.net": { - "name": "Admixer", - "categoryId": 4, - "url": "https://admixer.net/", - "companyId": "admixer" - }, - "admized": { - "name": "ADMIZED", - "categoryId": 8, - "url": null, - "companyId": null - }, - "admo.tv": { - "name": "Admo.tv", - "categoryId": 4, - "url": "https://admo.tv/", - "companyId": "admo.tv" - }, - "admob": { - "name": "AdMob", - "categoryId": 4, - "url": "http://www.admob.com/", - "companyId": "google" - }, - "admost": { - "name": "adMOST", - "categoryId": 4, - "url": "http://www.admost.com/", - "companyId": "admost" - }, - "admotion": { - "name": "Admotion", - "categoryId": 4, - "url": "http://www.admotionus.com/", - "companyId": "admotion" - }, - "admulti": { - "name": "ADmulti", - "categoryId": 4, - "url": "http://admulti.com", - "companyId": "admulti" - }, - "adnegah": { - "name": "Adnegah", - "categoryId": 4, - "url": "https://adnegah.net/", - "companyId": "adnegah" - }, - "adnet": { - "name": "Adnet", - "categoryId": 4, - "url": "http://www.adnet.vn/", - "companyId": "adnet" - }, - "adnet.de": { - "name": "adNET.de", - "categoryId": 4, - "url": "http://www.adnet.de", - "companyId": "adnet.de" - }, - "adnet_media": { - "name": "Adnet Media", - "categoryId": 4, - "url": "http://www.adnetmedia.lt/", - "companyId": "adnet_media" - }, - "adnetwork.net": { - "name": "AdNetwork.net", - "categoryId": 4, - "url": "http://www.adnetwork.net/", - "companyId": "adnetwork.net" - }, - "adnetworkperformance.com": { - "name": "adnetworkperformance.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adnexio": { - "name": "AdNexio", - "categoryId": 4, - "url": "http://adnexio.com/", - "companyId": "adnexio" - }, - "adnium.com": { - "name": "Adnium", - "categoryId": 4, - "url": "https://adnium.com/", - "companyId": null - }, - "adnologies": { - "name": "Adnologies", - "categoryId": 4, - "url": "http://www.adnologies.com/", - "companyId": "adnologies_gmbh" - }, - "adnow": { - "name": "Adnow", - "categoryId": 4, - "url": "http://adnow.com/", - "companyId": "adnow" - }, - "adnymics": { - "name": "Adnymics", - "categoryId": 4, - "url": "http://adnymics.com/en/", - "companyId": "adnymics" - }, - "adobe_audience_manager": { - "name": "Adobe Audience Manager", - "categoryId": 4, - "url": "http://www.demdex.com/", - "companyId": "adobe" - }, - "adobe_developer": { - "name": "Adobe Developer", - "categoryId": 8, - "url": "https://developer.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_dynamic_media": { - "name": "Adobe Dynamic Media", - "categoryId": 4, - "url": "http://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_dynamic_tag_management": { - "name": "Adobe Dynamic Tag Management", - "categoryId": 5, - "url": "https://dtm.adobe.com/sign_in", - "companyId": "adobe" - }, - "adobe_experience_cloud": { - "name": "Adobe Experience Cloud", - "categoryId": 6, - "url": "https://business.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_experience_league": { - "name": "Adobe Experience League", - "categoryId": 6, - "url": "https://experienceleague.adobe.com/", - "companyId": "adobe", - "source": "AdGuard" - }, - "adobe_login": { - "name": "Adobe Login", - "categoryId": 2, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_tagmanager": { - "name": "Adobe TagManager", - "categoryId": 4, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adobe_test_and_target": { - "name": "Adobe Target", - "categoryId": 4, - "url": "https://www.adobe.com/marketing/target.html", - "companyId": "adobe" - }, - "adobe_typekit": { - "name": "Adobe Typekit", - "categoryId": 5, - "url": "https://www.adobe.com/", - "companyId": "adobe" - }, - "adocean": { - "name": "AdOcean", - "categoryId": 4, - "url": "http://adocean.cz/en", - "companyId": "adocean" - }, - "adometry": { - "name": "Adometry", - "categoryId": 4, - "url": "http://www.adometry.com/", - "companyId": "google" - }, - "adomik": { - "name": "Adomik", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adon_network": { - "name": "AdOn Network", - "categoryId": 4, - "url": "http://www.adonnetwork.com/", - "companyId": "adon_network" - }, - "adonion": { - "name": "AdOnion", - "categoryId": 4, - "url": "http://www.adonion.com/", - "companyId": "adonion" - }, - "adonly": { - "name": "AdOnly", - "categoryId": 4, - "url": "https://gloadmarket.com/", - "companyId": "adonly" - }, - "adoperator": { - "name": "AdOperator", - "categoryId": 4, - "url": "http://www.adoperator.com/start/", - "companyId": "adoperator" - }, - "adoric": { - "name": "Adoric", - "categoryId": 6, - "url": "https://adoric.com/", - "companyId": "adoric" - }, - "adorika": { - "name": "Adorika", - "categoryId": 4, - "url": "http://www.adorika.com/", - "companyId": "adorika" - }, - "adosia": { - "name": "Adosia", - "categoryId": 4, - "url": "https://adosia.com", - "companyId": "adosia" - }, - "adotmob.com": { - "name": "Adotmob", - "categoryId": 4, - "url": "https://adotmob.com/", - "companyId": "adotmob" - }, - "adotube": { - "name": "AdoTube", - "categoryId": 4, - "url": "http://www.adotube.com", - "companyId": "exponential_interactive" - }, - "adparlor": { - "name": "AdParlor", - "categoryId": 4, - "url": "http://www.adparlor.com/", - "companyId": "fluent" - }, - "adpartner": { - "name": "adpartner", - "categoryId": 4, - "url": "http://adpartner.pro/", - "companyId": "adpartner" - }, - "adpeeps": { - "name": "Ad Peeps", - "categoryId": 4, - "url": "http://www.adpeeps.com/", - "companyId": "ad_peeps" - }, - "adperfect": { - "name": "AdPerfect", - "categoryId": 4, - "url": "http://www.adperfect.com/", - "companyId": "adperfect" - }, - "adperium": { - "name": "AdPerium", - "categoryId": 4, - "url": "http://www.adperium.com/", - "companyId": "adperium" - }, - "adpilot": { - "name": "AdPilot", - "categoryId": 4, - "url": "http://www.adpilotgroup.com/", - "companyId": "adpilot" - }, - "adplan": { - "name": "AdPlan", - "categoryId": 4, - "url": "http://www.adplan.ne.jp/", - "companyId": "adplan" - }, - "adplus": { - "name": "ADPLUS", - "categoryId": 4, - "url": "http://www.adplus.co.id/", - "companyId": "adplus" - }, - "adprofex": { - "name": "AdProfex", - "categoryId": 4, - "url": "https://adprofex.com/", - "companyId": "adprofex", - "source": "AdGuard" - }, - "adprofy": { - "name": "AdProfy", - "categoryId": 4, - "url": "http://adprofy.com/", - "companyId": "adprofy" - }, - "adpulse": { - "name": "AdPulse", - "categoryId": 4, - "url": "http://adpulse.ir/", - "companyId": "adpulse.ir" - }, - "adpv": { - "name": "Adpv", - "categoryId": 4, - "url": "http://www.adpv.com/", - "companyId": "adpv" - }, - "adreactor": { - "name": "AdReactor", - "categoryId": 4, - "url": "http://www.adreactor.com/", - "companyId": "adreactor" - }, - "adrecord": { - "name": "Adrecord", - "categoryId": 4, - "url": "http://www.adrecord.com/", - "companyId": "adrecord" - }, - "adrecover": { - "name": "AdRecover", - "categoryId": 4, - "url": "https://www.adrecover.com/", - "companyId": "adpushup" - }, - "adresult": { - "name": "ADResult", - "categoryId": 4, - "url": "http://www.adresult.jp/", - "companyId": "adresult" - }, - "adriver": { - "name": "AdRiver", - "categoryId": 4, - "url": "http://www.adriver.ru/", - "companyId": "ad_river" - }, - "adroll": { - "name": "AdRoll", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_pixel": { - "name": "AdRoll Pixel", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adroll_roundtrip": { - "name": "AdRoll Roundtrip", - "categoryId": 4, - "url": "https://www.adroll.com/", - "companyId": "adroll" - }, - "adrom": { - "name": "adRom", - "categoryId": 4, - "url": "http://www.adrom.net/", - "companyId": null - }, - "adru.net": { - "name": "adru.net", - "categoryId": 4, - "url": "http://adru.net/", - "companyId": "adru.net" - }, - "adrunnr": { - "name": "AdRunnr", - "categoryId": 4, - "url": "https://adrunnr.com/", - "companyId": "adrunnr" - }, - "adsame": { - "name": "Adsame", - "categoryId": 4, - "url": "http://adsame.com/", - "companyId": "adsame" - }, - "adsbookie": { - "name": "AdsBookie", - "categoryId": 4, - "url": "http://adsbookie.com/", - "companyId": null - }, - "adscale": { - "name": "AdScale", - "categoryId": 4, - "url": "http://www.adscale.de/", - "companyId": "stroer" - }, - "adscience": { - "name": "Adscience", - "categoryId": 4, - "url": "http://www.adscience.nl/", - "companyId": "adscience" - }, - "adsco.re": { - "name": "Adscore", - "categoryId": 4, - "url": "https://www.adscore.com/", - "companyId": null - }, - "adsensecamp": { - "name": "AdsenseCamp", - "categoryId": 4, - "url": "http://adsensecamp.com", - "companyId": "adsensecamp" - }, - "adserverpub": { - "name": "AdServerPub", - "categoryId": 4, - "url": "http://www.adserverpub.com/", - "companyId": "adserverpub" - }, - "adservice_media": { - "name": "Adservice Media", - "categoryId": 4, - "url": "http://www.adservicemedia.com/", - "companyId": "adservice_media" - }, - "adsfactor": { - "name": "Adsfactor", - "categoryId": 4, - "url": "http://www.adsfactor.com/", - "companyId": "pixels_asia" - }, - "adside": { - "name": "AdSide", - "categoryId": 4, - "url": "http://www.adside.com/", - "companyId": "adside" - }, - "adskeeper": { - "name": "AdsKeeper", - "categoryId": 4, - "url": "http://adskeeper.co.uk/", - "companyId": "adskeeper" - }, - "adskom": { - "name": "ADSKOM", - "categoryId": 4, - "url": "http://adskom.com/", - "companyId": "adskom" - }, - "adslot": { - "name": "Adslot", - "categoryId": 4, - "url": "http://www.adslot.com/", - "companyId": "adslot" - }, - "adsnative": { - "name": "adsnative", - "categoryId": 4, - "url": "http://www.adsnative.com/", - "companyId": "adsnative" - }, - "adsniper.ru": { - "name": "AdSniper", - "categoryId": 4, - "url": "http://ad-sniper.com/", - "companyId": "adsniper" - }, - "adspeed": { - "name": "AdSpeed", - "categoryId": 4, - "url": "http://www.adspeed.com/", - "companyId": "adspeed" - }, - "adspyglass": { - "name": "AdSpyglass", - "categoryId": 4, - "url": "https://www.adspyglass.com/", - "companyId": "adspyglass" - }, - "adstage": { - "name": "AdStage", - "categoryId": 4, - "url": "http://www.adstage.io/", - "companyId": "adstage" - }, - "adstanding": { - "name": "AdStanding", - "categoryId": 4, - "url": "http://www.adstanding.com/en/", - "companyId": "adstanding" - }, - "adstars": { - "name": "Adstars", - "categoryId": 4, - "url": "http://adstars.co.id", - "companyId": "adstars" - }, - "adstir": { - "name": "adstir", - "categoryId": 4, - "url": "https://en.ad-stir.com/", - "companyId": "united_inc" - }, - "adsupply": { - "name": "AdSupply", - "categoryId": 4, - "url": "http://www.adsupply.com/", - "companyId": "adsupply" - }, - "adswizz": { - "name": "AdsWizz", - "categoryId": 4, - "url": "http://www.adswizz.com/", - "companyId": "adswizz" - }, - "adtaily": { - "name": "AdTaily", - "categoryId": 4, - "url": "http://www.adtaily.pl/", - "companyId": "adtaily" - }, - "adtarget.me": { - "name": "Adtarget.me", - "categoryId": 4, - "url": "http://www.adtarget.me/", - "companyId": "adtarget.me" - }, - "adtech": { - "name": "ADTECH", - "categoryId": 6, - "url": "http://www.adtechus.com/", - "companyId": "verizon" - }, - "adtegrity": { - "name": "Adtegrity", - "categoryId": 4, - "url": "http://www.adtegrity.com/", - "companyId": "adtegrity" - }, - "adtelligence.de": { - "name": "Adtelligence", - "categoryId": 4, - "url": "https://adtelligence.com/", - "companyId": null - }, - "adtheorent": { - "name": "Adtheorent", - "categoryId": 4, - "url": "http://adtheorent.com/", - "companyId": "adtheorant" - }, - "adthink": { - "name": "Adthink", - "categoryId": 4, - "url": "https://adthink.com/", - "companyId": "adthink" - }, - "adtiger": { - "name": "AdTiger", - "categoryId": 4, - "url": "http://www.adtiger.de/", - "companyId": "adtiger" - }, - "adtima": { - "name": "Adtima", - "categoryId": 4, - "url": "http://adtima.vn/", - "companyId": "adtima" - }, - "adtng.com": { - "name": "adtng.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "adtoma": { - "name": "Adtoma", - "categoryId": 4, - "url": "http://www.adtoma.com/", - "companyId": "adtoma" - }, - "adtr02.com": { - "name": "adtr02.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "adtraction": { - "name": "Adtraction", - "categoryId": 4, - "url": "http://adtraction.com/", - "companyId": "adtraction" - }, - "adtraxx": { - "name": "AdTraxx", - "categoryId": 4, - "url": "https://www1.adtraxx.de/", - "companyId": "adtrax" - }, - "adtriba.com": { - "name": "AdTriba", - "categoryId": 6, - "url": "https://www.adtriba.com/", - "companyId": null - }, - "adtrue": { - "name": "Adtrue", - "categoryId": 4, - "url": "http://adtrue.com/", - "companyId": "adtrue" - }, - "adtrustmedia": { - "name": "AdTrustMedia", - "categoryId": 4, - "url": "https://adtrustmedia.com/", - "companyId": "adtrustmedia" - }, - "adtube": { - "name": "AdTube", - "categoryId": 4, - "url": "http://adtube.ir/", - "companyId": "adtube" - }, - "adult_webmaster_empire": { - "name": "Adult Webmaster Empire", - "categoryId": 3, - "url": "http://www.awempire.com/", - "companyId": "adult_webmaster_empire" - }, - "adultadworld": { - "name": "AdultAdWorld", - "categoryId": 3, - "url": "http://adultadworld.com/", - "companyId": "adult_adworld" - }, - "adup-tech.com": { - "name": "AdUp Technology", - "categoryId": 4, - "url": "https://www.adup-tech.com/", - "companyId": "adup_technology" - }, - "advaction": { - "name": "Advaction", - "categoryId": 4, - "url": "http://advaction.ru/", - "companyId": "advaction" - }, - "advalo": { - "name": "Advalo", - "categoryId": 4, - "url": "https://www.advalo.com", - "companyId": "advalo" - }, - "advanced_hosters": { - "name": "Advanced Hosters", - "categoryId": 9, - "url": "https://advancedhosters.com/", - "companyId": null - }, - "advark": { - "name": "Advark", - "categoryId": 4, - "url": "https://advarkads.com/", - "companyId": "advark" - }, - "adventori": { - "name": "ADventori", - "categoryId": 8, - "url": "https://www.adventori.com/", - "companyId": "adventori" - }, - "adverline": { - "name": "Adverline", - "categoryId": 4, - "url": "http://www.adverline.com/", - "companyId": "adverline" - }, - "adversal": { - "name": "Adversal", - "categoryId": 4, - "url": "https://www.adversal.com/", - "companyId": "adversal" - }, - "adverserve": { - "name": "adverServe", - "categoryId": 4, - "url": "http://www.adverserve.com/", - "companyId": "adverserve" - }, - "adverteerdirect": { - "name": "Adverteerdirect", - "categoryId": 4, - "url": "http://www.adverteerdirect.nl/", - "companyId": "adverteerdirect" - }, - "adverticum": { - "name": "Adverticum", - "categoryId": 4, - "url": "https://adverticum.net/english/", - "companyId": "adverticum" - }, - "advertise.com": { - "name": "Advertise.com", - "categoryId": 4, - "url": "http://advertise.com/", - "companyId": "advertise.com" - }, - "advertisespace": { - "name": "AdvertiseSpace", - "categoryId": 4, - "url": "http://www.advertisespace.com/", - "companyId": "advertisespace" - }, - "advertising.com": { - "name": "Verizon Media", - "categoryId": 4, - "url": "https://www.verizonmedia.com/", - "companyId": "verizon" - }, - "advertlets": { - "name": "Advertlets", - "categoryId": 4, - "url": "http://www.advertlets.com/", - "companyId": "advertlets" - }, - "advertserve": { - "name": "AdvertServe", - "categoryId": 4, - "url": "https://secure.advertserve.com/", - "companyId": "advertserve" - }, - "advidi": { - "name": "Advidi", - "categoryId": 4, - "url": "http://advidi.com/", - "companyId": "advidi" - }, - "advmaker.ru": { - "name": "advmaker.ru", - "categoryId": 4, - "url": "http://advmaker.ru/", - "companyId": "advmaker.ru" - }, - "advolution": { - "name": "Advolution", - "categoryId": 4, - "url": "http://www.advolution.de", - "companyId": "advolution" - }, - "adwebster": { - "name": "adwebster", - "categoryId": 4, - "url": "http://adwebster.com", - "companyId": "adwebster" - }, - "adwit": { - "name": "Adwit", - "categoryId": 4, - "url": "http://www.adwitserver.com", - "companyId": "adwit" - }, - "adworx.at": { - "name": "ADworx", - "categoryId": 4, - "url": "http://www.adworx.at/", - "companyId": "ors" - }, - "adworxs.net": { - "name": "adworxs.net", - "categoryId": 4, - "url": "http://www.adworxs.net/?lang=en", - "companyId": null - }, - "adxion": { - "name": "adXion", - "categoryId": 4, - "url": "http://www.adxion.com", - "companyId": "adxion" - }, - "adxpansion": { - "name": "AdXpansion", - "categoryId": 3, - "url": "http://www.adxpansion.com/", - "companyId": "adxpansion" - }, - "adxpose": { - "name": "AdXpose", - "categoryId": 4, - "url": "http://www.adxpose.com/home.page", - "companyId": "comscore" - }, - "adxprtz.com": { - "name": "adxprtz.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "adyoulike": { - "name": "Adyoulike", - "categoryId": 4, - "url": "http://www.adyoulike.com/", - "companyId": "adyoulike" - }, - "adzerk": { - "name": "Adzerk", - "categoryId": 4, - "url": "http://adzerk.com/", - "companyId": "adzerk" - }, - "adzly": { - "name": "adzly", - "categoryId": 4, - "url": "http://www.adzly.com/", - "companyId": "adzly" - }, - "aemediatraffic": { - "name": "Aemediatraffic", - "categoryId": 6, - "url": null, - "companyId": null - }, - "aerify_media": { - "name": "Aerify Media", - "categoryId": 4, - "url": "http://aerifymedia.com/", - "companyId": "aerify_media" - }, - "aeris_weather": { - "name": "Aeris Weather", - "categoryId": 2, - "url": "https://www.aerisweather.com/", - "companyId": "aerisweather" - }, - "affectv": { - "name": "Hybrid Theory", - "categoryId": 4, - "url": "https://hybridtheory.com/", - "companyId": "affectv" - }, - "affilbox": { - "name": "Affilbox", - "categoryId": 4, - "url": "https://affilbox.com/", - "companyId": "affilbox", - "source": "AdGuard" - }, - "affiliate-b": { - "name": "Affiliate-B", - "categoryId": 4, - "url": "https://www.affiliate-b.com/", - "companyId": "affiliate_b" - }, - "affiliate4you": { - "name": "Affiliate4You", - "categoryId": 4, - "url": "http://www.affiliate4you.nl/", - "companyId": "family_blend" - }, - "affiliatebuzz": { - "name": "AffiliateBuzz", - "categoryId": 4, - "url": "http://www.affiliatebuzz.com/", - "companyId": "affiliatebuzz" - }, - "affiliatefuture": { - "name": "AffiliateFuture", - "categoryId": 4, - "url": "http://www.affiliatefuture.com", - "companyId": "affiliatefuture" - }, - "affiliatelounge": { - "name": "AffiliateLounge", - "categoryId": 4, - "url": "http://www.affiliatelounge.com/", - "companyId": "betsson_group_affiliates" - }, - "affiliation_france": { - "name": "Affiliation France", - "categoryId": 4, - "url": "http://www.affiliation-france.com/", - "companyId": "affiliation-france" - }, - "affiliator": { - "name": "Affiliator", - "categoryId": 4, - "url": "http://www.affiliator.com/", - "companyId": "affiliator" - }, - "affiliaweb": { - "name": "Affiliaweb", - "categoryId": 4, - "url": "http://affiliaweb.fr/", - "companyId": "affiliaweb" - }, - "affilinet": { - "name": "affilinet", - "categoryId": 4, - "url": "https://www.affili.net/", - "companyId": "axel_springer" - }, - "affimax": { - "name": "AffiMax", - "categoryId": 4, - "url": "https://www.affimax.de", - "companyId": "affimax" - }, - "affinity": { - "name": "Affinity", - "categoryId": 4, - "url": "http://www.affinity.com/", - "companyId": "affinity" - }, - "affinity.by": { - "name": "Affinity.by", - "categoryId": 4, - "url": "http://affinity.by", - "companyId": "affinity_digital_agency" - }, - "affiz_cpm": { - "name": "Affiz CPM", - "categoryId": 4, - "url": "http://cpm.affiz.com/home", - "companyId": "affiz_cpm" - }, - "afftrack": { - "name": "Afftrack", - "categoryId": 6, - "url": "http://www.afftrack.com/", - "companyId": "afftrack" - }, - "afgr2.com": { - "name": "afgr2.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "afilio": { - "name": "Afilio", - "categoryId": 6, - "url": "http://afilio.com.br/", - "companyId": "afilio" - }, - "afs_analystics": { - "name": "AFS Analystics", - "categoryId": 6, - "url": "https://www.afsanalytics.com/", - "companyId": "afs_analytics" - }, - "aftonbladet_ads": { - "name": "Aftonbladet Ads", - "categoryId": 4, - "url": "http://annonswebb.aftonbladet.se/", - "companyId": "aftonbladet" - }, - "aftv-serving.bid": { - "name": "aftv-serving.bid", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aggregate_knowledge": { - "name": "Aggregate Knowledge", - "categoryId": 4, - "url": "http://www.aggregateknowledge.com/", - "companyId": "neustar" - }, - "agilone": { - "name": "AgilOne", - "categoryId": 6, - "url": "http://www.agilone.com/", - "companyId": "agilone" - }, - "agora": { - "name": "Agora", - "categoryId": 4, - "url": "https://www.agora.pl/", - "companyId": "agora_sa" - }, - "ahalogy": { - "name": "Ahalogy", - "categoryId": 7, - "url": "http://www.ahalogy.com/", - "companyId": "ahalogy" - }, - "ai_media_group": { - "name": "Ai Media Group", - "categoryId": 4, - "url": "http://aimediagroup.com/", - "companyId": "ai_media_group" - }, - "aidata": { - "name": "Aidata", - "categoryId": 4, - "url": "http://aidata.me/", - "companyId": "aidata" - }, - "aim4media": { - "name": "Aim4Media", - "categoryId": 4, - "url": "http://aim4media.com", - "companyId": "aim4media" - }, - "airbnb": { - "name": "Airbnb", - "categoryId": 6, - "url": "https://affiliate.withairbnb.com/", - "companyId": null - }, - "airbrake": { - "name": "Airbrake", - "categoryId": 4, - "url": "https://airbrake.io/", - "companyId": "airbrake" - }, - "airpr.com": { - "name": "AirPR", - "categoryId": 6, - "url": "https://airpr.com/", - "companyId": "airpr" - }, - "airpush": { - "name": "Airpush", - "categoryId": 4, - "url": "http://www.airpush.com/", - "companyId": "airpush" - }, - "akamai_technologies": { - "name": "Akamai Technologies", - "categoryId": 9, - "url": "https://www.akamai.com/", - "companyId": "akamai", - "source": "AdGuard" - }, - "akamoihd.net": { - "name": "akamoihd.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "akane": { - "name": "AkaNe", - "categoryId": 4, - "url": "http://akane-ad.com/", - "companyId": "akane" - }, - "akanoo": { - "name": "Akanoo", - "categoryId": 6, - "url": "http://www.akanoo.com/", - "companyId": "akanoo" - }, - "akavita": { - "name": "Akavita", - "categoryId": 4, - "url": "http://www.akavita.by/en", - "companyId": "akavita" - }, - "al_bawaba_advertising": { - "name": "Al Bawaba Advertising", - "categoryId": 4, - "url": "http://www.albawaba.com/advertising", - "companyId": "al_bawaba" - }, - "albacross": { - "name": "Albacross", - "categoryId": 4, - "url": "https://albacross.com", - "companyId": "albacross" - }, - "aldi-international.com": { - "name": "aldi-international.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "alenty": { - "name": "Alenty", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "alephd.com": { - "name": "alephd", - "categoryId": 4, - "url": "https://www.alephd.com/", - "companyId": "verizon" - }, - "alexa_metrics": { - "name": "Alexa Metrics", - "categoryId": 6, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "alexa_traffic_rank": { - "name": "Alexa Traffic Rank", - "categoryId": 4, - "url": "http://www.alexa.com/", - "companyId": "amazon_associates" - }, - "algolia.net": { - "name": "algolia", - "categoryId": 4, - "url": "https://www.algolia.com/", - "companyId": null - }, - "algovid.com": { - "name": "algovid.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "alibaba.com": { - "name": "Alibaba", - "categoryId": 8, - "url": "http://www.alibaba.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alibaba_cloud": { - "name": "Alibaba Cloud", - "categoryId": 10, - "url": "https://www.alibabacloud.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alibaba_ucbrowser": { - "name": "UC Browser", - "categoryId": 8, - "url": "https://ucweb.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alipay.com": { - "name": "Alipay", - "categoryId": 2, - "url": "https://global.alipay.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "alivechat": { - "name": "AliveChat", - "categoryId": 2, - "url": "http://www.websitealive.com/", - "companyId": "websitealive" - }, - "allegro.pl": { - "name": "Allegro", - "categoryId": 8, - "url": "https://allegro.pl", - "companyId": "allegro.pl" - }, - "allin": { - "name": "Allin", - "categoryId": 6, - "url": "http://allin.com.br/", - "companyId": "allin" - }, - "allo-pages.fr": { - "name": "Allo-Pages", - "categoryId": 2, - "url": "http://www.allo-pages.fr/", - "companyId": "links_lab" - }, - "allotraffic": { - "name": "AlloTraffic", - "categoryId": 4, - "url": "http://www.allotraffic.com/", - "companyId": "allotraffic" - }, - "allure_media": { - "name": "Allure Media", - "categoryId": 4, - "url": "http://www.alluremedia.com.au", - "companyId": "allure_media" - }, - "allyes": { - "name": "Allyes", - "categoryId": 4, - "url": "http://www.allyes.com/", - "companyId": "allyes" - }, - "alooma": { - "name": "Alooma", - "categoryId": 4, - "url": "https://www.alooma.com/", - "companyId": "alooma" - }, - "altitude_digital": { - "name": "Altitude Digital", - "categoryId": 4, - "url": "http://www.altitudedigital.com/", - "companyId": "altitude_digital" - }, - "amadesa": { - "name": "Amadesa", - "categoryId": 4, - "url": "http://www.amadesa.com/", - "companyId": "amadesa" - }, - "amap": { - "name": "Amap", - "categoryId": 2, - "url": "https://www.amap.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "amazon": { - "name": "Amazon.com", - "categoryId": 8, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_adsystem": { - "name": "Amazon Advertising", - "categoryId": 4, - "url": "https://advertising.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_associates": { - "name": "Amazon Associates", - "categoryId": 4, - "url": "http://aws.amazon.com/associates/", - "companyId": "amazon_associates" - }, - "amazon_cdn": { - "name": "Amazon CDN", - "categoryId": 9, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_cloudfront": { - "name": "Amazon CloudFront", - "categoryId": 10, - "url": "https://aws.amazon.com/cloudfront/?nc1=h_ls", - "companyId": "amazon_associates" - }, - "amazon_mobile_ads": { - "name": "Amazon Mobile Ads", - "categoryId": 4, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_payments": { - "name": "Amazon Payments", - "categoryId": 2, - "url": "https://pay.amazon.com/", - "companyId": "amazon_associates" - }, - "amazon_video": { - "name": "Amazon Instant Video", - "categoryId": 0, - "url": "https://www.amazon.com", - "companyId": "amazon_associates" - }, - "amazon_web_services": { - "name": "Amazon Web Services", - "categoryId": 10, - "url": "https://aws.amazon.com/", - "companyId": "amazon_associates" - }, - "ambient_digital": { - "name": "Ambient Digital", - "categoryId": 4, - "url": "http://www.adnetwork.vn/", - "companyId": "ambient_digital" - }, - "amgload.net": { - "name": "amgload.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "amoad": { - "name": "AMoAd", - "categoryId": 4, - "url": "http://www.amoad.com/", - "companyId": "amoad" - }, - "amobee": { - "name": "Amobee", - "categoryId": 4, - "url": "https://www.amobee.com/", - "companyId": "singtel" - }, - "amp_platform": { - "name": "AMP Platform", - "categoryId": 4, - "url": "http://www.collective.com/", - "companyId": "collective" - }, - "amplitude": { - "name": "Amplitude", - "categoryId": 6, - "url": "https://amplitude.com/", - "companyId": "amplitude" - }, - "ampproject.org": { - "name": "AMP Project", - "categoryId": 8, - "url": "https://www.ampproject.org/", - "companyId": "google" - }, - "anametrix": { - "name": "Anametrix", - "categoryId": 6, - "url": "http://anametrix.com/", - "companyId": "anametrix" - }, - "ancestry_cdn": { - "name": "Ancestry CDN", - "categoryId": 9, - "url": "https://www.ancestry.com/", - "companyId": "ancestry" - }, - "ancora": { - "name": "Ancora", - "categoryId": 6, - "url": "http://www.ancoramediasolutions.com/", - "companyId": "ancora" - }, - "android": { - "name": "Android", - "categoryId": 101, - "url": "https://www.android.com/", - "companyId": "google", - "source": "AdGuard" - }, - "anetwork": { - "name": "Anetwork", - "categoryId": 4, - "url": "http://anetwork.ir/", - "companyId": "anetwork" - }, - "aniview.com": { - "name": "AniView", - "categoryId": 4, - "url": "https://www.aniview.com/", - "companyId": null - }, - "anonymousads": { - "name": "AnonymousAds", - "categoryId": 4, - "url": "https://a-ads.com/", - "companyId": "anonymousads" - }, - "anormal_tracker": { - "name": "Anormal Tracker", - "categoryId": 6, - "url": "http://anormal-tracker.de/", - "companyId": "anormal-tracker" - }, - "answers_cloud_service": { - "name": "Answers Cloud Service", - "categoryId": 1, - "url": "http://www.answers.com/", - "companyId": "answers.com" - }, - "ants": { - "name": "Ants", - "categoryId": 7, - "url": "http://ants.vn/en/", - "companyId": "ants" - }, - "anvato": { - "name": "Anvato", - "categoryId": 0, - "url": "https://www.anvato.com/", - "companyId": "google" - }, - "anyclip": { - "name": "AnyClip", - "categoryId": 0, - "url": "https://anyclip.com", - "companyId": "anyclip" - }, - "aol_be_on": { - "name": "AOL Be On", - "categoryId": 4, - "url": "http://beon.aolnetworks.com/", - "companyId": "verizon" - }, - "aol_cdn": { - "name": "AOL CDN", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "aol_images_cdn": { - "name": "AOL Images CDN", - "categoryId": 5, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "apa.at": { - "name": "Apa", - "categoryId": 8, - "url": "http://www.apa.at/Site/index.de.html", - "companyId": "apa" - }, - "apester": { - "name": "Apester", - "categoryId": 4, - "url": "http://apester.com/", - "companyId": "apester" - }, - "apicit.net": { - "name": "apicit.net", - "categoryId": 4, - "url": null, - "companyId": null - }, - "aplus_analytics": { - "name": "Aplus Analytics", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "appcenter": { - "name": "Microsoft App Center", - "categoryId": 5, - "url": "https://appcenter.ms/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "appcues": { - "name": "Appcues", - "categoryId": 2, - "url": "https://www.appcues.com/", - "companyId": null - }, - "appdynamics": { - "name": "AppDynamics", - "categoryId": 6, - "url": "http://www.appdynamics.com", - "companyId": "appdynamics" - }, - "appier": { - "name": "Appier", - "categoryId": 4, - "url": "http://www.appier.com/en/index.html", - "companyId": "appier" - }, - "apple": { - "name": "Apple", - "categoryId": 8, - "url": "https://www.apple.com/", - "companyId": "apple", - "source": "AdGuard" - }, - "apple_ads": { - "name": "Apple Search Ads", - "categoryId": 4, - "url": "https://searchads.apple.com/", - "companyId": "apple", - "source": "AdGuard" - }, - "applifier": { - "name": "Applifier", - "categoryId": 4, - "url": "http://www.applifier.com/", - "companyId": "applifier" - }, - "applovin": { - "name": "AppLovin", - "categoryId": 4, - "url": "https://www.applovin.com", - "companyId": "applovin" - }, - "appmetrx": { - "name": "AppMetrx", - "categoryId": 4, - "url": "http://www.engago.com", - "companyId": "engago_technologies" - }, - "appnexus": { - "name": "AppNexus", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "appsflyer": { - "name": "AppsFlyer", - "categoryId": 101, - "url": "https://www.appsflyer.com/", - "companyId": "appsflyer", - "source": "AdGuard" - }, - "apptv": { - "name": "appTV", - "categoryId": 4, - "url": "http://www.apptv.com/", - "companyId": "apptv" - }, - "apture": { - "name": "Apture", - "categoryId": 2, - "url": "http://www.apture.com/", - "companyId": "google" - }, - "arcpublishing": { - "name": "Arc Publishing", - "categoryId": 6, - "url": "https://www.arcpublishing.com/", - "companyId": "arc_publishing" - }, - "ard.de": { - "name": "ard.de", - "categoryId": 0, - "url": null, - "companyId": null - }, - "are_you_a_human": { - "name": "Are You a Human", - "categoryId": 6, - "url": "https://areyouahuman.com/", - "companyId": "distil_networks" - }, - "arkoselabs.com": { - "name": "Arkose Labs", - "categoryId": 6, - "url": "https://www.arkoselabs.com/", - "companyId": null - }, - "art19": { - "name": "Art19", - "categoryId": 4, - "url": "https://art19.com/", - "companyId": "art19" - }, - "artimedia": { - "name": "Artimedia", - "categoryId": 4, - "url": "http://arti-media.net/en/", - "companyId": "artimedia" - }, - "artlebedev.ru": { - "name": "Art.Lebedev", - "categoryId": 8, - "url": "https://www.artlebedev.ru/", - "companyId": "art.lebedev_studio" - }, - "aruba_media_marketing": { - "name": "Aruba Media Marketing", - "categoryId": 4, - "url": "http://www.arubamediamarketing.it/", - "companyId": "aruba_media_marketing" - }, - "arvato_canvas_fp": { - "name": "Arvato Canvas FP", - "categoryId": 6, - "url": "https://www.arvato.com/", - "companyId": "arvato" - }, - "asambeauty.com": { - "name": "asambeauty.com", - "categoryId": 8, - "url": "https://www.asambeauty.com/", - "companyId": null - }, - "ask.com": { - "name": "Ask.com", - "categoryId": 7, - "url": null, - "companyId": null - }, - "aspnetcdn": { - "name": "Microsoft Ajax CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "assemblyexchange": { - "name": "Assembly Exchange", - "categoryId": 4, - "url": "https://www.medialab.la/", - "companyId": "medialab", - "source": "AdGuard" - }, - "astronomer": { - "name": "Astronomer", - "categoryId": 6, - "url": "https://www.astronomer.io", - "companyId": "astronomer" - }, - "at_internet": { - "name": "AT Internet", - "categoryId": 6, - "url": "http://www.xiti.com/", - "companyId": "at_internet" - }, - "atedra": { - "name": "Atedra", - "categoryId": 4, - "url": "http://www.atedra.com/", - "companyId": "atedra" - }, - "atg_group": { - "name": "ATG Ad Tech Group", - "categoryId": 4, - "url": "https://ad-tech-group.com/", - "companyId": null - }, - "atg_optimization": { - "name": "ATG Optimization", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/", - "companyId": "oracle" - }, - "atg_recommendations": { - "name": "ATG Recommendations", - "categoryId": 4, - "url": "http://www.atg.com/en/products-services/optimization/recommendations/", - "companyId": "oracle" - }, - "atlas": { - "name": "Atlas", - "categoryId": 4, - "url": "https://atlassolutions.com", - "companyId": "facebook" - }, - "atlas_profitbuilder": { - "name": "Atlas ProfitBuilder", - "categoryId": 4, - "url": "http://www.atlassolutions.com/", - "companyId": "atlas" - }, - "atlassian.net": { - "name": "Atlassian", - "categoryId": 2, - "url": "https://www.atlassian.com/", - "companyId": "atlassian" - }, - "atlassian_marketplace": { - "name": "Atlassian Marketplace", - "categoryId": 9, - "url": "https://marketplace.atlassian.com/", - "companyId": "atlassian" - }, - "atomz_search": { - "name": "Atomz Search", - "categoryId": 2, - "url": "http://atomz.com/", - "companyId": "atomz" - }, - "atsfi_de": { - "name": "atsfi.de", - "categoryId": 11, - "url": "http://www.axelspringer.de/en/index.html", - "companyId": "axel_springer" - }, - "attracta": { - "name": "Attracta", - "categoryId": 4, - "url": "http://www.attracta.com/", - "companyId": "attracta" - }, - "attraqt": { - "name": "Attraqt", - "categoryId": 6, - "url": "http://www.locayta.com/", - "companyId": "attraqt" - }, - "audience2media": { - "name": "Audience2Media", - "categoryId": 4, - "url": "http://www.audience2media.com/", - "companyId": "audience2media" - }, - "audience_ad_network": { - "name": "Audience Ad Network", - "categoryId": 4, - "url": "http://www.audienceadnetwork.com", - "companyId": "bridgeline_digital" - }, - "audience_science": { - "name": "Audience Science", - "categoryId": 4, - "url": "http://www.audiencescience.com/", - "companyId": "audiencescience" - }, - "audiencerate": { - "name": "AudienceRate", - "categoryId": 4, - "url": "http://www.audiencerate.com/", - "companyId": "audiencerate" - }, - "audiencesquare.com": { - "name": "Audience Square", - "categoryId": 4, - "url": "http://www.audiencesquare.fr/", - "companyId": "audience_square" - }, - "auditude": { - "name": "Auditude", - "categoryId": 0, - "url": "http://www.auditude.com/", - "companyId": "adobe" - }, - "audtd.com": { - "name": "Auditorius", - "categoryId": 4, - "url": "http://www.auditorius.ru/", - "companyId": "auditorius" - }, - "augur": { - "name": "Augur", - "categoryId": 6, - "url": "https://www.augur.io/", - "companyId": "augur" - }, - "aumago": { - "name": "Aumago", - "categoryId": 4, - "url": "http://www.aumago.com/", - "companyId": "aumago" - }, - "aurea_clicktracks": { - "name": "Aurea ClickTracks", - "categoryId": 4, - "url": "http://www.clicktracks.com/", - "companyId": "aurea" - }, - "ausgezeichnet_org": { - "name": "ausgezeichnet.org", - "categoryId": 2, - "url": "http://ausgezeichnet.org/", - "companyId": null - }, - "australia.gov": { - "name": "Australia.gov", - "categoryId": 4, - "url": "http://www.australia.gov.au/", - "companyId": "australian_government" - }, - "auth0": { - "name": "Auth0 Inc.", - "categoryId": 6, - "url": "https://auth0.com/", - "companyId": "auth0" - }, - "autoid": { - "name": "AutoID", - "categoryId": 6, - "url": "http://www.autoid.com/", - "companyId": "autoid" - }, - "autonomy": { - "name": "Autonomy", - "categoryId": 4, - "url": "http://www.optimost.com/", - "companyId": "hp" - }, - "autonomy_campaign": { - "name": "Autonomy Campaign", - "categoryId": 4, - "url": "http://www.autonomy.com/", - "companyId": "hp" - }, - "autopilothq": { - "name": "Auto Pilot", - "categoryId": 4, - "url": "https://www.autopilothq.com/", - "companyId": "autopilothq" - }, - "autoscout24.com": { - "name": "Autoscout24", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "avail": { - "name": "Avail", - "categoryId": 4, - "url": "http://avail.com", - "companyId": "richrelevance" - }, - "avanser": { - "name": "AVANSER", - "categoryId": 2, - "url": "http://www.avanser.com.au/", - "companyId": "avanser" - }, - "avant_metrics": { - "name": "Avant Metrics", - "categoryId": 6, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avantlink": { - "name": "AvantLink", - "categoryId": 4, - "url": "http://www.avantlink.com/", - "companyId": "avantlink" - }, - "avazu_network": { - "name": "Avazu Network", - "categoryId": 4, - "url": "http://www.avazudsp.net/", - "companyId": "avazu_network" - }, - "avenseo": { - "name": "Avenseo", - "categoryId": 4, - "url": "http://avenseo.com", - "companyId": "avenseo" - }, - "avid_media": { - "name": "Avid Media", - "categoryId": 0, - "url": "http://www.avidglobalmedia.com/", - "companyId": "avid_media" - }, - "avocet": { - "name": "Avocet", - "categoryId": 8, - "url": "https://avocet.io/", - "companyId": "avocet" - }, - "aweber": { - "name": "AWeber", - "categoryId": 4, - "url": "http://www.aweber.com/", - "companyId": "aweber_communications" - }, - "awin": { - "name": "AWIN", - "categoryId": 4, - "url": "https://www.awin.com", - "companyId": "axel_springer" - }, - "axill": { - "name": "Axill", - "categoryId": 4, - "url": "http://www.axill.com/", - "companyId": "axill" - }, - "azadify": { - "name": "Azadify", - "categoryId": 4, - "url": "http://azadify.com/engage/index.php", - "companyId": "azadify" - }, - "azure": { - "name": "Microsoft Azure", - "categoryId": 10, - "url": "https://azure.microsoft.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "azure_blob_storage": { - "name": "Azure Blob Storage", - "categoryId": 8, - "url": "https://azure.microsoft.com/en-us/products/storage/blobs", - "companyId": "microsoft", - "source": "AdGuard" - }, - "azureedge.net": { - "name": "Azure CDN", - "categoryId": 9, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "b2bcontext": { - "name": "B2BContext", - "categoryId": 4, - "url": "http://b2bcontext.ru/", - "companyId": "b2bcontext" - }, - "b2bvideo": { - "name": "B2Bvideo", - "categoryId": 4, - "url": "http://b2bvideo.ru/", - "companyId": "b2bvideo" - }, - "babator.com": { - "name": "Babator", - "categoryId": 6, - "url": "https://www.babator.com/", - "companyId": null - }, - "back_beat_media": { - "name": "Back Beat Media", - "categoryId": 4, - "url": "http://www.backbeatmedia.com", - "companyId": "backbeat_media" - }, - "backtype_widgets": { - "name": "BackType Widgets", - "categoryId": 4, - "url": "http://www.backtype.com/widgets", - "companyId": "backtype" - }, - "bahn_de": { - "name": "Deutsche Bahn", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baidu_ads": { - "name": "Baidu Ads", - "categoryId": 4, - "url": "http://www.baidu.com/", - "companyId": "baidu" - }, - "baidu_static": { - "name": "Baidu Static", - "categoryId": 8, - "url": "https://www.baidu.com/", - "companyId": "baidu" - }, - "baletingo.com": { - "name": "baletingo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bangdom.com": { - "name": "BangBros", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bankrate": { - "name": "Bankrate", - "categoryId": 4, - "url": "https://www.bankrate.com/", - "companyId": "bankrate" - }, - "banner_connect": { - "name": "Banner Connect", - "categoryId": 4, - "url": "http://www.bannerconnect.net/", - "companyId": "bannerconnect" - }, - "bannerflow.com": { - "name": "Bannerflow", - "categoryId": 4, - "url": "https://www.bannerflow.com/", - "companyId": "bannerflow" - }, - "bannerplay": { - "name": "BannerPlay", - "categoryId": 4, - "url": "http://www.bannerplay.com/", - "companyId": "bannerplay" - }, - "bannersnack": { - "name": "Bannersnack", - "categoryId": 4, - "url": "http://www.bannersnack.com/", - "companyId": "bannersnack" - }, - "barilliance": { - "name": "Barilliance", - "categoryId": 4, - "url": "http://www.barilliance.com/", - "companyId": "barilliance" - }, - "barometer": { - "name": "Barometer", - "categoryId": 2, - "url": "http://getbarometer.com/", - "companyId": "barometer" - }, - "basilic.io": { - "name": "basilic.io", - "categoryId": 6, - "url": "https://basilic.io/", - "companyId": null - }, - "batanga_network": { - "name": "Batanga Network", - "categoryId": 4, - "url": "http://www.batanganetwork.com/", - "companyId": "batanga_network" - }, - "batch_media": { - "name": "Batch Media", - "categoryId": 4, - "url": "http://batch.ba/", - "companyId": "prosieben_sat1" - }, - "bauer_media": { - "name": "Bauer Media", - "categoryId": 4, - "url": "http://www.bauermedia.com", - "companyId": "bauer_media" - }, - "baur.de": { - "name": "baur.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "baynote_observer": { - "name": "Baynote Observer", - "categoryId": 4, - "url": "http://www.baynote.com/", - "companyId": "baynote" - }, - "bazaarvoice": { - "name": "Bazaarvoice", - "categoryId": 2, - "url": "http://www.bazaarvoice.com/", - "companyId": "bazaarvoice" - }, - "bbci": { - "name": "BBC", - "categoryId": 10, - "url": "https://bbc.co.uk", - "companyId": null - }, - "bd4travel": { - "name": "bd4travel", - "categoryId": 4, - "url": "https://bd4travel.com/", - "companyId": "bd4travel" - }, - "be_opinion": { - "name": "Be Opinion", - "categoryId": 2, - "url": "http://beopinion.com/", - "companyId": "be_opinion" - }, - "beachfront": { - "name": "Beachfront Media", - "categoryId": 4, - "url": "http://beachfrontmedia.com/", - "companyId": null - }, - "beacon_ad_network": { - "name": "Beacon Ad Network", - "categoryId": 4, - "url": "http://beaconads.com/", - "companyId": "beacon_ad_network" - }, - "beampulse.com": { - "name": "BeamPulse", - "categoryId": 4, - "url": "https://en.beampulse.com/", - "companyId": null - }, - "beanstalk_data": { - "name": "Beanstalk Data", - "categoryId": 4, - "url": "http://www.beanstalkdata.com/", - "companyId": "beanstalk_data" - }, - "bebi": { - "name": "Bebi Media", - "categoryId": 4, - "url": "https://www.bebi.com/", - "companyId": "bebi_media" - }, - "beeketing.com": { - "name": "Beeketing", - "categoryId": 4, - "url": "https://beeketing.com/", - "companyId": "beeketing" - }, - "beeline.ru": { - "name": "Beeline", - "categoryId": 4, - "url": "https://moskva.beeline.ru/", - "companyId": null - }, - "beeswax": { - "name": "Beeswax", - "categoryId": 4, - "url": "http://beeswax.com/", - "companyId": "beeswax" - }, - "beezup": { - "name": "BeezUP", - "categoryId": 4, - "url": "http://www.beezup.co.uk/", - "companyId": "beezup" - }, - "begun": { - "name": "Begun", - "categoryId": 4, - "url": "http://begun.ru/", - "companyId": "begun" - }, - "behavioralengine": { - "name": "BehavioralEngine", - "categoryId": 4, - "url": "http://www.behavioralengine.com/", - "companyId": "behavioralengine" - }, - "belboon_gmbh": { - "name": "belboon GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "belco": { - "name": "Belco", - "categoryId": 2, - "url": "https://www.belco.io/", - "companyId": "belco" - }, - "belstat": { - "name": "BelStat", - "categoryId": 6, - "url": "http://www.belstat.com/", - "companyId": "belstat" - }, - "bemobile.ua": { - "name": "Bemobile", - "categoryId": 10, - "url": "http://bemobile.ua/en/", - "companyId": "bemobile" - }, - "bench_platform": { - "name": "Bench Platform", - "categoryId": 4, - "url": "https://benchplatform.com", - "companyId": "bench_platform" - }, - "betterttv": { - "name": "BetterTTV", - "categoryId": 7, - "url": "https://nightdev.com/betterttv/", - "companyId": "nightdev" - }, - "betweendigital.com": { - "name": "Between Digital", - "categoryId": 4, - "url": "http://betweendigital.ru/ssp", - "companyId": "between_digital" - }, - "bid.run": { - "name": "Bid Run", - "categoryId": 4, - "url": "http://bid.run/", - "companyId": "bid.run" - }, - "bidgear": { - "name": "BidGear", - "categoryId": 6, - "url": "https://bidgear.com/", - "companyId": "bidgear" - }, - "bidswitch": { - "name": "Bidswitch", - "categoryId": 4, - "url": "http://www.iponweb.com/", - "companyId": "iponweb" - }, - "bidtellect": { - "name": "Bidtellect", - "categoryId": 4, - "url": "https://www.bidtellect.com/", - "companyId": "bidtellect" - }, - "bidtheatre": { - "name": "BidTheatre", - "categoryId": 4, - "url": "http://www.bidtheatre.com/", - "companyId": "bidtheatre" - }, - "bidvertiser": { - "name": "BidVertiser", - "categoryId": 4, - "url": "http://www.bidvertiser.com/", - "companyId": "bidvertiser" - }, - "big_mobile": { - "name": "Big Mobile", - "categoryId": 4, - "url": "http://www.bigmobile.com/", - "companyId": "big_mobile" - }, - "bigcommerce.com": { - "name": "BigCommerce", - "categoryId": 6, - "url": "https://www.bigcommerce.com/", - "companyId": "bigcommerce" - }, - "bigmir.net": { - "name": "bigmir", - "categoryId": 6, - "url": "https://www.bigmir.net/", - "companyId": "bigmir-internet" - }, - "bigpoint": { - "name": "Bigpoint", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bild": { - "name": "Bild.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "bilgin_pro": { - "name": "Bilgin Pro", - "categoryId": 4, - "url": "http://bilgin.pro/", - "companyId": "bilginpro" - }, - "bilin": { - "name": "Bilin", - "categoryId": 4, - "url": "http://www.bilintechnology.com/", - "companyId": "bilin" - }, - "bing_ads": { - "name": "Bing Ads", - "categoryId": 4, - "url": "https://bingads.microsoft.com/", - "companyId": "microsoft" - }, - "bing_maps": { - "name": "Bing Maps", - "categoryId": 2, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "binge": { - "name": "Binge", - "categoryId": 0, - "url": "https://binge.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "binlayer": { - "name": "BinLayer", - "categoryId": 4, - "url": "http://binlayer.com/", - "companyId": "binlayer" - }, - "binotel": { - "name": "Binotel", - "categoryId": 4, - "url": "http://www.binotel.ua/", - "companyId": "binotel" - }, - "bisnode": { - "name": "Bisnode", - "categoryId": 4, - "url": "http://www.esendra.fi/", - "companyId": "bisnode" - }, - "bitcoin_miner": { - "name": "Bitcoin Miner", - "categoryId": 2, - "url": "http://www.bitcoinplus.com/", - "companyId": "bitcoin_plus" - }, - "bitly": { - "name": "Bitly", - "categoryId": 6, - "url": "https://bitly.com/", - "companyId": null - }, - "bitrix": { - "name": "Bitrix24", - "categoryId": 4, - "url": "https://www.bitrix24.com/", - "companyId": "bitrix24" - }, - "bitwarden": { - "name": "Bitwarden", - "categoryId": 8, - "url": "https://bitwarden.com/", - "companyId": "bitwarden", - "source": "AdGuard" - }, - "bizcn": { - "name": "Bizcn", - "categoryId": 4, - "url": "http://www.bizcn.com/", - "companyId": "bizcn" - }, - "blackdragon": { - "name": "BlackDragon", - "categoryId": 4, - "url": "http://www.jd.com/", - "companyId": "jing_dong" - }, - "blau.de": { - "name": "Blau", - "categoryId": 8, - "url": "https://www.blau.de/", - "companyId": null - }, - "blink_new_media": { - "name": "Blink New Media", - "categoryId": 4, - "url": "http://engagebdr.com/", - "companyId": "engage_bdr" - }, - "blis": { - "name": "Blis", - "categoryId": 6, - "url": "http://www.blis.com/index.php", - "companyId": "blis" - }, - "blogad": { - "name": "BlogAD", - "categoryId": 4, - "url": "http://www.blogad.com.tw/", - "companyId": "blogad" - }, - "blogbang": { - "name": "BlogBang", - "categoryId": 4, - "url": "http://www.blogbang.com/", - "companyId": "blogbang" - }, - "blogcatalog": { - "name": "BlogCatalog", - "categoryId": 2, - "url": "http://www.blogcatalog.com/", - "companyId": "blogcatalog" - }, - "blogcounter": { - "name": "BlogCounter", - "categoryId": 6, - "url": "http://blogcounter.com/", - "companyId": "adfire_gmbh" - }, - "blogfoster.com": { - "name": "Blogfoster", - "categoryId": 8, - "url": "http://www.blogfoster.com/", - "companyId": "blogfoster" - }, - "bloggerads": { - "name": "BloggerAds", - "categoryId": 4, - "url": "http://www.bloggerads.net/", - "companyId": "bloggerads" - }, - "blogher": { - "name": "BlogHer Ads", - "categoryId": 4, - "url": "https://www.blogher.com/", - "companyId": "penske_media_corp" - }, - "blogimg.jp": { - "name": "blogimg.jp", - "categoryId": 9, - "url": "https://line.me/", - "companyId": "line" - }, - "blogsmithmedia.com": { - "name": "blogsmithmedia.com", - "categoryId": 8, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "blogspot_com": { - "name": "blogspot.com", - "categoryId": 8, - "url": "http://www.google.com", - "companyId": "google" - }, - "bloomreach": { - "name": "BloomReach", - "categoryId": 4, - "url": "https://www.bloomreach.com/en", - "companyId": "bloomreach" - }, - "blue_cherry_group": { - "name": "Blue Cherry Group", - "categoryId": 4, - "url": "http://www.bluecherrygroup.com", - "companyId": "blue_cherry_group" - }, - "blue_seed": { - "name": "Blue Seed", - "categoryId": 4, - "url": "http://blueseed.tv/#/en/platform", - "companyId": "blue_seed" - }, - "blueconic.net": { - "name": "BlueConic Plugin", - "categoryId": 6, - "url": "https://www.blueconic.com/", - "companyId": "blueconic" - }, - "bluecore": { - "name": "Bluecore", - "categoryId": 4, - "url": "https://www.bluecore.com/", - "companyId": "triggermail" - }, - "bluekai": { - "name": "BlueKai", - "categoryId": 4, - "url": "http://www.bluekai.com/", - "companyId": "oracle" - }, - "bluelithium": { - "name": "Bluelithium", - "categoryId": 4, - "url": "http://www.bluelithium.com/", - "companyId": "verizon" - }, - "bluemetrix": { - "name": "Bluemetrix", - "categoryId": 4, - "url": "http://www.bluemetrix.ie/", - "companyId": "bluemetrix" - }, - "bluenewsupdate.info": { - "name": "bluenewsupdate.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bluestreak": { - "name": "BlueStreak", - "categoryId": 4, - "url": "http://www.bluestreak.com/", - "companyId": "dentsu_aegis_network" - }, - "bluetriangle": { - "name": "Blue Triangle", - "categoryId": 6, - "url": "https://www.bluetriangle.com/", - "companyId": "blue_triangle" - }, - "bodelen.com": { - "name": "bodelen.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "bol_affiliate_program": { - "name": "BOL Affiliate Program", - "categoryId": 4, - "url": "http://www.bol.com", - "companyId": "bol.com" - }, - "bold": { - "name": "Bold", - "categoryId": 4, - "url": "https://boldcommerce.com/", - "companyId": "bold" - }, - "boldchat": { - "name": "Boldchat", - "categoryId": 2, - "url": "http://www.boldchat.com/", - "companyId": "boldchat" - }, - "boltdns.net": { - "name": "boltdns.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bom": { - "name": "Bureau of Meteorology", - "categoryId": 9, - "url": "http://bom.gov.au/", - "companyId": "australian_government", - "source": "AdGuard" - }, - "bombora": { - "name": "Bombora", - "categoryId": 6, - "url": "http://bombora.com/", - "companyId": "bombora" - }, - "bongacams.com": { - "name": "bongacams.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bonial": { - "name": "Bonial Connect", - "categoryId": 2, - "url": "http://www.bonial.com/", - "companyId": null - }, - "boo-box": { - "name": "boo-box", - "categoryId": 4, - "url": "http://boo-box.com/", - "companyId": "boo-box" - }, - "booking.com": { - "name": "Booking.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "boost_box": { - "name": "Boost Box", - "categoryId": 6, - "url": "http://www.boostbox.com.br/", - "companyId": "boost_box" - }, - "booster_video": { - "name": "Booster Video", - "categoryId": 0, - "url": "https://boostervideo.ru/", - "companyId": "booster_video" - }, - "bootstrap": { - "name": "Bootstrap CDN", - "categoryId": 9, - "url": "http://getbootstrap.com/", - "companyId": "bootstrap_cdn" - }, - "borrango.com": { - "name": "borrango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "botscanner": { - "name": "BotScanner", - "categoryId": 6, - "url": "http://botscanner.com", - "companyId": "botscanner" - }, - "boudja.com": { - "name": "boudja.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bounce_exchange": { - "name": "Bounce Exchange", - "categoryId": 4, - "url": "http://bounceexchange.com", - "companyId": "bounce_exchange" - }, - "bouncex": { - "name": "BounceX", - "categoryId": 4, - "url": "https://www.bouncex.com/", - "companyId": null - }, - "box_uk": { - "name": "Box UK", - "categoryId": 6, - "url": "http://www.clickdensity.com", - "companyId": "box_uk" - }, - "boxever": { - "name": "Boxever", - "categoryId": 4, - "url": "https://www.boxever.com/", - "companyId": "boxever" - }, - "brainient": { - "name": "Brainient", - "categoryId": 4, - "url": "http://www.brainient.com/", - "companyId": "brainient" - }, - "brainsins": { - "name": "BrainSINS", - "categoryId": 4, - "url": "http://www.brainsins.com/", - "companyId": "brainsins" - }, - "branch": { - "name": "Branch.io", - "categoryId": 101, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc", - "source": "AdGuard" - }, - "branch_metrics": { - "name": "Branch", - "categoryId": 4, - "url": "https://branch.io/", - "companyId": "branch_metrics_inc" - }, - "brand_affinity": { - "name": "Brand Affinity", - "categoryId": 4, - "url": "http://brandaffinity.net/about", - "companyId": "yoonla" - }, - "brand_networks": { - "name": "Brand Networks", - "categoryId": 4, - "url": "http://www.xa.net/", - "companyId": "brand_networks" - }, - "brandmetrics.com": { - "name": "Brandmetrics.com", - "categoryId": 4, - "url": "https://www.brandmetrics.com/", - "companyId": null - }, - "brandreach": { - "name": "BrandReach", - "categoryId": 4, - "url": "http://www.brandreach.com/", - "companyId": "brandreach" - }, - "brandscreen": { - "name": "Brandscreen", - "categoryId": 4, - "url": "http://www.brandscreen.com/", - "companyId": "zenovia" - }, - "brandwire.tv": { - "name": "BrandWire", - "categoryId": 4, - "url": "https://brandwire.tv/", - "companyId": null - }, - "branica": { - "name": "Branica", - "categoryId": 4, - "url": "http://www.branica.com/", - "companyId": "branica" - }, - "braze": { - "name": "Braze, Inc.", - "categoryId": 6, - "url": "https://www.braze.com/", - "companyId": "braze", - "source": "AdGuard" - }, - "brealtime": { - "name": "EMX Digital", - "categoryId": 4, - "url": "https://emxdigital.com/", - "companyId": null - }, - "bridgetrack": { - "name": "BridgeTrack", - "categoryId": 4, - "url": "http://www.bridgetrack.com/", - "companyId": "bridgetrack" - }, - "brightcove": { - "name": "Brightcove", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightcove_player": { - "name": "Brightcove Player", - "categoryId": 0, - "url": "http://www.brightcove.com/en/", - "companyId": "brightcove" - }, - "brightedge": { - "name": "BrightEdge", - "categoryId": 4, - "url": "http://www.brightedge.com/", - "companyId": "brightedge" - }, - "brightfunnel": { - "name": "BrightFunnel", - "categoryId": 6, - "url": "http://www.brightfunnel.com/", - "companyId": "brightfunnel" - }, - "brightonclick.com": { - "name": "brightonclick.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "brightroll": { - "name": "BrightRoll", - "categoryId": 4, - "url": "http://www.brightroll.com/", - "companyId": "verizon" - }, - "brilig": { - "name": "Brilig", - "categoryId": 4, - "url": "http://www.brilig.com/", - "companyId": "dentsu_aegis_network" - }, - "brillen.de": { - "name": "brillen.de", - "categoryId": 8, - "url": "https://www.brillen.de/", - "companyId": null - }, - "broadstreet": { - "name": "Broadstreet", - "categoryId": 4, - "url": "http://broadstreetads.com/", - "companyId": "broadstreet" - }, - "bronto": { - "name": "Bronto", - "categoryId": 4, - "url": "http://bronto.com/", - "companyId": "bronto" - }, - "brow.si": { - "name": "Brow.si", - "categoryId": 4, - "url": "https://brow.si/", - "companyId": "brow.si" - }, - "browser-statistik": { - "name": "Browser-Statistik", - "categoryId": 6, - "url": "http://www.browser-statistik.de/", - "companyId": "browser-statistik" - }, - "browser_update": { - "name": "Browser Update", - "categoryId": 2, - "url": "http://www.browser-update.org/", - "companyId": "browser-update" - }, - "btncdn.com": { - "name": "btncdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "bubblestat": { - "name": "Bubblestat", - "categoryId": 4, - "url": "http://www.bubblestat.com/", - "companyId": "bubblestat" - }, - "buddy_media": { - "name": "Buddy Media", - "categoryId": 7, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "buffer_button": { - "name": "Buffer Button", - "categoryId": 7, - "url": "http://www.bufferapp.com/", - "companyId": "buffer" - }, - "bugherd.com": { - "name": "BugHerd", - "categoryId": 2, - "url": "https://bugherd.com", - "companyId": "bugherd" - }, - "bugsnag": { - "name": "Bugsnag", - "categoryId": 6, - "url": "https://bugsnag.com", - "companyId": "bugsnag" - }, - "bulkhentai.com": { - "name": "bulkhentai.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "bumlam.com": { - "name": "bumlam.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "bunchbox": { - "name": "Bunchbox", - "categoryId": 6, - "url": "https://app.bunchbox.co/login", - "companyId": "bunchbox" - }, - "burda": { - "name": "BurdaForward", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burda_digital_systems": { - "name": "Burda Digital Systems", - "categoryId": 4, - "url": "http://www.hubert-burda-media.com/", - "companyId": "hubert_burda_media" - }, - "burst_media": { - "name": "Burst Media", - "categoryId": 4, - "url": "http://www.burstmedia.com/", - "companyId": "rhythmone" - }, - "burt": { - "name": "Burt", - "categoryId": 4, - "url": "http://www.burtcorp.com/", - "companyId": "burt" - }, - "businessonline_analytics": { - "name": "BusinessOnLine Analytics", - "categoryId": 6, - "url": "http://www.businessol.com/", - "companyId": "businessonline" - }, - "button": { - "name": "Button", - "categoryId": 4, - "url": "https://www.usebutton.com/", - "companyId": "button", - "source": "AdGuard" - }, - "buysellads": { - "name": "BuySellAds", - "categoryId": 4, - "url": "http://buysellads.com/", - "companyId": "buysellads.com" - }, - "buzzadexchange.com": { - "name": "buzzadexchange.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "buzzador": { - "name": "Buzzador", - "categoryId": 7, - "url": "http://www.buzzador.com", - "companyId": "buzzador" - }, - "buzzfeed": { - "name": "BuzzFeed", - "categoryId": 2, - "url": "http://www.buzzfeed.com", - "companyId": "buzzfeed" - }, - "bwbx.io": { - "name": "Bloomberg CDN", - "categoryId": 9, - "url": "https://www.bloomberg.com/", - "companyId": null - }, - "bypass": { - "name": "Bypass", - "categoryId": 4, - "url": "http://bypass.jp/", - "companyId": "united_inc" - }, - "c1_exchange": { - "name": "C1 Exchange", - "categoryId": 4, - "url": "http://c1exchange.com/", - "companyId": "c1_exchange" - }, - "c3_metrics": { - "name": "C3 Metrics", - "categoryId": 6, - "url": "http://c3metrics.com/", - "companyId": "c3_metrics" - }, - "c8_network": { - "name": "C8 Network", - "categoryId": 4, - "url": "http://c8.net.ua/", - "companyId": "c8_network" - }, - "cackle.me": { - "name": "Cackle", - "categoryId": 3, - "url": "https://cackle.me/", - "companyId": null - }, - "cadreon": { - "name": "Cadreon", - "categoryId": 4, - "url": "http://www.cadreon.com/", - "companyId": "cadreon" - }, - "call_page": { - "name": "Call Page", - "categoryId": 2, - "url": "https://www.callpage.io/", - "companyId": "call_page" - }, - "callbackhunter": { - "name": "CallbackHunter", - "categoryId": 2, - "url": "http://callbackhunter.com/main", - "companyId": "callbackhunter" - }, - "callbox": { - "name": "CallBox", - "categoryId": 2, - "url": "http://www.centuryinteractive.com", - "companyId": "callbox" - }, - "callibri": { - "name": "Callibri", - "categoryId": 4, - "url": "https://callibri.ru/", - "companyId": "callibri" - }, - "callrail": { - "name": "CallRail", - "categoryId": 2, - "url": "http://www.callrail.com/", - "companyId": "callrail" - }, - "calltracking": { - "name": "Calltracking", - "categoryId": 2, - "url": "https://calltracking.ru", - "companyId": "calltracking" - }, - "caltat.com": { - "name": "Caltat", - "categoryId": 2, - "url": "https://caltat.com/", - "companyId": null - }, - "cam-content.com": { - "name": "Cam-Content.com", - "categoryId": 3, - "url": "https://www.cam-content.com/", - "companyId": null - }, - "camakaroda.com": { - "name": "camakaroda.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "campus_explorer": { - "name": "Campus Explorer", - "categoryId": 6, - "url": "http://www.campusexplorer.com/", - "companyId": "campus_explorer" - }, - "canddi": { - "name": "CANDDI", - "categoryId": 6, - "url": "https://www.canddi.com/", - "companyId": "canddi" - }, - "canonical": { - "name": "Canonical", - "categoryId": 8, - "url": "https://canonical.com/", - "companyId": "canonical", - "source": "AdGuard" - }, - "canvas": { - "name": "Canvas", - "categoryId": 2, - "url": "https://www.canvas.net/", - "companyId": null - }, - "capitaldata": { - "name": "CapitalData", - "categoryId": 6, - "url": "https://www.capitaldata.fr/", - "companyId": "highco" - }, - "captora": { - "name": "Captora", - "categoryId": 4, - "url": "http://www.captora.com/", - "companyId": "captora" - }, - "capture_media": { - "name": "Capture Media", - "categoryId": 4, - "url": "http://capturemedia.ch/", - "companyId": "capture_media" - }, - "capturly": { - "name": "Capturly", - "categoryId": 6, - "url": "http://capturly.com/", - "companyId": "capturly" - }, - "carambola": { - "name": "Carambola", - "categoryId": 4, - "url": "http://carambo.la/", - "companyId": "carambola" - }, - "carbonads": { - "name": "Carbon Ads", - "categoryId": 4, - "url": "https://www.carbonads.net/", - "companyId": "buysellads.com" - }, - "cardinal": { - "name": "Cardinal", - "categoryId": 6, - "url": "https://www.cardinalcommerce.com/", - "companyId": "visa" - }, - "cardlytics": { - "name": "Cardlytics", - "categoryId": 6, - "url": "http://www.cardlytics.com/", - "companyId": null - }, - "carrot_quest": { - "name": "Carrot Quest", - "categoryId": 6, - "url": "http://www.carrotquest.io/", - "companyId": "carrot_quest" - }, - "cartstack": { - "name": "CartStack", - "categoryId": 2, - "url": "http://cartstack.com/", - "companyId": "cartstack" - }, - "caspion": { - "name": "Caspion", - "categoryId": 6, - "url": "http://caspion.com/", - "companyId": "caspion" - }, - "castle": { - "name": "Castle", - "categoryId": 2, - "url": "https://castle.io", - "companyId": "castle" - }, - "catchpoint": { - "name": "Catchpoint", - "categoryId": 6, - "url": "http://www.catchpoint.com/", - "companyId": "catchpoint_systems" - }, - "cbox": { - "name": "Cbox", - "categoryId": 2, - "url": "http://cbox.ws", - "companyId": "cbox" - }, - "cbs_interactive": { - "name": "CBS Interactive", - "categoryId": 0, - "url": "http://www.cbsinteractive.com/", - "companyId": "cbs_interactive" - }, - "ccm_benchmark": { - "name": "CCM Benchmark", - "categoryId": 4, - "url": "http://www.ccmbenchmark.com/", - "companyId": null - }, - "cdk_digital_marketing": { - "name": "CDK Digital Marketing", - "categoryId": 4, - "url": "http://www.cobaltgroup.com", - "companyId": "cdk_digital_marketing" - }, - "cdn-net.com": { - "name": "cdn-net.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdn13.com": { - "name": "cdn13.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "cdn77": { - "name": "CDN77", - "categoryId": 9, - "url": "https://www.cdn77.com/", - "companyId": null - }, - "cdnetworks.net": { - "name": "cdnetworks.net", - "categoryId": 9, - "url": "https://www.cdnetworks.com/", - "companyId": null - }, - "cdnnetwok_xyz": { - "name": "cdnnetwok.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "cdnondemand.org": { - "name": "cdnondemand.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnsure.com": { - "name": "cdnsure.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cdnvideo.com": { - "name": "CDNvideo", - "categoryId": 9, - "url": "https://www.cdnvideo.com/", - "companyId": "cdnvideo" - }, - "cdnwidget.com": { - "name": "cdnwidget.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "cedexis_radar": { - "name": "Cedexis Radar", - "categoryId": 6, - "url": "http://www.cedexis.com/products_radar.html", - "companyId": "cedexis" - }, - "celebrus": { - "name": "Celebrus", - "categoryId": 6, - "url": "https://www.celebrus.com/", - "companyId": "celebrus" - }, - "celtra": { - "name": "Celtra", - "categoryId": 0, - "url": "http://www.celtra.com/", - "companyId": "celtra" - }, - "cendyn": { - "name": "Cendyn", - "categoryId": 4, - "url": "http://www.cendyn.com/", - "companyId": "cendyn" - }, - "centraltag": { - "name": "CentralTag", - "categoryId": 4, - "url": "http://www.centraltag.com/", - "companyId": "centraltag" - }, - "centro": { - "name": "Centro", - "categoryId": 4, - "url": "http://centro.net/", - "companyId": "centro" - }, - "cerberus_speed-trap": { - "name": "Cerberus Speed-Trap", - "categoryId": 6, - "url": "http://cerberusip.com/", - "companyId": "cerberus" - }, - "certainsource": { - "name": "CertainSource", - "categoryId": 4, - "url": "http://www.ewaydirect.com", - "companyId": "certainsource" - }, - "certifica_metric": { - "name": "Certifica Metric", - "categoryId": 4, - "url": "http://www.comscore.com/Products_Services/Product_Index/Certifica_Metric", - "companyId": "comscore" - }, - "certona": { - "name": "Certona", - "categoryId": 4, - "url": "http://www.certona.com/products/recommendation.php", - "companyId": "certona" - }, - "chameleon": { - "name": "Chameleon", - "categoryId": 4, - "url": "http://chameleon.ad/", - "companyId": "chamaleon" - }, - "chango": { - "name": "Chango", - "categoryId": 4, - "url": "http://www.chango.com/", - "companyId": "rubicon_project" - }, - "channel_intelligence": { - "name": "Channel Intelligence", - "categoryId": 4, - "url": "http://www.channelintelligence.com/", - "companyId": "google" - }, - "channel_pilot_solutions": { - "name": "ChannelPilot Solutions", - "categoryId": 6, - "url": "https://www.channelpilot.de/", - "companyId": null - }, - "channeladvisor": { - "name": "ChannelAdvisor", - "categoryId": 4, - "url": "http://www.channeladvisor.com/", - "companyId": "channeladvisor" - }, - "channelfinder": { - "name": "ChannelFinder", - "categoryId": 4, - "url": "http://www.kpicentral.com/", - "companyId": "kaleidoscope_promotions" - }, - "chaordic": { - "name": "Chaordic", - "categoryId": 4, - "url": "https://www.chaordic.com.br/", - "companyId": "chaordic" - }, - "chartbeat": { - "name": "ChartBeat", - "categoryId": 6, - "url": "http://chartbeat.com/", - "companyId": "chartbeat" - }, - "chartboost": { - "name": "Chartboost", - "categoryId": 4, - "url": "http://chartboost.com/", - "companyId": "take-two", - "source": "AdGuard" - }, - "chaser": { - "name": "Chaser", - "categoryId": 2, - "url": "http://chaser.ru/", - "companyId": "chaser" - }, - "chat_beacon": { - "name": "Chat Beacon", - "categoryId": 2, - "url": "https://www.chatbeacon.io/", - "companyId": "chat_beacon" - }, - "chatango": { - "name": "Chatango", - "categoryId": 2, - "url": "http://www.chatango.com/", - "companyId": "chatango" - }, - "chatra": { - "name": "Chatra", - "categoryId": 2, - "url": "https://chatra.io", - "companyId": "chatra" - }, - "chaturbate.com": { - "name": "chaturbate.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "chatwing": { - "name": "ChatWing", - "categoryId": 2, - "url": "http://chatwing.com/", - "companyId": "chatwing" - }, - "checkmystats": { - "name": "CheckMyStats", - "categoryId": 4, - "url": "http://checkmystats.com.au", - "companyId": "checkmystats" - }, - "chefkoch_de": { - "name": "chefkoch.de", - "categoryId": 8, - "url": "http://chefkoch.de/", - "companyId": null - }, - "chin_media": { - "name": "Chin Media", - "categoryId": 4, - "url": "http://www.chinmedia.vn/#", - "companyId": "chin_media" - }, - "chinesean": { - "name": "ChineseAN", - "categoryId": 4, - "url": "http://www.chinesean.com/", - "companyId": "chinesean" - }, - "chitika": { - "name": "Chitika", - "categoryId": 4, - "url": "http://chitika.com/", - "companyId": "chitika" - }, - "choicestream": { - "name": "ChoiceStream", - "categoryId": 4, - "url": "http://www.choicestream.com/", - "companyId": "choicestream" - }, - "chute": { - "name": "Chute", - "categoryId": 5, - "url": "https://www.getchute.com/", - "companyId": "esw_capital" - }, - "circit": { - "name": "circIT", - "categoryId": 6, - "url": "http://www.circit.de/", - "companyId": null - }, - "circulate": { - "name": "Circulate", - "categoryId": 6, - "url": "http://circulate.com/", - "companyId": "circulate" - }, - "city_spark": { - "name": "City Spark", - "categoryId": 4, - "url": "http://www.cityspark.com/", - "companyId": "city_spark" - }, - "cityads": { - "name": "CityAds", - "categoryId": 4, - "url": "http://cityads.ru/", - "companyId": "cityads" - }, - "ciuvo.com": { - "name": "ciuvo.com", - "categoryId": 12, - "url": "https://www.ciuvo.com/", - "companyId": null - }, - "civey_widgets": { - "name": "Civey Widgets", - "categoryId": 2, - "url": "https://civey.com/", - "companyId": "civey" - }, - "civicscience.com": { - "name": "CivicScience", - "categoryId": 6, - "url": "https://civicscience.com/", - "companyId": "civicscience" - }, - "ciwebgroup": { - "name": "CIWebGroup", - "categoryId": 4, - "url": "http://www.ciwebgroup.com/", - "companyId": "ciwebgroup" - }, - "clcknads.pro": { - "name": "clcknads.pro", - "categoryId": 3, - "url": null, - "companyId": null - }, - "clear_pier": { - "name": "ClearPier", - "categoryId": 4, - "url": "http://clearpier.com/", - "companyId": "clear_pier" - }, - "clearbit.com": { - "name": "Clearbit", - "categoryId": 6, - "url": "https://clearbit.com/", - "companyId": "clearbit" - }, - "clearsale": { - "name": "clearsale", - "categoryId": 4, - "url": "https://www.clear.sale/", - "companyId": null - }, - "clearstream.tv": { - "name": "Clearstream.TV", - "categoryId": 4, - "url": "http://clearstream.tv/", - "companyId": "clearstream.tv" - }, - "clerk.io": { - "name": "Clerk.io", - "categoryId": 4, - "url": "https://clerk.io/", - "companyId": "clerk.io" - }, - "clever_push": { - "name": "Clever Push", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_push" - }, - "clever_tap": { - "name": "CleverTap", - "categoryId": 6, - "url": "https://clevertap.com/", - "companyId": "clever_tap" - }, - "cleversite": { - "name": "Cleversite", - "categoryId": 2, - "url": "http://cleversite.ru/", - "companyId": "cleversite" - }, - "click360": { - "name": "Click360", - "categoryId": 6, - "url": "https://www.click360.io/", - "companyId": "click360" - }, - "click_and_chat": { - "name": "Click and Chat", - "categoryId": 2, - "url": "http://www.clickandchat.com/", - "companyId": "clickandchat" - }, - "click_back": { - "name": "Click Back", - "categoryId": 4, - "url": "http://www.clickback.com/", - "companyId": "clickback" - }, - "clickaider": { - "name": "ClickAider", - "categoryId": 4, - "url": "http://clickaider.com/", - "companyId": "clickaider" - }, - "clickaine": { - "name": "Clickaine", - "categoryId": 4, - "url": "https://clickaine.com/", - "companyId": "clickaine", - "source": "AdGuard" - }, - "clickbank": { - "name": "ClickBank", - "categoryId": 4, - "url": "http://www.clickbank.com/", - "companyId": "clickbank" - }, - "clickbank_proads": { - "name": "ClickBank ProAds", - "categoryId": 4, - "url": "http://www.cbproads.com/", - "companyId": "clickbank_proads" - }, - "clickbooth": { - "name": "Clickbooth", - "categoryId": 4, - "url": "http://www.clickbooth.com/", - "companyId": "clickbooth" - }, - "clickcease": { - "name": "ClickCease", - "categoryId": 2, - "url": "https://www.clickcease.com/", - "companyId": "click_cease" - }, - "clickcertain": { - "name": "ClickCertain", - "categoryId": 4, - "url": "http://www.clickcertain.com", - "companyId": "clickcertain" - }, - "clickdesk": { - "name": "ClickDesk", - "categoryId": 2, - "url": "https://www.clickdesk.com/", - "companyId": "clickdesk" - }, - "clickdimensions": { - "name": "ClickDimensions", - "categoryId": 4, - "url": "http://www.clickdimensions.com/", - "companyId": "clickdimensions" - }, - "clickequations": { - "name": "ClickEquations", - "categoryId": 4, - "url": "http://www.clickequations.com/", - "companyId": "acquisio" - }, - "clickexperts": { - "name": "ClickExperts", - "categoryId": 4, - "url": "http://clickexperts.com/corp/index.php?lang=en", - "companyId": "clickexperts" - }, - "clickforce": { - "name": "ClickForce", - "categoryId": 4, - "url": "http://www.clickforce.com.tw/", - "companyId": "clickforce" - }, - "clickinc": { - "name": "ClickInc", - "categoryId": 4, - "url": "http://www.clickinc.com", - "companyId": "clickinc" - }, - "clickintext": { - "name": "ClickInText", - "categoryId": 4, - "url": "http://www.clickintext.com/", - "companyId": "clickintext" - }, - "clickky": { - "name": "Clickky", - "categoryId": 4, - "url": "http://www.clickky.biz/", - "companyId": "clickky" - }, - "clickmeter": { - "name": "ClickMeter", - "categoryId": 4, - "url": "http://www.clickmeter.com", - "companyId": "clickmeter" - }, - "clickonometrics": { - "name": "Clickonometrics", - "categoryId": 4, - "url": "http://clickonometrics.pl/", - "companyId": "clickonometrics" - }, - "clickpoint": { - "name": "Clickpoint", - "categoryId": 4, - "url": "http://clickpoint.com/", - "companyId": "clickpoint" - }, - "clickprotector": { - "name": "ClickProtector", - "categoryId": 6, - "url": "http://www.clickprotector.com/", - "companyId": "clickprotector" - }, - "clickreport": { - "name": "ClickReport", - "categoryId": 6, - "url": "http://clickreport.com/", - "companyId": "clickreport" - }, - "clicks_thru_networks": { - "name": "Clicks Thru Networks", - "categoryId": 4, - "url": "http://www.clicksthrunetwork.com/", - "companyId": "clicksthrunetwork" - }, - "clicksor": { - "name": "Clicksor", - "categoryId": 4, - "url": "http://clicksor.com/", - "companyId": "clicksor" - }, - "clicktale": { - "name": "ClickTale", - "categoryId": 6, - "url": "http://www.clicktale.com/", - "companyId": "clicktale" - }, - "clicktripz": { - "name": "ClickTripz", - "categoryId": 4, - "url": "https://www.clicktripz.com", - "companyId": "clicktripz" - }, - "clickwinks": { - "name": "Clickwinks", - "categoryId": 4, - "url": "http://www.clickwinks.com/", - "companyId": "clickwinks" - }, - "clicky": { - "name": "Clicky", - "categoryId": 6, - "url": "http://getclicky.com/", - "companyId": "clicky" - }, - "clickyab": { - "name": "Clickyab", - "categoryId": 4, - "url": "https://www.clickyab.com/", - "companyId": "clickyab" - }, - "clicmanager": { - "name": "ClicManager", - "categoryId": 4, - "url": "http://www.clicmanager.fr/", - "companyId": "clicmanager" - }, - "clip_syndicate": { - "name": "Clip Syndicate", - "categoryId": 4, - "url": "http://www.clipsyndicate.com/", - "companyId": "clip_syndicate" - }, - "clixgalore": { - "name": "clixGalore", - "categoryId": 4, - "url": "http://www.clixgalore.com/", - "companyId": "clixgalore" - }, - "clixmetrix": { - "name": "ClixMetrix", - "categoryId": 4, - "url": "http://www.clixmetrix.com/", - "companyId": "clixmedia" - }, - "clixsense": { - "name": "ClixSense", - "categoryId": 4, - "url": "http://www.clixsense.com/", - "companyId": "clixsense" - }, - "cloud-media.fr": { - "name": "CloudMedia", - "categoryId": 4, - "url": "https://cloudmedia.fr/", - "companyId": null - }, - "cloudflare": { - "name": "CloudFlare", - "categoryId": 9, - "url": "https://www.cloudflare.com/", - "companyId": "cloudflare" - }, - "cloudimage.io": { - "name": "Cloudimage.io", - "categoryId": 9, - "url": "https://www.cloudimage.io/en/home", - "companyId": "scaleflex_sas" - }, - "cloudinary": { - "name": "Cloudinary", - "categoryId": 9, - "url": "https://cloudinary.com/", - "companyId": null - }, - "clove_network": { - "name": "Clove Network", - "categoryId": 4, - "url": "http://www.clovenetwork.com/", - "companyId": "clove_network" - }, - "clustrmaps": { - "name": "ClustrMaps", - "categoryId": 4, - "url": "http://www.clustrmaps.com/", - "companyId": "clustrmaps" - }, - "cnbc": { - "name": "CNBC", - "categoryId": 8, - "url": "https://www.cnbc.com/", - "companyId": "nbcuniversal" - }, - "cnetcontent.com": { - "name": "Cnetcontent", - "categoryId": 8, - "url": "http://cnetcontent.com/", - "companyId": "cbs_interactive" - }, - "cnstats": { - "name": "CNStats", - "categoryId": 6, - "url": "http://cnstats.ru/", - "companyId": "cnstats" - }, - "cnzz.com": { - "name": "Umeng", - "categoryId": 6, - "url": "http://www.umeng.com/", - "companyId": "umeng" - }, - "coadvertise": { - "name": "COADVERTISE", - "categoryId": 4, - "url": "http://www.coadvertise.com/", - "companyId": "coadvertise" - }, - "cobrowser": { - "name": "CoBrowser", - "categoryId": 2, - "url": "https://www.cobrowser.net/", - "companyId": "cobrowser.net" - }, - "codeonclick.com": { - "name": "codeonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cogocast": { - "name": "CogoCast", - "categoryId": 4, - "url": "http://www.cogocast.com", - "companyId": "cogocast" - }, - "coin_have": { - "name": "Coin Have", - "categoryId": 4, - "url": "https://coin-have.com/", - "companyId": "coin_have" - }, - "coin_traffic": { - "name": "Coin Traffic", - "categoryId": 2, - "url": "https://cointraffic.io/", - "companyId": "coin_traffic" - }, - "coinhive": { - "name": "Coinhive", - "categoryId": 8, - "url": "https://coinhive.com/", - "companyId": "coinhive" - }, - "coinurl": { - "name": "CoinURL", - "categoryId": 4, - "url": "https://coinurl.com/", - "companyId": "coinurl" - }, - "coll1onf.com": { - "name": "coll1onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "coll2onf.com": { - "name": "coll2onf.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "collarity": { - "name": "Collarity", - "categoryId": 4, - "url": "http://www.collarity.com/", - "companyId": "collarity" - }, - "columbia_online": { - "name": "Columbia Online", - "categoryId": 4, - "url": "https://www.colombiaonline.com/", - "companyId": "columbia_online" - }, - "combotag": { - "name": "ComboTag", - "categoryId": 4, - "url": "https://www.combotag.com/", - "companyId": null - }, - "comcast_technology_solutions": { - "name": "Comcast Technology Solutions", - "categoryId": 0, - "url": "https://www.comcasttechnologysolutions.com/", - "companyId": "comcast_technology_solutions" - }, - "comm100": { - "name": "Comm100", - "categoryId": 2, - "url": "http://www.comm100.com/", - "companyId": "comm100" - }, - "commerce_sciences": { - "name": "Commerce Sciences", - "categoryId": 4, - "url": "http://commercesciences.com/", - "companyId": "commerce_sciences" - }, - "commercehub": { - "name": "CommerceHub", - "categoryId": 4, - "url": "http://www.mercent.com/", - "companyId": "commercehub" - }, - "commercialvalue.org": { - "name": "commercialvalue.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "commission_junction": { - "name": "CJ Affiliate", - "categoryId": 4, - "url": "http://www.cj.com/", - "companyId": "conversant" - }, - "communicator_corp": { - "name": "Communicator Corp", - "categoryId": 4, - "url": "http://www.communicatorcorp.com/", - "companyId": "communicator_corp" - }, - "communigator": { - "name": "CommuniGator", - "categoryId": 6, - "url": "http://www.wowanalytics.co.uk/", - "companyId": "communigator" - }, - "competexl": { - "name": "CompeteXL", - "categoryId": 6, - "url": "http://www.compete.com/help/s12", - "companyId": "wpp" - }, - "complex_media_network": { - "name": "Complex Media", - "categoryId": 4, - "url": "https://www.complex.com/", - "companyId": "verizon" - }, - "comprigo": { - "name": "comprigo", - "categoryId": 12, - "url": "https://www.comprigo.com/", - "companyId": null - }, - "comscore": { - "name": "ComScore, Inc.", - "categoryId": 6, - "url": "https://www.comscore.com/", - "companyId": "comscore" - }, - "conative.de": { - "name": "CoNative", - "categoryId": 4, - "url": "http://www.conative.de/", - "companyId": null - }, - "condenastdigital.com": { - "name": "Condé Nast Digital", - "categoryId": 8, - "url": "http://www.condenast.com/", - "companyId": "conde_nast" - }, - "conduit": { - "name": "Conduit", - "categoryId": 4, - "url": "http://www.conduit.com/", - "companyId": "conduit" - }, - "confirmit": { - "name": "Confirmit", - "categoryId": 4, - "url": "http://confirmit.com/", - "companyId": "confirmit" - }, - "congstar.de": { - "name": "congstar.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "connatix.com": { - "name": "Connatix", - "categoryId": 4, - "url": "https://connatix.com/", - "companyId": "connatix" - }, - "connectad": { - "name": "ConnectAd", - "categoryId": 4, - "url": "https://connectad.io/", - "companyId": "connectad" - }, - "connecto": { - "name": "Connecto", - "categoryId": 6, - "url": "http://www.connecto.io/", - "companyId": "connecto" - }, - "connexity": { - "name": "Connexity", - "categoryId": 4, - "url": "http://www.connexity.com", - "companyId": "shopzilla" - }, - "connextra": { - "name": "Connextra", - "categoryId": 4, - "url": "http://connextra.com/", - "companyId": "connextra" - }, - "constant_contact": { - "name": "Constant Contact", - "categoryId": 4, - "url": "http://www.constantcontact.com/index.jsp", - "companyId": "constant_contact" - }, - "consumable": { - "name": "Consumable", - "categoryId": 4, - "url": "http://consumable.com/index.html", - "companyId": "giftconnect" - }, - "contact_at_once": { - "name": "Contact At Once!", - "categoryId": 2, - "url": "http://www.contactatonce.com/", - "companyId": "contact_at_once!" - }, - "contact_impact": { - "name": "Contact Impact", - "categoryId": 4, - "url": "https://www.contactimpact.de/", - "companyId": "axel_springer" - }, - "contactme": { - "name": "ContactMe", - "categoryId": 4, - "url": "http://www.contactme.com", - "companyId": "contactme" - }, - "contaxe": { - "name": "Contaxe", - "categoryId": 5, - "url": "http://www.contaxe.com/", - "companyId": "contaxe" - }, - "content.ad": { - "name": "Content.ad", - "categoryId": 4, - "url": "https://www.content.ad/", - "companyId": "content.ad" - }, - "content_insights": { - "name": "Content Insights", - "categoryId": 6, - "url": "https://contentinsights.com/", - "companyId": "content_insights" - }, - "contentexchange.me": { - "name": "Content Exchange", - "categoryId": 6, - "url": "https://www.contentexchange.me/", - "companyId": "i.r.v." - }, - "contentful_gmbh": { - "name": "Contentful GmbH", - "categoryId": 9, - "url": "https://www.contentful.com/", - "companyId": "contentful_gmbh" - }, - "contentpass": { - "name": "ContentPass", - "categoryId": 6, - "url": "https://www.contentpass.de/", - "companyId": "contentpass" - }, - "contentsquare.net": { - "name": "ContentSquare", - "categoryId": 4, - "url": "https://www.contentsquare.com/", - "companyId": "content_square" - }, - "contentwrx": { - "name": "Contentwrx", - "categoryId": 6, - "url": "http://contentwrx.com/", - "companyId": "contentwrx" - }, - "context": { - "name": "C|ON|TEXT", - "categoryId": 4, - "url": "http://c-on-text.com", - "companyId": "c_on_text" - }, - "context.ad": { - "name": "Context.ad", - "categoryId": 4, - "url": "http://contextad.pl/", - "companyId": "context.ad" - }, - "continum_net": { - "name": "continum.net", - "categoryId": 10, - "url": "http://continum.net/", - "companyId": null - }, - "contribusource": { - "name": "Contribusource", - "categoryId": 4, - "url": "https://www.contribusource.com/", - "companyId": "contribusource" - }, - "convergetrack": { - "name": "ConvergeTrack", - "categoryId": 6, - "url": "http://www.convergedirect.com/technology/convergetrack.shtml", - "companyId": "convergedirect" - }, - "conversant": { - "name": "Conversant", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "conversio": { - "name": "CM Commerce", - "categoryId": 6, - "url": "https://cm-commerce.com/", - "companyId": "conversio" - }, - "conversion_logic": { - "name": "Conversion Logic", - "categoryId": 6, - "url": "http://www.conversionlogic.com/", - "companyId": "conversion_logic" - }, - "conversionruler": { - "name": "ConversionRuler", - "categoryId": 4, - "url": "http://www.conversionruler.com/", - "companyId": "market_ruler" - }, - "conversions_box": { - "name": "Conversions Box", - "categoryId": 7, - "url": "http://www.conversionsbox.com/", - "companyId": "conversions_box" - }, - "conversions_on_demand": { - "name": "Conversions On Demand", - "categoryId": 5, - "url": "https://www.conversionsondemand.com/", - "companyId": "conversions_on_demand" - }, - "conversive": { - "name": "Conversive", - "categoryId": 4, - "url": "http://www.conversive.nl/", - "companyId": "conversive" - }, - "convert": { - "name": "Convert", - "categoryId": 6, - "url": "https://www.convert.com/", - "companyId": "convert" - }, - "convertfox": { - "name": "ConvertFox", - "categoryId": 2, - "url": "https://convertfox.com/", - "companyId": "convertfox" - }, - "convertro": { - "name": "Convertro", - "categoryId": 4, - "url": "http://www.convertro.com/", - "companyId": "verizon" - }, - "conviva": { - "name": "Conviva", - "categoryId": 6, - "url": "http://www.conviva.com/", - "companyId": "conviva" - }, - "cookie_consent": { - "name": "Cookie Consent", - "categoryId": 5, - "url": "https://silktide.com/", - "companyId": "silktide" - }, - "cookie_script": { - "name": "Cookie Script", - "categoryId": 5, - "url": "https://cookie-script.com/", - "companyId": "cookie_script" - }, - "cookiebot": { - "name": "Cookiebot", - "categoryId": 5, - "url": "https://www.cookiebot.com/en/", - "companyId": "cybot" - }, - "cookieq": { - "name": "CookieQ", - "categoryId": 5, - "url": "http://cookieq.com/CookieQ", - "companyId": "baycloud" - }, - "cooliris": { - "name": "Cooliris", - "categoryId": 2, - "url": "http://www.cooliris.com", - "companyId": "cooliris" - }, - "copacet": { - "name": "Copacet", - "categoryId": 4, - "url": "http://copacet.com/", - "companyId": "copacet" - }, - "coreaudience": { - "name": "CoreAudience", - "categoryId": 4, - "url": "http://www.redaril.com/", - "companyId": "hearst" - }, - "coremotives": { - "name": "CoreMotives", - "categoryId": 4, - "url": "http://coremotives.com/", - "companyId": "coremotives" - }, - "coull": { - "name": "Coull", - "categoryId": 4, - "url": "http://coull.com/", - "companyId": "coull" - }, - "cpm_rocket": { - "name": "CPM Rocket", - "categoryId": 4, - "url": "http://www.cpmrocket.com/", - "companyId": "cpm_rocket" - }, - "cpmprofit": { - "name": "CPMProfit", - "categoryId": 4, - "url": "http://www.cpmprofit.com/", - "companyId": "cpmprofit" - }, - "cpmstar": { - "name": "CPMStar", - "categoryId": 4, - "url": "http://www.cpmstar.com", - "companyId": "cpmstar" - }, - "cpx.to": { - "name": "Captify", - "categoryId": 4, - "url": "https://www.captify.co.uk/", - "companyId": "captify" - }, - "cq_counter": { - "name": "CQ Counter", - "categoryId": 6, - "url": "http://www.cqcounter.com/", - "companyId": "cq_counter" - }, - "cqq5id8n.com": { - "name": "cqq5id8n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "cquotient.com": { - "name": "CQuotient", - "categoryId": 6, - "url": "https://www.demandware.com/#cquotient", - "companyId": "salesforce" - }, - "craftkeys": { - "name": "CraftKeys", - "categoryId": 4, - "url": "http://craftkeys.com/", - "companyId": "craftkeys" - }, - "crakmedia_network": { - "name": "Crakmedia Network", - "categoryId": 4, - "url": "http://crakmedia.com/", - "companyId": "crakmedia_network" - }, - "crankyads": { - "name": "CrankyAds", - "categoryId": 4, - "url": "http://www.crankyads.com", - "companyId": "crankyads" - }, - "crashlytics": { - "name": "Crashlytics", - "categoryId": 101, - "url": "https://crashlytics.com/", - "companyId": "google", - "source": "AdGuard" - }, - "crazy_egg": { - "name": "Crazy Egg", - "categoryId": 6, - "url": "http://crazyegg.com/", - "companyId": "crazy_egg" - }, - "creafi": { - "name": "Creafi", - "categoryId": 4, - "url": "http://www.creafi.com/en/home/", - "companyId": "crazy4media" - }, - "createjs": { - "name": "CreateJS", - "categoryId": 9, - "url": "https://createjs.com/", - "companyId": null - }, - "creative_commons": { - "name": "Creative Commons", - "categoryId": 8, - "url": "https://creativecommons.org/", - "companyId": "creative_commons_corp" - }, - "crimsonhexagon_com": { - "name": "Brandwatch", - "categoryId": 6, - "url": "https://www.brandwatch.com/", - "companyId": "brandwatch" - }, - "crimtan": { - "name": "Crimtan", - "categoryId": 4, - "url": "http://www.crimtan.com/", - "companyId": "crimtan" - }, - "crisp": { - "name": "Crisp", - "categoryId": 2, - "url": "https://crisp.chat/", - "companyId": "crisp" - }, - "criteo": { - "name": "Criteo", - "categoryId": 4, - "url": "http://www.criteo.com/", - "companyId": "criteo" - }, - "crm4d": { - "name": "CRM4D", - "categoryId": 6, - "url": "https://crm4d.com/", - "companyId": "crm4d" - }, - "crossengage": { - "name": "CrossEngage", - "categoryId": 6, - "url": "https://www.crossengage.io/", - "companyId": "crossengage" - }, - "crosspixel": { - "name": "Cross Pixel", - "categoryId": 4, - "url": "http://crosspixel.net/", - "companyId": "cross_pixel" - }, - "crosssell.info": { - "name": "econda Cross Sell", - "categoryId": 4, - "url": "https://www.econda.de/en/solutions/personalization/cross-sell/", - "companyId": "econda" - }, - "crossss": { - "name": "Crossss", - "categoryId": 4, - "url": "http://crossss.ru/", - "companyId": "crossss" - }, - "crowd_ignite": { - "name": "Crowd Ignite", - "categoryId": 4, - "url": "http://get.crowdignite.com/", - "companyId": "gorilla_nation_media" - }, - "crowd_science": { - "name": "Crowd Science", - "categoryId": 4, - "url": "http://www.crowdscience.com/", - "companyId": "crowd_science" - }, - "crowdprocess": { - "name": "CrowdProcess", - "categoryId": 2, - "url": "https://crowdprocess.com", - "companyId": "crowdprocess" - }, - "crowdynews": { - "name": "Crowdynews", - "categoryId": 7, - "url": "http://www.crowdynews.com/", - "companyId": "crowdynews" - }, - "crownpeak": { - "name": "Crownpeak", - "categoryId": 5, - "url": "https://www.crownpeak.com/", - "companyId": "crownpeak" - }, - "cryptoloot_miner": { - "name": "CryptoLoot Miner", - "categoryId": 4, - "url": "https://crypto-loot.com/", - "companyId": "cryptoloot" - }, - "ctnetwork": { - "name": "CTnetwork", - "categoryId": 4, - "url": "http://ctnetwork.hu/", - "companyId": "ctnetwork" - }, - "ctrlshift": { - "name": "CtrlShift", - "categoryId": 4, - "url": "http://www.adzcentral.com/", - "companyId": "ctrlshift" - }, - "cubed": { - "name": "Cubed", - "categoryId": 6, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "cuelinks": { - "name": "CueLinks", - "categoryId": 4, - "url": "http://www.cuelinks.com/", - "companyId": "cuelinks" - }, - "cup_interactive": { - "name": "Cup Interactive", - "categoryId": 4, - "url": "http://www.cupinteractive.com/", - "companyId": "cup_interactive" - }, - "curse.com": { - "name": "Curse", - "categoryId": 8, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "cursecdn.com": { - "name": "Curse CDN", - "categoryId": 9, - "url": "https://www.curse.com/", - "companyId": "amazon_associates" - }, - "customer.io": { - "name": "Customer.io", - "categoryId": 2, - "url": "http://www.customer.io/", - "companyId": "customer.io" - }, - "customerly": { - "name": "Customerly", - "categoryId": 2, - "url": "https://www.customerly.io/", - "companyId": "customerly" - }, - "cxense": { - "name": "cXense", - "categoryId": 4, - "url": "http://www.cxense.com/", - "companyId": "cxense" - }, - "cxo.name": { - "name": "Chip Analytics", - "categoryId": 6, - "url": "http://www.chip.de/", - "companyId": null - }, - "cyber_wing": { - "name": "Cyber Wing", - "categoryId": 4, - "url": "http://www.cyberwing.co.jp/", - "companyId": "cyberwing" - }, - "cybersource": { - "name": "CyberSource", - "categoryId": 6, - "url": "https://www.cybersource.com/en-gb.html", - "companyId": "visa" - }, - "cygnus": { - "name": "Cygnus", - "categoryId": 4, - "url": "http://www.cygnus.com/", - "companyId": "cygnus" - }, - "da-ads.com": { - "name": "da-ads.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dailymail.co.uk": { - "name": "Daily Mail", - "categoryId": 8, - "url": "http://www.dailymail.co.uk/home/index.html", - "companyId": "dmg_media" - }, - "dailymotion": { - "name": "Dailymotion", - "categoryId": 8, - "url": "https://vivendi.com/", - "companyId": "vivendi" - }, - "dailymotion_advertising": { - "name": "Dailymotion Advertising", - "categoryId": 4, - "url": "http://advertising.dailymotion.com/", - "companyId": "vivendi" - }, - "daisycon": { - "name": "Daisycon", - "categoryId": 4, - "url": "http://www.daisycon.com", - "companyId": "daisycon" - }, - "dantrack.net": { - "name": "DANtrack", - "categoryId": 4, - "url": "http://media.dantrack.net/privacy/", - "companyId": "dentsu_aegis_network" - }, - "darwin_marketing": { - "name": "Darwin Marketing", - "categoryId": 4, - "url": "http://www.darwinmarketing.com/", - "companyId": "darwin_marketing" - }, - "dashboard_ad": { - "name": "Dashboard Ad", - "categoryId": 4, - "url": "http://www.dashboardad.com/", - "companyId": "premium_access" - }, - "datacaciques.com": { - "name": "DataCaciques", - "categoryId": 6, - "url": "http://www.datacaciques.com/", - "companyId": null - }, - "datacoral": { - "name": "Datacoral", - "categoryId": 4, - "url": "https://datacoral.com/", - "companyId": "datacoral" - }, - "datacrushers": { - "name": "Datacrushers", - "categoryId": 6, - "url": "https://www.datacrushers.com/", - "companyId": "datacrushers" - }, - "datadome": { - "name": "DataDome", - "categoryId": 6, - "url": "https://datadome.co/", - "companyId": "datadome" - }, - "datalicious_datacollector": { - "name": "Datalicious DataCollector", - "categoryId": 6, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalicious_supertag": { - "name": "Datalicious SuperTag", - "categoryId": 5, - "url": "http://www.datalicious.com/", - "companyId": "datalicious" - }, - "datalogix": { - "name": "Datalogix", - "categoryId": 4, - "url": "https://www.oracle.com/corporate/acquisitions/datalogix/", - "companyId": "oracle" - }, - "datamind.ru": { - "name": "DataMind", - "categoryId": 4, - "url": "http://datamind.ru/", - "companyId": "datamind" - }, - "datatables": { - "name": "DataTables", - "categoryId": 2, - "url": "https://datatables.net/", - "companyId": null - }, - "datawrkz": { - "name": "Datawrkz", - "categoryId": 4, - "url": "http://datawrkz.com/", - "companyId": "datawrkz" - }, - "dataxpand": { - "name": "Dataxpand", - "categoryId": 4, - "url": "http://dataxpand.com/", - "companyId": "dataxpand" - }, - "dataxu": { - "name": "DataXu", - "categoryId": 4, - "url": "http://www.dataxu.com/", - "companyId": "dataxu" - }, - "datds.net": { - "name": "datds.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "datonics": { - "name": "Datonics", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "datran": { - "name": "Pulsepoint", - "categoryId": 4, - "url": "https://www.pulsepoint.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "davebestdeals.com": { - "name": "davebestdeals.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dawandastatic.com": { - "name": "Dawanda CDN", - "categoryId": 8, - "url": "https://dawanda.com/", - "companyId": null - }, - "dc_stormiq": { - "name": "DC StormIQ", - "categoryId": 4, - "url": "http://www.dc-storm.com/", - "companyId": "dc_storm" - }, - "dcbap.com": { - "name": "dcbap.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "dcmn.com": { - "name": "DCMN", - "categoryId": 4, - "url": "https://www.dcmn.com/", - "companyId": null - }, - "de_persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.nl", - "companyId": "de_persgroep" - }, - "deadline_funnel": { - "name": "Deadline Funnel", - "categoryId": 6, - "url": "https://deadlinefunnel.com/", - "companyId": "deadline_funnel" - }, - "dealer.com": { - "name": "Dealer.com", - "categoryId": 6, - "url": "http://www.dealer.com/", - "companyId": "dealer.com" - }, - "decibel_insight": { - "name": "Decibel Insight", - "categoryId": 6, - "url": "https://www.decibelinsight.com/", - "companyId": "decibel_insight" - }, - "dedicated_media": { - "name": "Dedicated Media", - "categoryId": 4, - "url": "http://www.dedicatedmedia.com/", - "companyId": "dedicated_media" - }, - "deep.bi": { - "name": "Deep.BI", - "categoryId": 6, - "url": "http://www.deep.bi/#", - "companyId": "deep.bi" - }, - "deepintent.com": { - "name": "DeepIntent", - "categoryId": 4, - "url": "https://www.deepintent.com/", - "companyId": "deep_intent" - }, - "defpush.com": { - "name": "defpush.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "deichmann.com": { - "name": "deichmann.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "delacon": { - "name": "Delacon", - "categoryId": 6, - "url": "http://www.delacon.com.au/", - "companyId": "delacon" - }, - "delivr": { - "name": "Delivr", - "categoryId": 6, - "url": "http://www.percentmobile.com/", - "companyId": "delivr" - }, - "delta_projects": { - "name": "Delta Projects", - "categoryId": 4, - "url": "http://www.adaction.se/", - "companyId": "delta_projects" - }, - "deluxe": { - "name": "Deluxe", - "categoryId": 6, - "url": "https://ww.deluxe.com/", - "companyId": "deluxe" - }, - "delve_networks": { - "name": "Delve Networks", - "categoryId": 7, - "url": "http://www.delvenetworks.com/", - "companyId": "limelight_networks" - }, - "demandbase": { - "name": "Demandbase", - "categoryId": 4, - "url": "http://www.demandbase.com/", - "companyId": "demandbase" - }, - "demandmedia": { - "name": "DemandMedia", - "categoryId": 4, - "url": "http://www.demandmedia.com", - "companyId": "leaf_group" - }, - "deqwas": { - "name": "Deqwas", - "categoryId": 6, - "url": "http://www.deqwas.com/", - "companyId": "deqwas" - }, - "devatics": { - "name": "Devatics", - "categoryId": 2, - "url": "http://www.devatics.co.uk/", - "companyId": "devatics" - }, - "developer_media": { - "name": "Developer Media", - "categoryId": 4, - "url": "http://www.developermedia.com/", - "companyId": "developer_media" - }, - "deviantart.net": { - "name": "deviantart.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dex_platform": { - "name": "DEX Platform", - "categoryId": 4, - "url": "http://blueadvertise.com/", - "companyId": "dex_platform" - }, - "dgm": { - "name": "dgm", - "categoryId": 4, - "url": "http://www.dgm-au.com/", - "companyId": "apd" - }, - "dialogtech": { - "name": "Dialogtech", - "categoryId": 6, - "url": "https://www.dialogtech.com/", - "companyId": "dialogtech" - }, - "dianomi": { - "name": "Dianomi", - "categoryId": 4, - "url": "http://www.dianomi.com/cms/", - "companyId": "dianomi" - }, - "didit_blizzard": { - "name": "Didit Blizzard", - "categoryId": 4, - "url": "http://www.didit.com/blizzard", - "companyId": "didit" - }, - "didit_maestro": { - "name": "Didit Maestro", - "categoryId": 4, - "url": "http://www.didit.com/maestro", - "companyId": "didit" - }, - "didomi": { - "name": "Didomi", - "categoryId": 5, - "url": "https://www.didomi.io/en/", - "companyId": "didomi" - }, - "digg_widget": { - "name": "Digg Widget", - "categoryId": 2, - "url": "http://digg.com/apple/Digg_Widget", - "companyId": "buysellads.com" - }, - "digicert_trust_seal": { - "name": "Digicert Trust Seal", - "categoryId": 5, - "url": "http://www.digicert.com/", - "companyId": "digicert" - }, - "digidip": { - "name": "Digidip", - "categoryId": 4, - "url": "http://www.digidip.net/", - "companyId": "digidip" - }, - "digiglitz": { - "name": "Digiglitz", - "categoryId": 6, - "url": "http://www.digiglitz.com/", - "companyId": "digiglitz" - }, - "digilant": { - "name": "Digilant", - "categoryId": 4, - "url": "https://www.digilant.com/", - "companyId": "digilant" - }, - "digioh": { - "name": "Digioh", - "categoryId": 4, - "url": "https://digioh.com/", - "companyId": "digioh", - "source": "AdGuard" - }, - "digital.gov": { - "name": "Digital.gov", - "categoryId": 6, - "url": "https://digital.gov/", - "companyId": "us_government" - }, - "digital_control_room": { - "name": "Digital Control Room", - "categoryId": 5, - "url": "http://www.cookiereports.com/", - "companyId": "digital_control_room" - }, - "digital_nomads": { - "name": "Digital Nomads", - "categoryId": 4, - "url": "http://dnomads.net/", - "companyId": null - }, - "digital_remedy": { - "name": "Digital Remedy", - "categoryId": 4, - "url": "https://www.digitalremedy.com/", - "companyId": "digital_remedy" - }, - "digital_river": { - "name": "Digital River", - "categoryId": 4, - "url": "http://corporate.digitalriver.com", - "companyId": "digital_river" - }, - "digital_window": { - "name": "Digital Window", - "categoryId": 4, - "url": "http://www.digitalwindow.com/", - "companyId": "axel_springer" - }, - "digiteka": { - "name": "Digiteka", - "categoryId": 4, - "url": "http://digiteka.com/", - "companyId": "digiteka" - }, - "digitrust": { - "name": "DigiTrust", - "categoryId": 4, - "url": "http://www.digitru.st/", - "companyId": "iab" - }, - "dihitt_badge": { - "name": "diHITT Badge", - "categoryId": 7, - "url": "http://www.dihitt.com.br/", - "companyId": "dihitt" - }, - "dimml": { - "name": "DimML", - "categoryId": 8, - "url": null, - "companyId": null - }, - "direct_keyword_link": { - "name": "Direct Keyword Link", - "categoryId": 4, - "url": "http://www.keywordsconnect.com/", - "companyId": "direct_keyword_link" - }, - "directadvert": { - "name": "Direct/ADVERT", - "categoryId": 4, - "url": "http://www.directadvert.ru/", - "companyId": "directadvert" - }, - "directrev": { - "name": "DirectREV", - "categoryId": 4, - "url": "http://www.directrev.com/", - "companyId": "directrev" - }, - "discord": { - "name": "Discord", - "categoryId": 2, - "url": "https://discordapp.com/", - "companyId": null - }, - "disneyplus": { - "name": "Disney+", - "categoryId": 0, - "url": "https://www.disneyplus.com/", - "companyId": "disney", - "source": "AdGuard" - }, - "disneystreaming": { - "name": "Disney Streaming", - "categoryId": 0, - "url": "https://press.disneyplus.com", - "companyId": "disney", - "source": "AdGuard" - }, - "display_block": { - "name": "display block", - "categoryId": 4, - "url": "https://www.displayblock.com/", - "companyId": "display_block" - }, - "disqus": { - "name": "Disqus", - "categoryId": 1, - "url": "https://disqus.com/", - "companyId": "zeta" - }, - "disqus_ads": { - "name": "Disqus Ads", - "categoryId": 4, - "url": "https://disqusads.com/", - "companyId": "zeta" - }, - "distil_tag": { - "name": "Distil Networks", - "categoryId": 5, - "url": "https://www.distilnetworks.com/", - "companyId": "distil_networks" - }, - "districtm.io": { - "name": "district m", - "categoryId": 4, - "url": "https://districtm.net/", - "companyId": "district_m" - }, - "distroscale": { - "name": "Distroscale", - "categoryId": 6, - "url": "http://www.distroscale.com/", - "companyId": "distroscale" - }, - "div.show": { - "name": "div.show", - "categoryId": 12, - "url": null, - "companyId": null - }, - "diva": { - "name": "DiVa", - "categoryId": 6, - "url": "http://www.vertriebsassistent.de/", - "companyId": "diva" - }, - "divvit": { - "name": "Divvit", - "categoryId": 6, - "url": "https://www.divvit.com/", - "companyId": "divvit" - }, - "dm2": { - "name": "DM2", - "categoryId": 4, - "url": "http://digitalmediamanagement.com/", - "companyId": "digital_media_management" - }, - "dmg_media": { - "name": "DMG Media", - "categoryId": 8, - "url": "https://www.dmgmedia.co.uk/", - "companyId": "dmgt" - }, - "dmm": { - "name": "DMM", - "categoryId": 3, - "url": "http://www.dmm.co.jp", - "companyId": "dmm.r18" - }, - "dmwd": { - "name": "DMWD", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dockvine": { - "name": "dockvine", - "categoryId": 2, - "url": "https://www.dockvine.com", - "companyId": "dockvine" - }, - "docler": { - "name": "Docler", - "categoryId": 0, - "url": "https://www.doclerholding.com/en/about/companies/33/", - "companyId": "docler_ip" - }, - "dogannet": { - "name": "Dogannet", - "categoryId": 4, - "url": "http://s.dogannet.tv/", - "companyId": "dogannet" - }, - "domainglass": { - "name": "Domain Glass", - "categoryId": 8, - "url": "https://domain.glass/", - "companyId": "domainglass", - "source": "AdGuard" - }, - "domodomain": { - "name": "DomoDomain", - "categoryId": 6, - "url": "http://www.domodomain.com/", - "companyId": "intelligencefocus" - }, - "donationtools": { - "name": "iRobinHood", - "categoryId": 12, - "url": "http://www.irobinhood.org", - "companyId": null - }, - "doofinder.com": { - "name": "doofinder", - "categoryId": 2, - "url": "https://www.doofinder.com/", - "companyId": null - }, - "doorbell.io": { - "name": "Doorbell.io", - "categoryId": 5, - "url": "https://doorbell.io/", - "companyId": "doorbell.io" - }, - "dotandmedia": { - "name": "DotAndMedia", - "categoryId": 4, - "url": "http://www.dotandmedia.com", - "companyId": "dotandmedia" - }, - "dotmailer": { - "name": "dotMailer", - "categoryId": 2, - "url": "http://www.dotdigitalgroup.com/", - "companyId": "dotdigital_group" - }, - "dotmetrics.net": { - "name": "Dotmetrics", - "categoryId": 6, - "url": "https://dotmetrics.net/", - "companyId": null - }, - "dotomi": { - "name": "Dotomi", - "categoryId": 4, - "url": "http://www.dotomi.com/", - "companyId": "conversant" - }, - "double.net": { - "name": "Double.net", - "categoryId": 4, - "url": "http://double.net/en/", - "companyId": "double.net" - }, - "doubleclick": { - "name": "DoubleClick", - "categoryId": 4, - "url": "http://www.doubleclick.com", - "companyId": "google" - }, - "doubleclick_ad_buyer": { - "name": "DoubleClick Ad Exchange-Buyer", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doubleclick_bid_manager": { - "name": "DoubleClick Bid Manager", - "categoryId": 4, - "url": "http://www.invitemedia.com", - "companyId": "google" - }, - "doubleclick_floodlight": { - "name": "DoubleClick Floodlight", - "categoryId": 4, - "url": "http://www.google.com/support/dfa/partner/bin/topic.py?topic=23943", - "companyId": "google" - }, - "doubleclick_spotlight": { - "name": "DoubleClick Spotlight", - "categoryId": 4, - "url": "http://www.doubleclick.com/products/richmedia", - "companyId": "google" - }, - "doubleclick_video_stats": { - "name": "Doubleclick Video Stats", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "doublepimp": { - "name": "DoublePimp", - "categoryId": 3, - "url": "http://www.doublepimp.com/", - "companyId": "doublepimp" - }, - "doubleverify": { - "name": "DoubleVerify", - "categoryId": 4, - "url": "http://www.doubleverify.com/", - "companyId": "doubleverify" - }, - "dratio": { - "name": "Dratio", - "categoryId": 6, - "url": "http://www.dratio.com/", - "companyId": "dratio" - }, - "drawbridge": { - "name": "Drawbridge", - "categoryId": 4, - "url": "http://www.drawbrid.ge/", - "companyId": "drawbridge" - }, - "dreame_tech": { - "name": "Dreame Technology", - "categoryId": 8, - "url": "https://www.dreame.tech/", - "companyId": "xiaomi", - "source": "AdGuard" - }, - "dreamlab.pl": { - "name": "DreamLab.pl", - "categoryId": 4, - "url": "https://www.dreamlab.pl/", - "companyId": "onet.pl" - }, - "drift": { - "name": "Drift", - "categoryId": 2, - "url": "https://www.drift.com/", - "companyId": "drift" - }, - "drip": { - "name": "Drip", - "categoryId": 2, - "url": "https://www.getdrip.com", - "companyId": "drip" - }, - "dropbox.com": { - "name": "Dropbox", - "categoryId": 2, - "url": "https://www.dropbox.com/", - "companyId": null - }, - "dsnr_media_group": { - "name": "DSNR Media Group", - "categoryId": 4, - "url": "http://www.dsnrmg.com/", - "companyId": "dsnr_media_group" - }, - "dsp_rambler": { - "name": "Rambler DSP", - "categoryId": 4, - "url": "http://dsp.rambler.ru/", - "companyId": "rambler" - }, - "dstillery": { - "name": "Dstillery", - "categoryId": 4, - "url": "https://dstillery.com/", - "companyId": "dstillery" - }, - "dtscout.com": { - "name": "DTScout", - "categoryId": 4, - "url": "http://www.dtscout.com/", - "companyId": "dtscout" - }, - "dudamobile": { - "name": "DudaMobile", - "categoryId": 4, - "url": "https://www.dudamobile.com/", - "companyId": "dudamobile" - }, - "dun_and_bradstreet": { - "name": "Dun and Bradstreet", - "categoryId": 6, - "url": "http://www.dnb.com/#", - "companyId": "dun_&_bradstreet" - }, - "dwstat.cn": { - "name": "dwstat.cn", - "categoryId": 6, - "url": "http://www.dwstat.cn/", - "companyId": "dwstat" - }, - "dynad": { - "name": "DynAd", - "categoryId": 4, - "url": "http://dynad.net/", - "companyId": "dynad" - }, - "dynadmic": { - "name": "DynAdmic", - "categoryId": 4, - "url": null, - "companyId": null - }, - "dynamic_1001_gmbh": { - "name": "Dynamic 1001 GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "dynamic_logic": { - "name": "Dynamic Logic", - "categoryId": 4, - "url": "http://www.dynamiclogic.com/", - "companyId": "millward_brown" - }, - "dynamic_yield": { - "name": "Dynamic Yield", - "categoryId": 5, - "url": "https://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynamic_yield_analytics": { - "name": "Dynamic Yield Analytics", - "categoryId": 6, - "url": "http://www.dynamicyield.com/", - "companyId": "dynamic_yield" - }, - "dynata": { - "name": "Dynata", - "categoryId": 4, - "url": "http://hottraffic.nl/en", - "companyId": "dynata" - }, - "dynatrace.com": { - "name": "Dynatrace", - "categoryId": 6, - "url": "https://www.dynatrace.com/", - "companyId": "thoma_bravo" - }, - "dyncdn.me": { - "name": "dyncdn.me", - "categoryId": 11, - "url": null, - "companyId": null - }, - "e-planning": { - "name": "e-planning", - "categoryId": 4, - "url": "http://www.e-planning.net/", - "companyId": "e-planning" - }, - "eadv": { - "name": "eADV", - "categoryId": 4, - "url": "http://eadv.it/", - "companyId": "eadv" - }, - "eanalyzer.de": { - "name": "eanalyzer.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "early_birds": { - "name": "Early Birds", - "categoryId": 4, - "url": "http://www.early-birds.fr/", - "companyId": "early_birds" - }, - "earnify": { - "name": "Earnify", - "categoryId": 4, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "earnify_tracker": { - "name": "Earnify Tracker", - "categoryId": 6, - "url": "https://www.earnify.com/", - "companyId": "earnify" - }, - "easyads": { - "name": "EasyAds", - "categoryId": 4, - "url": "https://easyads.bg/", - "companyId": "easyads" - }, - "easylist_club": { - "name": "easylist.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ebay": { - "name": "eBay Stats", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "ebay_korea": { - "name": "eBay Korea", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "ebay_partner_network": { - "name": "eBay Partner Network", - "categoryId": 4, - "url": "https://www.ebaypartnernetwork.com/files/hub/en-US/index.html", - "companyId": "ebay_partner_network" - }, - "ebuzzing": { - "name": "eBuzzing", - "categoryId": 4, - "url": "http://www.ebuzzing.com/", - "companyId": "ebuzzing" - }, - "echo": { - "name": "Echo", - "categoryId": 4, - "url": "http://js-kit.com/", - "companyId": "echo" - }, - "eclick": { - "name": "eClick", - "categoryId": 4, - "url": "http://eclick.vn", - "companyId": "eclick" - }, - "econda": { - "name": "Econda", - "categoryId": 6, - "url": "http://www.econda.de/", - "companyId": "econda" - }, - "ecotag": { - "name": "ecotag", - "categoryId": 4, - "url": "http://www.eco-tag.jp/", - "companyId": "ecotag" - }, - "edgio": { - "name": "Edgio", - "categoryId": 9, - "url": "https://edg.io/", - "companyId": "edgio", - "source": "AdGuard" - }, - "edigitalresearch": { - "name": "eDigitalResearch", - "categoryId": 4, - "url": "http://www.edigitalresearch.com/", - "companyId": "edigitalresearch" - }, - "effective_measure": { - "name": "Effective Measure", - "categoryId": 4, - "url": "http://www.effectivemeasure.com/", - "companyId": "effective_measure" - }, - "effiliation": { - "name": "Effiliation", - "categoryId": 4, - "url": "http://www.effiliation.com/", - "companyId": "effiliation" - }, - "egain": { - "name": "eGain", - "categoryId": 2, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "egain_analytics": { - "name": "eGain Analytics", - "categoryId": 6, - "url": "http://www.egain.com/", - "companyId": "egain" - }, - "ehi-siegel_de": { - "name": "ehi-siegel.de", - "categoryId": 2, - "url": "http://ehi-siegel.de/", - "companyId": null - }, - "ekmpinpoint": { - "name": "ekmPinPoint", - "categoryId": 6, - "url": "http://ekmpinpoint.com/", - "companyId": "ekmpinpoint" - }, - "ekomi": { - "name": "eKomi", - "categoryId": 1, - "url": "http://www.ekomi.co.uk", - "companyId": "ekomi" - }, - "elastic_ad": { - "name": "Elastic Ad", - "categoryId": 4, - "url": "http://www.elasticad.com", - "companyId": "elastic_ad" - }, - "elastic_beanstalk": { - "name": "Elastic Beanstalk", - "categoryId": 6, - "url": "http://www.amazon.com/", - "companyId": "amazon_associates" - }, - "electronic_arts": { - "name": "Electronic Arts", - "categoryId": 2, - "url": "https://www.ea.com/", - "companyId": "electronic_arts", - "source": "AdGuard" - }, - "element": { - "name": "Element", - "categoryId": 7, - "url": "https://element.io/", - "companyId": "element", - "source": "AdGuard" - }, - "elicit": { - "name": "elicit", - "categoryId": 4, - "url": "http://www.elicitsearch.com/", - "companyId": "elicit" - }, - "eloqua": { - "name": "Eloqua", - "categoryId": 4, - "url": "http://www.eloqua.com/", - "companyId": "oracle" - }, - "eluxer_net": { - "name": "eluxer.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "email_aptitude": { - "name": "Email Aptitude", - "categoryId": 4, - "url": "http://www.emailaptitude.com/", - "companyId": "email_aptitude" - }, - "email_attitude": { - "name": "Email Attitude", - "categoryId": 4, - "url": "http://us.email-attitude.com/Default.aspx", - "companyId": "1000mercis" - }, - "emarketeer": { - "name": "emarketeer", - "categoryId": 4, - "url": "http://www.emarketeer.com/", - "companyId": "emarketeer" - }, - "embed.ly": { - "name": "Embedly", - "categoryId": 6, - "url": "http://embed.ly/", - "companyId": "medium" - }, - "emediate": { - "name": "Emediate", - "categoryId": 4, - "url": "http://www.emediate.biz/", - "companyId": "cxense" - }, - "emetriq": { - "name": "emetriq", - "categoryId": 4, - "url": "http://www.emetriq.com", - "companyId": "emetriq" - }, - "emma": { - "name": "Emma", - "categoryId": 4, - "url": "http://myemma.com/", - "companyId": "emma" - }, - "emnet": { - "name": "eMnet", - "categoryId": 4, - "url": "http://www.emnet.co.kr", - "companyId": "emnet" - }, - "empathy": { - "name": "Empathy", - "categoryId": 4, - "url": "http://www.colbenson.com", - "companyId": "empathy" - }, - "emsmobile.de": { - "name": "EMS Mobile", - "categoryId": 8, - "url": "http://www.emsmobile.com/", - "companyId": null - }, - "encore_metrics": { - "name": "Encore Metrics", - "categoryId": 4, - "url": "http://sitecompass.com", - "companyId": "flashtalking" - }, - "enecto_analytics": { - "name": "Enecto Analytics", - "categoryId": 6, - "url": "http://www.enecto.com/en/", - "companyId": "enecto" - }, - "engage_sciences": { - "name": "Engage Sciences", - "categoryId": 6, - "url": "http://www.engagesciences.com/", - "companyId": "engagesciences" - }, - "engageya_widget": { - "name": "Engageya Widget", - "categoryId": 4, - "url": "http://www.engageya.com/home/", - "companyId": "engageya" - }, - "engagio": { - "name": "Engagio", - "categoryId": 6, - "url": "https://www.engagio.com/", - "companyId": "engagio" - }, - "engineseeker": { - "name": "EngineSeeker", - "categoryId": 4, - "url": "http://www.engineseeker.com/", - "companyId": "engineseeker" - }, - "enquisite": { - "name": "Enquisite", - "categoryId": 4, - "url": "http://www.enquisite.com/", - "companyId": "inboundwriter" - }, - "enreach": { - "name": "Enreach", - "categoryId": 4, - "url": "https://enreach.me/", - "companyId": "enreach" - }, - "ensemble": { - "name": "Ensemble", - "categoryId": 4, - "url": "http://www.tumri.com", - "companyId": "ensemble" - }, - "ensighten": { - "name": "Ensighten", - "categoryId": 5, - "url": "http://www.ensighten.com", - "companyId": "ensighten" - }, - "envolve": { - "name": "Envolve", - "categoryId": 2, - "url": "https://www.envolve.com/", - "companyId": "envolve" - }, - "envybox": { - "name": "Envybox", - "categoryId": 2, - "url": "https://envybox.io/", - "companyId": "envybox" - }, - "eperflex": { - "name": "Eperflex", - "categoryId": 4, - "url": "https://eperflex.com/", - "companyId": "ividence" - }, - "epic_game_ads": { - "name": "Epic Game Ads", - "categoryId": 4, - "url": "http://www.epicgameads.com/", - "companyId": "epic_game_ads" - }, - "epic_marketplace": { - "name": "Epic Marketplace", - "categoryId": 4, - "url": "http://www.trafficmarketplace.com/", - "companyId": "epic_advertising" - }, - "epom": { - "name": "Epom", - "categoryId": 4, - "url": "http://epom.com/", - "companyId": "epom" - }, - "epoq": { - "name": "epoq", - "categoryId": 2, - "url": "http://www.epoq.de/", - "companyId": "epoq" - }, - "eprice": { - "name": "ePrice", - "categoryId": 4, - "url": "http://banzaiadv.it/", - "companyId": "eprice" - }, - "eproof": { - "name": "eProof", - "categoryId": 6, - "url": "http://www.eproof.com/", - "companyId": "eproof" - }, - "eqs_group": { - "name": "EQS Group", - "categoryId": 6, - "url": "https://www.eqs.com/", - "companyId": "eqs_group" - }, - "eqworks": { - "name": "EQWorks", - "categoryId": 4, - "url": "http://eqads.com", - "companyId": "eq_works" - }, - "eroadvertising": { - "name": "EroAdvertising", - "categoryId": 3, - "url": "http://www.ero-advertising.com/", - "companyId": "ero_advertising" - }, - "errorception": { - "name": "Errorception", - "categoryId": 6, - "url": "http://errorception.com/", - "companyId": "errorception" - }, - "eshopcomp.com": { - "name": "eshopcomp.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "espn_cdn": { - "name": "ESPN CDN", - "categoryId": 9, - "url": "http://www.espn.com/", - "companyId": "disney" - }, - "esprit.de": { - "name": "esprit.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "estat": { - "name": "eStat", - "categoryId": 6, - "url": "http://www.mediametrie-estat.com/", - "companyId": "mediametrie" - }, - "etag": { - "name": "etag", - "categoryId": 4, - "url": "http://etagdigital.com.br/", - "companyId": "etag" - }, - "etahub.com": { - "name": "etahub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "etarget": { - "name": "Etarget", - "categoryId": 4, - "url": "http://etargetnet.com/", - "companyId": "etarget" - }, - "ethnio": { - "name": "Ethnio", - "categoryId": 4, - "url": "http://ethn.io/", - "companyId": "ethnio" - }, - "etology": { - "name": "Etology", - "categoryId": 4, - "url": "http://www.etology.com", - "companyId": "etology" - }, - "etp": { - "name": "ETP", - "categoryId": 6, - "url": "https://www.etpgroup.com", - "companyId": "etp" - }, - "etracker": { - "name": "etracker", - "categoryId": 6, - "url": "http://www.etracker.com/en/", - "companyId": "etracker_gmbh" - }, - "etrigue": { - "name": "eTrigue", - "categoryId": 4, - "url": "http://www.etrigue.com/", - "companyId": "etrigue" - }, - "etsystatic": { - "name": "Etsy CDN", - "categoryId": 9, - "url": "https://www.etsy.com/", - "companyId": "etsy" - }, - "eulerian": { - "name": "Eulerian", - "categoryId": 6, - "url": "https://www.eulerian.com/", - "companyId": "eulerian" - }, - "euroads": { - "name": "Euroads", - "categoryId": 4, - "url": "http://euroads.com/en/", - "companyId": "euroads" - }, - "europecash": { - "name": "Europecash", - "categoryId": 4, - "url": "https://www.europacash.com/", - "companyId": "europacash" - }, - "euroweb_counter": { - "name": "Euroweb Counter", - "categoryId": 4, - "url": "http://www.euroweb.de/", - "companyId": "euroweb" - }, - "evergage.com": { - "name": "Evergage", - "categoryId": 2, - "url": "https://www.evergage.com", - "companyId": "evergage" - }, - "everstring": { - "name": "Everstring", - "categoryId": 6, - "url": "http://www.everstring.com/", - "companyId": "everstring" - }, - "everyday_health": { - "name": "Everyday Health", - "categoryId": 7, - "url": "http://www.everydayhealth.com/", - "companyId": "everyday_health" - }, - "evidon": { - "name": "Evidon", - "categoryId": 5, - "url": "https://www.evidon.com/", - "companyId": "crownpeak" - }, - "evisit_analyst": { - "name": "eVisit Analyst", - "categoryId": 4, - "url": "http://www.evisitanalyst.com", - "companyId": "evisit_analyst" - }, - "exact_drive": { - "name": "Exact Drive", - "categoryId": 4, - "url": "http://www.exactdrive.com/", - "companyId": "exact_drive" - }, - "exactag": { - "name": "Exactag", - "categoryId": 6, - "url": "http://www.exactag.com", - "companyId": "exactag" - }, - "exelate": { - "name": "eXelate", - "categoryId": 4, - "url": "http://www.exelate.com/", - "companyId": "nielsen" - }, - "exitjunction": { - "name": "ExitJunction", - "categoryId": 4, - "url": "https://secure.exitjunction.com", - "companyId": "exitjunction" - }, - "exoclick": { - "name": "ExoClick", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "exoticads.com": { - "name": "exoticads", - "categoryId": 3, - "url": "https://exoticads.com/welcome/", - "companyId": null - }, - "expedia": { - "name": "Expedia", - "categoryId": 8, - "url": "https://www.trvl-px.com/", - "companyId": "iac_apps" - }, - "experian": { - "name": "Experian", - "categoryId": 8, - "url": "https://www.experian.com/", - "companyId": "experian_inc" - }, - "experian_marketing_services": { - "name": "Experian Marketing Services", - "categoryId": 4, - "url": "http://www.experian.com/", - "companyId": "experian_inc" - }, - "expo-max": { - "name": "expo-MAX", - "categoryId": 4, - "url": "http://expo-max.com/", - "companyId": "expo-max" - }, - "expose_box": { - "name": "Expose Box", - "categoryId": 4, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "expose_box_widgets": { - "name": "Expose Box Widgets", - "categoryId": 2, - "url": "http://www.exposebox.com/", - "companyId": "expose_box" - }, - "express.co.uk": { - "name": "express.co.uk", - "categoryId": 8, - "url": "https://www.express.co.uk/", - "companyId": null - }, - "expressvpn": { - "name": "ExpressVPN", - "categoryId": 2, - "url": "https://www.expressvpn.com/", - "companyId": "expressvpn" - }, - "extreme_tracker": { - "name": "eXTReMe Tracker", - "categoryId": 6, - "url": "http://www.extremetracking.com/", - "companyId": "extreme_digital" - }, - "eye_newton": { - "name": "Eye Newton", - "categoryId": 2, - "url": "http://eyenewton.ru/", - "companyId": "eyenewton" - }, - "eyeota": { - "name": "Eyeota", - "categoryId": 4, - "url": "http://www.eyeota.com/", - "companyId": "eyeota" - }, - "eyereturnmarketing": { - "name": "Eyereturn Marketing", - "categoryId": 4, - "url": "https://eyereturnmarketing.com/", - "companyId": "torstar_corp" - }, - "eyeview": { - "name": "Eyeview", - "categoryId": 4, - "url": "http://www.eyeviewdigital.com/", - "companyId": "eyeview" - }, - "ezakus": { - "name": "Ezakus", - "categoryId": 4, - "url": "http://www.ezakus.com/", - "companyId": "np6" - }, - "f11-ads.com": { - "name": "Factor Eleven", - "categoryId": 4, - "url": null, - "companyId": null - }, - "facebook": { - "name": "Facebook", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_audience": { - "name": "Facebook Audience Network", - "categoryId": 4, - "url": "https://www.facebook.com/business/products/audience-network", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_beacon": { - "name": "Facebook Beacon", - "categoryId": 7, - "url": "http://www.facebook.com/beacon/faq.php", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_cdn": { - "name": "Facebook CDN", - "categoryId": 9, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_connect": { - "name": "Facebook Connect", - "categoryId": 6, - "url": "https://developers.facebook.com/connect.php", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_conversion_tracking": { - "name": "Facebook Conversion Tracking", - "categoryId": 4, - "url": "http://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_custom_audience": { - "name": "Facebook Custom Audience", - "categoryId": 4, - "url": "https://www.facebook.com", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_graph": { - "name": "Facebook Social Graph", - "categoryId": 7, - "url": "https://developers.facebook.com/docs/reference/api/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_impressions": { - "name": "Facebook Impressions", - "categoryId": 4, - "url": "https://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "facebook_social_plugins": { - "name": "Facebook Social Plugins", - "categoryId": 7, - "url": "https://developers.facebook.com/plugins", - "companyId": "meta", - "source": "AdGuard" - }, - "facetz.dca": { - "name": "Facetz.DCA", - "categoryId": 4, - "url": "http://facetz.net", - "companyId": "dca" - }, - "facilitate_digital": { - "name": "Facilitate Digital", - "categoryId": 4, - "url": "http://www.facilitatedigital.com/", - "companyId": "adslot" - }, - "faktor.io": { - "name": "faktor.io", - "categoryId": 6, - "url": "https://faktor.io/", - "companyId": "faktor.io" - }, - "fancy_widget": { - "name": "Fancy Widget", - "categoryId": 7, - "url": "http://www.thefancy.com/", - "companyId": "fancy" - }, - "fanplayr": { - "name": "Fanplayr", - "categoryId": 4, - "url": "http://www.fanplayr.com/", - "companyId": "fanplayr" - }, - "fap.to": { - "name": "Imagefap", - "categoryId": 8, - "url": null, - "companyId": null - }, - "farlight_pte_ltd": { - "name": "Farlight Pte Ltd.", - "categoryId": 8, - "url": "https://farlightgames.com/", - "companyId": "farlight", - "source": "AdGuard" - }, - "fastly_insights": { - "name": "Fastly Insights", - "categoryId": 6, - "url": "https://insights.fastlylabs.com/", - "companyId": "fastly" - }, - "fastlylb.net": { - "name": "Fastly", - "categoryId": 9, - "url": "https://www.fastly.com/", - "companyId": "fastly" - }, - "fastpic.ru": { - "name": "FastPic", - "categoryId": 10, - "url": "http://fastpic.ru/", - "companyId": "fastpic" - }, - "federated_media": { - "name": "Federated Media", - "categoryId": 4, - "url": "http://www.federatedmedia.net/", - "companyId": "hyfn" - }, - "feedbackify": { - "name": "Feedbackify", - "categoryId": 2, - "url": "http://www.feedbackify.com/", - "companyId": "feedbackify" - }, - "feedburner.com": { - "name": "FeedBurner", - "categoryId": 4, - "url": "https://feedburner.com", - "companyId": "google" - }, - "feedify": { - "name": "Feedify", - "categoryId": 7, - "url": "http://feedify.de/", - "companyId": "feedify" - }, - "feedjit": { - "name": "Feedjit", - "categoryId": 4, - "url": "http://feedjit.com/", - "companyId": "feedjit" - }, - "feedperfect": { - "name": "FeedPerfect", - "categoryId": 4, - "url": "http://www.feedperfect.com/", - "companyId": "feedperfect" - }, - "feedsportal": { - "name": "Feedsportal", - "categoryId": 4, - "url": "http://www.mediafed.com/", - "companyId": "mediafed" - }, - "feefo": { - "name": "Feefo", - "categoryId": 2, - "url": "http://www.feefo.com/web/en/us/", - "companyId": "feefo" - }, - "fidelity_media": { - "name": "Fidelity Media", - "categoryId": 4, - "url": "http://fidelity-media.com/", - "companyId": "fidelity_media" - }, - "fiksu": { - "name": "Fiksu", - "categoryId": 4, - "url": "https://fiksu.com/", - "companyId": "noosphere" - }, - "filament.io": { - "name": "Filament.io", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "fileserve": { - "name": "FileServe", - "categoryId": 10, - "url": "http://fileserve.com/", - "companyId": "fileserve" - }, - "financeads": { - "name": "FinanceADs", - "categoryId": 4, - "url": "https://www.financeads.net/", - "companyId": "financeads_gmbh_&_co._kg" - }, - "financial_content": { - "name": "Financial Content", - "categoryId": 4, - "url": "http://www.financialcontent.com", - "companyId": "financial_content" - }, - "findizer.fr": { - "name": "Findizer", - "categoryId": 8, - "url": "http://www.findizer.fr/", - "companyId": null - }, - "findologic.com": { - "name": "Findologic", - "categoryId": 2, - "url": "https://www.findologic.com/", - "companyId": "findologic" - }, - "firebase": { - "name": "Firebase", - "categoryId": 101, - "url": "https://firebase.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "firebaseio.com": { - "name": "Firebase", - "categoryId": 8, - "url": "https://firebase.google.com/", - "companyId": "google" - }, - "first_impression": { - "name": "First Impression", - "categoryId": 4, - "url": "http://www.firstimpression.io", - "companyId": "first_impression" - }, - "fit_analytics": { - "name": "Fit Analytics", - "categoryId": 6, - "url": "http://www.fitanalytics.com/", - "companyId": "fit_analytics" - }, - "fivetran": { - "name": "Fivetran", - "categoryId": 6, - "url": "https://fivetran.com/", - "companyId": "fivetran" - }, - "flag_ads": { - "name": "Flag Ads", - "categoryId": 4, - "url": "http://www.flagads.net/", - "companyId": "flag_ads" - }, - "flag_counter": { - "name": "Flag Counter", - "categoryId": 4, - "url": "http://flagcounter.com/", - "companyId": "flag_counter" - }, - "flash": { - "name": "Flash", - "categoryId": 0, - "url": "https://flashnews.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "flashtalking": { - "name": "Flashtalking", - "categoryId": 4, - "url": "http://www.flashtalking.com/", - "companyId": "flashtalking" - }, - "flattr_button": { - "name": "Flattr Button", - "categoryId": 7, - "url": "http://flattr.com/", - "companyId": "flattr" - }, - "flexoffers": { - "name": "FlexOffers", - "categoryId": 4, - "url": "http://www.flexoffers.com/", - "companyId": "flexoffers.com" - }, - "flickr_badge": { - "name": "Flickr Badge", - "categoryId": 7, - "url": "http://www.flickr.com/", - "companyId": "smugmug" - }, - "flipboard": { - "name": "Flipboard", - "categoryId": 6, - "url": "http://www.flipboard.com/", - "companyId": "flipboard" - }, - "flite": { - "name": "Flite", - "categoryId": 4, - "url": "http://www.flite.com/", - "companyId": "flite" - }, - "flixcdn.com": { - "name": "flixcdn.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "flixmedia": { - "name": "Flixmedia", - "categoryId": 8, - "url": "https://flixmedia.eu", - "companyId": "flixmedia" - }, - "flocktory.com": { - "name": "Flocktory", - "categoryId": 6, - "url": "https://www.flocktory.com/", - "companyId": "flocktory" - }, - "flowplayer": { - "name": "Flowplayer", - "categoryId": 4, - "url": "https://flowplayer.org/", - "companyId": "flowplayer" - }, - "fluct": { - "name": "Fluct", - "categoryId": 4, - "url": "https://corp.fluct.jp/", - "companyId": "fluct" - }, - "fluent": { - "name": "Fluent", - "categoryId": 4, - "url": "http://www.fluentco.com/", - "companyId": "fluent" - }, - "fluid": { - "name": "Fluid", - "categoryId": 4, - "url": "http://www.8thbridge.com/", - "companyId": "fluid" - }, - "fluidads": { - "name": "FluidAds", - "categoryId": 4, - "url": "http://www.fluidads.co/", - "companyId": "fluidads" - }, - "fluidsurveys": { - "name": "FluidSurveys", - "categoryId": 2, - "url": "http://fluidsurveys.com/", - "companyId": "fluidware" - }, - "flurry": { - "name": "Flurry", - "categoryId": 101, - "url": "http://www.flurry.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "flxone": { - "name": "FLXONE", - "categoryId": 4, - "url": "http://www.flxone.com/", - "companyId": "flxone" - }, - "flyertown": { - "name": "Flyertown", - "categoryId": 6, - "url": "http://www.flyertown.ca/", - "companyId": "flyertown" - }, - "fmadserving": { - "name": "FMAdserving", - "categoryId": 4, - "url": "http://www.fmadserving.dk/", - "companyId": "fm_adserving" - }, - "fonbet": { - "name": "Fonbet", - "categoryId": 6, - "url": "https://www.fonbet.ru", - "companyId": "fonbet" - }, - "fonecta": { - "name": "Fonecta", - "categoryId": 2, - "url": "http://www.fonecta.com/", - "companyId": "fonecta" - }, - "fontawesome_com": { - "name": "fontawesome.com", - "categoryId": 9, - "url": "http://fontawesome.com/", - "companyId": null - }, - "foodie_blogroll": { - "name": "Foodie Blogroll", - "categoryId": 7, - "url": "http://www.foodieblogroll.com", - "companyId": "foodie_blogroll" - }, - "footprint": { - "name": "Footprint", - "categoryId": 4, - "url": "http://www.footprintlive.com/", - "companyId": "opentracker" - }, - "footprintdns.com": { - "name": "Footprint DNS", - "categoryId": 11, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "forcetrac": { - "name": "ForceTrac", - "categoryId": 2, - "url": "http://www.forcetrac.com/", - "companyId": "force_marketing" - }, - "forensiq": { - "name": "Forensiq", - "categoryId": 4, - "url": "http://www.cpadetective.com/", - "companyId": "impact" - }, - "foresee": { - "name": "ForeSee", - "categoryId": 5, - "url": "https://www.foresee.com/", - "companyId": "foresee_results" - }, - "formisimo": { - "name": "Formisimo", - "categoryId": 4, - "url": "https://www.formisimo.com/", - "companyId": "formisimo" - }, - "forter": { - "name": "Forter", - "categoryId": 4, - "url": "https://www.forter.com/", - "companyId": "forter" - }, - "fortlachanhecksof.info": { - "name": "fortlachanhecksof.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "foursquare_widget": { - "name": "Foursquare Widget", - "categoryId": 4, - "url": "https://foursquare.com/", - "companyId": "foursquare" - }, - "fout.jp": { - "name": "FreakOut", - "categoryId": 4, - "url": "https://www.fout.co.jp/", - "companyId": "freakout" - }, - "fox_audience_network": { - "name": "Fox Audience Network", - "categoryId": 4, - "url": "https://publishers.foxaudiencenetwork.com/", - "companyId": "fox_audience_network" - }, - "fox_sports": { - "name": "Fox Sports", - "categoryId": 0, - "url": "https://foxsports.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "foxnews_static": { - "name": "Fox News CDN", - "categoryId": 9, - "url": "http://www.foxnews.com/", - "companyId": "fox_news" - }, - "foxpush": { - "name": "FoxPush", - "categoryId": 4, - "url": "https://www.foxpush.com/", - "companyId": "foxpush" - }, - "foxtel": { - "name": "Foxtel", - "categoryId": 0, - "url": "https://foxtel.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "foxydeal_com": { - "name": "foxydeal.com", - "categoryId": 12, - "url": "https://www.foxydeal.de", - "companyId": null - }, - "fraudlogix": { - "name": "FraudLogix", - "categoryId": 4, - "url": "https://www.fraudlogix.com/", - "companyId": null - }, - "free_counter": { - "name": "Free Counter", - "categoryId": 6, - "url": "http://www.statcounterfree.com/", - "companyId": "free_counter" - }, - "free_online_users": { - "name": "Free Online Users", - "categoryId": 6, - "url": "http://www.freeonlineusers.com", - "companyId": "free_online_users" - }, - "free_pagerank": { - "name": "Free PageRank", - "categoryId": 6, - "url": "http://www.free-pagerank.com/", - "companyId": "free_pagerank" - }, - "freedom_mortgage": { - "name": "Freedom Mortgage", - "categoryId": 6, - "url": "https://www.freedommortgage.com/", - "companyId": "freedom_mortgage" - }, - "freegeoip_net": { - "name": "freegeoip.net", - "categoryId": 6, - "url": "http://freegeoip.net/", - "companyId": null - }, - "freenet_de": { - "name": "freenet.de", - "categoryId": 4, - "url": "http://freenet.de/", - "companyId": "debitel" - }, - "freeview": { - "name": "Freeview", - "categoryId": 0, - "url": "https://freeview.com.au/", - "companyId": "freeview", - "source": "AdGuard" - }, - "freewheel": { - "name": "FreeWheel", - "categoryId": 4, - "url": "http://www.freewheel.tv/", - "companyId": "comcast" - }, - "fresh8": { - "name": "Fresh8", - "categoryId": 6, - "url": "http://fresh8gaming.com/", - "companyId": "fresh_8_gaming" - }, - "freshdesk": { - "name": "Freshdesk", - "categoryId": 2, - "url": "http://www.freshdesk.com", - "companyId": "freshdesk" - }, - "freshplum": { - "name": "Freshplum", - "categoryId": 4, - "url": "https://freshplum.com/", - "companyId": "freshplum" - }, - "friendbuy": { - "name": "FriendBuy", - "categoryId": 6, - "url": "https://www.friendbuy.com", - "companyId": "friendbuy" - }, - "friendfeed": { - "name": "FriendFeed", - "categoryId": 7, - "url": "http://friendfeed.com/", - "companyId": "facebook" - }, - "friendfinder_network": { - "name": "FriendFinder Network", - "categoryId": 3, - "url": "http://www.ffn.com/", - "companyId": "friendfinder_networks" - }, - "frosmo_optimizer": { - "name": "Frosmo Optimizer", - "categoryId": 4, - "url": "http://frosmo.com/", - "companyId": "frosmo" - }, - "fruitflan": { - "name": "FruitFlan", - "categoryId": 4, - "url": "http://flan-tech.com/", - "companyId": "keytiles" - }, - "fstrk.net": { - "name": "24metrics Fraudshield", - "categoryId": 6, - "url": "https://24metrics.com/", - "companyId": "24metrics" - }, - "fuelx": { - "name": "FuelX", - "categoryId": 4, - "url": "http://fuelx.com/", - "companyId": "fuelx" - }, - "fullstory": { - "name": "FullStory", - "categoryId": 6, - "url": "http://fullstory.com", - "companyId": "fullstory" - }, - "funnelytics": { - "name": "Funnelytics", - "categoryId": 6, - "url": "https://funnelytics.io/", - "companyId": "funnelytics" - }, - "fyber": { - "name": "Fyber", - "categoryId": 4, - "url": "https://www.fyber.com/", - "companyId": "fyber" - }, - "ga_audiences": { - "name": "GA Audiences", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "game_advertising_online": { - "name": "Game Advertising Online", - "categoryId": 4, - "url": "http://www.game-advertising-online.com/", - "companyId": "game_advertising_online" - }, - "gameanalytics": { - "name": "GameAnalytics", - "categoryId": 101, - "url": "https://gameanalytics.com/", - "companyId": "mobvista", - "source": "AdGuard" - }, - "gamedistribution.com": { - "name": "Gamedistribution.com", - "categoryId": 8, - "url": "http://gamedistribution.com/", - "companyId": null - }, - "gamerdna": { - "name": "gamerDNA", - "categoryId": 7, - "url": "http://www.gamerdnamedia.com/", - "companyId": "gamerdna_media" - }, - "gannett": { - "name": "Gannett Media", - "categoryId": 0, - "url": "https://www.gannett.com/", - "companyId": "gannett_digital_media_network" - }, - "gaug.es": { - "name": "Gaug.es", - "categoryId": 6, - "url": "http://get.gaug.es/", - "companyId": "euroweb" - }, - "gazprom-media_digital": { - "name": "Gazprom-Media Digital", - "categoryId": 0, - "url": "http://www.gpm-digital.com/", - "companyId": "gazprom-media_digital" - }, - "gb-world": { - "name": "GB-World", - "categoryId": 7, - "url": "http://www.gb-world.net/", - "companyId": "gb-world" - }, - "gdeslon": { - "name": "GdeSlon", - "categoryId": 4, - "url": "http://www.gdeslon.ru/", - "companyId": "gdeslon" - }, - "gdm_digital": { - "name": "GDM Digital", - "categoryId": 4, - "url": "http://www.gdmdigital.com/", - "companyId": "ve_interactive" - }, - "geeen": { - "name": "Geeen", - "categoryId": 6, - "url": "https://www.geeen.co.jp/", - "companyId": "geeen" - }, - "gemius": { - "name": "Gemius", - "categoryId": 4, - "url": "http://www.gemius.com", - "companyId": "gemius_sa" - }, - "generaltracking_de": { - "name": "generaltracking.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "genesis": { - "name": "Genesis", - "categoryId": 4, - "url": "http://genesismedia.com/", - "companyId": "genesis_media" - }, - "geniee": { - "name": "GENIEE", - "categoryId": 4, - "url": "http://geniee.co.jp/", - "companyId": null - }, - "genius": { - "name": "Genius", - "categoryId": 6, - "url": "http://www.genius.com/", - "companyId": "genius" - }, - "genoo": { - "name": "Genoo", - "categoryId": 4, - "url": "http://www.genoo.com/", - "companyId": "genoo" - }, - "geoads": { - "name": "GeoAds", - "categoryId": 4, - "url": "http://www.geoads.com", - "companyId": "geoads" - }, - "geolify": { - "name": "Geolify", - "categoryId": 4, - "url": "http://geolify.com/", - "companyId": "geolify" - }, - "geoplugin": { - "name": "geoPlugin", - "categoryId": 6, - "url": "http://www.geoplugin.com/", - "companyId": "geoplugin" - }, - "geotrust": { - "name": "GeoTrust", - "categoryId": 5, - "url": "http://www.geotrust.com/", - "companyId": "symantec" - }, - "geovisite": { - "name": "Geovisite", - "categoryId": 6, - "url": "http://www.geovisite.com/", - "companyId": "geovisite" - }, - "gestionpub": { - "name": "GestionPub", - "categoryId": 4, - "url": "http://www.gestionpub.com/", - "companyId": "gestionpub" - }, - "get_response": { - "name": "Get Response", - "categoryId": 2, - "url": "https://www.getresponse.com/?marketing_gv=v2", - "companyId": "getresponse" - }, - "get_site_control": { - "name": "Get Site Control", - "categoryId": 4, - "url": "https://getsitecontrol.com/", - "companyId": "getsitecontrol" - }, - "getconversion": { - "name": "GetConversion", - "categoryId": 2, - "url": "http://www.getconversion.net/", - "companyId": "getconversion" - }, - "getglue": { - "name": "GetGlue", - "categoryId": 0, - "url": "http://getglue.com", - "companyId": "telfie" - }, - "getintent": { - "name": "GetIntent", - "categoryId": 4, - "url": "http://www.getintent.com/", - "companyId": "getintent" - }, - "getkudos": { - "name": "GetKudos", - "categoryId": 1, - "url": "https://www.getkudos.me/", - "companyId": "zendesk" - }, - "getmyad": { - "name": "GetMyAd", - "categoryId": 4, - "url": "http://yottos.com", - "companyId": "yottos" - }, - "getsatisfaction": { - "name": "GetSatisfaction", - "categoryId": 1, - "url": "http://getsatisfaction.com/", - "companyId": "get_satisfaction" - }, - "gettyimages": { - "name": "Getty Images", - "categoryId": 8, - "url": "https://www.gettyimages.com/", - "companyId": null - }, - "gfk": { - "name": "GfK", - "categoryId": 4, - "url": "http://nurago.com/", - "companyId": "gfk_nurago" - }, - "gfycat.com": { - "name": "gfycat", - "categoryId": 7, - "url": "https://gfycat.com/", - "companyId": null - }, - "giant_realm": { - "name": "Giant Realm", - "categoryId": 4, - "url": "http://corp.giantrealm.com/", - "companyId": "giant_realm" - }, - "giantmedia": { - "name": "GiantMedia", - "categoryId": 4, - "url": "http://giantmedia.com/", - "companyId": "adknowledge" - }, - "giga": { - "name": "Giga", - "categoryId": 4, - "url": "https://gigaonclick.com", - "companyId": "giga" - }, - "gigya": { - "name": "Gigya", - "categoryId": 6, - "url": "https://www.sap.com/index.html", - "companyId": "sap" - }, - "gigya_beacon": { - "name": "Gigya Beacon", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_socialize": { - "name": "Gigya Socialize", - "categoryId": 2, - "url": "http://www.gigya.com", - "companyId": "sap" - }, - "gigya_toolbar": { - "name": "Gigya Toolbar", - "categoryId": 2, - "url": "http://www.gigya.com/", - "companyId": "sap" - }, - "giosg": { - "name": "Giosg", - "categoryId": 6, - "url": "https://www.giosg.com/", - "companyId": "giosg" - }, - "giphy.com": { - "name": "Giphy", - "categoryId": 7, - "url": "https://giphy.com/", - "companyId": null - }, - "giraff.io": { - "name": "Giraff.io", - "categoryId": 4, - "url": "https://www.giraff.io/", - "companyId": null - }, - "github": { - "name": "GitHub, Inc.", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "github_apps": { - "name": "GitHub Apps", - "categoryId": 2, - "url": "https://github.com/", - "companyId": "github" - }, - "github_pages": { - "name": "Github Pages", - "categoryId": 10, - "url": "https://pages.github.com/", - "companyId": "github" - }, - "gittigidiyor_affiliate_program": { - "name": "GittiGidiyor Affiliate Program", - "categoryId": 4, - "url": "http://www.ebay.com/", - "companyId": "ebay" - }, - "gittip": { - "name": "Gittip", - "categoryId": 2, - "url": "https://www.gittip.com/", - "companyId": "gittip" - }, - "glad_cube": { - "name": "Glad Cube", - "categoryId": 6, - "url": "http://www.glad-cube.com/", - "companyId": "glad_cube_inc." - }, - "glganltcs.space": { - "name": "glganltcs.space", - "categoryId": 12, - "url": null, - "companyId": null - }, - "global_web_index": { - "name": "GlobalWebIndex", - "categoryId": 6, - "url": "https://www.globalwebindex.com/", - "companyId": "global_web_index" - }, - "globalnotifier.com": { - "name": "globalnotifier.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "globalsign": { - "name": "GlobalSign", - "categoryId": 8, - "url": null, - "companyId": null - }, - "globaltakeoff": { - "name": "GlobalTakeoff", - "categoryId": 4, - "url": "http://www.globaltakeoff.net/", - "companyId": "globaltakeoff" - }, - "glomex.com": { - "name": "Glomex", - "categoryId": 0, - "url": "https://www.glomex.com/", - "companyId": "glomex" - }, - "glotgrx.com": { - "name": "glotgrx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "gm_delivery": { - "name": "GM Delivery", - "categoryId": 4, - "url": "http://a.gmdelivery.com/", - "companyId": "gm_delivery" - }, - "gmail": { - "name": "Gmail", - "categoryId": 13, - "url": "https://mail.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "gmo": { - "name": "GMO", - "categoryId": 4, - "url": "https://www.gmo.media/", - "companyId": "gmo_media" - }, - "gmx_net": { - "name": "gmx.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "go.com": { - "name": "go.com", - "categoryId": 8, - "url": "go.com", - "companyId": "disney" - }, - "godaddy_affiliate_program": { - "name": "GoDaddy Affiliate Program", - "categoryId": 4, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godaddy_site_analytics": { - "name": "GoDaddy Site Analytics", - "categoryId": 6, - "url": "https://www.godaddy.com/gdshop/hosting/stats_", - "companyId": "godaddy" - }, - "godaddy_site_seal": { - "name": "GoDaddy Site Seal", - "categoryId": 5, - "url": "http://www.godaddy.com/", - "companyId": "godaddy" - }, - "godatafeed": { - "name": "GoDataFeed", - "categoryId": 6, - "url": "http://www.godatafeed.com", - "companyId": "godatafeed" - }, - "goingup": { - "name": "GoingUp", - "categoryId": 6, - "url": "http://www.goingup.com/", - "companyId": "goingup" - }, - "gomez": { - "name": "Gomez", - "categoryId": 6, - "url": "http://www.gomez.com/", - "companyId": "dynatrace" - }, - "goodadvert": { - "name": "GoodADVERT", - "categoryId": 4, - "url": "http://goodadvert.ru/", - "companyId": "goodadvert" - }, - "google": { - "name": "Google", - "categoryId": 4, - "url": "https://www.google.com/", - "companyId": "google" - }, - "google_ads_measurement": { - "name": "Google Ads Measurement", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adsense": { - "name": "Google Adsense", - "categoryId": 4, - "url": "https://www.google.com/adsense/", - "companyId": "google" - }, - "google_adservices": { - "name": "Google AdServices", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_adwords_conversion": { - "name": "Google AdWords Conversion", - "categoryId": 4, - "url": "https://adwords.google.com/", - "companyId": "google" - }, - "google_adwords_user_lists": { - "name": "Google Adwords User Lists", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_analytics": { - "name": "Google Analytics", - "categoryId": 6, - "url": "http://www.google.com/analytics/", - "companyId": "google" - }, - "google_appspot": { - "name": "Google Appspot", - "categoryId": 10, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_auth": { - "name": "Google Auth", - "categoryId": 2, - "url": "https://myaccount.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_beacons": { - "name": "Google Beacons", - "categoryId": 6, - "url": "https://google.xyz", - "companyId": "google" - }, - "google_chat": { - "name": "Google Chat", - "categoryId": 7, - "url": "https://mail.google.com/chat/", - "companyId": "google", - "source": "AdGuard" - }, - "google_cloud_platform": { - "name": "Google Cloud Platform", - "categoryId": 10, - "url": "https://cloud.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_cloud_storage": { - "name": "Google Cloud Storage", - "categoryId": 10, - "url": "https://cloud.google.com/storage/", - "companyId": "google", - "source": "AdGuard" - }, - "google_custom_search": { - "name": "Google Custom Search Ads", - "categoryId": 4, - "url": "https://developers.google.com/custom-search-ads/", - "companyId": "google" - }, - "google_custom_search_engine": { - "name": "Google Programmable Search Engine", - "categoryId": 5, - "url": "https://programmablesearchengine.google.com/about/", - "companyId": "google" - }, - "google_dns": { - "name": "Google DNS", - "categoryId": 10, - "url": "https://dns.google/", - "companyId": "google", - "source": "AdGuard" - }, - "google_domains": { - "name": "Google Domains", - "categoryId": 10, - "url": "https://domains.google/", - "companyId": "google", - "source": "AdGuard" - }, - "google_edge": { - "name": "Google Edge CDN", - "categoryId": 9, - "url": "https://peering.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_email": { - "name": "Google Email", - "categoryId": 13, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_fonts": { - "name": "Google Fonts", - "categoryId": 9, - "url": "https://fonts.google.com/", - "companyId": "google" - }, - "google_hosted": { - "name": "Google Hosted", - "categoryId": 10, - "url": "https://workspace.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_ima": { - "name": "Google IMA", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_location": { - "name": "Google Location", - "categoryId": 8, - "url": "https://patents.google.com/patent/WO2007025143A1/", - "companyId": "google", - "source": "AdGuard" - }, - "google_maps": { - "name": "Google Maps", - "categoryId": 2, - "url": "https://www.google.com/maps/", - "companyId": "google", - "source": "AdGuard" - }, - "google_marketing": { - "name": "Google Marketing", - "categoryId": 4, - "url": "https://marketingplatform.google.com/about/enterprise", - "companyId": "google", - "source": "AdGuard" - }, - "google_meet": { - "name": "Google Meet", - "categoryId": 2, - "url": "https://meet.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_photos": { - "name": "Google Photos", - "categoryId": 9, - "url": "https://photos.google.com/", - "companyId": "google" - }, - "google_pingback": { - "name": "Google Pingback", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_play": { - "name": "Google Play", - "categoryId": 8, - "url": "https://play.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_plus": { - "name": "Google+ Platform", - "categoryId": 7, - "url": "http://www.google.com/+1/button/", - "companyId": "google" - }, - "google_publisher_tags": { - "name": "Google Publisher Tags", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_remarketing": { - "name": "Google Dynamic Remarketing", - "categoryId": 4, - "url": "http://adwords.google.com/", - "companyId": "google" - }, - "google_safeframe": { - "name": "Google Safeframe", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_servers": { - "name": "Google Servers", - "categoryId": 8, - "url": "https://support.google.com/faqs/answer/174717?hl=en", - "companyId": "google" - }, - "google_shopping_reviews": { - "name": "Google Shopping Reviews", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_syndication": { - "name": "Google Syndication", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_tag_manager": { - "name": "Google Tag Manager", - "categoryId": 5, - "url": "https://marketingplatform.google.com/about/tag-manager/", - "companyId": "google" - }, - "google_translate": { - "name": "Google Translate", - "categoryId": 2, - "url": "https://translate.google.com/manager", - "companyId": "google" - }, - "google_travel_adds": { - "name": "Google Travel Adds", - "categoryId": 4, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_trust_services": { - "name": "Google Trust Services", - "categoryId": 5, - "url": "https://pki.goog/", - "companyId": "google", - "source": "AdGuard" - }, - "google_trusted_stores": { - "name": "Google Trusted Stores", - "categoryId": 6, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_users": { - "name": "Google User Content", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_voice": { - "name": "Google Voice", - "categoryId": 2, - "url": "https://voice.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "google_website_optimizer": { - "name": "Google Website Optimizer", - "categoryId": 6, - "url": "https://www.google.com/analytics/siteopt/prev", - "companyId": "google" - }, - "google_widgets": { - "name": "Google Widgets", - "categoryId": 2, - "url": "http://www.google.com", - "companyId": "google" - }, - "google_workspace": { - "name": "Google Workspace", - "categoryId": 2, - "url": "https://workspace.google.com/", - "companyId": "google", - "source": "AdGuard" - }, - "googleapis.com": { - "name": "Google APIs", - "categoryId": 9, - "url": "https://www.googleapis.com/", - "companyId": "google" - }, - "goooal": { - "name": "Goooal", - "categoryId": 6, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "gorilla_nation": { - "name": "Gorilla Nation", - "categoryId": 4, - "url": "http://www.gorillanationmedia.com", - "companyId": "gorilla_nation_media" - }, - "gosquared": { - "name": "GoSquared", - "categoryId": 6, - "url": "http://www.gosquared.com/livestats/", - "companyId": "gosquared" - }, - "gostats": { - "name": "GoStats", - "categoryId": 6, - "url": "http://gostats.com/", - "companyId": "gostats" - }, - "govmetric": { - "name": "GovMetric", - "categoryId": 6, - "url": "http://www.govmetric.com/", - "companyId": "govmetric" - }, - "grabo_affiliate": { - "name": "Grabo Affiliate", - "categoryId": 4, - "url": "http://grabo.bg/", - "companyId": "grabo_media" - }, - "grandslammedia": { - "name": "GrandSlamMedia", - "categoryId": 4, - "url": "http://www.grandslammedia.com/", - "companyId": "grand_slam_media" - }, - "granify": { - "name": "Granify", - "categoryId": 6, - "url": "http://granify.com/", - "companyId": "granify" - }, - "grapeshot": { - "name": "Grapeshot", - "categoryId": 4, - "url": "https://www.grapeshot.com/", - "companyId": "oracle" - }, - "graph_comment": { - "name": "Graph Comment", - "categoryId": 5, - "url": "https://graphcomment.com/en/", - "companyId": "graph_comment" - }, - "gravatar": { - "name": "Gravatar", - "categoryId": 7, - "url": "http://en.gravatar.com/", - "companyId": "automattic" - }, - "gravitec": { - "name": "Gravitec", - "categoryId": 6, - "url": "https://gravitec.net/", - "companyId": "gravitec" - }, - "gravity_insights": { - "name": "Gravity Insights", - "categoryId": 6, - "url": "http://www.gravity.com/", - "companyId": "verizon" - }, - "greatviews.de": { - "name": "GreatViews", - "categoryId": 4, - "url": "http://greatviews.de/", - "companyId": "parship" - }, - "green_and_red": { - "name": "Green and Red", - "categoryId": 4, - "url": "http://www.green-red.com/", - "companyId": "green_&_red_technologies" - }, - "green_certified_site": { - "name": "Green Certified Site", - "categoryId": 2, - "url": "http://www.advenity.com/", - "companyId": "advenity" - }, - "green_story": { - "name": "Green Story", - "categoryId": 6, - "url": "https://greenstory.ca/", - "companyId": "green_story" - }, - "greentube.com": { - "name": "Greentube Internet Entertainment Solutions", - "categoryId": 7, - "url": "https://www.greentube.com/", - "companyId": null - }, - "greystripe": { - "name": "Greystripe", - "categoryId": 4, - "url": "http://www.greystripe.com/", - "companyId": "conversant" - }, - "groove": { - "name": "Groove", - "categoryId": 2, - "url": "http://www.groovehq.com/", - "companyId": "groove_networks" - }, - "groovinads": { - "name": "GroovinAds", - "categoryId": 4, - "url": "http://www.groovinads.com/en", - "companyId": "groovinads" - }, - "groundtruth": { - "name": "GroundTruth", - "categoryId": 4, - "url": "http://www.groundtruth.com/", - "companyId": "groundtruth" - }, - "groupm_server": { - "name": "GroupM Server", - "categoryId": 4, - "url": "http://www.groupm.com/", - "companyId": "wpp" - }, - "gsi_media": { - "name": "GSI Media", - "categoryId": 4, - "url": "http://gsimedia.net", - "companyId": "gsi_media_network" - }, - "gstatic": { - "name": "Google Static", - "categoryId": 9, - "url": "http://www.google.com", - "companyId": "google" - }, - "gtop": { - "name": "GTop", - "categoryId": 6, - "url": "http://www.gtopstats.com", - "companyId": "gtopstats" - }, - "gugaboo": { - "name": "Gugaboo", - "categoryId": 4, - "url": "https://www.gubagoo.com/", - "companyId": "gubagoo" - }, - "guj.de": { - "name": "Gruner + Jahr", - "categoryId": 4, - "url": "https://www.guj.de/", - "companyId": "gruner_jahr_ag" - }, - "gujems": { - "name": "G+J e|MS", - "categoryId": 4, - "url": "http://www.gujmedia.de/", - "companyId": "gruner_jahr_ag" - }, - "gumgum": { - "name": "gumgum", - "categoryId": 4, - "url": "http://gumgum.com/", - "companyId": "gumgum" - }, - "gumroad": { - "name": "Gumroad", - "categoryId": 7, - "url": "https://gumroad.com/", - "companyId": "gumroad" - }, - "gunggo": { - "name": "Gunggo", - "categoryId": 4, - "url": "http://www.gunggo.com/", - "companyId": "gunggo" - }, - "h12_ads": { - "name": "H12 Ads", - "categoryId": 4, - "url": "http://www.h12-media.com/", - "companyId": "h12_media_ads" - }, - "hacker_news_button": { - "name": "Hacker News Button", - "categoryId": 7, - "url": "http://news.ycombinator.com/", - "companyId": "hacker_news" - }, - "haendlerbund.de": { - "name": "Händlerbund", - "categoryId": 2, - "url": "https://www.haendlerbund.de/en", - "companyId": null - }, - "halogen_network": { - "name": "Halogen Network", - "categoryId": 7, - "url": "http://www.halogennetwork.com/", - "companyId": "social_chorus" - }, - "happy_fox_chat": { - "name": "Happy Fox Chat", - "categoryId": 2, - "url": "https://happyfoxchat.com/", - "companyId": "happy_fox_chat" - }, - "harren_media": { - "name": "Harren Media", - "categoryId": 4, - "url": "http://www.harrenmedia.com/index.html", - "companyId": "harren_media" - }, - "hatchbuck": { - "name": "Hatchbuck", - "categoryId": 6, - "url": "http://www.hatchbuck.com/", - "companyId": "hatchbuck" - }, - "head_hunter": { - "name": "Head Hunter", - "categoryId": 6, - "url": "https://hh.ru/", - "companyId": "head_hunter" - }, - "healte.de": { - "name": "healte.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "heap": { - "name": "Heap", - "categoryId": 6, - "url": "https://heapanalytics.com/", - "companyId": "heap" - }, - "heatmap": { - "name": "Heatmap", - "categoryId": 6, - "url": "https://heatmap.me/", - "companyId": "heatmap" - }, - "heimspiel": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "http://www.heimspiel.de", - "companyId": null - }, - "hello_bar": { - "name": "Hello Bar", - "categoryId": 7, - "url": "https://www.hellobar.com/", - "companyId": "crazy_egg" - }, - "hellosociety": { - "name": "HelloSociety", - "categoryId": 6, - "url": "http://hellosociety.com", - "companyId": "hellosociety" - }, - "here": { - "name": "HERE", - "categoryId": 8, - "url": "https://www.here.com/", - "companyId": null - }, - "heroku": { - "name": "Heroku", - "categoryId": 10, - "url": null, - "companyId": null - }, - "heureka-widget": { - "name": "Heureka-Widget", - "categoryId": 4, - "url": "https://www.heurekashopping.cz/", - "companyId": "heureka" - }, - "heybubble": { - "name": "HeyBubble", - "categoryId": 2, - "url": "https://www.heybubble.com/", - "companyId": "heybubble" - }, - "heyos": { - "name": "Heyos", - "categoryId": 4, - "url": "http://www.heyos.com/", - "companyId": "heyos" - }, - "hi-media_performance": { - "name": "Hi-Media Performance", - "categoryId": 4, - "url": "http://www.hi-mediaperformance.co.uk/", - "companyId": "hi-media_performance" - }, - "hiconversion": { - "name": "HiConversion", - "categoryId": 4, - "url": "http://www.hiconversion.com", - "companyId": "hiconversion" - }, - "highwebmedia.com": { - "name": "highwebmedia.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "highwinds": { - "name": "Highwinds", - "categoryId": 6, - "url": "https://www.highwinds.com/", - "companyId": "highwinds" - }, - "hiiir": { - "name": "Hiiir", - "categoryId": 4, - "url": "http://adpower.hiiir.com/", - "companyId": "hiiir" - }, - "hiro": { - "name": "HIRO", - "categoryId": 4, - "url": "http://www.hiro-media.com/", - "companyId": "hiro_media" - }, - "histats": { - "name": "Histats", - "categoryId": 4, - "url": "http://www.histats.com/", - "companyId": "histats" - }, - "hit-parade": { - "name": "Hit-Parade", - "categoryId": 4, - "url": "http://www.hit-parade.com/", - "companyId": "hit-parade" - }, - "hit.ua": { - "name": "HIT.UA", - "categoryId": 4, - "url": "http://hit.ua/", - "companyId": "hit.ua" - }, - "hitslink": { - "name": "HitsLink", - "categoryId": 4, - "url": "http://www.hitslink.com/", - "companyId": "net_applications" - }, - "hitsniffer": { - "name": "HitSniffer", - "categoryId": 4, - "url": "http://hitsniffer.com/", - "companyId": "hit_sniffer" - }, - "hittail": { - "name": "HitTail", - "categoryId": 4, - "url": "http://www.hittail.com/", - "companyId": "hittail" - }, - "hivedx.com": { - "name": "hiveDX", - "categoryId": 4, - "url": "https://www.hivedx.com/", - "companyId": null - }, - "hiveworks": { - "name": "Hive Networks", - "categoryId": 4, - "url": "https://hiveworkscomics.com/", - "companyId": "hive_works" - }, - "hockeyapp": { - "name": "HockeyApp", - "categoryId": 101, - "url": "https://hockeyapp.net/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "hoholikik.club": { - "name": "hoholikik.club", - "categoryId": 12, - "url": null, - "companyId": null - }, - "hola_player": { - "name": "Hola Player", - "categoryId": 0, - "url": "https://holacdn.com/", - "companyId": "hola_cdn" - }, - "homeaway": { - "name": "HomeAway", - "categoryId": 8, - "url": null, - "companyId": null - }, - "honeybadger": { - "name": "Honeybadger", - "categoryId": 6, - "url": "https://www.honeybadger.io/", - "companyId": "honeybadger" - }, - "hooklogic": { - "name": "HookLogic", - "categoryId": 4, - "url": "http://hooklogic.com/", - "companyId": "criteo" - }, - "hop-cube": { - "name": "Hop-Cube", - "categoryId": 4, - "url": "http://www.hop-cube.com/", - "companyId": "hop-cube" - }, - "hotdogsandads.com": { - "name": "hotdogsandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "hotjar": { - "name": "Hotjar", - "categoryId": 6, - "url": "http://www.hotjar.com/", - "companyId": "hotjar" - }, - "hotkeys": { - "name": "HotKeys", - "categoryId": 4, - "url": "http://www.demandmedia.com/", - "companyId": "leaf_group" - }, - "hotlog.ru": { - "name": "HotLog", - "categoryId": 4, - "url": "https://hotlog.ru/", - "companyId": "hotlog" - }, - "hotwords": { - "name": "HOTWords", - "categoryId": 4, - "url": "http://hotwords.com/", - "companyId": "hotwords" - }, - "howtank.com": { - "name": "howtank", - "categoryId": 7, - "url": "https://www.howtank.com/", - "companyId": null - }, - "hqentertainmentnetwork.com": { - "name": "HQ Entertainment Network", - "categoryId": 4, - "url": "https://hqentertainmentnetwork.com/", - "companyId": null - }, - "hsoub": { - "name": "Hsoub", - "categoryId": 4, - "url": "http://www.hsoub.com/", - "companyId": "hsoub" - }, - "hstrck.com": { - "name": "HEIM:SPIEL Medien GmbH", - "categoryId": 8, - "url": "https://www.heimspiel.de/", - "companyId": null - }, - "httpool": { - "name": "HTTPool", - "categoryId": 4, - "url": "http://www.httpool.com/", - "companyId": "httpool" - }, - "hubrus": { - "name": "HUBRUS", - "categoryId": 4, - "url": "http://www.hubrus.com/", - "companyId": "hubrus" - }, - "hubspot": { - "name": "HubSpot", - "categoryId": 6, - "url": "http://www.hubspot.com/", - "companyId": "hubspot" - }, - "hubspot_forms": { - "name": "HubSpot Forms", - "categoryId": 2, - "url": "http://www.hubspot.com", - "companyId": "hubspot" - }, - "hubvisor.io": { - "name": "Hubvisor", - "categoryId": 4, - "url": "https://hubvisor.io/", - "companyId": null - }, - "hucksterbot": { - "name": "HucksterBot", - "categoryId": 4, - "url": "http://hucksterbot.ru/", - "companyId": "hucksterbot" - }, - "hupso": { - "name": "Hupso", - "categoryId": 7, - "url": "http://www.hupso.com/", - "companyId": "hupso" - }, - "hurra_tracker": { - "name": "Hurra Tracker", - "categoryId": 4, - "url": "http://www.hurra.com/en/", - "companyId": "hurra_communications" - }, - "hybrid.ai": { - "name": "Hybrid.ai", - "categoryId": 4, - "url": "https://hybrid.ai/", - "companyId": "hybrid_adtech" - }, - "hype_exchange": { - "name": "Hype Exchange", - "categoryId": 4, - "url": "http://www.hypeexchange.com/", - "companyId": "hype_exchange" - }, - "hypercomments": { - "name": "HyperComments", - "categoryId": 1, - "url": "http://www.hypercomments.com/", - "companyId": "hypercomments" - }, - "hyves_widgets": { - "name": "Hyves Widgets", - "categoryId": 4, - "url": "http://www.hyves.nl/", - "companyId": "hyves" - }, - "hyvyd": { - "name": "Hyvyd GmbH", - "categoryId": 8, - "url": null, - "companyId": null - }, - "i-behavior": { - "name": "i-Behavior", - "categoryId": 4, - "url": "http://www.i-behavior.com/", - "companyId": "kbm_group" - }, - "i-mobile": { - "name": "i-mobile", - "categoryId": 4, - "url": "https://www2.i-mobile.co.jp/en/index.aspx", - "companyId": "i-mobile" - }, - "i.ua": { - "name": "i.ua", - "categoryId": 4, - "url": "http://www.i.ua/", - "companyId": "i.ua" - }, - "i10c.net": { - "name": "i10c.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "i2i.jp": { - "name": "i2i.jp", - "categoryId": 6, - "url": "http://www.i2i.jp/", - "companyId": "i2i.jp" - }, - "iab_consent": { - "name": "IAB Consent", - "categoryId": 5, - "url": "https://iabtechlab.com/standards/gdpr-transparency-and-consent-framework/", - "companyId": "iab" - }, - "iadvize": { - "name": "iAdvize", - "categoryId": 2, - "url": "http://www.iadvize.com/", - "companyId": "iadvize" - }, - "ibm_customer_experience": { - "name": "IBM Digital Analytics", - "categoryId": 6, - "url": "http://www.coremetrics.com/", - "companyId": "ibm" - }, - "icerocket_tracker": { - "name": "IceRocket Tracker", - "categoryId": 7, - "url": "http://tracker.icerocket.com/", - "companyId": "meltwater_icerocket" - }, - "icf_technology": { - "name": "ICF Technology", - "categoryId": 2, - "url": "http://www.icftechnology.com/", - "companyId": null - }, - "iclick": { - "name": "iClick", - "categoryId": 4, - "url": "http://optimix.asia/", - "companyId": "iclick_interactive" - }, - "icrossing": { - "name": "iCrossing", - "categoryId": 4, - "url": "http://www.icrossing.com/", - "companyId": "hearst" - }, - "icstats": { - "name": "ICStats", - "categoryId": 6, - "url": "http://www.icstats.nl/", - "companyId": "icstats" - }, - "icuazeczpeoohx.com": { - "name": "icuazeczpeoohx.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "id-news.net": { - "name": "Ippen Digital", - "categoryId": 4, - "url": "https://www.ippen-digital.de/", - "companyId": null - }, - "id5-sync": { - "name": "ID5 Sync", - "categoryId": 4, - "url": "https://id5.io/", - "companyId": "id5-sync", - "source": "AdGuard" - }, - "id_services": { - "name": "ID Services", - "categoryId": 6, - "url": "https://id.services/", - "companyId": "id_services" - }, - "ideal_media": { - "name": "Ideal Media", - "categoryId": 4, - "url": "http://idealmedia.com/", - "companyId": "ideal_media" - }, - "idealo_com": { - "name": "idealo.com", - "categoryId": 4, - "url": "http://idealo.com/", - "companyId": null - }, - "identrust": { - "name": "IdenTrust, Inc.", - "categoryId": 5, - "url": "https://identrust.com/", - "companyId": "identrust", - "source": "AdGuard" - }, - "ideoclick": { - "name": "IdeoClick", - "categoryId": 4, - "url": "http://ideoclick.com", - "companyId": "ideoclick" - }, - "idio": { - "name": "Idio", - "categoryId": 4, - "url": "https://www.idio.ai/", - "companyId": "idio" - }, - "ie8eamus.com": { - "name": "ie8eamus.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ientry": { - "name": "iEntry", - "categoryId": 4, - "url": "http://www.ientry.com/", - "companyId": "ientry" - }, - "iflychat": { - "name": "iFlyChat", - "categoryId": 2, - "url": "https://iflychat.com/", - "companyId": "iflychat" - }, - "ignitionone": { - "name": "IgnitionOne", - "categoryId": 6, - "url": "https://www.ignitionone.com/", - "companyId": "zeta" - }, - "igodigital": { - "name": "iGoDigital", - "categoryId": 2, - "url": "http://igodigital.com/", - "companyId": "salesforce" - }, - "ihs_markit": { - "name": "IHS Markit", - "categoryId": 6, - "url": "https://ihsmarkit.com/index.html", - "companyId": "ihs" - }, - "ihs_markit_online_shopper_insigh": { - "name": "IHS Markit Online Shopper Insigh", - "categoryId": 6, - "url": "http://www.visicogn.com/vcu.htm", - "companyId": "ihs" - }, - "ihvmcqojoj.com": { - "name": "ihvmcqojoj.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "iias.eu": { - "name": "Insight Image", - "categoryId": 3, - "url": "http://insightimage.com/", - "companyId": null - }, - "ijento": { - "name": "iJento", - "categoryId": 6, - "url": "http://www.ijento.com/", - "companyId": "ijento" - }, - "imad": { - "name": "imad", - "categoryId": 4, - "url": "http://www.imad.co.kr/", - "companyId": "i'mad_republic" - }, - "image_advantage": { - "name": "Image Advantage", - "categoryId": 4, - "url": "http://www.worthathousandwords.com/", - "companyId": "image_advantage" - }, - "image_space_media": { - "name": "Image Space Media", - "categoryId": 4, - "url": "http://www.imagespacemedia.com/", - "companyId": "image_space_media" - }, - "imgix.net": { - "name": "ImgIX", - "categoryId": 9, - "url": "https://www.imgix.com/", - "companyId": null - }, - "imgur": { - "name": "Imgur", - "categoryId": 8, - "url": "https://imgur.com/", - "companyId": "medialab", - "source": "AdGuard" - }, - "imho_vi": { - "name": "imho vi", - "categoryId": 4, - "url": "http://www.imho.ru", - "companyId": "imho" - }, - "immanalytics": { - "name": "Immanalytics", - "categoryId": 2, - "url": "https://www.roku.com/", - "companyId": "roku" - }, - "immobilienscout24_de": { - "name": "immobilienscout24.de", - "categoryId": 8, - "url": "http://www.scout24.com/", - "companyId": "scout24" - }, - "imonomy": { - "name": "imonomy", - "categoryId": 6, - "url": "http://imonomy.com/", - "companyId": "imonomy" - }, - "impact_radius": { - "name": "Impact Radius", - "categoryId": 5, - "url": "http://www.impactradius.com/", - "companyId": "impact_radius" - }, - "impresiones_web": { - "name": "Impresiones Web", - "categoryId": 4, - "url": "http://www.iw-advertising.com/", - "companyId": "impresiones_web" - }, - "improve_digital": { - "name": "Improve Digital", - "categoryId": 4, - "url": "http://www.improvedigital.com/", - "companyId": "improve_digital" - }, - "improvely": { - "name": "Improvely", - "categoryId": 6, - "url": "https://www.improvely.com/", - "companyId": "awio_web_services" - }, - "inbenta": { - "name": "Inbenta", - "categoryId": 6, - "url": "https://www.inbenta.com/en/", - "companyId": "inbenta" - }, - "inboxsdk.com": { - "name": "Inbox SDK", - "categoryId": 8, - "url": "https://www.inboxsdk.com/", - "companyId": null - }, - "indeed": { - "name": "Indeed", - "categoryId": 4, - "url": "http://www.indeed.com/", - "companyId": "indeed" - }, - "index_exchange": { - "name": "Index Exchange", - "categoryId": 4, - "url": "http://www.casalemedia.com/", - "companyId": "index_exchange" - }, - "indieclick": { - "name": "IndieClick", - "categoryId": 4, - "url": "http://www.indieclick.com/", - "companyId": "leaf_group" - }, - "industry_brains": { - "name": "Industry Brains", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "industrybrains" - }, - "infectious_media": { - "name": "Impression Desk", - "categoryId": 4, - "url": "https://impressiondesk.com/", - "companyId": "infectious_media" - }, - "infinite_analytics": { - "name": "Infinite Analytics", - "categoryId": 6, - "url": "http://infiniteanalytics.com/products/", - "companyId": "infinite_analytics" - }, - "infinity_tracking": { - "name": "Infinity Tracking", - "categoryId": 6, - "url": "http://www.infinity-tracking.com", - "companyId": "infinity_tracking" - }, - "influads": { - "name": "InfluAds", - "categoryId": 4, - "url": "http://www.influads.com/", - "companyId": "influads" - }, - "infolinks": { - "name": "InfoLinks", - "categoryId": 4, - "url": "http://www.infolinks.com/", - "companyId": "infolinks" - }, - "infonline": { - "name": "INFOnline", - "categoryId": 6, - "url": "http://www.infonline.de/", - "companyId": "infonline" - }, - "informer_technologies": { - "name": "Informer Technologies", - "categoryId": 6, - "url": "http://www.informer.com/", - "companyId": "informer_technologies" - }, - "infusionsoft": { - "name": "Infusionsoft by Keap", - "categoryId": 4, - "url": "https://keap.com/", - "companyId": "infusionsoft" - }, - "innity": { - "name": "Innity", - "categoryId": 4, - "url": "http://www.innity.com/", - "companyId": "innity" - }, - "innogames.de": { - "name": "InnoGames", - "categoryId": 8, - "url": "https://www.innogames.com/", - "companyId": null - }, - "innovid": { - "name": "Innovid", - "categoryId": 4, - "url": "https://www.innovid.com/", - "companyId": "innovid" - }, - "inside": { - "name": "inside", - "categoryId": 7, - "url": "http://www.inside.tm/", - "companyId": "powerfront" - }, - "insider": { - "name": "Insider", - "categoryId": 6, - "url": "http://useinsider.com/", - "companyId": "insider" - }, - "insightexpress": { - "name": "InsightExpress", - "categoryId": 6, - "url": "https://www.millwardbrowndigital.com/", - "companyId": "millward_brown" - }, - "inskin_media": { - "name": "InSkin Media", - "categoryId": 4, - "url": "http://www.inskinmedia.com/", - "companyId": "inskin_media" - }, - "inspectlet": { - "name": "Inspectlet", - "categoryId": 6, - "url": "https://www.inspectlet.com/", - "companyId": "inspectlet" - }, - "inspsearchapi.com": { - "name": "Infospace Search", - "categoryId": 4, - "url": "http://infospace.com/", - "companyId": "system1" - }, - "instagram_com": { - "name": "Instagram", - "categoryId": 8, - "url": "https://www.facebook.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "instant_check_mate": { - "name": "Instant Check Mate", - "categoryId": 2, - "url": "https://www.instantcheckmate.com/", - "companyId": "instant_check_mate" - }, - "instart_logic": { - "name": "Instart Logic", - "categoryId": 4, - "url": "https://www.instartlogic.com/", - "companyId": "instart_logic_inc" - }, - "insticator": { - "name": "Insticator", - "categoryId": 4, - "url": "https://www.insticator.com/landingpage", - "companyId": "insticator" - }, - "instinctive": { - "name": "Instinctive", - "categoryId": 4, - "url": "https://instinctive.io/", - "companyId": "instinctive" - }, - "intango": { - "name": "Intango", - "categoryId": 4, - "url": "https://intango.com/", - "companyId": "intango" - }, - "integral_ad_science": { - "name": "Integral Ad Science", - "categoryId": 4, - "url": "https://integralads.com/", - "companyId": "integral_ad_science" - }, - "integral_marketing": { - "name": "Integral Marketing", - "categoryId": 4, - "url": "http://integral-marketing.com/", - "companyId": "integral_marketing" - }, - "intelliad": { - "name": "intelliAd", - "categoryId": 6, - "url": "http://www.intelliad.de/", - "companyId": "intelliad" - }, - "intelligencefocus": { - "name": "IntelligenceFocus", - "categoryId": 6, - "url": "http://www.intelligencefocus.com", - "companyId": "intelligencefocus" - }, - "intelligent_reach": { - "name": "Intelligent Reach", - "categoryId": 4, - "url": "http://www.intelligentreach.com/", - "companyId": "intelligent_reach" - }, - "intense_debate": { - "name": "Intense Debate", - "categoryId": 2, - "url": "http://intensedebate.com/", - "companyId": "automattic" - }, - "intent_iq": { - "name": "Intent IQ", - "categoryId": 4, - "url": "http://datonics.com/", - "companyId": "almondnet" - }, - "intent_media": { - "name": "Intent", - "categoryId": 4, - "url": "https://intent.com/", - "companyId": "intent_media" - }, - "intercom": { - "name": "Intercom", - "categoryId": 2, - "url": "http://intercom.io/", - "companyId": "intercom" - }, - "interedy.info": { - "name": "interedy.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "intergi": { - "name": "Intergi", - "categoryId": 4, - "url": "http://www.intergi.com/", - "companyId": "intergi_entertainment" - }, - "intermarkets.net": { - "name": "Intermarkets", - "categoryId": 4, - "url": "http://intermarkets.net/", - "companyId": "intermarkets" - }, - "intermundo_media": { - "name": "InterMundo Media", - "categoryId": 4, - "url": "http://intermundomedia.com/", - "companyId": "intermundo_media" - }, - "internet_billboard": { - "name": "Internet BillBoard", - "categoryId": 4, - "url": "http://www.ibillboard.com/en/", - "companyId": "internet_billboard" - }, - "internetaudioads": { - "name": "InternetAudioAds", - "categoryId": 0, - "url": "http://www.internetaudioads.com/", - "companyId": "internetaudioads" - }, - "internetbrands": { - "name": "InternetBrands", - "categoryId": 7, - "url": "http://www.internetbrands.com/", - "companyId": "internet_brands" - }, - "interpolls": { - "name": "Interpolls", - "categoryId": 4, - "url": "http://www.interpolls.com/", - "companyId": "interpolls" - }, - "interyield": { - "name": "Interyield", - "categoryId": 4, - "url": "http://www.advertise.com/publisher-solutions/", - "companyId": "advertise.com" - }, - "intilery": { - "name": "Intilery", - "categoryId": 6, - "url": "http://www.intilery.com", - "companyId": "intilery" - }, - "intimate_merger": { - "name": "Intimate Merger", - "categoryId": 6, - "url": "https://corp.intimatemerger.com/", - "companyId": "intimate_merger" - }, - "investingchannel": { - "name": "Investing Channel", - "categoryId": 8, - "url": "http://www.investingchannel.com/", - "companyId": "investingchannel" - }, - "inviziads": { - "name": "InviziAds", - "categoryId": 4, - "url": "http://www.inviziads.com", - "companyId": "inviziads" - }, - "invoca": { - "name": "Invoca", - "categoryId": 4, - "url": "http://www.invoca.com/", - "companyId": "invoca" - }, - "invodo": { - "name": "Invodo", - "categoryId": 6, - "url": "http://www.invodo.com/", - "companyId": "invodo" - }, - "ionicframework.com": { - "name": "Ionic", - "categoryId": 8, - "url": "https://ionicframework.com/", - "companyId": null - }, - "iotec": { - "name": "iotec", - "categoryId": 4, - "url": "https://www.iotecglobal.com/", - "companyId": "iotec" - }, - "iovation": { - "name": "iovation", - "categoryId": 5, - "url": "http://www.iovation.com/", - "companyId": "iovation" - }, - "ip-label": { - "name": "ip-label", - "categoryId": 6, - "url": "http://www.ip-label.co.uk/", - "companyId": "ip-label" - }, - "ip_targeting": { - "name": "IP Targeting", - "categoryId": 6, - "url": "https://www.iptargeting.com/", - "companyId": "el_toro" - }, - "ip_tracker": { - "name": "IP Tracker", - "categoryId": 6, - "url": "http://www.ip-tracker.org/", - "companyId": "ip_tracker" - }, - "iperceptions": { - "name": "iPerceptions", - "categoryId": 2, - "url": "http://www.iperceptions.com/", - "companyId": "iperceptions" - }, - "ipfingerprint": { - "name": "IPFingerprint", - "categoryId": 6, - "url": "http://www.ipfingerprint.com/", - "companyId": "ipfingerprint" - }, - "ipg_mediabrands": { - "name": "IPG Mediabrands", - "categoryId": 4, - "url": "https://www.ipgmediabrands.com/", - "companyId": "ipg_mediabrands" - }, - "ipify": { - "name": "ipify", - "categoryId": 8, - "url": "https://www.ipify.org/", - "companyId": null - }, - "ipinfo": { - "name": "Ipinfo", - "categoryId": 2, - "url": "https://ipinfo.io/", - "companyId": "ipinfo.io" - }, - "iplogger": { - "name": "IPLogger", - "categoryId": 6, - "url": "http://iplogger.ru/", - "companyId": "iplogger" - }, - "iprom": { - "name": "iprom", - "categoryId": 4, - "url": "http://www.iprom.si/", - "companyId": "iprom" - }, - "ipromote": { - "name": "iPromote", - "categoryId": 4, - "url": "http://www.ipromote.com/", - "companyId": "ipromote" - }, - "iprospect": { - "name": "iProspect", - "categoryId": 4, - "url": "http://www.iprospect.com/", - "companyId": "dentsu_aegis_network" - }, - "iqiyi": { - "name": "iQiyi", - "categoryId": 0, - "url": "https://www.iqiyi.com/", - "companyId": "iqiyi", - "source": "AdGuard" - }, - "ironsource": { - "name": "ironSource Ltd.", - "categoryId": 4, - "url": "https://www.is.com", - "companyId": "unity", - "source": "AdGuard" - }, - "isocket": { - "name": "isocket", - "categoryId": 4, - "url": "http://www.isocket.com/", - "companyId": "rubicon_project" - }, - "isolarcloud": { - "name": "iSolarCloud", - "categoryId": 6, - "url": "https://isolarcloud.com/", - "companyId": "sungrow", - "source": "AdGuard" - }, - "ispot.tv": { - "name": "iSpot.tv", - "categoryId": 4, - "url": "https://www.ispot.tv/", - "companyId": null - }, - "itineraire.info": { - "name": "itineraire.info", - "categoryId": 2, - "url": "https://www.itineraire.info/", - "companyId": null - }, - "itunes_link_maker": { - "name": "iTunes Link Maker", - "categoryId": 4, - "url": "https://www.apple.com/", - "companyId": "apple" - }, - "ity.im": { - "name": "ity.im", - "categoryId": 4, - "url": "http://ity.im/", - "companyId": "ity.im" - }, - "iubenda.com": { - "name": "iubenda", - "categoryId": 5, - "url": "https://www.iubenda.com/", - "companyId": "iubenda" - }, - "ivcbrasil.org.br": { - "name": "IVC Brasil", - "categoryId": 6, - "url": "https://ivcbrasil.org.br/#/home", - "companyId": null - }, - "ividence": { - "name": "Ividence", - "categoryId": 4, - "url": "https://www.ividence.com/home/", - "companyId": "sien" - }, - "iwiw_widgets": { - "name": "iWiW Widgets", - "categoryId": 2, - "url": "http://iwiw.hu", - "companyId": "iwiw" - }, - "ixi_digital": { - "name": "IXI Digital", - "categoryId": 4, - "url": "http://www.equifax.com/home/en_us", - "companyId": "equifax" - }, - "ixquick.com": { - "name": "ixquick", - "categoryId": 8, - "url": "https://www.ixquick.com/", - "companyId": "startpage" - }, - "izooto": { - "name": "iZooto", - "categoryId": 6, - "url": "https://www.izooto.com/", - "companyId": "izooto" - }, - "j-list_affiliate_program": { - "name": "J-List Affiliate Program", - "categoryId": 4, - "url": "http://www.jlist.com/page/affiliates.html", - "companyId": "j-list" - }, - "jaco": { - "name": "Jaco", - "categoryId": 6, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "janrain": { - "name": "Janrain", - "categoryId": 6, - "url": "http://www.janrain.com/", - "companyId": "akamai" - }, - "jeeng": { - "name": "Jeeng", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jeeng_widgets": { - "name": "Jeeng Widgets", - "categoryId": 4, - "url": "https://jeeng.com/", - "companyId": "jeeng" - }, - "jet_interactive": { - "name": "Jet Interactive", - "categoryId": 6, - "url": "http://www.jetinteractive.com.au/", - "companyId": "jet_interactive" - }, - "jetbrains": { - "name": "JetBrains", - "categoryId": 8, - "url": "https://www.jetbrains.com/", - "companyId": "jetbrains", - "source": "AdGuard" - }, - "jetlore": { - "name": "Jetlore", - "categoryId": 6, - "url": "http://www.jetlore.com/", - "companyId": "jetlore" - }, - "jetpack": { - "name": "Jetpack", - "categoryId": 6, - "url": "https://jetpack.com/", - "companyId": "automattic" - }, - "jetpack_digital": { - "name": "Jetpack Digital", - "categoryId": 6, - "url": "http://www.jetpack.com/", - "companyId": "jetpack_digital" - }, - "jimdo.com": { - "name": "jimdo.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "jink": { - "name": "Jink", - "categoryId": 4, - "url": "http://www.jink.de/", - "companyId": "jink" - }, - "jirafe": { - "name": "Jirafe", - "categoryId": 6, - "url": "http://jirafe.com/", - "companyId": "jirafe" - }, - "jivochat": { - "name": "JivoSite", - "categoryId": 2, - "url": "https://www.jivochat.com/", - "companyId": "jivochat" - }, - "jivox": { - "name": "Jivox", - "categoryId": 4, - "url": "http://www.jivox.com/", - "companyId": "jivox" - }, - "jobs_2_careers": { - "name": "Jobs 2 Careers", - "categoryId": 4, - "url": "http://www.jobs2careers.com/", - "companyId": "jobs_2_careers" - }, - "joinhoney": { - "name": "Honey", - "categoryId": 8, - "url": "https://www.joinhoney.com/", - "companyId": null - }, - "jornaya": { - "name": "Jornaya", - "categoryId": 6, - "url": "http://leadid.com/", - "companyId": "jornaya" - }, - "jquery": { - "name": "jQuery", - "categoryId": 9, - "url": "https://jquery.org/", - "companyId": "js_foundation" - }, - "js_communications": { - "name": "JS Communications", - "categoryId": 4, - "url": "http://www.jssearch.net/", - "companyId": "js_communications" - }, - "jsdelivr": { - "name": "jsDelivr", - "categoryId": 9, - "url": "https://www.jsdelivr.com/", - "companyId": null - }, - "jse_coin": { - "name": "JSE Coin", - "categoryId": 4, - "url": "https://jsecoin.com/", - "companyId": "jse_coin" - }, - "jsuol.com.br": { - "name": "jsuol.com.br", - "categoryId": 4, - "url": null, - "companyId": null - }, - "juggcash": { - "name": "JuggCash", - "categoryId": 3, - "url": "http://www.juggcash.com", - "companyId": "juggcash" - }, - "juiceadv": { - "name": "JuiceADV", - "categoryId": 4, - "url": "http://juiceadv.com/", - "companyId": "juiceadv" - }, - "juicyads": { - "name": "JuicyAds", - "categoryId": 3, - "url": "http://www.juicyads.com/", - "companyId": "juicyads" - }, - "jumplead": { - "name": "Jumplead", - "categoryId": 6, - "url": "https://jumplead.com/", - "companyId": "jumplead" - }, - "jumpstart_tagging_solutions": { - "name": "Jumpstart Tagging Solutions", - "categoryId": 6, - "url": "http://www.hearst.com/", - "companyId": "hearst" - }, - "jumptap": { - "name": "Jumptap", - "categoryId": 4, - "url": "http://www.jumptap.com/", - "companyId": "verizon" - }, - "jumptime": { - "name": "JumpTime", - "categoryId": 6, - "url": "http://www.jumptime.com/", - "companyId": "openx" - }, - "just_answer": { - "name": "Just Answer", - "categoryId": 2, - "url": "https://www.justanswer.com/", - "companyId": "just_answer" - }, - "just_premium": { - "name": "Just Premium", - "categoryId": 4, - "url": "http://justpremium.com/", - "companyId": "just_premium" - }, - "just_relevant": { - "name": "Just Relevant", - "categoryId": 4, - "url": "http://www.justrelevant.com/", - "companyId": "just_relevant" - }, - "jvc.gg": { - "name": "Jeuxvideo CDN", - "categoryId": 9, - "url": "http://www.jeuxvideo.com/", - "companyId": null - }, - "jw_player": { - "name": "JW Player", - "categoryId": 0, - "url": "https://www.jwplayer.com/", - "companyId": "jw_player" - }, - "jw_player_ad_solutions": { - "name": "JW Player Ad Solutions", - "categoryId": 4, - "url": "http://www.longtailvideo.com/adsolution/", - "companyId": "jw_player" - }, - "kaeufersiegel.de": { - "name": "Käufersiegel", - "categoryId": 2, - "url": "https://www.kaeufersiegel.de/", - "companyId": null - }, - "kairion.de": { - "name": "kairion", - "categoryId": 4, - "url": "https://kairion.de/", - "companyId": "prosieben_sat1" - }, - "kaloo.ga": { - "name": "Kalooga", - "categoryId": 4, - "url": "https://www.kalooga.com/", - "companyId": "kalooga" - }, - "kalooga_widget": { - "name": "Kalooga Widget", - "categoryId": 4, - "url": "http://kalooga.com/", - "companyId": "kalooga" - }, - "kaltura": { - "name": "Kaltura", - "categoryId": 0, - "url": "http://corp.kaltura.com/", - "companyId": "kaltura" - }, - "kameleoon": { - "name": "Kameleoon", - "categoryId": 6, - "url": "http://www.kameleoon.com/", - "companyId": "kameleoon" - }, - "kampyle": { - "name": "Medallia", - "categoryId": 2, - "url": "http://www.kampyle.com/", - "companyId": "medallia" - }, - "kanoodle": { - "name": "Kanoodle", - "categoryId": 4, - "url": "http://www.kanoodle.com/", - "companyId": "kanoodle" - }, - "kantar_media": { - "name": "Kantar Media", - "categoryId": 4, - "url": "https://www.kantarmedia.com/", - "companyId": "wpp" - }, - "karambasecurity": { - "name": "Karamba Security", - "categoryId": 8, - "url": "https://karambasecurity.com/", - "companyId": "karambasecurity", - "source": "AdGuard" - }, - "kargo": { - "name": "Kargo", - "categoryId": 4, - "url": "http://www.kargo.com/", - "companyId": "kargo" - }, - "kaspersky-labs.com": { - "name": "Kaspersky Labs", - "categoryId": 12, - "url": "https://www.kaspersky.com/", - "companyId": "AO Kaspersky Lab" - }, - "kataweb.it": { - "name": "KataWeb", - "categoryId": 4, - "url": "http://www.kataweb.it/", - "companyId": null - }, - "katchup": { - "name": "Katchup", - "categoryId": 4, - "url": "http://www.katchup.fr/", - "companyId": "katchup" - }, - "kauli": { - "name": "Kauli", - "categoryId": 4, - "url": "http://kau.li/", - "companyId": "kauli" - }, - "kavanga": { - "name": "Kavanga", - "categoryId": 4, - "url": "http://kavanga.ru/", - "companyId": "kavanga" - }, - "kayo_sports": { - "name": "Kayo Sports", - "categoryId": 0, - "url": "https://kayosports.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "keen_io": { - "name": "Keen IO", - "categoryId": 6, - "url": "https://keen.io", - "companyId": "keen_io" - }, - "kelkoo": { - "name": "Kelkoo", - "categoryId": 4, - "url": "http://www.kelkoo.com/", - "companyId": "kelkoo" - }, - "kenshoo": { - "name": "Kenshoo", - "categoryId": 6, - "url": "http://www.kenshoo.com/", - "companyId": "kenshoo" - }, - "keymetric": { - "name": "KeyMetric", - "categoryId": 6, - "url": "http://keymetric.net/", - "companyId": "keymetric" - }, - "keytiles": { - "name": "Keytiles", - "categoryId": 6, - "url": "http://keytiles.com/", - "companyId": "keytiles" - }, - "keywee": { - "name": "Keywee", - "categoryId": 6, - "url": "https://keywee.co/", - "companyId": "keywee" - }, - "keywordmax": { - "name": "KeywordMax", - "categoryId": 4, - "url": "http://www.keywordmax.com/", - "companyId": "digital_river" - }, - "khoros": { - "name": "Khoros", - "categoryId": 7, - "url": "http://www.massrelevance.com/", - "companyId": "khoros" - }, - "khzbeucrltin.com": { - "name": "khzbeucrltin.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "kickfactory": { - "name": "Kickfactory", - "categoryId": 4, - "url": "https://kickfactory.com/", - "companyId": "kickfactory" - }, - "kickfire": { - "name": "Kickfire", - "categoryId": 4, - "url": "http://www.visistat.com/", - "companyId": "kickfire" - }, - "kik": { - "name": "Kik", - "categoryId": 7, - "url": "https://kik.com/", - "companyId": "medialab", - "source": "AdGuard" - }, - "king.com": { - "name": "King.com", - "categoryId": 4, - "url": "http://www.king.com/", - "companyId": "king.com" - }, - "king_com": { - "name": "King.com", - "categoryId": 8, - "url": "https://king.com/", - "companyId": "activision_blizzard" - }, - "kinja.com": { - "name": "Kinja", - "categoryId": 6, - "url": "https://kinja.com/", - "companyId": "gizmodo" - }, - "kiosked": { - "name": "Kiosked", - "categoryId": 4, - "url": "http://www.kiosked.com/", - "companyId": "kiosked" - }, - "kissmetrics.com": { - "name": "Kissmetrics", - "categoryId": 6, - "url": "https://www.kissmetrics.com/", - "companyId": "kissmetrics" - }, - "kitara_media": { - "name": "Kitara Media", - "categoryId": 4, - "url": "http://www.kitaramedia.com/", - "companyId": "kitara_media" - }, - "kixer": { - "name": "Kixer", - "categoryId": 4, - "url": "http://www.kixer.com", - "companyId": "kixer" - }, - "klarna.com": { - "name": "Klarna", - "categoryId": 2, - "url": "https://www.klarna.com/", - "companyId": null - }, - "klaviyo": { - "name": "Klaviyo", - "categoryId": 6, - "url": "https://www.klaviyo.com/", - "companyId": "klaviyo" - }, - "klikki": { - "name": "Klikki", - "categoryId": 4, - "url": "http://www.klikki.com/", - "companyId": "klikki" - }, - "kliksaya": { - "name": "KlikSaya", - "categoryId": 4, - "url": "http://www.kliksaya.com", - "companyId": "kliksaya" - }, - "kmeleo": { - "name": "Kméléo", - "categoryId": 4, - "url": "http://www.6peo.com/", - "companyId": "6peo" - }, - "knoopstat": { - "name": "Knoopstat", - "categoryId": 6, - "url": "http://www.knoopstat.nl", - "companyId": "knoopstat" - }, - "knotch": { - "name": "Knotch", - "categoryId": 2, - "url": "http://knotch.it", - "companyId": "knotch" - }, - "komoona": { - "name": "Komoona", - "categoryId": 4, - "url": "http://www.komoona.com/", - "companyId": "komoona" - }, - "kontera_contentlink": { - "name": "Kontera ContentLink", - "categoryId": 4, - "url": "http://www.kontera.com/", - "companyId": "singtel" - }, - "kontextr": { - "name": "Kontextr", - "categoryId": 4, - "url": "https://www.kontextr.com/", - "companyId": "kontext" - }, - "kontextua": { - "name": "Kontextua", - "categoryId": 4, - "url": "http://www.kontextua.com/", - "companyId": "kontextua" - }, - "korrelate": { - "name": "Korrelate", - "categoryId": 4, - "url": "http://korrelate.com/", - "companyId": "korrelate" - }, - "kortx": { - "name": "Kortx", - "categoryId": 6, - "url": "http://www.kortx.io/", - "companyId": "kortx" - }, - "kount": { - "name": "Kount", - "categoryId": 6, - "url": "https://kount.com/", - "companyId": null - }, - "krux_digital": { - "name": "Salesforce DMP", - "categoryId": 4, - "url": "https://www.salesforce.com/products/marketing-cloud/data-management/?mc=DMP", - "companyId": "salesforce" - }, - "kupona": { - "name": "Kupona", - "categoryId": 4, - "url": "http://www.kupona-media.de/en/retargeting-and-performance-media-width-kupona", - "companyId": "kupona" - }, - "kxcdn.com": { - "name": "Keycdn", - "categoryId": 9, - "url": "https://www.keycdn.com/", - "companyId": null - }, - "kyto": { - "name": "Kyto", - "categoryId": 6, - "url": "https://www.kyto.com/", - "companyId": "kyto" - }, - "ladsp.com": { - "name": "Logicad", - "categoryId": 4, - "url": "https://www.logicad.com/", - "companyId": "logicad" - }, - "lanista_concepts": { - "name": "Lanista Concepts", - "categoryId": 4, - "url": "http://lanistaconcepts.com/", - "companyId": "lanista_concepts" - }, - "latimes": { - "name": "Los Angeles Times", - "categoryId": 8, - "url": "http://www.latimes.com/", - "companyId": "latimes" - }, - "launch_darkly": { - "name": "Launch Darkly", - "categoryId": 5, - "url": "https://launchdarkly.com/index.html", - "companyId": "launch_darkly" - }, - "launchbit": { - "name": "LaunchBit", - "categoryId": 4, - "url": "https://www.launchbit.com/", - "companyId": "launchbit" - }, - "launchpad": { - "name": "Launchpad", - "categoryId": 8, - "url": "https://launchpad.net/", - "companyId": "canonical", - "source": "AdGuard" - }, - "layer-ad.org": { - "name": "Layer-ADS.net", - "categoryId": 4, - "url": "http://layer-ads.net/", - "companyId": null - }, - "lazada": { - "name": "Lazada", - "categoryId": 4, - "url": "https://www.lazada.com/", - "companyId": "lazada" - }, - "lcx_digital": { - "name": "LCX Digital", - "categoryId": 4, - "url": "http://www.lcx.com/", - "companyId": "lcx_digital" - }, - "le_monde.fr": { - "name": "Le Monde.fr", - "categoryId": 8, - "url": "http://www.lemonde.fr/", - "companyId": "le_monde.fr" - }, - "lead_liaison": { - "name": "Lead Liaison", - "categoryId": 6, - "url": "https://www.leadliaison.com", - "companyId": "lead_liaison" - }, - "leadback": { - "name": "Leadback", - "categoryId": 6, - "url": "http://leadback.ru/?utm_source=leadback_widget&utm_medium=eas-balt.ru&utm_campaign=self_ad", - "companyId": "leadback" - }, - "leaddyno": { - "name": "LeadDyno", - "categoryId": 4, - "url": "http://www.leaddyno.com", - "companyId": "leaddyno" - }, - "leadforensics": { - "name": "LeadForensics", - "categoryId": 4, - "url": "http://www.leadforensics.com/", - "companyId": "lead_forensics" - }, - "leadgenic": { - "name": "LeadGENIC", - "categoryId": 4, - "url": "https://leadgenic.com/", - "companyId": "leadgenic" - }, - "leadhit": { - "name": "LeadHit", - "categoryId": 2, - "url": "http://leadhit.ru/", - "companyId": "leadhit" - }, - "leadin": { - "name": "Leadin", - "categoryId": 6, - "url": "https://www.hubspot.com/", - "companyId": "hubspot" - }, - "leading_reports": { - "name": "Leading Reports", - "categoryId": 4, - "url": "https://www.leadingreports.de/", - "companyId": "leading_reports" - }, - "leadinspector": { - "name": "LeadInspector", - "categoryId": 6, - "url": "https://www.leadinspector.de/", - "companyId": "leadinspector" - }, - "leadlander": { - "name": "LeadLander", - "categoryId": 6, - "url": "http://www.leadlander.com/", - "companyId": "leadlander" - }, - "leadlife": { - "name": "LeadLife", - "categoryId": 2, - "url": "http://leadlife.com/", - "companyId": "leadlife" - }, - "leadpages": { - "name": "Leadpages", - "categoryId": 6, - "url": "https://www.leadpages.net/", - "companyId": "leadpages" - }, - "leadplace": { - "name": "LeadPlace", - "categoryId": 6, - "url": "https://temelio.com", - "companyId": "leadplace" - }, - "leads_by_web.com": { - "name": "Leads by Web.com", - "categoryId": 4, - "url": "http://www.leadsbyweb.com", - "companyId": "web.com_group" - }, - "leadscoreapp": { - "name": "LeadScoreApp", - "categoryId": 2, - "url": "http://leadscoreapp.com", - "companyId": "leadscoreapp" - }, - "leadsius": { - "name": "Leadsius", - "categoryId": 4, - "url": "http://www.leadsius.com/", - "companyId": "leadsius" - }, - "leady": { - "name": "Leady", - "categoryId": 4, - "url": "http://www.leady.cz/", - "companyId": "leady" - }, - "leiki": { - "name": "Leiki", - "categoryId": 4, - "url": "http://www.leiki.com", - "companyId": "leiki" - }, - "lengow": { - "name": "Lengow", - "categoryId": 4, - "url": "http://www.lengow.com/", - "companyId": "lengow" - }, - "lenmit.com": { - "name": "lenmit.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lentainform.com": { - "name": "lentainform.com", - "categoryId": 8, - "url": "https://www.lentainform.com/", - "companyId": null - }, - "lenua.de": { - "name": "Lenua System", - "categoryId": 4, - "url": "http://lenua.de/", - "companyId": "synatix" - }, - "let_reach": { - "name": "Let Reach", - "categoryId": 2, - "url": "https://letreach.com/", - "companyId": "let_reach" - }, - "lets_encrypt": { - "name": "Let's Encrypt", - "categoryId": 5, - "url": "https://letsencrypt.org/", - "companyId": "isrg", - "source": "AdGuard" - }, - "letv": { - "name": "LeTV", - "categoryId": 6, - "url": "http://www.le.com/", - "companyId": "letv" - }, - "level3_communications": { - "name": "Level 3 Communications, Inc.", - "categoryId": 8, - "url": "http://www.level3.com/en/", - "companyId": "level3_communications" - }, - "lgads": { - "name": "LG Ad Solutions", - "categoryId": 4, - "url": "https://lgads.tv/", - "companyId": "lgcorp", - "source": "AdGuard" - }, - "lgtv": { - "name": "LG TV", - "categoryId": 8, - "url": "https://www.lg.com/", - "companyId": "lgcorp", - "source": "AdGuard" - }, - "licensebuttons.net": { - "name": "licensebuttons.net", - "categoryId": 9, - "url": "https://licensebuttons.net/", - "companyId": null - }, - "lifestreet_media": { - "name": "LifeStreet Media", - "categoryId": 4, - "url": "http://lifestreetmedia.com/", - "companyId": "lifestreet_media" - }, - "ligatus": { - "name": "Ligatus", - "categoryId": 4, - "url": "http://www.ligatus.com/", - "companyId": "outbrain" - }, - "limk": { - "name": "Limk", - "categoryId": 4, - "url": "https://limk.com/", - "companyId": "limk" - }, - "line_apps": { - "name": "Line", - "categoryId": 6, - "url": "https://line.me/en-US/", - "companyId": "line" - }, - "linezing": { - "name": "LineZing", - "categoryId": 4, - "url": "http://www.linezing.com/", - "companyId": "linezing" - }, - "linkbucks": { - "name": "Linkbucks", - "categoryId": 4, - "url": "http://www.linkbucks.com/", - "companyId": "linkbucks" - }, - "linkconnector": { - "name": "LinkConnector", - "categoryId": 4, - "url": "http://www.linkconnector.com", - "companyId": "linkconnector" - }, - "linkedin": { - "name": "LinkedIn", - "categoryId": 8, - "url": "https://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_ads": { - "name": "LinkedIn Ads", - "categoryId": 4, - "url": "http://www.linkedin.com/", - "companyId": "microsoft" - }, - "linkedin_analytics": { - "name": "LinkedIn Analytics", - "categoryId": 6, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "linkedin_marketing_solutions": { - "name": "LinkedIn Marketing Solutions", - "categoryId": 4, - "url": "https://business.linkedin.com/marketing-solutions", - "companyId": "microsoft" - }, - "linkedin_widgets": { - "name": "LinkedIn Widgets", - "categoryId": 7, - "url": "https://www.linkedin.com", - "companyId": "microsoft" - }, - "linker": { - "name": "Linker", - "categoryId": 4, - "url": "https://linker.hr/", - "companyId": "linker" - }, - "linkprice": { - "name": "LinkPrice", - "categoryId": 4, - "url": "http://www.linkprice.com/", - "companyId": "linkprice" - }, - "linkpulse": { - "name": "Linkpulse", - "categoryId": 6, - "url": "http://www.linkpulse.com/", - "companyId": "linkpulse" - }, - "linksalpha": { - "name": "LinksAlpha", - "categoryId": 7, - "url": "http://www.linksalpha.com", - "companyId": "linksalpha" - }, - "linksmart": { - "name": "LinkSmart", - "categoryId": 4, - "url": "http://www.linksmart.com/", - "companyId": "sovrn" - }, - "linkstorm": { - "name": "Linkstorm", - "categoryId": 2, - "url": "http://www.linkstorms.com/", - "companyId": "linkstorm" - }, - "linksynergy.com": { - "name": "Rakuten LinkShare", - "categoryId": 4, - "url": "https://rakutenmarketing.com/affiliate", - "companyId": "rakuten" - }, - "linkup": { - "name": "LinkUp", - "categoryId": 6, - "url": "http://www.linkup.com/", - "companyId": "linkup" - }, - "linkwise": { - "name": "Linkwise", - "categoryId": 4, - "url": "http://linkwi.se/global-en/", - "companyId": "linkwise" - }, - "linkwithin": { - "name": "LinkWithin", - "categoryId": 7, - "url": "http://www.linkwithin.com/", - "companyId": "linkwithin" - }, - "liquidm_technology_gmbh": { - "name": "LiquidM Technology GmbH", - "categoryId": 4, - "url": "https://liquidm.com/", - "companyId": "liquidm" - }, - "liqwid": { - "name": "Liqwid", - "categoryId": 4, - "url": "https://liqwid.com/", - "companyId": "liqwid" - }, - "list.ru": { - "name": "Rating@Mail.Ru", - "categoryId": 7, - "url": "http://list.ru/", - "companyId": "megafon" - }, - "listrak": { - "name": "Listrak", - "categoryId": 2, - "url": "http://www.listrak.com/", - "companyId": "listrak" - }, - "live2support": { - "name": "Live2Support", - "categoryId": 2, - "url": "http://www.live2support.com/", - "companyId": "live2support" - }, - "live800": { - "name": "Live800", - "categoryId": 2, - "url": "http://live800.com", - "companyId": "live800" - }, - "live_agent": { - "name": "Live Agent", - "categoryId": 2, - "url": "https://www.ladesk.com/", - "companyId": "liveagent" - }, - "live_help_now": { - "name": "Live Help Now", - "categoryId": 2, - "url": "http://www.livehelpnow.net/", - "companyId": "live_help_now" - }, - "live_intent": { - "name": "Live Intent", - "categoryId": 6, - "url": "http://www.liveintent.com/", - "companyId": "liveintent" - }, - "live_journal": { - "name": "Live Journal", - "categoryId": 6, - "url": "http://www.livejournal.com/", - "companyId": "livejournal" - }, - "liveadexchanger.com": { - "name": "liveadexchanger.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "livechat": { - "name": "LiveChat", - "categoryId": 2, - "url": "http://www.livechatinc.com", - "companyId": "livechat" - }, - "livechatnow": { - "name": "LiveChatNow", - "categoryId": 2, - "url": "http://www.livechatnow.com/", - "companyId": "livechatnow!" - }, - "liveclicker": { - "name": "Liveclicker", - "categoryId": 2, - "url": "http://www.liveclicker.com", - "companyId": "liveclicker" - }, - "livecounter": { - "name": "Livecounter", - "categoryId": 6, - "url": "http://www.livecounter.dk/", - "companyId": "livecounter" - }, - "livefyre": { - "name": "Livefyre", - "categoryId": 1, - "url": "http://www.livefyre.com/", - "companyId": "adobe" - }, - "liveinternet": { - "name": "LiveInternet", - "categoryId": 1, - "url": "http://www.liveinternet.ru/", - "companyId": "liveinternet" - }, - "liveperson": { - "name": "LivePerson", - "categoryId": 2, - "url": "http://www.liveperson.com/", - "companyId": "liveperson" - }, - "liveramp": { - "name": "LiveRamp", - "categoryId": 4, - "url": "https://liveramp.com/", - "companyId": "acxiom" - }, - "livere": { - "name": "LiveRe", - "categoryId": 7, - "url": "http://www.livere.com/", - "companyId": "livere" - }, - "livesportmedia.eu": { - "name": "Livesport Media", - "categoryId": 8, - "url": "http://www.livesportmedia.eu/", - "companyId": null - }, - "livestream": { - "name": "Livestream", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "livetex.ru": { - "name": "LiveTex", - "categoryId": 2, - "url": "https://livetex.ru/", - "companyId": "livetex" - }, - "lkqd": { - "name": "LKQD", - "categoryId": 4, - "url": "http://www.lkqd.com/", - "companyId": "nexstar" - }, - "loadbee.com": { - "name": "Loadbee", - "categoryId": 4, - "url": "https://company.loadbee.com/de/loadbee-home", - "companyId": null - }, - "loadercdn.com": { - "name": "loadercdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "loadsource.org": { - "name": "loadsource.org", - "categoryId": 11, - "url": null, - "companyId": null - }, - "localytics": { - "name": "Localytics", - "categoryId": 101, - "url": "https://uplandsoftware.com/localytics/", - "companyId": "upland", - "source": "AdGuard" - }, - "lockerdome": { - "name": "LockerDome", - "categoryId": 7, - "url": "https://lockerdome.com", - "companyId": "lockerdome" - }, - "lockerz_share": { - "name": "AddToAny", - "categoryId": 7, - "url": "http://www.addtoany.com/", - "companyId": "addtoany" - }, - "logan_media": { - "name": "Logan Media", - "categoryId": 6, - "url": "http://loganmedia.mobi/", - "companyId": "logan_media" - }, - "logdna": { - "name": "LogDNA", - "categoryId": 4, - "url": "http://www.answerbook.com/", - "companyId": "logdna" - }, - "loggly": { - "name": "Loggly", - "categoryId": 6, - "url": "http://loggly.com/", - "companyId": "loggly" - }, - "logly": { - "name": "logly", - "categoryId": 6, - "url": "http://logly.co.jp/", - "companyId": "logly" - }, - "logsss.com": { - "name": "logsss.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lomadee": { - "name": "Lomadee", - "categoryId": 4, - "url": "http://lomadee.com", - "companyId": "lomadee" - }, - "longtail_video_analytics": { - "name": "JW Player Analytics", - "categoryId": 4, - "url": "http://www.longtailvideo.com/", - "companyId": "jw_player" - }, - "loomia": { - "name": "Loomia", - "categoryId": 4, - "url": "http://www.loomia.com/", - "companyId": "loomia" - }, - "loop11": { - "name": "Loop11", - "categoryId": 6, - "url": "https://360i.com/", - "companyId": "360i" - }, - "loopfuse_oneview": { - "name": "LoopFuse OneView", - "categoryId": 4, - "url": "http://www.loopfuse.com/", - "companyId": "loopfuse" - }, - "lotame": { - "name": "Lotame", - "categoryId": 4, - "url": "http://www.lotame.com/", - "companyId": "lotame" - }, - "lottex_inc": { - "name": "vidcpm.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lucid": { - "name": "Lucid", - "categoryId": 4, - "url": "https://luc.id/", - "companyId": "luc.id" - }, - "lucid_media": { - "name": "Lucid Media", - "categoryId": 4, - "url": "http://www.lucidmedia.com/", - "companyId": "singtel" - }, - "lucini": { - "name": "Lucini", - "categoryId": 4, - "url": "http://www.lucinilucini.com/", - "companyId": "lucini_&_lucini_communications" - }, - "lucky_orange": { - "name": "Lucky Orange", - "categoryId": 6, - "url": "http://www.luckyorange.com/", - "companyId": "lucky_orange" - }, - "luckypushh.com": { - "name": "luckypushh.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "lxr100": { - "name": "LXR100", - "categoryId": 4, - "url": "http://www.netelixir.com/lxr100_PPC_management_tool.html", - "companyId": "netelixir" - }, - "lynchpin_analytics": { - "name": "Lynchpin Analytics", - "categoryId": 4, - "url": "http://www.lynchpin.com/", - "companyId": "lynchpin_analytics" - }, - "lytics": { - "name": "Lytics", - "categoryId": 6, - "url": "https://www.lytics.com/", - "companyId": "lytics" - }, - "lyuoaxruaqdo.com": { - "name": "lyuoaxruaqdo.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "m-pathy": { - "name": "m-pathy", - "categoryId": 4, - "url": "http://www.m-pathy.com/", - "companyId": "m-pathy" - }, - "m._p._newmedia": { - "name": "M. P. NEWMEDIA", - "categoryId": 4, - "url": "http://www.mp-newmedia.com/", - "companyId": "sticky" - }, - "m4n": { - "name": "M4N", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "mad_ads_media": { - "name": "Mad Ads Media", - "categoryId": 4, - "url": "http://www.madadsmedia.com/", - "companyId": "mad_ads_media" - }, - "madeleine.de": { - "name": "madeleine.de", - "categoryId": 4, - "url": null, - "companyId": null - }, - "madison_logic": { - "name": "Madison Logic", - "categoryId": 4, - "url": "http://www.madisonlogic.com/", - "companyId": "madison_logic" - }, - "madnet": { - "name": "MADNET", - "categoryId": 4, - "url": "http://madnet.ru/en", - "companyId": "madnet" - }, - "mads": { - "name": "MADS", - "categoryId": 4, - "url": "http://www.mads.com/", - "companyId": "mads" - }, - "magna_advertise": { - "name": "Magna Advertise", - "categoryId": 4, - "url": "http://magna.ru/", - "companyId": "magna_advertise" - }, - "magnetic": { - "name": "Magnetic", - "categoryId": 4, - "url": "http://www.magnetic.is", - "companyId": "magnetic" - }, - "magnetise_group": { - "name": "Magnetise Group", - "categoryId": 4, - "url": "http://magnetisegroup.com/", - "companyId": "magnetise_group" - }, - "magnify360": { - "name": "Magnify360", - "categoryId": 6, - "url": "http://www.magnify360.com/", - "companyId": "magnify360" - }, - "magnuum.com": { - "name": "magnuum.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mail.ru_banner": { - "name": "Mail.Ru Banner Network", - "categoryId": 4, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mail.ru_counter": { - "name": "Mail.Ru Counter", - "categoryId": 2, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mail.ru_group": { - "name": "Mail.Ru Group", - "categoryId": 7, - "url": "http://mail.ru/", - "companyId": "vk", - "source": "AdGuard" - }, - "mailchimp_tracking": { - "name": "MailChimp Tracking", - "categoryId": 4, - "url": "http://mailchimp.com/", - "companyId": "mailchimp" - }, - "mailerlite.com": { - "name": "Mailerlite", - "categoryId": 10, - "url": "https://www.mailerlite.com/", - "companyId": "mailerlite" - }, - "mailtrack.io": { - "name": "MailTrack.io", - "categoryId": 4, - "url": "https://mailtrack.io", - "companyId": "mailtrack" - }, - "mainadv": { - "name": "mainADV", - "categoryId": 4, - "url": "http://www.mainadv.com/", - "companyId": "mainadv" - }, - "makazi": { - "name": "Makazi", - "categoryId": 4, - "url": "http://www.makazi.com/en/", - "companyId": "makazi_group" - }, - "makeappdev.xyz": { - "name": "makeappdev.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "makesource.cool": { - "name": "makesource.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mango": { - "name": "Mango", - "categoryId": 4, - "url": "https://www.mango-office.ru/", - "companyId": "mango_office" - }, - "manycontacts": { - "name": "ManyContacts", - "categoryId": 4, - "url": "https://www.manycontacts.com/", - "companyId": "manycontacts" - }, - "mapandroute.de": { - "name": "Map and Route", - "categoryId": 2, - "url": "http://www.mapandroute.de/", - "companyId": null - }, - "mapbox": { - "name": "Mapbox", - "categoryId": 2, - "url": "https://www.mapbox.com/", - "companyId": null - }, - "maploco": { - "name": "MapLoco", - "categoryId": 4, - "url": "http://www.maploco.com/", - "companyId": "maploco" - }, - "marchex": { - "name": "Marchex", - "categoryId": 4, - "url": "http://www.industrybrains.com/", - "companyId": "marchex" - }, - "marimedia": { - "name": "Marimedia", - "categoryId": 4, - "url": "http://www.marimedia.net/", - "companyId": "tremor_video" - }, - "marin_search_marketer": { - "name": "Marin Search Marketer", - "categoryId": 4, - "url": "http://www.marinsoftware.com/", - "companyId": "marin_software" - }, - "mark_+_mini": { - "name": "Mark & Mini", - "categoryId": 4, - "url": "http://www.markandmini.com/index.cfm", - "companyId": "edm_group" - }, - "market_thunder": { - "name": "Market Thunder", - "categoryId": 4, - "url": "https://www.makethunder.com/", - "companyId": "market_thunder" - }, - "marketgid": { - "name": "MarketGid", - "categoryId": 4, - "url": "http://www.mgid.com/", - "companyId": "marketgid_usa" - }, - "marketing_automation": { - "name": "Marketing Automation", - "categoryId": 4, - "url": "https://en.frodx.com", - "companyId": "frodx" - }, - "marketo": { - "name": "Marketo", - "categoryId": 4, - "url": "http://www.marketo.com/", - "companyId": "marketo" - }, - "markmonitor": { - "name": "MarkMonitor", - "categoryId": 4, - "url": "https://www.markmonitor.com/", - "companyId": "markmonitor", - "source": "AdGuard" - }, - "marktest": { - "name": "Marktest", - "categoryId": 4, - "url": "http://www.marktest.com/", - "companyId": "marktest_group" - }, - "marshadow.io": { - "name": "marshadow.io", - "categoryId": 4, - "url": null, - "companyId": null - }, - "martini_media": { - "name": "Martini Media", - "categoryId": 4, - "url": "http://martinimediainc.com/", - "companyId": "martini_media" - }, - "maru-edu": { - "name": "Maru-EDU", - "categoryId": 2, - "url": "https://www.maruedr.com", - "companyId": "maruedr" - }, - "marvellous_machine": { - "name": "Marvellous Machine", - "categoryId": 6, - "url": "https://www.marvellousmachine.net/", - "companyId": "marvellous_machine" - }, - "master_banner_network": { - "name": "Master Banner Network", - "categoryId": 4, - "url": "http://www.mbn.com.ua/", - "companyId": "master_banner_network" - }, - "mastertarget": { - "name": "MasterTarget", - "categoryId": 4, - "url": "http://mastertarget.ru/", - "companyId": "mastertarget" - }, - "matelso": { - "name": "Matelso", - "categoryId": 6, - "url": "https://www.matelso.de", - "companyId": "matelso" - }, - "mather_analytics": { - "name": "Mather Analytics", - "categoryId": 6, - "url": "https://www.mathereconomics.com/", - "companyId": "mather_economics" - }, - "mathjax.org": { - "name": "MathJax", - "categoryId": 9, - "url": "https://www.mathjax.org/", - "companyId": null - }, - "matiro": { - "name": "Matiro", - "categoryId": 6, - "url": "http://matiro.com/", - "companyId": "matiro" - }, - "matomo": { - "name": "Matomo", - "categoryId": 6, - "url": "https://matomo.org/s", - "companyId": "matomo" - }, - "matomy_market": { - "name": "Matomy Market", - "categoryId": 4, - "url": "http://www.matomymarket.com/", - "companyId": "matomy_media" - }, - "matrix": { - "name": "Matrix", - "categoryId": 5, - "url": "https://matrix.org/", - "companyId": "matrix", - "source": "AdGuard" - }, - "maxbounty": { - "name": "MaxBounty", - "categoryId": 5, - "url": "http://www.maxbounty.com/", - "companyId": "maxbounty" - }, - "maxcdn": { - "name": "MaxCDN", - "categoryId": 9, - "url": "https://www.maxcdn.com/", - "companyId": null - }, - "maxlab": { - "name": "Maxlab", - "categoryId": 4, - "url": "http://maxlab.ru", - "companyId": "maxlab" - }, - "maxmind": { - "name": "MaxMind", - "categoryId": 4, - "url": "http://www.maxmind.com/", - "companyId": "maxmind" - }, - "maxonclick_com": { - "name": "maxonclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "maxpoint_interactive": { - "name": "MaxPoint Interactive", - "categoryId": 4, - "url": "http://www.maxpointinteractive.com/", - "companyId": "maxpoint_interactive" - }, - "maxymiser": { - "name": "Oracle Maxymiser", - "categoryId": 4, - "url": "https://www.oracle.com/marketingcloud/products/testing-and-optimization/index.html", - "companyId": "oracle" - }, - "mbr_targeting": { - "name": "mbr targeting", - "categoryId": 4, - "url": "https://mbr-targeting.com/", - "companyId": "stroer" - }, - "mbuy": { - "name": "MBuy", - "categoryId": 4, - "url": "http://www.adbuyer.com/", - "companyId": "mbuy" - }, - "mcabi": { - "name": "mCabi", - "categoryId": 4, - "url": "https://mcabi.mcloudglobal.com/#", - "companyId": "mcabi" - }, - "mcafee_secure": { - "name": "McAfee Secure", - "categoryId": 5, - "url": "http://www.mcafeesecure.com/us/", - "companyId": "mcafee" - }, - "mconet": { - "name": "MCOnet", - "categoryId": 4, - "url": "http://mconet.biz/", - "companyId": "mconet" - }, - "mdotlabs": { - "name": "MdotLabs", - "categoryId": 4, - "url": "http://www.mdotlabs.com/", - "companyId": "comscore" - }, - "media-clic": { - "name": "Media-clic", - "categoryId": 4, - "url": "http://www.media-clic.com/", - "companyId": "media-click" - }, - "media-imdb.com": { - "name": "IMDB CDN", - "categoryId": 9, - "url": "https://www.imdb.com/", - "companyId": "amazon_associates" - }, - "media.net": { - "name": "Media.net", - "categoryId": 4, - "url": "http://www.media.net/", - "companyId": "media.net" - }, - "media_impact": { - "name": "Media Impact", - "categoryId": 4, - "url": "https://mediaimpact.de/index.html", - "companyId": "media_impact" - }, - "media_innovation_group": { - "name": "Xaxis", - "categoryId": 4, - "url": "https://www.xaxis.com/", - "companyId": "media_innovation_group" - }, - "media_today": { - "name": "Media Today", - "categoryId": 4, - "url": "http://mediatoday.ru/", - "companyId": "media_today" - }, - "mediaad": { - "name": "MediaAd", - "categoryId": 4, - "url": "https://mediaad.org", - "companyId": "mediaad" - }, - "mediaglu": { - "name": "MediaGlu", - "categoryId": 4, - "url": "https://www.mediaglu.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "mediahub": { - "name": "MediaHub", - "categoryId": 4, - "url": "http://www.mediahub.com/", - "companyId": "mediahub" - }, - "medialab": { - "name": "MediaLab.AI Inc.", - "categoryId": 8, - "url": "https://medialab.la/", - "companyId": "medialab", - "source": "AdGuard" - }, - "medialand": { - "name": "Medialand", - "categoryId": 4, - "url": "http://medialand.ru", - "companyId": "medialand" - }, - "medialead": { - "name": "Medialead", - "categoryId": 4, - "url": "https://www.medialead.de/", - "companyId": "the_reach_group" - }, - "mediamath": { - "name": "MediaMath", - "categoryId": 4, - "url": "http://www.mediamath.com/", - "companyId": "mediamath" - }, - "mediametrics": { - "name": "Mediametrics", - "categoryId": 7, - "url": "http://mediametrics.ru", - "companyId": "mediametrics" - }, - "median": { - "name": "Median", - "categoryId": 4, - "url": "http://median.hu", - "companyId": "median" - }, - "mediapass": { - "name": "MediaPass", - "categoryId": 4, - "url": "http://www.mediapass.com/", - "companyId": "mediapass" - }, - "mediapost_communications": { - "name": "Mediapost Communications", - "categoryId": 6, - "url": "https://vrm.mediapostcommunication.net/", - "companyId": "mediapost_communications" - }, - "mediarithmics.com": { - "name": "Mediarithmics", - "categoryId": 4, - "url": "http://www.mediarithmics.com/en/", - "companyId": "mediarithmics" - }, - "mediascope": { - "name": "Mediascope", - "categoryId": 6, - "url": "http://mediascope.net/", - "companyId": "mediascope" - }, - "mediashakers": { - "name": "MediaShakers", - "categoryId": 4, - "url": "http://www.mediashakers.com/", - "companyId": "mediashakers" - }, - "mediashift": { - "name": "MediaShift", - "categoryId": 4, - "url": "http://www.mediashift.com/", - "companyId": "mediashift" - }, - "mediator.media": { - "name": "Mediator", - "categoryId": 6, - "url": "https://mediator.media/", - "companyId": "mycom_bv" - }, - "mediav": { - "name": "MediaV", - "categoryId": 4, - "url": "https://www.mediav.com/", - "companyId": "mediav" - }, - "mediawhiz": { - "name": "Mediawhiz", - "categoryId": 4, - "url": "http://www.mediawhiz.com/", - "companyId": "matomy_media" - }, - "medigo": { - "name": "Medigo", - "categoryId": 4, - "url": "https://www.mediego.com/en/", - "companyId": "mediego" - }, - "medley": { - "name": "Medley", - "categoryId": 4, - "url": "http://medley.com/", - "companyId": "friendfinder_networks" - }, - "medyanet": { - "name": "MedyaNet", - "categoryId": 4, - "url": "http://www.medyanet.com.tr/", - "companyId": "medyanet" - }, - "meebo_bar": { - "name": "Meebo Bar", - "categoryId": 7, - "url": "http://bar.meebo.com/", - "companyId": "google" - }, - "meetrics": { - "name": "Meetrics", - "categoryId": 4, - "url": "http://www.meetrics.de/", - "companyId": "meetrics" - }, - "megaindex": { - "name": "MegaIndex", - "categoryId": 4, - "url": "http://www.megaindex.ru", - "companyId": "megaindex" - }, - "meganz": { - "name": "Mega Ltd.", - "categoryId": 8, - "url": "https://mega.io/", - "companyId": "meganz", - "source": "AdGuard" - }, - "mein-bmi.com": { - "name": "mein-bmi.com", - "categoryId": 12, - "url": "https://www.mein-bmi.com/", - "companyId": null - }, - "melissa": { - "name": "Melissa", - "categoryId": 6, - "url": "https://www.melissa.com/", - "companyId": "melissa_global_intelligence" - }, - "melt": { - "name": "Melt", - "categoryId": 4, - "url": "http://meltdsp.com/", - "companyId": "melt" - }, - "menlo": { - "name": "Menlo", - "categoryId": 4, - "url": "http://www.menlotechnologies.cn/", - "companyId": "menlotechnologies" - }, - "mentad": { - "name": "MentAd", - "categoryId": 4, - "url": "http://www.mentad.com/", - "companyId": "mentad" - }, - "mercado": { - "name": "Mercado", - "categoryId": 4, - "url": "https://www.mercadolivre.com.br/", - "companyId": "mercado_livre" - }, - "merchantadvantage": { - "name": "MerchantAdvantage", - "categoryId": 4, - "url": "http://www.merchantadvantage.com/channelmanagement.cfm", - "companyId": "merchantadvantage" - }, - "merchenta": { - "name": "Merchenta", - "categoryId": 4, - "url": "http://www.merchenta.com/", - "companyId": "merchenta" - }, - "mercury_media": { - "name": "Mercury Media", - "categoryId": 4, - "url": "http://trackingsoft.com/", - "companyId": "mercury_media" - }, - "merkle_research": { - "name": "Merkle Research", - "categoryId": 6, - "url": "http://www.dentsuaegisnetwork.com/", - "companyId": "dentsu_aegis_network" - }, - "merkle_rkg": { - "name": "Merkle RKG", - "categoryId": 6, - "url": "https://www.merkleinc.com/what-we-do/digital-agency-services/rkg-now-fully-integrated-merkle", - "companyId": "dentsu_aegis_network" - }, - "messenger.com": { - "name": "Facebook Messenger", - "categoryId": 7, - "url": "https://messenger.com", - "companyId": "facebook" - }, - "meta_network": { - "name": "Meta Network", - "categoryId": 7, - "url": "http://www.metanetwork.com/", - "companyId": "meta_network" - }, - "metaffiliation.com": { - "name": "Netaffiliation", - "categoryId": 4, - "url": "http://netaffiliation.com/", - "companyId": "kwanko" - }, - "metapeople": { - "name": "Metapeople", - "categoryId": 4, - "url": "http://www.metapeople.com/us/", - "companyId": "metapeople" - }, - "metrigo": { - "name": "Metrigo", - "categoryId": 4, - "url": "http://metrigo.com/", - "companyId": "metrigo" - }, - "metriweb": { - "name": "MetriWeb", - "categoryId": 4, - "url": "http://www.metriware.be/", - "companyId": "metriware" - }, - "miaozhen": { - "name": "Miaozhen", - "categoryId": 4, - "url": "http://miaozhen.com/en/index.html", - "companyId": "miaozhen" - }, - "microad": { - "name": "MicroAd", - "categoryId": 4, - "url": "https://www.microad.co.jp/", - "companyId": "microad" - }, - "microsoft": { - "name": "Microsoft Services", - "categoryId": 8, - "url": "http://www.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_adcenter_conversion": { - "name": "Microsoft adCenter Conversion", - "categoryId": 4, - "url": "https://adcenter.microsoft.com/", - "companyId": "microsoft" - }, - "microsoft_analytics": { - "name": "Microsoft Analytics", - "categoryId": 4, - "url": "https://adcenter.microsoft.com", - "companyId": "microsoft" - }, - "microsoft_clarity": { - "name": "Microsoft Clarity", - "categoryId": 6, - "url": "https://clarity.microsoft.com/", - "companyId": "microsoft" - }, - "mindset_media": { - "name": "Mindset Media", - "categoryId": 4, - "url": "http://www.mindset-media.com/", - "companyId": "google" - }, - "mindspark": { - "name": "Mindspark", - "categoryId": 6, - "url": "http://www.mindspark.com/", - "companyId": "iac_apps" - }, - "mindviz_tracker": { - "name": "MindViz Tracker", - "categoryId": 4, - "url": "http://mvtracker.com/", - "companyId": "mindviz" - }, - "minewhat": { - "name": "MineWhat", - "categoryId": 4, - "url": "http://www.minewhat.com", - "companyId": "minewhat" - }, - "mints_app": { - "name": "Mints App", - "categoryId": 2, - "url": "https://mintsapp.io/", - "companyId": "mints_app" - }, - "minute.ly": { - "name": "minute.ly", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "minute.ly_video": { - "name": "minute.ly video", - "categoryId": 0, - "url": "http://minute.ly/", - "companyId": "minute.ly" - }, - "mirando": { - "name": "Mirando", - "categoryId": 4, - "url": "http://mirando.de", - "companyId": "mirando" - }, - "mirtesen.ru": { - "name": "mirtesen.ru", - "categoryId": 7, - "url": "https://mirtesen.ru/", - "companyId": null - }, - "mister_bell": { - "name": "Mister Bell", - "categoryId": 4, - "url": "http://misterbell.fr/", - "companyId": "mister_bell" - }, - "mixi": { - "name": "mixi", - "categoryId": 7, - "url": "http://mixi.jp/", - "companyId": "mixi" - }, - "mixpanel": { - "name": "Mixpanel", - "categoryId": 6, - "url": "http://mixpanel.com/", - "companyId": "mixpanel" - }, - "mixpo": { - "name": "Mixpo", - "categoryId": 4, - "url": "http://dynamicvideoad.mixpo.com/", - "companyId": "mixpo" - }, - "mluvii": { - "name": "Mluvii", - "categoryId": 2, - "url": "https://www.mluvii.com", - "companyId": "mluvii" - }, - "mncdn.com": { - "name": "MediaNova CDN", - "categoryId": 9, - "url": "https://www.medianova.com/", - "companyId": null - }, - "moat": { - "name": "Moat", - "categoryId": 4, - "url": "http://www.moat.com/", - "companyId": "oracle" - }, - "mobicow": { - "name": "Mobicow", - "categoryId": 4, - "url": "http://www.mobicow.com/", - "companyId": "mobicow" - }, - "mobify": { - "name": "Mobify", - "categoryId": 4, - "url": "http://www.mobify.com/", - "companyId": "mobify" - }, - "mobtrks.com": { - "name": "mobtrks.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "mocean_mobile": { - "name": "mOcean Mobile", - "categoryId": 4, - "url": "http://www.moceanmobile.com/", - "companyId": "pubmatic" - }, - "mochapp": { - "name": "MoChapp", - "categoryId": 2, - "url": "http://www.mochapp.com/", - "companyId": "mochapp" - }, - "modern_impact": { - "name": "Modern Impact", - "categoryId": 4, - "url": "http://www.modernimpact.com/", - "companyId": "modern_impact" - }, - "modernus": { - "name": "Modernus", - "categoryId": 6, - "url": "http://www.modernus.is", - "companyId": "modernus" - }, - "modulepush.com": { - "name": "modulepush.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "mogo_interactive": { - "name": "Mogo Interactive", - "categoryId": 4, - "url": "http://www.mogomarketing.com/", - "companyId": "mogo_interactive" - }, - "mokono_analytics": { - "name": "Mokono Analytics", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "monero_miner": { - "name": "Monero Miner", - "categoryId": 8, - "url": "http://devappgrant.space/", - "companyId": null - }, - "monetate": { - "name": "Monetate", - "categoryId": 6, - "url": "http://monetate.com", - "companyId": "monetate" - }, - "monetize_me": { - "name": "Monetize Me", - "categoryId": 4, - "url": "http://www.monetize-me.com/", - "companyId": "monetize_me" - }, - "moneytizer": { - "name": "Moneytizer", - "categoryId": 4, - "url": "https://www.themoneytizer.com/", - "companyId": "the_moneytizer" - }, - "mongoose_metrics": { - "name": "Mongoose Metrics", - "categoryId": 4, - "url": "http://www.mongoosemetrics.com/", - "companyId": "mongoose_metrics" - }, - "monitis": { - "name": "Monitis", - "categoryId": 6, - "url": "http://www.monitis.com/", - "companyId": "monitis" - }, - "monitus": { - "name": "Monitus", - "categoryId": 6, - "url": "http://www.monitus.net/", - "companyId": "monitus" - }, - "monotype_gmbh": { - "name": "Monotype GmbH", - "categoryId": 9, - "url": "http://www.monotype.com/", - "companyId": "monotype" - }, - "monotype_imaging": { - "name": "Fonts.com Store", - "categoryId": 2, - "url": "https://www.fonts.com/", - "companyId": "monotype" - }, - "monsido": { - "name": "Monsido", - "categoryId": 6, - "url": "https://monsido.com/", - "companyId": "monsido" - }, - "monster_advertising": { - "name": "Monster Advertising", - "categoryId": 4, - "url": "http://www.monster.com/", - "companyId": "monster_worldwide" - }, - "mooxar": { - "name": "Mooxar", - "categoryId": 4, - "url": "http://mooxar.com/", - "companyId": "mooxar" - }, - "mopinion.com": { - "name": "Mopinion", - "categoryId": 2, - "url": "https://mopinion.com/", - "companyId": "mopinion" - }, - "mopub": { - "name": "MoPub", - "categoryId": 4, - "url": "https://www.mopub.com/", - "companyId": "twitter" - }, - "more_communication": { - "name": "More Communication", - "categoryId": 4, - "url": "http://www.more-com.co.jp/", - "companyId": "more_communication" - }, - "moreads": { - "name": "moreAds", - "categoryId": 4, - "url": "https://www.moras.jp", - "companyId": "moreads" - }, - "motigo_webstats": { - "name": "Motigo Webstats", - "categoryId": 7, - "url": "http://webstats.motigo.com/", - "companyId": "motigo" - }, - "motionpoint": { - "name": "MotionPoint", - "categoryId": 6, - "url": "http://www.motionpoint.com/", - "companyId": "motionpoint_corporation" - }, - "mouseflow": { - "name": "Mouseflow", - "categoryId": 6, - "url": "http://mouseflow.com/", - "companyId": "mouseflow" - }, - "mousestats": { - "name": "MouseStats", - "categoryId": 4, - "url": "http://www.mousestats.com/", - "companyId": "mousestats" - }, - "mousetrace": { - "name": "MouseTrace", - "categoryId": 6, - "url": "http://www.mousetrace.com/", - "companyId": "mousetrace" - }, - "mov.ad": { - "name": "Mov.ad ", - "categoryId": 8, - "url": null, - "companyId": null - }, - "movable_ink": { - "name": "Movable Ink", - "categoryId": 2, - "url": "https://movableink.com/", - "companyId": "movable_ink" - }, - "movable_media": { - "name": "Movable Media", - "categoryId": 4, - "url": "http://www.movablemedia.com/", - "companyId": "movable_media" - }, - "moz": { - "name": "Moz", - "categoryId": 8, - "url": "https://moz.com/", - "companyId": null - }, - "mozilla": { - "name": "Mozilla Foundation", - "categoryId": 8, - "url": "https://www.mozilla.org/", - "companyId": "mozilla", - "source": "AdGuard" - }, - "mozoo": { - "name": "MoZoo", - "categoryId": 4, - "url": "http://mozoo.com/", - "companyId": "mozoo" - }, - "mrp": { - "name": "MRP", - "categoryId": 4, - "url": "https://www.mrpfd.com/", - "companyId": "mrp" - }, - "mrpdata": { - "name": "MRP", - "categoryId": 6, - "url": "http://mrpdata.com/Account/Login?ReturnUrl=%2F", - "companyId": "fifth_story" - }, - "mrskincash": { - "name": "MrSkinCash", - "categoryId": 3, - "url": "http://mrskincash.com/", - "companyId": "mrskincash.com" - }, - "msedge": { - "name": "Microsoft Edge", - "categoryId": 8, - "url": "https://www.microsoft.com/en-us/edge", - "companyId": "microsoft", - "source": "AdGuard" - }, - "msn": { - "name": "Microsoft Network", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "muscula": { - "name": "Muscula", - "categoryId": 4, - "url": "https://www.universe-surf.de/", - "companyId": "universe_surf" - }, - "mux_inc": { - "name": "Mux", - "categoryId": 0, - "url": "https://mux.com/", - "companyId": "mux_inc" - }, - "mybloglog": { - "name": "MyBlogLog", - "categoryId": 7, - "url": "http://www.mybloglog.com/", - "companyId": "verizon" - }, - "mybuys": { - "name": "MyBuys", - "categoryId": 4, - "url": "http://www.mybuys.com/", - "companyId": "magnetic" - }, - "mycdn.me": { - "name": "Mail.Ru CDN", - "categoryId": 9, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "mycliplister.com": { - "name": "Cliplister", - "categoryId": 2, - "url": "https://www.cliplister.com/", - "companyId": null - }, - "mycounter.ua": { - "name": "MyCounter.ua", - "categoryId": 6, - "url": "http://mycounter.ua", - "companyId": "mycounter.ua" - }, - "myfonts": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "myfonts_counter": { - "name": "MyFonts", - "categoryId": 6, - "url": "http://www.myfonts.com/", - "companyId": "myfonts" - }, - "mypagerank": { - "name": "MyPagerank", - "categoryId": 6, - "url": "http://www.mypagerank.net/", - "companyId": "mypagerank" - }, - "mystat": { - "name": "MyStat", - "categoryId": 7, - "url": "http://mystat.hu/", - "companyId": "myst_statistics" - }, - "mythings": { - "name": "myThings", - "categoryId": 4, - "url": "http://www.mythings.com/", - "companyId": "mythings" - }, - "mytop_counter": { - "name": "Mytop Counter", - "categoryId": 7, - "url": "http://mytop-in.net/", - "companyId": "mytop-in" - }, - "nab": { - "name": "National Australia Bank", - "categoryId": 8, - "url": "https://www.nab.com.au/", - "companyId": "nab", - "source": "AdGuard" - }, - "nakanohito.jp": { - "name": "Nakanohito", - "categoryId": 4, - "url": "http://nakanohito.jp/", - "companyId": "userinsight" - }, - "namogoo": { - "name": "Namoogoo", - "categoryId": 4, - "url": "https://www.namogoo.com/", - "companyId": null - }, - "nanigans": { - "name": "Nanigans", - "categoryId": 4, - "url": "http://www.nanigans.com/", - "companyId": "nanigans" - }, - "nano_interactive": { - "name": "Nano Interactive", - "categoryId": 4, - "url": "http://www.nanointeractive.com/home/de", - "companyId": "nano_interactive" - }, - "nanorep": { - "name": "nanoRep", - "categoryId": 2, - "url": "http://www.nanorep.com/", - "companyId": "logmein" - }, - "narando": { - "name": "Narando", - "categoryId": 0, - "url": "https://narando.com/", - "companyId": "narando" - }, - "narrativ": { - "name": "Narrativ", - "categoryId": 4, - "url": "https://narrativ.com/", - "companyId": "narrativ" - }, - "narrative_io": { - "name": "Narrative", - "categoryId": 6, - "url": "http://www.narrative.io/", - "companyId": "narrative.io" - }, - "natimatica": { - "name": "Natimatica", - "categoryId": 4, - "url": "http://natimatica.com/", - "companyId": "natimatica" - }, - "nativeads.com": { - "name": "native ads", - "categoryId": 4, - "url": "https://nativeads.com/", - "companyId": null - }, - "nativeroll": { - "name": "Nativeroll", - "categoryId": 0, - "url": "http://nativeroll.tv/", - "companyId": "native_roll" - }, - "nativo": { - "name": "Nativo", - "categoryId": 4, - "url": "http://www.nativo.net/", - "companyId": "nativo" - }, - "navegg_dmp": { - "name": "Navegg", - "categoryId": 6, - "url": "https://www.navegg.com/en/", - "companyId": "navegg" - }, - "naver.com": { - "name": "Naver", - "categoryId": 4, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "naver_search": { - "name": "Naver Search", - "categoryId": 2, - "url": "http://www.naver.com/", - "companyId": "naver" - }, - "nbc_news": { - "name": "NBC News", - "categoryId": 8, - "url": "https://www.nbcnews.com/", - "companyId": null - }, - "ncol": { - "name": "NCOL", - "categoryId": 4, - "url": "http://www.ncol.com/", - "companyId": "ncol" - }, - "needle": { - "name": "Needle", - "categoryId": 2, - "url": "http://www.needle.com", - "companyId": "needle" - }, - "nekudo.com": { - "name": "Nekudo", - "categoryId": 2, - "url": "https://nekudo.com/", - "companyId": "nekudo" - }, - "neodata": { - "name": "Neodata", - "categoryId": 4, - "url": "http://neodatagroup.com/", - "companyId": "neodata" - }, - "neory": { - "name": "NEORY ", - "categoryId": 4, - "url": "https://www.neory.com/", - "companyId": "neory" - }, - "nerfherdersolo_com": { - "name": "nerfherdersolo.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "net-metrix": { - "name": "NET-Metrix", - "categoryId": 6, - "url": "http://www.net-metrix.ch/", - "companyId": "net-metrix" - }, - "net-results": { - "name": "Net-Results", - "categoryId": 4, - "url": "http://www.net-results.com/", - "companyId": "net-results" - }, - "net_avenir": { - "name": "Net Avenir", - "categoryId": 4, - "url": "http://www.netavenir.com/", - "companyId": "net_avenir" - }, - "net_communities": { - "name": "Net Communities", - "categoryId": 4, - "url": "http://www.netcommunities.com/", - "companyId": "net_communities" - }, - "net_visibility": { - "name": "NET Visibility", - "categoryId": 4, - "url": "http://www.netvisibility.co.uk", - "companyId": "net_visibility" - }, - "netbiscuits": { - "name": "Netbiscuits", - "categoryId": 6, - "url": "http://www.netbiscuits.net/", - "companyId": "netbiscuits" - }, - "netbooster_group": { - "name": "NetBooster Group", - "categoryId": 4, - "url": "http://www.netbooster.com/", - "companyId": "netbooster_group" - }, - "netflix": { - "name": "Netflix", - "categoryId": 0, - "url": "https://www.netflix.com/", - "companyId": "netflix", - "source": "AdGuard" - }, - "netify": { - "name": "Netify", - "categoryId": 8, - "url": "https://www.netify.ai/", - "companyId": "netify", - "source": "AdGuard" - }, - "netletix": { - "name": "Netletix", - "categoryId": 4, - "url": "http://www.netletix.com//", - "companyId": "ip_de" - }, - "netminers": { - "name": "Netminers", - "categoryId": 6, - "url": "http://netminers.dk/", - "companyId": "netminers" - }, - "netmining": { - "name": "Netmining", - "categoryId": 4, - "url": "http://www.netmining.com/", - "companyId": "zeta" - }, - "netmonitor": { - "name": "NetMonitor", - "categoryId": 6, - "url": "http://www.netmanager.net/en/", - "companyId": "netmonitor" - }, - "netratings_sitecensus": { - "name": "NetRatings SiteCensus", - "categoryId": 4, - "url": "http://www.nielsen-online.com/intlpage.html", - "companyId": "nielsen" - }, - "netrk.net": { - "name": "nfxTrack", - "categoryId": 6, - "url": "https://netrk.net/", - "companyId": "netzeffekt" - }, - "netseer": { - "name": "NetSeer", - "categoryId": 4, - "url": "http://www.netseer.com/", - "companyId": "netseer" - }, - "netshelter": { - "name": "NetShelter", - "categoryId": 4, - "url": "http://www.netshelter.net/", - "companyId": "netshelter" - }, - "netsprint_audience": { - "name": "Netsprint Audience", - "categoryId": 6, - "url": "http://audience.netsprint.eu/", - "companyId": "netsprint" - }, - "networkedblogs": { - "name": "NetworkedBlogs", - "categoryId": 7, - "url": "http://w.networkedblogs.com/", - "companyId": "networkedblogs" - }, - "neustar_adadvisor": { - "name": "Neustar AdAdvisor", - "categoryId": 4, - "url": "http://www.targusinfo.com/", - "companyId": "neustar" - }, - "new_relic": { - "name": "New Relic", - "categoryId": 6, - "url": "http://newrelic.com/", - "companyId": "new_relic" - }, - "newscgp.com": { - "name": "News Connect", - "categoryId": 4, - "url": "https://newscorp.com/", - "companyId": "news_corp" - }, - "newsmax": { - "name": "Newsmax", - "categoryId": 4, - "url": "http://www.newsmax.com/", - "companyId": "newsmax" - }, - "newstogram": { - "name": "Newstogram", - "categoryId": 4, - "url": "http://www.newstogram.com/", - "companyId": "dailyme" - }, - "newsupdatedir.info": { - "name": "newsupdatedir.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "newsupdatewe.info": { - "name": "newsupdatewe.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "newtention": { - "name": "Newtention", - "categoryId": 4, - "url": "http://www.newtention.de/", - "companyId": "next_audience" - }, - "nexage": { - "name": "Nexage", - "categoryId": 4, - "url": "http://www.nexage.com/", - "companyId": "verizon" - }, - "nexeps.com": { - "name": "neXeps", - "categoryId": 4, - "url": "http://nexeps.com/", - "companyId": null - }, - "next_performance": { - "name": "Next Performance", - "categoryId": 4, - "url": "http://www.nextperformance.com/", - "companyId": "nextperf" - }, - "next_user": { - "name": "Next User", - "categoryId": 4, - "url": "https://www.nextuser.com/", - "companyId": "next_user" - }, - "nextag_roi_optimizer": { - "name": "Nextag ROI Optimizer", - "categoryId": 4, - "url": "http://www.nextag.com/", - "companyId": "nextag" - }, - "nextclick": { - "name": "Nextclick", - "categoryId": 4, - "url": "http://nextclick.pl/", - "companyId": "leadbullet" - }, - "nextstat": { - "name": "NextSTAT", - "categoryId": 6, - "url": "http://www.nextstat.com/", - "companyId": "nextstat" - }, - "neytiv": { - "name": "Neytiv", - "categoryId": 6, - "url": "http://neytiv.com/", - "companyId": "neytiv" - }, - "ngage_inc.": { - "name": "NGage INC.", - "categoryId": 6, - "url": "https://www.nginx.com/", - "companyId": "nginx" - }, - "nice264.com": { - "name": "Nice264", - "categoryId": 0, - "url": "http://nice264.com/", - "companyId": null - }, - "nimblecommerce": { - "name": "NimbleCommerce", - "categoryId": 4, - "url": "http://www.nimblecommerce.com/", - "companyId": "nimblecommerce" - }, - "nine_direct_digital": { - "name": "Nine Digital Direct", - "categoryId": 4, - "url": "https://ninedigitaldirect.com.au/", - "companyId": "nine_entertainment", - "source": "AdGuard" - }, - "ninja_access_analysis": { - "name": "Ninja Access Analysis", - "categoryId": 6, - "url": "http://www.ninja.co.jp/analysis/", - "companyId": "samurai_factory" - }, - "nirror": { - "name": "Nirror", - "categoryId": 6, - "url": "https://www.nirror.com/", - "companyId": "nirror" - }, - "nitropay": { - "name": "NitroPay", - "categoryId": 4, - "url": "https://nitropay.com/", - "companyId": "gg_software" - }, - "nk.pl_widgets": { - "name": "NK.pl Widgets", - "categoryId": 4, - "url": "http://nk.pl", - "companyId": "nk.pl" - }, - "noaa.gov": { - "name": "National Oceanic and Atmospheric Administration", - "categoryId": 8, - "url": "https://noaa.gov/", - "companyId": null - }, - "noddus": { - "name": "Noddus", - "categoryId": 4, - "url": "https://www.enterprise.noddus.com/", - "companyId": "noddus" - }, - "nolix": { - "name": "Nolix", - "categoryId": 4, - "url": "http://nolix.ru/", - "companyId": "nolix" - }, - "nonli": { - "name": "Nonli", - "categoryId": 4, - "url": "https://www.nonli.com/", - "companyId": "nonli", - "source": "AdGuard" - }, - "nonstop_consulting": { - "name": "Resolution Media", - "categoryId": 4, - "url": "https://resolutionmedia.com/", - "companyId": "resolution_media" - }, - "noop.style": { - "name": "noop.style", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nosto.com": { - "name": "nosto", - "categoryId": 6, - "url": "http://www.nosto.com/", - "companyId": null - }, - "notify": { - "name": "Notify", - "categoryId": 4, - "url": "http://notify.ag/en/", - "companyId": null - }, - "notifyfox": { - "name": "Notifyfox", - "categoryId": 6, - "url": "https://notifyfox.com/", - "companyId": "notifyfox" - }, - "notion": { - "name": "Notion", - "categoryId": 8, - "url": "https://www.notion.so/", - "companyId": "notion", - "source": "AdGuard" - }, - "now_interact": { - "name": "Now Interact", - "categoryId": 6, - "url": "http://nowinteract.com/", - "companyId": "now_interact" - }, - "npario": { - "name": "nPario", - "categoryId": 6, - "url": "http://npario.com/", - "companyId": "npario" - }, - "nplexmedia": { - "name": "nPlexMedia", - "categoryId": 4, - "url": "http://www.nplexmedia.com/", - "companyId": "nplexmedia" - }, - "nrelate": { - "name": "nRelate", - "categoryId": 2, - "url": "http://nrelate.com/", - "companyId": "iac_apps" - }, - "ns8": { - "name": "NS8", - "categoryId": 4, - "url": "https://www.ns8.com/", - "companyId": null - }, - "nt.vc": { - "name": "Next Tuesday GmbH", - "categoryId": 8, - "url": "http://www.nexttuesday.de/", - "companyId": null - }, - "ntent": { - "name": "NTENT", - "categoryId": 4, - "url": "http://www.verticalsearchworks.com", - "companyId": "ntent" - }, - "ntppool": { - "name": "Network Time Protocol", - "categoryId": 5, - "url": "https://ntp.org/", - "companyId": "network_time_foundation", - "source": "AdGuard" - }, - "nttcom_online_marketing_solutions": { - "name": "NTTCom Online Marketing Solutions", - "categoryId": 6, - "url": "http://www.digitalforest.co.jp/", - "companyId": "nttcom_online_marketing_solutions" - }, - "nuffnang": { - "name": "Nuffnang", - "categoryId": 4, - "url": "http://nuffnang.com/", - "companyId": "nuffnang" - }, - "nugg.ad": { - "name": "Nugg.Ad", - "categoryId": 4, - "url": "http://www.nugg.ad/", - "companyId": "nugg.ad" - }, - "nui_media": { - "name": "NUI Media", - "categoryId": 4, - "url": "http://adjuggler.com/", - "companyId": "nui_media" - }, - "numbers.md": { - "name": "Numbers.md", - "categoryId": 6, - "url": "https://numbers.md/", - "companyId": "numbers.md" - }, - "numerator": { - "name": "Numerator", - "categoryId": 5, - "url": "http://www.channeliq.com/", - "companyId": "numerator" - }, - "ny_times_tagx": { - "name": "NY Times TagX", - "categoryId": 6, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "nyacampwk.com": { - "name": "nyacampwk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyetm2mkch.com": { - "name": "nyetm2mkch.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "nyt.com": { - "name": "The New York Times", - "categoryId": 8, - "url": "https://www.nytimes.com/", - "companyId": "the_new_york_times" - }, - "o12zs3u2n.com": { - "name": "o12zs3u2n.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "o2.pl": { - "name": "o2.pl", - "categoryId": 8, - "url": "https://www.o2.pl/", - "companyId": "o2.pl" - }, - "o2online.de": { - "name": "o2online.de", - "categoryId": 8, - "url": "https://www.o2online.de/", - "companyId": null - }, - "oath_inc": { - "name": "Oath", - "categoryId": 8, - "url": "https://www.oath.com/", - "companyId": "verizon" - }, - "observer": { - "name": "Observer", - "categoryId": 4, - "url": "http://www.observerapp.com", - "companyId": "observer" - }, - "ocioso": { - "name": "Ocioso", - "categoryId": 7, - "url": "http://ocioso.com.br/", - "companyId": "ocioso" - }, - "oclasrv.com": { - "name": "oclasrv.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octapi.net": { - "name": "octapi.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "octavius": { - "name": "Octavius", - "categoryId": 4, - "url": "http://octavius.rocks/", - "companyId": "octavius" - }, - "office.com": { - "name": "office.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office.net": { - "name": "office.net", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "office365.com": { - "name": "office365.com", - "categoryId": 8, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "oghub.io": { - "name": "OG Hub", - "categoryId": 11, - "url": null, - "companyId": null - }, - "oh_my_stats": { - "name": "Oh My Stats", - "categoryId": 6, - "url": "https://ohmystats.com/", - "companyId": "oh_my_stats" - }, - "ohana_advertising_network": { - "name": "Ohana Advertising Network", - "categoryId": 4, - "url": "http://adohana.com/", - "companyId": "ohana_advertising_network" - }, - "olapic": { - "name": "Olapic", - "categoryId": 4, - "url": "https://www.olapic.com/", - "companyId": "olapic" - }, - "olark": { - "name": "Olark", - "categoryId": 2, - "url": "http://www.olark.com/", - "companyId": "olark" - }, - "olx-st.com": { - "name": "OLX", - "categoryId": 8, - "url": "http://www.olx.com/", - "companyId": null - }, - "omarsys.com": { - "name": "Omarsys", - "categoryId": 4, - "url": "http://omarsys.com/", - "companyId": "xcaliber" - }, - "ometria": { - "name": "Ometria", - "categoryId": 4, - "url": "http://www.ometria.com/", - "companyId": "ometria" - }, - "omg": { - "name": "OMG", - "categoryId": 7, - "url": "http://uk.omgpm.com/", - "companyId": "optimise_media" - }, - "omniconvert.com": { - "name": "Omniconvert", - "categoryId": 4, - "url": "https://www.omniconvert.com/", - "companyId": "omniconvert" - }, - "omniscienta": { - "name": "Omniscienta", - "categoryId": 4, - "url": "http://www.omniscienta.com/", - "companyId": null - }, - "oms": { - "name": "OMS", - "categoryId": 4, - "url": "http://oms.eu/", - "companyId": null - }, - "onaudience": { - "name": "OnAudience", - "categoryId": 4, - "url": "http://www.onaudience.com/", - "companyId": "cloud_technologies" - }, - "oneall": { - "name": "Oneall", - "categoryId": 7, - "url": "http://www.oneall.com/", - "companyId": "oneall" - }, - "onefeed": { - "name": "Onefeed", - "categoryId": 6, - "url": "http://www.onefeed.co.uk", - "companyId": "onefeed" - }, - "onesignal": { - "name": "OneSignal", - "categoryId": 5, - "url": "https://onesignal.com/", - "companyId": "onesignal" - }, - "onestat": { - "name": "OneStat", - "categoryId": 6, - "url": "http://www.onestat.com/", - "companyId": "onestat_international_b.v." - }, - "onet.pl": { - "name": "onet", - "categoryId": 8, - "url": "https://www.onet.pl/", - "companyId": null - }, - "onetag": { - "name": "OneTag", - "categoryId": 4, - "url": "https://www.onetag.com/", - "companyId": "onetag" - }, - "onetrust": { - "name": "OneTrust", - "categoryId": 5, - "url": "https://www.onetrust.com/", - "companyId": "onetrust" - }, - "onfocus.io": { - "name": "OnFocus", - "categoryId": 4, - "url": "http://onfocus.io/", - "companyId": "onfocus" - }, - "onlinewebstat": { - "name": "Onlinewebstat", - "categoryId": 6, - "url": "http://www.onlinewebstats.com/index.php?lang=en", - "companyId": "onlinewebstat" - }, - "onswipe": { - "name": "Onswipe", - "categoryId": 4, - "url": "http://www.onswipe.com/", - "companyId": "onswipe" - }, - "onthe.io": { - "name": "OnThe.io", - "categoryId": 6, - "url": "https://t.onthe.io/media", - "companyId": "onthe.io" - }, - "ontraport_autopilot": { - "name": "Ontraport Autopilot", - "categoryId": 4, - "url": "http://www.moon-ray.com/", - "companyId": "ontraport" - }, - "ooyala.com": { - "name": "Ooyala Player", - "categoryId": 0, - "url": "https://www.ooyala.com/", - "companyId": "telstra" - }, - "ooyala_analytics": { - "name": "Ooyala Analytics", - "categoryId": 6, - "url": "https://www.telstraglobal.com/", - "companyId": "telstra" - }, - "open_adexchange": { - "name": "Open AdExchange", - "categoryId": 4, - "url": "http://openadex.dk/", - "companyId": "open_adexchange" - }, - "open_adstream": { - "name": "Open Adstream", - "categoryId": 4, - "url": "https://about.ads.microsoft.com/en-us/solutions/xandr/xandr-premium-programmatic-advertising", - "companyId": "microsoft", - "source": "AdGuard" - }, - "open_share_count": { - "name": "Open Share Count", - "categoryId": 4, - "url": "http://opensharecount.com/", - "companyId": "open_share_count" - }, - "openai": { - "name": "OpenAI", - "categoryId": 8, - "url": "https://openai.com/", - "companyId": "openai", - "source": "AdGuard" - }, - "openload": { - "name": "Openload", - "categoryId": 9, - "url": "https://openload.co/", - "companyId": null - }, - "openstat": { - "name": "OpenStat", - "categoryId": 6, - "url": "https://www.openstat.ru/", - "companyId": "openstat" - }, - "opentracker": { - "name": "Opentracker", - "categoryId": 6, - "url": "http://www.opentracker.net/", - "companyId": "opentracker" - }, - "openwebanalytics": { - "name": "Open Web Analytics", - "categoryId": 6, - "url": "http://www.openwebanalytics.com/", - "companyId": "open_web_analytics" - }, - "openx": { - "name": "OpenX", - "categoryId": 4, - "url": "https://www.openx.com", - "companyId": "openx" - }, - "operative_media": { - "name": "Operative Media", - "categoryId": 4, - "url": "http://www.operative.com/", - "companyId": "operative_media" - }, - "opinary": { - "name": "Opinary", - "categoryId": 2, - "url": "http://opinary.com/", - "companyId": "opinary" - }, - "opinionbar": { - "name": "OpinionBar", - "categoryId": 2, - "url": "http://www.metrixlab.com", - "companyId": "metrixlab" - }, - "oplytic": { - "name": "Oplytic", - "categoryId": 6, - "url": "http://www.oplytic.com", - "companyId": "oplytic" - }, - "oppo": { - "name": "OPPO", - "categoryId": 101, - "url": "https://www.oppo.com/", - "companyId": "bbk", - "source": "AdGuard" - }, - "opta.net": { - "name": "Opta", - "categoryId": 6, - "url": "http://www.optasports.de/", - "companyId": "opta_sports" - }, - "optaim": { - "name": "OptAim", - "categoryId": 4, - "url": "http://optaim.com/", - "companyId": "optaim" - }, - "optanaon": { - "name": "Optanaon by OneTrust", - "categoryId": 5, - "url": "https://www.cookielaw.org/", - "companyId": "onetrust" - }, - "optify": { - "name": "Optify", - "categoryId": 4, - "url": "http://www.optify.net", - "companyId": "optify" - }, - "optimatic": { - "name": "Optimatic", - "categoryId": 0, - "url": "http://www.optimatic.com/", - "companyId": "optimatic" - }, - "optimax_media_delivery": { - "name": "Optimax Media Delivery", - "categoryId": 4, - "url": "http://optmd.com/", - "companyId": "optimax_media_delivery" - }, - "optimicdn.com": { - "name": "OptimiCDN", - "categoryId": 9, - "url": "https://en.optimicdn.com/", - "companyId": null - }, - "optimizely": { - "name": "Optimizely", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_error_log": { - "name": "Optimizely Error Log", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_geo_targeting": { - "name": "Optimizely Geographical Targeting", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimizely_logging": { - "name": "Optimizely Logging", - "categoryId": 6, - "url": "https://www.optimizely.com/", - "companyId": "optimizely" - }, - "optimonk": { - "name": "Optimonk", - "categoryId": 6, - "url": "https://www.optimonk.com/", - "companyId": "optimonk" - }, - "optinmonster": { - "name": "OptInMonster", - "categoryId": 2, - "url": "https://optinmonster.com/", - "companyId": "optinmonster" - }, - "optinproject.com": { - "name": "OptinProject", - "categoryId": 4, - "url": "https://www.optincollect.com/en", - "companyId": "optincollect" - }, - "optomaton": { - "name": "Optomaton", - "categoryId": 4, - "url": "http://www.optomaton.com/", - "companyId": "ve" - }, - "ora.tv": { - "name": "Ora.TV", - "categoryId": 4, - "url": "http://www.ora.tv/", - "companyId": "ora.tv" - }, - "oracle_infinity": { - "name": "Oracle Infinity Behavioral Intelligence", - "categoryId": 6, - "url": "https://www.oracle.com/au/cx/marketing/digital-intelligence/", - "companyId": "oracle", - "source": "AdGuard" - }, - "oracle_live_help": { - "name": "Oracle Live Help", - "categoryId": 2, - "url": "http://www.oracle.com/us/products/applications/atg/live-help-on-demand/index.html", - "companyId": "oracle" - }, - "oracle_rightnow": { - "name": "Oracle RightNow", - "categoryId": 8, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "orange": { - "name": "Orange", - "categoryId": 4, - "url": "http://www.orange.co.uk/", - "companyId": "orange_mobile" - }, - "orange142": { - "name": "Orange142", - "categoryId": 4, - "url": "http://www.orange142.com/", - "companyId": "orange142" - }, - "orange_france": { - "name": "Orange France", - "categoryId": 8, - "url": "https://www.orange.fr/", - "companyId": "orange_france" - }, - "orangesoda": { - "name": "OrangeSoda", - "categoryId": 4, - "url": "http://www.orangesoda.com/", - "companyId": "orangesoda" - }, - "orc_international": { - "name": "ORC International", - "categoryId": 4, - "url": "https://orcinternational.com/", - "companyId": "engine_group" - }, - "order_groove": { - "name": "Order Groove", - "categoryId": 4, - "url": "http://ordergroove.com/", - "companyId": "order_groove" - }, - "orel_site": { - "name": "Orel Site", - "categoryId": 2, - "url": "https://www.orelsite.ru/", - "companyId": "orel_site" - }, - "otclick": { - "name": "otClick", - "categoryId": 4, - "url": "http://otclick-adv.ru/", - "companyId": "otclick" - }, - "othersearch.info": { - "name": "FlowSurf", - "categoryId": 8, - "url": null, - "companyId": null - }, - "otm-r.com": { - "name": "OTM", - "categoryId": 4, - "url": "http://otm-r.com/", - "companyId": null - }, - "otto.de": { - "name": "Otto Group", - "categoryId": 8, - "url": null, - "companyId": null - }, - "outbrain": { - "name": "Outbrain", - "categoryId": 4, - "url": "https://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_amplify": { - "name": "Outbrain Amplify", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_analytics": { - "name": "Outbrain Analytics", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_logger": { - "name": "Outbrain Logger", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_pixel": { - "name": "Outbrain Pixel", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_utilities": { - "name": "Outbrain Utilities", - "categoryId": 6, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outbrain_widgets": { - "name": "Outbrain Widgets", - "categoryId": 4, - "url": "http://www.outbrain.com/", - "companyId": "outbrain" - }, - "outlook": { - "name": "Microsoft Outlook", - "categoryId": 13, - "url": "https://outlook.live.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "overheat.it": { - "name": "overheat", - "categoryId": 6, - "url": "https://overheat.io/", - "companyId": null - }, - "owa": { - "name": "OWA", - "categoryId": 6, - "url": "http://oewa.at/", - "companyId": "the_austrian_web_analysis" - }, - "owneriq": { - "name": "OwnerIQ", - "categoryId": 4, - "url": "http://www.owneriq.com/", - "companyId": "owneriq" - }, - "ownpage": { - "name": "Ownpage", - "categoryId": 2, - "url": "http://www.ownpage.fr/index.en.html", - "companyId": null - }, - "owox.com": { - "name": "OWOX", - "categoryId": 6, - "url": "https://www.owox.com/", - "companyId": "owox_inc" - }, - "oxamedia": { - "name": "OxaMedia", - "categoryId": 2, - "url": "http://www.oxamedia.com/", - "companyId": "oxamedia" - }, - "oxomi.com": { - "name": "Oxomi", - "categoryId": 4, - "url": "https://oxomi.com/", - "companyId": null - }, - "oztam": { - "name": "OzTAM", - "categoryId": 8, - "url": "https://oztam.com.au/", - "companyId": "oztam", - "source": "AdGuard" - }, - "pageanalytics.space": { - "name": "pageanalytics.space", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pagefair": { - "name": "PageFair", - "categoryId": 2, - "url": "https://pagefair.com/", - "companyId": "blockthrough" - }, - "pagescience": { - "name": "PageScience", - "categoryId": 4, - "url": "http://www.precisionhealthmedia.com/index.html", - "companyId": "pagescience" - }, - "paid-to-promote": { - "name": "Paid-To-Promote", - "categoryId": 4, - "url": "http://www.paid-to-promote.net/", - "companyId": "paid-to-promote" - }, - "paperg": { - "name": "PaperG", - "categoryId": 4, - "url": "http://www.paperg.com/", - "companyId": "paperg" - }, - "pardot": { - "name": "Pardot", - "categoryId": 6, - "url": "http://www.pardot.com/", - "companyId": "pardot" - }, - "parsely": { - "name": "Parse.ly", - "categoryId": 6, - "url": "https://www.parse.ly/", - "companyId": "parse.ly" - }, - "partner-ads": { - "name": "Partner-Ads", - "categoryId": 4, - "url": "http://www.partner-ads.com/", - "companyId": "partner-ads" - }, - "passionfruit": { - "name": "Passionfruit", - "categoryId": 4, - "url": "http://passionfruitads.com/", - "companyId": "passionfruit" - }, - "pathful": { - "name": "Pathful", - "categoryId": 6, - "url": "http://www.pathful.com/", - "companyId": "pathful" - }, - "pay-hit": { - "name": "Pay-Hit", - "categoryId": 4, - "url": "http://pay-hit.com/", - "companyId": "pay-hit" - }, - "payclick": { - "name": "PayClick", - "categoryId": 4, - "url": "http://payclick.it/", - "companyId": "payclick" - }, - "paykickstart": { - "name": "PayKickstart", - "categoryId": 6, - "url": "https://paykickstart.com/", - "companyId": "paykickstart" - }, - "paypal": { - "name": "PayPal", - "categoryId": 2, - "url": "https://www.paypal.com", - "companyId": "ebay" - }, - "pcvark.com": { - "name": "pcvark.com", - "categoryId": 11, - "url": "https://pcvark.com/", - "companyId": null - }, - "peer39": { - "name": "Peer39", - "categoryId": 4, - "url": "http://www.peer39.com/", - "companyId": "peer39" - }, - "peer5.com": { - "name": "Peer5", - "categoryId": 9, - "url": "https://www.peer5.com/", - "companyId": "peer5" - }, - "peerius": { - "name": "Peerius", - "categoryId": 2, - "url": "http://www.peerius.com/", - "companyId": "peerius" - }, - "pendo.io": { - "name": "pendo", - "categoryId": 6, - "url": "https://www.pendo.io/", - "companyId": null - }, - "pepper.com": { - "name": "Pepper", - "categoryId": 4, - "url": "https://www.pepper.com/", - "companyId": "6minutes" - }, - "pepperjam": { - "name": "Pepperjam", - "categoryId": 4, - "url": "http://www.pepperjam.com", - "companyId": "pepperjam" - }, - "pepsia": { - "name": "Pepsia", - "categoryId": 6, - "url": "http://pepsia.com/en/", - "companyId": "pepsia" - }, - "perfdrive.com": { - "name": "perfdrive.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "perfect_audience": { - "name": "Perfect Audience", - "categoryId": 4, - "url": "https://www.perfectaudience.com/", - "companyId": "perfect_audience" - }, - "perfect_market": { - "name": "Perfect Market", - "categoryId": 4, - "url": "http://perfectmarket.com/", - "companyId": "perfect_market" - }, - "perfops": { - "name": "PerfOps", - "categoryId": 6, - "url": "https://perfops.net/", - "companyId": "perfops", - "source": "AdGuard" - }, - "perform_group": { - "name": "Perform Group", - "categoryId": 5, - "url": "http://www.performgroup.co.uk/", - "companyId": "perform_group" - }, - "performable": { - "name": "Performable", - "categoryId": 6, - "url": "http://www.performable.com/", - "companyId": "hubspot" - }, - "performancing_metrics": { - "name": "Performancing Metrics", - "categoryId": 6, - "url": "http://pmetrics.performancing.com", - "companyId": "performancing" - }, - "performax": { - "name": "Performax", - "categoryId": 4, - "url": "https://www.performax.cz/", - "companyId": "performax" - }, - "perimeterx.net": { - "name": "Perimeterx", - "categoryId": 6, - "url": "https://www.perimeterx.com/", - "companyId": null - }, - "permutive": { - "name": "Permutive", - "categoryId": 4, - "url": "http://permutive.com/", - "companyId": "permutive" - }, - "persgroep": { - "name": "De Persgroep", - "categoryId": 4, - "url": "https://www.persgroep.be/", - "companyId": "de_persgroep" - }, - "persianstat": { - "name": "PersianStat", - "categoryId": 6, - "url": "http://www.persianstat.com", - "companyId": "persianstat" - }, - "persio": { - "name": "Persio", - "categoryId": 4, - "url": "http://www.pers.io/", - "companyId": "pers.io" - }, - "personyze": { - "name": "Personyze", - "categoryId": 2, - "url": "http://personyze.com/", - "companyId": "personyze" - }, - "petametrics": { - "name": "LiftIgniter", - "categoryId": 2, - "url": "https://www.liftigniter.com/", - "companyId": "liftigniter" - }, - "pheedo": { - "name": "Pheedo", - "categoryId": 4, - "url": "http://pheedo.com/", - "companyId": "pheedo" - }, - "phonalytics": { - "name": "Phonalytics", - "categoryId": 2, - "url": "http://www.phonalytics.com/", - "companyId": "phonalytics" - }, - "phunware": { - "name": "Phunware", - "categoryId": 4, - "url": "https://www.phunware.com", - "companyId": "phunware" - }, - "piguiqproxy.com": { - "name": "piguiqproxy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pilot": { - "name": "Pilot", - "categoryId": 6, - "url": "http://www.pilot.de/en/home.html", - "companyId": "pilot_gmbh" - }, - "pingdom": { - "name": "Pingdom", - "categoryId": 6, - "url": "https://www.pingdom.com/", - "companyId": "pingdom" - }, - "pinterest": { - "name": "Pinterest", - "categoryId": 7, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pinterest_conversion_tracker": { - "name": "Pinterest Conversion Tracker", - "categoryId": 6, - "url": "http://pinterest.com/", - "companyId": "pinterest" - }, - "pipz": { - "name": "Pipz", - "categoryId": 4, - "url": "https://pipz.com/br/", - "companyId": "pipz_automation" - }, - "piwik": { - "name": "Tombstone (Matomo/Piwik before the split)", - "categoryId": 6, - "url": "http://piwik.org/", - "companyId": "matomo" - }, - "piwik_pro_analytics_suite": { - "name": "Piwik PRO Analytics Suite", - "categoryId": 6, - "url": "https://piwik.pro/", - "companyId": "piwik_pro" - }, - "pixalate": { - "name": "Pixalate", - "categoryId": 4, - "url": "http://www.pixalate.com/", - "companyId": "pixalate" - }, - "pixel_union": { - "name": "Pixel Union", - "categoryId": 4, - "url": "https://www.pixelunion.net/", - "companyId": "pixel_union" - }, - "pixfuture": { - "name": "PixFuture", - "categoryId": 4, - "url": "http://www.pixfuture.com", - "companyId": "pixfuture" - }, - "piximedia": { - "name": "Piximedia", - "categoryId": 4, - "url": "http://www.piximedia.com/piximedia?en", - "companyId": "piximedia" - }, - "pizzaandads_com": { - "name": "pizzaandads.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "placester": { - "name": "Placester", - "categoryId": 4, - "url": "https://placester.com/", - "companyId": "placester" - }, - "pladform.ru": { - "name": "Pladform", - "categoryId": 4, - "url": "https://distribution.pladform.ru/", - "companyId": "pladform" - }, - "plan.net_experience_cloud": { - "name": "Plan.net Experience Cloud", - "categoryId": 6, - "url": "https://www.serviceplan.com/", - "companyId": "serviceplan" - }, - "platform360": { - "name": "Platform360", - "categoryId": 4, - "url": "http://www.platform360.co/#home", - "companyId": null - }, - "platformone": { - "name": "Platform One", - "categoryId": 4, - "url": "https://www.platform-one.co.jp/", - "companyId": "daconsortium" - }, - "play_by_mamba": { - "name": "Play by Mamba", - "categoryId": 4, - "url": "http://play.mamba.ru/", - "companyId": "mamba" - }, - "playbuzz.com": { - "name": "Playbuzz", - "categoryId": 2, - "url": "https://www.playbuzz.com/", - "companyId": "playbuzz" - }, - "plenty_of_fish": { - "name": "Plenty Of Fish", - "categoryId": 6, - "url": "http://www.pof.com/", - "companyId": "plentyoffish" - }, - "plex": { - "name": "Plex", - "categoryId": 0, - "url": "https://www.plex.tv/", - "companyId": "plex", - "source": "AdGuard" - }, - "plex_metrics": { - "name": "Plex Metrics", - "categoryId": 6, - "url": "https://www.plex.tv/", - "companyId": "plex" - }, - "plista": { - "name": "Plista", - "categoryId": 4, - "url": "http://www.plista.com", - "companyId": "plista" - }, - "plugrush": { - "name": "PlugRush", - "categoryId": 4, - "url": "http://www.plugrush.com/", - "companyId": "plugrush" - }, - "pluso.ru": { - "name": "Pluso", - "categoryId": 7, - "url": "https://share.pluso.ru/", - "companyId": "pluso" - }, - "plutusads": { - "name": "Plutusads", - "categoryId": 4, - "url": "http://plutusads.com", - "companyId": "plutusads" - }, - "pmddby.com": { - "name": "pmddby.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "pnamic.com": { - "name": "pnamic.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "po.st": { - "name": "Po.st", - "categoryId": 7, - "url": "https://www.po.st/", - "companyId": "rythmone" - }, - "pocket": { - "name": "Pocket", - "categoryId": 6, - "url": "http://getpocket.com/", - "companyId": "pocket" - }, - "pocketcents": { - "name": "PocketCents", - "categoryId": 4, - "url": "http://pocketcents.com/", - "companyId": "pocketcents" - }, - "pointific": { - "name": "Pointific", - "categoryId": 6, - "url": "http://www.pontiflex.com/", - "companyId": "pontiflex" - }, - "pointroll": { - "name": "PointRoll", - "categoryId": 4, - "url": "http://www.pointroll.com/", - "companyId": "gannett_digital_media_network" - }, - "poirreleast.club": { - "name": "poirreleast.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "polar.me": { - "name": "Polar", - "categoryId": 4, - "url": "https://polar.me/", - "companyId": "polar_inc" - }, - "polldaddy": { - "name": "Polldaddy", - "categoryId": 2, - "url": "http://polldaddy.com/", - "companyId": "automattic" - }, - "polyad": { - "name": "PolyAd", - "categoryId": 4, - "url": "http://polyad.net", - "companyId": "polyad" - }, - "polyfill.io": { - "name": "Polyfill", - "categoryId": 8, - "url": "https://polyfill.io/", - "companyId": "polyfill.io" - }, - "popads": { - "name": "PopAds", - "categoryId": 4, - "url": "https://www.popads.net/", - "companyId": "popads" - }, - "popcash": { - "name": "Popcash", - "categoryId": 4, - "url": "http://popcash.net/", - "companyId": "popcash_network" - }, - "popcorn_metrics": { - "name": "Popcorn Metrics", - "categoryId": 6, - "url": "https://www.popcornmetrics.com/", - "companyId": "popcorn_metrics" - }, - "popin.cc": { - "name": "popIn", - "categoryId": 7, - "url": "https://www.popin.cc/", - "companyId": "popin" - }, - "popmyads": { - "name": "PopMyAds", - "categoryId": 4, - "url": "http://popmyads.com/", - "companyId": "popmyads" - }, - "poponclick": { - "name": "PopOnClick", - "categoryId": 4, - "url": "http://poponclick.com", - "companyId": "poponclick" - }, - "populis": { - "name": "Populis", - "categoryId": 4, - "url": "http://www.populis.com", - "companyId": "populis" - }, - "pornhub": { - "name": "PornHub", - "categoryId": 3, - "url": "https://www.pornhub.com/", - "companyId": "pornhub" - }, - "pornwave": { - "name": "Pornwave", - "categoryId": 3, - "url": "http://pornwave.com", - "companyId": "pornwave.com" - }, - "porta_brazil": { - "name": "Porta Brazil", - "categoryId": 4, - "url": "http://brasil.gov.br/", - "companyId": "portal_brazil" - }, - "post_affiliate_pro": { - "name": "Post Affiliate Pro", - "categoryId": 4, - "url": "http://www.qualityunit.com/", - "companyId": "qualityunit" - }, - "powerlinks": { - "name": "PowerLinks", - "categoryId": 4, - "url": "http://www.powerlinks.com/", - "companyId": "powerlinks" - }, - "powerreviews": { - "name": "PowerReviews", - "categoryId": 2, - "url": "http://www.powerreviews.com/", - "companyId": "powerreviews" - }, - "powr.io": { - "name": "POWr", - "categoryId": 6, - "url": "https://www.powr.io/", - "companyId": "powr" - }, - "pozvonim": { - "name": "Pozvonim", - "categoryId": 4, - "url": "https://pozvonim.com/", - "companyId": "pozvonim" - }, - "prebid": { - "name": "Prebid", - "categoryId": 4, - "url": "http://prebid.org/", - "companyId": null - }, - "precisionclick": { - "name": "PrecisionClick", - "categoryId": 4, - "url": "http://www.precisionclick.com/", - "companyId": "precisionclick" - }, - "predicta": { - "name": "Predicta", - "categoryId": 4, - "url": "http://predicta.com.br/", - "companyId": "predicta" - }, - "premonix": { - "name": "Premonix", - "categoryId": 4, - "url": "http://www.premonix.com/", - "companyId": "premonix" - }, - "press": { - "name": "Press+", - "categoryId": 4, - "url": "http://www.mypressplus.com/", - "companyId": "press+" - }, - "pressly": { - "name": "Pressly", - "categoryId": 4, - "url": "https://www.pressly.com/", - "companyId": "pressly" - }, - "pricegrabber": { - "name": "PriceGrabber", - "categoryId": 4, - "url": "http://www.pricegrabber.com", - "companyId": "pricegrabber" - }, - "pricespider": { - "name": "Pricespider", - "categoryId": 4, - "url": "http://www.pricespider.com/", - "companyId": "price_spider" - }, - "prismamediadigital.com": { - "name": "Prisma Media Digital", - "categoryId": 4, - "url": "http://www.pmdrecrute.com/", - "companyId": "prisma_media_digital" - }, - "privy.com": { - "name": "Privy", - "categoryId": 2, - "url": "https://privy.com/", - "companyId": "privy" - }, - "proclivity": { - "name": "Proclivity", - "categoryId": 4, - "url": "http://www.proclivitysystems.com/", - "companyId": "proclivity_media" - }, - "prodperfect": { - "name": "ProdPerfect", - "categoryId": 6, - "url": "https://prodperfect.com/", - "companyId": "prodperfect" - }, - "productsup": { - "name": "ProductsUp", - "categoryId": 4, - "url": "https://productsup.io/", - "companyId": "productsup" - }, - "profiliad": { - "name": "Profiliad", - "categoryId": 6, - "url": "http://profiliad.com/", - "companyId": "profiliad" - }, - "profitshare": { - "name": "Profitshare", - "categoryId": 6, - "url": "https://profitshare.ro/", - "companyId": "profitshare" - }, - "proformics": { - "name": "Proformics", - "categoryId": 6, - "url": "http://proformics.com/", - "companyId": "proformics_digital" - }, - "programattik": { - "name": "Programattik", - "categoryId": 4, - "url": "http://www.programattik.com/", - "companyId": "ttnet" - }, - "project_wonderful": { - "name": "Project Wonderful", - "categoryId": 4, - "url": "http://www.projectwonderful.com/", - "companyId": "project_wonderful" - }, - "propel_marketing": { - "name": "Propel Marketing", - "categoryId": 4, - "url": "http://propelmarketing.com/", - "companyId": "propel_marketing" - }, - "propeller_ads": { - "name": "Propeller Ads", - "categoryId": 4, - "url": "http://www.propellerads.com/", - "companyId": "propeller_ads" - }, - "propermedia": { - "name": "Proper Media", - "categoryId": 4, - "url": "https://proper.io/", - "companyId": "propermedia" - }, - "props": { - "name": "Props", - "categoryId": 4, - "url": "http://props.id/", - "companyId": "props" - }, - "propvideo_net": { - "name": "propvideo.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "prospecteye": { - "name": "ProspectEye", - "categoryId": 4, - "url": "https://www.prospecteye.com/", - "companyId": "prospecteye" - }, - "prosperent": { - "name": "Prosperent", - "categoryId": 4, - "url": "http://prosperent.com", - "companyId": "prosperent" - }, - "prostor": { - "name": "Prostor", - "categoryId": 4, - "url": "http://prostor-lite.ru/", - "companyId": "prostor" - }, - "proton_ag": { - "name": "Proton AG", - "categoryId": 2, - "url": "https://proton.me/", - "companyId": "proton_foundation", - "source": "AdGuard" - }, - "provide_support": { - "name": "Provide Support", - "categoryId": 2, - "url": "http://www.providesupport.com/", - "companyId": "provide_support" - }, - "proximic": { - "name": "Proximic", - "categoryId": 4, - "url": "http://www.proximic.com/", - "companyId": "proximic" - }, - "proxistore.com": { - "name": "Proxistore", - "categoryId": 4, - "url": "https://www.proxistore.com/", - "companyId": "proxistore" - }, - "pscp.tv": { - "name": "Periscope", - "categoryId": 7, - "url": "https://www.pscp.tv/", - "companyId": "periscope" - }, - "pstatic.net": { - "name": "Naver CDN", - "categoryId": 9, - "url": "https://www.naver.com/", - "companyId": "naver" - }, - "psyma": { - "name": "Psyma", - "categoryId": 4, - "url": "http://www.psyma.com/", - "companyId": "psyma" - }, - "pt_engine": { - "name": "Pt engine", - "categoryId": 6, - "url": "http://www.ptengine.jp/", - "companyId": "pt_engine" - }, - "pub-fit": { - "name": "Pub-Fit", - "categoryId": 4, - "url": "http://www.pub-fit.com/", - "companyId": "pub-fit" - }, - "pub.network": { - "name": "pub.network", - "categoryId": 4, - "url": null, - "companyId": null - }, - "pubble": { - "name": "Pubble", - "categoryId": 2, - "url": "http://www.pubble.co/", - "companyId": "pubble" - }, - "pubdirecte": { - "name": "Pubdirecte", - "categoryId": 4, - "url": "http://www.pubdirecte.com/", - "companyId": "pubdirecte" - }, - "pubgears": { - "name": "PubGears", - "categoryId": 4, - "url": "http://pubgears.com/", - "companyId": "pubgears" - }, - "public_ideas": { - "name": "Public Ideas", - "categoryId": 4, - "url": "http://www.publicidees.co.uk/", - "companyId": "public-idees" - }, - "publicidad.net": { - "name": "Publicidad.net", - "categoryId": 4, - "url": "http://www.en.publicidad.net/", - "companyId": "publicidad.net" - }, - "publir": { - "name": "Publir", - "categoryId": 4, - "url": "http://www.publir.com", - "companyId": "publir" - }, - "pubmatic": { - "name": "PubMatic", - "categoryId": 4, - "url": "http://www.pubmatic.com/", - "companyId": "pubmatic" - }, - "pubnub.com": { - "name": "PubNub", - "categoryId": 8, - "url": "https://www.pubnub.com/", - "companyId": null - }, - "puboclic": { - "name": "Puboclic", - "categoryId": 4, - "url": "http://www.puboclic.com/", - "companyId": "puboclic" - }, - "pulpix.com": { - "name": "Pulpix", - "categoryId": 4, - "url": "https://www.pulpix.com/", - "companyId": "adyoulike" - }, - "pulpo_media": { - "name": "Pulpo Media", - "categoryId": 4, - "url": "http://www.pulpomedia.com/home.html", - "companyId": "pulpo_media" - }, - "pulse360": { - "name": "Pulse360", - "categoryId": 4, - "url": "http://www.pulse360.com", - "companyId": "pulse360" - }, - "pulse_insights": { - "name": "Pulse Insights", - "categoryId": 6, - "url": "http://pulseinsights.com/", - "companyId": "pulse_insights" - }, - "pulsepoint": { - "name": "PulsePoint", - "categoryId": 4, - "url": "http://www.contextweb.com/", - "companyId": "pulsepoint_ad_exchange" - }, - "punchtab": { - "name": "PunchTab", - "categoryId": 4, - "url": "http://www.punchtab.com/", - "companyId": "punchtab" - }, - "purch": { - "name": "Purch", - "categoryId": 4, - "url": "http://www.purch.com/", - "companyId": "purch" - }, - "pure_chat": { - "name": "Pure Chat", - "categoryId": 2, - "url": "https://www.purechat.com", - "companyId": "pure_chat" - }, - "pureprofile": { - "name": "Pureprofile", - "categoryId": 6, - "url": "https://www.pureprofile.com/us/", - "companyId": "pureprofile" - }, - "purlive": { - "name": "PurLive", - "categoryId": 4, - "url": "http://www.purlive.com/", - "companyId": "purlive" - }, - "puserving.com": { - "name": "puserving.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "push.world": { - "name": "Push.world", - "categoryId": 2, - "url": "https://push.world/en", - "companyId": "push.world" - }, - "push_engage": { - "name": "Push Engage", - "categoryId": 2, - "url": "https://www.pushengage.com/", - "companyId": "push_engage" - }, - "pushame.com": { - "name": "pushame.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushbullet": { - "name": "Pushbullet", - "categoryId": 2, - "url": "https://www.pushbullet.com/", - "companyId": "pushbullet" - }, - "pushcrew": { - "name": "VWO Engage", - "categoryId": 2, - "url": "https://vwo.com/engage/", - "companyId": "wingify" - }, - "pusher.com": { - "name": "Pusher", - "categoryId": 6, - "url": "https://pusher.com/", - "companyId": null - }, - "pushnative.com": { - "name": "pushnative.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushnews": { - "name": "Pushnews", - "categoryId": 4, - "url": "https://www.pushnews.eu/", - "companyId": "pushnews" - }, - "pushno.com": { - "name": "pushno.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwhy.com": { - "name": "pushwhy.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "pushwoosh.com": { - "name": "Pushwoosh", - "categoryId": 2, - "url": "https://www.pushwoosh.com/", - "companyId": "pushwoosh" - }, - "pvclouds.com": { - "name": "pvclouds.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "q1media": { - "name": "Q1Media", - "categoryId": 4, - "url": "http://q1media.com/", - "companyId": "q1media" - }, - "q_division": { - "name": "Q-Division", - "categoryId": 4, - "url": "https://q-division.de/", - "companyId": null - }, - "qbaka": { - "name": "Qbaka", - "categoryId": 6, - "url": "https://qbaka.com/", - "companyId": "qbaka" - }, - "qcri_analytics": { - "name": "QCRI Analytics", - "categoryId": 6, - "url": "http://qcri.org/", - "companyId": "qatar_computing_research_institute" - }, - "qeado": { - "name": "Qeado", - "categoryId": 6, - "url": "https://www.qeado.com/", - "companyId": "qeado" - }, - "qihoo_360": { - "name": "Qihoo 360", - "categoryId": 6, - "url": "https://www.360totalsecurity.com/en/", - "companyId": "qihoo_360_technology" - }, - "qq.com": { - "name": "QQ International", - "categoryId": 2, - "url": "https://www.qq.com/", - "companyId": "tencent", - "source": "AdGuard" - }, - "qrius": { - "name": "Qrius", - "categoryId": 7, - "url": "http://www.qrius.me/", - "companyId": "mediafed" - }, - "qualaroo": { - "name": "Qualaroo", - "categoryId": 6, - "url": null, - "companyId": null - }, - "qualcomm": { - "name": "Qualcomm", - "categoryId": 8, - "url": "https://www.qualcomm.com/", - "companyId": "qualcomm", - "source": "AdGuard" - }, - "qualcomm_location_service": { - "name": "Qualcomm Location Service", - "categoryId": 15, - "url": "https://www.qualcomm.com/site/privacy/services", - "companyId": "qualcomm", - "source": "AdGuard" - }, - "qualia": { - "name": "Qualia", - "categoryId": 4, - "url": "http://www.bluecava.com/", - "companyId": "qualia" - }, - "qualtrics": { - "name": "Qualtrics", - "categoryId": 6, - "url": "http://www.qualtrics.com/", - "companyId": "qualtrics" - }, - "quantcast": { - "name": "Quantcast", - "categoryId": 4, - "url": "http://www.quantcast.com/", - "companyId": "quantcast" - }, - "quantcount": { - "name": "Quantcount", - "categoryId": 6, - "url": "http://www.quantcast.com", - "companyId": "quantcast" - }, - "quantum_metric": { - "name": "Quantum Metric", - "categoryId": 6, - "url": "https://www.quantummetric.com/", - "companyId": "quantum_metric" - }, - "quartic.pl": { - "name": "Quartic", - "categoryId": 6, - "url": "https://www.quarticon.com/", - "companyId": "quarticon" - }, - "qubit": { - "name": "Qubit Opentag", - "categoryId": 6, - "url": "http://www.qubit.com/", - "companyId": "qubit" - }, - "questback": { - "name": "Questback", - "categoryId": 2, - "url": "http://www1.questback.com/", - "companyId": "questback" - }, - "queue-it": { - "name": "Queue-it", - "categoryId": 6, - "url": "https://queue-it.com/", - "companyId": null - }, - "quick-counter.net": { - "name": "Quick-counter.net", - "categoryId": 6, - "url": "http://www.quick-counter.net/", - "companyId": "quick-counter.net" - }, - "quigo_adsonar": { - "name": "Quigo AdSonar", - "categoryId": 4, - "url": "http://www.quigo.com", - "companyId": "verizon" - }, - "quinstreet": { - "name": "QuinStreet", - "categoryId": 4, - "url": "http://www.quinstreet.com/", - "companyId": "quinstreet" - }, - "quintelligence": { - "name": "Quintelligence", - "categoryId": 6, - "url": "http://www.quintelligence.com/", - "companyId": "quintelligence" - }, - "quisma": { - "name": "Quisma", - "categoryId": 4, - "url": "http://www.quisma.com/en/", - "companyId": "wpp" - }, - "quora.com": { - "name": "Quora", - "categoryId": 7, - "url": "https://quora.com/", - "companyId": null - }, - "r_advertising": { - "name": "R-Advertising", - "categoryId": 4, - "url": "http://www.r-advertising.com/", - "companyId": "r-advertising" - }, - "rackcdn.com": { - "name": "Rackspace", - "categoryId": 9, - "url": "https://www.rackspace.com/", - "companyId": null - }, - "radarurl": { - "name": "RadarURL", - "categoryId": 6, - "url": "http://radarurl.com/", - "companyId": "radarurl" - }, - "radial": { - "name": "Radial", - "categoryId": 4, - "url": "http://www.clearsaleing.com/", - "companyId": "radial" - }, - "radiumone": { - "name": "RadiumOne", - "categoryId": 4, - "url": "http://www.radiumone.com/index.html", - "companyId": "rythmone" - }, - "raisenow": { - "name": "RaiseNow", - "categoryId": 6, - "url": "https://www.raisenow.com/de", - "companyId": "raisenow" - }, - "rakuten_display": { - "name": "Rakuten Display", - "categoryId": 4, - "url": "https://rakutenmarketing.com/display", - "companyId": "rakuten" - }, - "rakuten_globalmarket": { - "name": "Rakuten", - "categoryId": 4, - "url": "https://www.rakuten.co.jp/", - "companyId": "rakuten" - }, - "rakuten_widget": { - "name": "Rakuten Widget", - "categoryId": 4, - "url": "http://global.rakuten.com/corp/", - "companyId": "rakuten" - }, - "rambler": { - "name": "Rambler", - "categoryId": 6, - "url": "https://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_count": { - "name": "Rambler Count", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rambler_widget": { - "name": "Rambler Widget", - "categoryId": 2, - "url": "http://www.rambler.ru/", - "companyId": "rambler" - }, - "rapidspike": { - "name": "RapidSpike", - "categoryId": 6, - "url": "https://www.rapidspike.com", - "companyId": "rapidspike" - }, - "ravelin": { - "name": "Ravelin", - "categoryId": 6, - "url": "https://www.ravelin.com/", - "companyId": null - }, - "rawgit": { - "name": "RawGit", - "categoryId": 9, - "url": "http://rawgit.com/", - "companyId": null - }, - "raygun": { - "name": "Raygun", - "categoryId": 4, - "url": "https://raygun.com/", - "companyId": "raygun" - }, - "rbc_counter": { - "name": "RBC Counter", - "categoryId": 6, - "url": "http://www.rbc.ru/", - "companyId": "rbc_group" - }, - "rcs.it": { - "name": "RCS", - "categoryId": 4, - "url": "http://www.rcsmediagroup.it/", - "companyId": "rcs" - }, - "rd_station": { - "name": "RD Station", - "categoryId": 6, - "url": "http://www.rdstation.com/en/", - "companyId": "rd_station" - }, - "rea_group": { - "name": "REA Group Ltd.", - "categoryId": 4, - "url": "https://www.rea-group.com/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "reachforce": { - "name": "ReachForce", - "categoryId": 6, - "url": "http://www.reachforce.com/", - "companyId": "reachforce" - }, - "reachjunction": { - "name": "ReachJunction", - "categoryId": 4, - "url": "http://www.reachjunction.com/", - "companyId": "reachjunction" - }, - "reachlocal": { - "name": "ReachLocal", - "categoryId": 4, - "url": "http://www.reachlocal.com/", - "companyId": "reachlocal" - }, - "reactful": { - "name": "Reactful", - "categoryId": 4, - "url": "http://www.reactful.com/", - "companyId": "reactful" - }, - "reactivpub": { - "name": "Reactivpub", - "categoryId": 6, - "url": "http://www.reactivpub.com/", - "companyId": "r-advertising" - }, - "reactx": { - "name": "ReactX", - "categoryId": 4, - "url": "http://home.skinected.com", - "companyId": "reactx" - }, - "readerboard": { - "name": "ReaderBoard", - "categoryId": 7, - "url": "http://www.readrboard.com", - "companyId": "centre_phi" - }, - "readme": { - "name": "ReadMe", - "categoryId": 6, - "url": "https://readme.com/", - "companyId": "readme" - }, - "readspeaker.com": { - "name": "ReadSpeaker", - "categoryId": 2, - "url": "https://www.readspeaker.com/", - "companyId": null - }, - "realclick": { - "name": "RealClick", - "categoryId": 4, - "url": "http://www.realclick.co.kr/", - "companyId": "realclick" - }, - "realestate.com.au": { - "name": "realestate.com.au Pty Limited", - "categoryId": 4, - "url": "https://www.realestate.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "realperson.de": { - "name": "Realperson Chat", - "categoryId": 2, - "url": "http://www.optimise-it.de/", - "companyId": "optimise_it" - }, - "realtime": { - "name": "Realtime", - "categoryId": 2, - "url": "http://www.realtime.co/", - "companyId": "realtime" - }, - "realytics": { - "name": "Realytics", - "categoryId": 6, - "url": "https://www.realytics.io/", - "companyId": "realytics" - }, - "rebel_mouse": { - "name": "Rebel Mouse", - "categoryId": 6, - "url": "https://www.rebelmouse.com/", - "companyId": "rebelmouse" - }, - "recaptcha": { - "name": "reCAPTCHA", - "categoryId": 8, - "url": "https://www.google.com/recaptcha/about/", - "companyId": "google", - "source": "AdGuard" - }, - "recettes.net": { - "name": "Recettes.net", - "categoryId": 8, - "url": "http://www.recettes.net/", - "companyId": "recettes.net" - }, - "recopick": { - "name": "RecoPick", - "categoryId": 4, - "url": "https://recopick.com/", - "companyId": "recopick" - }, - "recreativ": { - "name": "Recreativ", - "categoryId": 4, - "url": "http://recreativ.ru/", - "companyId": "recreativ" - }, - "recruitics": { - "name": "Recruitics", - "categoryId": 6, - "url": "http://recruitics.com/", - "companyId": "recruitics" - }, - "red_ventures": { - "name": "Red Ventures", - "categoryId": 6, - "url": "https://www.redventures.com/", - "companyId": "red_ventures" - }, - "redblue_de": { - "name": "redblue", - "categoryId": 6, - "url": "https://www.redblue.de/", - "companyId": null - }, - "redcdn.pl": { - "name": "redGalaxy CDN", - "categoryId": 9, - "url": "http://www.atendesoftware.pl/", - "companyId": "atende_software" - }, - "reddit": { - "name": "Reddit", - "categoryId": 7, - "url": "https://www.reddit.com", - "companyId": "advance", - "source": "AdGuard" - }, - "redhelper": { - "name": "RedHelper", - "categoryId": 2, - "url": "http://redhelper.com/", - "companyId": "redhelper" - }, - "redlotus": { - "name": "RedLotus", - "categoryId": 4, - "url": "http://triggit.com/", - "companyId": "redlotus" - }, - "redtram": { - "name": "RedTram", - "categoryId": 4, - "url": "http://www.redtram.com/", - "companyId": "redtram" - }, - "redtube.com": { - "name": "redtube.com", - "categoryId": 9, - "url": null, - "companyId": null - }, - "redux_media": { - "name": "Redux Media", - "categoryId": 4, - "url": "http://reduxmedia.com/", - "companyId": "redux_media" - }, - "reed_business_information": { - "name": "Reed Business Information", - "categoryId": 6, - "url": "http://www.reedbusiness.com/", - "companyId": "andera_partners" - }, - "reembed.com": { - "name": "reEmbed", - "categoryId": 0, - "url": "https://www.reembed.com/", - "companyId": "reembed" - }, - "reevoo.com": { - "name": "Reevoo", - "categoryId": 4, - "url": "https://www.reevoo.com/en/", - "companyId": "reevoo" - }, - "refericon": { - "name": "Refericon", - "categoryId": 4, - "url": "https://refericon.pl/#", - "companyId": "refericon" - }, - "referlocal": { - "name": "ReferLocal", - "categoryId": 4, - "url": "http://referlocal.com/", - "companyId": "referlocal" - }, - "refersion": { - "name": "Refersion", - "categoryId": 4, - "url": "https://www.refersion.com/", - "companyId": "refersion" - }, - "refined_labs": { - "name": "Refined Labs", - "categoryId": 4, - "url": "http://www.refinedlabs.com", - "companyId": "refined_labs" - }, - "reflektion": { - "name": "Reflektion", - "categoryId": 4, - "url": "http://", - "companyId": "reflektion" - }, - "reformal": { - "name": "Reformal", - "categoryId": 2, - "url": "http://reformal.ru/", - "companyId": "reformal" - }, - "reinvigorate": { - "name": "Reinvigorate", - "categoryId": 6, - "url": "http://www.reinvigorate.net/", - "companyId": "media_temple" - }, - "rekko": { - "name": "Rekko", - "categoryId": 4, - "url": "http://convert.us/", - "companyId": "rekko" - }, - "reklam_store": { - "name": "Reklam Store", - "categoryId": 4, - "url": "http://www.reklamstore.com", - "companyId": "reklam_store" - }, - "reklamport": { - "name": "Reklamport", - "categoryId": 4, - "url": "http://www.reklamport.com/", - "companyId": "reklamport" - }, - "reklamz": { - "name": "ReklamZ", - "categoryId": 4, - "url": "http://www.reklamz.com/", - "companyId": "reklamz" - }, - "rekmob": { - "name": "Rekmob", - "categoryId": 4, - "url": "https://www.rekmob.com/", - "companyId": "rekmob" - }, - "relap": { - "name": "Relap", - "categoryId": 4, - "url": "https://relap.io/", - "companyId": "relap" - }, - "relay42": { - "name": "Relay42", - "categoryId": 5, - "url": "http://synovite.com", - "companyId": "relay42" - }, - "relestar": { - "name": "Relestar", - "categoryId": 6, - "url": "https://relestar.com/", - "companyId": "relestar" - }, - "relevant4.com": { - "name": "relevant4 GmbH", - "categoryId": 8, - "url": "https://www.relevant4.com/", - "companyId": null - }, - "remintrex": { - "name": "Remintrex", - "categoryId": 4, - "url": "http://www.remintrex.com/", - "companyId": null - }, - "remove.video": { - "name": "remove.video", - "categoryId": 12, - "url": null, - "companyId": null - }, - "repost.us": { - "name": "Repost.us", - "categoryId": 4, - "url": "http://www.freerangecontent.com/", - "companyId": "repost" - }, - "republer.com": { - "name": "Republer", - "categoryId": 4, - "url": "http://republer.com/", - "companyId": "republer" - }, - "res-meter": { - "name": "Res-meter", - "categoryId": 6, - "url": "http://respublica.al/res-meter", - "companyId": "respublica" - }, - "research_now": { - "name": "Research Now", - "categoryId": 4, - "url": "http://www.researchnow.com/", - "companyId": "research_now" - }, - "resonate_networks": { - "name": "Resonate Networks", - "categoryId": 4, - "url": "http://www.resonatenetworks.com/", - "companyId": "resonate" - }, - "respond": { - "name": "Respond", - "categoryId": 4, - "url": "http://respondhq.com/", - "companyId": "respond" - }, - "responsetap": { - "name": "ResponseTap", - "categoryId": 4, - "url": "http://www.adinsight.eu/", - "companyId": "responsetap" - }, - "result_links": { - "name": "Result Links", - "categoryId": 4, - "url": "http://www.resultlinks.com/", - "companyId": "result_links" - }, - "resultspage.com": { - "name": "SLI Systems", - "categoryId": 6, - "url": "https://www.sli-systems.com/", - "companyId": "sli_systems" - }, - "retailrocket.net": { - "name": "Retail Rocket", - "categoryId": 4, - "url": "https://retailrocket.net/", - "companyId": "retail_rocket" - }, - "retarget_app": { - "name": "Retarget App", - "categoryId": 4, - "url": "https://retargetapp.com/", - "companyId": "retargetapp" - }, - "retargeter_beacon": { - "name": "ReTargeter Beacon", - "categoryId": 4, - "url": "http://www.retargeter.com/", - "companyId": "retargeter" - }, - "retargeting.cl": { - "name": "Retargeting.cl", - "categoryId": 4, - "url": "http://retargeting.cl/", - "companyId": "retargeting" - }, - "retention_science": { - "name": "Retention Science", - "categoryId": 4, - "url": "http://retentionscience.com/", - "companyId": "retention_science" - }, - "reuters_media": { - "name": "Reuters media", - "categoryId": 9, - "url": "https://reuters.com", - "companyId": null - }, - "revcontent": { - "name": "RevContent", - "categoryId": 4, - "url": "https://www.revcontent.com/", - "companyId": "revcontent" - }, - "reve_marketing": { - "name": "Reve Marketing", - "categoryId": 4, - "url": "http://tellafriend.socialtwist.com/", - "companyId": "reve_marketing" - }, - "revenue": { - "name": "Revenue", - "categoryId": 4, - "url": "https://revenue.com/", - "companyId": "revenue" - }, - "revenuehits": { - "name": "RevenueHits", - "categoryId": 4, - "url": "http://www.revenuehits.com/", - "companyId": "revenuehits" - }, - "revenuemantra": { - "name": "RevenueMantra", - "categoryId": 4, - "url": "http://www.revenuemantra.com/", - "companyId": "revenuemantra" - }, - "revive_adserver": { - "name": "Revive Adserver", - "categoryId": 4, - "url": "https://www.revive-adserver.com/", - "companyId": "revive_adserver" - }, - "revolver_maps": { - "name": "Revolver Maps", - "categoryId": 6, - "url": "http://www.revolvermaps.com/", - "companyId": "revolver_maps" - }, - "revresponse": { - "name": "RevResponse", - "categoryId": 4, - "url": "http://www.netline.com/", - "companyId": "netline" - }, - "rewords": { - "name": "ReWords", - "categoryId": 4, - "url": "http://www.rewords.pl/", - "companyId": "rewords" - }, - "rhythmone": { - "name": "RhythmOne", - "categoryId": 4, - "url": "http://www.adconductor.com/", - "companyId": "rhythmone" - }, - "rhythmone_beacon": { - "name": "Rhythmone Beacon", - "categoryId": 4, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "ria.ru": { - "name": "ria.ru", - "categoryId": 8, - "url": "https://ria.ru/", - "companyId": null - }, - "rich_media_banner_network": { - "name": "Rich Media Banner Network", - "categoryId": 4, - "url": "http://rmbn.ru/", - "companyId": "rich_media_banner_network" - }, - "richrelevance": { - "name": "RichRelevance", - "categoryId": 2, - "url": "http://www.richrelevance.com/", - "companyId": "richrelevance" - }, - "ringier.ch": { - "name": "Ringier", - "categoryId": 6, - "url": "http://ringier.ch/en", - "companyId": "ringier" - }, - "rio_seo": { - "name": "Rio SEO", - "categoryId": 7, - "url": "http://www.meteorsolutions.com", - "companyId": "rio_seo" - }, - "riskfield.com": { - "name": "Riskified", - "categoryId": 2, - "url": "https://www.riskified.com/", - "companyId": "riskfield" - }, - "rncdn3.com": { - "name": "Reflected Networks", - "categoryId": 9, - "url": "http://www.rncdn3.com/", - "companyId": null - }, - "ro2.biz": { - "name": "Ro2.biz", - "categoryId": 4, - "url": "http://ro2.biz/index.php?r=adikku", - "companyId": "ro2.biz" - }, - "roblox": { - "name": "Roblox", - "categoryId": 8, - "url": "https://www.roblox.com/", - "companyId": null - }, - "rockerbox": { - "name": "Rockerbox", - "categoryId": 6, - "url": "https://www.rockerbox.com/privacy", - "companyId": "rockerbox" - }, - "rocket.ia": { - "name": "Rocket.ia", - "categoryId": 4, - "url": "https://rocket.la/", - "companyId": "rocket.la" - }, - "roi_trax": { - "name": "ROI trax", - "categoryId": 4, - "url": "http://www.oneupweb.com/", - "companyId": "oneupweb" - }, - "roistat": { - "name": "Roistat", - "categoryId": 6, - "url": "https://roistat.com", - "companyId": "roistat" - }, - "rollad": { - "name": "Rollad", - "categoryId": 4, - "url": "http://rollad.ru", - "companyId": "rollad" - }, - "rollbar": { - "name": "Rollbar", - "categoryId": 6, - "url": "http://www.rollbar.com/", - "companyId": "rollbar" - }, - "roost": { - "name": "Roost", - "categoryId": 6, - "url": "http://roost.me/", - "companyId": "roost" - }, - "rooster": { - "name": "Rooster", - "categoryId": 6, - "url": "http://www.getrooster.com/", - "companyId": "rooster" - }, - "roq.ad": { - "name": "Roq.ad", - "categoryId": 4, - "url": "https://www.roq.ad/", - "companyId": "roq.ad" - }, - "rotaban": { - "name": "RotaBan", - "categoryId": 4, - "url": "http://www.rotaban.ru/", - "companyId": "rotaban" - }, - "routenplaner-karten.com": { - "name": "Routenplaner Karten", - "categoryId": 2, - "url": "https://www.routenplaner-karten.com/", - "companyId": null - }, - "rovion": { - "name": "Rovion", - "categoryId": 4, - "url": "http://www.rovion.com/", - "companyId": "rovion" - }, - "rsspump": { - "name": "RSSPump", - "categoryId": 2, - "url": "http://www.rsspump.com", - "companyId": "rsspump" - }, - "rtb_house": { - "name": "RTB House", - "categoryId": 4, - "url": "http://en.adpilot.com/", - "companyId": "rtb_house" - }, - "rtblab": { - "name": "RTBmarkt", - "categoryId": 4, - "url": "http://www.rtbmarkt.de/en/home/", - "companyId": "rtbmarkt" - }, - "rtbsuperhub.com": { - "name": "rtbsuperhub.com", - "categoryId": 4, - "url": null, - "companyId": null - }, - "rtl_group": { - "name": "RTL Group", - "categoryId": 8, - "url": "http://www.rtlgroup.com/www/htm/home.aspx", - "companyId": "rtl_group" - }, - "rtmark.net": { - "name": "Advertising Technologies Ltd", - "categoryId": 4, - "url": "http://rtmark.net/", - "companyId": "big_wall_vision" - }, - "rubicon": { - "name": "Rubicon", - "categoryId": 4, - "url": "http://rubiconproject.com/", - "companyId": "rubicon_project" - }, - "ruhrgebiet": { - "name": "Ruhrgebiet", - "categoryId": 4, - "url": "https://www.ruhrgebiet-onlineservices.de/", - "companyId": "ruhrgebiet" - }, - "rummycircle": { - "name": "RummyCircle", - "categoryId": 4, - "url": "https://www.rummycircle.com/", - "companyId": "rummycircle" - }, - "run": { - "name": "RUN", - "categoryId": 4, - "url": "http://www.rundsp.com/", - "companyId": "run" - }, - "runative": { - "name": "Runative", - "categoryId": 4, - "url": "https://runative.com/", - "companyId": null - }, - "rune": { - "name": "Rune", - "categoryId": 6, - "url": "http://www.secretrune.com/", - "companyId": "rune_inc." - }, - "runmewivel.com": { - "name": "runmewivel.com", - "categoryId": 10, - "url": null, - "companyId": null - }, - "rythmxchange": { - "name": "Rythmxchange", - "categoryId": 0, - "url": "https://www.rhythmone.com/", - "companyId": "rythmone" - }, - "s24_com": { - "name": "Shopping24 internet group", - "categoryId": 4, - "url": "https://www.s24.com/", - "companyId": null - }, - "s3xified.com": { - "name": "s3xified.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sabavision": { - "name": "SabaVision", - "categoryId": 4, - "url": "http://www.sabavision.com/en/", - "companyId": "sabavision" - }, - "sagemetrics": { - "name": "SageMetrics", - "categoryId": 4, - "url": "http://www.sagemetrics.com", - "companyId": "ipmg" - }, - "sailthru_horizon": { - "name": "Sailthru Horizon", - "categoryId": 4, - "url": "https://www.sailthru.com", - "companyId": "sailthru" - }, - "salecycle": { - "name": "SaleCycle", - "categoryId": 4, - "url": "http://www.salecycle.com/", - "companyId": "salecycle" - }, - "sales_feed": { - "name": "Sales Feed", - "categoryId": 4, - "url": "https://www.salesfeed.com/", - "companyId": "sales_feed" - }, - "sales_manago": { - "name": "SALESmanago", - "categoryId": 6, - "url": "https://www.salesmanago.com/", - "companyId": "sales_manago" - }, - "salesforce.com": { - "name": "Salesforce", - "categoryId": 4, - "url": "https://www.salesforce.com/eu/", - "companyId": "salesforce" - }, - "salesforce_live_agent": { - "name": "Salesforce Live Agent", - "categoryId": 2, - "url": "http://www.salesforce.com/", - "companyId": "salesforce" - }, - "salesfusion": { - "name": "SalesFUSION", - "categoryId": 4, - "url": "http://salesfusion.com/", - "companyId": "salesfusion" - }, - "salespider_media": { - "name": "SaleSpider Media", - "categoryId": 4, - "url": "http://salespidermedia.com/", - "companyId": "salespider_media" - }, - "salesviewer": { - "name": "SalesViewer", - "categoryId": 6, - "url": "https://www.salesviewer.com/", - "companyId": "salesviewer" - }, - "samba.tv": { - "name": "Samba TV", - "categoryId": 4, - "url": "https://samba.tv/", - "companyId": "samba_tv" - }, - "samsung": { - "name": "Samsung", - "categoryId": 8, - "url": "https://www.samsung.com/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungads": { - "name": "Samsung Ads", - "categoryId": 4, - "url": "https://www.samsung.com/business/samsungads/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungapps": { - "name": "Samsung Apps", - "categoryId": 101, - "url": "https://www.samsung.com/au/apps/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungmobile": { - "name": "Samsung Mobile", - "categoryId": 101, - "url": "https://www.samsung.com/mobile/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungpush": { - "name": "Samsung Push", - "categoryId": 8, - "url": null, - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungsds": { - "name": "Samsung SDS", - "categoryId": 10, - "url": "https://www.samsungsds.com/", - "companyId": "samsung", - "source": "AdGuard" - }, - "samsungtv": { - "name": "Samsung TV", - "categoryId": 15, - "url": "https://www.samsung.com/au/tvs/", - "companyId": "samsung", - "source": "AdGuard" - }, - "sanoma.fi": { - "name": "Sanoma", - "categoryId": 4, - "url": "https://sanoma.com/", - "companyId": "sanoma" - }, - "sap_crm": { - "name": "SAP CRM", - "categoryId": 6, - "url": "https://www.sap.com/products/crm.html", - "companyId": "sap" - }, - "sap_sales_cloud": { - "name": "SAP Sales Cloud", - "categoryId": 2, - "url": "http://leadforce1.com/", - "companyId": "sap" - }, - "sap_xm": { - "name": "SAP Exchange Media", - "categoryId": 4, - "url": "http://sapexchange.media/", - "companyId": null - }, - "sape.ru": { - "name": "Sape", - "categoryId": 6, - "url": "https://www.sape.ru/en", - "companyId": "sape" - }, - "sapo_ads": { - "name": "SAPO Ads", - "categoryId": 4, - "url": "http://www.sapo.pt/", - "companyId": "sapo" - }, - "sas": { - "name": "SAS", - "categoryId": 6, - "url": "http://www.sas.com/", - "companyId": "sas" - }, - "say.ac": { - "name": "Say.ac", - "categoryId": 4, - "url": "http://say.ac", - "companyId": "say.ac" - }, - "say_media": { - "name": "Say Media", - "categoryId": 4, - "url": "http://www.saymedia.com/", - "companyId": "say_media" - }, - "sayyac": { - "name": "Sayyac", - "categoryId": 6, - "url": "http://www.sayyac.com/", - "companyId": "sayyac" - }, - "scarabresearch": { - "name": "Scarab Research", - "categoryId": 4, - "url": "https://www.scarabresearch.com/", - "companyId": "emarsys" - }, - "schibsted": { - "name": "Schibsted Media Group", - "categoryId": 8, - "url": "http://www.schibsted.com/", - "companyId": "schibsted_asa" - }, - "schneevonmorgen.com": { - "name": "Schnee von Morgen", - "categoryId": 0, - "url": "http://www.schneevonmorgen.com/", - "companyId": null - }, - "scoota": { - "name": "Scoota", - "categoryId": 4, - "url": "http://scoota.com/", - "companyId": "rockabox" - }, - "scorecard_research_beacon": { - "name": "ScoreCard Research Beacon", - "categoryId": 6, - "url": "https://www.scorecardresearch.com/", - "companyId": "comscore" - }, - "scout_analytics": { - "name": "Scout Analytics", - "categoryId": 4, - "url": "http://scoutanalytics.com/", - "companyId": "scout_analytics" - }, - "scribblelive": { - "name": "ScribbleLive", - "categoryId": 8, - "url": null, - "companyId": null - }, - "scribol": { - "name": "Scribol", - "categoryId": 4, - "url": "http://scribol.com/", - "companyId": "scribol" - }, - "scripps_analytics": { - "name": "Scripps Analytics", - "categoryId": 6, - "url": "http://www.scrippsnetworksinteractive.com/", - "companyId": "scripps_networks" - }, - "scroll": { - "name": "Scroll", - "categoryId": 5, - "url": "https://scroll.com/", - "companyId": "scroll" - }, - "scupio": { - "name": "Scupio", - "categoryId": 4, - "url": "http://ad.scupio.com/", - "companyId": "bridgewell" - }, - "search123": { - "name": "Search123", - "categoryId": 4, - "url": "http://www.search123.com/", - "companyId": "search123" - }, - "searchforce": { - "name": "SearchForce", - "categoryId": 4, - "url": "http://www.searchforce.com/", - "companyId": "searchforce" - }, - "searchignite": { - "name": "SearchIgnite", - "categoryId": 4, - "url": "https://searchignite.com/", - "companyId": "zeta" - }, - "searchrev": { - "name": "SearchRev", - "categoryId": 4, - "url": "http://www.searchrev.com/", - "companyId": "searchrev" - }, - "second_media": { - "name": "Second Media", - "categoryId": 4, - "url": "http://www.secondmedia.com/", - "companyId": "second_media" - }, - "sectigo": { - "name": "Sectigo Limited", - "categoryId": 5, - "url": "https://www.sectigo.com", - "companyId": "sectigo", - "source": "AdGuard" - }, - "securedtouch": { - "name": "SecuredTouch", - "categoryId": 6, - "url": "https://www.securedtouch.com/", - "companyId": null - }, - "securedvisit": { - "name": "SecuredVisit", - "categoryId": 4, - "url": "http://securedvisit.com/", - "companyId": "securedvisit" - }, - "seeding_alliance": { - "name": "Seeding Alliance", - "categoryId": 4, - "url": "http://seeding-alliance.de", - "companyId": "stroer" - }, - "seedtag.com": { - "name": "Seedtag", - "categoryId": 4, - "url": "https://www.seedtag.com/en/", - "companyId": "seedtag" - }, - "seevolution": { - "name": "SeeVolution", - "categoryId": 6, - "url": "http://www.seevolution.com", - "companyId": "seevolution" - }, - "segment": { - "name": "Segment", - "categoryId": 6, - "url": "https://segment.io/", - "companyId": "segment" - }, - "segmento": { - "name": "Segmento", - "categoryId": 4, - "url": "https://segmento.ru/en", - "companyId": "segmento" - }, - "segmint": { - "name": "Segmint", - "categoryId": 6, - "url": "http://www.segmint.com/", - "companyId": "segmint" - }, - "sekindo": { - "name": "Sekindo", - "categoryId": 4, - "url": "http://www.sekindo.com/", - "companyId": "sekindo" - }, - "sellpoints": { - "name": "Sellpoints", - "categoryId": 4, - "url": "https://www.sellpoints.com/", - "companyId": "sellpoints" - }, - "semantiqo.com": { - "name": "Semantiqo", - "categoryId": 4, - "url": "https://semantiqo.com/", - "companyId": null - }, - "semasio": { - "name": "Semasio", - "categoryId": 4, - "url": "http://semasio.com/", - "companyId": "semasio" - }, - "semilo": { - "name": "Semilo", - "categoryId": 4, - "url": "http://www.semilo.nl/", - "companyId": "semilo" - }, - "semknox.com": { - "name": "SEMKNOX GmbH", - "categoryId": 5, - "url": "https://semknox.com/", - "companyId": null - }, - "sendinblue": { - "name": "sendinblue", - "categoryId": 4, - "url": "https://fr.sendinblue.com/", - "companyId": "sendinblue" - }, - "sendpulse.com": { - "name": "SendPulse", - "categoryId": 3, - "url": "https://sendpulse.com/", - "companyId": null - }, - "sendsay": { - "name": "Sendsay", - "categoryId": 2, - "url": "https://sendsay.ru", - "companyId": "sendsay" - }, - "sense_digital": { - "name": "Sense Digital", - "categoryId": 6, - "url": "http://sensedigital.in/", - "companyId": "sense_digital" - }, - "sensors_data": { - "name": "Sensors Data", - "categoryId": 6, - "url": "https://www.sensorsdata.cn/", - "companyId": "sensors_data" - }, - "sentifi.com": { - "name": "Sentifi", - "categoryId": 6, - "url": "https://sentifi.com/", - "companyId": "sentifi" - }, - "sentry": { - "name": "Sentry", - "categoryId": 6, - "url": "https://sentry.io/", - "companyId": "sentry" - }, - "sepyra": { - "name": "Sepyra", - "categoryId": 4, - "url": "http://sepyra.com/", - "companyId": "sepyra" - }, - "sessioncam": { - "name": "SessionCam", - "categoryId": 6, - "url": "http://www.sessioncam.com/", - "companyId": "sessioncam" - }, - "sessionly": { - "name": "Sessionly", - "categoryId": 2, - "url": "https://www.sessionly.io/", - "companyId": "sessionly" - }, - "sevenone_media": { - "name": "SevenOne Media", - "categoryId": 4, - "url": null, - "companyId": null - }, - "sexadnetwork": { - "name": "SexAdNetwork", - "categoryId": 3, - "url": "http://www.sexadnetwork.com/", - "companyId": "sexadnetwork" - }, - "sexinyourcity": { - "name": "SexInYourCity", - "categoryId": 3, - "url": "http://www.sexinyourcity.com/", - "companyId": "sexinyourcity" - }, - "sextracker": { - "name": "SexTracker", - "categoryId": 3, - "url": "http://webmasters.sextracker.com/", - "companyId": "sextracker" - }, - "sexypartners.net": { - "name": "sexypartners.net", - "categoryId": 3, - "url": null, - "companyId": null - }, - "seznam": { - "name": "Seznam", - "categoryId": 6, - "url": "https://onas.seznam.cz/cz/", - "companyId": "seznam" - }, - "shareaholic": { - "name": "Shareaholic", - "categoryId": 6, - "url": "https://www.shareaholic.com/", - "companyId": "shareaholic" - }, - "shareasale": { - "name": "ShareASale", - "categoryId": 4, - "url": "http://www.shareasale.com/", - "companyId": "shareasale" - }, - "sharecompany": { - "name": "ShareCompany", - "categoryId": 2, - "url": "http://sharecompany.nl", - "companyId": "sharecompany" - }, - "sharepoint": { - "name": "SharePoint", - "categoryId": 8, - "url": "https://www.microsoft.com/microsoft-365/sharepoint/collaboration", - "companyId": "microsoft", - "source": "AdGuard" - }, - "sharethis": { - "name": "ShareThis", - "categoryId": 4, - "url": "http://sharethis.com/", - "companyId": "sharethis" - }, - "sharethrough": { - "name": "ShareThrough", - "categoryId": 4, - "url": "http://www.sharethrough.com/", - "companyId": "sharethrough" - }, - "sharpspring": { - "name": "Sharpspring", - "categoryId": 6, - "url": "https://sharpspring.com/", - "companyId": "sharpspring" - }, - "sheego.de": { - "name": "sheego.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "sheerid": { - "name": "SheerID", - "categoryId": 4, - "url": "http://www.sheerid.com/", - "companyId": "sheerid" - }, - "shinystat": { - "name": "ShinyStat", - "categoryId": 6, - "url": "http://www.shinystat.com/", - "companyId": "shinystat" - }, - "shop_target": { - "name": "Shop Target", - "categoryId": 4, - "url": "http://shoptarget.com.br/", - "companyId": "shopback" - }, - "shopauskunft.de": { - "name": "ShopAuskunft.de", - "categoryId": 2, - "url": "https://shopauskunft.de/", - "companyId": null - }, - "shopgate.com": { - "name": "Shopgate", - "categoryId": 2, - "url": "https://www.shopgate.com/", - "companyId": null - }, - "shopify": { - "name": "Shopify Inc.", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify", - "source": "AdGuard" - }, - "shopify_stats": { - "name": "Shopify Stats", - "categoryId": 6, - "url": "http://www.shopify.com/", - "companyId": "shopify", - "source": "AdGuard" - }, - "shopifycdn.com": { - "name": "Shopify CDN", - "categoryId": 9, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopifycloud.com": { - "name": "Shopify Cloud", - "categoryId": 2, - "url": "https://www.shopify.com/", - "companyId": "shopify" - }, - "shopper_approved": { - "name": "Shopper Approved", - "categoryId": 2, - "url": "http://www.shopperapproved.com", - "companyId": "shopper_approved" - }, - "shopping_com": { - "name": "Shopping.com", - "categoryId": 4, - "url": "https://partnernetwork.ebay.com/", - "companyId": "ebay_partner_network" - }, - "shopping_flux": { - "name": "Shopping Flux", - "categoryId": 6, - "url": "http://www.shopping-flux.com/", - "companyId": "shopping_flux" - }, - "shoprunner": { - "name": "ShopRunner", - "categoryId": 2, - "url": "https://www.shoprunner.com", - "companyId": "shoprunner" - }, - "shopsocially": { - "name": "ShopSocially", - "categoryId": 2, - "url": "http://shopsocially.com/", - "companyId": "shopsocially" - }, - "shopzilla": { - "name": "Shopzilla", - "categoryId": 4, - "url": "http://www.shopzilla.com/", - "companyId": "shopzilla" - }, - "shortnews": { - "name": "ShortNews.de", - "categoryId": 8, - "url": "http://www.shortnews.de/#", - "companyId": null - }, - "showrss": { - "name": "showRSS", - "categoryId": 8, - "url": "https://showrss.info/", - "companyId": "showrss", - "source": "AdGuard" - }, - "shrink": { - "name": "Shrink", - "categoryId": 2, - "url": "http://shink.in/", - "companyId": "shrink.in" - }, - "shutterstock": { - "name": "Shutterstock", - "categoryId": 8, - "url": "https://www.shutterstock.com/", - "companyId": "shutterstock_inc" - }, - "siblesectiveal.club": { - "name": "siblesectiveal.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sidecar": { - "name": "Sidecar", - "categoryId": 6, - "url": "http://hello.getsidecar.com/", - "companyId": "sidecar" - }, - "sift_science": { - "name": "Sift Science", - "categoryId": 6, - "url": "https://siftscience.com/", - "companyId": "sift_science" - }, - "signal": { - "name": "Signal", - "categoryId": 5, - "url": "https://www.signal.co/", - "companyId": "signal_digital" - }, - "signifyd": { - "name": "Signifyd", - "categoryId": 6, - "url": "https://www.signifyd.com/", - "companyId": "signifyd" - }, - "silverpop": { - "name": "Silverpop", - "categoryId": 2, - "url": "http://www.silverpop.com/", - "companyId": "ibm" - }, - "similardeals.net": { - "name": "SimilarDeals", - "categoryId": 8, - "url": "http://www.similardeals.net/", - "companyId": null - }, - "similarweb": { - "name": "SimilarWeb", - "categoryId": 6, - "url": "https://www.similarweb.com/", - "companyId": "similarweb", - "source": "AdGuard" - }, - "simplereach": { - "name": "SimpleReach", - "categoryId": 6, - "url": "https://www.nativo.com/simplereach", - "companyId": "nativo" - }, - "simpli.fi": { - "name": "Simpli.fi", - "categoryId": 4, - "url": "http://www.simpli.fi", - "companyId": "simpli.fi" - }, - "sina": { - "name": "Sina", - "categoryId": 6, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "sina_cdn": { - "name": "Sina CDN", - "categoryId": 9, - "url": "https://www.sina.com.cn/", - "companyId": "sina" - }, - "singlefeed": { - "name": "SingleFeed", - "categoryId": 4, - "url": "https://www.singlefeed.com/", - "companyId": "singlefeed" - }, - "sirdata": { - "name": "Sirdata", - "categoryId": 6, - "url": "http://www.sirdata.com/home/", - "companyId": "sirdata" - }, - "site24x7": { - "name": "Site24x7", - "categoryId": 6, - "url": "https://www.site24x7.com/", - "companyId": "zoho_corp" - }, - "site_booster": { - "name": "Site Booster", - "categoryId": 7, - "url": "https://sitebooster.com/", - "companyId": "site_booster" - }, - "site_stratos": { - "name": "Site Stratos", - "categoryId": 4, - "url": "http://www.infocube.co.jp/", - "companyId": "infocube" - }, - "siteapps": { - "name": "SiteApps", - "categoryId": 2, - "url": "http://siteapps.com", - "companyId": "siteapps" - }, - "sitebro": { - "name": "SiteBro", - "categoryId": 6, - "url": "http://www.sitebro.net/", - "companyId": "sitebro" - }, - "siteheart": { - "name": "SiteHeart", - "categoryId": 2, - "url": "http://siteheart.com/", - "companyId": "siteheart" - }, - "siteimprove": { - "name": "Siteimprove", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "siteimprove_analytics": { - "name": "SiteImprove Analytics", - "categoryId": 6, - "url": "http://siteimprove.com", - "companyId": "siteimprove" - }, - "sitelabweb.com": { - "name": "sitelabweb.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sitemeter": { - "name": "SiteMeter", - "categoryId": 6, - "url": "http://www.sitemeter.com/", - "companyId": "sitemeter,_inc." - }, - "sitescout": { - "name": "SiteScout by Centro", - "categoryId": 4, - "url": "http://www.sitescout.com", - "companyId": "centro" - }, - "sitetag": { - "name": "SiteTag", - "categoryId": 2, - "url": "http://www.sitetag.us/", - "companyId": "sitetag" - }, - "sitewit": { - "name": "SiteWit", - "categoryId": 4, - "url": "http://www.sitewit.com/", - "companyId": "sitewit" - }, - "six_apart_advertising": { - "name": "Six Apart Advertising", - "categoryId": 4, - "url": "http://www.sixapart.com/advertising/", - "companyId": "six_apart" - }, - "sixt-neuwagen.de": { - "name": "sixt-neuwagen.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "skadtec.com": { - "name": "GP One GmbH", - "categoryId": 6, - "url": "http://www.gp-one.com/", - "companyId": null - }, - "skimlinks": { - "name": "SkimLinks", - "categoryId": 4, - "url": "http://www.skimlinks.com/", - "companyId": "skimlinks" - }, - "skroutz": { - "name": "Skroutz", - "categoryId": 6, - "url": "https://www.skroutz.gr/", - "companyId": "skroutz" - }, - "skyglue": { - "name": "SkyGlue", - "categoryId": 6, - "url": "http://www.skyglue.com/", - "companyId": "skyglue_technology" - }, - "skype": { - "name": "Skype", - "categoryId": 2, - "url": "http://www.skype.com", - "companyId": "microsoft" - }, - "skysa": { - "name": "Skysa", - "categoryId": 2, - "url": "http://www.skysa.com/", - "companyId": "skysa" - }, - "skyscnr.com": { - "name": "Skyscanner CDN", - "categoryId": 9, - "url": "https://www.skyscanner.net/", - "companyId": null - }, - "slack": { - "name": "Slack", - "categoryId": 8, - "url": "https://www.slack.com/", - "companyId": "salesforce", - "source": "AdGuard" - }, - "slashdot_widget": { - "name": "Slashdot Widget", - "categoryId": 2, - "url": "http://slashdot.org", - "companyId": "slashdot" - }, - "sleeknote": { - "name": "Sleeknote", - "categoryId": 2, - "url": "https://sleeknote.com/", - "companyId": "sleeknote" - }, - "sli_systems": { - "name": "SLI Systems", - "categoryId": 2, - "url": "http://www.sli-systems.com", - "companyId": "sli_systems" - }, - "slice_factory": { - "name": "Slice Factory", - "categoryId": 2, - "url": "http://www.slicefactory.com/", - "companyId": "slice_factory" - }, - "slimcutmedia": { - "name": "SlimCutMedia", - "categoryId": 6, - "url": "http://www.slimcutmedia.com/", - "companyId": "slimcutmedia" - }, - "slingpic": { - "name": "Slingpic", - "categoryId": 4, - "url": "http://slingpic.com/", - "companyId": "affectv" - }, - "smaato": { - "name": "Smaato", - "categoryId": 4, - "url": "http://www.smaato.com/", - "companyId": "smaato" - }, - "smart4ads": { - "name": "smart4ads", - "categoryId": 4, - "url": "http://www.smart4ads.com", - "companyId": "smart4ads" - }, - "smart_adserver": { - "name": "SMART AdServer", - "categoryId": 4, - "url": "https://smartadserver.com/", - "companyId": "smart_adserver" - }, - "smart_call": { - "name": "Smart Call", - "categoryId": 2, - "url": "https://smartcall.kz/", - "companyId": "smart_call" - }, - "smart_content": { - "name": "Smart Content", - "categoryId": 4, - "url": "http://www.getsmartcontent.com", - "companyId": "get_smart_content" - }, - "smart_device_media": { - "name": "Smart Device Media", - "categoryId": 4, - "url": "http://www.smartdevicemedia.com/", - "companyId": "smart_device_media" - }, - "smart_leads": { - "name": "Smart Leads", - "categoryId": 4, - "url": "http://www.cnt.my/", - "companyId": "smart_leads" - }, - "smart_selling": { - "name": "Smart Selling", - "categoryId": 2, - "url": "https://smartselling.cz/", - "companyId": "smart_selling" - }, - "smartad": { - "name": "smartAD", - "categoryId": 4, - "url": "http://smartad.eu/", - "companyId": "smartad" - }, - "smartbn": { - "name": "SmartBN", - "categoryId": 4, - "url": "http://smartbn.ru/", - "companyId": "smartbn" - }, - "smartclick.net": { - "name": "SmartClick", - "categoryId": 4, - "url": "http://smartclick.net/", - "companyId": null - }, - "smartclip": { - "name": "SmartClip", - "categoryId": 4, - "url": "http://www.smartclip.com/", - "companyId": "smartclip" - }, - "smartcontext": { - "name": "SmartContext", - "categoryId": 4, - "url": "http://smartcontext.pl/", - "companyId": "smartcontext" - }, - "smarter_remarketer": { - "name": "SmarterHQ", - "categoryId": 4, - "url": "https://smarterhq.com", - "companyId": "smarterhq" - }, - "smarter_travel": { - "name": "Smarter Travel Media", - "categoryId": 4, - "url": "https://www.smartertravel.com/", - "companyId": "iac_apps" - }, - "smarterclick": { - "name": "Smarterclick", - "categoryId": 4, - "url": "http://www.smarterclick.co.uk/", - "companyId": "smarter_click" - }, - "smartertrack": { - "name": "SmarterTrack", - "categoryId": 4, - "url": "http://www.smartertrack.com/", - "companyId": "smartertrack" - }, - "smartlink.cool": { - "name": "smartlink.cool", - "categoryId": 11, - "url": null, - "companyId": null - }, - "smartlook": { - "name": "Smartlook", - "categoryId": 2, - "url": "https://www.smartlook.com/", - "companyId": "smartlook" - }, - "smartstream.tv": { - "name": "SmartStream.TV", - "categoryId": 4, - "url": "https://www.smartstream.tv/en", - "companyId": "smartstream" - }, - "smartsupp_chat": { - "name": "Smartsupp Chat", - "categoryId": 2, - "url": "https://www.smartsupp.com/", - "companyId": "smartsuppp" - }, - "smi2.ru": { - "name": "smi2.ru", - "categoryId": 6, - "url": "https://smi2.net/", - "companyId": "media2_stat.media" - }, - "smooch": { - "name": "Smooch", - "categoryId": 2, - "url": "https://smooch.io/", - "companyId": "smooch" - }, - "smowtion": { - "name": "Smowtion", - "categoryId": 4, - "url": "http://www.smowtion.com/", - "companyId": "smowtion" - }, - "smx_ventures": { - "name": "SMX Ventures", - "categoryId": 6, - "url": "http://smxeventures.com/", - "companyId": "smx_ventures" - }, - "smyte": { - "name": "Smyte", - "categoryId": 6, - "url": "https://www.smyte.com/", - "companyId": "smyte" - }, - "snacktv": { - "name": "SnackTV", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snacktv_player": { - "name": "SnackTV-Player", - "categoryId": 0, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "snap": { - "name": "Snap", - "categoryId": 2, - "url": "http://www.snap.com/", - "companyId": "snap_technologies" - }, - "snap_engage": { - "name": "Snap Engage", - "categoryId": 2, - "url": "https://snapengage.com/", - "companyId": "snap_engage" - }, - "snapchat": { - "name": "Snapchat For Business", - "categoryId": 4, - "url": "https://www.snapchat.com/", - "companyId": "snap_technologies" - }, - "snapcraft": { - "name": "Snapcraft", - "categoryId": 8, - "url": "https://snapcraft.io", - "companyId": "canonical", - "source": "AdGuard" - }, - "snigelweb": { - "name": "SnigelWeb, Inc.", - "categoryId": 4, - "url": "http://www.snigelweb.com/", - "companyId": "snigelweb_inc" - }, - "snoobi": { - "name": "Snoobi", - "categoryId": 6, - "url": "http://www.snoobi.eu/", - "companyId": "snoobi" - }, - "snoobi_analytics": { - "name": "Snoobi Analytics", - "categoryId": 6, - "url": "http://www.snoobi.com/", - "companyId": "snoobi_oy" - }, - "snowplow": { - "name": "Snowplow", - "categoryId": 6, - "url": "http://snowplowanalytics.com/", - "companyId": "snowplow" - }, - "soasta_mpulse": { - "name": "SOASTA mPulse", - "categoryId": 6, - "url": "http://www.soasta.com/", - "companyId": "akamai" - }, - "sociable_labs": { - "name": "Sociable Labs", - "categoryId": 4, - "url": "http://www.sociablelabs.com/", - "companyId": "sociable_labs" - }, - "social_amp": { - "name": "Social Amp", - "categoryId": 4, - "url": "http://www.merkleinc.com/", - "companyId": "dentsu_aegis_network" - }, - "social_annex": { - "name": "Social Annex", - "categoryId": 4, - "url": "http://www.socialannex.com", - "companyId": "social_annex" - }, - "social_miner": { - "name": "Social Miner", - "categoryId": 7, - "url": "https://socialminer.com/", - "companyId": "social_miner" - }, - "socialbeat": { - "name": "socialbeat", - "categoryId": 4, - "url": "http://www.socialbeat.it/", - "companyId": "socialbeat" - }, - "socialrms": { - "name": "SocialRMS", - "categoryId": 7, - "url": "http://socialinterface.com/socialrms/", - "companyId": "socialinterface" - }, - "sociaplus.com": { - "name": "SociaPlus", - "categoryId": 6, - "url": "https://sociaplus.com/", - "companyId": null - }, - "sociomantic": { - "name": "Sociomantic", - "categoryId": 4, - "url": "http://www.sociomantic.com/", - "companyId": "sociomantic_labs_gmbh" - }, - "sohu": { - "name": "Sohu", - "categoryId": 7, - "url": "http://www.sohu.com", - "companyId": "sohu" - }, - "sojern": { - "name": "Sojern", - "categoryId": 4, - "url": "http://www.sojern.com/", - "companyId": "sojern" - }, - "sokrati": { - "name": "Sokrati", - "categoryId": 4, - "url": "http://sokrati.com/", - "companyId": "sokrati" - }, - "solads.media": { - "name": "solads.media", - "categoryId": 4, - "url": "http://solads.media/", - "companyId": null - }, - "solaredge": { - "name": "SolarEdge Technologies, Inc.", - "categoryId": 8, - "url": "https://www.solaredge.com/", - "companyId": "solaredge", - "source": "AdGuard" - }, - "solidopinion": { - "name": "SolidOpinion", - "categoryId": 2, - "url": "https://solidopinion.com/", - "companyId": "solidopinion" - }, - "solve_media": { - "name": "Solve Media", - "categoryId": 4, - "url": "http://solvemedia.com/", - "companyId": "solve_media" - }, - "soma_2": { - "name": "SOMA 2", - "categoryId": 4, - "url": "http://www.webcombi.de/", - "companyId": "soma_2_gmbh" - }, - "somoaudience": { - "name": "SoMo Audience", - "categoryId": 4, - "url": "https://somoaudience.com/", - "companyId": "somoaudience" - }, - "sonobi": { - "name": "Sonobi", - "categoryId": 4, - "url": "http://sonobi.com/", - "companyId": "sonobi" - }, - "sonos": { - "name": "Sonos", - "categoryId": 8, - "url": "https://www.sonos.com/", - "companyId": "sonos", - "source": "AdGuard" - }, - "sophus3": { - "name": "Sophus3", - "categoryId": 4, - "url": "http://www.sophus3.com/", - "companyId": "sophus3" - }, - "sortable": { - "name": "Sortable", - "categoryId": 4, - "url": "https://sortable.com/", - "companyId": "sortable" - }, - "soundcloud": { - "name": "SoundCloud", - "categoryId": 0, - "url": "http://soundcloud.com/", - "companyId": "soundcloud" - }, - "sourceknowledge_pixel": { - "name": "SourceKnowledge Pixel", - "categoryId": 4, - "url": "http://www.provenpixel.com/", - "companyId": "sourceknowledge" - }, - "sourcepoint": { - "name": "Sourcepoint", - "categoryId": 4, - "url": "https://www.sourcepoint.com/", - "companyId": "sourcepoint" - }, - "sovrn": { - "name": "sovrn", - "categoryId": 4, - "url": "https://www.sovrn.com/", - "companyId": "sovrn" - }, - "sovrn_viewability_solutions": { - "name": "Sovrn Signal", - "categoryId": 4, - "url": "https://www.sovrn.com/publishers/signal/", - "companyId": "sovrn" - }, - "spark_studios": { - "name": "Spark Studios", - "categoryId": 0, - "url": "http://www.sparkstudios.com/", - "companyId": "spark_studios" - }, - "sparkasse.de": { - "name": "sparkasse.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "speakpipe": { - "name": "SpeakPipe", - "categoryId": 2, - "url": "http://www.speakpipe.com/", - "companyId": "speakpipe" - }, - "specific_media": { - "name": "Specific Media", - "categoryId": 4, - "url": "http://www.specificmedia.com", - "companyId": "specific_media" - }, - "spectate": { - "name": "Spectate", - "categoryId": 6, - "url": "http://spectate.com/", - "companyId": "spectate" - }, - "speed_shift_media": { - "name": "Speed Shift Media", - "categoryId": 4, - "url": "http://www.speedshiftmedia.com/", - "companyId": "speed_shift_media" - }, - "speedcurve": { - "name": "SpeedCurve", - "categoryId": 6, - "url": "https://speedcurve.com/", - "companyId": null - }, - "speedyads": { - "name": "SpeedyAds", - "categoryId": 4, - "url": "http://www.entireweb.com/speedyads/", - "companyId": "entireweb" - }, - "speee": { - "name": "Speee", - "categoryId": 4, - "url": "https://speee.jp", - "companyId": "speee" - }, - "sphere": { - "name": "Sphere", - "categoryId": 4, - "url": "http://www.sphere.com/", - "companyId": "verizon" - }, - "spheremall": { - "name": "SphereMall", - "categoryId": 6, - "url": "https://spheremall.com", - "companyId": "spheremall" - }, - "sphereup": { - "name": "SphereUp", - "categoryId": 2, - "url": "http://zoomd.com/", - "companyId": "zoomd" - }, - "spicy": { - "name": "Spicy", - "categoryId": 4, - "url": "http://sspicy.ru/#main", - "companyId": "spicy_ssp" - }, - "spider.ad": { - "name": "Spider.Ad", - "categoryId": 4, - "url": "http://spider.ad/", - "companyId": "spider.ad" - }, - "spider_ads": { - "name": "Spider Ads", - "categoryId": 4, - "url": "http://www.spiderads.eu/", - "companyId": "spiderads" - }, - "spinnakr": { - "name": "Spinnakr", - "categoryId": 6, - "url": "http://spinnakr.com/", - "companyId": "spinnakr" - }, - "spokenlayer": { - "name": "SpokenLayer", - "categoryId": 0, - "url": "http://www.spokenlayer.com", - "companyId": "spokenlayer" - }, - "spongecell": { - "name": "Spongecell", - "categoryId": 4, - "url": "http://www.spongecell.com/", - "companyId": "spongecell" - }, - "sponsorads.de": { - "name": "SponsorAds.de", - "categoryId": 4, - "url": "http://sponsorads.de", - "companyId": "sponsorads.de" - }, - "sportsbet_affiliates": { - "name": "Sportsbet Affiliates", - "categoryId": 4, - "url": "http://www.sportsbetaffiliates.com.au/", - "companyId": "sportsbet_affiliates" - }, - "spot.im": { - "name": "Spot.IM", - "categoryId": 7, - "url": "https://www.spot.im/", - "companyId": "spot.im" - }, - "spoteffect": { - "name": "Spoteffect", - "categoryId": 6, - "url": "http://www.spoteffects.com/home/", - "companyId": "spoteffect" - }, - "spotify": { - "name": "Spotify", - "categoryId": 0, - "url": "https://www.spotify.com/", - "companyId": "spotify" - }, - "spotify_embed": { - "name": "Spotify Embed", - "categoryId": 0, - "url": "https://www.spotify.com", - "companyId": "spotify" - }, - "spotscenered.info": { - "name": "spotscenered.info", - "categoryId": 11, - "url": null, - "companyId": null - }, - "spotxchange": { - "name": "SpotX", - "categoryId": 4, - "url": "https://www.spotx.tv/", - "companyId": "rtl_group" - }, - "spoutable": { - "name": "Spoutable", - "categoryId": 4, - "url": "http://spoutable.com/", - "companyId": "spoutable" - }, - "springboard": { - "name": "SpringBoard", - "categoryId": 4, - "url": "http://home.springboardplatform.com/", - "companyId": "springboard" - }, - "springserve": { - "name": "SpringServe", - "categoryId": 4, - "url": "http://springserve.com/", - "companyId": "springserve" - }, - "sprinklr": { - "name": "Sprinklr", - "categoryId": 4, - "url": "https://www.sprinklr.com/", - "companyId": "sprinklr" - }, - "sputnik": { - "name": "Sputnik", - "categoryId": 6, - "url": "https://cnt.sputnik.ru/", - "companyId": "sputnik" - }, - "squadata": { - "name": "Squadata", - "categoryId": 4, - "url": "http://www.email-match.net/", - "companyId": "squadata" - }, - "squarespace.com": { - "name": "Squarespace", - "categoryId": 6, - "url": "https://www.squarespace.com/", - "companyId": null - }, - "srvtrck.com": { - "name": "srvtrck.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "srvvtrk.com": { - "name": "srvvtrk.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "sstatic.net": { - "name": "Stack Exchange", - "categoryId": 9, - "url": "https://sstatic.net/", - "companyId": null - }, - "st-hatena": { - "name": "Hatena", - "categoryId": 7, - "url": "http://www.hatena.ne.jp/", - "companyId": "hatena_jp" - }, - "stackadapt": { - "name": "StackAdapt", - "categoryId": 4, - "url": "http://www.stackadapt.com/", - "companyId": "stackadapt" - }, - "stackpathdns.com": { - "name": "StackPath", - "categoryId": 9, - "url": "https://www.stackpath.com/", - "companyId": null - }, - "stailamedia_com": { - "name": "stailamedia.com", - "categoryId": 4, - "url": "http://stailamedia.com/", - "companyId": null - }, - "stalluva.pro": { - "name": "stalluva.pro", - "categoryId": 11, - "url": null, - "companyId": null - }, - "startapp": { - "name": "StartApp", - "categoryId": 4, - "url": "https://www.startapp.com/", - "companyId": null - }, - "stat24": { - "name": "Stat24", - "categoryId": 6, - "url": "http://www.stat24.com/en/", - "companyId": "stat24" - }, - "stat4u": { - "name": "stat4u", - "categoryId": 6, - "url": "http://stat.4u.pl/", - "companyId": "stat4u" - }, - "statcounter": { - "name": "Statcounter", - "categoryId": 6, - "url": "http://www.statcounter.com/", - "companyId": "statcounter" - }, - "stathat": { - "name": "StatHat", - "categoryId": 6, - "url": "http://www.stathat.com/", - "companyId": "stathat" - }, - "statisfy": { - "name": "Statisfy", - "categoryId": 6, - "url": "http://www.statisfy.com/", - "companyId": "statisfy" - }, - "statsy.net": { - "name": "statsy.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "statuscake": { - "name": "StatusCake", - "categoryId": 6, - "url": "https://www.statuscake.com/", - "companyId": "statuscake" - }, - "statuspage.io": { - "name": "Statuspage", - "categoryId": 2, - "url": "https://www.statuspage.io/", - "companyId": "atlassian" - }, - "stayfriends.de": { - "name": "stayfriends.de", - "categoryId": 8, - "url": "https://www.stayfriends.de/", - "companyId": null - }, - "steelhouse": { - "name": "Steel House Media", - "categoryId": 4, - "url": "https://steelhouse.com/", - "companyId": "steelhouse" - }, - "steepto.com": { - "name": "Steepto", - "categoryId": 4, - "url": "https://www.steepto.com/", - "companyId": null - }, - "stepstone.com": { - "name": "StepStone", - "categoryId": 8, - "url": "https://www.stepstone.com/", - "companyId": null - }, - "stetic": { - "name": "Stetic", - "categoryId": 6, - "url": "https://www.stetic.com/", - "companyId": "stetic" - }, - "stickyads": { - "name": "StickyAds", - "categoryId": 4, - "url": "http://corporate.comcast.com/", - "companyId": "comcast" - }, - "stocktwits": { - "name": "StockTwits", - "categoryId": 2, - "url": "http://stocktwits.com", - "companyId": "stocktwits" - }, - "storify": { - "name": "Storify", - "categoryId": 4, - "url": "https://storify.com/", - "companyId": "adobe" - }, - "storygize": { - "name": "Storygize", - "categoryId": 4, - "url": "http://www.storygize.com/", - "companyId": null - }, - "strands_recommender": { - "name": "Strands Recommender", - "categoryId": 4, - "url": "http://recommender.strands.com", - "companyId": "strands" - }, - "strava": { - "name": "Strava", - "categoryId": 6, - "url": "https://strava.com", - "companyId": "strava" - }, - "streak": { - "name": "Streak", - "categoryId": 2, - "url": "http://www.streak.com/", - "companyId": "streak" - }, - "streamotion": { - "name": "Streamotion", - "categoryId": 0, - "url": "https://streamotion.com.au/", - "companyId": "news_corp", - "source": "AdGuard" - }, - "streamrail.com": { - "name": "StreamRail", - "categoryId": 4, - "url": "https://www.streamrail.com/", - "companyId": "ironsource" - }, - "stride": { - "name": "Stride", - "categoryId": 6, - "url": "https://www.getstride.com/", - "companyId": "stride_software" - }, - "stripchat.com": { - "name": "stripchat.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stripe.com": { - "name": "Stripe", - "categoryId": 2, - "url": "https://stripe.com/", - "companyId": null - }, - "stripst.com": { - "name": "stripst.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "stroer_digital_media": { - "name": "Stroer Digital Media", - "categoryId": 4, - "url": "http://www.stroeer.de/", - "companyId": "stroer" - }, - "strossle": { - "name": "Strossle", - "categoryId": 4, - "url": "https://strossle.com/", - "companyId": "strossle" - }, - "struq": { - "name": "Struq", - "categoryId": 4, - "url": "http://www.struq.com/", - "companyId": "quantcast" - }, - "stumbleupon_widgets": { - "name": "StumbleUpon Widgets", - "categoryId": 7, - "url": "http://www.stumbleupon.com/", - "companyId": "stumbleupon" - }, - "sub2": { - "name": "Sub2", - "categoryId": 4, - "url": "http://www.sub2tech.com/", - "companyId": "sub2" - }, - "sublime_skinz": { - "name": "Sublime", - "categoryId": 4, - "url": "https://sublimeskinz.com/home", - "companyId": "sublime_skinz" - }, - "suggest.io": { - "name": "Suggest.io", - "categoryId": 4, - "url": "https://suggest.io/", - "companyId": "suggest.io" - }, - "sumologic.com": { - "name": "Sumologic", - "categoryId": 6, - "url": "https://www.sumologic.com/", - "companyId": null - }, - "sumome": { - "name": "Sumo", - "categoryId": 6, - "url": "https://sumo.com/", - "companyId": "sumome" - }, - "sundaysky": { - "name": "SundaySky", - "categoryId": 4, - "url": "http://www.sundaysky.com/", - "companyId": "sundaysky" - }, - "supercell": { - "name": "Supercell", - "categoryId": 2, - "url": "https://supercell.com/", - "companyId": "supercell", - "source": "AdGuard" - }, - "supercounters": { - "name": "SuperCounters", - "categoryId": 6, - "url": "http://www.supercounters.com/", - "companyId": "supercounters" - }, - "superfastcdn.com": { - "name": "superfastcdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "supership": { - "name": "Supership", - "categoryId": 4, - "url": "https://supership.jp/en/", - "companyId": "supership" - }, - "supplyframe": { - "name": "SupplyFrame", - "categoryId": 4, - "url": "https://supplyframe.com/", - "companyId": "supplyframe" - }, - "surf_by_surfingbird": { - "name": "Surf by Surfingbird", - "categoryId": 2, - "url": "http://surfingbird.ru/", - "companyId": "surfingbird" - }, - "survata": { - "name": "Survata", - "categoryId": 4, - "url": "https://www.survata.com/", - "companyId": "survata" - }, - "sweettooth": { - "name": "Sweettooth", - "categoryId": 2, - "url": "https://www.sweettoothrewards.com/", - "companyId": "sweet_tooth_rewards" - }, - "swiftype": { - "name": "Swiftype", - "categoryId": 9, - "url": "https://swiftype.com/", - "companyId": "elastic" - }, - "swisscom": { - "name": "Swisscom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "switch_concepts": { - "name": "Switch Concepts", - "categoryId": 4, - "url": "http://www.switchconcepts.co.uk/", - "companyId": "switch_concepts" - }, - "switchtv": { - "name": "Switch Media", - "categoryId": 8, - "url": "https://www.switch.tv/", - "companyId": "switchtv", - "source": "AdGuard" - }, - "swoop": { - "name": "Swoop", - "categoryId": 4, - "url": "http://swoop.com/", - "companyId": "swoop" - }, - "sykes": { - "name": "Sykes", - "categoryId": 6, - "url": "http://www.sykescottages.co.uk/", - "companyId": "sykes_cottages" - }, - "symantec": { - "name": "Symantec (Norton Secured Seal)", - "categoryId": 5, - "url": "https://www.symantec.com/page.jsp?id=ssl-resources&tabID=3#", - "companyId": "symantec" - }, - "symphony_talent": { - "name": "Symphony Talent", - "categoryId": 2, - "url": "http://www.symphonytalent.com/", - "companyId": "symphony_talent" - }, - "synacor": { - "name": "Synacor", - "categoryId": 4, - "url": "https://www.synacor.com/", - "companyId": "synacor" - }, - "syncapse": { - "name": "Syncapse", - "categoryId": 4, - "url": "http://www.clickable.com/", - "companyId": "syncapse" - }, - "synergy-e": { - "name": "Synergy-E", - "categoryId": 4, - "url": "http://synergy-e.com/", - "companyId": "synergy-e" - }, - "t-mobile": { - "name": "Deutsche Telekom", - "categoryId": 8, - "url": null, - "companyId": null - }, - "t8cdn.com": { - "name": "t8cdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "tableteducation.com": { - "name": "tableteducation.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "taboola": { - "name": "Taboola", - "categoryId": 4, - "url": "http://www.taboola.com", - "companyId": "taboola" - }, - "tacoda": { - "name": "Tacoda", - "categoryId": 4, - "url": "http://www.tacoda.com/", - "companyId": "verizon" - }, - "tag_commander": { - "name": "Commanders Act", - "categoryId": 5, - "url": "https://www.commandersact.com/en/", - "companyId": "tag_commander" - }, - "tagcade": { - "name": "Tagcade", - "categoryId": 4, - "url": "https://www.pubvantage.com/", - "companyId": "pubvantage" - }, - "taggify": { - "name": "Taggify", - "categoryId": 4, - "url": "http://new.taggify.net/", - "companyId": "taggify" - }, - "taggy": { - "name": "TAGGY", - "categoryId": 4, - "url": "http://taggy.jp/", - "companyId": "taggy" - }, - "tagman": { - "name": "TagMan", - "categoryId": 5, - "url": "http://www.tagman.com/", - "companyId": "ensighten" - }, - "tail_target": { - "name": "Tail", - "categoryId": 6, - "url": "https://www.tail.digital/", - "companyId": "tail.digital" - }, - "tailsweep": { - "name": "Tailsweep", - "categoryId": 4, - "url": "http://www.tailsweep.se/", - "companyId": "tailsweep" - }, - "tamedia.ch": { - "name": "Tamedia", - "categoryId": 4, - "url": "https://www.tamedia.ch/", - "companyId": null - }, - "tanx": { - "name": "Tanx", - "categoryId": 4, - "url": "http://tanx.com/", - "companyId": "tanx" - }, - "taobao": { - "name": "Taobao", - "categoryId": 4, - "url": "https://world.taobao.com/", - "companyId": "softbank", - "source": "AdGuard" - }, - "tapad": { - "name": "Tapad", - "categoryId": 4, - "url": "http://www.tapad.com/", - "companyId": "telenor" - }, - "tapinfluence": { - "name": "TapInfluence", - "categoryId": 4, - "url": "http://theblogfrog.com/", - "companyId": "tapinfluence" - }, - "tarafdari": { - "name": "Tarafdari", - "categoryId": 4, - "url": "https://www.tarafdari.com/", - "companyId": "tarafdari" - }, - "target_2_sell": { - "name": "Target 2 Sell", - "categoryId": 4, - "url": "http://www.target2sell.com/en/", - "companyId": "target_2_sell" - }, - "target_circle": { - "name": "Target Circle", - "categoryId": 6, - "url": "http://targetcircle.com", - "companyId": "target_circle" - }, - "target_fuel": { - "name": "Target Fuel", - "categoryId": 6, - "url": "http://targetfuel.com/", - "companyId": "target_fuel" - }, - "tawk": { - "name": "Tawk", - "categoryId": 2, - "url": "https://www.tawk.to/", - "companyId": "tawk" - }, - "tbn.ru": { - "name": "TBN.ru", - "categoryId": 4, - "url": "http://www.agava.ru", - "companyId": "agava" - }, - "tchibo_de": { - "name": "tchibo.de", - "categoryId": 8, - "url": "http://tchibo.de/", - "companyId": null - }, - "tdsrmbl_net": { - "name": "tdsrmbl.net", - "categoryId": 8, - "url": null, - "companyId": null - }, - "teads": { - "name": "Teads", - "categoryId": 4, - "url": "http://teads.tv/", - "companyId": "teads" - }, - "tealeaf": { - "name": "Tealeaf", - "categoryId": 6, - "url": "https://www.ibm.com/digital-marketing", - "companyId": "ibm" - }, - "tealium": { - "name": "Tealium", - "categoryId": 5, - "url": "http://www.tealium.com/", - "companyId": "tealium" - }, - "teaser.cc": { - "name": "Teaser.cc", - "categoryId": 4, - "url": "http://www.teaser.cc/", - "companyId": "teaser.cc" - }, - "tedemis": { - "name": "Tedemis", - "categoryId": 4, - "url": "http://www.tedemis.com", - "companyId": "tedemis" - }, - "teletech": { - "name": "TeleTech", - "categoryId": 4, - "url": "http://www.webmetro.com/whoweare/technology.aspx", - "companyId": "teletech" - }, - "telstra": { - "name": "Telstra", - "categoryId": 8, - "url": "https://www.telstra.com.au/", - "companyId": "telstra", - "source": "AdGuard" - }, - "tender": { - "name": "Tender", - "categoryId": 2, - "url": "http://www.tenderapp.com/", - "companyId": "tender" - }, - "tensitionschoo.club": { - "name": "tensitionschoo.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "teroti": { - "name": "Teroti", - "categoryId": 4, - "url": "http://www.teroti.com/", - "companyId": "teroti" - }, - "terren": { - "name": "Terren", - "categoryId": 4, - "url": "http://www.webterren.com/", - "companyId": "terren" - }, - "teufel.de": { - "name": "teufel.de", - "categoryId": 8, - "url": "https://www.teufel.de/", - "companyId": null - }, - "the_adex": { - "name": "The ADEX", - "categoryId": 4, - "url": "http://www.theadex.com/", - "companyId": "prosieben_sat1" - }, - "the_deck": { - "name": "The DECK", - "categoryId": 4, - "url": "http://decknetwork.net/", - "companyId": "the_deck" - }, - "the_guardian": { - "name": "The Guardian", - "categoryId": 8, - "url": "https://www.theguardian.com/", - "companyId": "the_guardian" - }, - "the_reach_group": { - "name": "The Reach Group", - "categoryId": 4, - "url": "http://www.redvertisment.com", - "companyId": "the_reach_group" - }, - "the_search_agency": { - "name": "The Search Agency", - "categoryId": 4, - "url": "http://www.thesearchagency.com/", - "companyId": "the_search_agency" - }, - "the_sun": { - "name": "The Sun", - "categoryId": 8, - "url": "https://www.thesun.co.uk/", - "companyId": "the_sun" - }, - "the_weather_company": { - "name": "The Weather Company", - "categoryId": 4, - "url": "http://www.theweathercompany.com/", - "companyId": "ibm" - }, - "themoviedb": { - "name": "The Movie DB", - "categoryId": 8, - "url": "https://www.themoviedb.org/", - "companyId": "themoviedb" - }, - "thinglink": { - "name": "ThingLink", - "categoryId": 4, - "url": "http://www.thinglink.com/", - "companyId": "thinglink" - }, - "threatmetrix": { - "name": "ThreatMetrix", - "categoryId": 6, - "url": "http://threatmetrix.com/", - "companyId": "threatmetrix" - }, - "tidbit": { - "name": "Tidbit", - "categoryId": 2, - "url": "http://tidbit.co.in/", - "companyId": "tidbit" - }, - "tidio": { - "name": "Tidio", - "categoryId": 2, - "url": "https://www.tidio.com/", - "companyId": "tidio_chat" - }, - "tiktok_analytics": { - "name": "TikTok Analytics", - "categoryId": 6, - "url": "https://analytics.tiktok.com", - "companyId": "bytedance_inc" - }, - "tiller": { - "name": "Tiller", - "categoryId": 4, - "url": "https://www.tiller.com/", - "companyId": "tiller" - }, - "timezondb": { - "name": "TimezonDB", - "categoryId": 4, - "url": "https://timezonedb.com/", - "companyId": "timezonedb" - }, - "tinypass": { - "name": "Piano", - "categoryId": 5, - "url": "https://piano.io/", - "companyId": "piano" - }, - "tisoomi": { - "name": "Tisoomi", - "categoryId": 4, - "url": "https://tisoomi-services.com/", - "companyId": null - }, - "tlv_media": { - "name": "TLV Media", - "categoryId": 4, - "url": "http://www.tlvmedia.com", - "companyId": "tlvmedia" - }, - "tns": { - "name": "TNS", - "categoryId": 6, - "url": "http://www.tnsglobal.com/", - "companyId": "wpp" - }, - "tomnewsupdate.info": { - "name": "tomnewsupdate.info", - "categoryId": 12, - "url": null, - "companyId": null - }, - "tomorrow_focus": { - "name": "Tomorrow Focus", - "categoryId": 4, - "url": "http://www.tomorrow-focus.com", - "companyId": "hubert_burda_media" - }, - "tonefuse": { - "name": "ToneFuse", - "categoryId": 4, - "url": "http://www.tonefuse.com/", - "companyId": "tonefuse" - }, - "top_mail": { - "name": "Top Mail", - "categoryId": 6, - "url": "https://corp.megafon.com/", - "companyId": "megafon" - }, - "toplist.cz": { - "name": "toplist.cz", - "categoryId": 11, - "url": null, - "companyId": null - }, - "toponclick_com": { - "name": "toponclick.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "topsy": { - "name": "Topsy", - "categoryId": 4, - "url": "http://topsy.com/", - "companyId": "topsy" - }, - "torbit": { - "name": "Torbit", - "categoryId": 6, - "url": "http://torbit.com/", - "companyId": "torbit" - }, - "toro": { - "name": "TORO", - "categoryId": 4, - "url": "http://toroadvertising.com/", - "companyId": "toro_advertising" - }, - "tororango.com": { - "name": "tororango.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "total_media": { - "name": "Total Media", - "categoryId": 4, - "url": "http://www.totalmedia.co.il/eng/", - "companyId": "total_media" - }, - "touchcommerce": { - "name": "Nuance", - "categoryId": 2, - "url": "https://www.nuance.com/omni-channel-customer-engagement/digital.html", - "companyId": "touchcommerce" - }, - "tovarro.com": { - "name": "Tovarro", - "categoryId": 4, - "url": "https://www.tovarro.com/", - "companyId": null - }, - "tp-cdn.com": { - "name": "TrialPay", - "categoryId": 4, - "url": "https://www.trialpay.com/", - "companyId": null - }, - "tracc.it": { - "name": "Kiwe.io", - "categoryId": 6, - "url": "https://www.kiwe.io/", - "companyId": null - }, - "tracemyip": { - "name": "TraceMyIP", - "categoryId": 4, - "url": "http://www.tracemyip.org/", - "companyId": "tracemyip" - }, - "traceview": { - "name": "TraceView", - "categoryId": 6, - "url": "http://www.appneta.com/", - "companyId": "appneta" - }, - "track_duck": { - "name": "Track Duck", - "categoryId": 6, - "url": "https://trackduck.com/", - "companyId": "track_duck" - }, - "trackjs": { - "name": "TrackJS", - "categoryId": 6, - "url": "http://www.trackjs.com/", - "companyId": "trackjs" - }, - "trackset_conversionlab": { - "name": "Trackset ConversionLab", - "categoryId": 4, - "url": "http://www.trackset.com/", - "companyId": "trackset" - }, - "trackuity": { - "name": "Trackuity", - "categoryId": 2, - "url": "http://www.trackuity.com/", - "companyId": "trackuity" - }, - "tradedesk": { - "name": "TradeDesk", - "categoryId": 4, - "url": "http://www.thetradedesk.com/", - "companyId": "the_trade_desk" - }, - "tradedoubler": { - "name": "TradeDoubler", - "categoryId": 4, - "url": "http://www.tradedoubler.com/", - "companyId": "tradedoubler" - }, - "tradelab": { - "name": "Tradelab", - "categoryId": 4, - "url": "http://www.tradelab.fr/", - "companyId": "tradelab" - }, - "tradetracker": { - "name": "TradeTracker", - "categoryId": 4, - "url": "http://www.tradetracker.com", - "companyId": "tradetracker" - }, - "traffective": { - "name": "Traffective", - "categoryId": 4, - "url": "https://traffective.com/", - "companyId": null - }, - "traffic_fuel": { - "name": "Traffic Fuel", - "categoryId": 4, - "url": "https://trafficfuel.com/", - "companyId": "traffic_fuel" - }, - "traffic_revenue": { - "name": "Traffic Revenue", - "categoryId": 4, - "url": "http://www.trafficrevenue.net/", - "companyId": "traffic_revenue" - }, - "traffic_stars": { - "name": "Traffic Stars", - "categoryId": 3, - "url": "https://trafficstars.com/#index_page", - "companyId": "traffic_stars" - }, - "trafficbroker": { - "name": "TrafficBroker", - "categoryId": 4, - "url": "http://trafficbroker.com/", - "companyId": "trafficbroker" - }, - "trafficfabrik.com": { - "name": "Traffic Fabrik", - "categoryId": 3, - "url": "https://www.trafficfabrik.com/", - "companyId": null - }, - "trafficfactory": { - "name": "Traffic Factory", - "categoryId": 4, - "url": "https://www.trafficfactory.biz/", - "companyId": null - }, - "trafficforce": { - "name": "TrafficForce", - "categoryId": 4, - "url": "http://www.trafficforce.com/", - "companyId": "trafficforce" - }, - "traffichaus": { - "name": "TrafficHaus", - "categoryId": 3, - "url": "http://www.traffichaus.com", - "companyId": "traffichaus" - }, - "trafficjunky": { - "name": "TrafficJunky", - "categoryId": 3, - "url": "http://www.trafficjunky.net/", - "companyId": "trafficjunky" - }, - "traffiliate": { - "name": "Traffiliate", - "categoryId": 4, - "url": "http://www.traffiliate.com/", - "companyId": "dsnr_media_group" - }, - "trafic": { - "name": "Trafic", - "categoryId": 6, - "url": "http://www.trafic.ro/", - "companyId": "trafic" - }, - "trafmag.com": { - "name": "TrafMag", - "categoryId": 4, - "url": "https://trafmag.com/", - "companyId": "trafmag" - }, - "transcend": { - "name": "Transcend Consent", - "categoryId": 14, - "url": "https://transcend.io/consent/", - "companyId": "transcend" - }, - "transcend_telemetry": { - "name": "Transcend Telemetry", - "categoryId": 6, - "url": "https://transcend.io", - "companyId": "transcend" - }, - "transmatic": { - "name": "Transmatic", - "categoryId": 6, - "url": "http://www.transmatico.com/en/", - "companyId": "transmatico" - }, - "travel_audience": { - "name": "Travel Audience", - "categoryId": 6, - "url": "https://travelaudience.com/", - "companyId": "travel_audience" - }, - "trbo": { - "name": "trbo", - "categoryId": 4, - "url": "http://www.trbo.com/", - "companyId": "trbo" - }, - "treasuredata": { - "name": "Treasure Data", - "categoryId": 6, - "url": "https://www.treasuredata.com/", - "companyId": "arm" - }, - "tremor_video": { - "name": "Tremor Video", - "categoryId": 0, - "url": "http://www.tremormedia.com/", - "companyId": "tremor_video" - }, - "trendcounter": { - "name": "trendcounter", - "categoryId": 6, - "url": "http://www.trendcounter.com/", - "companyId": "trendcounter" - }, - "trendemon": { - "name": "TrenDemon", - "categoryId": 6, - "url": "http://trendemon.com", - "companyId": "trendemon" - }, - "tribal_fusion": { - "name": "Tribal Fusion", - "categoryId": 4, - "url": "http://www.tribalfusion.com/", - "companyId": "exponential_interactive" - }, - "tribal_fusion_notice": { - "name": "Tribal Fusion Notice", - "categoryId": 4, - "url": "http://www.tribalfusion.com", - "companyId": "exponential_interactive" - }, - "triblio": { - "name": "Triblio", - "categoryId": 6, - "url": "https://triblio.com/", - "companyId": "triblio" - }, - "trigger_mail_marketing": { - "name": "Trigger Mail Marketing", - "categoryId": 4, - "url": "http://www.triggeremailmarketing.com/", - "companyId": "trigger_mail_marketing" - }, - "triggerbee": { - "name": "Triggerbee", - "categoryId": 2, - "url": "https://triggerbee.com/", - "companyId": "triggerbee" - }, - "tripadvisor": { - "name": "TripAdvisor", - "categoryId": 8, - "url": "http://iac.com/", - "companyId": "iac_apps" - }, - "triplelift": { - "name": "TripleLift", - "categoryId": 4, - "url": "http://triplelift.com/", - "companyId": "triplelift" - }, - "triptease": { - "name": "Triptease", - "categoryId": 2, - "url": "https://www.triptease.com", - "companyId": "triptease" - }, - "triton_digital": { - "name": "Triton Digital", - "categoryId": 0, - "url": "http://www.tritondigital.com/", - "companyId": "triton_digital" - }, - "trovus_revelations": { - "name": "Trovus Revelations", - "categoryId": 4, - "url": "http://www.trovus.co.uk/", - "companyId": "trovus_revelations" - }, - "trsv3.com": { - "name": "trsv3.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "true_fit": { - "name": "True Fit", - "categoryId": 4, - "url": "https://www.truefit.com/", - "companyId": "true_fit" - }, - "trueanthem": { - "name": "True Anthem", - "categoryId": 4, - "url": "https://www.trueanthem.com/", - "companyId": "trueanthem" - }, - "trueffect": { - "name": "TruEffect", - "categoryId": 4, - "url": "http://www.trueffect.com/", - "companyId": "trueffect" - }, - "truehits.net": { - "name": "Truehits.net", - "categoryId": 6, - "url": "http://truehits.net/", - "companyId": "truehits.net" - }, - "trumba": { - "name": "Trumba", - "categoryId": 4, - "url": "http://www.trumba.com", - "companyId": "trumba" - }, - "truoptik": { - "name": "Tru Optik", - "categoryId": 6, - "url": "http://truoptik.com/", - "companyId": null - }, - "trustarc": { - "name": "TrustArc", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_consent": { - "name": "Truste Consent", - "categoryId": 5, - "url": "http://www.trustarc.com/", - "companyId": "trustarc" - }, - "truste_notice": { - "name": "TRUSTe Notice", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "truste_seal": { - "name": "TRUSTe Seal", - "categoryId": 5, - "url": "http://www.truste.com/", - "companyId": "trustarc" - }, - "trusted_shops": { - "name": "Trusted Shops", - "categoryId": 5, - "url": "http://www.trustedshops.com/", - "companyId": "trusted_shops" - }, - "trustev": { - "name": "Trustev", - "categoryId": 6, - "url": "http://www.trustev.com/", - "companyId": "trustev" - }, - "trustlogo": { - "name": "TrustLogo", - "categoryId": 5, - "url": "http://www.comodo.com/", - "companyId": "comodo" - }, - "trustpilot": { - "name": "Trustpilot", - "categoryId": 2, - "url": "http://www.trustpilot.com", - "companyId": "trustpilot" - }, - "trustwave.com": { - "name": "Trustwave", - "categoryId": 8, - "url": "https://www.trustwave.com/home/", - "companyId": null - }, - "tubecorporate": { - "name": "Tube Corporate", - "categoryId": 3, - "url": "https://tubecorporate.com/", - "companyId": null - }, - "tubecup.org": { - "name": "tubecup.org", - "categoryId": 3, - "url": null, - "companyId": null - }, - "tubemogul": { - "name": "TubeMogul", - "categoryId": 4, - "url": "http://tubemogul.com/", - "companyId": "tubemogul" - }, - "tumblr_analytics": { - "name": "Tumblr Analytics", - "categoryId": 6, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "tumblr_buttons": { - "name": "Tumblr Buttons", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tumblr_dashboard": { - "name": "Tumblr Dashboard", - "categoryId": 7, - "url": "http://www.tumblr.com/", - "companyId": "verizon" - }, - "tune_in": { - "name": "Tune In", - "categoryId": 0, - "url": "http://tunein.com/", - "companyId": "tunein" - }, - "turbo": { - "name": "Turbo", - "categoryId": 4, - "url": "http://www.turboadv.com/", - "companyId": "turbo" - }, - "turn_inc.": { - "name": "Turn Inc.", - "categoryId": 4, - "url": "https://www.amobee.com/company/", - "companyId": "singtel" - }, - "turner": { - "name": "Warner Media", - "categoryId": 6, - "url": "https://www.warnermedia.com/", - "companyId": "turner" - }, - "turnsocial": { - "name": "TurnSocial", - "categoryId": 7, - "url": "http://turnsocial.com/", - "companyId": "turnsocial" - }, - "turnto": { - "name": "TurnTo", - "categoryId": 2, - "url": "http://www.turntonetworks.com/", - "companyId": "turnto_networks" - }, - "tvsquared.com": { - "name": "TVSquared", - "categoryId": 4, - "url": "http://tvsquared.com/", - "companyId": "tvsquared" - }, - "tweetboard": { - "name": "Tweetboard", - "categoryId": 7, - "url": "http://tweetboard.com/alpha/", - "companyId": "tweetboard" - }, - "tweetmeme": { - "name": "TweetMeme", - "categoryId": 7, - "url": "http://tweetmeme.com/", - "companyId": "tweetmeme" - }, - "twenga": { - "name": "Twenga Solutions", - "categoryId": 4, - "url": "https://www.twenga-solutions.com/", - "companyId": null - }, - "twiago": { - "name": "Twiago", - "categoryId": 4, - "url": "https://www.twiago.com/", - "companyId": "twiago" - }, - "twine": { - "name": "Twine", - "categoryId": 6, - "url": "http://twinedigital.com/", - "companyId": "twine_digital" - }, - "twitch.tv": { - "name": "Twitch", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitch_cdn": { - "name": "Twitch CDN", - "categoryId": 0, - "url": "https://www.twitch.tv/", - "companyId": "amazon_associates" - }, - "twitter": { - "name": "X (formerly Twitter)", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter", - "source": "AdGuard" - }, - "twitter_ads": { - "name": "Twitter Advertising", - "categoryId": 4, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_analytics": { - "name": "Twitter Analytics", - "categoryId": 6, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twitter_badge": { - "name": "Twitter Badge", - "categoryId": 7, - "url": "http://twitter.com/widgets", - "companyId": "twitter" - }, - "twitter_button": { - "name": "Twitter Button", - "categoryId": 7, - "url": "http://twitter.com", - "companyId": "twitter" - }, - "twitter_conversion_tracking": { - "name": "Twitter Conversion Tracking", - "categoryId": 4, - "url": "https://twitter.com/", - "companyId": "twitter" - }, - "twitter_for_business": { - "name": "Twitter for Business", - "categoryId": 4, - "url": "https://business.twitter.com/", - "companyId": "twitter" - }, - "twitter_syndication": { - "name": "Twitter Syndication", - "categoryId": 7, - "url": "https://twitter.com", - "companyId": "twitter" - }, - "twittercounter": { - "name": "TwitterCounter", - "categoryId": 6, - "url": "http://twittercounter.com/", - "companyId": "twitter_counter" - }, - "twyn": { - "name": "Twyn", - "categoryId": 4, - "url": "http://www.twyn.com", - "companyId": "twyn" - }, - "txxx.com": { - "name": "txxx.com", - "categoryId": 8, - "url": "https://txxx.com", - "companyId": null - }, - "tynt": { - "name": "33Across", - "categoryId": 4, - "url": "http://www.tynt.com/", - "companyId": "33across" - }, - "typeform": { - "name": "Typeform", - "categoryId": 2, - "url": "https://www.typeform.com/", - "companyId": null - }, - "typepad_stats": { - "name": "Typepad Stats", - "categoryId": 6, - "url": "http://www.typepad.com/features/statistics.ht", - "companyId": "typepad" - }, - "typography.com": { - "name": "Webfonts by Hoefler&Co", - "categoryId": 9, - "url": "https://www.typography.com/", - "companyId": null - }, - "tyroo": { - "name": "Tyroo", - "categoryId": 7, - "url": "http://www.tyroo.com/", - "companyId": "tyroo" - }, - "tzetze": { - "name": "TzeTze", - "categoryId": 2, - "url": "http://www.tzetze.it/", - "companyId": "tzetze" - }, - "ubersetzung-app.com": { - "name": "ubersetzung-app.com", - "categoryId": 12, - "url": "https://www.ubersetzung-app.com/", - "companyId": null - }, - "ubuntu": { - "name": "Ubuntu", - "categoryId": 8, - "url": "https://ubuntu.com/", - "companyId": "canonical", - "source": "AdGuard" - }, - "ucfunnel": { - "name": "ucfunnel", - "categoryId": 4, - "url": "https://www.ucfunnel.com/", - "companyId": "ucfunnel" - }, - "ucoz": { - "name": "uCoz", - "categoryId": 6, - "url": "http://www.ucoz.net/", - "companyId": "ucoz" - }, - "uliza": { - "name": "Uliza", - "categoryId": 4, - "url": "http://uliza.jp/index.html", - "companyId": "uliza" - }, - "umbel": { - "name": "Umbel", - "categoryId": 6, - "url": "http://umbel.com", - "companyId": "umbel" - }, - "umebiggestern.club": { - "name": "umebiggestern.club", - "categoryId": 11, - "url": null, - "companyId": null - }, - "unanimis": { - "name": "Unanimis", - "categoryId": 4, - "url": "http://www.unanimis.co.uk/", - "companyId": "switch_concepts" - }, - "unbounce": { - "name": "Unbounce", - "categoryId": 6, - "url": "http://unbounce.com/", - "companyId": "unbounce" - }, - "unbxd": { - "name": "UNBXD", - "categoryId": 6, - "url": "http://unbxd.com/", - "companyId": "unbxd" - }, - "under-box.com": { - "name": "under-box.com", - "categoryId": 12, - "url": null, - "companyId": null - }, - "undercomputer.com": { - "name": "undercomputer.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "underdog_media": { - "name": "Underdog Media", - "categoryId": 4, - "url": "http://www.underdogmedia.com", - "companyId": "underdog_media" - }, - "undertone": { - "name": "Undertone", - "categoryId": 4, - "url": "https://www.undertone.com/", - "companyId": "perion" - }, - "unica": { - "name": "Unica", - "categoryId": 2, - "url": "http://www.unica.com/", - "companyId": "ibm" - }, - "unister": { - "name": "Unister", - "categoryId": 6, - "url": "http://www.unister.de/", - "companyId": "unister" - }, - "unite": { - "name": "Unite", - "categoryId": 4, - "url": "http://unite.me/#", - "companyId": "unite" - }, - "united_digital_group": { - "name": "United Digital Group", - "categoryId": 4, - "url": "https://www.udg.de/", - "companyId": "united_digital_group" - }, - "united_internet_media_gmbh": { - "name": "United Internet Media GmbH", - "categoryId": 4, - "url": "https://www.united-internet.de/", - "companyId": "united_internet" - }, - "unity": { - "name": "Unity", - "categoryId": 8, - "url": "https://unity.com/", - "companyId": "unity", - "source": "AdGuard" - }, - "unity_ads": { - "name": "Unity Ads", - "categoryId": 4, - "url": "https://unity.com/products/unity-ads", - "companyId": "unity", - "source": "AdGuard" - }, - "univide": { - "name": "Univide", - "categoryId": 4, - "url": "http://www.oracle.com/", - "companyId": "oracle" - }, - "unpkg.com": { - "name": "unpkg", - "categoryId": 9, - "url": "https://unpkg.com/#/", - "companyId": null - }, - "unruly_media": { - "name": "Unruly Media", - "categoryId": 4, - "url": "http://www.unrulymedia.com/", - "companyId": "unruly" - }, - "untriel_finger_printing": { - "name": "Untriel Finger Printing", - "categoryId": 6, - "url": "https://www.untriel.nl/", - "companyId": "untriel" - }, - "upland_clickability_beacon": { - "name": "Upland Clickability Beacon", - "categoryId": 4, - "url": "http://www.clickability.com/", - "companyId": "upland_software" - }, - "uppr.de": { - "name": "uppr GmbH", - "categoryId": 4, - "url": "https://uppr.de/", - "companyId": null - }, - "upravel.com": { - "name": "upravel.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "upsellit": { - "name": "UpSellit", - "categoryId": 2, - "url": "http://www.upsellit.com", - "companyId": "upsellit" - }, - "upsight": { - "name": "Upsight", - "categoryId": 6, - "url": "http://www.upsight.com/", - "companyId": "upsight" - }, - "uptain": { - "name": "Uptain", - "categoryId": 6, - "url": "http://www.uptain.de/en/regaining-lost-customers/", - "companyId": "uptain" - }, - "uptolike.com": { - "name": "Uptolike", - "categoryId": 7, - "url": "https://www.uptolike.com/", - "companyId": "uptolike" - }, - "uptrends": { - "name": "Uptrends", - "categoryId": 6, - "url": "http://www.uptrends.com/", - "companyId": "uptrends" - }, - "urban-media.com": { - "name": "Urban Media GmbH", - "categoryId": 4, - "url": "https://www.urban-media.com/", - "companyId": null - }, - "urban_airship": { - "name": "Urban Airship", - "categoryId": 6, - "url": "https://www.urbanairship.com/", - "companyId": "urban_airship" - }, - "usability_tools": { - "name": "Usability Tools", - "categoryId": 6, - "url": "http://usabilitytools.com/", - "companyId": "usability_tools" - }, - "usabilla": { - "name": "Usabilla", - "categoryId": 2, - "url": "https://usabilla.com/", - "companyId": "usabilla" - }, - "usemax": { - "name": "Usemax", - "categoryId": 4, - "url": "http://www.usemax.de", - "companyId": "usemax" - }, - "usemessages.com": { - "name": "usemessages.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "usercycle": { - "name": "USERcycle", - "categoryId": 6, - "url": "http://usercycle.com/", - "companyId": "usercycle" - }, - "userdive": { - "name": "USERDIVE", - "categoryId": 6, - "url": "http://userdive.com/", - "companyId": "userdive" - }, - "userecho": { - "name": "UserEcho", - "categoryId": 2, - "url": "http://userecho.com", - "companyId": "userecho" - }, - "userlike.com": { - "name": "Userlike", - "categoryId": 2, - "url": "https://www.userlike.com/", - "companyId": "userlike" - }, - "userpulse": { - "name": "UserPulse", - "categoryId": 2, - "url": "http://www.userpulse.com/", - "companyId": "userpulse" - }, - "userreplay": { - "name": "UserReplay", - "categoryId": 6, - "url": "https://www.userreplay.com/", - "companyId": "userreplay" - }, - "userreport": { - "name": "UserReport", - "categoryId": 2, - "url": "http://www.userreport.com/", - "companyId": "userreport" - }, - "userrules": { - "name": "UserRules", - "categoryId": 2, - "url": "http://www.userrules.com/", - "companyId": "userrules_software" - }, - "usersnap": { - "name": "Usersnap", - "categoryId": 2, - "url": "http://usersnap.com/", - "companyId": "usersnap" - }, - "uservoice": { - "name": "UserVoice", - "categoryId": 2, - "url": "http://uservoice.com/", - "companyId": "uservoice" - }, - "userzoom.com": { - "name": "UserZoom", - "categoryId": 2, - "url": "https://www.userzoom.com/", - "companyId": "userzoom" - }, - "usocial": { - "name": "Usocial", - "categoryId": 7, - "url": "https://usocial.pro/en", - "companyId": "usocial" - }, - "utarget": { - "name": "uTarget", - "categoryId": 4, - "url": "http://utarget.ru/", - "companyId": "utarget" - }, - "uuidksinc.net": { - "name": "uuidksinc.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "v12_group": { - "name": "V12 Group", - "categoryId": 6, - "url": null, - "companyId": null - }, - "vacaneedasap.com": { - "name": "vacaneedasap.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "valassis": { - "name": "Valassis", - "categoryId": 4, - "url": "http://www.brand.net/", - "companyId": "valassis" - }, - "validclick": { - "name": "ValidClick", - "categoryId": 4, - "url": "http://inuvo.com/", - "companyId": "inuvo" - }, - "valiton": { - "name": "Valiton", - "categoryId": 4, - "url": "https://www.valiton.com/", - "companyId": "hubert_burda_media" - }, - "valueclick_media": { - "name": "ValueClick Media", - "categoryId": 4, - "url": "https://www.conversantmedia.eu/", - "companyId": "conversant" - }, - "valuecommerce": { - "name": "ValueCommerce", - "categoryId": 4, - "url": "https://www.valuecommerce.ne.jp", - "companyId": "valuecommerce" - }, - "valued_opinions": { - "name": "Valued Opinions", - "categoryId": 4, - "url": "http://valuedopinions.com", - "companyId": "valued_opinions" - }, - "vanksen": { - "name": "Vanksen", - "categoryId": 4, - "url": "http://www.buzzparadise.com/", - "companyId": "vanksen" - }, - "varick_media_management": { - "name": "Varick Media Management", - "categoryId": 4, - "url": "http://www.varickmm.com/", - "companyId": "varick_media_management" - }, - "vcita": { - "name": "Vcita", - "categoryId": 6, - "url": "https://www.vcita.com/", - "companyId": "vcita" - }, - "vcommission": { - "name": "vCommission", - "categoryId": 4, - "url": "http://www.vcommission.com/", - "companyId": "vcommission" - }, - "vdopia": { - "name": "Vdopia", - "categoryId": 4, - "url": "http://mobile.vdopia.com/", - "companyId": "vdopia" - }, - "ve_interactive": { - "name": "Ve Interactive", - "categoryId": 4, - "url": "https://www.veinteractive.com", - "companyId": "ve_interactive" - }, - "vee24": { - "name": "VEE24", - "categoryId": 0, - "url": "https://www.vee24.com/", - "companyId": "vee24" - }, - "velocecdn.com": { - "name": "velocecdn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "velti_mgage_visualize": { - "name": "Velti mGage Visualize", - "categoryId": 4, - "url": "http://www.velti.com/", - "companyId": "velti" - }, - "vendemore": { - "name": "Vendemore", - "categoryId": 1, - "url": "https://vendemore.com/", - "companyId": "ratos" - }, - "venturead.com": { - "name": "venturead.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "venyoo": { - "name": "Venyoo", - "categoryId": 2, - "url": "http://venyoo.ru/", - "companyId": "venyoo" - }, - "veoxa": { - "name": "Veoxa", - "categoryId": 4, - "url": "http://www.veoxa.com/", - "companyId": "veoxa" - }, - "vergic.com": { - "name": "Vergic", - "categoryId": 1, - "url": "https://www.vergic.com/", - "companyId": null - }, - "vero": { - "name": "Vero", - "categoryId": 4, - "url": "http://www.getvero.com/", - "companyId": "vero" - }, - "vertical_acuity": { - "name": "Vertical Acuity", - "categoryId": 4, - "url": "http://www.verticalacuity.com/", - "companyId": "outbrain" - }, - "vertical_leap": { - "name": "Vertical Leap", - "categoryId": 4, - "url": "http://www.vertical-leap.co.uk/", - "companyId": "vertical_leap" - }, - "verticalresponse": { - "name": "VerticalResponse", - "categoryId": 4, - "url": "http://www.verticalresponse.com", - "companyId": "verticalresponse" - }, - "verticalscope": { - "name": "VerticalScope", - "categoryId": 4, - "url": "http://www.verticalscope.com", - "companyId": "verticalscope" - }, - "vertoz": { - "name": "Vertoz", - "categoryId": 4, - "url": "http://www.vertoz.com/", - "companyId": "vertoz" - }, - "veruta": { - "name": "Veruta", - "categoryId": 4, - "url": "http://www.veruta.com/", - "companyId": "veruta" - }, - "verve_mobile": { - "name": "Verve Mobile", - "categoryId": 4, - "url": "http://www.vervemobile.com/", - "companyId": "verve_mobile" - }, - "vg_wort": { - "name": "VG Wort", - "categoryId": 6, - "url": "https://tom.vgwort.de/portal/showHelp", - "companyId": "vg_wort" - }, - "vi": { - "name": "Vi", - "categoryId": 4, - "url": "http://www.vi.ru/", - "companyId": "vi" - }, - "viacom_tag_container": { - "name": "Viacom Tag Container", - "categoryId": 4, - "url": "http://www.viacom.com/", - "companyId": "viacom" - }, - "viafoura": { - "name": "Viafoura", - "categoryId": 4, - "url": "http://www.viafoura.com/", - "companyId": "viafoura" - }, - "vibrant_ads": { - "name": "Vibrant Ads", - "categoryId": 4, - "url": "http://www.vibrantmedia.com/", - "companyId": "vibrant_media" - }, - "vicomi.com": { - "name": "Vicomi", - "categoryId": 6, - "url": "http://www.vicomi.com/", - "companyId": "vicomi" - }, - "vidazoo.com": { - "name": "Vidazoo", - "categoryId": 4, - "url": "https://www.vidazoo.com/", - "companyId": null - }, - "video_desk": { - "name": "Video Desk", - "categoryId": 0, - "url": "https://www.videodesk.com/", - "companyId": "video_desk" - }, - "video_potok": { - "name": "Video Potok", - "categoryId": 0, - "url": "http://videopotok.pro/", - "companyId": "videopotok" - }, - "videoadex.com": { - "name": "VideoAdX", - "categoryId": 4, - "url": "https://www.videoadex.com/", - "companyId": "digiteka" - }, - "videology": { - "name": "Videology", - "categoryId": 4, - "url": "https://videologygroup.com/", - "companyId": "singtel" - }, - "videonow": { - "name": "VideoNow", - "categoryId": 4, - "url": "https://videonow.ru/", - "companyId": "videonow" - }, - "videoplayerhub.com": { - "name": "videoplayerhub.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "videoplaza": { - "name": "Videoplaza", - "categoryId": 4, - "url": "http://www.videoplaza.com/", - "companyId": "videoplaza" - }, - "videostep": { - "name": "VideoStep", - "categoryId": 4, - "url": "https://www.videostep.com/", - "companyId": "videostep" - }, - "vidgyor": { - "name": "Vidgyor", - "categoryId": 0, - "url": "http://vidgyor.com/", - "companyId": "vidgyor" - }, - "vidible": { - "name": "Vidible", - "categoryId": 4, - "url": "http://vidible.tv/", - "companyId": "verizon" - }, - "vidora": { - "name": "Vidora", - "categoryId": 0, - "url": "https://www.vidora.com/", - "companyId": "vidora" - }, - "vietad": { - "name": "VietAd", - "categoryId": 4, - "url": "http://vietad.vn/", - "companyId": "vietad" - }, - "viglink": { - "name": "VigLink", - "categoryId": 4, - "url": "http://www.viglink.com", - "companyId": "viglink" - }, - "vigo": { - "name": "Vigo", - "categoryId": 6, - "url": "https://vigo.one/", - "companyId": "vigo" - }, - "vimeo": { - "name": "Vimeo", - "categoryId": 0, - "url": "http://vimeo.com/", - "companyId": "vimeo" - }, - "vindico_group": { - "name": "Vindico Group", - "categoryId": 4, - "url": "http://www.vindicogroup.com/", - "companyId": "vindico_group" - }, - "vinted": { - "name": "Vinted", - "categoryId": 8, - "url": "https://www.vinted.com/", - "companyId": null - }, - "viral_ad_network": { - "name": "Viral Ad Network", - "categoryId": 4, - "url": "http://viraladnetwork.joinvan.com/", - "companyId": "viral_ad_network" - }, - "viral_loops": { - "name": "Viral Loops", - "categoryId": 2, - "url": "https://viral-loops.com/", - "companyId": "viral-loops" - }, - "viralgains": { - "name": "ViralGains", - "categoryId": 4, - "url": "https://www.viralgains.com/", - "companyId": null - }, - "viralmint": { - "name": "ViralMint", - "categoryId": 7, - "url": "http://www.viralmint.com", - "companyId": "viralmint" - }, - "virgul": { - "name": "Virgul", - "categoryId": 4, - "url": "http://www.virgul.com/", - "companyId": "virgul" - }, - "virool_player": { - "name": "Virool Player", - "categoryId": 4, - "url": "https://www.virool.com/", - "companyId": "virool" - }, - "virtusize": { - "name": "Virtusize", - "categoryId": 5, - "url": "http://www.virtusize.com/", - "companyId": "virtusize" - }, - "visible_measures": { - "name": "Visible Measures", - "categoryId": 4, - "url": "http://www.visiblemeasures.com/", - "companyId": "visible_measures" - }, - "vision_critical": { - "name": "Vision Critical", - "categoryId": 6, - "url": "http://visioncritical.com/", - "companyId": "vision_critical" - }, - "visit_streamer": { - "name": "Visit Streamer", - "categoryId": 6, - "url": "http://www.visitstreamer.com/", - "companyId": "visit_streamer" - }, - "visitortrack": { - "name": "VisitorTrack", - "categoryId": 4, - "url": "http://www.netfactor.com/", - "companyId": "netfactor" - }, - "visitorville": { - "name": "VisitorVille", - "categoryId": 6, - "url": "http://www.visitorville.com", - "companyId": "visitorville" - }, - "visscore": { - "name": "VisScore", - "categoryId": 4, - "url": "http://withcubed.com/", - "companyId": "cubed_attribution" - }, - "visual_iq": { - "name": "Visual IQ", - "categoryId": 6, - "url": "http://visualiq.com/", - "companyId": "visualiq" - }, - "visual_revenue": { - "name": "Visual Revenue", - "categoryId": 6, - "url": "http://visualrevenue.com/", - "companyId": "outbrain" - }, - "visual_website_optimizer": { - "name": "VWO", - "categoryId": 6, - "url": "https://vwo.com/", - "companyId": "wingify" - }, - "visualdna": { - "name": "VisualDNA", - "categoryId": 4, - "url": "http://www.visualdna.com/", - "companyId": "nielsen" - }, - "visualstudio.com": { - "name": "Visualstudio.com", - "categoryId": 8, - "url": "https://www.visualstudio.com/", - "companyId": "microsoft" - }, - "visualvisitor": { - "name": "VisualVisitor", - "categoryId": 6, - "url": "http://www.visualvisitor.com/", - "companyId": "visualvisitor" - }, - "vivalu": { - "name": "VIVALU", - "categoryId": 4, - "url": "https://www.vivalu.com/", - "companyId": "vivalu" - }, - "vivistats": { - "name": "ViviStats", - "categoryId": 6, - "url": "http://en.vivistats.com/", - "companyId": "vivistats" - }, - "vizury": { - "name": "Vizury", - "categoryId": 4, - "url": "http://www.vizury.com/website/", - "companyId": "vizury" - }, - "vizzit": { - "name": "Vizzit", - "categoryId": 4, - "url": "http://www.vizzit.se/h/en/", - "companyId": "vizzit" - }, - "vk.com": { - "name": "Vk.com", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vkontakte": { - "name": "VKontakte", - "categoryId": 7, - "url": "https://vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vkontakte_widgets": { - "name": "VKontakte Widgets", - "categoryId": 7, - "url": "https://dev.vk.com/", - "companyId": "vk", - "source": "AdGuard" - }, - "vntsm.com": { - "name": "Venatus Media", - "categoryId": 4, - "url": "https://www.venatusmedia.com/", - "companyId": "venatus" - }, - "vodafone.de": { - "name": "vodafone.de", - "categoryId": 8, - "url": null, - "companyId": null - }, - "voicefive": { - "name": "VoiceFive", - "categoryId": 6, - "url": "https://www.voicefive.com", - "companyId": "comscore" - }, - "volusion_chat": { - "name": "Volusion Chat", - "categoryId": 2, - "url": "https://www.volusion.com/", - "companyId": "volusion" - }, - "voluum": { - "name": "Voluum", - "categoryId": 4, - "url": "https://voluum.com/", - "companyId": "codewise" - }, - "vooxe.com": { - "name": "vooxe.com", - "categoryId": 8, - "url": "http://www.vooxe.com/", - "companyId": null - }, - "vorwerk.de": { - "name": "vorwerk.de", - "categoryId": 8, - "url": "https://corporate.vorwerk.de/home/", - "companyId": null - }, - "vox": { - "name": "Vox", - "categoryId": 2, - "url": "https://www.voxmedia.com/", - "companyId": "vox" - }, - "voxus": { - "name": "Voxus", - "categoryId": 4, - "url": "http://www.voxus.tv/", - "companyId": "voxus" - }, - "vpon": { - "name": "VPON", - "categoryId": 4, - "url": "http://www.vpon.com/en/", - "companyId": "vpon" - }, - "vpscash": { - "name": "VPSCash", - "categoryId": 4, - "url": "http://vpscash.nl/home", - "companyId": "vps_cash" - }, - "vs": { - "name": "Visual Studio", - "categoryId": 8, - "url": "https://visualstudio.microsoft.com", - "companyId": "microsoft", - "source": "AdGuard" - }, - "vscode": { - "name": "Visual Studio Code", - "categoryId": 8, - "url": "https://code.visualstudio.com/", - "companyId": "microsoft", - "source": "AdGuard" - }, - "vtracy.de": { - "name": "vtracy.de", - "categoryId": 11, - "url": null, - "companyId": null - }, - "vungle": { - "name": "Vungle", - "categoryId": 4, - "url": "https://vungle.com/", - "companyId": "blackstone", - "source": "AdGuard" - }, - "vuukle": { - "name": "Vuukle", - "categoryId": 6, - "url": "http://vuukle.com/", - "companyId": "vuukle" - }, - "vzaar": { - "name": "Vzaar", - "categoryId": 0, - "url": "http://vzaar.com/", - "companyId": "vzaar" - }, - "w3counter": { - "name": "W3Counter", - "categoryId": 6, - "url": "http://www.w3counter.com/", - "companyId": "awio_web_services" - }, - "w3roi": { - "name": "w3roi", - "categoryId": 6, - "url": "http://www.w3roi.com/", - "companyId": "w3roi" - }, - "wahoha": { - "name": "Wahoha", - "categoryId": 2, - "url": "http://wahoha.com/", - "companyId": "wahoha" - }, - "walkme.com": { - "name": "WalkMe", - "categoryId": 2, - "url": "https://www.walkme.com/", - "companyId": "walkme" - }, - "wall_street_on_demand": { - "name": "Wall Street on Demand", - "categoryId": 4, - "url": "http://www.wallst.com", - "companyId": "markit_on_demand" - }, - "walmart": { - "name": "Walmart", - "categoryId": 8, - "url": null, - "companyId": null - }, - "wamcash": { - "name": "Wamcash", - "categoryId": 3, - "url": "http://wamcash.com/", - "companyId": "wamcash" - }, - "wanelo": { - "name": "Wanelo", - "categoryId": 2, - "url": "https://wanelo.com/", - "companyId": "wanelo" - }, - "warp.ly": { - "name": "Warp.ly", - "categoryId": 6, - "url": "https://warp.ly/", - "companyId": "warp.ly" - }, - "way2traffic": { - "name": "Way2traffic", - "categoryId": 4, - "url": "http://www.way2traffic.com/", - "companyId": "way2traffic" - }, - "wayfair_com": { - "name": "Wayfair", - "categoryId": 8, - "url": "https://www.wayfair.com/", - "companyId": null - }, - "wdr.de": { - "name": "wdr.de", - "categoryId": 8, - "url": "https://www1.wdr.de/index.html", - "companyId": null - }, - "web-stat": { - "name": "Web-Stat", - "categoryId": 6, - "url": "http://www.web-stat.net/", - "companyId": "web-stat" - }, - "web.de": { - "name": "web.de", - "categoryId": 8, - "url": "https://web.de/", - "companyId": null - }, - "web.stat": { - "name": "Web.STAT", - "categoryId": 6, - "url": "http://webstat.net/", - "companyId": "web.stat" - }, - "web_service_award": { - "name": "Web Service Award", - "categoryId": 6, - "url": "http://webserviceaward.com/english/", - "companyId": "web_service_award" - }, - "web_traxs": { - "name": "Web Traxs", - "categoryId": 6, - "url": "http://websolutions.thomasnet.com/web-traxs-analytics.php", - "companyId": "thomasnet_websolutions" - }, - "web_wipe_analytics": { - "name": "Web Wipe Analytics", - "categoryId": 6, - "url": "http://tensquare.de", - "companyId": "tensquare" - }, - "webads": { - "name": "WebAds", - "categoryId": 4, - "url": "http://www.webads.co.uk/", - "companyId": "webads" - }, - "webantenna": { - "name": "WebAntenna", - "categoryId": 6, - "url": "http://www.bebit.co.jp/webantenna/", - "companyId": "webantenna" - }, - "webclicks24_com": { - "name": "webclicks24.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "webclose.net": { - "name": "webclose.net", - "categoryId": 12, - "url": null, - "companyId": null - }, - "webcollage": { - "name": "Webcollage", - "categoryId": 2, - "url": "http://www.webcollage.com/", - "companyId": "webcollage" - }, - "webedia": { - "name": "Webedia", - "categoryId": 4, - "url": "http://fr.webedia-group.com/", - "companyId": "fimalac_group" - }, - "webeffective": { - "name": "WebEffective", - "categoryId": 6, - "url": "http://www.keynote.com/", - "companyId": "keynote_systems" - }, - "webengage": { - "name": "WebEngage", - "categoryId": 2, - "url": "http://webengage.com/", - "companyId": "webengage" - }, - "webgains": { - "name": "Webgains", - "categoryId": 8, - "url": null, - "companyId": null - }, - "webgozar": { - "name": "WebGozar", - "categoryId": 6, - "url": "http://webgozar.com/", - "companyId": "webgozar" - }, - "webhelpje": { - "name": "Webhelpje", - "categoryId": 2, - "url": "http://www.webhelpje.nl/", - "companyId": "webhelpje" - }, - "webleads_tracker": { - "name": "Webleads Tracker", - "categoryId": 6, - "url": "http://www.webleads-tracker.fr/", - "companyId": "webleads_tracker" - }, - "webmecanik": { - "name": "Webmecanik", - "categoryId": 6, - "url": "http://www.webmecanik.com/en/", - "companyId": "webmecanik" - }, - "weborama": { - "name": "Weborama", - "categoryId": 4, - "url": "https://weborama.com/", - "companyId": "weborama" - }, - "webprospector": { - "name": "WebProspector", - "categoryId": 6, - "url": "http://www.webprospector.de/", - "companyId": "webprospector" - }, - "webstat": { - "name": "WebSTAT", - "categoryId": 6, - "url": "http://www.webstat.com/", - "companyId": "webstat" - }, - "webstat.se": { - "name": "Webstat.se", - "categoryId": 6, - "url": "http://www.webstat.se/", - "companyId": "webstat.se" - }, - "webtrack": { - "name": "webtrack", - "categoryId": 6, - "url": "http://www.webtrack.biz/", - "companyId": "webtrack" - }, - "webtraffic": { - "name": "Webtraffic", - "categoryId": 6, - "url": "http://www.webtraffic.se/", - "companyId": "schibsted_asa" - }, - "webtrekk": { - "name": "Webtrekk", - "categoryId": 6, - "url": "http://www.webtrekk.com/", - "companyId": "webtrekk" - }, - "webtrekk_cc": { - "name": "Webtrek Control Cookie", - "categoryId": 6, - "url": "https://www.webtrekk.com/en/home/", - "companyId": "webtrekk" - }, - "webtrends": { - "name": "Webtrends", - "categoryId": 6, - "url": "http://www.webtrends.com/", - "companyId": "webtrends" - }, - "webtrends_ads": { - "name": "Webtrends Ads", - "categoryId": 4, - "url": "http://www.webtrends.com", - "companyId": "webtrends" - }, - "webvisor": { - "name": "WebVisor", - "categoryId": 6, - "url": "http://webvisor.ru", - "companyId": "yandex" - }, - "wedcs": { - "name": "WEDCS", - "categoryId": 4, - "url": "https://www.microsoft.com/", - "companyId": "microsoft" - }, - "weebly_ads": { - "name": "Weebly Ads", - "categoryId": 4, - "url": "http://www.weebly.com", - "companyId": "weebly" - }, - "weibo_widget": { - "name": "Weibo Widget", - "categoryId": 4, - "url": "http://www.sina.com/", - "companyId": "sina" - }, - "westlotto_com": { - "name": "westlotto.com", - "categoryId": 8, - "url": "http://westlotto.com/", - "companyId": null - }, - "wetter_com": { - "name": "Wetter.com", - "categoryId": 8, - "url": "http://www.wetter.com/", - "companyId": null - }, - "whatbroadcast": { - "name": "Whatbroadcast", - "categoryId": 2, - "url": "https://www.whatsbroadcast.com/", - "companyId": "whatsbroadcast" - }, - "whatsapp": { - "name": "WhatsApp", - "categoryId": 8, - "url": "https://www.whatsapp.com/", - "companyId": "meta", - "source": "AdGuard" - }, - "whisper": { - "name": "Whisper", - "categoryId": 7, - "url": "https://whisper.sh/", - "companyId": "medialab", - "source": "AdGuard" - }, - "whos.amung.us": { - "name": "Whos.amung.us", - "categoryId": 6, - "url": "http://whos.amung.us/", - "companyId": "whos.amung.us" - }, - "whoson": { - "name": "WhosOn", - "categoryId": 6, - "url": "http://www.whoson.com/", - "companyId": "whoson" - }, - "wibbitz": { - "name": "Wibbitz", - "categoryId": 0, - "url": "http://www.wibbitz.com/", - "companyId": "wibbitz" - }, - "wibiya_toolbar": { - "name": "Wibiya Toolbar", - "categoryId": 7, - "url": "http://www.wibiya.com/", - "companyId": "wibiya" - }, - "widdit": { - "name": "Widdit", - "categoryId": 2, - "url": "http://www.predictad.com/", - "companyId": "widdit" - }, - "widerplanet": { - "name": "WiderPlanet", - "categoryId": 4, - "url": "http://widerplanet.com/", - "companyId": "wider_planet" - }, - "widespace": { - "name": "Widespace", - "categoryId": 4, - "url": "https://www.widespace.com/", - "companyId": "widespace" - }, - "widgetbox": { - "name": "WidgetBox", - "categoryId": 2, - "url": "http://www.widgetbox.com/", - "companyId": "widgetbox" - }, - "wiget_media": { - "name": "Wiget Media", - "categoryId": 4, - "url": "http://wigetmedia.com", - "companyId": "wiget_media" - }, - "wigzo": { - "name": "Wigzo", - "categoryId": 4, - "url": "https://www.wigzo.com/", - "companyId": "wigzo" - }, - "wikia-services.com": { - "name": "Wikia Services", - "categoryId": 8, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikia_beacon": { - "name": "Wikia Beacon", - "categoryId": 6, - "url": "http://www.wikia.com/", - "companyId": "wikia" - }, - "wikia_cdn": { - "name": "Wikia CDN", - "categoryId": 9, - "url": "http://www.wikia.com/fandom", - "companyId": "wikia" - }, - "wikimedia.org": { - "name": "WikiMedia", - "categoryId": 9, - "url": "https://wikimediafoundation.org/", - "companyId": "wikimedia_foundation" - }, - "winaffiliates": { - "name": "Winaffiliates", - "categoryId": 6, - "url": "http://www.winaffiliates.com/", - "companyId": "winaffiliates" - }, - "windows_maps": { - "name": "Windows Maps", - "categoryId": 8, - "url": "https://www.microsoft.com/store/apps/9wzdncrdtbvb", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windows_notifications": { - "name": "The Windows Push Notification Services", - "categoryId": 8, - "url": "https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/windows-push-notification-services--wns--overview", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windows_time": { - "name": "Windows Time Service", - "categoryId": 8, - "url": "https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/how-the-windows-time-service-works", - "companyId": "microsoft", - "source": "AdGuard" - }, - "windowsupdate": { - "name": "Windows Update", - "categoryId": 9, - "url": "https://support.microsoft.com/en-us/windows/windows-update-faq-8a903416-6f45-0718-f5c7-375e92dddeb2", - "companyId": "microsoft", - "source": "AdGuard" - }, - "wipmania": { - "name": "WIPmania", - "categoryId": 6, - "url": "http://www.wipmania.com/", - "companyId": "wipmania" - }, - "wiqhit": { - "name": "WiQhit", - "categoryId": 6, - "url": "https://wiqhit.com/nl/", - "companyId": "wiqhit" - }, - "wirecard": { - "name": "Wirecard", - "categoryId": 2, - "url": "https://www.wirecard.com/", - "companyId": null - }, - "wiredminds": { - "name": "WiredMinds", - "categoryId": 6, - "url": "http://www.wiredminds.de/", - "companyId": "wiredminds" - }, - "wirtualna_polska": { - "name": "Wirtualna Polska", - "categoryId": 4, - "url": "http://reklama.wp.pl/", - "companyId": "wirtualna_polska" - }, - "wisepops": { - "name": "WisePops", - "categoryId": 4, - "url": "http://wisepops.com/", - "companyId": "wisepops" - }, - "wishpond": { - "name": "Wishpond", - "categoryId": 2, - "url": "http://wishpond.com", - "companyId": "wishpond" - }, - "wistia": { - "name": "Wistia", - "categoryId": 6, - "url": "http://wistia.com/", - "companyId": "wistia" - }, - "wix.com": { - "name": "Wix", - "categoryId": 8, - "url": "https://www.wix.com/", - "companyId": "wix" - }, - "wixab": { - "name": "Wixab", - "categoryId": 6, - "url": "http://wixab.com/en/", - "companyId": "wixab" - }, - "wixmp": { - "name": "Wix Media Platform", - "categoryId": 9, - "url": "https://www.wixmp.com/", - "companyId": "wix" - }, - "wnzmauurgol.com": { - "name": "wnzmauurgol.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "wonderpush": { - "name": "WonderPush", - "categoryId": 2, - "url": "https://www.wonderpush.com/", - "companyId": "wonderpush" - }, - "woopic.com": { - "name": "woopic.com", - "categoryId": 8, - "url": null, - "companyId": null - }, - "woopra": { - "name": "Woopra", - "categoryId": 6, - "url": "http://www.woopra.com/", - "companyId": "woopra" - }, - "wordpress_ads": { - "name": "Wordpress Ads", - "categoryId": 4, - "url": "https://wordpress.com/", - "companyId": "automattic" - }, - "wordpress_stats": { - "name": "WordPress Stats", - "categoryId": 6, - "url": "http://wordpress.org/extend/plugins/stats/", - "companyId": "automattic" - }, - "wordstream": { - "name": "WordStream", - "categoryId": 6, - "url": "http://www.wordstream.com/", - "companyId": "wordstream" - }, - "worldnaturenet_xyz": { - "name": "worldnaturenet.xyz", - "categoryId": 12, - "url": null, - "companyId": null - }, - "wp.pl": { - "name": "Wirtualna Polska ", - "categoryId": 4, - "url": "https://www.wp.pl/", - "companyId": "wp" - }, - "wp_engine": { - "name": "WP Engine", - "categoryId": 5, - "url": "https://wpengine.com/", - "companyId": "wp_engine" - }, - "writeup_clickanalyzer": { - "name": "WriteUp ClickAnalyzer", - "categoryId": 6, - "url": "http://www.writeup.co.jp/", - "companyId": "writeup" - }, - "wurfl": { - "name": "WURFL", - "categoryId": 6, - "url": "https://web.wurfl.io/", - "companyId": "scientiamobile" - }, - "wwwpromoter": { - "name": "WWWPromoter", - "categoryId": 4, - "url": "http://wwwpromoter.com/", - "companyId": "wwwpromoter" - }, - "wykop": { - "name": "Wykop", - "categoryId": 7, - "url": "http://www.wykop.pl", - "companyId": "wykop" - }, - "wysistat.com": { - "name": "WysiStat", - "categoryId": 6, - "url": "https://www.wysistat.net/", - "companyId": "wysistat" - }, - "wywy.com": { - "name": "wywy", - "categoryId": 4, - "url": "http://wywy.com/", - "companyId": "tvsquared" - }, - "x-lift": { - "name": "X-lift", - "categoryId": 4, - "url": "https://www.x-lift.jp/", - "companyId": "x-lift" - }, - "xapads": { - "name": "Xapads", - "categoryId": 4, - "url": "http://www.xapads.com/", - "companyId": "xapads" - }, - "xen-media.com": { - "name": "Xen Media", - "categoryId": 11, - "url": "https://www.xenmedia.net/", - "companyId": "xenmedia", - "source": "AdGuard" - }, - "xfreeservice.com": { - "name": "xfreeservice.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "xhamster": { - "name": "xHamster", - "categoryId": 3, - "url": "https://xhamster.com/", - "companyId": "xhamster", - "source": "AdGuard" - }, - "xiaomi": { - "name": "Xiaomi", - "categoryId": 8, - "url": "https://www.mi.com/", - "companyId": "xiaomi", - "source": "AdGuard" - }, - "xing": { - "name": "Xing", - "categoryId": 6, - "url": "http://www.xing.com/", - "companyId": "xing" - }, - "xmediaclicks": { - "name": "XmediaClicks", - "categoryId": 3, - "url": "http://exoclick.com/", - "companyId": "exoclick" - }, - "xnxx_cdn": { - "name": "XNXX", - "categoryId": 9, - "url": "https://www.xnxx.com", - "companyId": "xnxx", - "source": "AdGuard" - }, - "xplosion": { - "name": "xplosion", - "categoryId": 4, - "url": "http://www.xplosion.de/", - "companyId": "xplosion_interactive" - }, - "xtend": { - "name": "XTEND", - "categoryId": 4, - "url": "http://www.xtendmedia.com/", - "companyId": "matomy_media" - }, - "xvideos_com": { - "name": "Xvideos", - "categoryId": 8, - "url": "https://www.xvideos.com", - "companyId": "xvideos", - "source": "AdGuard" - }, - "xxxlshop.de": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz", - "source": "AdGuard" - }, - "xxxlutz": { - "name": "XXXLutz", - "categoryId": 8, - "url": "https://www.xxxlutz.de/", - "companyId": "xxxlutz" - }, - "yabbi": { - "name": "Yabbi", - "categoryId": 4, - "url": "https://yabbi.me/", - "companyId": "yabbi", - "source": "AdGuard" - }, - "yabuka": { - "name": "Yabuka", - "categoryId": 4, - "url": "http://www.yabuka.com/", - "companyId": "yabuka" - }, - "yahoo": { - "name": "Yahoo!", - "categoryId": 6, - "url": "https://yahoo.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_ad_exchange": { - "name": "Yahoo! Ad Exchange", - "categoryId": 4, - "url": "https://www.verizonmedia.com/advertising", - "companyId": "verizon" - }, - "yahoo_ad_manager": { - "name": "Yahoo! Ad Manager Plus", - "categoryId": 4, - "url": "https://developer.yahoo.com/analytics/", - "companyId": "verizon" - }, - "yahoo_advertising": { - "name": "Yahoo! Advertising", - "categoryId": 4, - "url": "https://www.advertising.yahooinc.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_analytics": { - "name": "Yahoo! Analytics", - "categoryId": 6, - "url": "http://web.analytics.yahoo.com/", - "companyId": "verizon" - }, - "yahoo_commerce_central": { - "name": "Yahoo! Commerce Central", - "categoryId": 4, - "url": "http://lexity.com/", - "companyId": "verizon" - }, - "yahoo_dot_tag": { - "name": "Yahoo! DOT tag", - "categoryId": 4, - "url": "https://www.verizon.com/", - "companyId": "verizon" - }, - "yahoo_japan_retargeting": { - "name": "Yahoo! Japan Retargeting", - "categoryId": 4, - "url": "http://www.yahoo.com/", - "companyId": "yahoo_japan" - }, - "yahoo_overture": { - "name": "Yahoo! Overture", - "categoryId": 4, - "url": "http://searchmarketing.yahoo.com", - "companyId": "verizon" - }, - "yahoo_search": { - "name": "Yahoo! Search", - "categoryId": 4, - "url": "https://search.yahooinc.com/", - "companyId": "apollo_global_management", - "source": "AdGuard" - }, - "yahoo_small_business": { - "name": "Yahoo! Small Business", - "categoryId": 4, - "url": "http://www.pixazza.com/", - "companyId": "verizon" - }, - "yandex": { - "name": "Yandex", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex.api": { - "name": "Yandex.API", - "categoryId": 2, - "url": "http://api.yandex.ru/", - "companyId": "yandex" - }, - "yandex_adexchange": { - "name": "Yandex AdExchange", - "categoryId": 4, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yandex_advisor": { - "name": "Yandex.Advisor", - "categoryId": 12, - "url": "https://sovetnik.yandex.ru/", - "companyId": "yandex" - }, - "yandex_appmetrica": { - "name": "Yandex AppMetrica", - "categoryId": 101, - "url": "https://appmetrica.yandex.com/", - "companyId": "yandex", - "source": "AdGuard" - }, - "yandex_direct": { - "name": "Yandex.Direct", - "categoryId": 6, - "url": "https://direct.yandex.com/", - "companyId": "yandex" - }, - "yandex_metrika": { - "name": "Yandex Metrika", - "categoryId": 6, - "url": "https://metrica.yandex.com/", - "companyId": "yandex" - }, - "yandex_passport": { - "name": "Yandex Passport", - "categoryId": 2, - "url": "https://www.yandex.com/", - "companyId": "yandex" - }, - "yapfiles.ru": { - "name": "yapfiles.ru", - "categoryId": 8, - "url": "https://www.yapfiles.ru/", - "companyId": null - }, - "yashi": { - "name": "Yashi", - "categoryId": 4, - "url": "http://www.yashi.com/", - "companyId": "mass2" - }, - "ybrant_media": { - "name": "Ybrant Media", - "categoryId": 4, - "url": "http://www.addynamix.com/index.html", - "companyId": "ybrant_media" - }, - "ycontent": { - "name": "Ycontent", - "categoryId": 0, - "url": "http://ycontent.com.br/", - "companyId": "ycontent" - }, - "yektanet": { - "name": "Yektanet", - "categoryId": 4, - "url": "https://yektanet.com/", - "companyId": "yektanet" - }, - "yengo": { - "name": "Yengo", - "categoryId": 4, - "url": "http://www.yengo.com/", - "companyId": "yengo" - }, - "yesmail": { - "name": "Yesmail", - "categoryId": 4, - "url": "http://www.yesmail.com/", - "companyId": "yes_mail" - }, - "yesup_advertising": { - "name": "YesUp Advertising", - "categoryId": 4, - "url": "http://yesup.net/", - "companyId": "yesup" - }, - "yesware": { - "name": "Yesware", - "categoryId": 2, - "url": "http://www.yesware.com/", - "companyId": "yesware" - }, - "yieldbot": { - "name": "Yieldbot", - "categoryId": 6, - "url": "https://www.yieldbot.com/", - "companyId": "yieldbot" - }, - "yieldify": { - "name": "Yieldify", - "categoryId": 4, - "url": "http://www.yieldify.com/", - "companyId": "yieldify" - }, - "yieldlab": { - "name": "Yieldlab", - "categoryId": 4, - "url": "http://www.yieldlab.de/", - "companyId": "prosieben_sat1" - }, - "yieldlove": { - "name": "Yieldlove", - "categoryId": 4, - "url": "https://www.yieldlove.com/", - "companyId": "yieldlove" - }, - "yieldmo": { - "name": "Yieldmo", - "categoryId": 4, - "url": "https://www.yieldmo.com/", - "companyId": "yieldmo" - }, - "yieldr": { - "name": "Yieldr Ads", - "categoryId": 4, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldr_air": { - "name": "Yieldr Air", - "categoryId": 6, - "url": "https://www.yieldr.com/", - "companyId": "yieldr" - }, - "yieldsquare": { - "name": "YieldSquare", - "categoryId": 4, - "url": "http://www.yieldsquare.com/", - "companyId": "yieldsquare" - }, - "yle": { - "name": "YLE", - "categoryId": 6, - "url": "http://yle.fi/", - "companyId": "yle" - }, - "yllixmedia": { - "name": "YllixMedia", - "categoryId": 4, - "url": "http://yllix.com/", - "companyId": "yllixmedia" - }, - "ymetrica1.com": { - "name": "ymetrica1.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "ymzrrizntbhde.com": { - "name": "ymzrrizntbhde.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "yo_button": { - "name": "Yo Button", - "categoryId": 2, - "url": "http://www.justyo.co/", - "companyId": "yo" - }, - "yodle": { - "name": "Yodle", - "categoryId": 4, - "url": "http://www.yodle.com/", - "companyId": "yodle" - }, - "yola_analytics": { - "name": "Yola Analytics", - "categoryId": 6, - "url": "https://www.yola.com/", - "companyId": "yola" - }, - "yomedia": { - "name": "Yomedia", - "categoryId": 4, - "url": "http://www.pinetech.vn/", - "companyId": "yomedia" - }, - "yoochoose.net": { - "name": "Ibexa Personalizaton Software", - "categoryId": 4, - "url": "https://yoochoose.net/", - "companyId": "ibexa", - "source": "AdGuard" - }, - "yotpo": { - "name": "Yotpo", - "categoryId": 1, - "url": "https://www.yotpo.com/", - "companyId": "yotpo" - }, - "yottaa": { - "name": "Yottaa", - "categoryId": 6, - "url": "https://www.yottaa.com/", - "companyId": "yottaa" - }, - "yottly": { - "name": "Yottly", - "categoryId": 4, - "url": "https://yottly.com/", - "companyId": "yottly" - }, - "youcanbookme": { - "name": "YouCanBookMe", - "categoryId": 2, - "url": "https://youcanbook.me/", - "companyId": "youcanbookme" - }, - "youku": { - "name": "Youku", - "categoryId": 0, - "url": "http://www.youku.com/", - "companyId": "youku" - }, - "youporn": { - "name": "YouPorn", - "categoryId": 3, - "url": "https://www.youporn.com/", - "companyId": "youporn", - "source": "AdGuard" - }, - "youtube": { - "name": "YouTube", - "categoryId": 0, - "url": "https://www.youtube.com/", - "companyId": "google" - }, - "youtube_subscription": { - "name": "YouTube Subscription", - "categoryId": 2, - "url": "http://www.youtube.com/", - "companyId": "google" - }, - "yp": { - "name": "YellowPages", - "categoryId": 4, - "url": "https://www.yellowpages.com/", - "companyId": "thryv" - }, - "ysance": { - "name": "YSance", - "categoryId": 4, - "url": "http://www.ysance.com/en/index.html", - "companyId": "ysance" - }, - "yume": { - "name": "YuMe", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yume,_inc.": { - "name": "YuMe, Inc.", - "categoryId": 4, - "url": "http://www.yume.com/", - "companyId": "yume" - }, - "yusp": { - "name": "Yusp", - "categoryId": 6, - "url": "https://www.yusp.com/", - "companyId": "yusp" - }, - "zadarma": { - "name": "Zadarma", - "categoryId": 2, - "url": "https://zadarma.com/", - "companyId": "zadarma" - }, - "zalando_de": { - "name": "zalando.de", - "categoryId": 8, - "url": "https://zalando.de/", - "companyId": "zalando" - }, - "zalo": { - "name": "Zalo", - "categoryId": 2, - "url": "https://zaloapp.com/", - "companyId": "zalo" - }, - "zanox": { - "name": "Zanox", - "categoryId": 4, - "url": "http://www.zanox.com/us/", - "companyId": "axel_springer" - }, - "zaparena": { - "name": "zaparena", - "categoryId": 4, - "url": "http://www.zaparena.com/", - "companyId": "zapunited" - }, - "zappos": { - "name": "Zappos", - "categoryId": 4, - "url": "http://www.zappos.com/", - "companyId": "zappos" - }, - "zdassets.com": { - "name": "Zendesk CDN", - "categoryId": 8, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zebestof.com": { - "name": "Zebestof", - "categoryId": 4, - "url": "http://www.zebestof.com/en/home/", - "companyId": "zebestof" - }, - "zedo": { - "name": "Zedo", - "categoryId": 4, - "url": "http://www.zedo.com/", - "companyId": "zedo" - }, - "zemanta": { - "name": "Zemanta", - "categoryId": 2, - "url": "http://www.zemanta.com/", - "companyId": "zemanta" - }, - "zencoder": { - "name": "Zencoder", - "categoryId": 0, - "url": "https://zencoder.com/en/", - "companyId": "zencoder" - }, - "zendesk": { - "name": "Zendesk", - "categoryId": 2, - "url": "http://www.zendesk.com/", - "companyId": "zendesk" - }, - "zergnet": { - "name": "ZergNet", - "categoryId": 2, - "url": "http://www.zergnet.com/info", - "companyId": "zergnet" - }, - "zero.kz": { - "name": "ZERO.kz", - "categoryId": 6, - "url": "http://zero.kz/", - "companyId": "neolabs_zero" - }, - "zeta": { - "name": "Zeta", - "categoryId": 2, - "url": "https://zetaglobal.com/", - "companyId": "zeta" - }, - "zeusclicks": { - "name": "ZeusClicks", - "categoryId": 4, - "url": "http://zeusclicks.com/", - "companyId": "zeusclicks", - "source": "AdGuard" - }, - "ziff_davis": { - "name": "Ziff Davis", - "categoryId": 4, - "url": "https://www.ziffdavis.com/", - "companyId": "ziff_davis" - }, - "zift_solutions": { - "name": "Zift Solutions", - "categoryId": 6, - "url": "https://ziftsolutions.com/", - "companyId": "zift_solutions" - }, - "zimbio.com": { - "name": "Zimbio", - "categoryId": 8, - "url": "http://www.zimbio.com/", - "companyId": "livinglymedia", - "source": "AdGuard" - }, - "zippyshare_widget": { - "name": "Zippyshare Widget", - "categoryId": 2, - "url": "http://www.zippyshare.com", - "companyId": "zippyshare" - }, - "zmags": { - "name": "Zmags", - "categoryId": 6, - "url": "https://zmags.com/", - "companyId": "zmags" - }, - "zmctrack.net": { - "name": "zmctrack.net", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zog.link": { - "name": "zog.link", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zoho": { - "name": "Zoho", - "categoryId": 6, - "url": "https://www.zohocorp.com/index.html", - "companyId": "zoho_corp" - }, - "zononi.com": { - "name": "zononi.com", - "categoryId": 3, - "url": null, - "companyId": null - }, - "zopim": { - "name": "Zopim", - "categoryId": 2, - "url": "http://www.zopim.com/", - "companyId": "zendesk" - }, - "zukxd6fkxqn.com": { - "name": "zukxd6fkxqn.com", - "categoryId": 11, - "url": null, - "companyId": null - }, - "zwaar": { - "name": "Zwaar", - "categoryId": 4, - "url": "http://www.zwaar.org", - "companyId": "zwaar" - }, - "zypmedia": { - "name": "ZypMedia", - "categoryId": 4, - "url": "http://www.zypmedia.com/", - "companyId": "zypmedia" - } - }, - "trackerDomains": { - "mmtro.com": "1000mercis", - "creative-serving.com": "161media", - "p161.net": "161media", - "analytics.163.com": "163", - "1822direkt.de": "1822direkt.de", - "1dmp.io": "1dmp.io", - "opecloud.com": "1plusx", - "1sponsor.com": "1sponsor", - "tm.dentsu.de": "1tag", - "1and1.com": "1und1", - "1und1.de": "1und1", - "uicdn.com": "1und1", - "website-start.de": "1und1", - "24-ads.com": "24-ads.com", - "247-inc.net": "24_7", - "d1af033869koo7.cloudfront.net": "24_7", - "counter.24log.ru": "24log", - "24smi.net": "24smi", - "24smi.org": "24smi", - "2leep.com": "2leep", - "33across.com": "33across", - "3dstats.com": "3dstats", - "3gpp.org": "3gpp", - "3gppnetwork.org": "3gpp", - "4cdn.org": "4chan", - "4finance.com": "4finance_com", - "4wnet.com": "4w_marketplace", - "d3aa0ztdn3oibi.cloudfront.net": "500friends", - "51.la": "51.la", - "5min.com": "5min_media", - "d1lm7kd3bd3yo9.cloudfront.net": "6sense", - "grepdata.com": "6sense", - "77tracking.com": "77tracking", - "swm.digital": "7plus", - "7tv.de": "7tv.de", - "888media.net": "888media", - "hit.8digits.com": "8digits", - "94j7afz2nr.xyz": "94j7afz2nr.xyz", - "statsanalytics.com": "99stats", - "a3cloud.net": "a3cloud_net", - "a8.net": "a8", - "aaxads.com": "aaxads.com", - "abtasty.com": "ab_tasty", - "d1447tq2m68ekg.cloudfront.net": "ab_tasty", - "ab.co": "abc", - "abc-cdn.net.au": "abc", - "abc-host.net": "abc", - "abc-host.net.au": "abc", - "abc-prod.net.au": "abc", - "abc-stage.net.au": "abc", - "abc-test.net.au": "abc", - "abc.net.au": "abc", - "abcaustralia.net.au": "abc", - "abcradio.net.au": "abc", - "ablida.de": "ablida", - "ablida.net": "ablida", - "durasite.net": "accelia", - "accengage.net": "accengage", - "ax.xrea.com": "accessanalyzer", - "accesstrade.net": "accesstrade", - "agcdn.com": "accord_group", - "accmgr.com": "accordant_media", - "p-td.com": "accuen_media", - "acestream.net": "acestream.net", - "acint.net": "acint.net", - "acloudimages.com": "acloudimages", - "acpm.fr": "acpm.fr", - "acquia.com": "acquia.com", - "ziyu.net": "acrweb", - "actionpay.ru": "actionpay", - "adnwb.ru": "actionpay", - "adonweb.ru": "actionpay", - "active-agent.com": "active_agent", - "trackcmp.net": "active_campaign", - "active-srv02.de": "active_performance", - "active-tracking.de": "active_performance", - "activeconversion.com": "activeconversion", - "a-cast.jp": "activecore", - "activemeter.com": "activemeter", - "go.activengage.com": "activengage", - "actonsoftware.com": "acton", - "acuityplatform.com": "acuity_ads", - "acxiom-online.com": "acxiom", - "acxiom.com": "acxiom", - "ad-blocker.org": "ad-blocker.org", - "ads.ad-center.com": "ad-center", - "ad-delivery.net": "ad-delivery.net", - "ad-sys.com": "ad-sys", - "adagionet.com": "ad.agio", - "ad2click.go2cloud.org": "ad2click", - "ad2games.com": "ad2games", - "ad360.vn": "ad360", - "ads.ad4game.com": "ad4game", - "ad4mat.ar": "ad4mat", - "ad4mat.at": "ad4mat", - "ad4mat.be": "ad4mat", - "ad4mat.bg": "ad4mat", - "ad4mat.br": "ad4mat", - "ad4mat.ch": "ad4mat", - "ad4mat.co.uk": "ad4mat", - "ad4mat.cz": "ad4mat", - "ad4mat.de": "ad4mat", - "ad4mat.dk": "ad4mat", - "ad4mat.es": "ad4mat", - "ad4mat.fi": "ad4mat", - "ad4mat.fr": "ad4mat", - "ad4mat.gr": "ad4mat", - "ad4mat.hu": "ad4mat", - "ad4mat.it": "ad4mat", - "ad4mat.mx": "ad4mat", - "ad4mat.net": "ad4mat", - "ad4mat.nl": "ad4mat", - "ad4mat.no": "ad4mat", - "ad4mat.pl": "ad4mat", - "ad4mat.ro": "ad4mat", - "ad4mat.ru": "ad4mat", - "ad4mat.se": "ad4mat", - "ad4mat.tr": "ad4mat", - "ad6.fr": "ad6media", - "ad6media.co.uk": "ad6media", - "ad6media.com": "ad6media", - "ad6media.es": "ad6media", - "ad6media.fr": "ad6media", - "a2dfp.net": "ad_decisive", - "addynamo.net": "ad_dynamo", - "ebis.ne.jp": "ad_ebis", - "adlightning.com": "ad_lightning", - "admagnet.net": "ad_magnet", - "amimg.net": "ad_magnet", - "adspirit.de": "ad_spirit", - "adspirit.net": "ad_spirit", - "adac.de": "adac_de", - "adacado.com": "adacado", - "ozonemedia.com": "adadyn", - "adrtx.net": "adality_gmbh", - "adalliance.io": "adalliance.io", - "adalyser.com": "adalyser.com", - "adaos-ads.net": "adaos", - "adap.tv": "adap.tv", - "smrtlnks.com": "adaptiveblue_smartlinks", - "yieldoptimizer.com": "adara_analytics", - "adnetwork.adasiaholdings.com": "adasia_holdings", - "adbetclickin.pink": "adbetclickin.pink", - "adbetnet.com": "adbetnet.com", - "adblade.com": "adblade.com", - "adbooth.com": "adbooth", - "adbooth.net": "adbooth", - "adbox.lv": "adbox", - "adbrn.com": "adbrain", - "adbrite.com": "adbrite", - "adbull.com": "adbull", - "adbutler.com": "adbutler", - "adc-serv.net": "adc_media", - "adc-srv.net": "adc_media", - "adcash.com": "adcash", - "vuroll.in": "adchakra", - "acs86.com": "adchina", - "csbew.com": "adchina", - "irs09.com": "adchina", - "adcito.com": "adcito", - "adcitomedia.com": "adcito", - "adclear.net": "adclear", - "swift.adclerks.com": "adclerks", - "adclickmedia.com": "adclickmedia", - "adclickzone.go2cloud.org": "adclickzone", - "ad-cloud.jp": "adcloud", - "admarvel.s3.amazonaws.com": "adcolony", - "ads.admarvel.com": "adcolony", - "adcolony.com": "adcolony", - "adrdgt.com": "adconion", - "amgdgt.com": "adconion", - "adcrowd.com": "adcrowd", - "shop2market.com": "adcurve", - "addtocalendar.com": "add_to_calendar", - "dpmsrv.com": "addaptive", - "yagiay.com": "addefend", - "addfreestats.com": "addfreestats", - "addinto.com": "addinto", - "addshoppers.com": "addshoppers", - "shop.pe": "addshoppers", - "addthis.com": "addthis", - "addthiscdn.com": "addthis", - "addthisedge.com": "addthis", - "b2btracking.addvalue.de": "addvalue", - "addyon.com": "addyon", - "adeasy.ru": "adeasy", - "ipredictive.com": "adelphic", - "adengage.com": "adengage", - "adespresso.com": "adespresso", - "adexcite.com": "adexcite", - "adextent.com": "adextent", - "adf.ly": "adf.ly", - "adfalcon.com": "adfalcon", - "adfoc.us": "adfocus", - "js.adforgames.com": "adforgames", - "adform.net": "adform", - "adformdsp.net": "adform", - "seadform.net": "adform", - "adfox.ru": "adfox", - "adwolf.ru": "adfox", - "adfreestyle.pl": "adfreestyle", - "adfront.org": "adfront", - "adfrontiers.com": "adfrontiers", - "adgebra.co.in": "adgebra", - "adgenie.co.uk": "adgenie", - "ad.adgile.com": "adgile", - "ad.antventure.com": "adgile", - "adglare.net": "adglare.net", - "adsafety.net": "adglue", - "smartadcheck.de": "adgoal", - "smartredirect.de": "adgoal", - "adgorithms.com": "adgorithms", - "adgoto.com": "adgoto", - "adguard.com": "adguard", - "adguard.app": "adguard", - "adguard.info": "adguard", - "adguard.io": "adguard", - "adguard.org": "adguard", - "adtidy.org": "adguard", - "agrd.io": "adguard", - "agrd.eu": "adguard", - "adguard-dns.com": "adguard_dns", - "adguard-dns.io": "adguard_dns", - "adguard-vpn.com": "adguard_vpn", - "adguard-vpn.online": "adguard_vpn", - "adguardvpn.com": "adguard_vpn", - "adhands.ru": "adhands", - "adhese.be": "adhese", - "adhese.com": "adhese", - "adhese.net": "adhese", - "adhitzads.com": "adhitz", - "adhood.com": "adhood", - "afy11.net": "adify", - "cdn.adikteev.com": "adikteev", - "adimpact.com": "adimpact", - "adinch.com": "adinch", - "adition.com": "adition", - "adjal.com": "adjal", - "cdn.adjs.net": "adjs", - "adjug.com": "adjug", - "adjust.com": "adjust", - "adj.st": "adjust", - "adjust.io": "adjust", - "adjust.net.in": "adjust", - "adjust.world": "adjust", - "apptrace.com": "adjust", - "adk2.com": "adk2", - "cdn.adsrvmedia.com": "adk2", - "cdn.cdnrl.com": "adk2", - "adklip.com": "adklip", - "adkengage.com": "adknowledge", - "adknowledge.com": "adknowledge", - "bidsystem.com": "adknowledge", - "blogads.com": "adknowledge", - "cubics.com": "adknowledge", - "yarpp.org": "adknowledge", - "adsearch.adkontekst.pl": "adkontekst", - "netsprint.eu": "adkontekst.pl", - "adlabs.ru": "adlabs", - "clickiocdn.com": "adlabs", - "luxup.ru": "adlabs", - "mixmarket.biz": "adlabs", - "ad-serverparc.nl": "adlantic", - "adimg.net": "adlantis", - "adlantis.jp": "adlantis", - "cdn.adless.io": "adless", - "api.publishers.adlive.io": "adlive_header_bidding", - "adlooxtracking.com": "adloox", - "adx1.com": "admachine", - "adman.gr": "adman", - "adman.in.gr": "adman", - "admanmedia.com": "adman_media", - "admantx.com": "admantx.com", - "admaster.net": "admaster", - "cdnmaster.com": "admaster", - "admaster.com.cn": "admaster.cn", - "admasterapi.com": "admaster.cn", - "admatic.com.tr": "admatic", - "ads5.admatic.com.tr": "admatic", - "cdn2.admatic.com.tr": "admatic", - "lib-3pas.admatrix.jp": "admatrix", - "admaxserver.com": "admax", - "admaxim.com": "admaxim", - "admaya.in": "admaya", - "admedia.com": "admedia", - "adizio.com": "admedo_com", - "admedo.com": "admedo_com", - "admeira.ch": "admeira.ch", - "admeld.com": "admeld", - "admeo.ru": "admeo", - "admaym.com": "admeta", - "atemda.com": "admeta", - "admicro.vn": "admicro", - "vcmedia.vn": "admicro", - "admitad.com": "admitad.com", - "admixer.net": "admixer", - "admixer.com": "admixer", - "admized.com": "admized", - "admo.tv": "admo.tv", - "a.admob.com": "admob", - "mm.admob.com": "admob", - "mmv.admob.com": "admob", - "p.admob.com": "admob", - "run.admost.com": "admost", - "dmmotion.com": "admotion", - "nspmotion.com": "admotion", - "admulti.com": "admulti", - "adnegah.net": "adnegah", - "adnet.vn": "adnet", - "adnet.biz": "adnet.de", - "adnet.de": "adnet.de", - "adclick.lt": "adnet_media", - "adnet.lt": "adnet_media", - "ad.adnetwork.net": "adnetwork.net", - "adnetworkperformance.com": "adnetworkperformance.com", - "adserver.adnexio.com": "adnexio", - "adnium.com": "adnium.com", - "heias.com": "adnologies", - "smaclick.com": "adnow", - "st-n.ads3-adnow.com": "adnow", - "adnymics.com": "adnymics", - "adobe.com": "adobe_audience_manager", - "demdex.net": "adobe_audience_manager", - "everestjs.net": "adobe_audience_manager", - "everesttech.net": "adobe_audience_manager", - "adobe.io": "adobe_developer", - "scene7.com": "adobe_dynamic_media", - "adobedtm.com": "adobe_dynamic_tag_management", - "2o7.net": "adobe_experience_cloud", - "du8783wkf05yr.cloudfront.net": "adobe_experience_cloud", - "hitbox.com": "adobe_experience_cloud", - "imageg.net": "adobe_experience_cloud", - "nedstat.com": "adobe_experience_cloud", - "omtrdc.net": "adobe_experience_cloud", - "sitestat.com": "adobe_experience_cloud", - "adobedc.net": "adobe_experience_league", - "adobelogin.com": "adobe_login", - "adobetag.com": "adobe_tagmanager", - "typekit.com": "adobe_typekit", - "typekit.net": "adobe_typekit", - "adocean.pl": "adocean", - "dmtry.com": "adometry", - "adomik.com": "adomik", - "adcde.com": "adon_network", - "addlvr.com": "adon_network", - "adfeedstrk.com": "adon_network", - "adtrgt.com": "adon_network", - "bannertgt.com": "adon_network", - "cptgt.com": "adon_network", - "cpvfeed.com": "adon_network", - "cpvtgt.com": "adon_network", - "mygeek.com": "adon_network", - "popcde.com": "adon_network", - "sdfje.com": "adon_network", - "urtbk.com": "adon_network", - "adonion.com": "adonion", - "t.adonly.com": "adonly", - "adoperator.com": "adoperator", - "adoric.com": "adoric", - "adorika.com": "adorika", - "adorika.net": "adorika", - "adosia.com": "adosia", - "adotmob.com": "adotmob.com", - "adotube.com": "adotube", - "adparlor.com": "adparlor", - "adparlour.com": "adparlor", - "a4p.adpartner.pro": "adpartner", - "adpeepshosted.com": "adpeeps", - "adperfect.com": "adperfect", - "adperium.com": "adperium", - "adpilot.at": "adpilot", - "erne.co": "adpilot", - "adplan-ds.com": "adplan", - "advg.jp": "adplan", - "c.p-advg.com": "adplan", - "adplus.co.id": "adplus", - "adprofex.com": "adprofex", - "ads2.bid": "adprofex", - "adframesrc.com": "adprofy", - "adserve.adpulse.ir": "adpulse", - "ads.adpv.com": "adpv", - "adreactor.com": "adreactor", - "adrecord.com": "adrecord", - "adrecover.com": "adrecover", - "ad.vcm.jp": "adresult", - "adresult.jp": "adresult", - "adriver.ru": "adriver", - "adroll.com": "adroll", - "adrom.net": "adrom", - "txt.eu": "adrom", - "adru.net": "adru.net", - "adrunnr.com": "adrunnr", - "adsame.com": "adsame", - "adsbookie.com": "adsbookie", - "adscale.de": "adscale", - "adscience.nl": "adscience", - "adsco.re": "adsco.re", - "adsensecamp.com": "adsensecamp", - "adserverpub.com": "adserverpub", - "online.adservicemedia.dk": "adservice_media", - "adsfactor.net": "adsfactor", - "ads.doclix.com": "adside", - "adskeeper.co.uk": "adskeeper", - "ssp.adskom.com": "adskom", - "adslot.com": "adslot", - "adsnative.com": "adsnative", - "adsniper.ru": "adsniper.ru", - "adspeed.com": "adspeed", - "adspeed.net": "adspeed", - "o333o.com": "adspyglass", - "adstage-analytics.herokuapp.com": "adstage", - "code.adstanding.com": "adstanding", - "adstars.co.id": "adstars", - "ad-stir.com": "adstir", - "4dsply.com": "adsupply", - "cdn.engine.adsupply.com": "adsupply", - "trklnks.com": "adsupply", - "adswizz.com": "adswizz", - "adtaily.com": "adtaily", - "adtaily.pl": "adtaily", - "adtarget.me": "adtarget.me", - "adtech.de": "adtech", - "adtechus.com": "adtech", - "adtegrity.net": "adtegrity", - "adtpix.com": "adtegrity", - "adtelligence.de": "adtelligence.de", - "adentifi.com": "adtheorent", - "adthink.com": "adthink", - "advertstream.com": "adthink", - "audienceinsights.net": "adthink", - "adtiger.de": "adtiger", - "adtimaserver.vn": "adtima", - "adtng.com": "adtng.com", - "adtoma.com": "adtoma", - "adtomafusion.com": "adtoma", - "adtr02.com": "adtr02.com", - "track.adtraction.com": "adtraction", - "adtraxx.de": "adtraxx", - "adtriba.com": "adtriba.com", - "adtrue.com": "adtrue", - "adtrustmedia.com": "adtrustmedia", - "ad.adtube.ir": "adtube", - "awempire.com": "adult_webmaster_empire", - "dditscdn.com": "adult_webmaster_empire", - "livejasmin.com": "adult_webmaster_empire", - "adultadworld.com": "adultadworld", - "adworldmedia.com": "adultadworld", - "adup-tech.com": "adup-tech.com", - "advaction.ru": "advaction", - "aucourant.info": "advaction", - "schetu.net": "advaction", - "dqfw2hlp4tfww.cloudfront.net": "advalo", - "ahcdn.com": "advanced_hosters", - "pix-cdn.org": "advanced_hosters", - "s3.advarkads.com": "advark", - "adventori.com": "adventori", - "adnext.fr": "adverline", - "adverline.com": "adverline", - "surinter.net": "adverline", - "adversaldisplay.com": "adversal", - "adversalservers.com": "adversal", - "go.adversal.com": "adversal", - "adverserve.net": "adverserve", - "ad.adverteerdirect.nl": "adverteerdirect", - "adverticum.net": "adverticum", - "advertise.com": "advertise.com", - "advertisespace.com": "advertisespace", - "adsdk.com": "advertising.com", - "advertising.com": "advertising.com", - "aol.com": "advertising.com", - "atwola.com": "advertising.com", - "pictela.net": "advertising.com", - "verizonmedia.com": "advertising.com", - "advertlets.com": "advertlets", - "advertserve.com": "advertserve", - "advidi.com": "advidi", - "am10.ru": "advmaker.ru", - "am15.net": "advmaker.ru", - "advolution.de": "advolution", - "adwebster.com": "adwebster", - "ads.adwitserver.com": "adwit", - "adworx.at": "adworx.at", - "adworxs.net": "adworxs.net", - "adxion.com": "adxion", - "adxpansion.com": "adxpansion", - "ads.adxpose.com": "adxpose", - "event.adxpose.com": "adxpose", - "servedby.adxpose.com": "adxpose", - "adxprtz.com": "adxprtz.com", - "adyoulike.com": "adyoulike", - "omnitagjs.com": "adyoulike", - "adzerk.net": "adzerk", - "adzly.com": "adzly", - "aemediatraffic.com": "aemediatraffic", - "hprofits.com": "aemediatraffic", - "amxdt.com": "aerify_media", - "aerisapi.com": "aeris_weather", - "aerisweather.com": "aeris_weather", - "affectv.com": "affectv", - "go.affec.tv": "affectv", - "hybridtheory.com": "affectv", - "affilbox.com": "affilbox", - "affilbox.cz": "affilbox", - "track.affiliate-b.com": "affiliate-b", - "affiliate4you.nl": "affiliate4you", - "ads.affbuzzads.com": "affiliatebuzz", - "affiliatefuture.com": "affiliatefuture", - "affiliatelounge.com": "affiliatelounge", - "affiliation-france.com": "affiliation_france", - "affiliator.com": "affiliator", - "affiliaweb.fr": "affiliaweb", - "banner-rotation.com": "affilinet", - "webmasterplan.com": "affilinet", - "affimax.de": "affimax", - "affinity.com": "affinity", - "countby.com": "affinity.by", - "affiz.net": "affiz_cpm", - "pml.afftrack.com": "afftrack", - "afgr2.com": "afgr2.com", - "v2.afilio.com.br": "afilio", - "afsanalytics.com": "afs_analystics", - "ads.aftonbladet.se": "aftonbladet_ads", - "aftv-serving.bid": "aftv-serving.bid", - "agkn.com": "aggregate_knowledge", - "agilone.com": "agilone", - "adview.pl": "agora", - "pingagenow.com": "ahalogy", - "aimediagroup.com": "ai_media_group", - "advombat.ru": "aidata", - "aidata.io": "aidata", - "aim4media.com": "aim4media", - "muscache.com": "airbnb", - "musthird.com": "airbnb", - "airbrake.io": "airbrake", - "airpr.com": "airpr.com", - "ab.airpush.com": "airpush", - "abmr.net": "akamai_technologies", - "akamai.net": "akamai_technologies", - "akamaihd.net": "akamai_technologies", - "akamaized.net": "akamai_technologies", - "akstat.io": "akamai_technologies", - "edgekey.net": "akamai_technologies", - "edgesuite.net": "akamai_technologies", - "imiclk.com": "akamai_technologies", - "akadns.net": "akamai_technologies", - "akamaiedge.net": "akamai_technologies", - "akaquill.net": "akamai_technologies", - "akamoihd.net": "akamoihd.net", - "adn-d.sp.gmossp-sp.jp": "akane", - "akanoo.com": "akanoo", - "akavita.com": "akavita", - "ads.albawaba.com": "al_bawaba_advertising", - "serve.albacross.com": "albacross", - "aldi-international.com": "aldi-international.com", - "alenty.com": "alenty", - "alephd.com": "alephd.com", - "alexametrics.com": "alexa_metrics", - "d31qbv1cthcecs.cloudfront.net": "alexa_metrics", - "d5nxst8fruw4z.cloudfront.net": "alexa_metrics", - "alexa.com": "alexa_traffic_rank", - "algolia.com": "algolia.net", - "algolia.net": "algolia.net", - "algovid.com": "algovid.com", - "alibaba.com": "alibaba.com", - "alicdn.com": "alibaba.com", - "aliapp.org": "alibaba.com", - "alibabachengdun.com": "alibaba.com", - "alibabausercontent.com": "alibaba.com", - "aliexpress.com": "alibaba.com", - "alikunlun.com": "alibaba.com", - "aliyuncs.com": "alibaba.com", - "alibabacloud.com": "alibaba_cloud", - "alibabadns.com": "alibaba_cloud", - "aliyun.com": "alibaba_cloud", - "ucweb.com": "alibaba_ucbrowser", - "alipay.com": "alipay.com", - "alipayobjects.com": "alipay.com", - "websitealive.com": "alivechat", - "allegroimg.com": "allegro.pl", - "allegrostatic.com": "allegro.pl", - "allegrostatic.pl": "allegro.pl", - "ngacm.com": "allegro.pl", - "ngastatic.com": "allegro.pl", - "i.btg360.com.br": "allin", - "allo-pages.fr": "allo-pages.fr", - "allotraffic.com": "allotraffic", - "edge.alluremedia.com.au": "allure_media", - "allyes.com": "allyes", - "inputs.alooma.com": "alooma", - "arena.altitude-arena.com": "altitude_digital", - "amadesa.com": "amadesa", - "amap.com": "amap", - "amazon.ca": "amazon", - "amazon.co.jp": "amazon", - "amazon.co.uk": "amazon", - "amazon.com": "amazon", - "amazon.de": "amazon", - "amazon.es": "amazon", - "amazon.fr": "amazon", - "amazon.it": "amazon", - "d3io1k5o0zdpqr.cloudfront.net": "amazon", - "a2z.com": "amazon", - "aamazoncognito.com": "amazon", - "amazon-corp.com": "amazon", - "amazon-dss.com": "amazon", - "amazon.com.au": "amazon", - "amazon.com.mx": "amazon", - "amazon.dev": "amazon", - "amazon.in": "amazon", - "amazon.nl": "amazon", - "amazon.sa": "amazon", - "amazonbrowserapp.co.uk": "amazon", - "amazonbrowserapp.es": "amazon", - "amazoncrl.com": "amazon", - "firetvcaptiveportal.com": "amazon", - "ntp-fireos.com": "amazon", - "amazon-adsystem.com": "amazon_adsystem", - "serving-sys.com": "amazon_adsystem", - "sizmek.com": "amazon_adsystem", - "assoc-amazon.ca": "amazon_associates", - "assoc-amazon.co.uk": "amazon_associates", - "assoc-amazon.com": "amazon_associates", - "assoc-amazon.de": "amazon_associates", - "assoc-amazon.fr": "amazon_associates", - "assoc-amazon.jp": "amazon_associates", - "images-amazon.com": "amazon_cdn", - "media-amazon.com": "amazon_cdn", - "ssl-images-amazon.com": "amazon_cdn", - "amazontrust.com": "amazon_cdn", - "associates-amazon.com": "amazon_cdn", - "cloudfront.net": "amazon_cloudfront", - "ota-cloudfront.net": "amazon_cloudfront", - "axx-eu.amazon-adsystem.com": "amazon_mobile_ads", - "amazonpay.com": "amazon_payments", - "payments-amazon.com": "amazon_payments", - "amazonpay.in": "amazon_payments", - "aiv-cdn.net": "amazon_video", - "aiv-delivery.net": "amazon_video", - "amazonvideo.com": "amazon_video", - "pv-cdn.net": "amazon_video", - "primevideo.com": "amazon_video", - "amazonaws.com": "amazon_web_services", - "amazonwebservices.com": "amazon_web_services", - "awsstatic.com": "amazon_web_services", - "adnetwork.net.vn": "ambient_digital", - "adnetwork.vn": "ambient_digital", - "ambientplatform.vn": "ambient_digital", - "amgload.net": "amgload.net", - "amoad.com": "amoad", - "ad.amgdgt.com": "amobee", - "ads.amgdgt.com": "amobee", - "amobee.com": "amobee", - "collective-media.net": "amp_platform", - "amplitude.com": "amplitude", - "d24n15hnbwhuhn.cloudfront.net": "amplitude", - "ampproject.org": "ampproject.org", - "anametrix.net": "anametrix", - "ancestrycdn.com": "ancestry_cdn", - "ancoraplatform.com": "ancora", - "android.com": "android", - "anetwork.ir": "anetwork", - "aniview.com": "aniview.com", - "a-ads.com": "anonymousads", - "anormal-tracker.de": "anormal_tracker", - "answerscloud.com": "answers_cloud_service", - "anthill.vn": "ants", - "ants.vn": "ants", - "rt.analytics.anvato.net": "anvato", - "tkx2-prod.anvato.net": "anvato", - "w3.cdn.anvato.net": "anvato", - "player.anyclip.com": "anyclip", - "video-loader.com": "aol_be_on", - "aolcdn.com": "aol_cdn", - "isp.netscape.com": "aol_cdn", - "apa.at": "apa.at", - "apester.com": "apester", - "apicit.net": "apicit.net", - "carrierzone.com": "aplus_analytics", - "appcenter.ms": "appcenter", - "appcues.com": "appcues", - "appdynamics.com": "appdynamics", - "de8of677fyt0b.cloudfront.net": "appdynamics", - "eum-appdynamics.com": "appdynamics", - "jscdn.appier.net": "appier", - "apple.com": "apple", - "aaplimg.com": "apple", - "apple-cloudkit.com": "apple", - "apple-dns.net": "apple", - "apple-livephotoskit.com": "apple", - "apple-mapkit.com": "apple", - "apple.news": "apple", - "apzones.com": "apple", - "cdn-apple.com": "apple", - "icloud-content.com": "apple", - "icloud.com": "apple", - "icons.axm-usercontent-apple.com": "apple", - "itunes.com": "apple", - "me.com": "apple", - "mzstatic.com": "apple", - "safebrowsing.apple": "apple", - "safebrowsing.g.applimg.com": "apple", - "iadsdk.apple.com": "apple_ads", - "applifier.com": "applifier", - "assets.applovin.com": "applovin", - "applovin.com": "applovin", - "applvn.com": "applovin", - "appmetrx.com": "appmetrx", - "adnxs.com": "appnexus", - "adnxs.net": "appnexus", - "appsflyer.com": "appsflyer", - "appsflyersdk.com": "appsflyer", - "adne.tv": "apptv", - "readserver.net": "apptv", - "www.apture.com": "apture", - "arcpublishing.com": "arcpublishing", - "ard.de": "ard.de", - "areyouahuman.com": "are_you_a_human", - "arkoselabs.com": "arkoselabs.com", - "art19.com": "art19", - "banners.advsnx.net": "artimedia", - "artlebedev.ru": "artlebedev.ru", - "ammadv.it": "aruba_media_marketing", - "arubamediamarketing.it": "aruba_media_marketing", - "cya2.net": "arvato_canvas_fp", - "asambeauty.com": "asambeauty.com", - "ask.com": "ask.com", - "aspnetcdn.com": "aspnetcdn", - "ads.assemblyexchange.com": "assemblyexchange", - "cdn.astronomer.io": "astronomer", - "ati-host.net": "at_internet", - "aticdn.net": "at_internet", - "xiti.com": "at_internet", - "atedra.com": "atedra", - "oadts.com": "atg_group", - "as00.estara.com": "atg_optimization", - "atgsvcs.com": "atg_recommendations", - "adbureau.net": "atlas", - "atdmt.com": "atlas", - "atlassbx.com": "atlas", - "track.roiservice.com": "atlas_profitbuilder", - "atl-paas.net": "atlassian.net", - "atlassian.com": "atlassian.net", - "atlassian.net": "atlassian.net", - "d12ramskps3070.cloudfront.net": "atlassian.net", - "bitbucket.org": "atlassian.net", - "jira.com": "atlassian.net", - "ss-inf.net": "atlassian.net", - "d1xfq2052q7thw.cloudfront.net": "atlassian_marketplace", - "marketplace.atlassian.com": "atlassian_marketplace", - "atomz.com": "atomz_search", - "atsfi.de": "atsfi_de", - "cdn.attracta.com": "attracta", - "locayta.com": "attraqt", - "ads.audience2media.com": "audience2media", - "qwobl.net": "audience_ad_network", - "revsci.net": "audience_science", - "wunderloop.net": "audience_science", - "12mlbe.com": "audiencerate", - "audiencesquare.com": "audiencesquare.com", - "ad.gt": "audiencesquare.com", - "audigent.com": "audiencesquare.com", - "hadronid.net": "audiencesquare.com", - "auditude.com": "auditude", - "audtd.com": "audtd.com", - "cdn.augur.io": "augur", - "aumago.com": "aumago", - "clicktracks.com": "aurea_clicktracks", - "ausgezeichnet.org": "ausgezeichnet_org", - "advertising.gov.au": "australia.gov", - "auth0.com": "auth0", - "ai.autoid.com": "autoid", - "optimost.com": "autonomy", - "oc-track.autonomycloud.com": "autonomy_campaign", - "track.yieldsoftware.com": "autonomy_campaign", - "api.autopilothq.com": "autopilothq", - "autoscout24.com": "autoscout24.com", - "autoscout24.net": "autoscout24.com", - "avail.net": "avail", - "analytics.avanser.com.au": "avanser", - "avmws.com": "avant_metrics", - "avantlink.com": "avantlink", - "ads.avazu.net": "avazu_network", - "avenseo.com": "avenseo", - "adspdbl.com": "avid_media", - "avocet.io": "avocet", - "aweber.com": "aweber", - "awin.com": "awin", - "awin1.com": "awin", - "perfb.com": "awin", - "ad.globe7.com": "axill", - "azadify.com": "azadify", - "azure.com": "azure", - "azure.net": "azure", - "azurefd.net": "azure", - "trafficmanager.net": "azure", - "blob.core.windows.net": "azure_blob_storage", - "azureedge.net": "azureedge.net", - "b2bcontext.ru": "b2bcontext", - "b2bvideo.ru": "b2bvideo", - "babator.com": "babator.com", - "backbeatmedia.com": "back_beat_media", - "widgets.backtype.com": "backtype_widgets", - "bahn.de": "bahn_de", - "img-bahn.de": "bahn_de", - "baidu.com": "baidu_ads", - "baidustatic.com": "baidu_ads", - "bdimg.com": "baidu_static", - "bdstatic.com": "baidu_static", - "baletingo.com": "baletingo.com", - "bangdom.com": "bangdom.com", - "widgets.bankrate.com": "bankrate", - "bannerconnect.net": "banner_connect", - "bannerflow.com": "bannerflow.com", - "bannerplay.com": "bannerplay", - "cdn.bannersnack.com": "bannersnack", - "dn3y71tq7jf07.cloudfront.net": "barilliance", - "getbarometer.s3.amazonaws.com": "barometer", - "basilic.io": "basilic.io", - "batanga.com": "batanga_network", - "t4ft.de": "batch_media", - "bauernative.com": "bauer_media", - "baur.de": "baur.de", - "baynote.net": "baynote_observer", - "bazaarvoice.com": "bazaarvoice", - "bbci.co.uk": "bbci", - "tracking.bd4travel.com": "bd4travel", - "beopinion.com": "be_opinion", - "bfmio.com": "beachfront", - "beaconads.com": "beacon_ad_network", - "beampulse.com": "beampulse.com", - "beanstalkdata.com": "beanstalk_data", - "bebi.com": "bebi", - "beeketing.com": "beeketing.com", - "beeline.ru": "beeline.ru", - "bidr.io": "beeswax", - "tracker.beezup.com": "beezup", - "begun.ru": "begun", - "behavioralengine.com": "behavioralengine", - "belboon.de": "belboon_gmbh", - "cdn.belco.io": "belco", - "belstat.be": "belstat", - "belstat.com": "belstat", - "belstat.de": "belstat", - "belstat.fr": "belstat", - "belstat.nl": "belstat", - "bemobile.ua": "bemobile.ua", - "tag.benchplatform.com": "bench_platform", - "betterttv.net": "betterttv", - "betweendigital.com": "betweendigital.com", - "intencysrv.com": "betweendigital.com", - "bid.run": "bid.run", - "bidgear.com": "bidgear", - "bidswitch.net": "bidswitch", - "exe.bid": "bidswitch", - "bttrack.com": "bidtellect", - "bidtheatre.com": "bidtheatre", - "bidvertiser.com": "bidvertiser", - "bigmobileads.com": "big_mobile", - "bigcommerce.com": "bigcommerce.com", - "bigmir.net": "bigmir.net", - "bigpoint-payment.com": "bigpoint", - "bigpoint.com": "bigpoint", - "bigpoint.net": "bigpoint", - "bpcdn.net": "bigpoint", - "bpsecure.com": "bigpoint", - "bildstatic.de": "bild", - "ad-cdn.bilgin.pro": "bilgin_pro", - "pixel.bilinmedia.net": "bilin", - "bat.r.msn.com": "bing_ads", - "bing.com": "bing_ads", - "bing.net": "bing_ads", - "virtualearth.net": "bing_maps", - "binge.com.au": "binge", - "view.binlayer.com": "binlayer", - "widgets.binotel.com": "binotel", - "esendra.fi": "bisnode", - "bitcoinplus.com": "bitcoin_miner", - "bit.ly": "bitly", - "bitrix.de": "bitrix", - "bitrix.info": "bitrix", - "bitrix.ru": "bitrix", - "bitrix24.com": "bitrix", - "bitrix24.com.br": "bitrix", - "bitwarden.com": "bitwarden", - "traffic.adxprts.com": "bizcn", - "jssr.jd.com": "blackdragon", - "blau.de": "blau.de", - "bnmla.com": "blink_new_media", - "blismedia.com": "blis", - "blogad.com.tw": "blogad", - "blogbang.com": "blogbang", - "www.blogcatalog.com": "blogcatalog", - "track.blogcounter.de": "blogcounter", - "blogfoster.com": "blogfoster.com", - "bloggerads.net": "bloggerads", - "blogher.com": "blogher", - "blogherads.com": "blogher", - "blogimg.jp": "blogimg.jp", - "blogsmithmedia.com": "blogsmithmedia.com", - "blogblog.com": "blogspot_com", - "blogger.com": "blogspot_com", - "blogspot.com": "blogspot_com", - "brcdn.com": "bloomreach", - "brsrvr.com": "bloomreach", - "brtstats.com": "bloomreach", - "offerpoint.net": "blue_cherry_group", - "blueserving.com": "blue_seed", - "blueconic.net": "blueconic.net", - "bluecore.com": "bluecore", - "triggeredmail.appspot.com": "bluecore", - "bkrtx.com": "bluekai", - "bluekai.com": "bluekai", - "adrevolver.com": "bluelithium", - "bluelithium.com": "bluelithium", - "bmmetrix.com": "bluemetrix", - "japanmetrix.jp": "bluemetrix", - "bluenewsupdate.info": "bluenewsupdate.info", - "bluestreak.com": "bluestreak", - "bluetriangletech.com": "bluetriangle", - "btttag.com": "bluetriangle", - "bodelen.com": "bodelen.com", - "tracking.bol.com": "bol_affiliate_program", - "qb.boldapps.net": "bold", - "secure.apps.shappify.com": "bold", - "boldchat.com": "boldchat", - "boltdns.net": "boltdns.net", - "bom.gov.au": "bom", - "ml314.com": "bombora", - "bongacams.com": "bongacams.com", - "bonial.com": "bonial", - "bonialconnect.com": "bonial", - "bonialserviceswidget.de": "bonial", - "boo-box.com": "boo-box", - "booking.com": "booking.com", - "bstatic.com": "booking.com", - "boostbox.com.br": "boost_box", - "boostervideo.ru": "booster_video", - "bootstrapcdn.com": "bootstrap", - "borrango.com": "borrango.com", - "scan.botscanner.com": "botscanner", - "boudja.com": "boudja.com", - "bounceexchange.com": "bounce_exchange", - "bouncex.com": "bouncex", - "bouncex.net": "bouncex", - "j.clickdensity.com": "box_uk", - "boxever.com": "boxever", - "brainient.com": "brainient", - "brainsins.com": "brainsins", - "d2xkqxdy6ewr93.cloudfront.net": "brainsins", - "mobileapptracking.com": "branch", - "app.link": "branch_metrics", - "branch.io": "branch_metrics", - "brandaffinity.net": "brand_affinity", - "go.cpmadvisors.com": "brand_networks", - "optorb.com": "brand_networks", - "brandmetrics.com": "brandmetrics.com", - "brandreachsys.com": "brandreach", - "rtbidder.net": "brandscreen", - "brandwire.tv": "brandwire.tv", - "branica.com": "branica", - "appboycdn.com": "braze", - "braze.com": "braze", - "brealtime.com": "brealtime", - "bridgetrack.com": "bridgetrack", - "brightcove.com": "brightcove", - "brightcove.net": "brightcove_player", - "analytics.brightedge.com": "brightedge", - "munchkin.brightfunnel.com": "brightfunnel", - "brightonclick.com": "brightonclick.com", - "btrll.com": "brightroll", - "p.brilig.com": "brilig", - "brillen.de": "brillen.de", - "broadstreetads.com": "broadstreet", - "bm23.com": "bronto", - "brow.si": "brow.si", - "browser-statistik.de": "browser-statistik", - "browser-update.org": "browser_update", - "btncdn.com": "btncdn.com", - "in.bubblestat.com": "bubblestat", - "brighteroption.com": "buddy_media", - "bufferapp.com": "buffer_button", - "bugherd.com": "bugherd.com", - "bugsnag.com": "bugsnag", - "d2wy8f7a9ursnm.cloudfront.net": "bugsnag", - "bulkhentai.com": "bulkhentai.com", - "bumlam.com": "bumlam.com", - "bunchbox.co": "bunchbox", - "bf-ad.net": "burda", - "bf-tools.net": "burda", - "bstatic.de": "burda_digital_systems", - "burstbeacon.com": "burst_media", - "burstnet.com": "burst_media", - "burt.io": "burt", - "d3q6px0y2suh5n.cloudfront.net": "burt", - "rich-agent.s3.amazonaws.com": "burt", - "richmetrics.com": "burt", - "stats.businessol.com": "businessonline_analytics", - "bttn.io": "button", - "buysellads.com": "buysellads", - "servedby-buysellads.com": "buysellads", - "buzzadexchange.com": "buzzadexchange.com", - "buzzador.com": "buzzador", - "buzzfed.com": "buzzfeed", - "bwbx.io": "bwbx.io", - "bypass.jp": "bypass", - "c1exchange.com": "c1_exchange", - "c3metrics.com": "c3_metrics", - "c3tag.com": "c3_metrics", - "c8.net.ua": "c8_network", - "cackle.me": "cackle.me", - "d1cerpgff739r9.cloudfront.net": "cadreon", - "d1qpxk1wfeh8v1.cloudfront.net": "cadreon", - "callpage.io": "call_page", - "callbackhunter.com": "callbackhunter", - "callmeasurement.com": "callbox", - "callibri.ru": "callibri", - "callrail.com": "callrail", - "calltracking.ru": "calltracking", - "caltat.com": "caltat.com", - "cam-content.com": "cam-content.com", - "camakaroda.com": "camakaroda.com", - "s.edkay.com": "campus_explorer", - "canddi.com": "canddi", - "canonical.com": "canonical", - "canvas.net": "canvas", - "canvasnetwork.com": "canvas", - "du11hjcvx0uqb.cloudfront.net": "canvas", - "kdata.fr": "capitaldata", - "captora.com": "captora", - "edge.capturemedia.network": "capture_media", - "cdn.capturly.com": "capturly", - "route.carambo.la": "carambola", - "carbonads.com": "carbonads", - "carbonads.net": "carbonads", - "fusionads.net": "carbonads", - "cardinalcommerce.com": "cardinal", - "cardlytics.com": "cardlytics", - "cdn.carrotquest.io": "carrot_quest", - "api.cartstack.com": "cartstack", - "caspion.com": "caspion", - "t.castle.io": "castle", - "3gl.net": "catchpoint", - "cbox.ws": "cbox", - "adlog.com.com": "cbs_interactive", - "cbsinteractive.com": "cbs_interactive", - "dw.com.com": "cbs_interactive", - "ccmbg.com": "ccm_benchmark", - "admission.net": "cdk_digital_marketing", - "cdn-net.com": "cdn-net.com", - "cdn13.com": "cdn13.com", - "cdn77.com": "cdn77", - "cdn77.org": "cdn77", - "cdnetworks.com": "cdnetworks.net", - "cdnetworks.net": "cdnetworks.net", - "cdnnetwok.xyz": "cdnnetwok_xyz", - "cdnondemand.org": "cdnondemand.org", - "cdnsure.com": "cdnsure.com", - "cdnvideo.com": "cdnvideo.com", - "cdnwidget.com": "cdnwidget.com", - "cedexis-radar.net": "cedexis_radar", - "cedexis-test.com": "cedexis_radar", - "cedexis.com": "cedexis_radar", - "cedexis.fastlylb.net": "cedexis_radar", - "cedexis.net": "cedexis_radar", - "celebrus.com": "celebrus", - "celtra.com": "celtra", - "cendyn.adtrack.calls.net": "cendyn", - "centraltag.com": "centraltag", - "brand-server.com": "centro", - "speed-trap.nl": "cerberus_speed-trap", - "link.ixs1.net": "certainsource", - "hits.e.cl": "certifica_metric", - "certona.net": "certona", - "res-x.com": "certona", - "gsn.chameleon.ad": "chameleon", - "chango.ca": "chango", - "chango.com": "chango", - "channelintelligence.com": "channel_intelligence", - "cptrack.de": "channel_pilot_solutions", - "channeladvisor.com": "channeladvisor", - "searchmarketing.com": "channeladvisor", - "channelfinder.net": "channelfinder", - "chaordicsystems.com": "chaordic", - "chartbeat.com": "chartbeat", - "chartbeat.net": "chartbeat", - "chartboost.com": "chartboost", - "chaser.ru": "chaser", - "cloud.chatbeacon.io": "chat_beacon", - "chatango.com": "chatango", - "call.chatra.io": "chatra", - "chaturbate.com": "chaturbate.com", - "chatwing.com": "chatwing", - "checkmystats.com.au": "checkmystats", - "chefkoch-cdn.de": "chefkoch_de", - "chefkoch.de": "chefkoch_de", - "tracker.chinmedia.vn": "chin_media", - "chinesean.com": "chinesean", - "chitika.net": "chitika", - "choicestream.com": "choicestream", - "api.getchute.com": "chute", - "media.chute.io": "chute", - "iqcontentplatform.de": "circit", - "data.circulate.com": "circulate", - "p.cityspark.com": "city_spark", - "cityads.ru": "cityads", - "gameleads.ru": "cityads", - "ciuvo.com": "ciuvo.com", - "widget.civey.com": "civey_widgets", - "civicscience.com": "civicscience.com", - "ciweb.ciwebgroup.com": "ciwebgroup", - "clcknads.pro": "clcknads.pro", - "pulseradius.com": "clear_pier", - "clearbit.com": "clearbit.com", - "clearsale.com.br": "clearsale", - "tag.clrstm.com": "clearstream.tv", - "api.clerk.io": "clerk.io", - "cleverpush.com": "clever_push", - "wzrkt.com": "clever_tap", - "cleversite.ru": "cleversite", - "script.click360.io": "click360", - "clickandchat.com": "click_and_chat", - "software.clickback.com": "click_back", - "hit.clickaider.com": "clickaider", - "clickaine.com": "clickaine", - "clickbank.net": "clickbank", - "cbproads.com": "clickbank_proads", - "adtoll.com": "clickbooth", - "clickbooth.com": "clickbooth", - "clickboothlnk.com": "clickbooth", - "clickcease.com": "clickcease", - "clickcertain.com": "clickcertain", - "remarketstats.com": "clickcertain", - "clickdesk.com": "clickdesk", - "analytics.clickdimensions.com": "clickdimensions", - "clickequations.net": "clickequations", - "clickexperts.net": "clickexperts", - "doublemax.net": "clickforce", - "clickinc.com": "clickinc", - "clickintext.net": "clickintext", - "clickky.biz": "clickky", - "9nl.be": "clickmeter", - "9nl.com": "clickmeter", - "9nl.eu": "clickmeter", - "9nl.it": "clickmeter", - "9nl.me": "clickmeter", - "clickmeter.com": "clickmeter", - "clickonometrics.pl": "clickonometrics", - "clickpoint.com": "clickpoint", - "clickpoint.it": "clickpoint", - "clickprotector.com": "clickprotector", - "clickreport.com": "clickreport", - "doogleonduty.com": "clickreport", - "ctn.go2cloud.org": "clicks_thru_networks", - "clicksor.com": "clicksor", - "hatid.com": "clicksor", - "lzjl.com": "clicksor", - "myroitracking.com": "clicksor", - "clicktale.com": "clicktale", - "clicktale.net": "clicktale", - "clicktale.pantherssl.com": "clicktale", - "clicktalecdn.sslcs.cdngc.net": "clicktale", - "clicktripz.com": "clicktripz", - "clickwinks.com": "clickwinks", - "getclicky.com": "clicky", - "staticstuff.net": "clicky", - "clickyab.com": "clickyab", - "clicmanager.fr": "clicmanager", - "eplayer.clipsyndicate.com": "clip_syndicate", - "www.is1.clixgalore.com": "clixgalore", - "clixmetrix.com": "clixmetrix", - "clixsense.com": "clixsense", - "cloud-media.fr": "cloud-media.fr", - "cloudflare.com": "cloudflare", - "cloudflare.net": "cloudflare", - "cloudflare-dm-cmpimg.com": "cloudflare", - "cloudflare-dns.com": "cloudflare", - "cloudflare-ipfs.com": "cloudflare", - "cloudflare-quic.com": "cloudflare", - "cloudflare-terms-of-service-abuse.com": "cloudflare", - "cloudflare.tv": "cloudflare", - "cloudflareaccess.com": "cloudflare", - "cloudflareclient.com": "cloudflare", - "cloudflareinsights.com": "cloudflare", - "cloudflareok.com": "cloudflare", - "cloudflareportal.com": "cloudflare", - "cloudflareresolve.com": "cloudflare", - "cloudflaressl.com": "cloudflare", - "cloudflarestatus.com": "cloudflare", - "cloudflarestream.com": "cloudflare", - "pacloudflare.com": "cloudflare", - "sn-cloudflare.com": "cloudflare", - "videodelivery.net": "cloudflare", - "cloudimg.io": "cloudimage.io", - "cloudinary.com": "cloudinary", - "clovenetwork.com": "clove_network", - "clustrmaps.com": "clustrmaps", - "cnbc.com": "cnbc", - "cnetcontent.com": "cnetcontent.com", - "cnstats.ru": "cnstats", - "cnzz.com": "cnzz.com", - "umeng.com": "cnzz.com", - "acc-hd.de": "coadvertise", - "client.cobrowser.net": "cobrowser", - "codeonclick.com": "codeonclick.com", - "cogocast.net": "cogocast", - "coin-have.com": "coin_have", - "appsha1.cointraffic.io": "coin_traffic", - "authedmine.com": "coinhive", - "coin-hive.com": "coinhive", - "coinhive.com": "coinhive", - "coinurl.com": "coinurl", - "coll1onf.com": "coll1onf.com", - "coll2onf.com": "coll2onf.com", - "service.collarity.com": "collarity", - "static.clmbtech.com": "columbia_online", - "combotag.com": "combotag", - "pdk.theplatform.com": "comcast_technology_solutions", - "theplatform.com": "comcast_technology_solutions", - "comm100.cn": "comm100", - "comm100.com": "comm100", - "cdn-cs.com": "commerce_sciences", - "cdn.mercent.com": "commercehub", - "link.mercent.com": "commercehub", - "commercialvalue.org": "commercialvalue.org", - "afcyhf.com": "commission_junction", - "anrdoezrs.net": "commission_junction", - "apmebf.com": "commission_junction", - "awltovhc.com": "commission_junction", - "emjcd.com": "commission_junction", - "ftjcfx.com": "commission_junction", - "lduhtrp.net": "commission_junction", - "qksz.net": "commission_junction", - "tkqlhce.com": "commission_junction", - "tqlkg.com": "commission_junction", - "yceml.net": "commission_junction", - "communicatorcorp.com": "communicator_corp", - "wowanalytics.co.uk": "communigator", - "c-col.com": "competexl", - "c.compete.com": "competexl", - "complex.com": "complex_media_network", - "complexmedianetwork.com": "complex_media_network", - "comprigo.com": "comprigo", - "comscore.com": "comscore", - "zqtk.net": "comscore", - "conative.de": "conative.de", - "condenast.com": "condenastdigital.com", - "conduit-banners.com": "conduit", - "conduit-data.com": "conduit", - "conduit.com": "conduit", - "confirmit.com": "confirmit", - "congstar.de": "congstar.de", - "connatix.com": "connatix.com", - "connected-by.connectad.io": "connectad", - "cdn.connecto.io": "connecto", - "connexity.net": "connexity", - "cxt.ms": "connexity", - "connextra.com": "connextra", - "rs6.net": "constant_contact", - "serverbid.com": "consumable", - "contactatonce.com": "contact_at_once", - "adrolays.de": "contact_impact", - "c-i.as": "contact_impact", - "df-srv.de": "contact_impact", - "d1uwd25yvxu96k.cloudfront.net": "contactme", - "static.contactme.com": "contactme", - "contaxe.com": "contaxe", - "content.ad": "content.ad", - "ingestion.contentinsights.com": "content_insights", - "contentexchange.me": "contentexchange.me", - "ctfassets.net": "contentful_gmbh", - "contentpass.de": "contentpass", - "contentpass.net": "contentpass", - "contentsquare.net": "contentsquare.net", - "d1aug3dv5magti.cloudfront.net": "contentwrx", - "d39se0h2uvfakd.cloudfront.net": "contentwrx", - "c-on-text.com": "context", - "intext.contextad.pl": "context.ad", - "continum.net": "continum_net", - "s2.contribusourcesyndication.com": "contribusource", - "hits.convergetrack.com": "convergetrack", - "fastclick.net": "conversant", - "mediaplex.com": "conversant", - "mplxtms.com": "conversant", - "cm-commerce.com": "conversio", - "media.conversio.com": "conversio", - "c.conversionlogic.net": "conversion_logic", - "conversionruler.com": "conversionruler", - "conversionsbox.com": "conversions_box", - "conversionsondemand.com": "conversions_on_demand", - "ant.conversive.nl": "conversive", - "convertexperiments.com": "convert", - "d3sjgucddk68ji.cloudfront.net": "convertfox", - "convertro.com": "convertro", - "d1ivexoxmp59q7.cloudfront.net": "convertro", - "conviva.com": "conviva", - "cookieconsent.silktide.com": "cookie_consent", - "cookie-script.com": "cookie_script", - "cookiebot.com": "cookiebot", - "cookieq.com": "cookieq", - "lite.piclens.com": "cooliris", - "copacet.com": "copacet", - "raasnet.com": "coreaudience", - "coremotives.com": "coremotives", - "coull.com": "coull", - "cpmrocket.com": "cpm_rocket", - "cpmprofit.com": "cpmprofit", - "cpmstar.com": "cpmstar", - "captifymedia.com": "cpx.to", - "cpx.to": "cpx.to", - "cqcounter.com": "cq_counter", - "cqq5id8n.com": "cqq5id8n.com", - "cquotient.com": "cquotient.com", - "craftkeys.com": "craftkeys", - "ads.crakmedia.com": "crakmedia_network", - "craktraffic.com": "crakmedia_network", - "crankyads.com": "crankyads", - "crashlytics.com": "crashlytics", - "cetrk.com": "crazy_egg", - "crazyegg.com": "crazy_egg", - "dnn506yrbagrg.cloudfront.net": "crazy_egg", - "creafi-online-media.com": "creafi", - "createjs.com": "createjs", - "creativecommons.org": "creative_commons", - "brandwatch.com": "crimsonhexagon_com", - "crimsonhexagon.com": "crimsonhexagon_com", - "hexagon-analytics.com": "crimsonhexagon_com", - "ctnsnet.com": "crimtan", - "crisp.chat": "crisp", - "crisp.im": "crisp", - "criteo.com": "criteo", - "criteo.net": "criteo", - "p.crm4d.com": "crm4d", - "crossengage.io": "crossengage", - "crosspixel.net": "crosspixel", - "crsspxl.com": "crosspixel", - "crosssell.info": "crosssell.info", - "crossss.com": "crossss", - "widget.crowdignite.com": "crowd_ignite", - "static.crowdscience.com": "crowd_science", - "ss.crowdprocess.com": "crowdprocess", - "our.glossip.nl": "crowdynews", - "widget.breakingburner.com": "crowdynews", - "widget.crowdynews.com": "crowdynews", - "searchg2.crownpeak.net": "crownpeak", - "snippet.omm.crownpeak.com": "crownpeak", - "cryptoloot.pro": "cryptoloot_miner", - "ctnetwork.hu": "ctnetwork", - "adzhub.com": "ctrlshift", - "data.withcubed.com": "cubed", - "cuelinks.com": "cuelinks", - "cdn.cupinteractive.com": "cup_interactive", - "curse.com": "curse.com", - "cursecdn.com": "cursecdn.com", - "assets.customer.io": "customer.io", - "widget.customerly.io": "customerly", - "cxense.com": "cxense", - "cxo.name": "cxo.name", - "cyberwing.co.jp": "cyber_wing", - "cybersource.com": "cybersource", - "cygnus.com": "cygnus", - "da-ads.com": "da-ads.com", - "dailymail.co.uk": "dailymail.co.uk", - "dailymotion.com": "dailymotion", - "dailymotionbus.com": "dailymotion", - "dm-event.net": "dailymotion", - "dmcdn.net": "dailymotion", - "dmxleo.com": "dailymotion_advertising", - "ds1.nl": "daisycon", - "dantrack.net": "dantrack.net", - "dmclick.cn": "darwin_marketing", - "tags.dashboardad.net": "dashboard_ad", - "datacaciques.com": "datacaciques.com", - "datacoral.com": "datacoral", - "abandonaid.com": "datacrushers", - "datacrushers.com": "datacrushers", - "datadome.co": "datadome", - "optimahub.com": "datalicious_datacollector", - "supert.ag": "datalicious_supertag", - "inextaction.net": "datalogix", - "nexac.com": "datalogix", - "datamind.ru": "datamind.ru", - "datatables.net": "datatables", - "adunits.datawrkz.com": "datawrkz", - "dataxpand.script.ag": "dataxpand", - "tc.dataxpand.com": "dataxpand", - "w55c.net": "dataxu", - "datds.net": "datds.net", - "pro-market.net": "datonics", - "displaymarketplace.com": "datran", - "davebestdeals.com": "davebestdeals.com", - "dawandastatic.com": "dawandastatic.com", - "dc-storm.com": "dc_stormiq", - "h4k5.com": "dc_stormiq", - "stormcontainertag.com": "dc_stormiq", - "stormiq.com": "dc_stormiq", - "dcbap.com": "dcbap.com", - "dcmn.com": "dcmn.com", - "statslogger.rocket.persgroep.cloud": "de_persgroep", - "deadlinefunnel.com": "deadline_funnel", - "cc2.dealer.com": "dealer.com", - "d9lq0o81skkdj.cloudfront.net": "dealer.com", - "esm1.net": "dealer.com", - "static.dealer.com": "dealer.com", - "decibelinsight.net": "decibel_insight", - "ads.dedicatedmedia.com": "dedicated_media", - "api.deep.bi": "deep.bi", - "deepintent.com": "deepintent.com", - "defpush.com": "defpush.com", - "deichmann.com": "deichmann.com", - "vxml4.delacon.com.au": "delacon", - "tracking.percentmobile.com": "delivr", - "adaction.se": "delta_projects", - "de17a.com": "delta_projects", - "deluxe.script.ag": "deluxe", - "delvenetworks.com": "delve_networks", - "company-target.com": "demandbase", - "demandbase.com": "demandbase", - "dmd53.com": "demandmedia", - "dmtracker.com": "demandmedia", - "deqwas.net": "deqwas", - "devatics.com": "devatics", - "developermedia.com": "developer_media", - "dapxl.com": "deviantart.net", - "deviantart.net": "deviantart.net", - "my.blueadvertise.com": "dex_platform", - "dgm-au.com": "dgm", - "s2d6.com": "dgm", - "d31y97ze264gaa.cloudfront.net": "dialogtech", - "d3von6il1wr7wo.cloudfront.net": "dianomi", - "dianomi.com": "dianomi", - "dianomioffers.co.uk": "dianomi", - "tag.didit.com": "didit_blizzard", - "track.did-it.com": "didit_maestro", - "privacy-center.org": "didomi", - "digg.com": "digg_widget", - "digicert.com": "digicert_trust_seal", - "phicdn.net": "digicert_trust_seal", - "digidip.net": "digidip", - "digiglitzmarketing.go2cloud.org": "digiglitz", - "wtp101.com": "digilant", - "digioh.com": "digioh", - "lightboxcdn.com": "digioh", - "digitalgov.gov": "digital.gov", - "cookiereports.com": "digital_control_room", - "adtag.cc": "digital_nomads", - "adready.com": "digital_remedy", - "adreadytractions.com": "digital_remedy", - "cpxinteractive.com": "digital_remedy", - "directtrack.com": "digital_river", - "onenetworkdirect.net": "digital_river", - "track.digitalriver.com": "digital_river", - "dwin1.com": "digital_window", - "digiteka.net": "digiteka", - "ultimedia.com": "digiteka", - "digitru.st": "digitrust", - "widget.dihitt.com.br": "dihitt_badge", - "dimml.io": "dimml", - "keywordsconnect.com": "direct_keyword_link", - "directadvert.ru": "directadvert", - "directrev.com": "directrev", - "discordapp.com": "discord", - "disneyplus.com": "disneyplus", - "bamgrid.com": "disneystreaming", - "dssedge.com": "disneystreaming", - "dssott.com": "disneystreaming", - "d81mfvml8p5ml.cloudfront.net": "display_block", - "disqus.com": "disqus", - "disquscdn.com": "disqus", - "disqusads.com": "disqus_ads", - "distiltag.com": "distil_tag", - "districtm.ca": "districtm.io", - "districtm.io": "districtm.io", - "jsrdn.com": "distroscale", - "div.show": "div.show", - "stats.vertriebsassistent.de": "diva", - "tag.divvit.com": "divvit", - "d-msquared.com": "dm2", - "and.co.uk": "dmg_media", - "dmm.co.jp": "dmm", - "ctret.de": "dmwd", - "toolbar.dockvine.com": "dockvine", - "awecr.com": "docler", - "fwbntw.com": "docler", - "s.dogannet.tv": "dogannet", - "domain.glass": "domainglass", - "www.domodomain.com": "domodomain", - "donation-tools.org": "donationtools", - "doofinder.com": "doofinder.com", - "embed.doorbell.io": "doorbell.io", - "dotandad.com": "dotandmedia", - "trackedlink.net": "dotmailer", - "dotmetrics.net": "dotmetrics.net", - "dotomi.com": "dotomi", - "dtmc.com": "dotomi", - "dtmpub.com": "dotomi", - "double.net": "double.net", - "2mdn.net": "doubleclick", - "doublepimp.com": "doublepimp", - "doublepimpssl.com": "doublepimp", - "redcourtside.com": "doublepimp", - "xeontopa.com": "doublepimp", - "zerezas.com": "doublepimp", - "doubleverify.com": "doubleverify", - "wrating.com": "dratio", - "adsymptotic.com": "drawbridge", - "dreame.tech": "dreame_tech", - "dreametech.com": "dreame_tech", - "dreamlab.pl": "dreamlab.pl", - "drift.com": "drift", - "js.driftt.com": "drift", - "getdrip.com": "drip", - "dropbox.com": "dropbox.com", - "dropboxstatic.com": "dropbox.com", - "z5x.net": "dsnr_media_group", - "dsp-rambler.ru": "dsp_rambler", - "m6d.com": "dstillery", - "media6degrees.com": "dstillery", - "dtscout.com": "dtscout.com", - "dd-cdn.multiscreensite.com": "dudamobile", - "px.multiscreensite.com": "dudamobile", - "cdn-0.d41.co": "dun_and_bradstreet", - "cn01.dwstat.cn": "dwstat.cn", - "dynad.net": "dynad", - "dyntrk.com": "dynadmic", - "dyntracker.de": "dynamic_1001_gmbh", - "media01.eu": "dynamic_1001_gmbh", - "content.dl-rms.com": "dynamic_logic", - "dlqm.net": "dynamic_logic", - "questionmarket.com": "dynamic_logic", - "dynamicyield.com": "dynamic_yield", - "beacons.hottraffic.nl": "dynata", - "dynatrace.com": "dynatrace.com", - "dyncdn.me": "dyncdn.me", - "e-planning.net": "e-planning", - "eadv.it": "eadv", - "eanalyzer.de": "eanalyzer.de", - "early-birds.fr": "early_birds", - "cdn.earnify.com": "earnify", - "earnify.com": "earnify_tracker", - "easyads.bg": "easyads", - "easylist.club": "easylist_club", - "classistatic.de": "ebay", - "ebay-us.com": "ebay", - "ebay.com": "ebay", - "ebay.de": "ebay", - "ebayclassifiedsgroup.com": "ebay", - "ebaycommercenetwork.com": "ebay", - "ebaydesc.com": "ebay", - "ebayimg.com": "ebay", - "ebayrtm.com": "ebay", - "ebaystatic.com": "ebay", - "ad.about.co.kr": "ebay_korea", - "adcheck.about.co.kr": "ebay_korea", - "adn.ebay.com": "ebay_partner_network", - "beead.co.uk": "ebuzzing", - "beead.fr": "ebuzzing", - "beead.net": "ebuzzing", - "ebuzzing.com": "ebuzzing", - "ebz.io": "ebuzzing", - "echoenabled.com": "echo", - "eclick.vn": "eclick", - "econda-monitor.de": "econda", - "eco-tag.jp": "ecotag", - "alphacdn.net": "edgio", - "edg.io": "edgio", - "edgecast.com": "edgio", - "edgecastcdn.net": "edgio", - "edgecastdns.net": "edgio", - "sigmacdn.net": "edgio", - "ecustomeropinions.com": "edigitalresearch", - "effectivemeasure.net": "effective_measure", - "effiliation.com": "effiliation", - "egain.net": "egain", - "cloud-emea.analytics-egain.com": "egain_analytics", - "ehi-siegel.de": "ehi-siegel_de", - "ekmpinpoint.com": "ekmpinpoint", - "ekomi.de": "ekomi", - "elasticad.net": "elastic_ad", - "elasticbeanstalk.com": "elastic_beanstalk", - "cloudcell.com": "electronic_arts", - "ea.com": "electronic_arts", - "eamobile.com": "electronic_arts", - "element.io": "element", - "riot.im": "element", - "elicitapp.com": "elicit", - "eloqua.com": "eloqua", - "en25.com": "eloqua", - "eluxer.net": "eluxer_net", - "tracker.emailaptitude.com": "email_aptitude", - "tag.email-attitude.com": "email_attitude", - "app.emarketeer.com": "emarketeer", - "embed.ly": "embed.ly", - "embedly.com": "embed.ly", - "emediate.dk": "emediate", - "emediate.eu": "emediate", - "emediate.se": "emediate", - "emetriq.de": "emetriq", - "e2ma.net": "emma", - "adinsight.co.kr": "emnet", - "colbenson.es": "empathy", - "emsmobile.de": "emsmobile.de", - "sitecompass.com": "encore_metrics", - "enectoanalytics.com": "enecto_analytics", - "trk.enecto.com": "enecto_analytics", - "track.engagesciences.com": "engage_sciences", - "widget.engageya.com": "engageya_widget", - "engagio.com": "engagio", - "engineseeker.com": "engineseeker", - "enquisite.com": "enquisite", - "adtlgc.com": "enreach", - "ats.tumri.net": "ensemble", - "ensighten.com": "ensighten", - "envolve.com": "envolve", - "cdn.callbackkiller.com": "envybox", - "email-reflex.com": "eperflex", - "epicgameads.com": "epic_game_ads", - "trafficmp.com": "epic_marketplace", - "adshost1.com": "epom", - "adshost2.com": "epom", - "epom.com": "epom", - "epoq.de": "epoq", - "banzaiadv.it": "eprice", - "eproof.com": "eproof", - "equitystory.com": "eqs_group", - "eqads.com": "eqworks", - "ero-advertising.com": "eroadvertising", - "eroadvertising.com": "eroadvertising", - "d15qhc0lu1ghnk.cloudfront.net": "errorception", - "errorception.com": "errorception", - "eshopcomp.com": "eshopcomp.com", - "espncdn.com": "espn_cdn", - "esprit.de": "esprit.de", - "cybermonitor.com": "estat", - "estat.com": "estat", - "teste-s3-maycon.s3.amazonaws.com": "etag", - "etahub.com": "etahub.com", - "etargetnet.com": "etarget", - "ethn.io": "ethnio", - "pages.etology.com": "etology", - "sa.etp-prod.com": "etp", - "etracker.com": "etracker", - "etracker.de": "etracker", - "sedotracker.com": "etracker", - "etrigue.com": "etrigue", - "etsystatic.com": "etsystatic", - "eulerian.net": "eulerian", - "eultech.fnac.com": "eulerian", - "ew3.io": "eulerian", - "euroads.dk": "euroads", - "euroads.fi": "euroads", - "euroads.no": "euroads", - "newpromo.europacash.com": "europecash", - "tracker.euroweb.net": "euroweb_counter", - "apptegic.com": "evergage.com", - "evergage.com": "evergage.com", - "listener.everstring.com": "everstring", - "waterfrontmedia.com": "everyday_health", - "betrad.com": "evidon", - "evidon.com": "evidon", - "evisitanalyst.com": "evisit_analyst", - "evisitcs.com": "evisit_analyst", - "websiteperform.com": "evisit_analyst", - "ads.exactdrive.com": "exact_drive", - "exactag.com": "exactag", - "exelator.com": "exelate", - "dynamicoxygen.com": "exitjunction", - "exitjunction.com": "exitjunction", - "exdynsrv.com": "exoclick", - "exoclick.com": "exoclick", - "exosrv.com": "exoclick", - "exoticads.com": "exoticads.com", - "expedia.com": "expedia", - "trvl-px.com": "expedia", - "eccmp.com": "experian", - "audienceiq.com": "experian_marketing_services", - "techlightenment.com": "experian_marketing_services", - "expo-max.com": "expo-max", - "server.exposebox.com": "expose_box", - "sf.exposebox.com": "expose_box_widgets", - "express.co.uk": "express.co.uk", - "d1lp05q4sghme9.cloudfront.net": "expressvpn", - "extreme-dm.com": "extreme_tracker", - "eyenewton.ru": "eye_newton", - "eyeota.net": "eyeota", - "eyereturn.com": "eyereturnmarketing", - "eyeviewads.com": "eyeview", - "ezakus.net": "ezakus", - "f11-ads.com": "f11-ads.com", - "facebook.com": "facebook", - "facebook.net": "facebook", - "graph.facebook.com": "facebook_audience", - "fbcdn.net": "facebook_cdn", - "fbsbx.com": "facebook_cdn", - "facetz.net": "facetz.dca", - "adsfac.eu": "facilitate_digital", - "adsfac.net": "facilitate_digital", - "adsfac.sg": "facilitate_digital", - "adsfac.us": "facilitate_digital", - "faktor.io": "faktor.io", - "thefancy.com": "fancy_widget", - "d1q7pknmpq2wkm.cloudfront.net": "fanplayr", - "fap.to": "fap.to", - "farlightgames.com": "farlight_pte_ltd", - "fastly-insights.com": "fastly_insights", - "fastly.net": "fastlylb.net", - "fastlylb.net": "fastlylb.net", - "fastly-edge.com": "fastlylb.net", - "fastly-masque.net": "fastlylb.net", - "fastpic.ru": "fastpic.ru", - "fmpub.net": "federated_media", - "fby.s3.amazonaws.com": "feedbackify", - "feedbackify.com": "feedbackify", - "feedburner.com": "feedburner.com", - "feedify.de": "feedify", - "feedjit.com": "feedjit", - "log.feedjit.com": "feedjit", - "tracking.feedperfect.com": "feedperfect", - "feedsportal.com": "feedsportal", - "feefo.com": "feefo", - "fidelity-media.com": "fidelity_media", - "fiksu.com": "fiksu", - "filamentapp.s3.amazonaws.com": "filament.io", - "fileserve.xyz": "fileserve", - "tools.financeads.net": "financeads", - "tracker.financialcontent.com": "financial_content", - "findizer.fr": "findizer.fr", - "findologic.com": "findologic.com", - "app-measurement.com": "firebase", - "fcm.googleapis.com": "firebase", - "firebase.com": "firebase", - "firebase.google.com": "firebase", - "firebase.googleapis.com": "firebase", - "firebaseapp.com": "firebase", - "firebaseappcheck.googleapis.com": "firebase", - "firebasedynamiclinks-ipv4.googleapis.com": "firebase", - "firebasedynamiclinks-ipv6.googleapis.com": "firebase", - "firebasedynamiclinks.googleapis.com": "firebase", - "firebaseinappmessaging.googleapis.com": "firebase", - "firebaseinstallations.googleapis.com": "firebase", - "firebaselogging-pa.googleapis.com": "firebase", - "firebaselogging.googleapis.com": "firebase", - "firebaseperusertopics-pa.googleapis.com": "firebase", - "firebaseremoteconfig.googleapis.com": "firebase", - "firebaseio.com": "firebaseio.com", - "firstimpression.io": "first_impression", - "fitanalytics.com": "fit_analytics", - "fivetran.com": "fivetran", - "flagads.net": "flag_ads", - "flagcounter.com": "flag_counter", - "flashnews.com.au": "flash", - "flashtalking.com": "flashtalking", - "flattr.com": "flattr_button", - "flexlinks.com": "flexoffers", - "linkoffers.net": "flexoffers", - "flickr.com": "flickr_badge", - "staticflickr.com": "flickr_badge", - "lflipboard.com": "flipboard", - "flipboard.com": "flipboard", - "flite.com": "flite", - "flixcdn.com": "flixcdn.com", - "flix360.com": "flixmedia", - "flixcar.com": "flixmedia", - "flocktory.com": "flocktory.com", - "flowplayer.org": "flowplayer", - "adingo.jp": "fluct", - "clicken.us": "fluent", - "strcst.net": "fluid", - "fluidads.co": "fluidads", - "fluidsurveys.com": "fluidsurveys", - "cdn.flurry.com": "flurry", - "data.flurry.com": "flurry", - "flurry.com": "flurry", - "flx1.com": "flxone", - "flxpxl.com": "flxone", - "api.flyertown.ca": "flyertown", - "adservinghost.com": "fmadserving", - "adservinginternational.com": "fmadserving", - "special.matchtv.ru": "fonbet", - "kavijaseuranta.fi": "fonecta", - "fontawesome.com": "fontawesome_com", - "foodieblogroll.com": "foodie_blogroll", - "footprintlive.com": "footprint", - "footprintdns.com": "footprintdns.com", - "forcetrac.com": "forcetrac", - "fqsecure.com": "forensiq", - "fqtag.com": "forensiq", - "securepaths.com": "forensiq", - "4seeresults.com": "foresee", - "foresee.com": "foresee", - "cdn-static.formisimo.com": "formisimo", - "forter.com": "forter", - "fortlachanhecksof.info": "fortlachanhecksof.info", - "platform.foursquare.com": "foursquare_widget", - "fout.jp": "fout.jp", - "fimserve.com": "fox_audience_network", - "foxsports.com.au": "fox_sports", - "fncstatic.com": "foxnews_static", - "cdn.foxpush.net": "foxpush", - "foxpush.com": "foxpush", - "foxtel.com.au": "foxtel", - "foxtelgroupcdn.net.au": "foxtel", - "foxydeal.com": "foxydeal_com", - "yabidos.com": "fraudlogix", - "besucherstatistiken.com": "free_counter", - "compteurdevisite.com": "free_counter", - "contadorvisitasgratis.com": "free_counter", - "contatoreaccessi.com": "free_counter", - "freecounterstat.com": "free_counter", - "statcounterfree.com": "free_counter", - "webcontadores.com": "free_counter", - "fastonlineusers.com": "free_online_users", - "fastwebcounter.com": "free_online_users", - "freeonlineusers.com": "free_online_users", - "atoomic.com": "free_pagerank", - "free-pagerank.com": "free_pagerank", - "freedom.com": "freedom_mortgage", - "freegeoip.net": "freegeoip_net", - "freenet.de": "freenet_de", - "freent.de": "freenet_de", - "freeview.com": "freeview", - "freeview.com.au": "freeview", - "freeviewaustralia.tv": "freeview", - "fwmrm.net": "freewheel", - "heimdall.fresh8.co": "fresh8", - "d36mpcpuzc4ztk.cloudfront.net": "freshdesk", - "freshdesk.com": "freshdesk", - "freshplum.com": "freshplum", - "friendbuy.com": "friendbuy", - "friendfeed.com": "friendfeed", - "adultfriendfinder.com": "friendfinder_network", - "amigos.com": "friendfinder_network", - "board-books.com": "friendfinder_network", - "cams.com": "friendfinder_network", - "facebookofsex.com": "friendfinder_network", - "getiton.com": "friendfinder_network", - "nostringsattached.com": "friendfinder_network", - "pop6.com": "friendfinder_network", - "streamray.com": "friendfinder_network", - "inpref.com": "frosmo_optimizer", - "inpref.s3-external-3.amazonaws.com": "frosmo_optimizer", - "inpref.s3.amazonaws.com": "frosmo_optimizer", - "adflan.com": "fruitflan", - "fruitflan.com": "fruitflan", - "fstrk.net": "fstrk.net", - "cookie.fuel451.com": "fuelx", - "fullstory.com": "fullstory", - "track.funnelytics.io": "funnelytics", - "angsrvr.com": "fyber", - "fyber.com": "fyber", - "game-advertising-online.com": "game_advertising_online", - "gameanalytics.com": "gameanalytics", - "gamedistribution.com": "gamedistribution.com", - "gamerdna.com": "gamerdna", - "gannett-cdn.com": "gannett", - "gaug.es": "gaug.es", - "gpm-digital.com": "gazprom-media_digital", - "js.gb-world.net": "gb-world", - "gdeslon.ru": "gdeslon", - "gdmdigital.com": "gdm_digital", - "gntm.geeen.co.jp": "geeen", - "lpomax.net": "geeen", - "gemius.pl": "gemius", - "generaltracking.de": "generaltracking_de", - "genesismedia.com": "genesis", - "gssprt.jp": "geniee", - "rsvpgenius.com": "genius", - "genoo.com": "genoo", - "js.geoads.com": "geoads", - "geolify.com": "geolify", - "geoplugin.net": "geoplugin", - "geotrust.com": "geotrust", - "geovisite.com": "geovisite", - "gestionpub.com": "gestionpub", - "app.getresponse.com": "get_response", - "getsitecontrol.com": "get_site_control", - "getconversion.net": "getconversion", - "widgets.getglue.com": "getglue", - "adhigh.net": "getintent", - "static.getkudos.me": "getkudos", - "yottos.com": "getmyad", - "gsfn.us": "getsatisfaction", - "gettyimages.com": "gettyimages", - "sensic.net": "gfk", - "gfycat.com": "gfycat.com", - "a.giantrealm.com": "giant_realm", - "videostat.com": "giantmedia", - "gigaonclick.com": "giga", - "analytics.gigyahosting1.com": "gigya", - "gigcount.com": "gigya", - "gigya.com": "gigya", - "service.giosg.com": "giosg", - "giphy.com": "giphy.com", - "giraff.io": "giraff.io", - "github.com": "github", - "githubassets.com": "github", - "githubusercontent.com": "github", - "ghcr.io": "github", - "github.blog": "github", - "github.dev": "github", - "octocaptcha.com": "github", - "githubapp.com": "github_apps", - "github.io": "github_pages", - "aff3.gittigidiyor.com": "gittigidiyor_affiliate_program", - "gittip.com": "gittip", - "sitest.jp": "glad_cube", - "glganltcs.space": "glganltcs.space", - "globalwebindex.net": "global_web_index", - "globalnotifier.com": "globalnotifier.com", - "globalsign.com": "globalsign", - "ad.globaltakeoff.net": "globaltakeoff", - "glomex.cloud": "glomex.com", - "glomex.com": "glomex.com", - "glotgrx.com": "glotgrx.com", - "a.gmdelivery.com": "gm_delivery", - "gmail.com": "gmail", - "ad.atown.jp": "gmo", - "gmx.net": "gmx_net", - "gmxpro.net": "gmx_net", - "go.com": "go.com", - "affiliate.godaddy.com": "godaddy_affiliate_program", - "trafficfacts.com": "godaddy_site_analytics", - "seal.godaddy.com": "godaddy_site_seal", - "tracking.godatafeed.com": "godatafeed", - "counter.goingup.com": "goingup", - "axf8.net": "gomez", - "goodadvert.ru": "goodadvert", - "google.at": "google", - "google.be": "google", - "google.ca": "google", - "google.ch": "google", - "google.co.id": "google", - "google.co.in": "google", - "google.co.jp": "google", - "google.co.ma": "google", - "google.co.th": "google", - "google.co.uk": "google", - "google.com": "google", - "google.com.ar": "google", - "google.com.au": "google", - "google.com.br": "google", - "google.com.mx": "google", - "google.com.tr": "google", - "google.com.tw": "google", - "google.com.ua": "google", - "google.cz": "google", - "google.de": "google", - "google.dk": "google", - "google.dz": "google", - "google.es": "google", - "google.fi": "google", - "google.fr": "google", - "google.gr": "google", - "google.hu": "google", - "google.ie": "google", - "google.it": "google", - "google.nl": "google", - "google.no": "google", - "google.pl": "google", - "google.pt": "google", - "google.ro": "google", - "google.rs": "google", - "google.ru": "google", - "google.se": "google", - "google.tn": "google", - "1e100.net": "google", - "agnss.goog": "google", - "channel.status.request.url": "google", - "g.cn": "google", - "g.co": "google", - "google.ad": "google", - "google.ae": "google", - "google.al": "google", - "google.am": "google", - "google.as": "google", - "google.az": "google", - "google.ba": "google", - "google.bf": "google", - "google.bg": "google", - "google.bi": "google", - "google.bj": "google", - "google.bs": "google", - "google.bt": "google", - "google.by": "google", - "google.cat": "google", - "google.cd": "google", - "google.cf": "google", - "google.cg": "google", - "google.ci": "google", - "google.cl": "google", - "google.cm": "google", - "google.cn": "google", - "google.co.ao": "google", - "google.co.bw": "google", - "google.co.ck": "google", - "google.co.cr": "google", - "google.co.il": "google", - "google.co.ke": "google", - "google.co.kr": "google", - "google.co.ls": "google", - "google.co.mz": "google", - "google.co.nz": "google", - "google.co.tz": "google", - "google.co.ug": "google", - "google.co.uz": "google", - "google.co.ve": "google", - "google.co.vi": "google", - "google.co.za": "google", - "google.co.zm": "google", - "google.co.zw": "google", - "google.com.af": "google", - "google.com.ag": "google", - "google.com.ai": "google", - "google.com.bd": "google", - "google.com.bh": "google", - "google.com.bn": "google", - "google.com.bo": "google", - "google.com.bz": "google", - "google.com.co": "google", - "google.com.cu": "google", - "google.com.cy": "google", - "google.com.ec": "google", - "google.com.eg": "google", - "google.com.et": "google", - "google.com.fj": "google", - "google.com.gh": "google", - "google.com.gi": "google", - "google.com.gt": "google", - "google.com.hk": "google", - "google.com.jm": "google", - "google.com.kh": "google", - "google.com.kw": "google", - "google.com.lb": "google", - "google.com.my": "google", - "google.com.na": "google", - "google.com.nf": "google", - "google.com.ng": "google", - "google.com.ni": "google", - "google.com.np": "google", - "google.com.om": "google", - "google.com.pa": "google", - "google.com.pe": "google", - "google.com.pg": "google", - "google.com.ph": "google", - "google.com.pk": "google", - "google.com.pr": "google", - "google.com.py": "google", - "google.com.qa": "google", - "google.com.sa": "google", - "google.com.sb": "google", - "google.com.sg": "google", - "google.com.sl": "google", - "google.com.sv": "google", - "google.com.tj": "google", - "google.com.uy": "google", - "google.com.vc": "google", - "google.com.vn": "google", - "google.cv": "google", - "google.dj": "google", - "google.dm": "google", - "google.ee": "google", - "google.fm": "google", - "google.ga": "google", - "google.ge": "google", - "google.gg": "google", - "google.gl": "google", - "google.gm": "google", - "google.gp": "google", - "google.gy": "google", - "google.hn": "google", - "google.hr": "google", - "google.ht": "google", - "google.im": "google", - "google.in": "google", - "google.iq": "google", - "google.is": "google", - "google.je": "google", - "google.jo": "google", - "google.kg": "google", - "google.ki": "google", - "google.kz": "google", - "google.la": "google", - "google.li": "google", - "google.lk": "google", - "google.lt": "google", - "google.lu": "google", - "google.lv": "google", - "google.md": "google", - "google.me": "google", - "google.mg": "google", - "google.mk": "google", - "google.ml": "google", - "google.mn": "google", - "google.ms": "google", - "google.mu": "google", - "google.mv": "google", - "google.mw": "google", - "google.ne": "google", - "google.net": "google", - "google.nr": "google", - "google.nu": "google", - "google.org": "google", - "google.pn": "google", - "google.ps": "google", - "google.rw": "google", - "google.sc": "google", - "google.sh": "google", - "google.si": "google", - "google.sk": "google", - "google.sm": "google", - "google.sn": "google", - "google.so": "google", - "google.sr": "google", - "google.st": "google", - "google.td": "google", - "google.tg": "google", - "google.tk": "google", - "google.tl": "google", - "google.tm": "google", - "google.to": "google", - "google.tt": "google", - "google.us": "google", - "google.vg": "google", - "google.vu": "google", - "google.ws": "google", - "googleapis.cn": "google", - "googlecode.com": "google", - "googledownloads.cn": "google", - "googleoptimize.com": "google", - "googleweblight.in": "google", - "googlezip.net": "google", - "gstatic.cn": "google", - "news.google.com": "google", - "oo.gl": "google", - "withgoogle.com": "google", - "googleadservices.com": "google_adservices", - "google-analytics.com": "google_analytics", - "app-analytics-services.com": "google_analytics", - "ssl-google-analytics.l.google.com": "google_analytics", - "www-googletagmanager.l.google.com": "google_analytics", - "appspot.com": "google_appspot", - "googlehosted.com": "google_appspot", - "accounts.google.com": "google_auth", - "myaccount.google.com": "google_auth", - "oauth2.googleapis.com": "google_auth", - "ogs.google.com": "google_auth", - "securetoken.googleapis.com": "google_auth", - "beacons-google.com": "google_beacons", - "alt1-mtalk.google.com": "google_chat", - "alt2-mtalk.google.com": "google_chat", - "alt3-mtalk.google.com": "google_chat", - "alt4-mtalk.google.com": "google_chat", - "alt5-mtalk.google.com": "google_chat", - "alt6-mtalk.google.com": "google_chat", - "alt7-mtalk.google.com": "google_chat", - "alt8-mtalk.google.com": "google_chat", - "chat.google.com": "google_chat", - "mobile-gtalk.l.google.com": "google_chat", - "mobile-gtalk4.l.google.com": "google_chat", - "mtalk.google.com": "google_chat", - "mtalk4.google.com": "google_chat", - "talk.google.com": "google_chat", - "talk.l.google.com": "google_chat", - "talkx.l.google.com": "google_chat", - "cloud.google.com": "google_cloud_platform", - "gcp.gvt2.com": "google_cloud_platform", - "storage.googleapis.com": "google_cloud_storage", - "adsensecustomsearchads.com": "google_custom_search", - "dns.google": "google_dns", - "dns.google.com": "google_dns", - "google-public-dns-a.google.com": "google_dns", - "google-public-dns-b.google.com": "google_dns", - "domains.google": "google_domains", - "googledomains.com": "google_domains", - "nic.google": "google_domains", - "registry.google": "google_domains", - "edge.google.com": "google_edge", - "mail-ads.google.com": "google_email", - "fonts.googleapis.com": "google_fonts", - "cloudfunctions.net": "google_hosted", - "ghs.googlehosted.com": "google_hosted", - "ghs4.googlehosted.com": "google_hosted", - "ghs46.googlehosted.com": "google_hosted", - "ghs6.googlehosted.com": "google_hosted", - "googlehosted.l.googleusercontent.com": "google_hosted", - "run.app": "google_hosted", - "supl.google.com": "google_location", - "earth.app.goo.gl": "google_maps", - "geo0.ggpht.com": "google_maps", - "geo1.ggpht.com": "google_maps", - "geo2.ggpht.com": "google_maps", - "geo3.ggpht.com": "google_maps", - "kh.google.com": "google_maps", - "maps.app.goo.gl": "google_maps", - "maps.google.ca": "google_maps", - "maps.google.ch": "google_maps", - "maps.google.co.jp": "google_maps", - "maps.google.co.uk": "google_maps", - "maps.google.com": "google_maps", - "maps.google.com.mx": "google_maps", - "maps.google.es": "google_maps", - "maps.google.se": "google_maps", - "maps.gstatic.com": "google_maps", - "doubleclick.net": "google_marketing", - "invitemedia.com": "google_marketing", - "adsense.google.com": "google_marketing", - "adservice.google.ca": "google_marketing", - "adservice.google.co.in": "google_marketing", - "adservice.google.co.kr": "google_marketing", - "adservice.google.co.uk": "google_marketing", - "adservice.google.co.za": "google_marketing", - "adservice.google.com": "google_marketing", - "adservice.google.com.ar": "google_marketing", - "adservice.google.com.au": "google_marketing", - "adservice.google.com.br": "google_marketing", - "adservice.google.com.co": "google_marketing", - "adservice.google.com.gt": "google_marketing", - "adservice.google.com.mx": "google_marketing", - "adservice.google.com.pe": "google_marketing", - "adservice.google.com.ph": "google_marketing", - "adservice.google.com.pk": "google_marketing", - "adservice.google.com.tr": "google_marketing", - "adservice.google.com.tw": "google_marketing", - "adservice.google.com.vn": "google_marketing", - "adservice.google.de": "google_marketing", - "adservice.google.dk": "google_marketing", - "adservice.google.es": "google_marketing", - "adservice.google.fr": "google_marketing", - "adservice.google.nl": "google_marketing", - "adservice.google.no": "google_marketing", - "adservice.google.pl": "google_marketing", - "adservice.google.ru": "google_marketing", - "adservice.google.vg": "google_marketing", - "adtrafficquality.google": "google_marketing", - "dai.google.com": "google_marketing", - "doubleclick.com": "google_marketing", - "doubleclickbygoogle.com": "google_marketing", - "googlesyndication-cn.com": "google_marketing", - "duo.google.com": "google_meet", - "hangouts.clients6.google.com": "google_meet", - "hangouts.google.com": "google_meet", - "hangouts.googleapis.com": "google_meet", - "meet.google.com": "google_meet", - "meetings.googleapis.com": "google_meet", - "stun.l.google.com": "google_meet", - "stun1.l.google.com": "google_meet", - "ggpht.com": "google_photos", - "play-fe.googleapis.com": "google_play", - "play-lh.googleusercontent.com": "google_play", - "play.google.com": "google_play", - "play.googleapis.com": "google_play", - "1e100cdn.net": "google_servers", - "gvt1.com": "google_servers", - "gvt2.com": "google_servers", - "gvt3.com": "google_servers", - "googlesyndication.com": "google_syndication", - "googletagmanager.com": "google_tag_manager", - "googletagservices.com": "google_tag_manager", - "translate.google.com": "google_translate", - "googletraveladservices.com": "google_travel_adds", - "pki.goog": "google_trust_services", - "googlecommerce.com": "google_trusted_stores", - "googleusercontent.com": "google_users", - "telephony.goog": "google_voice", - "voice.google.com": "google_voice", - "gmodules.com": "google_widgets", - "calendar.google.com": "google_workspace", - "contacts.google.com": "google_workspace", - "currents.google.com": "google_workspace", - "docs.google.com": "google_workspace", - "drive.google.com": "google_workspace", - "forms.google.com": "google_workspace", - "gsuite.google.com": "google_workspace", - "jamboard.google.com": "google_workspace", - "keep.google.com": "google_workspace", - "plus.google.com": "google_workspace", - "sheets.google.com": "google_workspace", - "slides.google.com": "google_workspace", - "spreadsheets.google.com": "google_workspace", - "googleapis.com": "googleapis.com", - "gooal.herokuapp.com": "goooal", - "gooo.al": "goooal", - "cdn.triggertag.gorillanation.com": "gorilla_nation", - "evolvemediametrics.com": "gorilla_nation", - "d1l6p2sc9645hc.cloudfront.net": "gosquared", - "gosquared.com": "gosquared", - "gostats.com": "gostats", - "govmetric.com": "govmetric", - "servmetric.com": "govmetric", - "b.grabo.bg": "grabo_affiliate", - "trw12.com": "grandslammedia", - "tuberewards.com": "grandslammedia", - "d2bw638ufki166.cloudfront.net": "granify", - "granify.com": "granify", - "grapeshot.co.uk": "grapeshot", - "gscontxt.net": "grapeshot", - "graphcomment.com": "graph_comment", - "gravatar.com": "gravatar", - "cdn.gravitec.net": "gravitec", - "gravity.com": "gravity_insights", - "grvcdn.com": "gravity_insights", - "greatviews.de": "greatviews.de", - "gandrad.org": "green_and_red", - "green-red.com": "green_and_red", - "co2stats.com": "green_certified_site", - "greenstory.ca": "green_story", - "greentube.com": "greentube.com", - "gt-cdn.net": "greentube.com", - "greystripe.com": "greystripe", - "groovehq.com": "groove", - "groovinads.com": "groovinads", - "bidagent.xad.com": "groundtruth", - "gmads.net": "groupm_server", - "grmtech.net": "groupm_server", - "media.gsimedia.net": "gsi_media", - "gstatic.com": "gstatic", - "fx.gtop.ro": "gtop", - "fx.gtopstats.com": "gtop", - "gubagootracking.com": "gugaboo", - "guj.de": "guj.de", - "emsservice.de": "gujems", - "gumgum.com": "gumgum", - "gumroad.com": "gumroad", - "gunggo.com": "gunggo", - "h12-media.com": "h12_ads", - "h12-media.net": "h12_ads", - "hnbutton.appspot.com": "hacker_news_button", - "haendlerbund.de": "haendlerbund.de", - "halogennetwork.com": "halogen_network", - "d1l7z5ofrj6ab8.cloudfront.net": "happy_fox_chat", - "ad.harrenmedianetwork.com": "harren_media", - "ads.networkhm.com": "harren_media", - "app.hatchbuck.com": "hatchbuck", - "hhcdn.ru": "head_hunter", - "healte.de": "healte.de", - "d36lvucg9kzous.cloudfront.net": "heap", - "heapanalytics.com": "heap", - "heatmap.it": "heatmap", - "weltsport.net": "heimspiel", - "hellobar.com": "hello_bar", - "hellosociety.com": "hellosociety", - "here.com": "here", - "herokuapp.com": "heroku", - "heureka.cz": "heureka-widget", - "heybubble.com": "heybubble", - "heyos.com": "heyos", - "adlink.net": "hi-media_performance", - "comclick.com": "hi-media_performance", - "hi-mediaserver.com": "hi-media_performance", - "himediads.com": "hi-media_performance", - "himediadx.com": "hi-media_performance", - "hiconversion.com": "hiconversion", - "highwebmedia.com": "highwebmedia.com", - "hwcdn.net": "highwinds", - "hiiir.com": "hiiir", - "hiro.tv": "hiro", - "histats.com": "histats", - "hit-parade.com": "hit-parade", - "hit.ua": "hit.ua", - "hitslink.com": "hitslink", - "hitsprocessor.com": "hitslink", - "hitsniffer.com": "hitsniffer", - "hittail.com": "hittail", - "hivedx.com": "hivedx.com", - "ads.thehiveworks.com": "hiveworks", - "hockeyapp.net": "hockeyapp", - "hoholikik.club": "hoholikik.club", - "h-cdn.com": "hola_player", - "homeaway.com": "homeaway", - "honeybadger.io": "honeybadger", - "hlserve.com": "hooklogic", - "apiae.hopscore.com": "hop-cube", - "hotdogsandads.com": "hotdogsandads.com", - "hotjar.com": "hotjar", - "hotkeys.com": "hotkeys", - "hotlog.ru": "hotlog.ru", - "hotwords.com": "hotwords", - "hotwords.es": "hotwords", - "howtank.com": "howtank.com", - "hqentertainmentnetwork.com": "hqentertainmentnetwork.com", - "justservingfiles.net": "hqentertainmentnetwork.com", - "hsoub.com": "hsoub", - "hstrck.com": "hstrck.com", - "httpool.com": "httpool", - "toboads.com": "httpool", - "hubrus.com": "hubrus", - "hs-analytics.net": "hubspot", - "hs-scripts.com": "hubspot", - "hsleadflows.net": "hubspot", - "hubapi.com": "hubspot", - "hubspot.com": "hubspot", - "forms.hubspot.com": "hubspot_forms", - "hubvisor.io": "hubvisor.io", - "files.hucksterbot.com": "hucksterbot", - "hupso.com": "hupso", - "hurra.com": "hurra_tracker", - "hybrid.ai": "hybrid.ai", - "targetix.net": "hybrid.ai", - "hypeads.org": "hype_exchange", - "hypercomments.com": "hypercomments", - "hyves.nl": "hyves_widgets", - "hyvyd.com": "hyvyd", - "ib-ibi.com": "i-behavior", - "i-mobile.co.jp": "i-mobile", - "r.i.ua": "i.ua", - "i10c.net": "i10c.net", - "i2i.jp": "i2i.jp", - "i2idata.com": "i2i.jp", - "consensu.org": "iab_consent", - "iadvize.com": "iadvize", - "cmcore.com": "ibm_customer_experience", - "coremetrics.com": "ibm_customer_experience", - "coremetrics.eu": "ibm_customer_experience", - "tracker.icerocket.com": "icerocket_tracker", - "nsimg.net": "icf_technology", - "optimix.asia": "iclick", - "ic-live.com": "icrossing", - "icstats.nl": "icstats", - "icuazeczpeoohx.com": "icuazeczpeoohx.com", - "id-news.net": "id-news.net", - "idcdn.de": "id-news.net", - "eu-1-id5-sync.com": "id5-sync", - "id5-sync.com": "id5-sync", - "id5.io": "id5-sync", - "cdn.id.services": "id_services", - "e-generator.com": "ideal_media", - "idealo.com": "idealo_com", - "identrust.com": "identrust", - "ideoclick.com": "ideoclick", - "s.idio.co": "idio", - "ie8eamus.com": "ie8eamus.com", - "600z.com": "ientry", - "api.iflychat.com": "iflychat", - "ignitionone.com": "ignitionone", - "knotice.net": "ignitionone", - "igodigital.com": "igodigital", - "ad.wsod.com": "ihs_markit", - "collserve.com": "ihs_markit_online_shopper_insigh", - "ihvmcqojoj.com": "ihvmcqojoj.com", - "iias.eu": "iias.eu", - "ijento.com": "ijento", - "adv.imadrep.co.kr": "imad", - "worthathousandwords.com": "image_advantage", - "picadmedia.com": "image_space_media", - "imgix.net": "imgix.net", - "imgur.com": "imgur", - "vidigital.ru": "imho_vi", - "immanalytics.com": "immanalytics", - "immobilienscout24.de": "immobilienscout24_de", - "static-immobilienscout24.de": "immobilienscout24_de", - "imonomy.com": "imonomy", - "7eer.net": "impact_radius", - "d3cxv97fi8q177.cloudfront.net": "impact_radius", - "evyy.net": "impact_radius", - "impactradius-event.com": "impact_radius", - "impactradius-tag.com": "impact_radius", - "impactradius.com": "impact_radius", - "ojrq.net": "impact_radius", - "r7ls.net": "impact_radius", - "impresionesweb.com": "impresiones_web", - "360yield.com": "improve_digital", - "iljmp.com": "improvely", - "inbenta.com": "inbenta", - "inboxsdk.com": "inboxsdk.com", - "indeed.com": "indeed", - "casalemedia.com": "index_exchange", - "indexww.com": "index_exchange", - "indieclick.com": "indieclick", - "industrybrains.com": "industry_brains", - "impdesk.com": "infectious_media", - "impressiondesk.com": "infectious_media", - "zachysprod.infiniteanalytics.com": "infinite_analytics", - "infinity-tracking.net": "infinity_tracking", - "engine.influads.com": "influads", - "infolinks.com": "infolinks", - "intextscript.com": "infolinks", - "ioam.de": "infonline", - "iocnt.net": "infonline", - "ivwbox.de": "infonline", - "informer.com": "informer_technologies", - "infusionsoft.com": "infusionsoft", - "keap.com": "infusionsoft", - "innity.com": "innity", - "innity.net": "innity", - "innogames.com": "innogames.de", - "innogames.de": "innogames.de", - "innogamescdn.com": "innogames.de", - "innovid.com": "innovid", - "inside-graph.com": "inside", - "useinsider.com": "insider", - "insightexpressai.com": "insightexpress", - "inskinad.com": "inskin_media", - "inskinmedia.com": "inskin_media", - "inspectlet.com": "inspectlet", - "inspsearchapi.com": "inspsearchapi.com", - "cdninstagram.com": "instagram_com", - "instagram.com": "instagram_com", - "tcgtrkr.com": "instant_check_mate", - "sdad.guru": "instart_logic", - "insticator.com": "insticator", - "load.instinctiveads.com": "instinctive", - "intango.com": "intango", - "adsafeprotected.com": "integral_ad_science", - "iasds01.com": "integral_ad_science", - "integral-marketing.com": "integral_marketing", - "intelliad.com": "intelliad", - "intelliad.de": "intelliad", - "saas.intelligencefocus.com": "intelligencefocus", - "ist-track.com": "intelligent_reach", - "intensedebate.com": "intense_debate", - "intentiq.com": "intent_iq", - "intentmedia.net": "intent_media", - "intercom.com": "intercom", - "intercom.io": "intercom", - "intercomassets.com": "intercom", - "intercomcdn.com": "intercom", - "interedy.info": "interedy.info", - "ads.intergi.com": "intergi", - "intermarkets.net": "intermarkets.net", - "intermundomedia.com": "intermundo_media", - "bbelements.com": "internet_billboard", - "goadservices.com": "internet_billboard", - "ibillboard.com": "internet_billboard", - "mediainter.net": "internet_billboard", - "voice2page.com": "internetaudioads", - "ibpxl.com": "internetbrands", - "ibsrv.net": "internetbrands", - "interpolls.com": "interpolls", - "ps7894.com": "interyield", - "intilery-analytics.com": "intilery", - "im-apps.net": "intimate_merger", - "investingchannel.com": "investingchannel", - "inviziads.com": "inviziads", - "js12.invoca.net": "invoca", - "ringrevenue.com": "invoca", - "invodo.com": "invodo", - "ionicframework.com": "ionicframework.com", - "dsp.io": "iotec", - "iesnare.com": "iovation", - "iovation.com": "iovation", - "ip-label.net": "ip-label", - "eltoro.com": "ip_targeting", - "iptargeting.com": "ip_targeting", - "ip-tracker.org": "ip_tracker", - "iptrack.io": "ip_tracker", - "iperceptions.com": "iperceptions", - "dust.ipfingerprint.com": "ipfingerprint", - "mbww.com": "ipg_mediabrands", - "ipify.org": "ipify", - "ipinfo.io": "ipinfo", - "iplogger.ru": "iplogger", - "centraliprom.com": "iprom", - "iprom.net": "iprom", - "ipromote.com": "ipromote", - "clickmanage.com": "iprospect", - "iq.com": "iqiyi", - "iqiyi.com": "iqiyi", - "qy.net": "iqiyi", - "addelive.com": "ironsource", - "afdads.com": "ironsource", - "delivery47.com": "ironsource", - "ironsrc.com": "ironsource", - "ironsrc.net": "ironsource", - "is.com": "ironsource", - "soom.la": "ironsource", - "supersonicads.com": "ironsource", - "tapjoy.com": "ironsource", - "adsbyisocket.com": "isocket", - "isocket.com": "isocket", - "isolarcloud.com": "isolarcloud", - "isolarcloud.com.a.lahuashanbx.com": "isolarcloud", - "isolarcloud.com.w.cdngslb.com": "isolarcloud", - "isolarcloud.com.w.kunlunsl.com": "isolarcloud", - "ispot.tv": "ispot.tv", - "itineraire.info": "itineraire.info", - "autolinkmaker.itunes.apple.com": "itunes_link_maker", - "ity.im": "ity.im", - "iubenda.com": "iubenda.com", - "ivcbrasil.org.br": "ivcbrasil.org.br", - "ivitrack.com": "ividence", - "iwiw.hu": "iwiw_widgets", - "ixiaa.com": "ixi_digital", - "ixquick.com": "ixquick.com", - "cdn.izooto.com": "izooto", - "jlist.com": "j-list_affiliate_program", - "getjaco.com": "jaco", - "janrainbackplane.com": "janrain", - "rpxnow.com": "janrain", - "jeeng.com": "jeeng", - "api.jeeng.com": "jeeng_widgets", - "phone-analytics.com": "jet_interactive", - "grazie.ai": "jetbrains", - "intellij.net": "jetbrains", - "jb.gg": "jetbrains", - "jetbrains.ai": "jetbrains", - "jetbrains.com": "jetbrains", - "jetbrains.com.cn": "jetbrains", - "jetbrains.dev": "jetbrains", - "jetbrains.net": "jetbrains", - "jetbrains.org": "jetbrains", - "jetbrains.ru": "jetbrains", - "jetbrains.space": "jetbrains", - "kotl.in": "jetbrains", - "kotlinconf.com": "jetbrains", - "kotlinlang.org": "jetbrains", - "myjetbrains.com": "jetbrains", - "talkingkotlin.com": "jetbrains", - "jetlore.com": "jetlore", - "pixel.wp.com": "jetpack", - "stats.wp.com": "jetpack", - "jetpackdigital.com": "jetpack_digital", - "jimcdn.com": "jimdo.com", - "jimdo.com": "jimdo.com", - "jimstatic.com": "jimdo.com", - "ads.jinkads.com": "jink", - "jirafe.com": "jirafe", - "jivosite.com": "jivochat", - "jivox.com": "jivox", - "jobs2careers.com": "jobs_2_careers", - "joinhoney.com": "joinhoney", - "create.leadid.com": "jornaya", - "d1tprjo2w7krrh.cloudfront.net": "jornaya", - "cdnjquery.com": "jquery", - "jquery.com": "jquery", - "cjmooter.xcache.kinxcdn.com": "js_communications", - "jsdelivr.net": "jsdelivr", - "jsecoin.com": "jse_coin", - "jsuol.com.br": "jsuol.com.br", - "contentabc.com": "juggcash", - "mofos.com": "juggcash", - "juiceadv.com": "juiceadv", - "juicyads.com": "juicyads", - "cdn.jumplead.com": "jumplead", - "jumpstarttaggingsolutions.com": "jumpstart_tagging_solutions", - "jumptap.com": "jumptap", - "jump-time.net": "jumptime", - "jumptime.com": "jumptime", - "components.justanswer.com": "just_answer", - "justpremium.com": "just_premium", - "justpremium.nl": "just_premium", - "justrelevant.com": "just_relevant", - "jvc.gg": "jvc.gg", - "d21rhj7n383afu.cloudfront.net": "jw_player", - "jwpcdn.com": "jw_player", - "jwplatform.com": "jw_player", - "jwplayer.com": "jw_player", - "jwpltx.com": "jw_player", - "jwpsrv.com": "jw_player", - "ltassrv.com": "jw_player_ad_solutions", - "kaeufersiegel.de": "kaeufersiegel.de", - "kairion.de": "kairion.de", - "kctag.net": "kairion.de", - "kaloo.ga": "kaloo.ga", - "kaltura.com": "kaltura", - "kameleoon.com": "kameleoon", - "kameleoon.eu": "kameleoon", - "kampyle.com": "kampyle", - "kanoodle.com": "kanoodle", - "kmi-us.com": "kantar_media", - "tnsinternet.be": "kantar_media", - "karambasecurity.com": "karambasecurity", - "kargo.com": "kargo", - "kaspersky-labs.com": "kaspersky-labs.com", - "kataweb.it": "kataweb.it", - "cen.katchup.fr": "katchup", - "kau.li": "kauli", - "kavanga.ru": "kavanga", - "kayosports.com.au": "kayo_sports", - "dc8na2hxrj29i.cloudfront.net": "keen_io", - "keen.io": "keen_io", - "widget.kelkoo.com": "kelkoo", - "xg4ken.com": "kenshoo", - "keymetric.net": "keymetric", - "lb.keytiles.com": "keytiles", - "keywee.co": "keywee", - "keywordmax.com": "keywordmax", - "massrelevance.com": "khoros", - "tweetriver.com": "khoros", - "khzbeucrltin.com": "khzbeucrltin.com", - "ping.kickfactory.com": "kickfactory", - "sa-as.com": "kickfire", - "sniff.visistat.com": "kickfire", - "stats.visistat.com": "kickfire", - "apikik.com": "kik", - "kik-gateway-use1.meetme.com": "kik", - "kik-live.com": "kik", - "kik-stream.meetme.com": "kik", - "kik.com": "kik", - "king.com": "king.com", - "midasplayer.com": "king_com", - "kinja-img.com": "kinja.com", - "kinja-static.com": "kinja.com", - "kinja.com": "kinja.com", - "kiosked.com": "kiosked", - "doug1izaerwt3.cloudfront.net": "kissmetrics.com", - "kissmetrics.com": "kissmetrics.com", - "ad.103092804.com": "kitara_media", - "kmdisplay.com": "kitara_media", - "kixer.com": "kixer", - "klarna.com": "klarna.com", - "a.klaviyo.com": "klaviyo", - "klaviyo.com": "klaviyo", - "klikki.com": "klikki", - "scr.kliksaya.com": "kliksaya", - "mediapeo2.com": "kmeleo", - "knoopstat.nl": "knoopstat", - "knotch.it": "knotch", - "komoona.com": "komoona", - "kona.kontera.com": "kontera_contentlink", - "ktxtr.com": "kontextr", - "kontextua.com": "kontextua", - "cleanrm.net": "korrelate", - "korrelate.net": "korrelate", - "trackit.ktxlytics.io": "kortx", - "kaptcha.com": "kount", - "krxd.net": "krux_digital", - "d31bfnnwekbny6.cloudfront.net": "kupona", - "kpcustomer.de": "kupona", - "q-sis.de": "kupona", - "kxcdn.com": "kxcdn.com", - "cdn.kyto.com": "kyto", - "cd-ladsp-com.s3.amazonaws.com": "ladsp.com", - "ladmp.com": "ladsp.com", - "ladsp.com": "ladsp.com", - "lanistaads.com": "lanista_concepts", - "latimes.com": "latimes", - "events.launchdarkly.com": "launch_darkly", - "launchdarkly.com": "launch_darkly", - "launchbit.com": "launchbit", - "launchpad.net": "launchpad", - "launchpadcontent.net": "launchpad", - "layer-ad.org": "layer-ad.org", - "ph-live.slatic.net": "lazada", - "slatic.net": "lazada", - "lcxdigital.com": "lcx_digital", - "lemde.fr": "le_monde.fr", - "t1.llanalytics.com": "lead_liaison", - "leadback.ru": "leadback", - "leaddyno.com": "leaddyno", - "123-tracker.com": "leadforensics", - "55-trk-srv.com": "leadforensics", - "business-path-55.com": "leadforensics", - "click-to-trace.com": "leadforensics", - "cloud-exploration.com": "leadforensics", - "cloud-journey.com": "leadforensics", - "cloud-trail.com": "leadforensics", - "cloudpath82.com": "leadforensics", - "cloudtracer101.com": "leadforensics", - "discover-path.com": "leadforensics", - "discovertrail.net": "leadforensics", - "domainanalytics.net": "leadforensics", - "dthvdr9.com": "leadforensics", - "explore-123.com": "leadforensics", - "finger-info.net": "leadforensics", - "forensics1000.com": "leadforensics", - "ip-route.net": "leadforensics", - "ipadd-path.com": "leadforensics", - "iproute66.com": "leadforensics", - "lead-123.com": "leadforensics", - "lead-analytics-1000.com": "leadforensics", - "lead-watcher.com": "leadforensics", - "leadforensics.com": "leadforensics", - "ledradn.com": "leadforensics", - "letterbox-path.com": "leadforensics", - "letterboxtrail.com": "leadforensics", - "network-handle.com": "leadforensics", - "path-follower.com": "leadforensics", - "path-trail.com": "leadforensics", - "scan-trail.com": "leadforensics", - "site-research.net": "leadforensics", - "srv1010elan.com": "leadforensics", - "the-lead-tracker.com": "leadforensics", - "trace-2000.com": "leadforensics", - "track-web.net": "leadforensics", - "trackdiscovery.net": "leadforensics", - "trackercloud.net": "leadforensics", - "trackinvestigate.net": "leadforensics", - "trail-viewer.com": "leadforensics", - "trail-web.com": "leadforensics", - "trailbox.net": "leadforensics", - "trailinvestigator.com": "leadforensics", - "web-path.com": "leadforensics", - "webforensics.co.uk": "leadforensics", - "websiteexploration.com": "leadforensics", - "www-path.com": "leadforensics", - "gate.leadgenic.com": "leadgenic", - "leadhit.ru": "leadhit", - "js.leadin.com": "leadin", - "io.leadingreports.de": "leading_reports", - "js.leadinspector.de": "leadinspector", - "formalyzer.com": "leadlander", - "trackalyzer.com": "leadlander", - "analytics.leadlifesolutions.net": "leadlife", - "my.leadpages.net": "leadpages", - "leadplace.fr": "leadplace", - "scorecard.wspisp.net": "leads_by_web.com", - "www.leadscoreapp.dk": "leadscoreapp", - "tracker.leadsius.com": "leadsius", - "leady.com": "leady", - "leady.cz": "leady", - "leiki.com": "leiki", - "lengow.com": "lengow", - "lenmit.com": "lenmit.com", - "lentainform.com": "lentainform.com", - "lenua.de": "lenua.de", - "letreach.com": "let_reach", - "lencr.org": "lets_encrypt", - "letsencrypt.org": "lets_encrypt", - "js.letvcdn.com": "letv", - "footprint.net": "level3_communications", - "alphonso.tv": "lgads", - "lgads.tv": "lgads", - "lg.com": "lgtv", - "lge.com": "lgtv", - "lgsmartad.com": "lgtv", - "lgtvcommon.com": "lgtv", - "lgtvsdp.com": "lgtv", - "licensebuttons.net": "licensebuttons.net", - "lfstmedia.com": "lifestreet_media", - "content-recommendation.net": "ligatus", - "ligadx.com": "ligatus", - "ligatus.com": "ligatus", - "ligatus.de": "ligatus", - "veeseo.com": "ligatus", - "limk.com": "limk", - "line-apps.com": "line_apps", - "line-scdn.net": "line_apps", - "line.me": "line_apps", - "tongji.linezing.com": "linezing", - "linkbucks.com": "linkbucks", - "linkconnector.com": "linkconnector", - "bizo.com": "linkedin", - "licdn.com": "linkedin", - "linkedin.com": "linkedin", - "lynda.com": "linkedin", - "ads.linkedin.com": "linkedin_ads", - "snap.licdn.com": "linkedin_analytics", - "bizographics.com": "linkedin_marketing_solutions", - "platform.linkedin.com": "linkedin_widgets", - "linker.hr": "linker", - "linkprice.com": "linkprice", - "lp4.io": "linkpulse", - "linksalpha.com": "linksalpha", - "erovinmo.com": "linksmart", - "linksmart.com": "linksmart", - "linkstorm.net": "linkstorm", - "linksynergy.com": "linksynergy.com", - "linkup.com": "linkup", - "linkwi.se": "linkwise", - "linkwithin.com": "linkwithin", - "lqm.io": "liquidm_technology_gmbh", - "lqmcdn.com": "liquidm_technology_gmbh", - "liqwid.net": "liqwid", - "list.ru": "list.ru", - "listrakbi.com": "listrak", - "live2support.com": "live2support", - "live800.com": "live800", - "ladesk.com": "live_agent", - "livehelpnow.net": "live_help_now", - "liadm.com": "live_intent", - "l-stat.livejournal.net": "live_journal", - "liveadexchanger.com": "liveadexchanger.com", - "livechat.s3.amazonaws.com": "livechat", - "livechatinc.com": "livechat", - "livechatinc.net": "livechat", - "livechatnow.com": "livechatnow", - "livechatnow.net": "livechatnow", - "liveclicker.net": "liveclicker", - "livecounter.dk": "livecounter", - "fyre.co": "livefyre", - "livefyre.com": "livefyre", - "yadro.ru": "liveinternet", - "liveperson.net": "liveperson", - "lpsnmedia.net": "liveperson", - "pippio.com": "liveramp", - "rapleaf.com": "liveramp", - "rlcdn.com": "liveramp", - "livere.co.kr": "livere", - "livere.co.kr.cizion.ixcloud.net": "livere", - "livesportmedia.eu": "livesportmedia.eu", - "analytics.livestream.com": "livestream", - "livetex.ru": "livetex.ru", - "lkqd.net": "lkqd", - "loadbee.com": "loadbee.com", - "loadercdn.com": "loadercdn.com", - "loadsource.org": "loadsource.org", - "web.localytics.com": "localytics", - "localytics.com": "localytics", - "cdn2.lockerdome.com": "lockerdome", - "addtoany.com": "lockerz_share", - "pixel.loganmedia.mobi": "logan_media", - "ping.answerbook.com": "logdna", - "loggly.com": "loggly", - "logly.co.jp": "logly", - "logsss.com": "logsss.com", - "lomadee.com": "lomadee", - "assets.loomia.com": "loomia", - "loop11.com": "loop11", - "lfov.net": "loopfuse_oneview", - "crwdcntrl.net": "lotame", - "vidcpm.com": "lottex_inc", - "tracker.samplicio.us": "lucid", - "lucidmedia.com": "lucid_media", - "lead.adsender.us": "lucini", - "livestatserver.com": "lucky_orange", - "luckyorange.com": "lucky_orange", - "luckyorange.net": "lucky_orange", - "luckypushh.com": "luckypushh.com", - "adelixir.com": "lxr100", - "lypn.com": "lynchpin_analytics", - "lypn.net": "lynchpin_analytics", - "lytics.io": "lytics", - "lyuoaxruaqdo.com": "lyuoaxruaqdo.com", - "m-pathy.com": "m-pathy", - "mpnrs.com": "m._p._newmedia", - "m4n.nl": "m4n", - "madadsmedia.com": "mad_ads_media", - "madeleine.de": "madeleine.de", - "dinclinx.com": "madison_logic", - "madisonlogic.com": "madison_logic", - "madnet.ru": "madnet", - "eu2.madsone.com": "mads", - "magna.ru": "magna_advertise", - "d3ezl4ajpp2zy8.cloudfront.net": "magnetic", - "domdex.com": "magnetic", - "domdex.net": "magnetic", - "magnetisemedia.com": "magnetise_group", - "magnify360.com": "magnify360", - "magnuum.com": "magnuum.com", - "ad.mail.ru": "mail.ru_banner", - "imgsmail.ru": "mail.ru_group", - "mail.ru": "mail.ru_group", - "mradx.net": "mail.ru_group", - "odnoklassniki.ru": "mail.ru_group", - "ok.ru": "mail.ru_group", - "chimpstatic.com": "mailchimp_tracking", - "list-manage.com": "mailchimp_tracking", - "mailchimp.com": "mailchimp_tracking", - "mailerlite.com": "mailerlite.com", - "mailtrack.io": "mailtrack.io", - "mainadv.com": "mainadv", - "makazi.com": "makazi", - "makeappdev.xyz": "makeappdev.xyz", - "makesource.cool": "makesource.cool", - "widgets.mango-office.ru": "mango", - "manycontacts.com": "manycontacts", - "mapandroute.de": "mapandroute.de", - "mapbox.com": "mapbox", - "www.maploco.com": "maploco", - "px.marchex.io": "marchex", - "voicestar.com": "marchex", - "mmadsgadget.com": "marimedia", - "qadabra.com": "marimedia", - "qadserve.com": "marimedia", - "qadservice.com": "marimedia", - "marinsm.com": "marin_search_marketer", - "markandmini.com": "mark_+_mini", - "ak-cdn.placelocal.com": "market_thunder", - "dt00.net": "marketgid", - "dt07.net": "marketgid", - "marketgid.com": "marketgid", - "mgid.com": "marketgid", - "marketingautomation.si": "marketing_automation", - "marketo.com": "marketo", - "marketo.net": "marketo", - "mktoresp.com": "marketo", - "caanalytics.com": "markmonitor", - "mmstat.com": "markmonitor", - "markmonitor.com": "markmonitor", - "netscope.data.marktest.pt": "marktest", - "marshadow.io": "marshadow.io", - "martiniadnetwork.com": "martini_media", - "edigitalsurvey.com": "maru-edu", - "marvellousmachine.net": "marvellous_machine", - "mbn.com.ua": "master_banner_network", - "mastertarget.ru": "mastertarget", - "rns.matelso.de": "matelso", - "matheranalytics.com": "mather_analytics", - "mathjax.org": "mathjax.org", - "nzaza.com": "matiro", - "matomo.cloud": "matomo", - "matomo.org": "matomo", - "piwik.org": "matomo", - "adsmarket.com": "matomy_market", - "m2pub.com": "matomy_market", - "matrix.org": "matrix", - "mb01.com": "maxbounty", - "maxcdn.com": "maxcdn", - "netdna-cdn.com": "maxcdn", - "netdna-ssl.com": "maxcdn", - "maxlab.ru": "maxlab", - "maxmind.com": "maxmind", - "maxonclick.com": "maxonclick_com", - "mxptint.net": "maxpoint_interactive", - "maxymiser.hs.llnwd.net": "maxymiser", - "maxymiser.net": "maxymiser", - "m6r.eu": "mbr_targeting", - "pixel.adbuyer.com": "mbuy", - "mcabi.mcloudglobal.com": "mcabi", - "scanalert.com": "mcafee_secure", - "ywxi.net": "mcafee_secure", - "mconet.biz": "mconet", - "mdotlabs.com": "mdotlabs", - "media-clic.com": "media-clic", - "media-imdb.com": "media-imdb.com", - "media.net": "media.net", - "mediaimpact.de": "media_impact", - "mookie1.com": "media_innovation_group", - "idntfy.ru": "media_today", - "s1.mediaad.org": "mediaad", - "mlnadvertising.com": "mediaglu", - "fhserve.com": "mediahub", - "media-lab.ai": "medialab", - "medialab.la": "medialab", - "adnet.ru": "medialand", - "medialand.ru": "medialand", - "medialead.de": "medialead", - "mathads.com": "mediamath", - "mathtag.com": "mediamath", - "mediametrics.ru": "mediametrics", - "audit.median.hu": "median", - "mediapass.com": "mediapass", - "mt.mediapostcommunication.net": "mediapost_communications", - "mediarithmics.com": "mediarithmics.com", - "tns-counter.ru": "mediascope", - "ad.media-servers.net": "mediashakers", - "adsvc1107131.net": "mediashift", - "mediator.media": "mediator.media", - "mediav.com": "mediav", - "adnetinteractive.com": "mediawhiz", - "adnetinteractive.net": "mediawhiz", - "mediego.com": "medigo", - "medleyads.com": "medley", - "adnet.com.tr": "medyanet", - "e-kolay.net": "medyanet", - "medyanetads.com": "medyanet", - "cim.meebo.com": "meebo_bar", - "meetrics.net": "meetrics", - "mxcdn.net": "meetrics", - "research.de.com": "meetrics", - "counter.megaindex.ru": "megaindex", - "mega.co.nz": "meganz", - "mega.io": "meganz", - "mega.nz": "meganz", - "mein-bmi.com": "mein-bmi.com", - "webvisitor.melissadata.net": "melissa", - "meltdsp.com": "melt", - "mlt01.com": "menlo", - "mentad.com": "mentad", - "mercadoclics.com": "mercado", - "mercadolivre.com.br": "mercado", - "mlstatic.com": "mercado", - "merchantadvantage.com": "merchantadvantage", - "merchenta.com": "merchenta", - "roia.biz": "mercury_media", - "cdn.merklesearch.com": "merkle_research", - "rkdms.com": "merkle_rkg", - "messenger.com": "messenger.com", - "ad.metanetwork.com": "meta_network", - "metaffiliation.com": "metaffiliation.com", - "netaffiliation.com": "metaffiliation.com", - "metalyzer.com": "metapeople", - "mlsat02.de": "metapeople", - "metrigo.com": "metrigo", - "metriweb.be": "metriweb", - "miaozhen.com": "miaozhen", - "microad.co.jp": "microad", - "microad.jp": "microad", - "microad.net": "microad", - "microadinc.com": "microad", - "azurewebsites.net": "microsoft", - "cloudapp.net": "microsoft", - "gfx.ms": "microsoft", - "microsoft.com": "microsoft", - "microsoftonline-p.com": "microsoft", - "microsoftonline.com": "microsoft", - "microsofttranslator.com": "microsoft", - "msecnd.net": "microsoft", - "msedge.net": "microsoft", - "msocdn.com": "microsoft", - "onestore.ms": "microsoft", - "s-microsoft.com": "microsoft", - "trouter.io": "microsoft", - "windows.net": "microsoft", - "aka.ms": "microsoft", - "microsoftazuread-sso.com": "microsoft", - "bingapis.com": "microsoft", - "msauth.net": "microsoft", - "msauthimages.net": "microsoft", - "msftauth.net": "microsoft", - "msftstatic.com": "microsoft", - "msidentity.com": "microsoft", - "nelreports.net": "microsoft", - "windowscentral.com": "microsoft", - "analytics.live.com": "microsoft_analytics", - "a.clarity.ms": "microsoft_clarity", - "b.clarity.ms": "microsoft_clarity", - "c.clarity.ms": "microsoft_clarity", - "d.clarity.ms": "microsoft_clarity", - "e.clarity.ms": "microsoft_clarity", - "f.clarity.ms": "microsoft_clarity", - "g.clarity.ms": "microsoft_clarity", - "h.clarity.ms": "microsoft_clarity", - "i.clarity.ms": "microsoft_clarity", - "j.clarity.ms": "microsoft_clarity", - "log.clarity.ms": "microsoft_clarity", - "www.clarity.ms": "microsoft_clarity", - "mmismm.com": "mindset_media", - "imgfarm.com": "mindspark", - "mindspark.com": "mindspark", - "staticimgfarm.com": "mindspark", - "mvtracker.com": "mindviz_tracker", - "minewhat.com": "minewhat", - "mintsapp.io": "mints_app", - "snackly.co": "minute.ly", - "snippet.minute.ly": "minute.ly", - "apv.configuration.minute.ly": "minute.ly_video", - "get.mirando.de": "mirando", - "mirtesen.ru": "mirtesen.ru", - "misterbell.com": "mister_bell", - "mixi.jp": "mixi", - "mixpanel.com": "mixpanel", - "mxpnl.com": "mixpanel", - "mxpnl.net": "mixpanel", - "swf.mixpo.com": "mixpo", - "app.mluvii.com": "mluvii", - "mncdn.com": "mncdn.com", - "moatads.com": "moat", - "moatpixel.com": "moat", - "mobicow.com": "mobicow", - "a.mobify.com": "mobify", - "mobtrks.com": "mobtrks.com", - "ads.mocean.mobi": "mocean_mobile", - "ads.moceanads.com": "mocean_mobile", - "chat.mochapp.com": "mochapp", - "intelligentpixel.modernimpact.com": "modern_impact", - "teljari.is": "modernus", - "modulepush.com": "modulepush.com", - "mogointeractive.com": "mogo_interactive", - "mokonocdn.com": "mokono_analytics", - "devappgrant.space": "monero_miner", - "monetate.net": "monetate", - "monetize-me.com": "monetize_me", - "ads.themoneytizer.com": "moneytizer", - "mongoosemetrics.com": "mongoose_metrics", - "track.monitis.com": "monitis", - "monitus.net": "monitus", - "fonts.net": "monotype_gmbh", - "fonts.com": "monotype_imaging", - "cdn.monsido.com": "monsido", - "monster.com": "monster_advertising", - "mooxar.com": "mooxar", - "mopinion.com": "mopinion.com", - "mopub.com": "mopub", - "ad.ad-arata.com": "more_communication", - "moras.jp": "moreads", - "nedstatbasic.net": "motigo_webstats", - "webstats.motigo.com": "motigo_webstats", - "analytics.convertlanguage.com": "motionpoint", - "mouseflow.com": "mouseflow", - "mousestats.com": "mousestats", - "s.mousetrace.com": "mousetrace", - "movad.de": "mov.ad", - "movad.net": "mov.ad", - "micpn.com": "movable_ink", - "mvb.me": "movable_media", - "moz.com": "moz", - "firefox.com": "mozilla", - "mozaws.net": "mozilla", - "mozgcp.net": "mozilla", - "mozilla.com": "mozilla", - "mozilla.net": "mozilla", - "mozilla.org": "mozilla", - "storage.mozoo.com": "mozoo", - "tracker.mrpfd.com": "mrp", - "mrpdata.com": "mrpdata", - "mrpdata.net": "mrpdata", - "mrskincash.com": "mrskincash", - "a-msedge.net": "msedge", - "b-msedge.net": "msedge", - "dual-s-msedge.net": "msedge", - "e-msedge.net": "msedge", - "k-msedge.net": "msedge", - "l-msedge.net": "msedge", - "s-msedge.net": "msedge", - "spo-msedge.net": "msedge", - "t-msedge.net": "msedge", - "wac-msedge.net": "msedge", - "msn.com": "msn", - "s-msn.com": "msn", - "musculahq.appspot.com": "muscula", - "litix.io": "mux_inc", - "mybloglog.com": "mybloglog", - "t.p.mybuys.com": "mybuys", - "mycdn.me": "mycdn.me", - "mycliplister.com": "mycliplister.com", - "mycounter.com.ua": "mycounter.ua", - "mycounter.ua": "mycounter.ua", - "myfonts.net": "myfonts", - "mypagerank.net": "mypagerank", - "stat.mystat.hu": "mystat", - "mythings.com": "mythings", - "mystat-in.net": "mytop_counter", - "nab.com": "nab", - "nab.com.au": "nab", - "nab.net": "nab", - "nabgroup.com": "nab", - "national.com.au": "nab", - "nationalaustraliabank.com.au": "nab", - "nationalbank.com.au": "nab", - "nakanohito.jp": "nakanohito.jp", - "namogoo.coom": "namogoo", - "nanigans.com": "nanigans", - "audiencemanager.de": "nano_interactive", - "nanorep.com": "nanorep", - "narando.com": "narando", - "static.bam-x.com": "narrativ", - "narrative.io": "narrative_io", - "p1.ntvk1.ru": "natimatica", - "nativeads.com": "nativeads.com", - "cdn01.nativeroll.tv": "nativeroll", - "ntv.io": "nativo", - "postrelease.com": "nativo", - "navdmp.com": "navegg_dmp", - "naver.com": "naver.com", - "naver.net": "naver.com", - "s-nbcnews.com": "nbc_news", - "richmedia247.com": "ncol", - "needle.com": "needle", - "nekudo.com": "nekudo.com", - "neodatagroup.com": "neodata", - "ad-srv.net": "neory", - "contentspread.net": "neory", - "neory-tm.com": "neory", - "simptrack.com": "neory", - "nerfherdersolo.com": "nerfherdersolo_com", - "wemfbox.ch": "net-metrix", - "cdnma.com": "net-results", - "nr7.us": "net-results", - "netavenir.com": "net_avenir", - "netcommunities.com": "net_communities", - "visibility-stats.com": "net_visibility", - "netbiscuits.net": "netbiscuits", - "bbtrack.net": "netbooster_group", - "netbooster.com": "netbooster_group", - "netflix.com": "netflix", - "nflxext.com": "netflix", - "nflximg.net": "netflix", - "nflxso.net": "netflix", - "nflxvideo.net": "netflix", - "flxvpn.net": "netflix", - "netflix.ca": "netflix", - "netflix.com.au": "netflix", - "netflix.net": "netflix", - "netflixdnstest1.com": "netflix", - "netflixdnstest10.com": "netflix", - "netflixdnstest2.com": "netflix", - "netflixdnstest3.com": "netflix", - "netflixdnstest4.com": "netflix", - "netflixdnstest5.com": "netflix", - "netflixdnstest6.com": "netflix", - "netflixdnstest7.com": "netflix", - "netflixdnstest8.com": "netflix", - "netflixdnstest9.com": "netflix", - "netflixinvestor.com": "netflix", - "netflixstudios.com": "netflix", - "netflixtechblog.com": "netflix", - "nflximg.com": "netflix", - "netify.ai": "netify", - "netzathleten-media.de": "netletix", - "netminers.dk": "netminers", - "netmining.com": "netmining", - "netmng.com": "netmining", - "stat.netmonitor.fi": "netmonitor", - "glanceguide.com": "netratings_sitecensus", - "imrworldwide.com": "netratings_sitecensus", - "vizu.com": "netratings_sitecensus", - "netrk.net": "netrk.net", - "netseer.com": "netseer", - "netshelter.net": "netshelter", - "nsaudience.pl": "netsprint_audience", - "nwidget.networkedblogs.com": "networkedblogs", - "adadvisor.net": "neustar_adadvisor", - "d1ros97qkrwjf5.cloudfront.net": "new_relic", - "newrelic.com": "new_relic", - "nr-data.net": "new_relic", - "codestream.com": "new_relic", - "newscgp.com": "newscgp.com", - "nmcdn.us": "newsmax", - "newstogram.com": "newstogram", - "newsupdatedir.info": "newsupdatedir.info", - "newsupdatewe.info": "newsupdatewe.info", - "ads.newtention.net": "newtention", - "ads.newtentionassets.net": "newtention", - "nexage.com": "nexage", - "nexeps.com": "nexeps.com", - "nxtck.com": "next_performance", - "track.nextuser.com": "next_user", - "imgsrv.nextag.com": "nextag_roi_optimizer", - "nextclick.pl": "nextclick", - "nextstat.com": "nextstat", - "d1d8vn0fpluuz7.cloudfront.net": "neytiv", - "ads.ngageinc.com": "ngage_inc.", - "nice264.com": "nice264.com", - "nimblecommerce.com": "nimblecommerce", - "nineanalytics.io": "nine_direct_digital", - "cho-chin.com": "ninja_access_analysis", - "donburako.com": "ninja_access_analysis", - "hishaku.com": "ninja_access_analysis", - "shinobi.jp": "ninja_access_analysis", - "static.nirror.com": "nirror", - "nitropay.com": "nitropay", - "nk.pl": "nk.pl_widgets", - "noaa.gov": "noaa.gov", - "track.noddus.com": "noddus", - "contextbar.ru": "nolix", - "nonli.com": "nonli", - "non.li": "nonli", - "trkme.net": "nonstop_consulting", - "noop.style": "noop.style", - "nosto.com": "nosto.com", - "adleadevent.com": "notify", - "notifyfox.com": "notifyfox", - "notion.so": "notion", - "nowinteract.com": "now_interact", - "npario-inc.net": "npario", - "nplexmedia.com": "nplexmedia", - "nrelate.com": "nrelate", - "ns8.com": "ns8", - "nt.vc": "nt.vc", - "featurelink.com": "ntent", - "ntp.org": "ntppool", - "ntppool.org": "ntppool", - "tracer.jp": "nttcom_online_marketing_solutions", - "nuffnang.com": "nuffnang", - "nuggad.net": "nugg.ad", - "rotator.adjuggler.com": "nui_media", - "numbers.md": "numbers.md", - "channeliq.com": "numerator", - "nyacampwk.com": "nyacampwk.com", - "nyetm2mkch.com": "nyetm2mkch.com", - "nyt.com": "nyt.com", - "nytimes.com": "nyt.com", - "o12zs3u2n.com": "o12zs3u2n.com", - "o2.pl": "o2.pl", - "o2online.de": "o2online.de", - "oath.com": "oath_inc", - "observerapp.com": "observer", - "ocioso.com.br": "ocioso", - "oclasrv.com": "oclasrv.com", - "octapi.net": "octapi.net", - "service.octavius.rocks": "octavius", - "office.com": "office.com", - "office.net": "office.net", - "office365.com": "office365.com", - "oghub.io": "oghub.io", - "ohmystats.com": "oh_my_stats", - "adohana.com": "ohana_advertising_network", - "photorank.me": "olapic", - "olark.com": "olark", - "olx-st.com": "olx-st.com", - "onap.io": "olx-st.com", - "omarsys.com": "omarsys.com", - "ometria.com": "ometria", - "omgpm.com": "omg", - "omniconvert.com": "omniconvert.com", - "omnidsp.com": "omniscienta", - "oms.eu": "oms", - "omsnative.de": "oms", - "onaudience.com": "onaudience", - "btc-echode.api.oneall.com": "oneall", - "tracking.onefeed.co.uk": "onefeed", - "onesignal.com": "onesignal", - "os.tc": "onesignal", - "stat.onestat.com": "onestat", - "ocdn.eu": "onet.pl", - "onet.pl": "onet.pl", - "onetag.com": "onetag", - "s-onetag.com": "onetag", - "onetrust.com": "onetrust", - "fogl1onf.com": "onfocus.io", - "onfocus.io": "onfocus.io", - "onlinewebstat.com": "onlinewebstat", - "onlinewebstats.com": "onlinewebstat", - "onswipe.com": "onswipe", - "onthe.io": "onthe.io", - "moon-ray.com": "ontraport_autopilot", - "moonraymarketing.com": "ontraport_autopilot", - "ooyala.com": "ooyala.com", - "openadex.dk": "open_adexchange", - "247realmedia.com": "open_adstream", - "oaserve.com": "open_adstream", - "realmedia.com": "open_adstream", - "realmediadigital.com": "open_adstream", - "opensharecount.com": "open_share_count", - "chatgpt.com": "openai", - "oaistatic.com": "openai", - "oaiusercontent.com": "openai", - "openai.com": "openai", - "oloadcdn.net": "openload", - "openload.co": "openload", - "openstat.net": "openstat", - "spylog.com": "openstat", - "spylog.ru": "openstat", - "opentracker.net": "opentracker", - "openwebanalytics.com": "openwebanalytics", - "odnxs.net": "openx", - "openx.net": "openx", - "openx.org": "openx", - "openxenterprise.com": "openx", - "servedbyopenx.com": "openx", - "adsummos.net": "operative_media", - "opinary.com": "opinary", - "opinionbar.com": "opinionbar", - "emagazines.com": "oplytic", - "allawnos.com": "oppo", - "allawntech.com": "oppo", - "heytapdl.com": "oppo", - "heytapmobi.com": "oppo", - "heytapmobile.com": "oppo", - "oppomobile.com": "oppo", - "opta.net": "opta.net", - "optaim.com": "optaim", - "cookielaw.org": "optanaon", - "service.optify.net": "optify", - "optimatic.com": "optimatic", - "optmd.com": "optimax_media_delivery", - "optimicdn.com": "optimicdn.com", - "optimizely.com": "optimizely", - "episerver.net": "optimizely", - "optimonk.com": "optimonk", - "mstrlytcs.com": "optinmonster", - "optmnstr.com": "optinmonster", - "optmstr.com": "optinmonster", - "optnmstr.com": "optinmonster", - "optincollect.com": "optinproject.com", - "volvelle.tech": "optomaton", - "ora.tv": "ora.tv", - "oracleinfinity.io": "oracle_infinity", - "instantservice.com": "oracle_live_help", - "ts.istrack.com": "oracle_live_help", - "rightnowtech.com": "oracle_rightnow", - "rnengage.com": "oracle_rightnow", - "orange.fr": "orange", - "orangeads.fr": "orange", - "ads.orange142.com": "orange142", - "wanadoo.fr": "orange_france", - "otracking.com": "orangesoda", - "emxdgt.com": "orc_international", - "static.ordergroove.com": "order_groove", - "orelsite.ru": "orel_site", - "otclick-adv.ru": "otclick", - "othersearch.info": "othersearch.info", - "otm-r.com": "otm-r.com", - "otto.de": "otto.de", - "ottogroup.media": "otto.de", - "outbrain.com": "outbrain", - "outbrainimg.com": "outbrain", - "live.com": "outlook", - "cloud.microsoft": "outlook", - "hotmail.com": "outlook", - "outlook.com": "outlook", - "svc.ms": "outlook", - "overheat.it": "overheat.it", - "oewabox.at": "owa", - "owneriq.net": "owneriq", - "ownpage.fr": "ownpage", - "owox.com": "owox.com", - "adconnexa.com": "oxamedia", - "adsbwm.com": "oxamedia", - "oxomi.com": "oxomi.com", - "oztam.com.au": "oztam", - "pageanalytics.space": "pageanalytics.space", - "blockmetrics.com": "pagefair", - "pagefair.com": "pagefair", - "pagefair.net": "pagefair", - "btloader.com": "pagefair", - "ghmedia.com": "pagescience", - "777seo.com": "paid-to-promote", - "paid-to-promote.net": "paid-to-promote", - "ptp22.com": "paid-to-promote", - "ptp33.com": "paid-to-promote", - "paperg.com": "paperg", - "pardot.com": "pardot", - "d1z2jf7jlzjs58.cloudfront.net": "parsely", - "parsely.com": "parsely", - "partner-ads.com": "partner-ads", - "passionfruitads.com": "passionfruit", - "pathful.com": "pathful", - "pay-hit.com": "pay-hit", - "payclick.it": "payclick", - "app.paykickstart.com": "paykickstart", - "paypal.com": "paypal", - "paypalobjects.com": "paypal", - "pcvark.com": "pcvark.com", - "peer39.com": "peer39", - "peer39.net": "peer39", - "peer5.com": "peer5.com", - "peerius.com": "peerius", - "pendo.io": "pendo.io", - "pepper.com": "pepper.com", - "gopjn.com": "pepperjam", - "pjatr.com": "pepperjam", - "pjtra.com": "pepperjam", - "pntra.com": "pepperjam", - "pntrac.com": "pepperjam", - "pntrs.com": "pepperjam", - "player.pepsia.com": "pepsia", - "perfdrive.com": "perfdrive.com", - "perfectaudience.com": "perfect_audience", - "prfct.co": "perfect_audience", - "perfectmarket.com": "perfect_market", - "perfops.io": "perfops", - "performgroup.com": "perform_group", - "analytics.performable.com": "performable", - "performancing.com": "performancing_metrics", - "performax.cz": "performax", - "perimeterx.net": "perimeterx.net", - "permutive.com": "permutive", - "persgroep.net": "persgroep", - "persianstat.com": "persianstat", - "code.pers.io": "persio", - "counter.personyze.com": "personyze", - "petametrics.com": "petametrics", - "ads.pheedo.com": "pheedo", - "app.phonalytics.com": "phonalytics", - "d2bgg7rjywcwsy.cloudfront.net": "phunware", - "piguiqproxy.com": "piguiqproxy.com", - "trgt.eu": "pilot", - "pingdom.net": "pingdom", - "pinimg.com": "pinterest", - "pinterest.com": "pinterest", - "app.pipz.io": "pipz", - "disabled.invalid": "piwik", - "piwik.pro": "piwik_pro_analytics_suite", - "adrta.com": "pixalate", - "app.pixelpop.co": "pixel_union", - "pixfuture.net": "pixfuture", - "vast1.pixfuture.com": "pixfuture", - "piximedia.com": "piximedia", - "pizzaandads.com": "pizzaandads_com", - "ads.placester.net": "placester", - "d3uemyw1e5n0jw.cloudfront.net": "placester", - "pladform.com": "pladform.ru", - "tag.bi.serviceplan.com": "plan.net_experience_cloud", - "pfrm.co": "platform360", - "impact-ad.jp": "platformone", - "loveadvert.ru": "play_by_mamba", - "playbuzz.com": "playbuzz.com", - "pof.com": "plenty_of_fish", - "plex.bz": "plex", - "plex.direct": "plex", - "plex.tv": "plex", - "analytics.plex.tv": "plex_metrics", - "metrics.plex.tv": "plex_metrics", - "plista.com": "plista", - "plugrush.com": "plugrush", - "pluso.ru": "pluso.ru", - "plutusads.com": "plutusads", - "pmddby.com": "pmddby.com", - "pnamic.com": "pnamic.com", - "po.st": "po.st", - "widgets.getpocket.com": "pocket", - "pocketcents.com": "pocketcents", - "pointificsecure.com": "pointific", - "pointroll.com": "pointroll", - "poirreleast.club": "poirreleast.club", - "mediavoice.com": "polar.me", - "polar.me": "polar.me", - "polarmobile.com": "polar.me", - "polldaddy.com": "polldaddy", - "polyad.net": "polyad", - "polyfill.io": "polyfill.io", - "popads.net": "popads", - "popadscdn.net": "popads", - "popcash.net": "popcash", - "popcashjs.b-cdn.net": "popcash", - "desv383oqqc0.cloudfront.net": "popcorn_metrics", - "popin.cc": "popin.cc", - "cdn.popmyads.com": "popmyads", - "poponclick.com": "poponclick", - "populis.com": "populis", - "populisengage.com": "populis", - "phncdn.com": "pornhub", - "pornhub.com": "pornhub", - "prscripts.com": "pornwave", - "prstatics.com": "pornwave", - "prwidgets.com": "pornwave", - "barra.brasil.gov.br": "porta_brazil", - "postaffiliatepro.com": "post_affiliate_pro", - "powerlinks.com": "powerlinks", - "powerreviews.com": "powerreviews", - "powr.io": "powr.io", - "api.pozvonim.com": "pozvonim", - "prebid.org": "prebid", - "precisionclick.com": "precisionclick", - "adserver.com.br": "predicta", - "predicta.net": "predicta", - "prnx.net": "premonix", - "ppjol.com": "press", - "ppjol.net": "press", - "api.pressly.com": "pressly", - "pricegrabber.com": "pricegrabber", - "cdn.pricespider.com": "pricespider", - "pmdrecrute.com": "prismamediadigital.com", - "prismamediadigital.com": "prismamediadigital.com", - "privy.com": "privy.com", - "pswec.com": "proclivity", - "prodperfect.com": "prodperfect", - "lib.productsup.io": "productsup", - "proadsnet.com": "profiliad", - "profitshare.ro": "profitshare", - "tracking.proformics.com": "proformics", - "programattik.com": "programattik", - "projectwonderful.com": "project_wonderful", - "propelmarketing.com": "propel_marketing", - "oclaserver.com": "propeller_ads", - "onclasrv.com": "propeller_ads", - "onclickads.net": "propeller_ads", - "onclkds.com": "propeller_ads", - "propellerads.com": "propeller_ads", - "propellerpops.com": "propeller_ads", - "proper.io": "propermedia", - "st-a.props.id": "props", - "propvideo.net": "propvideo_net", - "tr.prospecteye.com": "prospecteye", - "prosperent.com": "prosperent", - "prostor-lite.ru": "prostor", - "reports.proton.me": "proton_ag", - "providesupport.com": "provide_support", - "proximic.com": "proximic", - "proxistore.com": "proxistore.com", - "pscp.tv": "pscp.tv", - "pstatic.net": "pstatic.net", - "psyma.com": "psyma", - "ptengine.jp": "pt_engine", - "pub-fit.com": "pub-fit", - "pub.network": "pub.network", - "learnpipe.com": "pubble", - "pubble.co": "pubble", - "pubdirecte.com": "pubdirecte", - "pubgears.com": "pubgears", - "publicidees.com": "public_ideas", - "publicidad.net": "publicidad.net", - "intgr.net": "publir", - "pubmatic.com": "pubmatic", - "pubnub.com": "pubnub.com", - "puboclic.com": "puboclic", - "pulpix.com": "pulpix.com", - "tentaculos.net": "pulpo_media", - "pulse360.com": "pulse360", - "pulseinsights.com": "pulse_insights", - "contextweb.com": "pulsepoint", - "pulsepoint.com": "pulsepoint", - "punchtab.com": "punchtab", - "purch.com": "purch", - "servebom.com": "purch", - "purechat.com": "pure_chat", - "cdn.pprl.io": "pureprofile", - "oopt.fr": "purlive", - "puserving.com": "puserving.com", - "push.world": "push.world", - "pushengage.com": "push_engage", - "pushame.com": "pushame.com", - "zebra.pushbullet.com": "pushbullet", - "pushcrew.com": "pushcrew", - "pusher.com": "pusher.com", - "pusherapp.com": "pusher.com", - "pushnative.com": "pushnative.com", - "cdn.pushnews.eu": "pushnews", - "pushno.com": "pushno.com", - "pushwhy.com": "pushwhy.com", - "pushwoosh.com": "pushwoosh.com", - "pvclouds.com": "pvclouds.com", - "ads.q1media.com": "q1media", - "q1mediahydraplatform.com": "q1media", - "q-divisioncdn.de": "q_division", - "qbaka.net": "qbaka", - "track.qcri.org": "qcri_analytics", - "collect.qeado.com": "qeado", - "s.lianmeng.360.cn": "qihoo_360", - "qq.com": "qq.com", - "qrius.me": "qrius", - "qualaroo.com": "qualaroo", - "qualcomm.com": "qualcomm", - "gpsonextra.net": "qualcomm_location_service", - "izatcloud.net": "qualcomm_location_service", - "xtracloud.net": "qualcomm_location_service", - "bluecava.com": "qualia", - "qualtrics.com": "qualtrics", - "quantcast.com": "quantcast", - "quantserve.com": "quantcast", - "quantcount.com": "quantcount", - "quantummetric.com": "quantum_metric", - "quartic.pl": "quartic.pl", - "quarticon.com": "quartic.pl", - "d3c3cq33003psk.cloudfront.net": "qubit", - "qubit.com": "qubit", - "easyresearch.se": "questback", - "queue-it.net": "queue-it", - "quick-counter.net": "quick-counter.net", - "adsonar.com": "quigo_adsonar", - "qnsr.com": "quinstreet", - "quinstreet.com": "quinstreet", - "thecounter.com": "quinstreet", - "quintelligence.com": "quintelligence", - "qservz.com": "quisma", - "quisma.com": "quisma", - "quora.com": "quora.com", - "ads-digitalkeys.com": "r_advertising", - "rackcdn.com": "rackcdn.com", - "radarurl.com": "radarurl", - "dsa.csdata1.com": "radial", - "gwallet.com": "radiumone", - "r1-cdn.net": "radiumone", - "widget.raisenow.com": "raisenow", - "mediaforge.com": "rakuten_display", - "rmtag.com": "rakuten_display", - "rakuten.co.jp": "rakuten_globalmarket", - "trafficgate.net": "rakuten_globalmarket", - "mtwidget04.affiliate.rakuten.co.jp": "rakuten_widget", - "xml.affilliate.rakuten.co.jp": "rakuten_widget", - "rambler.ru": "rambler", - "top100.ru": "rambler", - "rapidspike.com": "rapidspike", - "ravelin.com": "ravelin", - "rawgit.com": "rawgit", - "raygun.io": "raygun", - "count.rbc.ru": "rbc_counter", - "rcs.it": "rcs.it", - "rcsmediagroup.it": "rcs.it", - "d335luupugsy2.cloudfront.net": "rd_station", - "rea-group.com": "rea_group", - "reagroupdata.com.au": "rea_group", - "reastatic.net": "rea_group", - "d12ulf131zb0yj.cloudfront.net": "reachforce", - "reachforce.com": "reachforce", - "reachjunction.com": "reachjunction", - "cdn.rlets.com": "reachlocal", - "reachlocal.com": "reachlocal", - "reachlocallivechat.com": "reachlocal", - "rlcdn.net": "reachlocal", - "plugin.reactful.com": "reactful", - "reactivpub.fr": "reactivpub", - "skinected.com": "reactx", - "readrboard.com": "readerboard", - "readme.com": "readme", - "readme.io": "readme", - "readspeaker.com": "readspeaker.com", - "realclick.co.kr": "realclick", - "realestate.com.au": "realestate.com.au", - "realperson.de": "realperson.de", - "powermarketing.com": "realtime", - "realtime.co": "realtime", - "webspectator.com": "realtime", - "dcniko1cv0rz.cloudfront.net": "realytics", - "realytics.io": "realytics", - "static.rbl.ms": "rebel_mouse", - "recaptcha.net": "recaptcha", - "recettes.net": "recettes.net", - "static.recopick.com": "recopick", - "recreativ.ru": "recreativ", - "analytics.recruitics.com": "recruitics", - "analytics.cohesionapps.com": "red_ventures", - "cdn.cohesionapps.com": "red_ventures", - "redblue.de": "redblue_de", - "atendesoftware.pl": "redcdn.pl", - "redd.it": "reddit", - "reddit-image.s3.amazonaws.com": "reddit", - "reddit.com": "reddit", - "redditmedia.com": "reddit", - "redditstatic.com": "reddit", - "redhelper.ru": "redhelper", - "pixelinteractivemedia.com": "redlotus", - "triggit.com": "redlotus", - "grt01.com": "redtram", - "grt02.com": "redtram", - "redtram.com": "redtram", - "rdtcdn.com": "redtube.com", - "redtube.com": "redtube.com", - "reduxmedia.com": "redux_media", - "reduxmediagroup.com": "redux_media", - "reedbusiness.net": "reed_business_information", - "reembed.com": "reembed.com", - "reevoo.com": "reevoo.com", - "refericon.pl": "refericon", - "ads.referlocal.com": "referlocal", - "refersion.com": "refersion", - "refinedads.com": "refined_labs", - "product.reflektion.com": "reflektion", - "reformal.ru": "reformal", - "reinvigorate.net": "reinvigorate", - "convertglobal.com": "rekko", - "convertglobal.s3.amazonaws.com": "rekko", - "dnhgz729v27ca.cloudfront.net": "rekko", - "reklamstore.com": "reklam_store", - "ad.reklamport.com": "reklamport", - "delivery.reklamz.com": "reklamz", - "adimg.rekmob.com": "rekmob", - "relap.io": "relap", - "svtrd.com": "relay42", - "synovite-scripts.com": "relay42", - "tdn.r42tag.com": "relay42", - "relestar.com": "relestar", - "relevant4.com": "relevant4.com", - "remintrex.com": "remintrex", - "remove.video": "remove.video", - "rp-api.com": "repost.us", - "republer.com": "republer.com", - "resmeter.respublica.al": "res-meter", - "researchnow.com": "research_now", - "reson8.com": "resonate_networks", - "respondhq.com": "respond", - "adinsight.com": "responsetap", - "adinsight.eu": "responsetap", - "responsetap.com": "responsetap", - "data.resultlinks.com": "result_links", - "sli-system.com": "resultspage.com", - "retailrocket.net": "retailrocket.net", - "retailrocket.ru": "retailrocket.net", - "shopify.retargetapp.com": "retarget_app", - "retargeter.com": "retargeter_beacon", - "retargeting.cl": "retargeting.cl", - "d1stxfv94hrhia.cloudfront.net": "retention_science", - "waves.retentionscience.com": "retention_science", - "reutersmedia.net": "reuters_media", - "revcontent.com": "revcontent", - "socialtwist.com": "reve_marketing", - "revenue.com": "revenue", - "clkads.com": "revenuehits", - "clkmon.com": "revenuehits", - "clkrev.com": "revenuehits", - "clksite.com": "revenuehits", - "eclkspbn.com": "revenuehits", - "imageshack.host": "revenuehits", - "revenuemantra.com": "revenuemantra", - "revive-adserver.com": "revive_adserver", - "revolvermaps.com": "revolver_maps", - "cts.tradepub.com": "revresponse", - "revresponse.com": "revresponse", - "incontext.pl": "rewords", - "pl-engine.intextad.net": "rewords", - "addesktop.com": "rhythmone", - "1rx.io": "rhythmone_beacon", - "ria.ru": "ria.ru", - "rmbn.ru": "rich_media_banner_network", - "ics0.com": "richrelevance", - "richrelevance.com": "richrelevance", - "ringier.ch": "ringier.ch", - "meteorsolutions.com": "rio_seo", - "riskified.com": "riskfield.com", - "rncdn3.com": "rncdn3.com", - "ro2.biz": "ro2.biz", - "rbxcdn.com": "roblox", - "getrockerbox.com": "rockerbox", - "rocket.la": "rocket.ia", - "trk.sodoit.com": "roi_trax", - "collector.roistat.com": "roistat", - "rollad.ru": "rollad", - "d37gvrvc0wt4s1.cloudfront.net": "rollbar", - "get.roost.me": "roost", - "getrooster.com": "rooster", - "rqtrk.eu": "roq.ad", - "rotaban.ru": "rotaban", - "routenplaner-karten.com": "routenplaner-karten.com", - "rovion.com": "rovion", - "rsspump.com": "rsspump", - "creativecdn.com": "rtb_house", - "rvty.net": "rtblab", - "rtbsuperhub.com": "rtbsuperhub.com", - "rtl.de": "rtl_group", - "static-fra.de": "rtl_group", - "technical-service.net": "rtl_group", - "rtmark.net": "rtmark.net", - "dpclk.com": "rubicon", - "mobsmith.com": "rubicon", - "nearbyad.com": "rubicon", - "rubiconproject.com": "rubicon", - "tracker.ruhrgebiet-onlineservices.de": "ruhrgebiet", - "click.rummycircle.com": "rummycircle", - "runadtag.com": "run", - "rundsp.com": "run", - "un-syndicate.com": "runative", - "cdn.secretrune.com": "rune", - "runmewivel.com": "runmewivel.com", - "rhythmxchange.com": "rythmxchange", - "s24.com": "s24_com", - "s3xified.com": "s3xified.com", - "camp.sabavision.com": "sabavision", - "sageanalyst.net": "sagemetrics", - "sail-horizon.com": "sailthru_horizon", - "sail-personalize.com": "sailthru_horizon", - "sailthru.com": "sailthru_horizon", - "d16fk4ms6rqz1v.cloudfront.net": "salecycle", - "salecycle.com": "salecycle", - "api.salesfeed.com": "sales_feed", - "salesmanago.com": "sales_manago", - "salesmanago.pl": "sales_manago", - "force.com": "salesforce.com", - "salesforce.com": "salesforce.com", - "liveagentforsalesforce.com": "salesforce_live_agent", - "salesforceliveagent.com": "salesforce_live_agent", - "msgapp.com": "salesfusion", - "salespidermedia.com": "salespider_media", - "salesviewer.com": "salesviewer", - "samba.tv": "samba.tv", - "game-mode.net": "samsung", - "gos-gsp.io": "samsung", - "lldns.net": "samsung", - "pavv.co.kr": "samsung", - "remotesamsung.com": "samsung", - "samsung-gamelauncher.com": "samsung", - "samsung.co.kr": "samsung", - "samsung.com": "samsung", - "samsung.com.cn": "samsung", - "samsungcloud.com": "samsung", - "samsungcloudcdn.com": "samsung", - "samsungcloudprint.com": "samsung", - "samsungcloudsolution.com": "samsung", - "samsungcloudsolution.net": "samsung", - "samsungelectronics.com": "samsung", - "samsunghealth.com": "samsung", - "samsungiotcloud.com": "samsung", - "samsungknox.com": "samsung", - "samsungnyc.com": "samsung", - "samsungosp.com": "samsung", - "samsungotn.net": "samsung", - "samsungpositioning.com": "samsung", - "samsungqbe.com": "samsung", - "samsungrm.net": "samsung", - "samsungrs.com": "samsung", - "samsungsemi.com": "samsung", - "samsungsetup.com": "samsung", - "samsungusa.com": "samsung", - "secb2b.com": "samsung", - "smartthings.com": "samsung", - "adgear.com": "samsungads", - "adgrx.com": "samsungads", - "samsungacr.com": "samsungads", - "samsungadhub.com": "samsungads", - "samsungads.com": "samsungads", - "samsungtifa.com": "samsungads", - "aibixby.com": "samsungapps", - "findmymobile.samsung.com": "samsungapps", - "samsapps.cust.lldns.net": "samsungapps", - "samsung-omc.com": "samsungapps", - "samsungapps.com": "samsungapps", - "samsungdiroute.net": "samsungapps", - "samsungdive.com": "samsungapps", - "samsungdm.com": "samsungapps", - "samsungdmroute.com": "samsungapps", - "samsungmdec.com": "samsungapps", - "samsungvisioncloud.com": "samsungapps", - "sbixby.com": "samsungapps", - "ospserver.net": "samsungmobile", - "samsungdms.net": "samsungmobile", - "samsungmax.com": "samsungmobile", - "samsungmobile.com": "samsungmobile", - "secmobilesvc.com": "samsungmobile", - "push.samsungosp.com": "samsungpush", - "pushmessage.samsung.com": "samsungpush", - "scs.samsungqbe.com": "samsungpush", - "ssp.samsung.com": "samsungpush", - "samsungsds.com": "samsungsds", - "internetat.tv": "samsungtv", - "samsungcloud.tv": "samsungtv", - "tizenservice.com": "samsungtv", - "ilsemedia.nl": "sanoma.fi", - "sanoma.fi": "sanoma.fi", - "d13im3ek7neeqp.cloudfront.net": "sap_crm", - "d28ethi6slcjbm.cloudfront.net": "sap_crm", - "d2uevgmgh16uk4.cloudfront.net": "sap_crm", - "d3m83gvgzupli.cloudfront.net": "sap_crm", - "saas.seewhy.com": "sap_crm", - "leadforce1.com": "sap_sales_cloud", - "vlog.leadformix.com": "sap_sales_cloud", - "sap-xm.org": "sap_xm", - "sape.ru": "sape.ru", - "js.sl.pt": "sapo_ads", - "aimatch.com": "sas", - "sas.com": "sas", - "say.ac": "say.ac", - "ads.saymedia.com": "say_media", - "srv.sayyac.net": "sayyac", - "scarabresearch.com": "scarabresearch", - "schibsted.com": "schibsted", - "schibsted.io": "schibsted", - "schneevonmorgen.com": "schneevonmorgen.com", - "svonm.com": "schneevonmorgen.com", - "rockabox.co": "scoota", - "scorecardresearch.com": "scorecard_research_beacon", - "scoreresearch.com": "scorecard_research_beacon", - "scrsrch.com": "scorecard_research_beacon", - "securestudies.com": "scorecard_research_beacon", - "scout.scoutanalytics.net": "scout_analytics", - "scribblelive.com": "scribblelive", - "scribol.com": "scribol", - "analytics.snidigital.com": "scripps_analytics", - "scroll.com": "scroll", - "scupio.com": "scupio", - "search123.uk.com": "search123", - "searchforce.net": "searchforce", - "searchignite.com": "searchignite", - "srtk.net": "searchrev", - "tacticalrepublic.com": "second_media", - "sectigo.com": "sectigo", - "securedtouch.com": "securedtouch", - "securedvisit.com": "securedvisit", - "bacontent.de": "seeding_alliance", - "nativendo.de": "seeding_alliance", - "seedtag.com": "seedtag.com", - "svlu.net": "seevolution", - "d2dq2ahtl5zl1z.cloudfront.net": "segment", - "d47xnnr8b1rki.cloudfront.net": "segment", - "segment.com": "segment", - "segment.io": "segment", - "rutarget.ru": "segmento", - "segmint.net": "segmint", - "sekindo.com": "sekindo", - "sellpoint.net": "sellpoints", - "sellpoints.com": "sellpoints", - "semantiqo.com": "semantiqo.com", - "semasio.net": "semasio", - "semilo.com": "semilo", - "semknox.com": "semknox.com", - "sibautomation.com": "sendinblue", - "sendpulse.com": "sendpulse.com", - "sendsay.ru": "sendsay", - "track.sensedigital.in": "sense_digital", - "static.sensorsdata.cn": "sensors_data", - "sentifi.com": "sentifi.com", - "d3nslu0hdya83q.cloudfront.net": "sentry", - "getsentry.com": "sentry", - "ravenjs.com": "sentry", - "sentry.io": "sentry", - "sepyra.com": "sepyra", - "d2oh4tlt9mrke9.cloudfront.net": "sessioncam", - "sessioncam.com": "sessioncam", - "sessionly.io": "sessionly", - "71i.de": "sevenone_media", - "sexad.net": "sexadnetwork", - "ads.sexinyourcity.com": "sexinyourcity", - "sextracker.com": "sextracker", - "sexypartners.net": "sexypartners.net", - "im.cz": "seznam", - "imedia.cz": "seznam", - "szn.cz": "seznam", - "dtym7iokkjlif.cloudfront.net": "shareaholic", - "shareaholic.com": "shareaholic", - "shareasale.com": "shareasale", - "quintrics.nl": "sharecompany", - "sharecompany.nl": "sharecompany", - "sharepointonline.com": "sharepoint", - "onmicrosoft.com": "sharepoint", - "sharepoint.com": "sharepoint", - "sharethis.com": "sharethis", - "shareth.ru": "sharethrough", - "sharethrough.com": "sharethrough", - "marketingautomation.services": "sharpspring", - "sharpspring.com": "sharpspring", - "sheego.de": "sheego.de", - "services.sheerid.com": "sheerid", - "shinystat.com": "shinystat", - "shinystat.it": "shinystat", - "app.shoptarget.com.br": "shop_target", - "retargeter.com.br": "shop_target", - "shopauskunft.de": "shopauskunft.de", - "shopgate.com": "shopgate.com", - "shopify.com": "shopify", - "shopifycdn.com": "shopify", - "cdn.shopify.com": "shopify", - "myshopify.com": "shopify", - "shop.app": "shopify", - "shopify.co.za": "shopify", - "shopify.com.au": "shopify", - "shopify.com.mx": "shopify", - "shopify.dev": "shopify", - "shopifyapps.com": "shopify", - "shopifycdn.net": "shopify", - "shopifynetwork.com": "shopify", - "shopifypreview.com": "shopify", - "shopifysvc.com": "shopify_stats", - "stats.shopify.com": "shopify_stats", - "v.shopify.com": "shopify_stats", - "shopifycloud.com": "shopifycloud.com", - "shopperapproved.com": "shopper_approved", - "shoppingshadow.com": "shopping_com", - "tracking.shopping-flux.com": "shopping_flux", - "shoprunner.com": "shoprunner", - "shopsocially.com": "shopsocially", - "shopzilla.com": "shopzilla", - "shortnews.de": "shortnews", - "showrss.info": "showrss", - "shink.in": "shrink", - "shutterstock.com": "shutterstock", - "siblesectiveal.club": "siblesectiveal.club", - "d3v27wwd40f0xu.cloudfront.net": "sidecar", - "getsidecar.com": "sidecar", - "dtlilztwypawv.cloudfront.net": "sift_science", - "siftscience.com": "sift_science", - "btstatic.com": "signal", - "signal.co": "signal", - "thebrighttag.com": "signal", - "cdn-scripts.signifyd.com": "signifyd", - "signifyd.com": "signifyd", - "gw-services.vtrenz.net": "silverpop", - "mkt51.net": "silverpop", - "mkt912.com": "silverpop", - "mkt922.com": "silverpop", - "mkt941.com": "silverpop", - "pages01.net": "silverpop", - "pages02.net": "silverpop", - "pages04.net": "silverpop", - "pages05.net": "silverpop", - "similardeals.net": "similardeals.net", - "similarweb.com": "similarweb", - "similarweb.io": "similarweb", - "d8rk54i4mohrb.cloudfront.net": "simplereach", - "simplereach.com": "simplereach", - "simpli.fi": "simpli.fi", - "sina.com.cn": "sina", - "sinaimg.cn": "sina_cdn", - "reporting.singlefeed.com": "singlefeed", - "sddan.com": "sirdata", - "site24x7rum.com": "site24x7", - "site24x7rum.eu": "site24x7", - "sitebooster-fjfmworld-production.azureedge.net": "site_booster", - "a5.ogt.jp": "site_stratos", - "siteapps.com": "siteapps", - "sitebro.com": "sitebro", - "sitebro.com.tw": "sitebro", - "sitebro.net": "sitebro", - "sitebro.tw": "sitebro", - "siteheart.com": "siteheart", - "siteimprove.com": "siteimprove", - "siteimproveanalytics.com": "siteimprove_analytics", - "sitelabweb.com": "sitelabweb.com", - "sitemeter.com": "sitemeter", - "pixel.ad": "sitescout", - "sitescout.com": "sitescout", - "ad.sitemaji.com": "sitetag", - "sitetag.us": "sitetag", - "analytics.sitewit.com": "sitewit", - "ads.sixapart.com": "six_apart_advertising", - "sixt-neuwagen.de": "sixt-neuwagen.de", - "skadtec.com": "skadtec.com", - "redirectingat.com": "skimlinks", - "skimlinks.com": "skimlinks", - "skimresources.com": "skimlinks", - "analytics.skroutz.gr": "skroutz", - "skyglue.com": "skyglue", - "skype.com": "skype", - "skypeassets.com": "skype", - "skysa.com": "skysa", - "skyscnr.com": "skyscnr.com", - "slack-edge.com": "slack", - "slack-imgs.com": "slack", - "slack.com": "slack", - "slackb.com": "slack", - "slashdot.org": "slashdot_widget", - "sleeknotestaticcontent.sleeknote.com": "sleeknote", - "resultspage.com": "sli_systems", - "builder.extensionfactory.com": "slice_factory", - "freeskreen.com": "slimcutmedia", - "slingpic.com": "slingpic", - "smaato.net": "smaato", - "smart4ads.com": "smart4ads", - "sascdn.com": "smart_adserver", - "smartadserver.com": "smart_adserver", - "styria-digital.com": "smart_adserver", - "yoc-adserver.com": "smart_adserver", - "smartcall.kz": "smart_call", - "getsmartcontent.com": "smart_content", - "smartdevicemedia.com": "smart_device_media", - "x.cnt.my": "smart_leads", - "tracking.smartselling.cz": "smart_selling", - "bepolite.eu": "smartad", - "smartbn.ru": "smartbn", - "smartclick.net": "smartclick.net", - "smartclip.net": "smartclip", - "smartcontext.pl": "smartcontext", - "d1n00d49gkbray.cloudfront.net": "smarter_remarketer", - "dhxtx5wtu812h.cloudfront.net": "smarter_remarketer", - "smartertravel.com": "smarter_travel", - "travelsmarter.net": "smarter_travel", - "smct.co": "smarterclick", - "smartertrack.com": "smartertrack", - "smartlink.cool": "smartlink.cool", - "getsmartlook.com": "smartlook", - "smartlook.com": "smartlook", - "smartstream.tv": "smartstream.tv", - "smartsuppchat.com": "smartsupp_chat", - "smi2.net": "smi2.ru", - "smi2.ru": "smi2.ru", - "stat.media": "smi2.ru", - "cdn.smooch.io": "smooch", - "smowtion.com": "smowtion", - "smxindia.in": "smx_ventures", - "smyte.com": "smyte", - "snacktv.de": "snacktv", - "snap.com": "snap", - "addlive.io": "snap", - "feelinsonice.com": "snap", - "sc-cdn.net": "snap", - "sc-corp.net": "snap", - "sc-gw.com": "snap", - "sc-jpl.com": "snap", - "sc-prod.net": "snap", - "snap-dev.net": "snap", - "snapads.com": "snap", - "snapkit.com": "snap", - "snapengage.com": "snap_engage", - "sc-static.net": "snapchat", - "snapchat.com": "snapchat", - "snapcraft.io": "snapcraft", - "snapcraftcontent.com": "snapcraft", - "h-bid.com": "snigelweb", - "eu2.snoobi.eu": "snoobi", - "snoobi.com": "snoobi_analytics", - "d346whrrklhco7.cloudfront.net": "snowplow", - "d78fikflryjgj.cloudfront.net": "snowplow", - "dc8xl0ndzn2cb.cloudfront.net": "snowplow", - "playwire.com": "snowplow", - "snplow.net": "snowplow", - "go-mpulse.net": "soasta_mpulse", - "mpstat.us": "soasta_mpulse", - "tiaa-cref.org": "soasta_mpulse", - "sociablelabs.com": "sociable_labs", - "socialamp.com": "social_amp", - "socialannex.com": "social_annex", - "soclminer.com.br": "social_miner", - "duu8lzqdm8tsz.cloudfront.net": "socialbeat", - "ratevoice.com": "socialrms", - "sociaplus.com": "sociaplus.com", - "sociomantic.com": "sociomantic", - "images.sohu.com": "sohu", - "sojern.com": "sojern", - "sokrati.com": "sokrati", - "solads.media": "solads.media", - "solaredge.com": "solaredge", - "solidopinion.com": "solidopinion", - "pixel.solvemedia.com": "solve_media", - "soma2.de": "soma_2", - "mobileadtrading.com": "somoaudience", - "sonobi.com": "sonobi", - "sonos.com": "sonos", - "sophus3.com": "sophus3", - "deployads.com": "sortable", - "sndcdn.com": "soundcloud", - "soundcloud.com": "soundcloud", - "provenpixel.com": "sourceknowledge_pixel", - "decenthat.com": "sourcepoint", - "summerhamster.com": "sourcepoint", - "d3pkae9owd2lcf.cloudfront.net": "sovrn", - "lijit.com": "sovrn", - "onscroll.com": "sovrn_viewability_solutions", - "rts.sparkstudios.com": "spark_studios", - "sparkasse.de": "sparkasse.de", - "speakpipe.com": "speakpipe", - "adviva.net": "specific_media", - "specificclick.net": "specific_media", - "specificmedia.com": "specific_media", - "spectate.com": "spectate", - "speedshiftmedia.com": "speed_shift_media", - "speedcurve.com": "speedcurve", - "admarket.entireweb.com": "speedyads", - "affiliate.entireweb.com": "speedyads", - "sa.entireweb.com": "speedyads", - "speee-ad.akamaized.net": "speee", - "sphere.com": "sphere", - "surphace.com": "sphere", - "api.spheremall.com": "spheremall", - "zdwidget3-bs.sphereup.com": "sphereup", - "static.sspicy.ru": "spicy", - "spider.ad": "spider.ad", - "metrics.spiderads.eu": "spider_ads", - "spn.ee": "spinnakr", - "embed.spokenlayer.com": "spokenlayer", - "spongecell.com": "spongecell", - "sponsorads.de": "sponsorads.de", - "sportsbetaffiliates.com.au": "sportsbet_affiliates", - "spot.im": "spot.im", - "spoteffects.net": "spoteffect", - "scdn.co": "spotify", - "spotify.com": "spotify", - "pscdn.co": "spotify", - "spotifycdn.com": "spotify", - "spotifycdn.net": "spotify", - "spotilocal.com": "spotify", - "embed.spotify.com": "spotify_embed", - "spotscenered.info": "spotscenered.info", - "spotx.tv": "spotxchange", - "spotxcdn.com": "spotxchange", - "spotxchange.com": "spotxchange", - "spoutable.com": "spoutable", - "cdn.springboardplatform.com": "springboard", - "springserve.com": "springserve", - "pixel.sprinklr.com": "sprinklr", - "stat.sputnik.ru": "sputnik", - "email-match.com": "squadata", - "squarespace.com": "squarespace.com", - "srvtrck.com": "srvtrck.com", - "srvvtrk.com": "srvvtrk.com", - "sstatic.net": "sstatic.net", - "hatena.ne.jp": "st-hatena", - "st-hatena.com": "st-hatena", - "stackadapt.com": "stackadapt", - "stackpathdns.com": "stackpathdns.com", - "stailamedia.com": "stailamedia_com", - "stalluva.pro": "stalluva.pro", - "startappservice.com": "startapp", - "hit.stat24.com": "stat24", - "adstat.4u.pl": "stat4u", - "stat.4u.pl": "stat4u", - "statcounter.com": "statcounter", - "stathat.com": "stathat", - "statisfy.net": "statisfy", - "statsy.net": "statsy.net", - "statuscake.com": "statuscake", - "statuspage.io": "statuspage.io", - "stspg-customer.com": "statuspage.io", - "stayfriends.de": "stayfriends.de", - "steelhousemedia.com": "steelhouse", - "steepto.com": "steepto.com", - "stepstone.com": "stepstone.com", - "4stats.de": "stetic", - "stetic.com": "stetic", - "stickyadstv.com": "stickyads", - "stocktwits.com": "stocktwits", - "storify.com": "storify", - "storygize.net": "storygize", - "bizsolutions.strands.com": "strands_recommender", - "strava.com": "strava", - "mailfoogae.appspot.com": "streak", - "streamotion.com.au": "streamotion", - "streamrail.com": "streamrail.com", - "streamrail.net": "streamrail.com", - "stridespark.com": "stride", - "stripcdn.com": "stripchat.com", - "stripchat.com": "stripchat.com", - "stripe.com": "stripe.com", - "stripe.network": "stripe.com", - "stripst.com": "stripst.com", - "interactivemedia.net": "stroer_digital_media", - "stroeerdigitalgroup.de": "stroer_digital_media", - "stroeerdigitalmedia.de": "stroer_digital_media", - "stroeerdp.de": "stroer_digital_media", - "stroeermediabrands.de": "stroer_digital_media", - "spklw.com": "strossle", - "sprinklecontent.com": "strossle", - "strossle.it": "strossle", - "struq.com": "struq", - "stumble-upon.com": "stumbleupon_widgets", - "stumbleupon.com": "stumbleupon_widgets", - "su.pr": "stumbleupon_widgets", - "sub2tech.com": "sub2", - "ayads.co": "sublime_skinz", - "suggest.io": "suggest.io", - "sumologic.com": "sumologic.com", - "sumo.com": "sumome", - "sumome.com": "sumome", - "sundaysky.com": "sundaysky", - "supercell.com": "supercell", - "supercellsupport.com": "supercell", - "supercounters.com": "supercounters", - "superfastcdn.com": "superfastcdn.com", - "socdm.com": "supership", - "supplyframe.com": "supplyframe", - "surfingbird.ru": "surf_by_surfingbird", - "px.surveywall-api.survata.com": "survata", - "cdn.sweettooth.io": "sweettooth", - "swiftypecdn.com": "swiftype", - "swisscom.ch": "swisscom", - "myswitchads.com": "switch_concepts", - "switchadhub.com": "switch_concepts", - "switchads.com": "switch_concepts", - "switchafrica.com": "switch_concepts", - "switch.tv": "switchtv", - "shopximity.com": "swoop", - "swoop.com": "swoop", - "analytics-cdn.sykescottages.co.uk": "sykes", - "norton.com": "symantec", - "seal.verisign.com": "symantec", - "symantec.com": "symantec", - "d.hodes.com": "symphony_talent", - "technorati.com": "synacor", - "technoratimedia.com": "synacor", - "cn.clickable.net": "syncapse", - "synergy-e.com": "synergy-e", - "sdp-campaign.de": "t-mobile", - "t-online.de": "t-mobile", - "telekom-dienste.de": "t-mobile", - "telekom.com": "t-mobile", - "telekom.de": "t-mobile", - "toi.de": "t-mobile", - "t8cdn.com": "t8cdn.com", - "tableteducation.com": "tableteducation.com", - "basebanner.com": "taboola", - "taboola.com": "taboola", - "taboolasyndication.com": "taboola", - "tacoda.net": "tacoda", - "commander1.com": "tag_commander", - "tagcommander.com": "tag_commander", - "tags.tagcade.com": "tagcade", - "taggify.net": "taggify", - "taggyad.jp": "taggy", - "levexis.com": "tagman", - "tailtarget.com": "tail_target", - "tailsweep.com": "tailsweep", - "tamedia.ch": "tamedia.ch", - "tanx.com": "tanx", - "alipcsec.com": "taobao", - "taobao.com": "taobao", - "tapad.com": "tapad", - "theblogfrog.com": "tapinfluence", - "tarafdari.com": "tarafdari", - "target2sell.com": "target_2_sell", - "trackmytarget.com": "target_circle", - "cdn.targetfuel.com": "target_fuel", - "tawk.to": "tawk", - "tbn.ru": "tbn.ru", - "tchibo-content.de": "tchibo_de", - "tchibo.de": "tchibo_de", - "tdsrmbl.net": "tdsrmbl_net", - "teads.tv": "teads", - "tealeaf.ibmcloud.com": "tealeaf", - "tealium.com": "tealium", - "tealium.hs.llnwd.net": "tealium", - "tealiumiq.com": "tealium", - "tiqcdn.com": "tealium", - "teaser.cc": "teaser.cc", - "emailretargeting.com": "tedemis", - "tracking.dsmmadvantage.com": "teletech", - "telstra.com": "telstra", - "telstra.com.au": "telstra", - "tenderapp.com": "tender", - "tensitionschoo.club": "tensitionschoo.club", - "watch.teroti.com": "teroti", - "webterren.com": "terren", - "teufel.de": "teufel.de", - "theadex.com": "the_adex", - "connect.decknetwork.net": "the_deck", - "gu-web.net": "the_guardian", - "guardianapps.co.uk": "the_guardian", - "guim.co.uk": "the_guardian", - "deepthought.online": "the_reach_group", - "reachgroup.com": "the_reach_group", - "redintelligence.net": "the_reach_group", - "thesearchagency.net": "the_search_agency", - "thesun.co.uk": "the_sun", - "w-x.co": "the_weather_company", - "weather.com": "the_weather_company", - "wfxtriggers.com": "the_weather_company", - "tmdb.org": "themoviedb", - "thinglink.com": "thinglink", - "online-metrix.net": "threatmetrix", - "tidbit.co.in": "tidbit", - "code.tidio.co": "tidio", - "widget-v4.tidiochat.com": "tidio", - "analytics.tiktok.com": "tiktok_analytics", - "optimized.by.tiller.co": "tiller", - "vip.timezonedb.com": "timezondb", - "npttech.com": "tinypass", - "tinypass.com": "tinypass", - "tisoomi-services.com": "tisoomi", - "ad.tlvmedia.com": "tlv_media", - "ads.tlvmedia.com": "tlv_media", - "tag.tlvmedia.com": "tlv_media", - "research-int.se": "tns", - "sesamestats.com": "tns", - "spring-tns.net": "tns", - "statistik-gallup.net": "tns", - "tns-cs.net": "tns", - "tns-gallup.dk": "tns", - "tomnewsupdate.info": "tomnewsupdate.info", - "tfag.de": "tomorrow_focus", - "srv.clickfuse.com": "tonefuse", - "toplist.cz": "toplist.cz", - "toponclick.com": "toponclick_com", - "topsy.com": "topsy", - "insight.torbit.com": "torbit", - "toro-tags.com": "toro", - "toroadvertising.com": "toro", - "toroadvertisingmedia.com": "toro", - "tororango.com": "tororango.com", - "i.total-media.net": "total_media", - "inq.com": "touchcommerce", - "tovarro.com": "tovarro.com", - "rialpay.com": "tp-cdn.com", - "tp-cdn.com": "tp-cdn.com", - "kiwe.io": "tracc.it", - "tracc.it": "tracc.it", - "ipnoid.com": "tracemyip", - "tracemyip.org": "tracemyip", - "d2gfdmu30u15x7.cloudfront.net": "traceview", - "tracelytics.com": "traceview", - "cdn.trackduck.com": "track_duck", - "d2zah9y47r7bi2.cloudfront.net": "trackjs", - "dl1d2m8ri9v3j.cloudfront.net": "trackjs", - "trackjs.com": "trackjs", - "conversionlab.trackset.com": "trackset_conversionlab", - "trackuity.com": "trackuity", - "adsrvr.org": "tradedesk", - "tradedoubler.com": "tradedoubler", - "tradelab.fr": "tradelab", - "tradetracker.net": "tradetracker", - "cdntrf.com": "traffective", - "traffective.com": "traffective", - "my.trafficfuel.com": "traffic_fuel", - "trafficrevenue.net": "traffic_revenue", - "trafficstars.com": "traffic_stars", - "tsyndicate.com": "traffic_stars", - "trafficbroker.com": "trafficbroker", - "trafficfabrik.com": "trafficfabrik.com", - "trafficfactory.biz": "trafficfactory", - "trafficforce.com": "trafficforce", - "traffichaus.com": "traffichaus", - "trafficjunky.net": "trafficjunky", - "traffiliate.com": "traffiliate", - "storage.trafic.ro": "trafic", - "trafmag.com": "trafmag.com", - "api.transcend.io": "transcend", - "cdn.transcend.io": "transcend", - "sync-transcend-cdn.com": "transcend", - "transcend-cdn.com": "transcend", - "transcend.io": "transcend", - "telemetry.transcend.io": "transcend_telemetry", - "backoffice.transmatico.com": "transmatic", - "travelaudience.com": "travel_audience", - "trbo.com": "trbo", - "treasuredata.com": "treasuredata", - "scanscout.com": "tremor_video", - "tremorhub.com": "tremor_video", - "tremormedia.com": "tremor_video", - "tremorvideo.com": "tremor_video", - "videohub.tv": "tremor_video", - "s.tcimg.com": "trendcounter", - "tcimg.com": "trendcounter", - "trendemon.com": "trendemon", - "exponential.com": "tribal_fusion", - "tribalfusion.com": "tribal_fusion", - "tribl.io": "triblio", - "api.temails.com": "trigger_mail_marketing", - "t.myvisitors.se": "triggerbee", - "jscache.com": "tripadvisor", - "tacdn.com": "tripadvisor", - "tamgrt.com": "tripadvisor", - "tripadvisor.co.uk": "tripadvisor", - "tripadvisor.com": "tripadvisor", - "tripadvisor.de": "tripadvisor", - "3lift.com": "triplelift", - "d3iwjrnl4m67rd.cloudfront.net": "triplelift", - "triplelift.com": "triplelift", - "static.triptease.io": "triptease", - "andomedia.com": "triton_digital", - "tritondigital.com": "triton_digital", - "revelations.trovus.co.uk": "trovus_revelations", - "trsv3.com": "trsv3.com", - "truefitcorp.com": "true_fit", - "tru.am": "trueanthem", - "adlegend.com": "trueffect", - "addoer.com": "truehits.net", - "truehits.in.th": "truehits.net", - "truehits.net": "truehits.net", - "trumba.com": "trumba", - "truoptik.com": "truoptik", - "trustarc.com": "trustarc", - "truste.com": "trustarc", - "consent.truste.com": "truste_consent", - "choices-or.truste.com": "truste_notice", - "choices.truste.com": "truste_notice", - "privacy-policy.truste.com": "truste_seal", - "trustedshops.com": "trusted_shops", - "trustev.com": "trustev", - "secure.comodo.net": "trustlogo", - "trustlogo.com": "trustlogo", - "usertrust.com": "trustlogo", - "trustpilot.com": "trustpilot", - "trustwave.com": "trustwave.com", - "tubecorporate.com": "tubecorporate", - "tubecup.org": "tubecup.org", - "tubemogul.com": "tubemogul", - "sre-perim.com": "tumblr_analytics", - "txmblr.com": "tumblr_analytics", - "platform.tumblr.com": "tumblr_buttons", - "lib.tunein.com": "tune_in", - "adagio.turboadv.com": "turbo", - "turn.com": "turn_inc.", - "ngtv.io": "turner", - "turner.com": "turner", - "warnermedia.com": "turner", - "turnsocial.com": "turnsocial", - "turnto.com": "turnto", - "tvsquared.com": "tvsquared.com", - "tweetboard.com": "tweetboard", - "tweetmeme.com": "tweetmeme", - "c4tw.net": "twenga", - "twiago.com": "twiago", - "twinedigital.go2cloud.org": "twine", - "ext-twitch.tv": "twitch.tv", - "twitch.tv": "twitch.tv", - "jtvnw.net": "twitch_cdn", - "ttvnw.net": "twitch_cdn", - "twitchcdn.net": "twitch_cdn", - "twitchsvc.net": "twitch_cdn", - "t.co": "twitter", - "twimg.com": "twitter", - "twitter.com": "twitter", - "twttr.com": "twitter", - "x.com": "twitter", - "ads-twitter.com": "twitter_ads", - "analytics.twitter.com": "twitter_analytics", - "tellapart.com": "twitter_for_business", - "syndication.twitter.com": "twitter_syndication", - "twittercounter.com": "twittercounter", - "twyn.com": "twyn", - "txxx.com": "txxx.com", - "tynt.com": "tynt", - "typeform.com": "typeform", - "typepad.com": "typepad_stats", - "typography.com": "typography.com", - "tyroodirect.com": "tyroo", - "tyroodr.com": "tyroo", - "tzetze.it": "tzetze", - "ubersetzung-app.com": "ubersetzung-app.com", - "ubuntu.com": "ubuntu", - "ubuntucompanyservices.co.za": "ubuntu", - "aralego.net": "ucfunnel", - "ucfunnel.com": "ucfunnel", - "at.ua": "ucoz", - "do.am": "ucoz", - "ucoz.net": "ucoz", - "ad-api-v01.uliza.jp": "uliza", - "api.umbel.com": "umbel", - "umebiggestern.club": "umebiggestern.club", - "unanimis.co.uk": "unanimis", - "d3pkntwtp2ukl5.cloudfront.net": "unbounce", - "t.unbounce.com": "unbounce", - "d21gpk1vhmjuf5.cloudfront.net": "unbxd", - "tracker.unbxdapi.com": "unbxd", - "under-box.com": "under-box.com", - "undercomputer.com": "undercomputer.com", - "udmserve.net": "underdog_media", - "undertone.com": "undertone", - "roitesting.com": "unica", - "unica.com": "unica", - "unister-adservices.com": "unister", - "unister-gmbh.de": "unister", - "uadx.com": "unite", - "nonstoppartner.net": "united_digital_group", - "tifbs.net": "united_internet_media_gmbh", - "ui-portal.de": "united_internet_media_gmbh", - "uimserv.net": "united_internet_media_gmbh", - "unity.com": "unity", - "unity3d.com": "unity", - "unity3dusercontent.com": "unity", - "unityads.unity3d.com": "unity_ads", - "univide.com": "univide", - "unpkg.com": "unpkg.com", - "unrulymedia.com": "unruly_media", - "src.kitcode.net": "untriel_finger_printing", - "s.clickability.com": "upland_clickability_beacon", - "uppr.de": "uppr.de", - "upravel.com": "upravel.com", - "upsellit.com": "upsellit", - "kontagent.net": "upsight", - "app.uptain.de": "uptain", - "uptolike.com": "uptolike.com", - "uptrends.com": "uptrends", - "urban-media.com": "urban-media.com", - "urbanairship.com": "urban_airship", - "mobile.usabilitytools.com": "usability_tools", - "usabilla.com": "usabilla", - "usemax.de": "usemax", - "usemaxserver.de": "usemax", - "usemessages.com": "usemessages.com", - "api.usercycle.com": "usercycle", - "userdive.com": "userdive", - "userecho.com": "userecho", - "dq4irj27fs462.cloudfront.net": "userlike.com", - "userlike-cdn-widgets.s3-eu-west-1.amazonaws.com": "userlike.com", - "userlike.com": "userlike.com", - "contactusplus.com": "userpulse", - "user-pulse.appspot.com": "userpulse", - "userpulse.com": "userpulse", - "userreplay.net": "userreplay", - "sdsbucket.s3.amazonaws.com": "userreport", - "userreport.com": "userreport", - "dtkm4pd19nw6z.cloudfront.net": "userrules", - "api.usersnap.com": "usersnap", - "d3mvnvhjmkxpjz.cloudfront.net": "usersnap", - "uservoice.com": "uservoice", - "userzoom.com": "userzoom.com", - "usocial.pro": "usocial", - "utarget.ru": "utarget", - "uuidksinc.net": "uuidksinc.net", - "v12group.com": "v12_group", - "vacaneedasap.com": "vacaneedasap.com", - "ads.brand.net": "valassis", - "vdrn.redplum.com": "valassis", - "api.searchlinks.com": "validclick", - "js.searchlinks.com": "validclick", - "vinsight.de": "valiton", - "valueclick.net": "valueclick_media", - "valuecommerce.com": "valuecommerce", - "valuedopinions.co.uk": "valued_opinions", - "buzzparadise.com": "vanksen", - "vmmpxl.com": "varick_media_management", - "vcita.com": "vcita", - "tracking.vcommission.com": "vcommission", - "vdopia.com": "vdopia", - "veinteractive.com": "ve_interactive", - "vee24.com": "vee24", - "velocecdn.com": "velocecdn.com", - "mdcn.mobi": "velti_mgage_visualize", - "velti.com": "velti_mgage_visualize", - "vendemore.com": "vendemore", - "venturead.com": "venturead.com", - "api.venyoo.ru": "venyoo", - "veoxa.com": "veoxa", - "vergic.com": "vergic.com", - "d3qxef4rp70elm.cloudfront.net": "vero", - "getvero.com": "vero", - "verticalacuity.com": "vertical_acuity", - "roi.vertical-leap.co.uk": "vertical_leap", - "cts.vresp.com": "verticalresponse", - "verticalscope.com": "verticalscope", - "ads.vertoz.com": "vertoz", - "banner.vrtzads.com": "vertoz", - "veruta.com": "veruta", - "vrvm.com": "verve_mobile", - "vgwort.de": "vg_wort", - "digitaltarget.ru": "vi", - "btg.mtvnservices.com": "viacom_tag_container", - "viafoura.com": "viafoura", - "viafoura.net": "viafoura", - "intellitxt.com": "vibrant_ads", - "vicomi.com": "vicomi.com", - "vidazoo.com": "vidazoo.com", - "module-videodesk.com": "video_desk", - "vidtok.ru": "video_potok", - "videoadex.com": "videoadex.com", - "tidaltv.com": "videology", - "videonow.ru": "videonow", - "videoplayerhub.com": "videoplayerhub.com", - "videoplaza.tv": "videoplaza", - "kweb.videostep.com": "videostep", - "content.vidgyor.com": "vidgyor", - "vidible.tv": "vidible", - "assets.vidora.com": "vidora", - "vietad.vn": "vietad", - "viglink.com": "viglink", - "vigo.one": "vigo", - "vigo.ru": "vigo", - "vimeo.com": "vimeo", - "vimeocdn.com": "vimeo", - "vindicosuite.com": "vindico_group", - "vinted.net": "vinted", - "viraladnetwork.net": "viral_ad_network", - "app.viral-loops.com": "viral_loops", - "viralgains.com": "viralgains", - "viralmint.com": "viralmint", - "virgul.com": "virgul", - "ssp.virool.com": "virool_player", - "virtusize.com": "virtusize", - "viewablemedia.net": "visible_measures", - "visiblemeasures.com": "visible_measures", - "visioncriticalpanels.com": "vision_critical", - "visitstreamer.com": "visit_streamer", - "visitortracklog.com": "visitortrack", - "visitorville.com": "visitorville", - "d2hkbi3gan6yg6.cloudfront.net": "visscore", - "myvisualiq.net": "visual_iq", - "visualrevenue.com": "visual_revenue", - "d5phz18u4wuww.cloudfront.net": "visual_website_optimizer", - "visualwebsiteoptimizer.com": "visual_website_optimizer", - "wingify.com": "visual_website_optimizer", - "vdna-assets.com": "visualdna", - "visualdna.com": "visualdna", - "visualstudio.com": "visualstudio.com", - "id-visitors.com": "visualvisitor", - "vi-tag.net": "vivalu", - "vivistats.com": "vivistats", - "vizury.com": "vizury", - "vizzit.se": "vizzit", - "cdn-vk.com": "vk.com", - "vk-analytics.com": "vk.com", - "vkuservideo.net": "vk.com", - "userapi.com": "vkontakte", - "vk.com": "vkontakte", - "vkontakte.ru": "vkontakte", - "vntsm.com": "vntsm.com", - "vodafone.de": "vodafone.de", - "voicefive.com": "voicefive", - "volusion.com": "volusion_chat", - "cwkuki.com": "voluum", - "volumtrk.com": "voluum", - "voluumtrk3.com": "voluum", - "vooxe.com": "vooxe.com", - "vorwerk.de": "vorwerk.de", - "vox-cdn.com": "vox", - "embed.voxus.tv": "voxus", - "voxus-targeting-voxusmidia.netdna-ssl.com": "voxus", - "c-dsp.vpadn.com": "vpon", - "tools.vpscash.nl": "vpscash", - "vsassets.io": "vs", - "exp-tas.com": "vscode", - "v0cdn.net": "vscode", - "vscode-cdn.net": "vscode", - "vscode-unpkg.net": "vscode", - "vtracy.de": "vtracy.de", - "liftoff.io": "vungle", - "vungle.com": "vungle", - "vuukle.com": "vuukle", - "view.vzaar.com": "vzaar", - "w3counter.com": "w3counter", - "w3roi.com": "w3roi", - "contentwidgets.net": "wahoha", - "wahoha.com": "wahoha", - "walkme.com": "walkme.com", - "wsod.com": "wall_street_on_demand", - "walmart.com": "walmart", - "wamcash.com": "wamcash", - "cdn-saveit.wanelo.com": "wanelo", - "static.warp.ly": "warp.ly", - "way2traffic.com": "way2traffic", - "wayfair.com": "wayfair_com", - "wdr.de": "wdr.de", - "web-stat.com": "web-stat", - "web.de": "web.de", - "webde.de": "web.de", - "webstat.net": "web.stat", - "ssl.webserviceaward.com": "web_service_award", - "webtraxs.com": "web_traxs", - "wipe.de": "web_wipe_analytics", - "webads.nl": "webads", - "tr.webantenna.info": "webantenna", - "webclicks24.com": "webclicks24_com", - "webclose.net": "webclose.net", - "webcollage.net": "webcollage", - "goutee.top": "webedia", - "mediaathay.org.uk": "webedia", - "wbdx.fr": "webedia", - "webeffective.keynote.com": "webeffective", - "widgets.webengage.com": "webengage", - "webgains.com": "webgains", - "webgozar.com": "webgozar", - "webgozar.ir": "webgozar", - "webhelpje.be": "webhelpje", - "webhelpje.nl": "webhelpje", - "webleads-tracker.com": "webleads_tracker", - "automation.webmecanik.com": "webmecanik", - "adrcdn.com": "weborama", - "adrcntr.com": "weborama", - "weborama.com": "weborama", - "weborama.fr": "weborama", - "webprospector.de": "webprospector", - "webstat.com": "webstat", - "webstat.se": "webstat.se", - "stat.webtrack.biz": "webtrack", - "webtraffic.no": "webtraffic", - "webtraffic.se": "webtraffic", - "d1r27qvpjiaqj3.cloudfront.net": "webtrekk", - "mateti.net": "webtrekk", - "wbtrk.net": "webtrekk", - "wcfbc.net": "webtrekk", - "webtrekk-asia.net": "webtrekk", - "webtrekk.com": "webtrekk", - "webtrekk.de": "webtrekk", - "webtrekk.net": "webtrekk", - "wt-eu02.net": "webtrekk", - "wt-safetag.com": "webtrekk", - "webtrends.com": "webtrends", - "webtrendslive.com": "webtrends", - "rd.clickshift.com": "webtrends_ads", - "web-visor.com": "webvisor", - "weebly.com": "weebly_ads", - "widget.weibo.com": "weibo_widget", - "westlotto.com": "westlotto_com", - "wetter.com": "wetter_com", - "wettercomassets.com": "wetter_com", - "whatsbroadcast.com": "whatbroadcast", - "whatsapp.com": "whatsapp", - "whatsapp.net": "whatsapp", - "whisper.onelink.me": "whisper", - "whisper.sh": "whisper", - "amung.us": "whos.amung.us", - "whoson.com": "whoson", - "api.wibbitz.com": "wibbitz", - "cdn4.wibbitz.com": "wibbitz", - "cdn.wibiya.com": "wibiya_toolbar", - "predictad.com": "widdit", - "widerplanet.com": "widerplanet", - "widespace.com": "widespace", - "widgetserver.com": "widgetbox", - "3c45d848d99.se": "wiget_media", - "wigetmedia.com": "wiget_media", - "tracker.wigzopush.com": "wigzo", - "wikia-services.com": "wikia-services.com", - "wikia-beacon.com": "wikia_beacon", - "nocookie.net": "wikia_cdn", - "wikimedia.org": "wikimedia.org", - "wikipedia.org": "wikimedia.org", - "wikiquote.org": "wikimedia.org", - "tracking.winaffiliates.com": "winaffiliates", - "maps.windows.com": "windows_maps", - "client.wns.windows.com": "windows_notifications", - "time.windows.com": "windows_time", - "windowsupdate.com": "windowsupdate", - "api.wipmania.com": "wipmania", - "col1.wiqhit.com": "wiqhit", - "wirecard.com": "wirecard", - "wirecard.de": "wirecard", - "leadlab.click": "wiredminds", - "wiredminds.com": "wiredminds", - "wiredminds.de": "wiredminds", - "adtotal.pl": "wirtualna_polska", - "wisepops.com": "wisepops", - "cdn.wishpond.net": "wishpond", - "wistia.com": "wistia", - "wistia.net": "wistia", - "parastorage.com": "wix.com", - "wix.com": "wix.com", - "public.wixab-cloud.com": "wixab", - "wixmp.com": "wixmp", - "wnzmauurgol.com": "wnzmauurgol.com", - "wonderpush.com": "wonderpush", - "woopic.com": "woopic.com", - "woopra.com": "woopra", - "pubmine.com": "wordpress_ads", - "w.org": "wordpress_stats", - "wordpress.com": "wordpress_stats", - "wp.com": "wordpress_stats", - "tracker.wordstream.com": "wordstream", - "worldnaturenet.xyz": "worldnaturenet_xyz", - "wp.pl": "wp.pl", - "wpimg.pl": "wp.pl", - "wpengine.com": "wp_engine", - "clickanalyzer.jp": "writeup_clickanalyzer", - "wurfl.io": "wurfl", - "wwwpromoter.com": "wwwpromoter", - "imgwykop.pl": "wykop", - "wykop.pl": "wykop", - "wysistat.com": "wysistat.com", - "wysistat.net": "wysistat.com", - "wywy.com": "wywy.com", - "wywyuserservice.com": "wywy.com", - "cdn.x-lift.jp": "x-lift", - "xapads.com": "xapads", - "xen-media.com": "xen-media.com", - "xfreeservice.com": "xfreeservice.com", - "xhamster.com": "xhamster", - "xhamsterlive.com": "xhamster", - "xhamsterpremium.com": "xhamster", - "xhcdn.com": "xhamster", - "huami.com": "xiaomi", - "mi-img.com": "xiaomi", - "mi.com": "xiaomi", - "miui.com": "xiaomi", - "xiaomi.com": "xiaomi", - "xiaomi.net": "xiaomi", - "xiaomiyoupin.com": "xiaomi", - "xing-share.com": "xing", - "xing.com": "xing", - "xmediaclicks.com": "xmediaclicks", - "xnxx-cdn.com": "xnxx_cdn", - "xplosion.de": "xplosion", - "xtendmedia.com": "xtend", - "xvideos-cdn.com": "xvideos_com", - "xvideos.com": "xvideos_com", - "xxxlshop.de": "xxxlshop.de", - "xxxlutz.de": "xxxlutz", - "adx.com.ru": "yabbi", - "yabbi.me": "yabbi", - "yabuka.com": "yabuka", - "tumblr.com": "yahoo", - "yahoo.com": "yahoo", - "yahooapis.com": "yahoo", - "yimg.com": "yahoo", - "oath.cloud": "yahoo", - "yahoo.net": "yahoo", - "yahooinc.com": "yahoo", - "yahoodns.net": "yahoo", - "yads.yahoo.com": "yahoo_ad_exchange", - "yieldmanager.com": "yahoo_ad_exchange", - "pr-bh.ybp.yahoo.com": "yahoo_ad_manager", - "ads.yahoo.com": "yahoo_advertising", - "adtech.yahooinc.com": "yahoo_advertising", - "analytics.yahoo.com": "yahoo_analytics", - "np.lexity.com": "yahoo_commerce_central", - "storage-yahoo.jp": "yahoo_japan_retargeting", - "yahoo.co.jp": "yahoo_japan_retargeting", - "yahooapis.jp": "yahoo_japan_retargeting", - "yimg.jp": "yahoo_japan_retargeting", - "yjtag.jp": "yahoo_japan_retargeting", - "ov.yahoo.co.jp": "yahoo_overture", - "overture.com": "yahoo_overture", - "search.yahooinc.com": "yahoo_search", - "luminate.com": "yahoo_small_business", - "pixazza.com": "yahoo_small_business", - "awaps.yandex.ru": "yandex", - "d31j93rd8oukbv.cloudfront.net": "yandex", - "webvisor.org": "yandex", - "yandex.net": "yandex", - "yandex.ru": "yandex", - "yastatic.net": "yandex", - "ya.ru": "yandex", - "yandex.by": "yandex", - "yandex.com": "yandex", - "yandex.com.tr": "yandex", - "yandex.fr": "yandex", - "yandex.kz": "yandex", - "yandex.st": "yandex.api", - "yandexadexchange.net": "yandex_adexchange", - "metabar.ru": "yandex_advisor", - "appmetrica.yandex.com": "yandex_appmetrica", - "an.webvisor.org": "yandex_direct", - "an.yandex.ru": "yandex_direct", - "bs.yandex.ru": "yandex_direct", - "mc.yandex.ru": "yandex_metrika", - "passport.yandex.ru": "yandex_passport", - "yapfiles.ru": "yapfiles.ru", - "yashi.com": "yashi", - "ad.adserverplus.com": "ybrant_media", - "player.sambaads.com": "ycontent", - "cdn.yektanet.com": "yektanet", - "fetch.yektanet.com": "yektanet", - "yengo.com": "yengo", - "yengointernational.com": "yengo", - "link.p0.com": "yesmail", - "adsrevenue.net": "yesup_advertising", - "infinityads.com": "yesup_advertising", - "momentsharing.com": "yesup_advertising", - "multipops.com": "yesup_advertising", - "onlineadultadvertising.com": "yesup_advertising", - "paypopup.com": "yesup_advertising", - "popupxxx.com": "yesup_advertising", - "xtargeting.com": "yesup_advertising", - "xxxwebtraffic.com": "yesup_advertising", - "app.yesware.com": "yesware", - "yldbt.com": "yieldbot", - "yieldify.com": "yieldify", - "yieldlab.net": "yieldlab", - "yieldlove-ad-serving.net": "yieldlove", - "yieldlove.com": "yieldlove", - "yieldmo.com": "yieldmo", - "254a.com": "yieldr", - "collect.yldr.io": "yieldr_air", - "yieldsquare.com": "yieldsquare", - "analytics-sdk.yle.fi": "yle", - "yllix.com": "yllixmedia", - "ymetrica1.com": "ymetrica1.com", - "ymzrrizntbhde.com": "ymzrrizntbhde.com", - "yoapp.s3.amazonaws.com": "yo_button", - "natpal.com": "yodle", - "analytics.yola.net": "yola_analytics", - "pixel.yola.net": "yola_analytics", - "delivery.yomedia.vn": "yomedia", - "yoochoose.net": "yoochoose.net", - "yotpo.com": "yotpo", - "yottaa.net": "yottaa", - "yottlyscript.com": "yottly", - "api.youcanbook.me": "youcanbookme", - "youcanbook.me": "youcanbookme", - "player.youku.com": "youku", - "youporn.com": "youporn", - "ypncdn.com": "youporn", - "googlevideo.com": "youtube", - "youtube-nocookie.com": "youtube", - "youtube.com": "youtube", - "ytimg.com": "youtube", - "c.ypcdn.com": "yp", - "i1.ypcdn.com": "yp", - "yellowpages.com": "yp", - "prod-js.aws.y-track.com": "ysance", - "y-track.com": "ysance", - "yume.com": "yume", - "yumenetworks.com": "yume,_inc.", - "gravityrd-services.com": "yusp", - "api.zadarma.com": "zadarma", - "zalan.do": "zalando_de", - "zalando.de": "zalando_de", - "ztat.net": "zalando_de", - "zaloapp.com": "zalo", - "zanox-affiliate.de": "zanox", - "zanox.com": "zanox", - "zanox.ws": "zanox", - "zaparena.com": "zaparena", - "zapunited.com": "zaparena", - "track.zappos.com": "zappos", - "zdassets.com": "zdassets.com", - "zebestof.com": "zebestof.com", - "zedo.com": "zedo", - "zemanta.com": "zemanta", - "zencdn.net": "zencoder", - "zendesk.com": "zendesk", - "zergnet.com": "zergnet", - "zero.kz": "zero.kz", - "app.insightgrit.com": "zeta", - "app.ubertags.com": "zeta", - "cdn.boomtrain.com": "zeta", - "events.api.boomtrain.com": "zeta", - "rfihub.com": "zeta", - "rfihub.net": "zeta", - "ru4.com": "zeta", - "xplusone.com": "zeta", - "zeusclicks.com": "zeusclicks", - "webtest.net": "ziff_davis", - "zdbb.net": "ziff_davis", - "ziffdavis.com": "ziff_davis", - "ziffdavisinternational.com": "ziff_davis", - "ziffprod.com": "ziff_davis", - "ziffstatic.com": "ziff_davis", - "analytics.ziftsolutions.com": "zift_solutions", - "zimbio.com": "zimbio.com", - "api.zippyshare.com": "zippyshare_widget", - "zmags.com": "zmags", - "zmctrack.net": "zmctrack.net", - "zog.link": "zog.link", - "js.zohostatic.eu": "zoho", - "zononi.com": "zononi.com", - "zopim.com": "zopim", - "zukxd6fkxqn.com": "zukxd6fkxqn.com", - "zwaar.net": "zwaar", - "zwaar.org": "zwaar", - "extend.tv": "zypmedia" - } -} diff --git a/staticbak/static/index.html b/staticbak/static/index.html deleted file mode 100644 index 0f7ec8d..0000000 --- a/staticbak/static/index.html +++ /dev/null @@ -1,1181 +0,0 @@ - - - - - - DNS服务器控制台 - - - - - - - - - - - - -

- - - - - - - - - - -
- -
-
- -

仪表盘

-
- -
- - - -
- - - -
-
-
- - -
- -
- -
- -
- -
-
-
-

查询总量

-
- -
-
-
-
-

0

- - - 0% - -
-
-
-
- - -
- -
-
-
-

屏蔽数量

-
- -
-
-
-
-

0

- - - 0% - -
-
-
-
- - -
- -
-
-
-

正常解析

-
- -
-
-
-
-

0

- - - 0% - -
-
-
-
- - -
- -
-
-
-

错误数量

-
- -
-
-
-
-

0

- - - 0% - -
-
-
-
- - -
- -
-
-
-

平均响应时间

-
- -
-
-
-
-

0ms

- - - 0% - -
-
-
-
- - -
- -
-
-
-

最常用查询类型

-
- -
-
-
-

A

- - - 0% - -
-
-
- - -
- -
-
-
-

活跃来源IP

-
- -
-
-
-
-

0

- - - 0% - -
-
-
-
- - -
- -
-
-
-

DNSSEC使用率

-
- -
-
-
-
-

0%

- - - 已禁用 - -
-
-
-
- - 成功: 0 -
-
- - 失败: 0 -
-
- - 总查询: 0 -
-
-
-
- -
- - -
- -
-

解析与屏蔽比例

-
- -
-
- -
-

解析类型统计

-
- -
-
- -
-
-

DNS请求趋势

- - -
-
- -
-
-
- - - - - -
- -
-

被拦截域名排行

-
-
-
-
-
- 1 - example1.com -
-
- 150 -
-
-
-
- 2 - example2.com -
-
- 130 -
-
-
-
- 3 - example3.com -
-
- 120 -
-
-
-
- 4 - example4.com -
-
- 110 -
-
-
-
- 5 - example5.com -
-
- 100 -
-
-
-
- - -
-

请求域名排行

-
-
-
-
-
- 1 - example.com -
-
- 50 -
-
-
-
-
- - -
- -
-
-

客户端排行

-
- - 加载中... -
- -
-
-
-
-
-
- 1 - 192.168.1.1 -
-
- 500 -
-
-
-
- 2 - 192.168.1.2 -
-
- 450 -
-
-
-
- 3 - 192.168.1.3 -
-
- 400 -
-
-
-
- 4 - 192.168.1.4 -
-
- 350 -
-
-
-
- 5 - 192.168.1.5 -
-
- 300 -
-
-
-
-
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/staticbak/static/js/api.js b/staticbak/static/js/api.js deleted file mode 100644 index d8f5bbd..0000000 --- a/staticbak/static/js/api.js +++ /dev/null @@ -1,305 +0,0 @@ -// API模块 - 统一管理所有API调用 - -// API路径定义 -const API_BASE_URL = '/api'; - -// API请求封装 -async function apiRequest(endpoint, method = 'GET', data = null) { - const url = `${API_BASE_URL}${endpoint}`; - const options = { - method, - headers: { - 'Content-Type': 'application/json', - 'Cache-Control': 'no-store, no-cache, must-revalidate, max-age=0', - 'Pragma': 'no-cache', - }, - credentials: 'same-origin', - }; - - if (data) { - options.body = JSON.stringify(data); - } - - // 添加超时处理 - const timeoutPromise = new Promise((_, reject) => { - setTimeout(() => { - reject(new Error('请求超时')); - }, 10000); // 10秒超时 - }); - - try { - // 竞争:请求或超时 - const response = await Promise.race([fetch(url, options), timeoutPromise]); - - // 获取响应文本,用于调试和错误处理 - const responseText = await response.text(); - - if (!response.ok) { - // 优化错误响应处理 - console.warn(`API请求失败: ${response.status}`); - - // 处理401未授权错误,重定向到登录页面 - if (response.status === 401) { - console.warn('未授权访问,重定向到登录页面'); - window.location.href = '/login'; - return { error: '未授权访问' }; - } - - // 尝试解析JSON,但如果失败,直接使用原始文本作为错误信息 - try { - const errorData = JSON.parse(responseText); - return { error: errorData.error || responseText || `请求失败: ${response.status}` }; - } catch (parseError) { - // 当响应不是有效的JSON时(如中文错误信息),直接使用原始文本 - console.warn('非JSON格式错误响应:', responseText); - return { error: responseText || `请求失败: ${response.status}` }; - } - } - - // 尝试解析成功响应 - try { - // 首先检查响应文本是否为空 - if (!responseText || responseText.trim() === '') { - console.warn('空响应文本'); - return null; // 返回null表示空响应 - } - - // 尝试解析JSON - const parsedData = JSON.parse(responseText); - - // 检查解析后的数据是否有效 - if (parsedData === null || (typeof parsedData === 'object' && Object.keys(parsedData).length === 0)) { - console.warn('解析后的数据为空'); - return null; - } - - // 限制所有数字为两位小数 - const formatNumbers = (obj) => { - if (typeof obj === 'number') { - return parseFloat(obj.toFixed(2)); - } else if (Array.isArray(obj)) { - return obj.map(formatNumbers); - } else if (obj && typeof obj === 'object') { - const formattedObj = {}; - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - formattedObj[key] = formatNumbers(obj[key]); - } - } - return formattedObj; - } - return obj; - }; - - const formattedData = formatNumbers(parsedData); - return formattedData; - } catch (parseError) { - // 详细记录错误信息和响应内容 - console.error('JSON解析错误:', parseError); - console.error('原始响应文本:', responseText); - console.error('响应长度:', responseText.length); - console.error('响应前100字符:', responseText.substring(0, 100)); - - // 如果是位置66附近的错误,特别标记 - if (parseError.message.includes('position 66')) { - console.error('位置66附近的字符:', responseText.substring(60, 75)); - } - - // 返回错误对象,让上层处理 - return { error: 'JSON解析错误' }; - } - } catch (error) { - console.error('API请求错误:', error); - // 返回错误对象,而不是抛出异常,让上层处理 - return { error: error.message }; - } -} - -// API方法集合 -const api = { - // 获取统计信息 - getStats: () => apiRequest('/stats?t=' + Date.now()), - - // 获取系统状态 - getStatus: () => apiRequest('/status?t=' + Date.now()), - - // 获取Top屏蔽域名 - getTopBlockedDomains: () => apiRequest('/top-blocked?t=' + Date.now()), - - // 获取Top解析域名 - getTopResolvedDomains: () => apiRequest('/top-resolved?t=' + Date.now()), - - // 获取最近屏蔽域名 - getRecentBlockedDomains: () => apiRequest('/recent-blocked?t=' + Date.now()), - - // 获取TOP客户端 - getTopClients: () => apiRequest('/top-clients?t=' + Date.now()), - - // 获取TOP域名 - getTopDomains: () => apiRequest('/top-domains?t=' + Date.now()), - - // 获取小时统计 - getHourlyStats: () => apiRequest('/hourly-stats?t=' + Date.now()), - - // 获取每日统计数据(7天) - getDailyStats: () => apiRequest('/daily-stats?t=' + Date.now()), - - // 获取每月统计数据(30天) - getMonthlyStats: () => apiRequest('/monthly-stats?t=' + Date.now()), - - // 获取查询类型统计 - getQueryTypeStats: () => apiRequest('/query/type?t=' + Date.now()), - - // 获取屏蔽规则 - 已禁用 - getShieldRules: () => { - console.log('屏蔽规则功能已禁用'); - return Promise.resolve({}); // 返回空对象而非API调用 - }, - - // 添加屏蔽规则 - 已禁用 - addShieldRule: (rule) => { - console.log('屏蔽规则功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 删除屏蔽规则 - 已禁用 - deleteShieldRule: (rule) => { - console.log('屏蔽规则功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 更新远程规则 - 已禁用 - updateRemoteRules: () => { - console.log('屏蔽规则功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 获取黑名单列表 - 已禁用 - getBlacklists: () => { - console.log('屏蔽规则相关功能已禁用'); - return Promise.resolve([]); // 返回空数组而非API调用 - }, - - // 添加黑名单 - 已禁用 - addBlacklist: (url) => { - console.log('屏蔽规则相关功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 删除黑名单 - 已禁用 - deleteBlacklist: (url) => { - console.log('屏蔽规则相关功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 获取Hosts内容 - 已禁用 - getHosts: () => { - console.log('屏蔽规则相关功能已禁用'); - return Promise.resolve({ content: '' }); // 返回空内容而非API调用 - }, - - // 保存Hosts内容 - 已禁用 - saveHosts: (content) => { - console.log('屏蔽规则相关功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 刷新Hosts - 已禁用 - refreshHosts: () => { - console.log('屏蔽规则相关功能已禁用'); - return Promise.resolve({ error: '屏蔽规则功能已禁用' }); - }, - - // 查询DNS记录 - 兼容多种参数格式 - queryDNS: async function(domain, recordType) { - try { - console.log('执行DNS查询:', { domain, recordType }); - - // 适配参数格式 - let params; - if (typeof domain === 'object') { - // 当传入对象时 - params = domain; - } else { - // 当传入单独参数时 - params = { domain, recordType }; - } - - // 尝试不同的API端点 - const endpoints = ['/api/dns/query', '/dns/query', '/api/query', '/query']; - let lastError; - - for (const endpoint of endpoints) { - try { - console.log(`尝试API端点: ${endpoint}`); - const response = await fetch(endpoint, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(params) - }); - - if (response.ok) { - const data = await response.json(); - console.log('DNS查询成功:', data); - return data; - } else { - lastError = new Error(`HTTP error! status: ${response.status} for endpoint: ${endpoint}`); - } - } catch (error) { - lastError = error; - console.log(`端点 ${endpoint} 调用失败,尝试下一个`); - } - } - - // 如果所有端点都失败,抛出最后一个错误 - throw lastError || new Error('所有API端点调用失败'); - } catch (error) { - console.error('DNS查询API调用失败:', error); - - // 返回模拟数据作为后备 - const mockDomain = (typeof domain === 'object' ? domain.domain : domain) || 'example.com'; - const mockType = (typeof domain === 'object' ? domain.recordType : recordType) || 'A'; - - const mockData = { - 'A': [ - { Type: 'A', Value: '93.184.216.34', TTL: 172800 }, - { Type: 'A', Value: '93.184.216.35', TTL: 172800 } - ], - 'AAAA': [ - { Type: 'AAAA', Value: '2606:2800:220:1:248:1893:25c8:1946', TTL: 172800 } - ], - 'MX': [ - { Type: 'MX', Value: 'mail.' + mockDomain, Preference: 10, TTL: 3600 }, - { Type: 'MX', Value: 'mail2.' + mockDomain, Preference: 20, TTL: 3600 } - ], - 'NS': [ - { Type: 'NS', Value: 'ns1.' + mockDomain, TTL: 86400 }, - { Type: 'NS', Value: 'ns2.' + mockDomain, TTL: 86400 } - ], - 'CNAME': [ - { Type: 'CNAME', Value: 'origin.' + mockDomain, TTL: 300 } - ], - 'TXT': [ - { Type: 'TXT', Value: 'v=spf1 include:_spf.' + mockDomain + ' ~all', TTL: 3600 } - ] - }; - - console.log('返回模拟DNS数据'); - return mockData[mockType] || []; - } - }, - - // 获取系统配置 - getConfig: () => apiRequest('/config'), - - // 保存系统配置 - saveConfig: (config) => apiRequest('/config', 'POST', config), - - // 重启服务 - restartService: () => apiRequest('/config/restart', 'POST') -}; - -// 导出API工具 -window.api = api; \ No newline at end of file diff --git a/staticbak/static/js/app.js b/staticbak/static/js/app.js deleted file mode 100644 index c193813..0000000 --- a/staticbak/static/js/app.js +++ /dev/null @@ -1,317 +0,0 @@ -// 全局配置 -const API_BASE_URL = '.'; - -// DOM 加载完成后执行 -document.addEventListener('DOMContentLoaded', function() { - // 初始化面板切换 - initPanelNavigation(); - - // 加载初始数据 - loadInitialData(); - - // 直接调用dashboard面板初始化函数,确保数据正确加载 - if (typeof initDashboardPanel === 'function') { - initDashboardPanel(); - } - - // 注意:实时更新现在由index.html中的startRealTimeUpdate函数控制 - // 并根据面板状态自动启用/禁用 -}); - -// 初始化面板导航 -function initPanelNavigation() { - const navItems = document.querySelectorAll('.nav-item'); - const panels = document.querySelectorAll('.panel'); - - navItems.forEach(item => { - item.addEventListener('click', function() { - // 移除所有活动类 - navItems.forEach(nav => nav.classList.remove('active')); - panels.forEach(panel => panel.classList.remove('active')); - - // 添加当前活动类 - this.classList.add('active'); - const target = this.getAttribute('data-target'); - document.getElementById(target).classList.add('active'); - - // 面板激活时执行相应的初始化函数 - if (window[`init${target.charAt(0).toUpperCase() + target.slice(1)}Panel`]) { - window[`init${target.charAt(0).toUpperCase() + target.slice(1)}Panel`](); - } - }); - }); -} - -// 保留原有的通知函数作为兼容层 -// 现在主通知功能由index.html中的showNotification函数实现 -if (typeof window.showNotification === 'undefined') { - window.showNotification = function(message, type = 'info') { - // 创建临时通知元素 - const notification = document.createElement('div'); - notification.className = `notification notification-${type} show`; - notification.innerHTML = ` -
${message}
- `; - notification.style.cssText = 'position: fixed; top: 20px; right: 20px; background: #333; color: white; padding: 10px 15px; border-radius: 4px; z-index: 10000;'; - - document.body.appendChild(notification); - - setTimeout(() => { - notification.remove(); - }, 3000); - }; -} - -// 加载初始数据(主要用于服务器状态) -function loadInitialData() { - // 加载服务器状态 - fetch(`${API_BASE_URL}/api/status`) - .then(response => response.json()) - .then(data => { - // 更新服务器状态指示器 - const statusDot = document.querySelector('.status-dot'); - const serverStatus = document.getElementById('server-status'); - - if (data && data.status === 'running') { - statusDot.classList.add('connected'); - serverStatus.textContent = '运行中'; - } else { - statusDot.classList.remove('connected'); - serverStatus.textContent = '离线'; - } - }) - .catch(error => { - console.error('获取服务器状态失败:', error); - - // 更新状态为离线 - const statusDot = document.querySelector('.status-dot'); - const serverStatus = document.getElementById('server-status'); - statusDot.classList.remove('connected'); - serverStatus.textContent = '离线'; - - // 使用新的通知功能 - if (typeof window.showNotification === 'function') { - window.showNotification('获取服务器状态失败', 'danger'); - } - }); - - // 注意:统计数据更新现在由dashboard.js中的updateStatCards函数处理 -} - -// 注意:统计卡片数据更新现在由dashboard.js中的updateStatCards函数处理 -// 此函数保留作为兼容层,实际功能已迁移 -function updateStatCards(stats) { - // 空实现,保留函数声明以避免引用错误 - console.log('更新统计卡片 - 此功能现在由dashboard.js处理'); -} - -// 注意:获取规则数量功能现在由dashboard.js中的updateStatCards函数处理 -function fetchRulesCount() { - // 空实现,保留函数声明以避免引用错误 -} - -// 注意:获取hosts数量功能现在由dashboard.js中的updateStatCards函数处理 -function fetchHostsCount() { - // 空实现,保留函数声明以避免引用错误 -} - -// 通用API请求函数 - 添加错误处理和重试机制 -function apiRequest(endpoint, method = 'GET', data = null, maxRetries = 3) { - const headers = { - 'Content-Type': 'application/json' - }; - - const config = { - method, - headers, - timeout: 10000, // 设置超时时间为10秒 - }; - - // 处理请求URL和参数 - let url = `${API_BASE_URL}${endpoint}`; - - if (data) { - if (method === 'GET') { - // 为GET请求拼接查询参数 - const params = new URLSearchParams(); - Object.keys(data).forEach(key => { - params.append(key, data[key]); - }); - url += `?${params.toString()}`; - } else if (method === 'POST' || method === 'PUT' || method === 'DELETE') { - // 为其他方法设置body - config.body = JSON.stringify(data); - } - } - - let retries = 0; - - function makeRequest() { - return fetch(url, config) - .then(response => { - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - // 检查响应是否完整 - const contentType = response.headers.get('content-type'); - if (contentType && contentType.includes('application/json')) { - // 使用.text()先获取响应文本,处理可能的JSON解析错误 - return response.text().then(text => { - try { - return JSON.parse(text); - } catch (e) { - console.error('JSON解析错误:', e, '响应文本:', text); - // 针对ERR_INCOMPLETE_CHUNKED_ENCODING错误进行重试 - if (retries < maxRetries) { - retries++; - console.warn(`请求失败,正在进行第${retries}次重试...`); - return new Promise(resolve => setTimeout(() => resolve(makeRequest()), 1000 * retries)); - } - throw new Error('JSON解析失败且重试次数已达上限'); - } - }); - } - return response.json(); - }) - .catch(error => { - console.error('API请求错误:', error); - - // 检查是否为网络错误或ERR_INCOMPLETE_CHUNKED_ENCODING相关错误 - if ((error.name === 'TypeError' && error.message.includes('Failed to fetch')) || - error.message.includes('incomplete chunked encoding')) { - - if (retries < maxRetries) { - retries++; - console.warn(`网络错误,正在进行第${retries}次重试...`); - return new Promise(resolve => setTimeout(() => resolve(makeRequest()), 1000 * retries)); - } - } - - throw error; - }); - } - - return makeRequest(); -} - -// 数字格式化函数 -function formatNumber(num) { - // 显示完整数字的最大长度阈值 - const MAX_FULL_LENGTH = 5; - - // 先获取完整数字字符串 - const fullNumStr = num.toString(); - - // 如果数字长度小于等于阈值,直接返回完整数字 - if (fullNumStr.length <= MAX_FULL_LENGTH) { - return fullNumStr; - } - - // 否则使用缩写格式 - if (num >= 1000000) { - return (num / 1000000).toFixed(1) + 'M'; - } else if (num >= 1000) { - return (num / 1000).toFixed(1) + 'K'; - } - - return fullNumStr; -} - -// 确认对话框函数 -function confirmAction(message, onConfirm) { - if (confirm(message)) { - onConfirm(); - } -} - -// 加载状态函数 -function showLoading(element) { - if (element) { - element.innerHTML = '加载中...'; - } -} - -// 错误状态函数 -function showError(element, message) { - if (element) { - element.innerHTML = `${message}`; - } -} - -// 空状态函数 -function showEmpty(element, message) { - if (element) { - element.innerHTML = `${message}`; - } -} - -// 表格排序功能 -function initTableSort(tableId) { - const table = document.getElementById(tableId); - if (!table) return; - - const headers = table.querySelectorAll('thead th'); - headers.forEach(header => { - header.addEventListener('click', function() { - const columnIndex = Array.from(headers).indexOf(this); - const isAscending = this.getAttribute('data-sort') !== 'asc'; - - // 重置所有标题 - headers.forEach(h => h.setAttribute('data-sort', '')); - this.setAttribute('data-sort', isAscending ? 'asc' : 'desc'); - - // 排序行 - sortTable(table, columnIndex, isAscending); - }); - }); -} - -// 表格排序实现 -function sortTable(table, columnIndex, isAscending) { - const tbody = table.querySelector('tbody'); - const rows = Array.from(tbody.querySelectorAll('tr')); - - // 排序行 - rows.sort((a, b) => { - const aValue = a.cells[columnIndex].textContent.trim(); - const bValue = b.cells[columnIndex].textContent.trim(); - - // 尝试数字排序 - const aNum = parseFloat(aValue); - const bNum = parseFloat(bValue); - - if (!isNaN(aNum) && !isNaN(bNum)) { - return isAscending ? aNum - bNum : bNum - aNum; - } - - // 字符串排序 - return isAscending - ? aValue.localeCompare(bValue) - : bValue.localeCompare(aValue); - }); - - // 重新添加行 - rows.forEach(row => tbody.appendChild(row)); -} - -// 搜索过滤功能 -function initSearchFilter(inputId, tableId, columnIndex) { - const input = document.getElementById(inputId); - const table = document.getElementById(tableId); - - if (!input || !table) return; - - input.addEventListener('input', function() { - const filter = this.value.toLowerCase(); - const rows = table.querySelectorAll('tbody tr'); - - rows.forEach(row => { - const cell = row.cells[columnIndex]; - if (cell) { - const text = cell.textContent.toLowerCase(); - row.style.display = text.includes(filter) ? '' : 'none'; - } - }); - }); -} \ No newline at end of file diff --git a/staticbak/static/js/colors.config.js b/staticbak/static/js/colors.config.js deleted file mode 100644 index c755d91..0000000 --- a/staticbak/static/js/colors.config.js +++ /dev/null @@ -1,53 +0,0 @@ -// 颜色配置文件 - 集中管理所有UI颜色配置 - -// 主颜色配置对象 -const COLOR_CONFIG = { - // 主色调 - primary: '#1890ff', - success: '#52c41a', - warning: '#fa8c16', - error: '#f5222d', - purple: '#722ed1', - cyan: '#13c2c2', - teal: '#36cfc9', - - // 统计卡片颜色配置 - statCardColors: [ - '#1890ff', // blue - '#52c41a', // green - '#fa8c16', // orange - '#f5222d', // red - '#722ed1', // purple - '#13c2c2' // cyan - ], - - // 颜色代码到CSS类的映射 - colorClassMap: { - '#1890ff': 'blue', - '#52c41a': 'green', - '#fa8c16': 'orange', - '#f5222d': 'red', - '#722ed1': 'purple', - '#13c2c2': 'cyan', - '#36cfc9': 'teal' - }, - - // 获取颜色对应的CSS类名 - getColorClassName: function(colorCode) { - return this.colorClassMap[colorCode] || 'blue'; - }, - - // 获取统计卡片的颜色 - getStatCardColor: function(index) { - const colors = this.statCardColors; - return colors[index % colors.length]; - } -}; - -// 导出配置对象 -if (typeof module !== 'undefined' && module.exports) { - module.exports = COLOR_CONFIG; -} else { - // 浏览器环境 - window.COLOR_CONFIG = COLOR_CONFIG; -} \ No newline at end of file diff --git a/staticbak/static/js/config.js b/staticbak/static/js/config.js deleted file mode 100644 index 020da0f..0000000 --- a/staticbak/static/js/config.js +++ /dev/null @@ -1,296 +0,0 @@ -// 配置管理页面功能实现 - -// 工具函数:安全获取DOM元素 -function getElement(id) { - const element = document.getElementById(id); - if (!element) { - console.warn(`Element with id "${id}" not found`); - } - return element; -} - -// 工具函数:验证端口号 -function validatePort(port) { - // 确保port是字符串类型 - var portStr = port; - if (port === null || port === undefined || typeof port !== 'string') { - return null; - } - - // 去除前后空白并验证是否为纯数字 - portStr = port.trim(); - if (!/^\d+$/.test(portStr)) { - return null; - } - - const num = parseInt(portStr, 10); - return num >= 1 && num <= 65535 ? num : null; -} - -// 初始化配置管理页面 -function initConfigPage() { - loadConfig(); - setupConfigEventListeners(); -} - -// 加载系统配置 -async function loadConfig() { - try { - const result = await api.getConfig(); - - // 检查API返回的错误 - if (result && result.error) { - showErrorMessage('加载配置失败: ' + result.error); - return; - } - - populateConfigForm(result); - } catch (error) { - // 捕获可能的异常(虽然apiRequest不应该再抛出异常) - showErrorMessage('加载配置失败: ' + (error.message || '未知错误')); - } -} - -// 填充配置表单 -function populateConfigForm(config) { - // 安全获取配置对象,防止未定义属性访问 - const dnsServerConfig = config.DNSServer || {}; - const httpServerConfig = config.HTTPServer || {}; - const shieldConfig = config.Shield || {}; - - // DNS配置 - 使用函数安全设置值,避免 || 操作符可能的错误处理 - setElementValue('dns-port', getSafeValue(dnsServerConfig.Port, 53)); - setElementValue('dns-upstream-servers', getSafeArray(dnsServerConfig.UpstreamServers).join(', ')); - setElementValue('dns-dnssec-upstream-servers', getSafeArray(dnsServerConfig.DNSSECUpstreamServers).join(', ')); - //setElementValue('dns-stats-file', getSafeValue(dnsServerConfig.StatsFile, 'data/stats.json')); - setElementValue('dns-save-interval', getSafeValue(dnsServerConfig.SaveInterval, 30)); - //setElementValue('dns-cache-ttl', getSafeValue(dnsServerConfig.CacheTTL, 10)); - setElementValue('dns-enable-ipv6', getSafeValue(dnsServerConfig.EnableIPv6, false)); - // HTTP配置 - setElementValue('http-port', getSafeValue(httpServerConfig.Port, 8080)); - // 屏蔽配置 - //setElementValue('shield-local-rules-file', getSafeValue(shieldConfig.LocalRulesFile, 'data/rules.txt')); - setElementValue('shield-update-interval', getSafeValue(shieldConfig.UpdateInterval, 3600)); - //setElementValue('shield-hosts-file', getSafeValue(shieldConfig.HostsFile, 'data/hosts.txt')); - // 使用服务器端接受的屏蔽方法值,默认使用NXDOMAIN, 可选值: NXDOMAIN, NULL, REFUSED - setElementValue('shield-block-method', getSafeValue(shieldConfig.BlockMethod, 'NXDOMAIN')); -} - -// 工具函数:安全设置元素值 -function setElementValue(elementId, value) { - const element = document.getElementById(elementId); - if (element && element.tagName === 'INPUT') { - if (element.type === 'checkbox') { - element.checked = value; - } else { - element.value = value; - } - } else if (!element) { - console.warn(`Element with id "${elementId}" not found for setting value: ${value}`); - } -} - -// 工具函数:安全获取值,如果未定义或为null则返回默认值 -function getSafeValue(value, defaultValue) { - // 更严格的检查,避免0、空字符串等被默认值替换 - return value === undefined || value === null ? defaultValue : value; -} - -// 工具函数:安全获取数组,如果不是数组则返回空数组 -function getSafeArray(value) { - return Array.isArray(value) ? value : []; -} - -// 保存配置 -async function handleSaveConfig() { - const formData = collectFormData(); - if (!formData) return; - - try { - const result = await api.saveConfig(formData); - - // 检查API返回的错误 - if (result && result.error) { - showErrorMessage('保存配置失败: ' + result.error); - return; - } - - showSuccessMessage('配置保存成功'); - } catch (error) { - // 捕获可能的异常(虽然apiRequest不应该再抛出异常) - showErrorMessage('保存配置失败: ' + (error.message || '未知错误')); - } -} - -// 重启服务 -async function handleRestartService() { - if (!confirm('确定要重启DNS服务吗?重启期间服务可能会短暂不可用。')) return; - - try { - const result = await api.restartService(); - - // 检查API返回的错误 - if (result && result.error) { - showErrorMessage('服务重启失败: ' + result.error); - return; - } - - showSuccessMessage('服务重启成功'); - } catch (error) { - // 捕获可能的异常(虽然apiRequest不应该再抛出异常) - showErrorMessage('重启服务失败: ' + (error.message || '未知错误')); - } -} - -// 收集表单数据并验证 -function collectFormData() { - // 验证端口号 - 使用安全获取元素值的函数 - const dnsPortValue = getElementValue('dns-port'); - const httpPortValue = getElementValue('http-port'); - - const dnsPort = validatePort(dnsPortValue); - const httpPort = validatePort(httpPortValue); - - if (!dnsPort) { - showErrorMessage('DNS端口号无效(必须是1-65535之间的整数)'); - return null; - } - - if (!httpPort) { - showErrorMessage('HTTP端口号无效(必须是1-65535之间的整数)'); - return null; - } - - // 安全获取上游服务器列表 - const upstreamServersText = getElementValue('dns-upstream-servers'); - const upstreamServers = upstreamServersText ? - upstreamServersText.split(',').map(function(s) { return s.trim(); }).filter(function(s) { return s !== ''; }) : - []; - - // 安全获取DNSSEC上游服务器列表 - const dnssecUpstreamServersText = getElementValue('dns-dnssec-upstream-servers'); - const dnssecUpstreamServers = dnssecUpstreamServersText ? - dnssecUpstreamServersText.split(',').map(function(s) { return s.trim(); }).filter(function(s) { return s !== ''; }) : - []; - - // 安全获取并转换整数值 - const timeoutValue = getElementValue('dns-timeout'); - const timeout = timeoutValue ? parseInt(timeoutValue, 10) : 5; - - const saveIntervalValue = getElementValue('dns-save-interval'); - const saveInterval = saveIntervalValue ? parseInt(saveIntervalValue, 10) : 300; - - const updateIntervalValue = getElementValue('shield-update-interval'); - const updateInterval = updateIntervalValue ? parseInt(updateIntervalValue, 10) : 3600; - - return { - dnsserver: { - port: dnsPort, - upstreamServers: upstreamServers, - dnssecUpstreamServers: dnssecUpstreamServers, - timeout: timeout, - saveInterval: saveInterval, - enableIPv6: getElementValue('dns-enable-ipv6') - }, - httpserver: { - port: httpPort - }, - shield: { - updateInterval: updateInterval, - blockMethod: getElementValue('shield-block-method') || 'NXDOMAIN' - } - }; -} - -// 工具函数:安全获取元素值 -function getElementValue(elementId) { - const element = document.getElementById(elementId); - if (element && element.tagName === 'INPUT') { - if (element.type === 'checkbox') { - return element.checked; - } - return element.value; - } - return ''; // 默认返回空字符串 -} - -// 设置事件监听器 -function setupConfigEventListeners() { - // 保存配置按钮 - getElement('save-config-btn')?.addEventListener('click', handleSaveConfig); - - // 重启服务按钮 - getElement('restart-service-btn')?.addEventListener('click', handleRestartService); -} - - - -// 显示成功消息 -function showSuccessMessage(message) { - showNotification(message, 'success'); -} - -// 显示错误消息 -function showErrorMessage(message) { - showNotification(message, 'error'); -} - -// 显示通知 -function showNotification(message, type = 'info') { - // 移除现有通知 - const existingNotification = document.querySelector('.notification'); - if (existingNotification) { - existingNotification.remove(); - } - - // 创建新通知 - const notification = document.createElement('div'); - notification.className = `notification fixed bottom-4 right-4 px-6 py-3 rounded-lg shadow-lg z-50 transform transition-transform duration-300 ease-in-out translate-y-0 opacity-0`; - - // 设置通知样式(兼容Tailwind和原生CSS) - notification.style.cssText += ` - position: fixed; - bottom: 16px; - right: 16px; - padding: 16px 24px; - border-radius: 8px; - box-shadow: 0 4px 12px rgba(0,0,0,0.15); - z-index: 1000; - transition: all 0.3s ease; - opacity: 0; - `; - - if (type === 'success') { - notification.style.backgroundColor = '#10b981'; - notification.style.color = 'white'; - } else if (type === 'error') { - notification.style.backgroundColor = '#ef4444'; - notification.style.color = 'white'; - } else { - notification.style.backgroundColor = '#3b82f6'; - notification.style.color = 'white'; - } - - notification.textContent = message; - document.body.appendChild(notification); - - // 显示通知 - setTimeout(() => { - notification.style.opacity = '1'; - }, 10); - - // 3秒后隐藏通知 - setTimeout(() => { - notification.style.opacity = '0'; - setTimeout(() => { - notification.remove(); - }, 300); - }, 3000); -} - -// 页面加载完成后初始化 -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initConfigPage); -} else { - initConfigPage(); -} \ No newline at end of file diff --git a/staticbak/static/js/dashboard.js b/staticbak/static/js/dashboard.js deleted file mode 100644 index 7f55b28..0000000 --- a/staticbak/static/js/dashboard.js +++ /dev/null @@ -1,3079 +0,0 @@ -// dashboard.js - 仪表盘功能实现 - -// 全局变量 -let ratioChart = null; -let dnsRequestsChart = null; -let detailedDnsRequestsChart = null; // 详细DNS请求趋势图表(浮窗) -let queryTypeChart = null; // 解析类型统计饼图 -let intervalId = null; -let dashboardWsConnection = null; -let dashboardWsReconnectTimer = null; -// 存储统计卡片图表实例 -let statCardCharts = {}; -// 存储统计卡片历史数据 -let statCardHistoryData = {}; -// 存储仪表盘历史数据,用于计算趋势 -window.dashboardHistoryData = window.dashboardHistoryData || { - prevResponseTime: null, - prevActiveIPs: null, - prevTopQueryTypeCount: null -}; - -// 引入颜色配置文件 -const COLOR_CONFIG = window.COLOR_CONFIG || {}; - -// 初始化仪表盘 -async function initDashboard() { - try { - console.log('页面打开时强制刷新数据...'); - - // 优先加载初始数据,确保页面显示最新信息 - await loadDashboardData(); - - // 初始化图表 - initCharts(); - - - - // 初始化时间范围切换 - initTimeRangeToggle(); - - // 建立WebSocket连接 - connectWebSocket(); - - // 在页面卸载时清理资源 - window.addEventListener('beforeunload', cleanupResources); - } catch (error) { - console.error('初始化仪表盘失败:', error); - showNotification('初始化失败: ' + error.message, 'error'); - } -} - -// 建立WebSocket连接 -function connectWebSocket() { - try { - // 构建WebSocket URL - const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - const wsUrl = `${wsProtocol}//${window.location.host}/ws/stats`; - - console.log('正在连接WebSocket:', wsUrl); - - // 创建WebSocket连接 - dashboardWsConnection = new WebSocket(wsUrl); - - // 连接打开事件 - dashboardWsConnection.onopen = function() { - console.log('WebSocket连接已建立'); - showNotification('数据更新成功', 'success'); - - // 清除重连计时器 - if (dashboardWsReconnectTimer) { - clearTimeout(dashboardWsReconnectTimer); - dashboardWsReconnectTimer = null; - } - }; - - // 接收消息事件 - dashboardWsConnection.onmessage = function(event) { - try { - const data = JSON.parse(event.data); - - if (data.type === 'initial_data' || data.type === 'stats_update') { - console.log('收到实时数据更新'); - processRealTimeData(data.data); - } - } catch (error) { - console.error('处理WebSocket消息失败:', error); - } - }; - - // 连接关闭事件 - dashboardWsConnection.onclose = function(event) { - console.warn('WebSocket连接已关闭,代码:', event.code); - dashboardWsConnection = null; - - // 设置重连 - setupReconnect(); - }; - - // 连接错误事件 - dashboardWsConnection.onerror = function(error) { - console.error('WebSocket连接错误:', error); - }; - - } catch (error) { - console.error('创建WebSocket连接失败:', error); - // 如果WebSocket连接失败,回退到定时刷新 - fallbackToIntervalRefresh(); - } -} - -// 设置重连逻辑 -function setupReconnect() { - if (dashboardWsReconnectTimer) { - return; // 已经有重连计时器在运行 - } - - const reconnectDelay = 5000; // 5秒后重连 - console.log(`将在${reconnectDelay}ms后尝试重新连接WebSocket`); - - dashboardWsReconnectTimer = setTimeout(() => { - connectWebSocket(); - }, reconnectDelay); -} - -// 处理实时数据更新 -function processRealTimeData(stats) { - try { - // 更新统计卡片 - 这会更新所有统计卡片,包括CPU使用率卡片 - updateStatsCards(stats); - - // 获取查询类型统计数据 - let queryTypeStats = null; - if (stats.dns && stats.dns.QueryTypes) { - queryTypeStats = Object.entries(stats.dns.QueryTypes).map(([type, count]) => ({ - type, - count - })); - } - - // 更新图表数据 - updateCharts(stats, queryTypeStats); - - - - // 尝试从stats中获取总查询数等信息 - if (stats.dns) { - totalQueries = stats.dns.Allowed + stats.dns.Blocked + (stats.dns.Errors || 0); - blockedQueries = stats.dns.Blocked; - errorQueries = stats.dns.Errors || 0; - allowedQueries = stats.dns.Allowed; - } else { - totalQueries = stats.totalQueries || 0; - blockedQueries = stats.blockedQueries || 0; - errorQueries = stats.errorQueries || 0; - allowedQueries = stats.allowedQueries || 0; - } - - // 更新新卡片数据 - if (document.getElementById('avg-response-time')) { - const responseTime = stats.avgResponseTime ? stats.avgResponseTime.toFixed(2) + 'ms' : '---'; - - // 计算响应时间趋势 - let responsePercent = '---'; - let trendClass = 'text-gray-400'; - let trendIcon = '---'; - - if (stats.avgResponseTime !== undefined && stats.avgResponseTime !== null) { - // 存储当前值用于下次计算趋势 - const prevResponseTime = window.dashboardHistoryData.prevResponseTime || stats.avgResponseTime; - window.dashboardHistoryData.prevResponseTime = stats.avgResponseTime; - - // 计算变化百分比 - if (prevResponseTime > 0) { - const changePercent = ((stats.avgResponseTime - prevResponseTime) / prevResponseTime) * 100; - responsePercent = Math.abs(changePercent).toFixed(1) + '%'; - - // 设置趋势图标和颜色 - if (changePercent > 0) { - trendIcon = '↓'; - trendClass = 'text-danger'; - } else if (changePercent < 0) { - trendIcon = '↑'; - trendClass = 'text-success'; - } else { - trendIcon = '•'; - trendClass = 'text-gray-500'; - } - } - } - - document.getElementById('avg-response-time').textContent = responseTime; - const responseTimePercentElem = document.getElementById('response-time-percent'); - if (responseTimePercentElem) { - responseTimePercentElem.textContent = trendIcon + ' ' + responsePercent; - responseTimePercentElem.className = `text-sm flex items-center ${trendClass}`; - } - } - - if (document.getElementById('top-query-type')) { - const queryType = stats.topQueryType || '---'; - document.getElementById('top-query-type').textContent = queryType; - - const queryPercentElem = document.getElementById('query-type-percentage'); - if (queryPercentElem) { - // 计算查询类型趋势 - let queryPercent = '---'; - let trendClass = 'text-gray-400'; - let trendIcon = '---'; - - if (stats.topQueryTypeCount !== undefined && stats.topQueryTypeCount !== null) { - // 存储当前值用于下次计算趋势 - const prevTopQueryTypeCount = window.dashboardHistoryData.prevTopQueryTypeCount || stats.topQueryTypeCount; - window.dashboardHistoryData.prevTopQueryTypeCount = stats.topQueryTypeCount; - - // 计算变化百分比 - if (prevTopQueryTypeCount > 0) { - const changePercent = ((stats.topQueryTypeCount - prevTopQueryTypeCount) / prevTopQueryTypeCount) * 100; - queryPercent = Math.abs(changePercent).toFixed(1) + '%'; - - // 设置趋势图标和颜色 - if (changePercent > 0) { - trendIcon = '↑'; - trendClass = 'text-primary'; - } else if (changePercent < 0) { - trendIcon = '↓'; - trendClass = 'text-secondary'; - } else { - trendIcon = '•'; - trendClass = 'text-gray-500'; - } - } - } - - queryPercentElem.textContent = trendIcon + ' ' + queryPercent; - queryPercentElem.className = `text-sm flex items-center ${trendClass}`; - } - } - - if (document.getElementById('active-ips')) { - const activeIPs = stats.activeIPs !== undefined ? formatNumber(stats.activeIPs) : '---'; - - // 计算活跃IP趋势 - let ipsPercent = '---'; - let trendClass = 'text-gray-400'; - let trendIcon = '---'; - - if (stats.activeIPs !== undefined) { - const prevActiveIPs = window.dashboardHistoryData.prevActiveIPs || stats.activeIPs; - window.dashboardHistoryData.prevActiveIPs = stats.activeIPs; - - if (prevActiveIPs > 0) { - const changePercent = ((stats.activeIPs - prevActiveIPs) / prevActiveIPs) * 100; - ipsPercent = Math.abs(changePercent).toFixed(1) + '%'; - - if (changePercent > 0) { - trendIcon = '↑'; - trendClass = 'text-primary'; - } else if (changePercent < 0) { - trendIcon = '↓'; - trendClass = 'text-secondary'; - } else { - trendIcon = '•'; - trendClass = 'text-gray-500'; - } - } - } - - document.getElementById('active-ips').textContent = activeIPs; - const activeIpsPercentElem = document.getElementById('active-ips-percentage'); - if (activeIpsPercentElem) { - activeIpsPercentElem.textContent = trendIcon + ' ' + ipsPercent; - activeIpsPercentElem.className = `text-sm flex items-center ${trendClass}`; - } - } - - // 实时更新TOP客户端和TOP域名数据 - updateTopData(); - - } catch (error) { - console.error('处理实时数据失败:', error); - } -} - -// 实时更新TOP客户端和TOP域名数据 -async function updateTopData() { - try { - // 获取最新的TOP客户端数据 - let clientsData = []; - try { - clientsData = await api.getTopClients(); - } catch (error) { - console.error('获取TOP客户端数据失败:', error); - } - - if (clientsData && !clientsData.error && Array.isArray(clientsData)) { - if (clientsData.length > 0) { - // 使用真实数据 - updateTopClientsTable(clientsData); - // 隐藏错误信息 - const errorElement = document.getElementById('top-clients-error'); - if (errorElement) errorElement.classList.add('hidden'); - } else { - // 数据为空,使用模拟数据 - const mockClients = [ - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' } - ]; - updateTopClientsTable(mockClients); - } - } else { - // API调用失败或返回错误,使用模拟数据 - const mockClients = [ - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' }, - { ip: '---.---.---.---', count: '---' } - ]; - updateTopClientsTable(mockClients); - } - - // 获取最新的TOP域名数据 - let domainsData = []; - try { - domainsData = await api.getTopDomains(); - } catch (error) { - console.error('获取TOP域名数据失败:', error); - } - - if (domainsData && !domainsData.error && Array.isArray(domainsData)) { - if (domainsData.length > 0) { - // 使用真实数据 - updateTopDomainsTable(domainsData); - // 隐藏错误信息 - const errorElement = document.getElementById('top-domains-error'); - if (errorElement) errorElement.classList.add('hidden'); - } else { - // 数据为空,使用模拟数据 - const mockDomains = [ - { domain: 'example.com', count: 50 }, - { domain: 'google.com', count: 45 }, - { domain: 'facebook.com', count: 40 }, - { domain: 'twitter.com', count: 35 }, - { domain: 'youtube.com', count: 30 } - ]; - updateTopDomainsTable(mockDomains); - } - } else { - // API调用失败或返回错误,使用模拟数据 - const mockDomains = [ - { domain: 'example.com', count: 50 }, - { domain: 'google.com', count: 45 }, - { domain: 'facebook.com', count: 40 }, - { domain: 'twitter.com', count: 35 }, - { domain: 'youtube.com', count: 30 } - ]; - updateTopDomainsTable(mockDomains); - } - } catch (error) { - console.error('更新TOP数据失败:', error); - // 出错时使用模拟数据 - const mockDomains = [ - { domain: 'example.com', count: 50 }, - { domain: 'google.com', count: 45 }, - { domain: 'facebook.com', count: 40 }, - { domain: 'twitter.com', count: 35 }, - { domain: 'youtube.com', count: 30 } - ]; - updateTopDomainsTable(mockDomains); - } -} - -// 回退到定时刷新 -function fallbackToIntervalRefresh() { - console.warn('回退到定时刷新模式'); - showNotification('实时更新连接失败,已切换到定时刷新模式', 'warning'); - - // 如果已经有定时器,先清除 - if (intervalId) { - clearInterval(intervalId); - } - - // 设置新的定时器 - intervalId = setInterval(async () => { - try { - await loadDashboardData(); - } catch (error) { - console.error('定时刷新失败:', error); - } - }, 5000); // 每5秒更新一次 -} - -// 清理资源 -function cleanupResources() { - // 清除WebSocket连接 - if (dashboardWsConnection) { - dashboardWsConnection.close(); - dashboardWsConnection = null; - } - - // 清除重连计时器 - if (dashboardWsReconnectTimer) { - clearTimeout(dashboardWsReconnectTimer); - dashboardWsReconnectTimer = null; - } - - // 清除定时刷新 - if (intervalId) { - clearInterval(intervalId); - intervalId = null; - } -} - -// 加载仪表盘数据 -async function loadDashboardData() { - console.log('开始加载仪表盘数据'); - try { - // 获取基本统计数据 - const stats = await api.getStats(); - console.log('统计数据:', stats); - - // 获取查询类型统计数据 - let queryTypeStats = null; - try { - queryTypeStats = await api.getQueryTypeStats(); - console.log('查询类型统计数据:', queryTypeStats); - } catch (error) { - console.warn('获取查询类型统计失败:', error); - // 如果API调用失败,尝试从stats中提取查询类型数据 - if (stats && stats.dns && stats.dns.QueryTypes) { - queryTypeStats = Object.entries(stats.dns.QueryTypes).map(([type, count]) => ({ - type, - count - })); - console.log('从stats中提取的查询类型统计:', queryTypeStats); - } - } - - // 尝试获取TOP被屏蔽域名,如果失败则提供模拟数据 - let topBlockedDomains = []; - try { - topBlockedDomains = await api.getTopBlockedDomains(); - console.log('TOP被屏蔽域名:', topBlockedDomains); - - // 确保返回的数据是数组 - if (!Array.isArray(topBlockedDomains)) { - console.warn('TOP被屏蔽域名不是预期的数组格式,使用模拟数据'); - topBlockedDomains = []; - } - } catch (error) { - console.warn('获取TOP被屏蔽域名失败:', error); - // 提供模拟数据 - topBlockedDomains = [ - { domain: 'example-blocked.com', count: 15, lastSeen: new Date().toISOString() }, - { domain: 'ads.example.org', count: 12, lastSeen: new Date().toISOString() }, - { domain: 'tracking.example.net', count: 8, lastSeen: new Date().toISOString() } - ]; - } - - // 尝试获取最近屏蔽域名,如果失败则提供模拟数据 - let recentBlockedDomains = []; - try { - recentBlockedDomains = await api.getRecentBlockedDomains(); - console.log('最近屏蔽域名:', recentBlockedDomains); - - // 确保返回的数据是数组 - if (!Array.isArray(recentBlockedDomains)) { - console.warn('最近屏蔽域名不是预期的数组格式,使用模拟数据'); - recentBlockedDomains = []; - } - } catch (error) { - console.warn('获取最近屏蔽域名失败:', error); - // 提供模拟数据 - recentBlockedDomains = [ - { domain: '---.---.---', ip: '---.---.---.---', timestamp: new Date().toISOString() }, - { domain: '---.---.---', ip: '---.---.---.---', timestamp: new Date().toISOString() } - ]; - } - - - - function showError(elementId) { - const loadingElement = document.getElementById(elementId + '-loading'); - const errorElement = document.getElementById(elementId + '-error'); - if (loadingElement) loadingElement.classList.add('hidden'); - if (errorElement) errorElement.classList.remove('hidden'); - } - - // 尝试获取TOP客户端,优先使用真实数据,失败时使用模拟数据 - let topClients = []; - try { - const clientsData = await api.getTopClients(); - console.log('TOP客户端:', clientsData); - - // 检查数据是否有效 - if (clientsData && !clientsData.error && Array.isArray(clientsData) && clientsData.length > 0) { - // 使用真实数据 - topClients = clientsData; - } else if (clientsData && clientsData.error) { - // API返回错误 - console.warn('获取TOP客户端失败:', clientsData.error); - // 使用模拟数据 - topClients = [ - { ip: '192.168.1.100', count: 120 }, - { ip: '192.168.1.101', count: 95 }, - { ip: '192.168.1.102', count: 80 }, - { ip: '192.168.1.103', count: 65 }, - { ip: '192.168.1.104', count: 50 } - ]; - showError('top-clients'); - } else { - // 数据为空或格式不正确 - console.warn('TOP客户端数据为空或格式不正确,使用模拟数据'); - // 使用模拟数据 - topClients = [ - { ip: '192.168.1.100', count: 120 }, - { ip: '192.168.1.101', count: 95 }, - { ip: '192.168.1.102', count: 80 }, - { ip: '192.168.1.103', count: 65 }, - { ip: '192.168.1.104', count: 50 } - ]; - showError('top-clients'); - } - } catch (error) { - console.warn('获取TOP客户端失败:', error); - // 使用模拟数据 - topClients = [ - { ip: '192.168.1.100', count: 120 }, - { ip: '192.168.1.101', count: 95 }, - { ip: '192.168.1.102', count: 80 }, - { ip: '192.168.1.103', count: 65 }, - { ip: '192.168.1.104', count: 50 } - ]; - showError('top-clients'); - } - - // 尝试获取TOP域名,优先使用真实数据,失败时使用模拟数据 - let topDomains = []; - try { - const domainsData = await api.getTopDomains(); - console.log('TOP域名:', domainsData); - - // 检查数据是否有效 - if (domainsData && !domainsData.error && Array.isArray(domainsData) && domainsData.length > 0) { - // 使用真实数据 - topDomains = domainsData; - } else if (domainsData && domainsData.error) { - // API返回错误 - console.warn('获取TOP域名失败:', domainsData.error); - // 使用模拟数据 - topDomains = [ - { domain: 'example.com', count: 50 }, - { domain: 'google.com', count: 45 }, - { domain: 'facebook.com', count: 40 }, - { domain: 'twitter.com', count: 35 }, - { domain: 'youtube.com', count: 30 } - ]; - showError('top-domains'); - } else { - // 数据为空或格式不正确 - console.warn('TOP域名数据为空或格式不正确,使用模拟数据'); - // 使用模拟数据 - topDomains = [ - { domain: 'example.com', count: 50 }, - { domain: 'google.com', count: 45 }, - { domain: 'facebook.com', count: 40 }, - { domain: 'twitter.com', count: 35 }, - { domain: 'youtube.com', count: 30 } - ]; - showError('top-domains'); - } - } catch (error) { - console.warn('获取TOP域名失败:', error); - // 使用模拟数据 - topDomains = [ - { domain: 'example.com', count: 50 }, - { domain: 'google.com', count: 45 }, - { domain: 'facebook.com', count: 40 }, - { domain: 'twitter.com', count: 35 }, - { domain: 'youtube.com', count: 30 } - ]; - showError('top-domains'); - } - - // 更新统计卡片 - updateStatsCards(stats); - - // 更新图表数据,传入查询类型统计 - updateCharts(stats, queryTypeStats); - - // 更新表格数据 - updateTopBlockedTable(topBlockedDomains); - updateRecentBlockedTable(recentBlockedDomains); - updateTopClientsTable(topClients); - updateTopDomainsTable(topDomains); - - // 尝试从stats中获取总查询数等信息 - if (stats.dns) { - totalQueries = stats.dns.Allowed + stats.dns.Blocked + (stats.dns.Errors || 0); - blockedQueries = stats.dns.Blocked; - errorQueries = stats.dns.Errors || 0; - allowedQueries = stats.dns.Allowed; - } else { - totalQueries = stats.totalQueries || 0; - blockedQueries = stats.blockedQueries || 0; - errorQueries = stats.errorQueries || 0; - allowedQueries = stats.allowedQueries || 0; - } - - // 全局历史数据对象,用于存储趋势计算所需的上一次值 - window.dashboardHistoryData = window.dashboardHistoryData || {}; - - // 更新新卡片数据 - 使用API返回的真实数据 - if (document.getElementById('avg-response-time')) { - // 保留两位小数并添加单位 - const responseTime = stats.avgResponseTime ? stats.avgResponseTime.toFixed(2) + 'ms' : '---'; - - // 计算响应时间趋势 - let responsePercent = '---'; - let trendClass = 'text-gray-400'; - let trendIcon = '---'; - - if (stats.avgResponseTime !== undefined && stats.avgResponseTime !== null) { - // 存储当前值用于下次计算趋势 - const prevResponseTime = window.dashboardHistoryData.prevResponseTime || stats.avgResponseTime; - window.dashboardHistoryData.prevResponseTime = stats.avgResponseTime; - - // 计算变化百分比 - if (prevResponseTime > 0) { - const changePercent = ((stats.avgResponseTime - prevResponseTime) / prevResponseTime) * 100; - responsePercent = Math.abs(changePercent).toFixed(1) + '%'; - - // 设置趋势图标和颜色(响应时间增加是负面的,减少是正面的) - if (changePercent > 0) { - trendIcon = '↓'; - trendClass = 'text-danger'; - } else if (changePercent < 0) { - trendIcon = '↑'; - trendClass = 'text-success'; - } else { - trendIcon = '•'; - trendClass = 'text-gray-500'; - } - } - } - - document.getElementById('avg-response-time').textContent = responseTime; - const responseTimePercentElem = document.getElementById('response-time-percent'); - if (responseTimePercentElem) { - responseTimePercentElem.textContent = trendIcon + ' ' + responsePercent; - responseTimePercentElem.className = `text-sm flex items-center ${trendClass}`; - } - } - - if (document.getElementById('top-query-type')) { - // 直接使用API返回的查询类型 - const queryType = stats.topQueryType || '---'; - - // 设置默认趋势显示 - const queryPercentElem = document.getElementById('query-type-percentage'); - if (queryPercentElem) { - queryPercentElem.textContent = '• ---'; - queryPercentElem.className = 'text-sm flex items-center text-gray-500'; - } - - document.getElementById('top-query-type').textContent = queryType; - } - - if (document.getElementById('active-ips')) { - // 直接使用API返回的活跃IP数 - const activeIPs = stats.activeIPs !== undefined ? formatNumber(stats.activeIPs) : '---'; - - // 计算活跃IP趋势 - let ipsPercent = '---'; - let trendClass = 'text-gray-400'; - let trendIcon = '---'; - - if (stats.activeIPs !== undefined && stats.activeIPs !== null) { - // 存储当前值用于下次计算趋势 - const prevActiveIPs = window.dashboardHistoryData.prevActiveIPs || stats.activeIPs; - window.dashboardHistoryData.prevActiveIPs = stats.activeIPs; - - // 计算变化百分比 - if (prevActiveIPs > 0) { - const changePercent = ((stats.activeIPs - prevActiveIPs) / prevActiveIPs) * 100; - ipsPercent = Math.abs(changePercent).toFixed(1) + '%'; - - // 设置趋势图标和颜色 - if (changePercent > 0) { - trendIcon = '↑'; - trendClass = 'text-success'; - } else if (changePercent < 0) { - trendIcon = '↓'; - trendClass = 'text-danger'; - } else { - trendIcon = '•'; - trendClass = 'text-gray-500'; - } - } - } - - document.getElementById('active-ips').textContent = activeIPs; - const activeIpsPercentElem = document.getElementById('active-ips-percent'); - if (activeIpsPercentElem) { - activeIpsPercentElem.textContent = trendIcon + ' ' + ipsPercent; - activeIpsPercentElem.className = `text-sm flex items-center ${trendClass}`; - } - } - - // 更新图表 - updateCharts({totalQueries, blockedQueries, allowedQueries, errorQueries}); - - // 确保响应时间图表使用API实时数据 - if (document.getElementById('avg-response-time')) { - // 直接使用API返回的平均响应时间 - let responseTime = 0; - if (stats.dns && stats.dns.AvgResponseTime) { - responseTime = stats.dns.AvgResponseTime; - } else if (stats.avgResponseTime !== undefined) { - responseTime = stats.avgResponseTime; - } else if (stats.responseTime) { - responseTime = stats.responseTime; - } - - if (responseTime > 0 && statCardCharts['response-time-chart']) { - // 限制小数位数为两位并更新图表 - updateChartData('response-time-chart', parseFloat(responseTime).toFixed(2)); - } - } - - // 更新运行状态 - updateUptime(); - - // 确保TOP域名数据被正确加载 - updateTopData(); - } catch (error) { - console.error('加载仪表盘数据失败:', error); - // 静默失败,不显示通知以免打扰用户 - } -} - -// 更新统计卡片 -function updateStatsCards(stats) { - console.log('更新统计卡片,收到数据:', stats); - - // 适配不同的数据结构 - let totalQueries = 0, blockedQueries = 0, allowedQueries = 0, errorQueries = 0; - let topQueryType = 'A', queryTypePercentage = 0; - let activeIPs = 0, activeIPsPercentage = 0; - - // 检查数据结构,兼容可能的不同格式 - if (stats) { - // 优先使用顶层字段 - totalQueries = stats.totalQueries || 0; - blockedQueries = stats.blockedQueries || 0; - allowedQueries = stats.allowedQueries || 0; - errorQueries = stats.errorQueries || 0; - topQueryType = stats.topQueryType || 'A'; - queryTypePercentage = stats.queryTypePercentage || 0; - activeIPs = stats.activeIPs || 0; - activeIPsPercentage = stats.activeIPsPercentage || 0; - - - // 如果dns对象存在,优先使用其中的数据 - if (stats.dns) { - totalQueries = stats.dns.Queries || totalQueries; - blockedQueries = stats.dns.Blocked || blockedQueries; - allowedQueries = stats.dns.Allowed || allowedQueries; - errorQueries = stats.dns.Errors || errorQueries; - - // 计算最常用查询类型的百分比 - if (stats.dns.QueryTypes && stats.dns.Queries > 0) { - const topTypeCount = stats.dns.QueryTypes[topQueryType] || 0; - queryTypePercentage = (topTypeCount / stats.dns.Queries) * 100; - } - - // 计算活跃IP百分比(基于已有的活跃IP数) - if (activeIPs > 0 && stats.dns.SourceIPs) { - activeIPsPercentage = activeIPs / Object.keys(stats.dns.SourceIPs).length * 100; - } - } - } else if (Array.isArray(stats) && stats.length > 0) { - // 可能的数据结构3: 数组形式 - totalQueries = stats[0].total || 0; - blockedQueries = stats[0].blocked || 0; - allowedQueries = stats[0].allowed || 0; - errorQueries = stats[0].error || 0; - topQueryType = stats[0].topQueryType || 'A'; - queryTypePercentage = stats[0].queryTypePercentage || 0; - activeIPs = stats[0].activeIPs || 0; - activeIPsPercentage = stats[0].activeIPsPercentage || 0; - } - - // 存储正在进行的动画状态,避免动画重叠 - const animationInProgress = {}; - - // 为数字元素添加翻页滚动特效 - function animateValue(elementId, newValue) { - const element = document.getElementById(elementId); - if (!element) return; - - // 如果该元素正在进行动画,取消当前动画并立即更新值 - if (animationInProgress[elementId]) { - // 清除之前可能设置的定时器 - clearTimeout(animationInProgress[elementId].timeout1); - clearTimeout(animationInProgress[elementId].timeout2); - clearTimeout(animationInProgress[elementId].timeout3); - - // 立即设置新值,避免显示错乱 - const formattedNewValue = formatNumber(newValue); - element.innerHTML = formattedNewValue; - return; - } - - const oldValue = parseInt(element.textContent.replace(/,/g, '')) || 0; - const formattedNewValue = formatNumber(newValue); - - // 如果值没有变化,不执行动画 - if (oldValue === newValue && element.textContent === formattedNewValue) { - return; - } - - // 先移除可能存在的光晕效果类 - element.classList.remove('number-glow', 'number-glow-blue', 'number-glow-red', 'number-glow-green', 'number-glow-yellow'); - element.classList.remove('number-glow-dark-blue', 'number-glow-dark-red', 'number-glow-dark-green', 'number-glow-dark-yellow'); - - // 保存原始样式 - const originalStyle = element.getAttribute('style') || ''; - - try { - // 复制原始元素的样式到新元素,确保大小完全一致 - const computedStyle = getComputedStyle(element); - - // 配置翻页容器样式,确保与原始元素大小完全一致 - const containerStyle = - 'position: relative; ' + - 'display: ' + computedStyle.display + '; ' + - 'overflow: hidden; ' + - 'height: ' + element.offsetHeight + 'px; ' + - 'width: ' + element.offsetWidth + 'px; ' + - 'margin: ' + computedStyle.margin + '; ' + - 'padding: ' + computedStyle.padding + '; ' + - 'box-sizing: ' + computedStyle.boxSizing + '; ' + - 'line-height: ' + computedStyle.lineHeight + ';'; - - // 创建翻页容器 - const flipContainer = document.createElement('div'); - flipContainer.style.cssText = containerStyle; - flipContainer.className = 'number-flip-container'; - - // 创建旧值元素 - const oldValueElement = document.createElement('div'); - oldValueElement.textContent = element.textContent; - oldValueElement.style.cssText = - 'position: absolute; ' + - 'top: 0; ' + - 'left: 0; ' + - 'width: 100%; ' + - 'height: 100%; ' + - 'display: flex; ' + - 'align-items: center; ' + - 'justify-content: center; ' + - 'transition: transform 400ms ease-in-out; ' + - 'transform-origin: center;'; - - // 创建新值元素 - const newValueElement = document.createElement('div'); - newValueElement.textContent = formattedNewValue; - newValueElement.style.cssText = - 'position: absolute; ' + - 'top: 0; ' + - 'left: 0; ' + - 'width: 100%; ' + - 'height: 100%; ' + - 'display: flex; ' + - 'align-items: center; ' + - 'justify-content: center; ' + - 'transition: transform 400ms ease-in-out; ' + - 'transform-origin: center; ' + - 'transform: translateY(100%);'; - [oldValueElement, newValueElement].forEach(el => { - el.style.fontSize = computedStyle.fontSize; - el.style.fontWeight = computedStyle.fontWeight; - el.style.color = computedStyle.color; - el.style.fontFamily = computedStyle.fontFamily; - el.style.textAlign = computedStyle.textAlign; - el.style.lineHeight = computedStyle.lineHeight; - el.style.width = '100%'; - el.style.height = '100%'; - el.style.margin = '0'; - el.style.padding = '0'; - el.style.boxSizing = 'border-box'; - el.style.whiteSpace = computedStyle.whiteSpace; - el.style.overflow = 'hidden'; - el.style.textOverflow = 'ellipsis'; - // 确保垂直对齐正确 - el.style.verticalAlign = 'middle'; - }); - - // 替换原始元素的内容 - element.textContent = ''; - flipContainer.appendChild(oldValueElement); - flipContainer.appendChild(newValueElement); - element.appendChild(flipContainer); - - // 标记该元素正在进行动画 - animationInProgress[elementId] = {}; - - // 启动翻页动画 - animationInProgress[elementId].timeout1 = setTimeout(() => { - if (oldValueElement && newValueElement) { - oldValueElement.style.transform = 'translateY(-100%)'; - newValueElement.style.transform = 'translateY(0)'; - } - }, 50); - - // 动画结束后,恢复原始元素 - animationInProgress[elementId].timeout2 = setTimeout(() => { - try { - // 清理并设置最终值 - element.innerHTML = formattedNewValue; - if (originalStyle) { - element.setAttribute('style', originalStyle); - } else { - element.removeAttribute('style'); - } - - // 添加当前卡片颜色的深色光晕效果 - const card = element.closest('.stat-card, .bg-blue-50, .bg-red-50, .bg-green-50, .bg-yellow-50'); - let glowColorClass = ''; - - if (card) { - if (card.classList.contains('bg-blue-50') || card.id.includes('total') || card.id.includes('response')) { - glowColorClass = 'number-glow-dark-blue'; - } else if (card.classList.contains('bg-red-50') || card.id.includes('blocked')) { - glowColorClass = 'number-glow-dark-red'; - } else if (card.classList.contains('bg-green-50') || card.id.includes('allowed') || card.id.includes('active')) { - glowColorClass = 'number-glow-dark-green'; - } else if (card.classList.contains('bg-yellow-50') || card.id.includes('error') || card.id.includes('cpu')) { - glowColorClass = 'number-glow-dark-yellow'; - } - } - - if (glowColorClass) { - element.classList.add(glowColorClass); - - // 2秒后移除光晕效果 - animationInProgress[elementId].timeout3 = setTimeout(() => { - element.classList.remove('number-glow-dark-blue', 'number-glow-dark-red', 'number-glow-dark-green', 'number-glow-dark-yellow'); - }, 2000); - } - } catch (e) { - console.error('更新元素失败:', e); - } finally { - // 清除动画状态标记 - delete animationInProgress[elementId]; - } - }, 450); - } catch (e) { - console.error('创建动画失败:', e); - // 出错时直接设置值 - element.innerHTML = formattedNewValue; - if (originalStyle) { - element.setAttribute('style', originalStyle); - } else { - element.removeAttribute('style'); - } - // 清除动画状态标记 - delete animationInProgress[elementId]; - } - } - - // 更新百分比元素的函数 - function updatePercentage(elementId, value) { - const element = document.getElementById(elementId); - if (!element) return; - - // 检查是否有正在进行的动画 - if (animationInProgress[elementId + '_percent']) { - clearTimeout(animationInProgress[elementId + '_percent']); - } - - try { - element.style.opacity = '0'; - element.style.transition = 'opacity 200ms ease-out'; - - // 保存定时器ID,便于后续可能的取消 - animationInProgress[elementId + '_percent'] = setTimeout(() => { - try { - element.textContent = value; - element.style.opacity = '1'; - } catch (e) { - console.error('更新百分比元素失败:', e); - } finally { - // 清除动画状态标记 - delete animationInProgress[elementId + '_percent']; - } - }, 200); - } catch (e) { - console.error('设置百分比动画失败:', e); - // 出错时直接设置值 - try { - element.textContent = value; - element.style.opacity = '1'; - } catch (e2) { - console.error('直接更新百分比元素也失败:', e2); - } - } - } - - // 平滑更新数量显示 - animateValue('total-queries', totalQueries); - animateValue('blocked-queries', blockedQueries); - animateValue('allowed-queries', allowedQueries); - animateValue('error-queries', errorQueries); - animateValue('active-ips', activeIPs); - - // DNSSEC相关数据 - let dnssecEnabled = false, dnssecQueries = 0, dnssecSuccess = 0, dnssecFailed = 0, dnssecUsage = 0; - - // 检查DNSSEC数据 - if (stats) { - // 优先使用顶层字段 - dnssecEnabled = stats.dnssecEnabled || false; - dnssecQueries = stats.dnssecQueries || 0; - dnssecSuccess = stats.dnssecSuccess || 0; - dnssecFailed = stats.dnssecFailed || 0; - dnssecUsage = stats.dnssecUsage || 0; - - // 如果dns对象存在,优先使用其中的数据 - if (stats.dns) { - dnssecEnabled = stats.dns.DNSSECEnabled || dnssecEnabled; - dnssecQueries = stats.dns.DNSSECQueries || dnssecQueries; - dnssecSuccess = stats.dns.DNSSECSuccess || dnssecSuccess; - dnssecFailed = stats.dns.DNSSECFailed || dnssecFailed; - } - - // 如果没有直接提供使用率,计算使用率 - if (dnssecUsage === 0 && totalQueries > 0) { - dnssecUsage = (dnssecQueries / totalQueries) * 100; - } - } - - // 更新DNSSEC统计卡片 - const dnssecUsageElement = document.getElementById('dnssec-usage'); - const dnssecStatusElement = document.getElementById('dnssec-status'); - const dnssecSuccessElement = document.getElementById('dnssec-success'); - const dnssecFailedElement = document.getElementById('dnssec-failed'); - const dnssecQueriesElement = document.getElementById('dnssec-queries'); - - if (dnssecUsageElement) { - dnssecUsageElement.textContent = `${Math.round(dnssecUsage)}%`; - } - - if (dnssecStatusElement) { - dnssecStatusElement.textContent = dnssecEnabled ? '已启用' : '已禁用'; - dnssecStatusElement.className = `text-sm flex items-center ${dnssecEnabled ? 'text-success' : 'text-danger'}`; - } - - if (dnssecSuccessElement) { - dnssecSuccessElement.textContent = formatNumber(dnssecSuccess); - } - - if (dnssecFailedElement) { - dnssecFailedElement.textContent = formatNumber(dnssecFailed); - } - - if (dnssecQueriesElement) { - dnssecQueriesElement.textContent = formatNumber(dnssecQueries); - } - - // 直接更新文本和百分比,移除动画效果 - const topQueryTypeElement = document.getElementById('top-query-type'); - const queryTypePercentageElement = document.getElementById('query-type-percentage'); - const activeIpsPercentElement = document.getElementById('active-ips-percent'); - - if (topQueryTypeElement) topQueryTypeElement.textContent = topQueryType; - if (queryTypePercentageElement) queryTypePercentageElement.textContent = `${Math.round(queryTypePercentage)}%`; - if (activeIpsPercentElement) activeIpsPercentElement.textContent = `${Math.round(activeIPsPercentage)}%`; - - // 计算并平滑更新百分比 - if (totalQueries > 0) { - updatePercentage('blocked-percent', `${Math.round((blockedQueries / totalQueries) * 100)}%`); - updatePercentage('allowed-percent', `${Math.round((allowedQueries / totalQueries) * 100)}%`); - updatePercentage('error-percent', `${Math.round((errorQueries / totalQueries) * 100)}%`); - updatePercentage('queries-percent', '100%'); - } else { - updatePercentage('queries-percent', '---'); - updatePercentage('blocked-percent', '---'); - updatePercentage('allowed-percent', '---'); - updatePercentage('error-percent', '---'); - } - - -} - -// 更新Top屏蔽域名表格 -function updateTopBlockedTable(domains) { - console.log('更新Top屏蔽域名表格,收到数据:', domains); - const tableBody = document.getElementById('top-blocked-table'); - - let tableData = []; - - // 适配不同的数据结构 - if (Array.isArray(domains)) { - tableData = domains.map(item => ({ - name: item.name || item.domain || item[0] || '未知', - count: item.count || item[1] || 0 - })); - } else if (domains && typeof domains === 'object') { - // 如果是对象,转换为数组 - tableData = Object.entries(domains).map(([domain, count]) => ({ - name: domain, - count: count || 0 - })); - } - - // 如果没有有效数据,提供示例数据 - if (tableData.length === 0) { - tableData = [ - { name: '---.---.---', count: '---' }, - { name: '---.---.---', count: '---' }, - { name: '---.---.---', count: '---' } - ]; - console.log('使用示例数据填充Top屏蔽域名表格'); - } - - let html = ''; - for (let i = 0; i < tableData.length && i < 5; i++) { - const domain = tableData[i]; - html += ` -
-
-
- ${i + 1} - ${domain.name} -
-
- ${formatNumber(domain.count)} -
- `; - } - - tableBody.innerHTML = html; -} - -// 更新最近屏蔽域名表格 -function updateRecentBlockedTable(domains) { - console.log('更新最近屏蔽域名表格,收到数据:', domains); - const tableBody = document.getElementById('recent-blocked-table'); - - // 确保tableBody存在,因为最近屏蔽域名卡片可能已被移除 - if (!tableBody) { - console.log('未找到recent-blocked-table元素,跳过更新'); - return; - } - - let tableData = []; - - // 适配不同的数据结构 - if (Array.isArray(domains)) { - tableData = domains.map(item => ({ - name: item.name || item.domain || item[0] || '未知', - timestamp: item.timestamp || item.time || Date.now(), - type: item.type || '广告' - })); - } - - // 如果没有有效数据,提供示例数据 - if (tableData.length === 0) { - const now = Date.now(); - tableData = [ - { name: '---.---.---', timestamp: now - 5 * 60 * 1000, type: '广告' }, - { name: '---.---.---', timestamp: now - 15 * 60 * 1000, type: '恶意' }, - { name: '---.---.---', timestamp: now - 30 * 60 * 1000, type: '广告' }, - { name: '---.---.---', timestamp: now - 45 * 60 * 1000, type: '追踪' }, - { name: '---.---.---', timestamp: now - 60 * 60 * 1000, type: '恶意' } - ]; - console.log('使用示例数据填充最近屏蔽域名表格'); - } - - let html = ''; - for (let i = 0; i < tableData.length && i < 5; i++) { - const domain = tableData[i]; - const time = formatTime(domain.timestamp); - html += ` -
-
-
${domain.name}
-
${time}
-
- ${domain.type} -
- `; - } - - tableBody.innerHTML = html; -} - -// 更新TOP客户端表格 -function updateTopClientsTable(clients) { - console.log('更新TOP客户端表格,收到数据:', clients); - const tableBody = document.getElementById('top-clients-table'); - - // 确保tableBody存在 - if (!tableBody) { - console.error('未找到top-clients-table元素'); - return; - } - - let tableData = []; - - // 适配不同的数据结构 - if (Array.isArray(clients)) { - tableData = clients.map(item => ({ - ip: item.ip || item[0] || '未知', - count: item.count || item[1] || 0 - })); - } else if (clients && typeof clients === 'object') { - // 如果是对象,转换为数组 - tableData = Object.entries(clients).map(([ip, count]) => ({ - ip, - count: count || 0 - })); - } - - // 如果没有有效数据,提供示例数据 - if (tableData.length === 0) { - tableData = [ - { ip: '---.---.---', count: '---' }, - { ip: '---.---.---', count: '---' }, - { ip: '---.---.---', count: '---' }, - { ip: '---.---.---', count: '---' }, - { ip: '---.---.---', count: '---' } - ]; - console.log('使用示例数据填充TOP客户端表格'); - } - - // 只显示前5个客户端 - tableData = tableData.slice(0, 5); - - let html = ''; - for (let i = 0; i < tableData.length; i++) { - const client = tableData[i]; - html += ` -
-
-
- ${i + 1} - ${client.ip} -
-
- ${formatNumber(client.count)} -
- `; - } - - tableBody.innerHTML = html; -} - -// 更新请求域名排行表格 -function updateTopDomainsTable(domains) { - console.log('更新请求域名排行表格,收到数据:', domains); - const tableBody = document.getElementById('top-domains-table'); - - // 确保tableBody存在 - if (!tableBody) { - console.error('未找到top-domains-table元素'); - return; - } - - let tableData = []; - - // 适配不同的数据结构 - if (Array.isArray(domains)) { - tableData = domains.map(item => ({ - name: item.domain || item.name || item[0] || '未知', - count: item.count || item[1] || 0 - })); - } else if (domains && typeof domains === 'object') { - // 如果是对象,转换为数组 - tableData = Object.entries(domains).map(([domain, count]) => ({ - name: domain, - count: count || 0 - })); - } - - // 如果没有有效数据,提供示例数据 - if (tableData.length === 0) { - tableData = [ - { name: 'example.com', count: 50 }, - { name: 'google.com', count: 45 }, - { name: 'facebook.com', count: 40 }, - { name: 'twitter.com', count: 35 }, - { name: 'youtube.com', count: 30 } - ]; - console.log('使用示例数据填充请求域名排行表格'); - } - - // 只显示前5个域名 - tableData = tableData.slice(0, 5); - - let html = ''; - for (let i = 0; i < tableData.length; i++) { - const domain = tableData[i]; - html += ` -
-
-
- ${i + 1} - ${domain.name}${domain.dnssec ? ' ' : ''} -
-
- ${formatNumber(domain.count)} -
- `; - } - - tableBody.innerHTML = html; -} - -// 当前选中的时间范围 -let currentTimeRange = '24h'; // 默认为24小时 -let isMixedView = true; // 是否为混合视图 - 默认显示混合视图 -let lastSelectedIndex = 0; // 最后选中的按钮索引 - -// 详细图表专用变量 -let detailedCurrentTimeRange = '24h'; // 详细图表当前时间范围 -let detailedIsMixedView = false; // 详细图表是否为混合视图 - -// 初始化时间范围切换 -function initTimeRangeToggle() { - console.log('初始化时间范围切换'); - // 查找所有可能的时间范围按钮类名 - const timeRangeButtons = document.querySelectorAll('.time-range-btn, .time-range-button, .timerange-btn, button[data-range]'); - console.log('找到时间范围按钮数量:', timeRangeButtons.length); - - if (timeRangeButtons.length === 0) { - console.warn('未找到时间范围按钮,请检查HTML中的类名'); - return; - } - - // 定义三个按钮的不同样式配置,增加activeHover属性 - const buttonStyles = [ - { // 24小时按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-blue-100'], - active: ['bg-blue-500', 'text-white'], - activeHover: ['hover:bg-blue-400'] // 选中时的浅色悬停 - }, - { // 7天按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-green-100'], - active: ['bg-green-500', 'text-white'], - activeHover: ['hover:bg-green-400'] // 选中时的浅色悬停 - }, - { // 30天按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-purple-100'], - active: ['bg-purple-500', 'text-white'], - activeHover: ['hover:bg-purple-400'] // 选中时的浅色悬停 - }, - { // 混合视图按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-gray-200'], - active: ['bg-gray-500', 'text-white'], - activeHover: ['hover:bg-gray-400'] // 选中时的浅色悬停 - } - ]; - - // 为所有按钮设置初始样式和事件 - timeRangeButtons.forEach((button, index) => { - // 使用相应的样式配置 - const styleConfig = buttonStyles[index % buttonStyles.length]; - - // 移除所有按钮的初始样式 - button.classList.remove('active', 'bg-blue-500', 'text-white', 'bg-gray-200', 'text-gray-700', - 'bg-green-500', 'bg-purple-500', 'bg-gray-100'); - - // 设置非选中状态样式 - button.classList.add('transition-colors', 'duration-200'); - button.classList.add(...styleConfig.normal); - button.classList.add(...styleConfig.hover); - - // 移除鼠标悬停提示 - - console.log('为按钮设置初始样式:', button.textContent.trim(), '索引:', index, '类名:', Array.from(button.classList).join(', ')); - - button.addEventListener('click', function(event) { - event.preventDefault(); - event.stopPropagation(); - - console.log('点击按钮:', button.textContent.trim(), '索引:', index); - - // 检查是否是再次点击已选中的按钮 - const isActive = button.classList.contains('active'); - - // 重置所有按钮为非选中状态 - timeRangeButtons.forEach((btn, btnIndex) => { - const btnStyle = buttonStyles[btnIndex % buttonStyles.length]; - - // 移除所有可能的激活状态类 - btn.classList.remove('active', 'bg-blue-500', 'text-white', 'bg-green-500', 'bg-purple-500', 'bg-gray-500'); - btn.classList.remove(...btnStyle.active); - btn.classList.remove(...btnStyle.activeHover); - - // 添加非选中状态类 - btn.classList.add(...btnStyle.normal); - btn.classList.add(...btnStyle.hover); - }); - - if (isActive && index < 3) { // 再次点击已选中的时间范围按钮 - // 切换到混合视图 - isMixedView = true; - currentTimeRange = 'mixed'; - console.log('切换到混合视图'); - - // 设置当前按钮为特殊混合视图状态(保持原按钮选中但添加混合视图标记) - button.classList.remove(...styleConfig.normal); - button.classList.remove(...styleConfig.hover); - button.classList.add('active', 'mixed-view-active'); - button.classList.add(...styleConfig.active); - button.classList.add(...styleConfig.activeHover); // 添加选中时的浅色悬停 - } else { - // 普通选中模式 - isMixedView = false; - lastSelectedIndex = index; - - // 设置当前按钮为激活状态 - button.classList.remove(...styleConfig.normal); - button.classList.remove(...styleConfig.hover); - button.classList.add('active'); - button.classList.add(...styleConfig.active); - button.classList.add(...styleConfig.activeHover); // 添加选中时的浅色悬停 - - // 获取并更新当前时间范围 - let rangeValue; - if (button.dataset.range) { - rangeValue = button.dataset.range; - } else { - const btnText = button.textContent.trim(); - if (btnText.includes('24')) { - rangeValue = '24h'; - } else if (btnText.includes('7')) { - rangeValue = '7d'; - } else if (btnText.includes('30')) { - rangeValue = '30d'; - } else { - rangeValue = btnText.replace(/[^0-9a-zA-Z]/g, ''); - } - } - currentTimeRange = rangeValue; - console.log('更新时间范围为:', currentTimeRange); - } - - // 重新加载数据 - loadDashboardData(); - // 更新DNS请求图表 - drawDNSRequestsChart(); - }); - - // 移除自定义鼠标悬停提示效果 - }); - - // 确保默认选中第一个按钮并显示混合内容 - if (timeRangeButtons.length > 0) { - const firstButton = timeRangeButtons[0]; - const firstStyle = buttonStyles[0]; - - // 先重置所有按钮 - timeRangeButtons.forEach((btn, index) => { - const btnStyle = buttonStyles[index % buttonStyles.length]; - btn.classList.remove('active', 'bg-blue-500', 'text-white', 'bg-green-500', 'bg-purple-500', 'bg-gray-500', 'mixed-view-active'); - btn.classList.remove(...btnStyle.active); - btn.classList.remove(...btnStyle.activeHover); - btn.classList.add(...btnStyle.normal); - btn.classList.add(...btnStyle.hover); - }); - - // 然后设置第一个按钮为激活状态,并标记为混合视图 - firstButton.classList.remove(...firstStyle.normal); - firstButton.classList.remove(...firstStyle.hover); - firstButton.classList.add('active', 'mixed-view-active'); - firstButton.classList.add(...firstStyle.active); - firstButton.classList.add(...firstStyle.activeHover); - console.log('默认选中第一个按钮并显示混合内容:', firstButton.textContent.trim()); - - // 设置默认显示混合内容 - isMixedView = true; - currentTimeRange = 'mixed'; - } -} - -// 注意:这个函数已被后面的实现覆盖,请使用后面的drawDetailedDNSRequestsChart函数 - -// 初始化图表 -function initCharts() { - // 初始化比例图表 - const ratioChartElement = document.getElementById('ratio-chart'); - if (!ratioChartElement) { - console.error('未找到比例图表元素'); - return; - } - const ratioCtx = ratioChartElement.getContext('2d'); - ratioChart = new Chart(ratioCtx, { - type: 'doughnut', - data: { - labels: ['正常解析', '被屏蔽', '错误'], - datasets: [{ - data: ['---', '---', '---'], - backgroundColor: ['#00B42A', '#F53F3F', '#FF7D00'], - borderWidth: 2, // 添加边框宽度,增强区块分隔 - borderColor: '#fff', // 白色边框,使各个扇区更清晰 - hoverOffset: 10, // 添加悬停偏移效果,增强交互体验 - hoverBorderWidth: 3 // 悬停时增加边框宽度 - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - // 添加全局动画配置,确保图表创建和更新时都平滑过渡 - animation: { - duration: 500, // 延长动画时间,使过渡更平滑 - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - position: 'bottom', - labels: { - boxWidth: 12, // 减小图例框的宽度 - font: { - size: 11 // 减小字体大小 - }, - padding: 10 // 减小内边距 - } - }, - tooltip: { - enabled: true, - backgroundColor: 'rgba(0, 0, 0, 0.8)', - padding: 10, - titleFont: { - size: 12 - }, - bodyFont: { - size: 11 - }, - callbacks: { - label: function(context) { - const label = context.label || ''; - const value = context.raw || 0; - const total = context.dataset.data.reduce((acc, val) => acc + (typeof val === 'number' ? val : 0), 0); - const percentage = total > 0 ? Math.round((value / total) * 100) : 0; - return `${label}: ${value} (${percentage}%)`; - } - } - } - }, - cutout: '65%', // 减小中心空白区域比例,增大扇形区域以更好显示线段指示 - // 添加线段指示相关配置 - elements: { - arc: { - // 确保圆弧绘制时有足够的精度 - borderAlign: 'center', - tension: 0.1 // 添加轻微的张力,使圆弧更平滑 - } - } - } - }); - - // 初始化解析类型统计饼图 - const queryTypeChartElement = document.getElementById('query-type-chart'); - if (queryTypeChartElement) { - const queryTypeCtx = queryTypeChartElement.getContext('2d'); - // 预定义的颜色数组,用于解析类型 - const queryTypeColors = ['#3498db', '#e74c3c', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#d35400', '#34495e']; - - queryTypeChart = new Chart(queryTypeCtx, { - type: 'doughnut', - data: { - labels: ['暂无数据'], - datasets: [{ - data: [1], - backgroundColor: [queryTypeColors[0]], - borderWidth: 2, // 添加边框宽度,增强区块分隔 - borderColor: '#fff', // 白色边框,使各个扇区更清晰 - hoverOffset: 10, // 添加悬停偏移效果,增强交互体验 - hoverBorderWidth: 3 // 悬停时增加边框宽度 - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - // 添加全局动画配置,确保图表创建和更新时都平滑过渡 - animation: { - duration: 300, - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - position: 'bottom', - labels: { - boxWidth: 12, // 减小图例框的宽度 - font: { - size: 11 // 减小字体大小 - }, - padding: 10 // 减小内边距 - } - }, - tooltip: { - enabled: true, - backgroundColor: 'rgba(0, 0, 0, 0.8)', - padding: 10, - titleFont: { - size: 12 - }, - bodyFont: { - size: 11 - }, - callbacks: { - label: function(context) { - const label = context.label || ''; - const value = context.raw || 0; - const total = context.dataset.data.reduce((acc, val) => acc + (typeof val === 'number' ? val : 0), 0); - const percentage = total > 0 ? Math.round((value / total) * 100) : 0; - return `${label}: ${value} (${percentage}%)`; - } - } - } - }, - cutout: '65%', // 减小中心空白区域比例,增大扇形区域以更好显示线段指示 - // 添加线段指示相关配置 - elements: { - arc: { - // 确保圆弧绘制时有足够的精度 - borderAlign: 'center', - tension: 0.1 // 添加轻微的张力,使圆弧更平滑 - } - } - } - }); - } else { - console.warn('未找到解析类型统计图表元素'); - } - - // 初始化DNS请求统计图表 - drawDNSRequestsChart(); - - // 初始化展开按钮功能 - initExpandButton(); -} - -// 初始化展开按钮事件 -function initExpandButton() { - const expandBtn = document.getElementById('expand-chart-btn'); - const chartModal = document.getElementById('chart-modal'); - const closeModalBtn = document.getElementById('close-modal-btn'); // 修复ID匹配 - - // 添加调试日志 - console.log('初始化展开按钮功能:', { expandBtn, chartModal, closeModalBtn }); - - if (expandBtn && chartModal && closeModalBtn) { - // 展开按钮点击事件 - expandBtn.addEventListener('click', () => { - console.log('展开按钮被点击'); - // 显示浮窗 - chartModal.classList.remove('hidden'); - - // 初始化或更新详细图表 - drawDetailedDNSRequestsChart(); - - // 初始化浮窗中的时间范围切换 - initDetailedTimeRangeToggle(); - - // 延迟更新图表大小,确保容器大小已计算 - setTimeout(() => { - if (detailedDnsRequestsChart) { - detailedDnsRequestsChart.resize(); - } - }, 100); - }); - - // 关闭按钮点击事件 - closeModalBtn.addEventListener('click', () => { - console.log('关闭按钮被点击'); - chartModal.classList.add('hidden'); - }); - - // 点击遮罩层关闭浮窗(使用chartModal作为遮罩层) - chartModal.addEventListener('click', (e) => { - // 检查点击目标是否是遮罩层本身(即最外层div) - if (e.target === chartModal) { - console.log('点击遮罩层关闭'); - chartModal.classList.add('hidden'); - } - }); - - // ESC键关闭浮窗 - document.addEventListener('keydown', (e) => { - if (e.key === 'Escape' && !chartModal.classList.contains('hidden')) { - console.log('ESC键关闭浮窗'); - chartModal.classList.add('hidden'); - } - }); - } else { - console.error('无法找到必要的DOM元素'); - } -} - -// 初始化详细图表的时间范围切换 -function initDetailedTimeRangeToggle() { - // 只选择图表模态框内的时间范围按钮,避免与主视图冲突 - const chartModal = document.getElementById('chart-modal'); - const detailedTimeRangeButtons = chartModal ? chartModal.querySelectorAll('.time-range-btn') : []; - - console.log('初始化详细图表时间范围切换,找到按钮数量:', detailedTimeRangeButtons.length); - - // 初始化详细图表的默认状态,与主图表保持一致 - detailedCurrentTimeRange = currentTimeRange; - detailedIsMixedView = isMixedView; - - // 定义按钮样式配置,与主视图保持一致 - const buttonStyles = [ - { // 24小时按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-blue-100'], - active: ['bg-blue-500', 'text-white'], - activeHover: ['hover:bg-blue-400'] - }, - { // 7天按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-green-100'], - active: ['bg-green-500', 'text-white'], - activeHover: ['hover:bg-green-400'] - }, - { // 30天按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-purple-100'], - active: ['bg-purple-500', 'text-white'], - activeHover: ['hover:bg-purple-400'] - }, - { // 混合视图按钮 - normal: ['bg-gray-100', 'text-gray-700'], - hover: ['hover:bg-gray-200'], - active: ['bg-gray-500', 'text-white'], - activeHover: ['hover:bg-gray-400'] - } - ]; - - // 设置初始按钮状态 - detailedTimeRangeButtons.forEach((button, index) => { - const styleConfig = buttonStyles[index % buttonStyles.length]; - - // 移除所有初始样式 - button.classList.remove('active', 'bg-blue-500', 'text-white', 'bg-gray-200', 'text-gray-700', - 'bg-green-500', 'bg-purple-500', 'bg-gray-100', 'mixed-view-active'); - - // 设置非选中状态样式 - button.classList.add('transition-colors', 'duration-200'); - button.classList.add(...styleConfig.normal); - button.classList.add(...styleConfig.hover); - - // 如果是第一个按钮且当前是混合视图,设置为混合视图激活状态 - if (index === 0 && detailedIsMixedView) { - button.classList.remove(...styleConfig.normal); - button.classList.remove(...styleConfig.hover); - button.classList.add('active', 'mixed-view-active'); - button.classList.add(...styleConfig.active); - button.classList.add(...styleConfig.activeHover); - } - }); - - detailedTimeRangeButtons.forEach((button, index) => { - button.addEventListener('click', () => { - const styleConfig = buttonStyles[index % buttonStyles.length]; - - // 检查是否是再次点击已选中的按钮 - const isActive = button.classList.contains('active'); - - // 重置所有按钮为非选中状态 - detailedTimeRangeButtons.forEach((btn, btnIndex) => { - const btnStyle = buttonStyles[btnIndex % buttonStyles.length]; - - // 移除所有可能的激活状态类 - btn.classList.remove('active', 'bg-blue-500', 'text-white', 'bg-green-500', 'bg-purple-500', 'bg-gray-500', 'mixed-view-active'); - btn.classList.remove(...btnStyle.active); - btn.classList.remove(...btnStyle.activeHover); - - // 添加非选中状态类 - btn.classList.add(...btnStyle.normal); - btn.classList.add(...btnStyle.hover); - }); - - if (isActive && index < 3) { // 再次点击已选中的时间范围按钮 - // 切换到混合视图 - detailedIsMixedView = true; - detailedCurrentTimeRange = 'mixed'; - console.log('详细图表切换到混合视图'); - - // 设置当前按钮为特殊混合视图状态 - button.classList.remove(...styleConfig.normal); - button.classList.remove(...styleConfig.hover); - button.classList.add('active', 'mixed-view-active'); - button.classList.add(...styleConfig.active); - button.classList.add(...styleConfig.activeHover); - } else { - // 普通选中模式 - detailedIsMixedView = false; - - // 设置当前按钮为激活状态 - button.classList.remove(...styleConfig.normal); - button.classList.remove(...styleConfig.hover); - button.classList.add('active'); - button.classList.add(...styleConfig.active); - button.classList.add(...styleConfig.activeHover); - - // 获取并更新当前时间范围 - let rangeValue; - if (button.dataset.range) { - rangeValue = button.dataset.range; - } else { - const btnText = button.textContent.trim(); - if (btnText.includes('24')) { - rangeValue = '24h'; - } else if (btnText.includes('7')) { - rangeValue = '7d'; - } else if (btnText.includes('30')) { - rangeValue = '30d'; - } else { - rangeValue = btnText.replace(/[^0-9a-zA-Z]/g, ''); - } - } - detailedCurrentTimeRange = rangeValue; - console.log('详细图表更新时间范围为:', detailedCurrentTimeRange); - } - - // 重新绘制详细图表 - drawDetailedDNSRequestsChart(); - }); - }); -} - -// 绘制详细的DNS请求趋势图表 -function drawDetailedDNSRequestsChart() { - console.log('绘制详细DNS请求趋势图表,时间范围:', detailedCurrentTimeRange, '混合视图:', detailedIsMixedView); - - const ctx = document.getElementById('detailed-dns-requests-chart'); - if (!ctx) { - console.error('未找到详细DNS请求图表元素'); - return; - } - - const chartContext = ctx.getContext('2d'); - - // 混合视图配置 - const datasetsConfig = [ - { label: '24小时', api: (api && api.getHourlyStats) || (() => Promise.resolve({ labels: [], data: [] })), color: '#3b82f6', fillColor: 'rgba(59, 130, 246, 0.1)' }, - { label: '7天', api: (api && api.getDailyStats) || (() => Promise.resolve({ labels: [], data: [] })), color: '#22c55e', fillColor: 'rgba(34, 197, 94, 0.1)' }, - { label: '30天', api: (api && api.getMonthlyStats) || (() => Promise.resolve({ labels: [], data: [] })), color: '#a855f7', fillColor: 'rgba(168, 85, 247, 0.1)' } - ]; - - // 检查是否为混合视图 - if (detailedIsMixedView || detailedCurrentTimeRange === 'mixed') { - console.log('渲染混合视图详细图表'); - - // 显示图例 - const showLegend = true; - - // 获取所有时间范围的数据 - Promise.all(datasetsConfig.map(config => - config.api().catch(error => { - console.error(`获取${config.label}数据失败:`, error); - // 返回空数据 - const count = config.label === '24小时' ? 24 : (config.label === '7天' ? 7 : 30); - return { - labels: Array(count).fill(''), - data: Array(count).fill(0) - }; - }) - )).then(results => { - // 创建数据集 - const datasets = results.map((data, index) => ({ - label: datasetsConfig[index].label, - data: data.data, - borderColor: datasetsConfig[index].color, - backgroundColor: datasetsConfig[index].fillColor, - tension: 0.4, - fill: false, - borderWidth: 2 - })); - - // 创建或更新图表 - if (detailedDnsRequestsChart) { - detailedDnsRequestsChart.data.labels = results[0].labels; - detailedDnsRequestsChart.data.datasets = datasets; - detailedDnsRequestsChart.options.plugins.legend.display = showLegend; - // 使用平滑过渡动画更新图表 - detailedDnsRequestsChart.update({ - duration: 800, - easing: 'easeInOutQuart' - }); - } else { - detailedDnsRequestsChart = new Chart(chartContext, { - type: 'line', - data: { - labels: results[0].labels, - datasets: datasets - }, - options: { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: 800, - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - display: showLegend, - position: 'top' - }, - tooltip: { - mode: 'index', - intersect: false - } - }, - scales: { - y: { - beginAtZero: true, - grid: { - color: 'rgba(0, 0, 0, 0.1)' - } - }, - x: { - grid: { - display: false - } - } - } - } - }); - } - }).catch(error => { - console.error('绘制混合视图详细图表失败:', error); - }); - } else { - // 普通视图 - // 根据详细视图时间范围选择API函数和对应的颜色 - let apiFunction; - let chartColor; - let chartFillColor; - - switch (detailedCurrentTimeRange) { - case '7d': - apiFunction = (api && api.getDailyStats) || (() => Promise.resolve({ labels: [], data: [] })); - chartColor = '#22c55e'; // 绿色,与混合视图中的7天数据颜色一致 - chartFillColor = 'rgba(34, 197, 94, 0.1)'; - break; - case '30d': - apiFunction = (api && api.getMonthlyStats) || (() => Promise.resolve({ labels: [], data: [] })); - chartColor = '#a855f7'; // 紫色,与混合视图中的30天数据颜色一致 - chartFillColor = 'rgba(168, 85, 247, 0.1)'; - break; - default: // 24h - apiFunction = (api && api.getHourlyStats) || (() => Promise.resolve({ labels: [], data: [] })); - chartColor = '#3b82f6'; // 蓝色,与混合视图中的24小时数据颜色一致 - chartFillColor = 'rgba(59, 130, 246, 0.1)'; - } - - // 获取统计数据 - apiFunction().then(data => { - // 创建或更新图表 - if (detailedDnsRequestsChart) { - detailedDnsRequestsChart.data.labels = data.labels; - detailedDnsRequestsChart.data.datasets = [{ - label: 'DNS请求数量', - data: data.data, - borderColor: chartColor, - backgroundColor: chartFillColor, - tension: 0.4, - fill: true - }]; - detailedDnsRequestsChart.options.plugins.legend.display = false; - // 使用平滑过渡动画更新图表 - detailedDnsRequestsChart.update({ - duration: 800, - easing: 'easeInOutQuart' - }); - } else { - detailedDnsRequestsChart = new Chart(chartContext, { - type: 'line', - data: { - labels: data.labels, - datasets: [{ - label: 'DNS请求数量', - data: data.data, - borderColor: chartColor, - backgroundColor: chartFillColor, - tension: 0.4, - fill: true - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: 800, - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - display: false - }, - title: { - display: true, - text: 'DNS请求趋势', - font: { - size: 14 - } - }, - tooltip: { - mode: 'index', - intersect: false - } - }, - scales: { - y: { - beginAtZero: true, - grid: { - color: 'rgba(0, 0, 0, 0.1)' - } - }, - x: { - grid: { - display: false - } - } - } - } - }); - } - }).catch(error => { - console.error('绘制详细DNS请求图表失败:', error); - // 错误处理:使用空数据 - const count = detailedCurrentTimeRange === '24h' ? 24 : (detailedCurrentTimeRange === '7d' ? 7 : 30); - const emptyData = { - labels: Array(count).fill(''), - data: Array(count).fill(0) - }; - - if (detailedDnsRequestsChart) { - detailedDnsRequestsChart.data.labels = emptyData.labels; - detailedDnsRequestsChart.data.datasets[0].data = emptyData.data; - detailedDnsRequestsChart.update(); - } - }); - } -} - -// 绘制DNS请求统计图表 -function drawDNSRequestsChart() { - const ctx = document.getElementById('dns-requests-chart'); - if (!ctx) { - console.error('未找到DNS请求图表元素'); - return; - } - - const chartContext = ctx.getContext('2d'); - - // 混合视图配置 - const datasetsConfig = [ - { label: '24小时', api: (api && api.getHourlyStats) || (() => Promise.resolve({ labels: [], data: [] })), color: '#3b82f6', fillColor: 'rgba(59, 130, 246, 0.1)' }, - { label: '7天', api: (api && api.getDailyStats) || (() => Promise.resolve({ labels: [], data: [] })), color: '#22c55e', fillColor: 'rgba(34, 197, 94, 0.1)' }, - { label: '30天', api: (api && api.getMonthlyStats) || (() => Promise.resolve({ labels: [], data: [] })), color: '#a855f7', fillColor: 'rgba(168, 85, 247, 0.1)' } - ]; - - // 检查是否为混合视图 - if (isMixedView || currentTimeRange === 'mixed') { - console.log('渲染混合视图图表'); - - // 显示图例 - const showLegend = true; - - // 获取所有时间范围的数据 - Promise.all(datasetsConfig.map(config => - config.api().catch(error => { - console.error(`获取${config.label}数据失败:`, error); - // 返回空数据而不是模拟数据 - const count = config.label === '24小时' ? 24 : (config.label === '7天' ? 7 : 30); - return { - labels: Array(count).fill(''), - data: Array(count).fill(0) - }; - }) - )).then(results => { - // 创建数据集 - const datasets = results.map((data, index) => ({ - label: datasetsConfig[index].label, - data: data.data, - borderColor: datasetsConfig[index].color, - backgroundColor: datasetsConfig[index].fillColor, - tension: 0.4, - fill: false, // 混合视图不填充 - borderWidth: 2 - })); - - // 创建或更新图表 - if (dnsRequestsChart) { - // 使用第一个数据集的标签,但确保每个数据集使用自己的数据 - dnsRequestsChart.data.labels = results[0].labels; - dnsRequestsChart.data.datasets = datasets; - dnsRequestsChart.options.plugins.legend.display = showLegend; - // 使用平滑过渡动画更新图表 - dnsRequestsChart.update({ - duration: 800, - easing: 'easeInOutQuart' - }); - } else { - dnsRequestsChart = new Chart(chartContext, { - type: 'line', - data: { - labels: results[0].labels, - datasets: datasets - }, - options: { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: 800, - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - display: showLegend, - position: 'top' - }, - tooltip: { - mode: 'index', - intersect: false - } - }, - scales: { - y: { - beginAtZero: true, - grid: { - color: 'rgba(0, 0, 0, 0.1)' - } - }, - x: { - grid: { - display: false - } - } - } - } - }); - } - }).catch(error => { - console.error('绘制混合视图图表失败:', error); - }); - } else { - // 普通视图 - // 根据当前时间范围选择API函数和对应的颜色 - let apiFunction; - let chartColor; - let chartFillColor; - - switch (currentTimeRange) { - case '7d': - apiFunction = (api && api.getDailyStats) || (() => Promise.resolve({ labels: [], data: [] })); - chartColor = '#22c55e'; // 绿色,与混合视图中的7天数据颜色一致 - chartFillColor = 'rgba(34, 197, 94, 0.1)'; - break; - case '30d': - apiFunction = (api && api.getMonthlyStats) || (() => Promise.resolve({ labels: [], data: [] })); - chartColor = '#a855f7'; // 紫色,与混合视图中的30天数据颜色一致 - chartFillColor = 'rgba(168, 85, 247, 0.1)'; - break; - default: // 24h - apiFunction = (api && api.getHourlyStats) || (() => Promise.resolve({ labels: [], data: [] })); - chartColor = '#3b82f6'; // 蓝色,与混合视图中的24小时数据颜色一致 - chartFillColor = 'rgba(59, 130, 246, 0.1)'; - } - - // 获取统计数据 - apiFunction().then(data => { - // 创建或更新图表 - if (dnsRequestsChart) { - dnsRequestsChart.data.labels = data.labels; - dnsRequestsChart.data.datasets = [{ - label: 'DNS请求数量', - data: data.data, - borderColor: chartColor, - backgroundColor: chartFillColor, - tension: 0.4, - fill: true - }]; - dnsRequestsChart.options.plugins.legend.display = false; - // 使用平滑过渡动画更新图表 - dnsRequestsChart.update({ - duration: 800, - easing: 'easeInOutQuart' - }); - } else { - dnsRequestsChart = new Chart(chartContext, { - type: 'line', - data: { - labels: data.labels, - datasets: [{ - label: 'DNS请求数量', - data: data.data, - borderColor: chartColor, - backgroundColor: chartFillColor, - tension: 0.4, - fill: true - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: 800, - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - display: false - }, - tooltip: { - mode: 'index', - intersect: false - } - }, - scales: { - y: { - beginAtZero: true, - grid: { - color: 'rgba(0, 0, 0, 0.1)' - } - }, - x: { - grid: { - display: false - } - } - } - } - }); - } - }).catch(error => { - console.error('绘制DNS请求图表失败:', error); - // 错误处理:使用空数据而不是模拟数据 - const count = currentTimeRange === '24h' ? 24 : (currentTimeRange === '7d' ? 7 : 30); - const emptyData = { - labels: Array(count).fill(''), - data: Array(count).fill(0) - }; - - if (dnsRequestsChart) { - dnsRequestsChart.data.labels = emptyData.labels; - dnsRequestsChart.data.datasets[0].data = emptyData.data; - dnsRequestsChart.update(); - } - }); - } -} - -// 更新图表数据 -function updateCharts(stats, queryTypeStats) { - console.log('更新图表,收到统计数据:', stats); - console.log('查询类型统计数据:', queryTypeStats); - - // 空值检查 - if (!stats) { - console.error('更新图表失败: 未提供统计数据'); - return; - } - - // 更新比例图表 - if (ratioChart) { - let allowed = '---', blocked = '---', error = '---'; - - // 尝试从stats数据中提取 - if (stats.dns) { - allowed = stats.dns.Allowed || allowed; - blocked = stats.dns.Blocked || blocked; - error = stats.dns.Errors || error; - } else if (stats.totalQueries !== undefined) { - allowed = stats.allowedQueries || allowed; - blocked = stats.blockedQueries || blocked; - error = stats.errorQueries || error; - } - - ratioChart.data.datasets[0].data = [allowed, blocked, error]; - // 使用自定义动画配置更新图表,确保平滑过渡 - ratioChart.update({ - duration: 500, - easing: 'easeInOutQuart' - }); - } - - // 更新解析类型统计饼图 - if (queryTypeChart && queryTypeStats && Array.isArray(queryTypeStats)) { - const queryTypeColors = ['#3498db', '#e74c3c', '#2ecc71', '#f39c12', '#9b59b6', '#1abc9c', '#d35400', '#34495e']; - - // 检查是否有有效的数据项 - const validData = queryTypeStats.filter(item => item && item.count > 0); - - if (validData.length > 0) { - // 准备标签和数据 - const labels = validData.map(item => item.type); - const data = validData.map(item => item.count); - - // 为每个解析类型分配颜色 - const colors = labels.map((_, index) => queryTypeColors[index % queryTypeColors.length]); - - // 更新图表数据 - queryTypeChart.data.labels = labels; - queryTypeChart.data.datasets[0].data = data; - queryTypeChart.data.datasets[0].backgroundColor = colors; - } else { - // 如果没有数据,显示默认值 - queryTypeChart.data.labels = ['暂无数据']; - queryTypeChart.data.datasets[0].data = [1]; - queryTypeChart.data.datasets[0].backgroundColor = [queryTypeColors[0]]; - } - - // 使用自定义动画配置更新图表,确保平滑过渡 - queryTypeChart.update({ - duration: 500, - easing: 'easeInOutQuart' - }); - } -} - -// 更新统计卡片折线图 -function updateStatCardCharts(stats) { - if (!stats || Object.keys(statCardCharts).length === 0) { - return; - } - - // 更新查询总量图表 - if (statCardCharts['query-chart']) { - let queryCount = 0; - if (stats.dns) { - queryCount = stats.dns.Queries || 0; - } else if (stats.totalQueries !== undefined) { - queryCount = stats.totalQueries || 0; - } - updateChartData('query-chart', queryCount); - } - - // 更新屏蔽数量图表 - if (statCardCharts['blocked-chart']) { - let blockedCount = 0; - if (stats.dns) { - blockedCount = stats.dns.Blocked || 0; - } else if (stats.blockedQueries !== undefined) { - blockedCount = stats.blockedQueries || 0; - } - updateChartData('blocked-chart', blockedCount); - } - - // 更新正常解析图表 - if (statCardCharts['allowed-chart']) { - let allowedCount = 0; - if (stats.dns) { - allowedCount = stats.dns.Allowed || 0; - } else if (stats.allowedQueries !== undefined) { - allowedCount = stats.allowedQueries || 0; - } else if (stats.dns && stats.dns.Queries && stats.dns.Blocked) { - allowedCount = stats.dns.Queries - stats.dns.Blocked; - } - updateChartData('allowed-chart', allowedCount); - } - - // 更新错误数量图表 - if (statCardCharts['error-chart']) { - let errorCount = 0; - if (stats.dns) { - errorCount = stats.dns.Errors || 0; - } else if (stats.errorQueries !== undefined) { - errorCount = stats.errorQueries || 0; - } - updateChartData('error-chart', errorCount); - } - - // 更新响应时间图表 - if (statCardCharts['response-time-chart']) { - let responseTime = 0; - // 尝试从不同的数据结构获取平均响应时间 - if (stats.dns && stats.dns.AvgResponseTime) { - responseTime = stats.dns.AvgResponseTime; - } else if (stats.avgResponseTime !== undefined) { - responseTime = stats.avgResponseTime; - } else if (stats.responseTime) { - responseTime = stats.responseTime; - } - // 限制小数位数为两位 - responseTime = parseFloat(responseTime).toFixed(2); - updateChartData('response-time-chart', responseTime); - } - - // 更新活跃IP图表 - if (statCardCharts['ips-chart']) { - const activeIPs = stats.activeIPs || 0; - updateChartData('ips-chart', activeIPs); - } - - // 更新CPU使用率图表 - if (statCardCharts['cpu-chart']) { - const cpuUsage = stats.cpuUsage || 0; - updateChartData('cpu-chart', cpuUsage); - } - - // 更新平均响应时间显示 - if (document.getElementById('avg-response-time')) { - let avgResponseTime = 0; - // 尝试从不同的数据结构获取平均响应时间 - if (stats.dns && stats.dns.AvgResponseTime) { - avgResponseTime = stats.dns.AvgResponseTime; - } else if (stats.avgResponseTime !== undefined) { - avgResponseTime = stats.avgResponseTime; - } else if (stats.responseTime) { - avgResponseTime = stats.responseTime; - } - document.getElementById('avg-response-time').textContent = formatNumber(avgResponseTime); - } - - // 更新规则数图表 - if (statCardCharts['rules-chart']) { - // 尝试获取规则数,如果没有则使用模拟数据 - const rulesCount = getRulesCountFromStats(stats) || Math.floor(Math.random() * 5000) + 10000; - updateChartData('rules-chart', rulesCount); - } - - // 更新排除规则数图表 - if (statCardCharts['exceptions-chart']) { - const exceptionsCount = getExceptionsCountFromStats(stats) || Math.floor(Math.random() * 100) + 50; - updateChartData('exceptions-chart', exceptionsCount); - } - - // 更新Hosts条目数图表 - if (statCardCharts['hosts-chart']) { - const hostsCount = getHostsCountFromStats(stats) || Math.floor(Math.random() * 1000) + 2000; - updateChartData('hosts-chart', hostsCount); - } -} - -// 更新单个图表的数据 -function updateChartData(chartId, newValue) { - const chart = statCardCharts[chartId]; - const historyData = statCardHistoryData[chartId]; - - if (!chart || !historyData) { - return; - } - - // 添加新数据,移除最旧的数据 - historyData.push(newValue); - if (historyData.length > 12) { - historyData.shift(); - } - - // 更新图表数据 - chart.data.datasets[0].data = historyData; - chart.data.labels = generateTimeLabels(historyData.length); - - // 使用自定义动画配置更新图表,确保平滑过渡,避免空白区域 - chart.update({ - duration: 300, // 增加动画持续时间 - easing: 'easeInOutQuart', // 使用平滑的缓动函数 - transition: { - duration: 300, - easing: 'easeInOutQuart' - } - }); -} - -// 从统计数据中获取规则数 -function getRulesCountFromStats(stats) { - // 尝试从stats中获取规则数 - if (stats.shield && stats.shield.rules) { - return stats.shield.rules; - } - return null; -} - -// 从统计数据中获取排除规则数 -function getExceptionsCountFromStats(stats) { - // 尝试从stats中获取排除规则数 - if (stats.shield && stats.shield.exceptions) { - return stats.shield.exceptions; - } - return null; -} - -// 从统计数据中获取Hosts条目数 -function getHostsCountFromStats(stats) { - // 尝试从stats中获取Hosts条目数 - if (stats.shield && stats.shield.hosts) { - return stats.shield.hosts; - } - return null; -} - -// 初始化统计卡片折线图 -function initStatCardCharts() { - console.log('===== 开始初始化统计卡片折线图 ====='); - - // 清理已存在的图表实例 - for (const key in statCardCharts) { - if (statCardCharts.hasOwnProperty(key)) { - statCardCharts[key].destroy(); - } - } - statCardCharts = {}; - statCardHistoryData = {}; - - // 检查Chart.js是否加载 - console.log('Chart.js是否可用:', typeof Chart !== 'undefined'); - - // 统计卡片配置信息 - const cardConfigs = [ - { id: 'query-chart', color: '#9b59b6', label: '查询总量' }, - { id: 'blocked-chart', color: '#e74c3c', label: '屏蔽数量' }, - { id: 'allowed-chart', color: '#2ecc71', label: '正常解析' }, - { id: 'error-chart', color: '#f39c12', label: '错误数量' }, - { id: 'response-time-chart', color: '#3498db', label: '响应时间' }, - { id: 'ips-chart', color: '#1abc9c', label: '活跃IP' }, - { id: 'cpu-chart', color: '#e67e22', label: 'CPU使用率' }, - { id: 'rules-chart', color: '#95a5a6', label: '屏蔽规则数' }, - { id: 'exceptions-chart', color: '#34495e', label: '排除规则数' }, - { id: 'hosts-chart', color: '#16a085', label: 'Hosts条目数' } - ]; - - console.log('图表配置:', cardConfigs); - - cardConfigs.forEach(config => { - const canvas = document.getElementById(config.id); - if (!canvas) { - console.warn(`未找到统计卡片图表元素: ${config.id}`); - return; - } - - const ctx = canvas.getContext('2d'); - - // 为不同类型的卡片生成更合适的初始数据 - let initialData; - if (config.id === 'response-time-chart') { - // 响应时间图表使用空数组,将通过API实时数据更新 - initialData = Array(12).fill(null); - } else if (config.id === 'cpu-chart') { - initialData = generateMockData(12, 0, 10); - } else { - initialData = generateMockData(12, 0, 100); - } - - // 初始化历史数据数组 - statCardHistoryData[config.id] = [...initialData]; - - // 创建图表 - statCardCharts[config.id] = new Chart(ctx, { - type: 'line', - data: { - labels: generateTimeLabels(12), - datasets: [{ - label: config.label, - data: initialData, - borderColor: config.color, - backgroundColor: `${config.color}20`, // 透明度20% - borderWidth: 2, - tension: 0.4, - fill: true, - pointRadius: 0, // 隐藏数据点 - pointHoverRadius: 4, // 鼠标悬停时显示数据点 - pointBackgroundColor: config.color - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - // 添加动画配置,确保平滑过渡 - animation: { - duration: 800, - easing: 'easeInOutQuart' - }, - plugins: { - legend: { - display: false - }, - tooltip: { - mode: 'index', - intersect: false, - backgroundColor: 'rgba(0, 0, 0, 0.9)', - titleColor: '#fff', - bodyColor: '#fff', - borderColor: config.color, - borderWidth: 1, - padding: 8, - displayColors: false, - cornerRadius: 4, - titleFont: { - size: 12, - weight: 'normal' - }, - bodyFont: { - size: 11 - }, - // 确保HTML渲染正确 - useHTML: true, - filter: function(tooltipItem) { - return tooltipItem.datasetIndex === 0; - }, - callbacks: { - title: function(tooltipItems) { - // 简化时间显示格式 - return tooltipItems[0].label; - }, - label: function(context) { - const value = context.parsed.y; - // 格式化大数字 - const formattedValue = formatNumber(value); - - // 使用CSS类显示变化趋势 - let trendInfo = ''; - const data = context.dataset.data; - const currentIndex = context.dataIndex; - - if (currentIndex > 0) { - const prevValue = data[currentIndex - 1]; - const change = value - prevValue; - - if (change !== 0) { - const changeSymbol = change > 0 ? '↑' : '↓'; - // 取消颜色显示,简化显示 - trendInfo = (changeSymbol + Math.abs(change)); - } - } - - // 简化标签格式 - return `${config.label}: ${formattedValue}${trendInfo}`; - }, - // 移除平均值显示 - afterLabel: function(context) { - return ''; - } - } - } - }, - scales: { - x: { - display: false // 隐藏X轴 - }, - y: { - display: false, // 隐藏Y轴 - beginAtZero: true - } - }, - interaction: { - intersect: false, - mode: 'index' - } - } - }); - }); -} - -// 生成模拟数据 -function generateMockData(count, min, max) { - const data = []; - for (let i = 0; i < count; i++) { - data.push(Math.floor(Math.random() * (max - min + 1)) + min); - } - return data; -} - -// 生成时间标签 -function generateTimeLabels(count) { - const labels = []; - const now = new Date(); - for (let i = count - 1; i >= 0; i--) { - const time = new Date(now.getTime() - i * 5 * 60 * 1000); // 每5分钟一个点 - labels.push(`${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`); - } - return labels; -} - -// 格式化数字显示(使用K/M后缀) -function formatNumber(num) { - // 如果不是数字,直接返回 - if (isNaN(num) || num === '---') { - return num; - } - - // 显示完整数字的最大长度阈值 - const MAX_FULL_LENGTH = 5; - - // 先获取完整数字字符串 - const fullNumStr = num.toString(); - - // 如果数字长度小于等于阈值,直接返回完整数字 - if (fullNumStr.length <= MAX_FULL_LENGTH) { - return fullNumStr; - } - - // 否则使用缩写格式 - if (num >= 1000000) { - return (num / 1000000).toFixed(1) + 'M'; - } else if (num >= 1000) { - return (num / 1000).toFixed(1) + 'K'; - } - - return fullNumStr; -} - -// 更新运行状态 -function updateUptime() { - // 实现更新运行时间的逻辑 - // 这里应该调用API获取当前运行时间并更新到UI - // 由于API暂时没有提供运行时间,我们先使用模拟数据 - const uptimeElement = document.getElementById('uptime'); - if (uptimeElement) { - uptimeElement.textContent = '---'; - } -} - -// 格式化数字(添加千位分隔符) -function formatWithCommas(num) { - return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); -} - -// 格式化时间 -function formatTime(timestamp) { - const date = new Date(timestamp); - const now = new Date(); - const diff = now - date; - - // 如果是今天,显示时间 - if (date.toDateString() === now.toDateString()) { - return date.toLocaleTimeString('zh-CN', {hour: '2-digit', minute: '2-digit'}); - } - - // 否则显示日期和时间 - return date.toLocaleString('zh-CN', { - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit' - }); -} - -// 根据颜色代码获取对应的CSS类名(兼容方式) -function getColorClassName(colorCode) { - // 优先使用配置文件中的颜色处理 - if (COLOR_CONFIG.getColorClassName) { - return COLOR_CONFIG.getColorClassName(colorCode); - } - - // 备用颜色映射 - const colorMap = { - '#1890ff': 'blue', - '#52c41a': 'green', - '#fa8c16': 'orange', - '#f5222d': 'red', - '#722ed1': 'purple', - '#13c2c2': 'cyan', - '#36cfc9': 'teal' - }; - - // 返回映射的类名,如果没有找到则返回默认的blue - return colorMap[colorCode] || 'blue'; -} - -// 显示通知 -function showNotification(message, type = 'info') { - // 移除已存在的通知 - const existingNotification = document.getElementById('notification'); - if (existingNotification) { - existingNotification.remove(); - } - - // 创建通知元素 - const notification = document.createElement('div'); - notification.id = 'notification'; - notification.className = `fixed top-4 right-4 px-6 py-3 rounded-lg shadow-lg z-50 transform transition-all duration-300 translate-y-0 opacity-0`; - - // 设置样式和内容 - let bgColor, textColor, icon; - switch (type) { - case 'success': - bgColor = 'bg-success'; - textColor = 'text-white'; - icon = 'fa-check-circle'; - break; - case 'error': - bgColor = 'bg-danger'; - textColor = 'text-white'; - icon = 'fa-exclamation-circle'; - break; - case 'warning': - bgColor = 'bg-warning'; - textColor = 'text-white'; - icon = 'fa-exclamation-triangle'; - break; - default: - bgColor = 'bg-primary'; - textColor = 'text-white'; - icon = 'fa-info-circle'; - } - - notification.className += ` ${bgColor} ${textColor}`; - notification.innerHTML = ` -
- - ${message} -
- `; - - // 添加到页面 - document.body.appendChild(notification); - - // 显示通知 - setTimeout(() => { - notification.classList.remove('translate-y-0', 'opacity-0'); - notification.classList.add('-translate-y-2', 'opacity-100'); - }, 10); - - // 自动关闭 - setTimeout(() => { - notification.classList.add('translate-y-0', 'opacity-0'); - setTimeout(() => { - notification.remove(); - }, 300); - }, 3000); -} - -// 页面切换处理 -function handlePageSwitch() { - const menuItems = document.querySelectorAll('nav a'); - - // 页面切换逻辑 - function switchPage(targetId, menuItem) { - // 隐藏所有内容 - document.querySelectorAll('[id$="-content"]').forEach(content => { - content.classList.add('hidden'); - }); - - // 显示目标内容 - document.getElementById(`${targetId}-content`).classList.remove('hidden'); - - // 更新页面标题 - document.getElementById('page-title').textContent = menuItem.querySelector('span').textContent; - - // 更新活动菜单项 - menuItems.forEach(item => { - item.classList.remove('sidebar-item-active'); - }); - menuItem.classList.add('sidebar-item-active'); - - // 侧边栏切换(移动端) - if (window.innerWidth < 1024) { - toggleSidebar(); - } - } - - menuItems.forEach(item => { - item.addEventListener('click', (e) => { - // 允许默认的hash变化 - // 页面切换会由hashchange事件处理 - }); - }); -} - -// 处理hash变化 - 全局函数,确保在页面加载时就能被调用 -function handleHashChange() { - let hash = window.location.hash; - - // 如果没有hash,默认设置为#dashboard - if (!hash) { - hash = '#dashboard'; - window.location.hash = hash; - return; - } - - const targetId = hash.substring(1); - const menuItems = document.querySelectorAll('nav a'); - - // 首先检查是否存在对应的内容元素 - const contentElement = document.getElementById(`${targetId}-content`); - - // 查找对应的菜单项 - let targetMenuItem = null; - menuItems.forEach(item => { - if (item.getAttribute('href') === hash) { - targetMenuItem = item; - } - }); - - // 如果找到了对应的内容元素,直接显示 - if (contentElement) { - // 隐藏所有内容 - document.querySelectorAll('[id$="-content"]').forEach(content => { - content.classList.add('hidden'); - }); - - // 显示目标内容 - contentElement.classList.remove('hidden'); - - // 更新活动菜单项和页面标题 - menuItems.forEach(item => { - item.classList.remove('sidebar-item-active'); - }); - - if (targetMenuItem) { - targetMenuItem.classList.add('sidebar-item-active'); - // 更新页面标题 - const pageTitle = targetMenuItem.querySelector('span').textContent; - document.getElementById('page-title').textContent = pageTitle; - } else { - // 如果没有找到对应的菜单项,尝试根据hash更新页面标题 - const titleElement = document.getElementById(`${targetId}-title`); - if (titleElement) { - document.getElementById('page-title').textContent = titleElement.textContent; - } - } - } else if (targetMenuItem) { - // 隐藏所有内容 - document.querySelectorAll('[id$="-content"]').forEach(content => { - content.classList.add('hidden'); - }); - - // 显示目标内容 - document.getElementById(`${targetId}-content`).classList.remove('hidden'); - - // 更新页面标题 - document.getElementById('page-title').textContent = targetMenuItem.querySelector('span').textContent; - - // 更新活动菜单项 - menuItems.forEach(item => { - item.classList.remove('sidebar-item-active'); - }); - targetMenuItem.classList.add('sidebar-item-active'); - - // 侧边栏切换(移动端) - if (window.innerWidth < 1024) { - toggleSidebar(); - } - } else { - // 如果既没有找到内容元素也没有找到菜单项,默认显示dashboard - window.location.hash = '#dashboard'; - } -} - -// 初始化hash路由 -function initHashRoute() { - handleHashChange(); -} - -// 监听hash变化事件 - 全局事件监听器 -window.addEventListener('hashchange', handleHashChange); - -// 初始化hash路由 - 确保在页面加载时就能被调用 -initHashRoute(); - -// 响应式处理 -function handleResponsive() { - // 窗口大小改变时处理 - window.addEventListener('resize', () => { - - // 更新所有图表大小 - if (dnsRequestsChart) { - dnsRequestsChart.update(); - } - if (ratioChart) { - ratioChart.update(); - } - if (queryTypeChart) { - queryTypeChart.update(); - } - if (detailedDnsRequestsChart) { - detailedDnsRequestsChart.update(); - } - // 更新统计卡片图表 - Object.values(statCardCharts).forEach(chart => { - if (chart) { - chart.update(); - } - }); - }); - - // 添加触摸事件支持,用于移动端 - let touchStartX = 0; - let touchEndX = 0; - - document.addEventListener('touchstart', (e) => { - touchStartX = e.changedTouches[0].screenX; - }, false); - - document.addEventListener('touchend', (e) => { - touchEndX = e.changedTouches[0].screenX; - handleSwipe(); - }, false); - - function handleSwipe() { - // 从左向右滑动,打开侧边栏 - if (touchEndX - touchStartX > 50 && window.innerWidth < 1024) { - sidebar.classList.remove('-translate-x-full'); - } - // 从右向左滑动,关闭侧边栏 - if (touchStartX - touchEndX > 50 && window.innerWidth < 1024) { - sidebar.classList.add('-translate-x-full'); - } - } -} - -// 添加重试功能 -function addRetryEventListeners() { - // TOP客户端重试按钮 - const retryTopClientsBtn = document.getElementById('retry-top-clients'); - if (retryTopClientsBtn) { - retryTopClientsBtn.addEventListener('click', async () => { - console.log('重试获取TOP客户端数据'); - const clientsData = await api.getTopClients(); - if (clientsData && !clientsData.error && Array.isArray(clientsData) && clientsData.length > 0) { - // 使用真实数据 - updateTopClientsTable(clientsData); - hideLoading('top-clients'); - const errorElement = document.getElementById('top-clients-error'); - if (errorElement) errorElement.classList.add('hidden'); - } else { - // 重试失败,保持原有状态 - console.warn('重试获取TOP客户端数据失败'); - } - }); - } - - // TOP域名重试按钮 - const retryTopDomainsBtn = document.getElementById('retry-top-domains'); - if (retryTopDomainsBtn) { - retryTopDomainsBtn.addEventListener('click', async () => { - console.log('重试获取TOP域名数据'); - const domainsData = await api.getTopDomains(); - if (domainsData && !domainsData.error && Array.isArray(domainsData) && domainsData.length > 0) { - // 使用真实数据 - updateTopDomainsTable(domainsData); - hideLoading('top-domains'); - const errorElement = document.getElementById('top-domains-error'); - if (errorElement) errorElement.classList.add('hidden'); - } else { - // 重试失败,保持原有状态 - console.warn('重试获取TOP域名数据失败'); - } - }); - } -} - -// 页面加载完成后初始化 -window.addEventListener('DOMContentLoaded', () => { - // 初始化页面切换 - handlePageSwitch(); - - // 初始化响应式 - handleResponsive(); - - // 初始化仪表盘 - initDashboard(); - - // 添加重试事件监听器 - addRetryEventListeners(); - - // 页面卸载时清理定时器 - window.addEventListener('beforeunload', () => { - if (intervalId) { - clearInterval(intervalId); - } - }); -}); \ No newline at end of file diff --git a/staticbak/static/js/guide.js b/staticbak/static/js/guide.js deleted file mode 100644 index e69de29..0000000 diff --git a/staticbak/static/js/hosts.js b/staticbak/static/js/hosts.js deleted file mode 100644 index a8a839d..0000000 --- a/staticbak/static/js/hosts.js +++ /dev/null @@ -1,202 +0,0 @@ -// Hosts管理页面功能实现 - -// 初始化Hosts管理页面 -function initHostsPage() { - // 加载Hosts规则 - loadHostsRules(); - // 设置事件监听器 - setupHostsEventListeners(); -} - -// 加载Hosts规则 -async function loadHostsRules() { - try { - const response = await fetch('/api/shield/hosts'); - if (!response.ok) { - throw new Error('Failed to load hosts rules'); - } - const data = await response.json(); - - // 处理API返回的数据格式 - let hostsRules = []; - if (data && Array.isArray(data)) { - // 直接是数组格式 - hostsRules = data; - } else if (data && data.hosts) { - // 包含在hosts字段中 - hostsRules = data.hosts; - } - - updateHostsTable(hostsRules); - } catch (error) { - console.error('Error loading hosts rules:', error); - showErrorMessage('加载Hosts规则失败'); - } -} - -// 更新Hosts表格 -function updateHostsTable(hostsRules) { - const tbody = document.getElementById('hosts-table-body'); - - if (hostsRules.length === 0) { - tbody.innerHTML = '暂无Hosts条目'; - return; - } - - tbody.innerHTML = hostsRules.map(rule => { - // 处理对象格式的规则 - const ip = rule.ip || ''; - const domain = rule.domain || ''; - - return ` - - ${ip} - ${domain} - - - - - `; - }).join(''); - - // 重新绑定删除事件 - document.querySelectorAll('.delete-hosts-btn').forEach(btn => { - btn.addEventListener('click', handleDeleteHostsRule); - }); -} - -// 设置事件监听器 -function setupHostsEventListeners() { - // 保存Hosts按钮 - document.getElementById('save-hosts-btn').addEventListener('click', handleAddHostsRule); -} - -// 处理添加Hosts规则 -async function handleAddHostsRule() { - const ip = document.getElementById('hosts-ip').value.trim(); - const domain = document.getElementById('hosts-domain').value.trim(); - - if (!ip || !domain) { - showErrorMessage('IP地址和域名不能为空'); - return; - } - - try { - const response = await fetch('/api/shield/hosts', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ ip, domain }) - }); - - if (!response.ok) { - throw new Error('Failed to add hosts rule'); - } - - showSuccessMessage('Hosts规则添加成功'); - - // 清空输入框 - document.getElementById('hosts-ip').value = ''; - document.getElementById('hosts-domain').value = ''; - - // 重新加载规则 - loadHostsRules(); - } catch (error) { - console.error('Error adding hosts rule:', error); - showErrorMessage('添加Hosts规则失败'); - } -} - -// 处理删除Hosts规则 -async function handleDeleteHostsRule(e) { - const ip = e.target.closest('.delete-hosts-btn').dataset.ip; - const domain = e.target.closest('.delete-hosts-btn').dataset.domain; - - try { - const response = await fetch('/api/shield/hosts', { - method: 'DELETE', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ domain }) - }); - - if (!response.ok) { - throw new Error('Failed to delete hosts rule'); - } - - showSuccessMessage('Hosts规则删除成功'); - - // 重新加载规则 - loadHostsRules(); - } catch (error) { - console.error('Error deleting hosts rule:', error); - showErrorMessage('删除Hosts规则失败'); - } -} - -// 显示成功消息 -function showSuccessMessage(message) { - showNotification(message, 'success'); -} - -// 显示错误消息 -function showErrorMessage(message) { - showNotification(message, 'error'); -} - - - -// 显示通知 -function showNotification(message, type = 'info') { - // 移除现有通知 - const existingNotification = document.querySelector('.notification'); - if (existingNotification) { - existingNotification.remove(); - } - - // 创建新通知 - const notification = document.createElement('div'); - notification.className = `notification fixed bottom-4 right-4 px-6 py-3 rounded-lg shadow-lg z-50 transform transition-all duration-300 ease-in-out translate-y-0 opacity-0`; - - // 设置通知样式 - if (type === 'success') { - notification.classList.add('bg-green-500', 'text-white'); - } else if (type === 'error') { - notification.classList.add('bg-red-500', 'text-white'); - } else { - notification.classList.add('bg-blue-500', 'text-white'); - } - - notification.innerHTML = ` -
- - ${message} -
- `; - - document.body.appendChild(notification); - - // 显示通知 - setTimeout(() => { - notification.classList.remove('opacity-0'); - }, 100); - - // 3秒后隐藏通知 - setTimeout(() => { - notification.classList.add('opacity-0'); - setTimeout(() => { - notification.remove(); - }, 300); - }, 3000); -} - -// 页面加载完成后初始化 -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initHostsPage); -} else { - initHostsPage(); -} diff --git a/staticbak/static/js/logs.js b/staticbak/static/js/logs.js deleted file mode 100644 index 9055f55..0000000 --- a/staticbak/static/js/logs.js +++ /dev/null @@ -1,1692 +0,0 @@ -// logs.js - 查询日志页面功能 - -// 全局变量 -let currentPage = 1; -let totalPages = 1; -let logsPerPage = 30; // 默认显示30条记录 -let currentFilter = ''; -let currentSearch = ''; -let logsChart = null; -let currentSortField = ''; -let currentSortDirection = 'desc'; // 默认降序 - -// IP地理位置缓存 -let ipGeolocationCache = {}; -const GEOLOCATION_CACHE_EXPIRY = 24 * 60 * 60 * 1000; // 缓存有效期24小时 - -// 跟踪器数据库缓存 -let trackersDatabase = null; -let trackersLoaded = false; -let trackersLoading = false; - -// 域名信息数据库缓存 -let domainInfoDatabase = null; -let domainInfoLoaded = false; -let domainInfoLoading = false; - -// WebSocket连接和重连计时器 -let logsWsConnection = null; -let logsWsReconnectTimer = null; - -// 加载跟踪器数据库 -async function loadTrackersDatabase() { - if (trackersLoaded) return trackersDatabase; - if (trackersLoading) { - // 等待正在进行的加载完成 - while (trackersLoading) { - await new Promise(resolve => setTimeout(resolve, 100)); - } - return trackersDatabase; - } - - trackersLoading = true; - - try { - const response = await fetch('domain-info/tracker/trackers.json'); - if (!response.ok) { - console.error('加载跟踪器数据库失败:', response.statusText); - trackersDatabase = { trackers: {} }; - return trackersDatabase; - } - - trackersDatabase = await response.json(); - trackersLoaded = true; - return trackersDatabase; - } catch (error) { - console.error('加载跟踪器数据库失败:', error); - trackersDatabase = { trackers: {} }; - return trackersDatabase; - } finally { - trackersLoading = false; - } -} - -// 加载域名信息数据库 -async function loadDomainInfoDatabase() { - console.log('开始加载域名信息数据库'); - - if (domainInfoLoaded) { - console.log('域名信息数据库已加载,直接返回'); - return domainInfoDatabase; - } - - if (domainInfoLoading) { - console.log('域名信息数据库正在加载中,等待完成'); - // 等待正在进行的加载完成 - while (domainInfoLoading) { - await new Promise(resolve => setTimeout(resolve, 100)); - } - return domainInfoDatabase; - } - - domainInfoLoading = true; - - try { - console.log('发起请求获取域名信息数据库'); - const response = await fetch('domain-info/domains/domain-info.json'); - - if (!response.ok) { - console.error('加载域名信息数据库失败,HTTP状态:', response.status, response.statusText); - console.error('请求URL:', response.url); - domainInfoDatabase = { domains: {}, categories: {} }; - return domainInfoDatabase; - } - - console.log('域名信息数据库请求成功,开始解析JSON'); - domainInfoDatabase = await response.json(); - console.log('域名信息数据库解析成功,包含', Object.keys(domainInfoDatabase.domains || {}).length, '个公司'); - domainInfoLoaded = true; - return domainInfoDatabase; - } catch (error) { - console.error('加载域名信息数据库失败,错误信息:', error.message); - console.error('错误堆栈:', error.stack); - domainInfoDatabase = { domains: {}, categories: {} }; - return domainInfoDatabase; - } finally { - domainInfoLoading = false; - console.log('域名信息数据库加载完成'); - } -} - -// 检查域名是否在跟踪器数据库中,并返回跟踪器信息 -async function isDomainInTrackerDatabase(domain) { - if (!trackersDatabase || !trackersLoaded) { - await loadTrackersDatabase(); - } - - if (!trackersDatabase || !trackersDatabase.trackers) { - return null; - } - - // 检查域名是否直接作为跟踪器键存在 - if (trackersDatabase.trackers.hasOwnProperty(domain)) { - return trackersDatabase.trackers[domain]; - } - - // 检查域名是否在跟踪器URL中 - for (const trackerKey in trackersDatabase.trackers) { - if (trackersDatabase.trackers.hasOwnProperty(trackerKey)) { - const tracker = trackersDatabase.trackers[trackerKey]; - if (tracker && tracker.url) { - try { - const trackerUrl = new URL(tracker.url); - if (trackerUrl.hostname === domain) { - return tracker; - } - } catch (e) { - // 忽略无效URL - } - } - } - } - - return null; -} - -// 根据域名查找对应的网站信息 -async function getDomainInfo(domain) { - console.log('开始查找域名信息,域名:', domain); - - if (!domainInfoDatabase || !domainInfoLoaded) { - console.log('域名信息数据库未加载,调用loadDomainInfoDatabase'); - await loadDomainInfoDatabase(); - } - - if (!domainInfoDatabase || !domainInfoDatabase.domains) { - console.error('域名信息数据库无效或为空'); - return null; - } - - // 规范化域名,移除可能的端口号 - const normalizedDomain = domain.replace(/:\d+$/, '').toLowerCase(); - console.log('规范化后的域名:', normalizedDomain); - - // 遍历所有公司 - console.log('开始遍历公司,总公司数:', Object.keys(domainInfoDatabase.domains).length); - for (const companyKey in domainInfoDatabase.domains) { - if (domainInfoDatabase.domains.hasOwnProperty(companyKey)) { - console.log('检查公司:', companyKey); - const companyData = domainInfoDatabase.domains[companyKey]; - const companyName = companyData.company || companyKey; - - // 遍历公司下的所有网站 - for (const websiteKey in companyData) { - if (companyData.hasOwnProperty(websiteKey) && websiteKey !== 'company') { - console.log(' 检查网站:', websiteKey); - const website = companyData[websiteKey]; - - // 检查域名是否匹配网站的URL - if (website.url) { - // 处理字符串类型的URL - if (typeof website.url === 'string') { - console.log(' 检查字符串URL:', website.url); - if (isDomainMatch(website.url, normalizedDomain)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: website.name, - icon: website.icon, - categoryId: website.categoryId, - categoryName: domainInfoDatabase.categories[website.categoryId] || '未知', - company: companyName - }; - } - } - // 处理对象类型的URL - else if (typeof website.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(website.url).length, '个URL'); - for (const urlKey in website.url) { - if (website.url.hasOwnProperty(urlKey)) { - const urlValue = website.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); - if (isDomainMatch(urlValue, normalizedDomain)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: website.name, - icon: website.icon, - categoryId: website.categoryId, - categoryName: domainInfoDatabase.categories[website.categoryId] || '未知', - company: companyName - }; - } - } - } - } - } else { - console.log(' 网站没有URL属性'); - } - } - } - } - } - - console.log('未找到匹配的域名信息'); - return null; -} - -// 检查域名是否匹配 -function isDomainMatch(urlValue, targetDomain) { - console.log(' 开始匹配URL:', urlValue, '目标域名:', targetDomain); - - try { - // 尝试将URL值解析为完整URL - console.log(' 尝试解析URL为完整URL'); - const url = new URL(urlValue); - const hostname = url.hostname.toLowerCase(); - console.log(' 解析成功,主机名:', hostname); - - // 只匹配完整域名,不进行主域名匹配 - // 这是为了避免同一个公司下的不同网站(如微信和腾讯视频)因为主域名相同而错误匹配 - if (hostname === targetDomain) { - console.log(' 完整域名匹配成功'); - return true; - } else { - console.log(' 完整域名不匹配'); - return false; - } - } catch (e) { - console.log(' 解析URL失败,将其视为纯域名处理,错误信息:', e.message); - // 如果是纯域名而不是完整URL - const urlDomain = urlValue.toLowerCase(); - console.log(' 处理为纯域名:', urlDomain); - - // 只匹配完整域名,不进行主域名匹配 - if (urlDomain === targetDomain) { - console.log(' 完整域名匹配成功'); - return true; - } else { - console.log(' 完整域名不匹配'); - return false; - } - } -} - -// 提取主域名 -function extractPrimaryDomain(domain) { - console.log(' 开始提取主域名,原始域名:', domain); - - const parts = domain.split('.'); - console.log(' 域名分割为:', parts); - - if (parts.length <= 2) { - console.log(' 域名长度小于等于2,直接返回:', domain); - return domain; - } - - // 处理常见的三级域名 - const commonSubdomains = ['www', 'mail', 'news', 'map', 'image', 'video', 'cdn', 'api', 'blog', 'shop', 'cloud', 'docs', 'help', 'support', 'dev', 'test', 'staging']; - console.log(' 检查是否为常见三级域名'); - - if (commonSubdomains.includes(parts[0])) { - const result = parts.slice(1).join('.'); - console.log(' 是常见三级域名,返回:', result); - return result; - } - - // 处理特殊情况,如co.uk, co.jp等 - const countryTLDs = ['co.uk', 'co.jp', 'co.kr', 'co.in', 'co.ca', 'co.au', 'co.nz', 'co.th', 'co.sg', 'co.my', 'co.id', 'co.za', 'com.cn', 'org.cn', 'net.cn', 'gov.cn', 'edu.cn']; - console.log(' 检查是否为特殊国家TLD'); - - for (const tld of countryTLDs) { - if (domain.endsWith('.' + tld)) { - const mainParts = domain.split('.'); - const result = mainParts.slice(-tld.split('.').length - 1).join('.'); - console.log(' 是特殊国家TLD,返回:', result); - return result; - } - } - - // 默认情况:返回最后两个部分 - const result = parts.slice(-2).join('.'); - console.log(' 默认情况,返回最后两个部分:', result); - return result; -} - -// 初始化查询日志页面 -function initLogsPage() { - console.log('初始化查询日志页面'); - - // 加载日志统计数据 - loadLogsStats(); - - // 加载日志详情 - loadLogs(); - - // 初始化图表 - initLogsChart(); - - // 绑定事件 - bindLogsEvents(); - - // 初始化日志详情弹窗 - initLogDetailModal(); - - // 建立WebSocket连接,用于实时更新统计数据和图表 - connectLogsWebSocket(); - - // 窗口大小改变时重新加载日志表格 - window.addEventListener('resize', handleWindowResize); - - // 在页面卸载时清理资源 - window.addEventListener('beforeunload', cleanupLogsResources); -} - -// 处理窗口大小改变 -function handleWindowResize() { - // 重新加载日志表格,以适应新的屏幕尺寸 - loadLogs(); -} - -// 清理资源 -function cleanupLogsResources() { - // 清除WebSocket连接 - if (logsWsConnection) { - logsWsConnection.close(); - logsWsConnection = null; - } - - // 清除重连计时器 - if (logsWsReconnectTimer) { - clearTimeout(logsWsReconnectTimer); - logsWsReconnectTimer = null; - } - - // 清除窗口大小改变事件监听器 - window.removeEventListener('resize', handleWindowResize); -} - -// 绑定事件 -function bindLogsEvents() { - // 搜索按钮 - const searchBtn = document.getElementById('logs-search-btn'); - if (searchBtn) { - searchBtn.addEventListener('click', () => { - currentSearch = document.getElementById('logs-search').value; - currentPage = 1; - loadLogs(); - }); - } - - // 搜索框回车事件 - const searchInput = document.getElementById('logs-search'); - if (searchInput) { - searchInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - currentSearch = searchInput.value; - currentPage = 1; - loadLogs(); - } - }); - } - - // 结果过滤 - const resultFilter = document.getElementById('logs-result-filter'); - if (resultFilter) { - resultFilter.addEventListener('change', () => { - currentFilter = resultFilter.value; - currentPage = 1; - loadLogs(); - }); - } - - // 自定义记录数量 - const perPageSelect = document.getElementById('logs-per-page'); - if (perPageSelect) { - perPageSelect.addEventListener('change', () => { - logsPerPage = parseInt(perPageSelect.value); - currentPage = 1; - loadLogs(); - }); - } - - // 分页按钮 - const prevBtn = document.getElementById('logs-prev-page'); - const nextBtn = document.getElementById('logs-next-page'); - - if (prevBtn) { - prevBtn.addEventListener('click', () => { - if (currentPage > 1) { - currentPage--; - loadLogs(); - } - }); - } - - if (nextBtn) { - nextBtn.addEventListener('click', () => { - if (currentPage < totalPages) { - currentPage++; - loadLogs(); - } - }); - } - - // 页码跳转 - const pageInput = document.getElementById('logs-page-input'); - const goBtn = document.getElementById('logs-go-page'); - - if (pageInput) { - // 页码输入框回车事件 - pageInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - const page = parseInt(pageInput.value); - if (page >= 1 && page <= totalPages) { - currentPage = page; - loadLogs(); - } - } - }); - } - - if (goBtn) { - // 前往按钮点击事件 - goBtn.addEventListener('click', () => { - const page = parseInt(pageInput.value); - if (page >= 1 && page <= totalPages) { - currentPage = page; - loadLogs(); - } - }); - } - - // 时间范围切换 - const timeRangeBtns = document.querySelectorAll('.time-range-btn'); - timeRangeBtns.forEach(btn => { - btn.addEventListener('click', () => { - // 更新按钮样式 - timeRangeBtns.forEach(b => { - b.classList.remove('bg-primary', 'text-white'); - b.classList.add('bg-gray-200', 'text-gray-700'); - }); - btn.classList.remove('bg-gray-200', 'text-gray-700'); - btn.classList.add('bg-primary', 'text-white'); - - // 更新图表 - const range = btn.getAttribute('data-range'); - updateLogsChart(range); - }); - }); - - // 刷新按钮事件 - const refreshBtn = document.getElementById('logs-refresh-btn'); - if (refreshBtn) { - refreshBtn.addEventListener('click', () => { - // 重新加载日志 - currentPage = 1; - loadLogs(); - }); - } - - // 排序按钮事件 - const sortHeaders = document.querySelectorAll('th[data-sort]'); - sortHeaders.forEach(header => { - header.addEventListener('click', () => { - const sortField = header.getAttribute('data-sort'); - - // 如果点击的是当前排序字段,则切换排序方向 - if (sortField === currentSortField) { - currentSortDirection = currentSortDirection === 'asc' ? 'desc' : 'asc'; - } else { - // 否则,设置新的排序字段,默认降序 - currentSortField = sortField; - currentSortDirection = 'desc'; - } - - // 更新排序图标 - updateSortIcons(); - - // 重新加载日志 - currentPage = 1; - loadLogs(); - }); - }); -} - -// 更新排序图标 -function updateSortIcons() { - const sortHeaders = document.querySelectorAll('th[data-sort]'); - sortHeaders.forEach(header => { - const sortField = header.getAttribute('data-sort'); - const icon = header.querySelector('i'); - - // 重置所有图标 - icon.className = 'fa fa-sort ml-1 text-xs'; - - // 设置当前排序字段的图标 - if (sortField === currentSortField) { - if (currentSortDirection === 'asc') { - icon.className = 'fa fa-sort-asc ml-1 text-xs'; - } else { - icon.className = 'fa fa-sort-desc ml-1 text-xs'; - } - } - }); -} - -// 加载日志统计数据 -function loadLogsStats() { - // 使用封装的apiRequest函数进行API调用 - apiRequest('/logs/stats') - .then(data => { - if (data && data.error) { - console.error('加载日志统计数据失败:', data.error); - return; - } - - // 更新统计卡片 - document.getElementById('logs-total-queries').textContent = data.totalQueries; - document.getElementById('logs-avg-response-time').textContent = data.avgResponseTime.toFixed(2) + 'ms'; - document.getElementById('logs-active-ips').textContent = data.activeIPs; - - // 计算屏蔽率 - const blockRate = data.totalQueries > 0 ? (data.blockedQueries / data.totalQueries * 100).toFixed(1) : '0'; - document.getElementById('logs-block-rate').textContent = blockRate + '%'; - }) - .catch(error => { - console.error('加载日志统计数据失败:', error); - }); -} - -// 加载日志详情 -function loadLogs() { - // 显示加载状态 - const loadingEl = document.getElementById('logs-loading'); - if (loadingEl) { - loadingEl.classList.remove('hidden'); - } - - // 构建请求URL - let endpoint = `/logs/query?limit=${logsPerPage}&offset=${(currentPage - 1) * logsPerPage}`; - - // 添加过滤条件 - if (currentFilter) { - endpoint += `&result=${currentFilter}`; - } - - // 添加搜索条件 - if (currentSearch) { - endpoint += `&search=${encodeURIComponent(currentSearch)}`; - } - - // 添加排序条件 - if (currentSortField) { - endpoint += `&sort=${currentSortField}&direction=${currentSortDirection}`; - } - - // 使用封装的apiRequest函数进行API调用 - apiRequest(endpoint) - .then(data => { - if (data && data.error) { - console.error('加载日志详情失败:', data.error); - // 隐藏加载状态 - if (loadingEl) { - loadingEl.classList.add('hidden'); - } - return; - } - - // 加载日志总数 - return apiRequest('/logs/count').then(countData => { - return { logs: data, count: countData.count }; - }); - }) - .then(result => { - if (!result || !result.logs) { - console.error('加载日志详情失败: 无效的响应数据'); - // 隐藏加载状态 - if (loadingEl) { - loadingEl.classList.add('hidden'); - } - return; - } - - const logs = result.logs; - const totalLogs = result.count; - - // 计算总页数 - totalPages = Math.ceil(totalLogs / logsPerPage); - - // 更新日志表格 - updateLogsTable(logs); - - // 绑定操作按钮事件 - bindActionButtonsEvents(); - - // 更新分页信息 - updateLogsPagination(); - - // 隐藏加载状态 - if (loadingEl) { - loadingEl.classList.add('hidden'); - } - }) - .catch(error => { - console.error('加载日志详情失败:', error); - - // 隐藏加载状态 - if (loadingEl) { - loadingEl.classList.add('hidden'); - } - }); -} - -// 更新日志表格 -async function updateLogsTable(logs) { - const tableBody = document.getElementById('logs-table-body'); - if (!tableBody) return; - - // 清空表格 - tableBody.innerHTML = ''; - - if (logs.length === 0) { - // 显示空状态 - const emptyRow = document.createElement('tr'); - emptyRow.innerHTML = ` - - -
暂无查询日志
- - `; - tableBody.appendChild(emptyRow); - return; - } - - // 检测是否为移动设备 - const isMobile = window.innerWidth <= 768; - - // 填充表格 - for (const log of logs) { - const row = document.createElement('tr'); - row.className = 'border-b border-gray-100 hover:bg-gray-50 transition-colors'; - - // 格式化时间 - 两行显示,第一行显示时间,第二行显示日期 - const time = new Date(log.timestamp); - const formattedDate = time.toLocaleDateString('zh-CN', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }); - const formattedTime = time.toLocaleTimeString('zh-CN', { - hour: '2-digit', - minute: '2-digit', - second: '2-digit' - }); - - // 根据结果添加不同的背景色 - let rowClass = ''; - switch (log.result) { - case 'blocked': - rowClass = 'bg-red-50'; // 淡红色填充 - break; - case 'allowed': - // 检查是否是规则允许项目 - if (log.blockRule && log.blockRule.includes('allow')) { - rowClass = 'bg-green-50'; // 规则允许项目用淡绿色填充 - } else { - rowClass = ''; // 允许的不填充 - } - break; - default: - rowClass = ''; - } - - // 添加行背景色 - if (rowClass) { - row.classList.add(rowClass); - } - - // 添加被屏蔽或允许显示,并增加颜色 - let statusText = ''; - let statusClass = ''; - switch (log.result) { - case 'blocked': - statusText = '被屏蔽'; - statusClass = 'text-danger'; - break; - case 'allowed': - statusText = '允许'; - statusClass = 'text-success'; - break; - case 'error': - statusText = '错误'; - statusClass = 'text-warning'; - break; - default: - statusText = ''; - statusClass = ''; - } - - // 检查域名是否在跟踪器数据库中 - const trackerInfo = await isDomainInTrackerDatabase(log.domain); - const isTracker = trackerInfo !== null; - - // 构建行内容 - 根据设备类型决定显示内容 - // 添加缓存状态显示 - const cacheStatusClass = log.fromCache ? 'text-primary' : 'text-gray-500'; - const cacheStatusText = log.fromCache ? '缓存' : '非缓存'; - - // 检查域名是否被拦截 - const isBlocked = log.result === 'blocked'; - - // 构建跟踪器浮窗内容 - const trackerTooltip = isTracker ? ` -
-
已知跟踪器
-
名称: ${trackerInfo.name}
-
类别: ${trackersDatabase.categories[trackerInfo.categoryId] || '未知'}
- ${trackerInfo.url ? `` : ''} - ${trackerInfo.source ? `
源: ${trackerInfo.source}
` : ''} -
- ` : ''; - - if (isMobile) { - // 移动设备只显示时间和请求信息 - row.innerHTML = ` - -
${formattedTime}
-
${formattedDate}
- - -
- ${log.dnssec ? '' : ''} -
- ${isTracker ? '' : ''} - ${trackerTooltip} -
- ${log.domain} -
-
类型: ${log.queryType}, ${statusText}
-
客户端: ${log.clientIP}
- - `; - } else { - // 桌面设备显示完整信息 - row.innerHTML = ` - -
${formattedTime}
-
${formattedDate}
- - -
${log.clientIP}
-
${log.location || '未知 未知'}
- - -
- ${log.dnssec ? '' : ''} -
- ${isTracker ? '' : ''} - ${trackerTooltip} -
- ${log.domain} -
-
类型: ${log.queryType}, ${statusText}, ${log.fromCache ? '缓存' : '非缓存'}${log.dnssec ? ', DNSSEC' : ''}${log.edns ? ', EDNS' : ''}
-
DNS 服务器: ${log.dnsServer || '无'}, DNSSEC专用: ${log.dnssecServer || '无'}
- - ${log.responseTime}ms - - ${isBlocked ? - `` : - `` - } - - `; - } - - // 添加跟踪器图标悬停事件 - if (isTracker) { - const iconContainer = row.querySelector('.tracker-icon-container'); - const tooltip = iconContainer.querySelector('.tracker-tooltip'); - if (iconContainer && tooltip) { - tooltip.style.display = 'none'; - - iconContainer.addEventListener('mouseenter', () => { - tooltip.style.display = 'block'; - }); - - iconContainer.addEventListener('mouseleave', () => { - tooltip.style.display = 'none'; - }); - } - } - - // 绑定按钮事件 - const blockBtn = row.querySelector('.block-btn'); - if (blockBtn) { - blockBtn.addEventListener('click', (e) => { - e.preventDefault(); - const domain = e.currentTarget.dataset.domain; - blockDomain(domain); - }); - } - - const unblockBtn = row.querySelector('.unblock-btn'); - if (unblockBtn) { - unblockBtn.addEventListener('click', (e) => { - e.preventDefault(); - const domain = e.currentTarget.dataset.domain; - unblockDomain(domain); - }); - } - - // 绑定日志详情点击事件 - row.addEventListener('click', (e) => { - // 如果点击的是按钮,不触发详情弹窗 - if (e.target.closest('button')) { - return; - } - console.log('Row clicked, log object:', log); - showLogDetailModal(log); - }); - - tableBody.appendChild(row); - } -} - -// 更新分页信息 -function updateLogsPagination() { - // 更新页码显示 - document.getElementById('logs-current-page').textContent = currentPage; - document.getElementById('logs-total-pages').textContent = totalPages; - - // 更新页码输入框 - const pageInput = document.getElementById('logs-page-input'); - if (pageInput) { - pageInput.max = totalPages; - pageInput.value = currentPage; - } - - // 更新按钮状态 - const prevBtn = document.getElementById('logs-prev-page'); - const nextBtn = document.getElementById('logs-next-page'); - - if (prevBtn) { - prevBtn.disabled = currentPage === 1; - } - - if (nextBtn) { - nextBtn.disabled = currentPage === totalPages; - } -} - -// 初始化日志图表 -function initLogsChart() { - const ctx = document.getElementById('logs-trend-chart'); - if (!ctx) return; - - // 获取24小时统计数据 - apiRequest('/hourly-stats') - .then(data => { - if (data && data.error) { - console.error('初始化日志图表失败:', data.error); - return; - } - - // 创建图表 - logsChart = new Chart(ctx, { - type: 'line', - data: { - labels: data.labels, - datasets: [{ - label: '查询数', - data: data.data, - borderColor: '#3b82f6', - backgroundColor: 'rgba(59, 130, 246, 0.1)', - tension: 0.4, - fill: true - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { - display: true, - position: 'top' - }, - tooltip: { - mode: 'index', - intersect: false - } - }, - scales: { - y: { - beginAtZero: true, - ticks: { - precision: 0 - } - } - } - } - }); - }) - .catch(error => { - console.error('初始化日志图表失败:', error); - }); -} - -// 更新日志图表 -function updateLogsChart(range) { - if (!logsChart) return; - - let endpoint = ''; - switch (range) { - case '24h': - endpoint = '/hourly-stats'; - break; - case '7d': - endpoint = '/daily-stats'; - break; - case '30d': - endpoint = '/monthly-stats'; - break; - default: - endpoint = '/hourly-stats'; - } - - // 使用封装的apiRequest函数进行API调用 - apiRequest(endpoint) - .then(data => { - if (data && data.error) { - console.error('更新日志图表失败:', data.error); - return; - } - - // 更新图表数据 - logsChart.data.labels = data.labels; - logsChart.data.datasets[0].data = data.data; - logsChart.update(); - }) - .catch(error => { - console.error('更新日志图表失败:', error); - }); -} - -// 建立WebSocket连接 -function connectLogsWebSocket() { - try { - // 构建WebSocket URL - const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - const wsUrl = `${wsProtocol}//${window.location.host}/ws/stats`; - - console.log('正在连接WebSocket:', wsUrl); - - // 创建WebSocket连接 - logsWsConnection = new WebSocket(wsUrl); - - // 连接打开事件 - logsWsConnection.onopen = function() { - console.log('WebSocket连接已建立'); - }; - - // 接收消息事件 - logsWsConnection.onmessage = function(event) { - try { - const data = JSON.parse(event.data); - - if (data.type === 'initial_data' || data.type === 'stats_update') { - console.log('收到实时数据更新'); - // 只更新统计数据,不更新日志详情 - updateLogsStatsFromWebSocket(data.data); - } - } catch (error) { - console.error('处理WebSocket消息失败:', error); - } - }; - - // 连接关闭事件 - logsWsConnection.onclose = function(event) { - console.warn('WebSocket连接已关闭,代码:', event.code); - logsWsConnection = null; - - // 设置重连 - setupLogsReconnect(); - }; - - // 连接错误事件 - logsWsConnection.onerror = function(error) { - console.error('WebSocket连接错误:', error); - }; - - } catch (error) { - console.error('创建WebSocket连接失败:', error); - } -} - -// 设置重连逻辑 -function setupLogsReconnect() { - if (logsWsReconnectTimer) { - return; // 已经有重连计时器在运行 - } - - const reconnectDelay = 5000; // 5秒后重连 - console.log(`将在${reconnectDelay}ms后尝试重新连接WebSocket`); - - logsWsReconnectTimer = setTimeout(() => { - connectLogsWebSocket(); - }, reconnectDelay); -} - -// 从WebSocket更新日志统计数据 -function updateLogsStatsFromWebSocket(stats) { - try { - // 更新统计卡片 - if (stats.dns) { - // 适配不同的数据结构 - const totalQueries = stats.dns.Queries || 0; - const blockedQueries = stats.dns.Blocked || 0; - const allowedQueries = stats.dns.Allowed || 0; - const errorQueries = stats.dns.Errors || 0; - const avgResponseTime = stats.dns.AvgResponseTime || 0; - const activeIPs = stats.activeIPs || Object.keys(stats.dns.SourceIPs || {}).length; - - // 更新统计卡片 - document.getElementById('logs-total-queries').textContent = totalQueries; - document.getElementById('logs-avg-response-time').textContent = avgResponseTime.toFixed(2) + 'ms'; - document.getElementById('logs-active-ips').textContent = activeIPs; - - // 计算屏蔽率 - const blockRate = totalQueries > 0 ? (blockedQueries / totalQueries * 100).toFixed(1) : '0'; - document.getElementById('logs-block-rate').textContent = blockRate + '%'; - } - } catch (error) { - console.error('从WebSocket更新日志统计数据失败:', error); - } -} - -// 拦截域名 -async function blockDomain(domain) { - try { - console.log(`开始拦截域名: ${domain}`); - - // 创建拦截规则,使用AdBlock Plus格式 - const blockRule = `||${domain}^`; - console.log(`创建的拦截规则: ${blockRule}`); - - // 调用API添加拦截规则 - console.log(`调用API添加拦截规则,路径: /shield, 方法: POST`); - const response = await apiRequest('/shield', 'POST', { rule: blockRule }); - - console.log(`API响应:`, response); - - // 处理不同的响应格式 - if (response && (response.success || response.status === 'success')) { - // 重新加载日志,显示更新后的状态 - loadLogs(); - - // 刷新规则列表 - refreshRulesList(); - - // 显示成功通知 - if (typeof window.showNotification === 'function') { - window.showNotification(`已成功拦截域名: ${domain}`, 'success'); - } - } else { - const errorMsg = response ? (response.message || '添加拦截规则失败') : '添加拦截规则失败: 无效的API响应'; - console.error(`拦截域名失败: ${errorMsg}`); - throw new Error(errorMsg); - } - } catch (error) { - console.error('拦截域名失败:', error); - - // 显示错误通知 - if (typeof window.showNotification === 'function') { - window.showNotification(`拦截域名失败: ${error.message}`, 'danger'); - } - } -} - -// 绑定操作按钮事件 -function bindActionButtonsEvents() { - // 绑定拦截按钮事件 - const blockBtns = document.querySelectorAll('.block-btn'); - blockBtns.forEach(btn => { - btn.addEventListener('click', async (e) => { - e.preventDefault(); - const domain = e.currentTarget.dataset.domain; - await blockDomain(domain); - }); - }); - - // 绑定放行按钮事件 - const unblockBtns = document.querySelectorAll('.unblock-btn'); - unblockBtns.forEach(btn => { - btn.addEventListener('click', async (e) => { - e.preventDefault(); - const domain = e.currentTarget.dataset.domain; - await unblockDomain(domain); - }); - }); -} - -// 刷新规则列表 -async function refreshRulesList() { - try { - // 调用API重新加载规则 - const response = await apiRequest('/shield', 'GET'); - - if (response) { - // 处理规则列表响应 - let allRules = []; - if (response && typeof response === 'object') { - // 合并所有类型的规则到一个数组 - if (Array.isArray(response.domainRules)) allRules = allRules.concat(response.domainRules); - if (Array.isArray(response.domainExceptions)) allRules = allRules.concat(response.domainExceptions); - if (Array.isArray(response.regexRules)) allRules = allRules.concat(response.regexRules); - if (Array.isArray(response.regexExceptions)) allRules = allRules.concat(response.regexExceptions); - } - - // 更新规则列表 - if (window.rules) { - rules = allRules; - filteredRules = [...rules]; - - // 更新规则数量统计 - if (window.updateRulesCount && typeof window.updateRulesCount === 'function') { - window.updateRulesCount(rules.length); - } - } - } - } catch (error) { - console.error('刷新规则列表失败:', error); - } -} - -// 放行域名 -async function unblockDomain(domain) { - try { - console.log(`开始放行域名: ${domain}`); - - // 创建放行规则,使用AdBlock Plus格式 - const allowRule = `@@||${domain}^`; - console.log(`创建的放行规则: ${allowRule}`); - - // 调用API添加放行规则 - console.log(`调用API添加放行规则,路径: /shield, 方法: POST`); - const response = await apiRequest('/shield', 'POST', { rule: allowRule }); - - console.log(`API响应:`, response); - - // 处理不同的响应格式 - if (response && (response.success || response.status === 'success')) { - // 重新加载日志,显示更新后的状态 - loadLogs(); - - // 刷新规则列表 - refreshRulesList(); - - // 显示成功通知 - if (typeof window.showNotification === 'function') { - window.showNotification(`已成功放行域名: ${domain}`, 'success'); - } - } else { - const errorMsg = response ? (response.message || '添加放行规则失败') : '添加放行规则失败: 无效的API响应'; - console.error(`放行域名失败: ${errorMsg}`); - throw new Error(errorMsg); - } - } catch (error) { - console.error('放行域名失败:', error); - - // 显示错误通知 - if (typeof window.showNotification === 'function') { - window.showNotification(`放行域名失败: ${error.message}`, 'danger'); - } - } -} - -// 独立的DNS记录格式化函数 -function formatDNSRecords(log, result) { - if (result === 'blocked') return '无'; - - let records = ''; - const sources = [ - log.answers, - log.answer, - log.Records, - log.records, - log.response - ]; - - for (const source of sources) { - if (records) break; - if (!source || source === '无') continue; - - // 处理数组类型 - if (Array.isArray(source)) { - records = source.map(answer => { - const type = answer.type || answer.Type || '未知'; - let value = answer.value || answer.Value || answer.data || answer.Data || '未知'; - const ttl = answer.TTL || answer.ttl || answer.expires || '未知'; - - // 增强的记录值提取逻辑 - if (typeof value === 'string') { - value = value.trim(); - // 处理制表符分隔的格式 - if (value.includes('\t') || value.includes('\\t')) { - const parts = value.replace(/\\t/g, '\t').split('\t'); - if (parts.length >= 4) { - value = parts[parts.length - 1].trim(); - } - } - // 处理JSON格式 - else if (value.startsWith('{') && value.endsWith('}')) { - try { - const parsed = JSON.parse(value); - value = parsed.data || parsed.value || value; - } catch (e) {} - } - } - - return `${type}: ${value} (ttl=${ttl})`; - }).join('\n').trim(); - } - // 处理字符串类型 - else if (typeof source === 'string') { - // 尝试解析为JSON数组 - if (source.startsWith('[') && source.endsWith(']')) { - try { - const parsed = JSON.parse(source); - if (Array.isArray(parsed)) { - records = parsed.map(answer => { - const type = answer.type || answer.Type || '未知'; - let value = answer.value || answer.Value || answer.data || answer.Data || '未知'; - const ttl = answer.TTL || answer.ttl || answer.expires || '未知'; - - if (typeof value === 'string') { - value = value.trim(); - } - - return `${type}: ${value} (ttl=${ttl})`; - }).join('\n').trim(); - } - } catch (e) { - // 解析失败,尝试直接格式化 - records = formatDNSString(source); - } - } else { - // 直接格式化字符串 - records = formatDNSString(source); - } - } - } - - return records || '无解析记录'; -} - -// 格式化DNS字符串记录 -function formatDNSString(str) { - // 处理可能的转义字符并分割行 - const recordLines = str.split(/\r?\n/).map(line => line.replace(/^\s+/, '')).filter(line => line.trim() !== ''); - - return recordLines.map(line => { - // 检查是否已经是标准格式 - if (line.includes(':') && line.includes('(')) { - return line; - } - // 尝试解析为标准DNS格式 - const parts = line.split(/\s+/); - if (parts.length >= 5) { - const type = parts[3]; - const value = parts.slice(4).join(' '); - const ttl = parts[1]; - return `${type}: ${value} (ttl=${ttl})`; - } - // 无法解析,返回原始行但移除前导空格 - return line.replace(/^\s+/, ''); - }).join('\n'); -} - -// 显示日志详情弹窗 -async function showLogDetailModal(log) { - console.log('showLogDetailModal called with log:', JSON.stringify(log, null, 2)); // 输出完整的log对象 - - if (!log) { - console.error('No log data provided!'); - return; - } - - try { - // 安全获取log属性,提供默认值 - const timestamp = log.timestamp ? new Date(log.timestamp) : null; - const dateStr = timestamp ? timestamp.toLocaleDateString() : '未知'; - const timeStr = timestamp ? timestamp.toLocaleTimeString() : '未知'; - const domain = log.domain || '未知'; - const queryType = log.queryType || '未知'; - const result = log.result || '未知'; - const responseTime = log.responseTime || '未知'; - const clientIP = log.clientIP || '未知'; - const location = log.location || '未知'; - const fromCache = log.fromCache || false; - const dnssec = log.dnssec || false; - const edns = log.edns || false; - const dnsServer = log.dnsServer || '无'; - const dnssecServer = log.dnssecServer || '无'; - const blockRule = log.blockRule || '无'; - - // 检查域名是否在跟踪器数据库中 - const trackerInfo = await isDomainInTrackerDatabase(log.domain); - const isTracker = trackerInfo !== null; - - // 获取域名信息 - const domainInfo = await getDomainInfo(domain); - - // 格式化DNS解析记录 - const dnsRecords = formatDNSRecords(log, result); - - // 创建模态框容器 - const modalContainer = document.createElement('div'); - modalContainer.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center p-4 animate-fade-in'; - modalContainer.style.zIndex = '9999'; - - // 创建模态框内容 - const modalContent = document.createElement('div'); - modalContent.className = 'bg-white rounded-xl shadow-2xl w-full max-w-2xl max-h-[90vh] overflow-y-auto animate-slide-in'; - - // 创建标题栏 - const header = document.createElement('div'); - header.className = 'sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex justify-between items-center'; - - const title = document.createElement('h3'); - title.className = 'text-xl font-semibold text-gray-900'; - title.textContent = '日志详情'; - - const closeButton = document.createElement('button'); - closeButton.innerHTML = ''; - closeButton.className = 'text-gray-500 hover:text-gray-700 focus:outline-none transition-colors'; - closeButton.onclick = () => closeModal(); - - header.appendChild(title); - header.appendChild(closeButton); - - // 创建内容区域 - const content = document.createElement('div'); - content.className = 'p-6 space-y-6'; - - // 基本信息部分 - const basicInfo = document.createElement('div'); - basicInfo.className = 'space-y-4'; - - const basicInfoTitle = document.createElement('h4'); - basicInfoTitle.className = 'text-sm font-medium text-gray-700 uppercase tracking-wider'; - basicInfoTitle.textContent = '基本信息'; - - const basicInfoGrid = document.createElement('div'); - basicInfoGrid.className = 'grid grid-cols-1 md:grid-cols-2 gap-4'; - - // 添加基本信息项 - basicInfoGrid.innerHTML = ` -
-
日期
-
${dateStr}
-
-
-
时间
-
${timeStr}
-
-
-
状态
-
- ${result === 'blocked' ? '已拦截' : result === 'allowed' ? '允许' : result} -
-
-
-
域名
-
${domain}
-
-
-
类型
-
${queryType}
-
- `; - - // DNS特性 - const dnsFeatures = document.createElement('div'); - dnsFeatures.className = 'col-span-1 md:col-span-2 space-y-1'; - dnsFeatures.innerHTML = ` -
DNS特性
-
- ${dnssec ? 'DNSSEC ' : ''} - ${edns ? 'EDNS' : ''} - ${!dnssec && !edns ? '无' : ''} -
- `; - - // 域名信息 - const domainInfoDiv = document.createElement('div'); - domainInfoDiv.className = 'col-span-1 md:col-span-2 space-y-1'; - domainInfoDiv.innerHTML = ` -
域名信息
-
- ${domainInfo ? ` -
- ${domainInfo.icon ? `${domainInfo.name}` : ''} - ${domainInfo.name || '未知'} -
-
-
- 类别: - ${domainInfo.categoryName || '未知'} -
-
- 所属公司: - ${domainInfo.company || '未知'} -
-
- ` : '无'} -
- `; - - // 跟踪器信息 - const trackerDiv = document.createElement('div'); - trackerDiv.className = 'col-span-1 md:col-span-2 space-y-1'; - trackerDiv.innerHTML = ` -
跟踪器信息
-
- ${isTracker ? ` -
- - ${trackerInfo.name} (${trackersDatabase.categories[trackerInfo.categoryId] || '未知'}) -
- ` : '无'} -
- `; - - // 解析记录 - const recordsDiv = document.createElement('div'); - recordsDiv.className = 'col-span-1 md:col-span-2 space-y-1'; - recordsDiv.innerHTML = ` -
解析记录
-
${dnsRecords}
- `; - - // DNS服务器 - const dnsServerDiv = document.createElement('div'); - dnsServerDiv.className = 'col-span-1 md:col-span-2 space-y-1'; - dnsServerDiv.innerHTML = ` -
DNS服务器
-
${dnsServer}
- `; - - // DNSSEC专用服务器 - const dnssecServerDiv = document.createElement('div'); - dnssecServerDiv.className = 'col-span-1 md:col-span-2 space-y-1'; - dnssecServerDiv.innerHTML = ` -
DNSSEC专用服务器
-
${dnssecServer}
- `; - - basicInfoGrid.appendChild(dnsFeatures); - basicInfoGrid.appendChild(domainInfoDiv); - basicInfoGrid.appendChild(trackerDiv); - basicInfoGrid.appendChild(recordsDiv); - basicInfoGrid.appendChild(dnsServerDiv); - basicInfoGrid.appendChild(dnssecServerDiv); - - basicInfo.appendChild(basicInfoTitle); - basicInfo.appendChild(basicInfoGrid); - - // 响应细节部分 - const responseDetails = document.createElement('div'); - responseDetails.className = 'space-y-4 pt-4 border-t border-gray-200'; - - const responseDetailsTitle = document.createElement('h4'); - responseDetailsTitle.className = 'text-sm font-medium text-gray-700 uppercase tracking-wider'; - responseDetailsTitle.textContent = '响应细节'; - - // 准备响应细节内容,根据条件添加规则信息 - let responseDetailsHTML = ` -
-
响应时间
-
${responseTime}毫秒
-
-
-
响应代码
-
${getResponseCodeText(log.responseCode)}
-
-
-
缓存状态
-
- ${fromCache ? '缓存' : '非缓存'} -
-
- `; - - // 只有被屏蔽时才显示规则信息 - if (result === 'blocked') { - responseDetailsHTML += ` -
-
规则
-
${blockRule || '-'}
-
- `; - } - - const responseGrid = document.createElement('div'); - responseGrid.className = 'grid grid-cols-1 md:grid-cols-2 gap-4'; - responseGrid.innerHTML = responseDetailsHTML; - - responseDetails.appendChild(responseDetailsTitle); - responseDetails.appendChild(responseGrid); - - // 客户端详情部分 - const clientDetails = document.createElement('div'); - clientDetails.className = 'space-y-4 pt-4 border-t border-gray-200'; - - const clientDetailsTitle = document.createElement('h4'); - clientDetailsTitle.className = 'text-sm font-medium text-gray-700 uppercase tracking-wider'; - clientDetailsTitle.textContent = '客户端详情'; - - const clientIPDiv = document.createElement('div'); - clientIPDiv.className = 'space-y-1'; - clientIPDiv.innerHTML = ` -
IP地址
-
${clientIP} (${location})
- `; - - clientDetails.appendChild(clientDetailsTitle); - clientDetails.appendChild(clientIPDiv); - - // 组装内容 - content.appendChild(basicInfo); - content.appendChild(responseDetails); - content.appendChild(clientDetails); - - // 组装模态框 - modalContent.appendChild(header); - modalContent.appendChild(content); - modalContainer.appendChild(modalContent); - - // 添加到页面 - document.body.appendChild(modalContainer); - - // 关闭模态框函数 - function closeModal() { - modalContainer.classList.add('animate-fade-out'); - modalContent.classList.add('animate-slide-out'); - - // 等待动画结束后移除元素 - setTimeout(() => { - document.body.removeChild(modalContainer); - }, 300); - } - - // 点击外部关闭 - modalContainer.addEventListener('click', (e) => { - if (e.target === modalContainer) { - closeModal(); - } - }); - - // ESC键关闭 - const handleEsc = (e) => { - if (e.key === 'Escape') { - closeModal(); - document.removeEventListener('keydown', handleEsc); - } - }; - document.addEventListener('keydown', handleEsc); - - } catch (error) { - console.error('Error in showLogDetailModal:', error); - - // 显示错误提示 - const errorModal = document.createElement('div'); - errorModal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center p-4 animate-fade-in'; - errorModal.style.zIndex = '9999'; - - const errorContent = document.createElement('div'); - errorContent.className = 'bg-white rounded-xl shadow-2xl p-6 w-full max-w-md animate-slide-in'; - - errorContent.innerHTML = ` -
-

错误

- -
-
- 加载日志详情失败: ${error.message} -
- `; - - errorModal.appendChild(errorContent); - document.body.appendChild(errorModal); - - // 关闭错误模态框函数 - function closeErrorModal() { - errorModal.classList.add('animate-fade-out'); - errorContent.classList.add('animate-slide-out'); - - // 等待动画结束后移除元素 - setTimeout(() => { - document.body.removeChild(errorModal); - }, 300); - } - - // ESC键关闭错误模态框 - const handleErrorEsc = (e) => { - if (e.key === 'Escape') { - closeErrorModal(); - document.removeEventListener('keydown', handleErrorEsc); - } - }; - document.addEventListener('keydown', handleErrorEsc); - } -} - -// 关闭日志详情弹窗 -// 获取响应代码文本 -function getResponseCodeText(rcode) { - const rcodeMap = { - 0: 'NOERROR', - 1: 'FORMERR', - 2: 'SERVFAIL', - 3: 'NXDOMAIN', - 4: 'NOTIMP', - 5: 'REFUSED', - 6: 'YXDOMAIN', - 7: 'YXRRSET', - 8: 'NXRRSET', - 9: 'NOTAUTH', - 10: 'NOTZONE' - }; - return rcodeMap[rcode] || `UNKNOWN(${rcode})`; -} - -function closeLogDetailModal() { - const modal = document.getElementById('log-detail-modal'); - modal.classList.add('hidden'); -} - -// 初始化日志详情弹窗事件 -function initLogDetailModal() { - // 关闭按钮事件 - const closeBtn = document.getElementById('close-log-modal-btn'); - if (closeBtn) { - closeBtn.addEventListener('click', closeLogDetailModal); - } - - // 点击模态框外部关闭 - const modal = document.getElementById('log-detail-modal'); - if (modal) { - modal.addEventListener('click', (e) => { - if (e.target === modal) { - closeLogDetailModal(); - } - }); - } - - // ESC键关闭 - document.addEventListener('keydown', (e) => { - if (e.key === 'Escape') { - closeLogDetailModal(); - } - }); -} - -// 定期更新日志统计数据(备用方案) -setInterval(() => { - // 只有在查询日志页面时才更新 - if (window.location.hash === '#logs') { - loadLogsStats(); - // 不自动更新日志详情,只更新统计数据 - } -}, 30000); // 每30秒更新一次 diff --git a/staticbak/static/js/main.js b/staticbak/static/js/main.js deleted file mode 100644 index ef1daad..0000000 --- a/staticbak/static/js/main.js +++ /dev/null @@ -1,405 +0,0 @@ -// main.js - 主脚本文件 - -// 页面导航功能 -function setupNavigation() { - // 侧边栏菜单项 - const menuItems = document.querySelectorAll('nav a'); - const contentSections = [ - document.getElementById('dashboard-content'), - document.getElementById('shield-content'), - document.getElementById('hosts-content'), - document.getElementById('query-content'), - document.getElementById('logs-content'), - document.getElementById('config-content') - ]; - const pageTitle = document.getElementById('page-title'); - - menuItems.forEach((item, index) => { - item.addEventListener('click', (e) => { - // 允许浏览器自动更新地址栏中的hash,不阻止默认行为 - - // 移动端点击菜单项后自动关闭侧边栏 - if (window.innerWidth < 768) { - closeSidebar(); - } - }); - }); - - // 移动端侧边栏切换 - const toggleSidebar = document.getElementById('toggle-sidebar'); - const closeSidebarBtn = document.getElementById('close-sidebar'); - const sidebar = document.getElementById('mobile-sidebar'); - const sidebarOverlay = document.getElementById('sidebar-overlay'); - - // 打开侧边栏函数 - function openSidebar() { - console.log('Opening sidebar...'); - if (sidebar) { - sidebar.classList.remove('-translate-x-full'); - sidebar.classList.add('translate-x-0'); - } - if (sidebarOverlay) { - sidebarOverlay.classList.remove('hidden'); - sidebarOverlay.classList.add('block'); - } - // 防止页面滚动 - document.body.style.overflow = 'hidden'; - console.log('Sidebar opened successfully'); - } - - // 关闭侧边栏函数 - function closeSidebar() { - console.log('Closing sidebar...'); - if (sidebar) { - sidebar.classList.add('-translate-x-full'); - sidebar.classList.remove('translate-x-0'); - } - if (sidebarOverlay) { - sidebarOverlay.classList.add('hidden'); - sidebarOverlay.classList.remove('block'); - } - // 恢复页面滚动 - document.body.style.overflow = ''; - console.log('Sidebar closed successfully'); - } - - // 切换侧边栏函数 - function toggleSidebarVisibility() { - console.log('Toggling sidebar visibility...'); - console.log('Current sidebar classes:', sidebar ? sidebar.className : 'sidebar not found'); - if (sidebar && sidebar.classList.contains('-translate-x-full')) { - console.log('Sidebar is hidden, opening...'); - openSidebar(); - } else { - console.log('Sidebar is visible, closing...'); - closeSidebar(); - } - } - - // 绑定切换按钮事件 - if (toggleSidebar) { - toggleSidebar.addEventListener('click', toggleSidebarVisibility); - } - - // 绑定关闭按钮事件 - if (closeSidebarBtn) { - closeSidebarBtn.addEventListener('click', closeSidebar); - } - - // 绑定遮罩层点击事件 - if (sidebarOverlay) { - sidebarOverlay.addEventListener('click', closeSidebar); - } - - // 移动端点击菜单项后自动关闭侧边栏 - menuItems.forEach(item => { - item.addEventListener('click', () => { - // 检查是否是移动设备视图 - if (window.innerWidth < 768) { - closeSidebar(); - } - }); - }); - - // 添加键盘事件监听,按ESC键关闭侧边栏 - document.addEventListener('keydown', (e) => { - if (e.key === 'Escape') { - closeSidebar(); - } - }); -} - -// 页面初始化函数 - 根据当前hash值初始化对应页面 -function initPageByHash() { - const hash = window.location.hash.substring(1); - - // 隐藏所有内容区域 - const contentSections = [ - document.getElementById('dashboard-content'), - document.getElementById('shield-content'), - document.getElementById('hosts-content'), - document.getElementById('query-content'), - document.getElementById('logs-content'), - document.getElementById('config-content') - ]; - - contentSections.forEach(section => { - if (section) { - section.classList.add('hidden'); - } - }); - - // 显示当前页面内容 - const currentSection = document.getElementById(`${hash}-content`); - if (currentSection) { - currentSection.classList.remove('hidden'); - } - - // 更新页面标题 - const pageTitle = document.getElementById('page-title'); - if (pageTitle) { - const titles = { - 'dashboard': '仪表盘', - 'shield': '屏蔽管理', - 'hosts': 'Hosts管理', - 'query': 'DNS屏蔽查询', - 'logs': '查询日志', - 'config': '系统设置' - }; - pageTitle.textContent = titles[hash] || '仪表盘'; - } - - // 页面特定初始化 - 使用setTimeout延迟调用,确保所有脚本文件都已加载完成 - if (hash === 'shield') { - setTimeout(() => { - if (typeof initShieldPage === 'function') { - initShieldPage(); - } - }, 0); - } else if (hash === 'hosts') { - setTimeout(() => { - if (typeof initHostsPage === 'function') { - initHostsPage(); - } - }, 0); - } else if (hash === 'logs') { - setTimeout(() => { - if (typeof initLogsPage === 'function') { - initLogsPage(); - } - }, 0); - } else if (hash === 'dashboard') { - setTimeout(() => { - if (typeof loadDashboardData === 'function') { - loadDashboardData(); - } - }, 0); - } -} - -// 初始化函数 -function init() { - // 设置导航 - setupNavigation(); - - // 初始化页面 - initPageByHash(); - - // 添加hashchange事件监听,处理浏览器前进/后退按钮 - window.addEventListener('hashchange', initPageByHash); - - // 定期更新系统状态 - setInterval(updateSystemStatus, 5000); -} - -// 更新系统状态 -function updateSystemStatus() { - fetch('/api/status') - .then(response => response.json()) - .then(data => { - const uptimeElement = document.getElementById('uptime'); - if (uptimeElement) { - uptimeElement.textContent = `正常运行中 | ${formatUptime(data.uptime)}`; - } - }) - .catch(error => { - console.error('更新系统状态失败:', error); - const uptimeElement = document.getElementById('uptime'); - if (uptimeElement) { - uptimeElement.textContent = '连接异常'; - uptimeElement.classList.add('text-danger'); - } - }); -} - -// 格式化运行时间 -function formatUptime(milliseconds) { - // 简化版的格式化,实际使用时需要根据API返回的数据格式调整 - const seconds = Math.floor(milliseconds / 1000); - const minutes = Math.floor(seconds / 60); - const hours = Math.floor(minutes / 60); - const days = Math.floor(hours / 24); - - if (days > 0) { - return `${days}天${hours % 24}小时`; - } else if (hours > 0) { - return `${hours}小时${minutes % 60}分钟`; - } else if (minutes > 0) { - return `${minutes}分钟${seconds % 60}秒`; - } else { - return `${seconds}秒`; - } -} - -// 账户功能 - 下拉菜单、注销和修改密码 -function setupAccountFeatures() { - // 下拉菜单功能 - const accountDropdown = document.getElementById('account-dropdown'); - const accountMenu = document.getElementById('account-menu'); - const changePasswordBtn = document.getElementById('change-password-btn'); - const logoutBtn = document.getElementById('logout-btn'); - const changePasswordModal = document.getElementById('change-password-modal'); - const closeModalBtn = document.getElementById('close-modal-btn'); - const cancelChangePasswordBtn = document.getElementById('cancel-change-password'); - const changePasswordForm = document.getElementById('change-password-form'); - const passwordMismatch = document.getElementById('password-mismatch'); - const newPassword = document.getElementById('new-password'); - const confirmPassword = document.getElementById('confirm-password'); - - // 点击外部关闭下拉菜单 - document.addEventListener('click', (e) => { - if (accountDropdown && !accountDropdown.contains(e.target)) { - accountMenu.classList.add('hidden'); - } - }); - - // 点击账户区域切换下拉菜单 - if (accountDropdown) { - accountDropdown.addEventListener('click', (e) => { - e.stopPropagation(); - accountMenu.classList.toggle('hidden'); - }); - } - - // 打开修改密码模态框 - if (changePasswordBtn) { - changePasswordBtn.addEventListener('click', () => { - accountMenu.classList.add('hidden'); - changePasswordModal.classList.remove('hidden'); - document.body.style.overflow = 'hidden'; - }); - } - - // 关闭修改密码模态框 - function closeModal() { - changePasswordModal.classList.add('hidden'); - document.body.style.overflow = ''; - changePasswordForm.reset(); - passwordMismatch.classList.add('hidden'); - } - - // 绑定关闭模态框事件 - if (closeModalBtn) { - closeModalBtn.addEventListener('click', closeModal); - } - - if (cancelChangePasswordBtn) { - cancelChangePasswordBtn.addEventListener('click', closeModal); - } - - // 点击模态框外部关闭模态框 - if (changePasswordModal) { - changePasswordModal.addEventListener('click', (e) => { - if (e.target === changePasswordModal) { - closeModal(); - } - }); - } - - // 按ESC键关闭模态框 - document.addEventListener('keydown', (e) => { - if (e.key === 'Escape' && !changePasswordModal.classList.contains('hidden')) { - closeModal(); - } - }); - - // 密码匹配验证 - if (newPassword && confirmPassword) { - confirmPassword.addEventListener('input', () => { - if (newPassword.value !== confirmPassword.value) { - passwordMismatch.classList.remove('hidden'); - } else { - passwordMismatch.classList.add('hidden'); - } - }); - - newPassword.addEventListener('input', () => { - if (newPassword.value !== confirmPassword.value) { - passwordMismatch.classList.remove('hidden'); - } else { - passwordMismatch.classList.add('hidden'); - } - }); - } - - // 修改密码表单提交 - if (changePasswordForm) { - changePasswordForm.addEventListener('submit', async (e) => { - e.preventDefault(); - - // 验证密码匹配 - if (newPassword.value !== confirmPassword.value) { - passwordMismatch.classList.remove('hidden'); - return; - } - - const formData = new FormData(changePasswordForm); - const data = { - currentPassword: formData.get('currentPassword'), - newPassword: formData.get('newPassword') - }; - - try { - const response = await fetch('/api/change-password', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(data) - }); - - const result = await response.json(); - - if (response.ok && result.status === 'success') { - // 密码修改成功 - alert('密码修改成功'); - closeModal(); - } else { - // 密码修改失败 - alert(result.error || '密码修改失败'); - } - } catch (error) { - console.error('修改密码失败:', error); - alert('修改密码失败,请稍后重试'); - } - }); - } - - // 注销功能 - if (logoutBtn) { - logoutBtn.addEventListener('click', async () => { - try { - await fetch('/api/logout', { - method: 'POST' - }); - - // 重定向到登录页面 - window.location.href = '/login'; - } catch (error) { - console.error('注销失败:', error); - alert('注销失败,请稍后重试'); - } - }); - } -} - -// 初始化函数 -function init() { - // 设置导航 - setupNavigation(); - - // 设置账户功能 - setupAccountFeatures(); - - // 初始化页面 - initPageByHash(); - - // 添加hashchange事件监听,处理浏览器前进/后退按钮 - window.addEventListener('hashchange', initPageByHash); - - // 定期更新系统状态 - setInterval(updateSystemStatus, 5000); -} - -// 页面加载完成后执行初始化 -window.addEventListener('DOMContentLoaded', init); \ No newline at end of file diff --git a/staticbak/static/js/modules/blacklists.js b/staticbak/static/js/modules/blacklists.js deleted file mode 100644 index 2f1cfb1..0000000 --- a/staticbak/static/js/modules/blacklists.js +++ /dev/null @@ -1,255 +0,0 @@ -// 初始化远程黑名单面板 -function initBlacklistsPanel() { - // 加载远程黑名单列表 - loadBlacklists(); - - // 初始化事件监听器 - initBlacklistsEventListeners(); -} - -// 初始化事件监听器 -function initBlacklistsEventListeners() { - // 添加黑名单按钮 - document.getElementById('add-blacklist').addEventListener('click', addBlacklist); - - // 更新所有黑名单按钮 - document.getElementById('update-all-blacklists').addEventListener('click', updateAllBlacklists); - - // 按Enter键添加黑名单 - document.getElementById('blacklist-url').addEventListener('keypress', function(e) { - if (e.key === 'Enter') { - addBlacklist(); - } - }); -} - -// 加载远程黑名单列表 -function loadBlacklists() { - const tbody = document.getElementById('blacklists-table').querySelector('tbody'); - showLoading(tbody); - - apiRequest('/api/shield/blacklists') - .then(data => { - // 直接渲染返回的blacklists数组 - renderBlacklists(data); - }) - .catch(error => { - console.error('获取远程黑名单列表失败:', error); - showError(tbody, '获取远程黑名单列表失败'); - window.showNotification('获取远程黑名单列表失败', 'error'); - }); -} - -// 渲染远程黑名单表格 -function renderBlacklists(blacklists) { - const tbody = document.getElementById('blacklists-table').querySelector('tbody'); - if (!tbody) return; - - if (!blacklists || blacklists.length === 0) { - showEmpty(tbody, '暂无远程黑名单'); - return; - } - - tbody.innerHTML = ''; - - blacklists.forEach(list => { - addBlacklistToTable(list); - }); - - // 初始化表格排序 - initTableSort('blacklists-table'); - - // 初始化操作按钮监听器 - initBlacklistsActionListeners(); -} - -// 添加黑名单到表格 -function addBlacklistToTable(list) { - const tbody = document.getElementById('blacklists-table').querySelector('tbody'); - const row = document.createElement('tr'); - - const statusClass = list.status === 'success' ? 'status-success' : - list.status === 'error' ? 'status-error' : 'status-pending'; - - const statusText = list.status === 'success' ? '正常' : - list.status === 'error' ? '错误' : '等待中'; - - const lastUpdate = list.lastUpdate ? new Date(list.lastUpdate).toLocaleString() : '从未'; - - row.innerHTML = ` - ${list.name} - ${list.url} - - ${statusText} - - ${list.rulesCount || 0} - ${lastUpdate} - - - - - `; - - tbody.appendChild(row); -} - -// 添加远程黑名单 -function addBlacklist() { - const nameInput = document.getElementById('blacklist-name'); - const urlInput = document.getElementById('blacklist-url'); - - const name = nameInput.value.trim(); - const url = urlInput.value.trim(); - - if (!name) { - window.showNotification('请输入黑名单名称', 'warning'); - nameInput.focus(); - return; - } - - if (!url) { - window.showNotification('请输入黑名单URL', 'warning'); - urlInput.focus(); - return; - } - - // 简单的URL格式验证 - if (!isValidUrl(url)) { - window.showNotification('请输入有效的URL', 'warning'); - urlInput.focus(); - return; - } - - apiRequest('/api/shield/blacklists', 'POST', { name: name, url: url }) - .then(data => { - // 检查响应中是否有status字段 - if (!data || typeof data === 'undefined') { - window.showNotification('远程黑名单添加失败: 无效的响应', 'error'); - return; - } - - if (data.status === 'success') { - window.showNotification('远程黑名单添加成功', 'success'); - nameInput.value = ''; - urlInput.value = ''; - loadBlacklists(); - } else { - window.showNotification(`添加失败: ${data.message || '未知错误'}`, 'error'); - } - }) - .catch(error => { - console.error('添加远程黑名单失败:', error); - window.showNotification('添加远程黑名单失败', 'error'); - }); -} - -// 更新远程黑名单 -function updateBlacklist(id) { - apiRequest(`/api/shield/blacklists/${id}/update`, 'POST') - .then(data => { - // 检查响应中是否有status字段 - if (!data || typeof data === 'undefined') { - window.showNotification('远程黑名单更新失败: 无效的响应', 'error'); - return; - } - - if (data.status === 'success') { - window.showNotification('远程黑名单更新成功', 'success'); - loadBlacklists(); - } else { - window.showNotification(`更新失败: ${data.message || '未知错误'}`, 'error'); - } - }) - .catch(error => { - console.error('更新远程黑名单失败:', error); - window.showNotification('更新远程黑名单失败', 'error'); - }); -} - -// 更新所有远程黑名单 -function updateAllBlacklists() { - confirmAction( - '确定要更新所有远程黑名单吗?这可能需要一些时间。', - () => { - apiRequest('/api/shield/blacklists', 'PUT') - .then(data => { - // 检查响应中是否有status字段 - if (!data || typeof data === 'undefined') { - window.showNotification('所有远程黑名单更新失败: 无效的响应', 'error'); - return; - } - - if (data.status === 'success') { - window.showNotification('所有远程黑名单更新成功', 'success'); - loadBlacklists(); - } else { - window.showNotification(`更新失败: ${data.message || '未知错误'}`, 'error'); - } - }) - .catch(error => { - console.error('更新所有远程黑名单失败:', error); - window.showNotification('更新所有远程黑名单失败', 'error'); - }); - } - ); -} - -// 删除远程黑名单 -function deleteBlacklist(id) { - apiRequest(`/api/shield/blacklists/${id}`, 'DELETE') - .then(data => { - // 检查响应中是否有status字段 - if (!data || typeof data === 'undefined') { - window.showNotification('远程黑名单删除失败: 无效的响应', 'error'); - return; - } - - if (data.status === 'success') { - window.showNotification('远程黑名单删除成功', 'success'); - loadBlacklists(); - } else { - window.showNotification(`删除失败: ${data.message || '未知错误'}`, 'error'); - } - }) - .catch(error => { - console.error('删除远程黑名单失败:', error); - window.showNotification('删除远程黑名单失败', 'error'); - }); -} - -// 为操作按钮添加事件监听器 -function initBlacklistsActionListeners() { - // 更新按钮 - document.querySelectorAll('.update-blacklist').forEach(button => { - button.addEventListener('click', function() { - const id = this.getAttribute('data-id'); - updateBlacklist(id); - }); - }); - - // 删除按钮 - document.querySelectorAll('.delete-blacklist').forEach(button => { - button.addEventListener('click', function() { - const id = this.getAttribute('data-id'); - - confirmAction( - '确定要删除这条远程黑名单吗?', - () => deleteBlacklist(id) - ); - }); - }); -} - -// 验证URL格式 -function isValidUrl(url) { - try { - new URL(url); - return true; - } catch (e) { - return false; - } -} \ No newline at end of file diff --git a/staticbak/static/js/modules/config.js b/staticbak/static/js/modules/config.js deleted file mode 100644 index 3d4e5db..0000000 --- a/staticbak/static/js/modules/config.js +++ /dev/null @@ -1,125 +0,0 @@ -// 初始化配置管理面板 -function initConfigPanel() { - // 加载当前配置 - loadConfig(); - - // 初始化事件监听器 - initConfigEventListeners(); -} - -// 初始化事件监听器 -function initConfigEventListeners() { - // 保存配置按钮 - document.getElementById('save-config').addEventListener('click', saveConfig); - - // 屏蔽方法变更 - document.getElementById('block-method').addEventListener('change', updateCustomBlockIpVisibility); -} - -// 加载当前配置 -function loadConfig() { - apiRequest('/config') - .then(config => { - renderConfig(config); - }) - .catch(error => { - console.error('获取配置失败:', error); - window.showNotification('获取配置失败', 'error'); - }); -} - -// 渲染配置表单 -function renderConfig(config) { - if (!config) return; - - // 设置屏蔽方法 - const blockMethodSelect = document.getElementById('block-method'); - if (config.shield && config.shield.blockMethod) { - blockMethodSelect.value = config.shield.blockMethod; - } - - // 设置自定义屏蔽IP - const customBlockIpInput = document.getElementById('custom-block-ip'); - if (config.shield && config.shield.customBlockIP) { - customBlockIpInput.value = config.shield.customBlockIP; - } - - // 设置远程规则更新间隔 - const updateIntervalInput = document.getElementById('update-interval'); - if (config.shield && config.shield.updateInterval) { - updateIntervalInput.value = config.shield.updateInterval; - } - - // 更新自定义屏蔽IP的可见性 - updateCustomBlockIpVisibility(); -} - -// 更新自定义屏蔽IP输入框的可见性 -function updateCustomBlockIpVisibility() { - const blockMethod = document.getElementById('block-method').value; - const customBlockIpContainer = document.getElementById('custom-block-ip').closest('.form-group'); - - if (blockMethod === 'customIP') { - customBlockIpContainer.style.display = 'block'; - } else { - customBlockIpContainer.style.display = 'none'; - } -} - -// 保存配置 -function saveConfig() { - // 收集表单数据 - const configData = { - shield: { - blockMethod: document.getElementById('block-method').value, - updateInterval: parseInt(document.getElementById('update-interval').value) - } - }; - - // 如果选择了自定义IP,添加到配置中 - if (configData.shield.blockMethod === 'customIP') { - const customBlockIp = document.getElementById('custom-block-ip').value.trim(); - - // 验证自定义IP格式 - if (!isValidIp(customBlockIp)) { - window.showNotification('请输入有效的自定义屏蔽IP', 'warning'); - return; - } - - configData.shield.customBlockIP = customBlockIp; - } - - // 验证更新间隔 - if (isNaN(configData.shield.updateInterval) || configData.shield.updateInterval < 60) { - window.showNotification('更新间隔必须大于等于60秒', 'warning'); - return; - } - - // 保存配置 - apiRequest('/config', 'PUT', configData) - .then(response => { - if (response.success) { - window.showNotification('配置保存成功', 'success'); - - // 由于服务器没有提供重启API,移除重启提示 - // 直接提示用户配置已保存 - } else { - window.showNotification(`保存失败: ${response.message || '未知错误'}`, 'error'); - } - }) - .catch(error => { - console.error('保存配置失败:', error); - window.showNotification('保存配置失败', 'error'); - }); -} - -// 服务重启功能已移除,因为服务器没有提供对应的API端点 - -// 验证IP地址格式 -function isValidIp(ip) { - // 支持IPv4和IPv6简单验证 - const ipv4Regex = /^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/; - const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}$/; - - return ipv4Regex.test(ip) || ipv6Regex.test(ip); -} \ No newline at end of file diff --git a/staticbak/static/js/modules/dashboard.js b/staticbak/static/js/modules/dashboard.js deleted file mode 100644 index 5a15e09..0000000 --- a/staticbak/static/js/modules/dashboard.js +++ /dev/null @@ -1,1220 +0,0 @@ -// 全局变量 -let domainDataCache = { - blocked: null, - resolved: null -}; -let domainUpdateTimer = null; -const DOMAIN_UPDATE_INTERVAL = 5000; // 域名排行更新间隔,设为5秒,比统计数据更新慢一些 - -// 初始化小型图表 - 修复Canvas重用问题 -function initMiniCharts() { - // 获取所有图表容器 - const chartContainers = document.querySelectorAll('.chart-card canvas'); - - // 全局图表实例存储 - window.chartInstances = window.chartInstances || {}; - - chartContainers.forEach(canvas => { - // 获取图表数据属性 - const chartId = canvas.id; - const chartType = canvas.dataset.chartType || 'line'; - const chartData = JSON.parse(canvas.dataset.chartData || '{}'); - - // 设置图表上下文 - const ctx = canvas.getContext('2d'); - - // 销毁已存在的图表实例,避免Canvas重用错误 - if (window.chartInstances[chartId]) { - window.chartInstances[chartId].destroy(); - } - - // 创建新图表 - window.chartInstances[chartId] = new Chart(ctx, { - type: chartType, - data: chartData, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { - display: false - }, - tooltip: { - backgroundColor: 'rgba(0, 0, 0, 0.7)', - padding: 10, - cornerRadius: 4 - } - }, - scales: { - x: { - grid: { - display: false - } - }, - y: { - beginAtZero: true, - grid: { - color: 'rgba(0, 0, 0, 0.05)' - } - } - }, - animation: { - duration: 1000, - easing: 'easeOutQuart' - } - } - }); - }); -} - -// 初始化仪表盘面板 -function initDashboardPanel() { - // 初始化小型图表 - if (typeof initMiniCharts === 'function') { - initMiniCharts(); - } - // 加载统计数据 - loadDashboardData(); - // 启动实时更新 - if (typeof startRealTimeUpdate === 'function') { - startRealTimeUpdate(); - } - // 启动域名排行的独立更新 - startDomainUpdate(); - - // 初始化响应式侧边栏 - initResponsiveSidebar(); -} - -// 初始化响应式侧边栏 -function initResponsiveSidebar() { - // 创建侧边栏切换按钮 - const toggleBtn = document.createElement('button'); - toggleBtn.className = 'sidebar-toggle'; - toggleBtn.innerHTML = ''; - document.body.appendChild(toggleBtn); - - // 侧边栏切换逻辑 - toggleBtn.addEventListener('click', function() { - const sidebar = document.querySelector('.sidebar'); - sidebar.classList.toggle('open'); - - // 更新按钮图标 - const icon = toggleBtn.querySelector('i'); - if (sidebar.classList.contains('open')) { - icon.className = 'fas fa-times'; - } else { - icon.className = 'fas fa-bars'; - } - }); - - // 在侧边栏打开时点击内容区域关闭侧边栏 - const content = document.querySelector('.content'); - content.addEventListener('click', function() { - const sidebar = document.querySelector('.sidebar'); - const toggleBtn = document.querySelector('.sidebar-toggle'); - if (sidebar.classList.contains('open') && window.innerWidth <= 768) { - sidebar.classList.remove('open'); - if (toggleBtn) { - const icon = toggleBtn.querySelector('i'); - icon.className = 'fas fa-bars'; - } - } - }); - - // 窗口大小变化时调整侧边栏状态 - window.addEventListener('resize', function() { - const sidebar = document.querySelector('.sidebar'); - const toggleBtn = document.querySelector('.sidebar-toggle'); - - if (window.innerWidth > 768) { - sidebar.classList.remove('open'); - if (toggleBtn) { - const icon = toggleBtn.querySelector('i'); - icon.className = 'fas fa-bars'; - } - } - }); -} - -// 加载仪表盘数据 -function loadDashboardData() { - // 加载统计卡片数据 - updateStatCards(); - - // 首次加载时获取域名排行数据 - if (!domainDataCache.blocked) { - loadTopBlockedDomains(); - } - if (!domainDataCache.resolved) { - loadTopResolvedDomains(); - } -} - -// 启动域名排行的独立更新 -function startDomainUpdate() { - if (domainUpdateTimer) { - clearInterval(domainUpdateTimer); - } - - // 立即执行一次更新 - updateDomainRankings(); - - // 设置定时器 - domainUpdateTimer = setInterval(() => { - // 仅当当前面板是仪表盘时更新数据 - if (document.getElementById('dashboard') && document.getElementById('dashboard').classList.contains('active')) { - updateDomainRankings(); - } - }, DOMAIN_UPDATE_INTERVAL); -} - -// 停止域名排行更新 -function stopDomainUpdate() { - if (domainUpdateTimer) { - clearInterval(domainUpdateTimer); - domainUpdateTimer = null; - } -} - -// 更新域名排行数据 -function updateDomainRankings() { - // 使用Promise.all并行加载,提高效率 - Promise.all([ - loadTopBlockedDomains(true), - loadTopResolvedDomains(true) - ]).catch(error => { - console.error('更新域名排行数据失败:', error); - }); -} - -// 更新统计卡片数据 -function updateStatCards() { - // 获取所有统计数据 - apiRequest('/api/stats') - .then(data => { - // 更新请求统计 - if (data && data.dns) { - // 屏蔽请求 - const blockedCount = data.dns.Blocked || data.dns.blocked || 0; - smoothUpdateStatCard('blocked-count', blockedCount); - - // 允许请求 - const allowedCount = data.dns.Allowed || data.dns.allowed || 0; - smoothUpdateStatCard('allowed-count', allowedCount); - - // 错误请求 - const errorCount = data.dns.Errors || data.dns.errors || 0; - smoothUpdateStatCard('error-count', errorCount); - - // 总请求数 - const totalCount = blockedCount + allowedCount + errorCount; - smoothUpdateStatCard('total-queries', totalCount); - - // 更新数据历史记录和小型图表 - if (typeof updateDataHistory === 'function') { - updateDataHistory('blocked', blockedCount); - updateDataHistory('query', totalCount); - } - - // 更新小型图表 - if (typeof updateMiniChart === 'function' && typeof dataHistory !== 'undefined') { - updateMiniChart('blocked-chart', dataHistory.blocked); - updateMiniChart('query-chart', dataHistory.query); - } - } else { - // 处理其他可能的数据格式 - const blockedValue = data && (data.Blocked !== undefined ? data.Blocked : (data.blocked !== undefined ? data.blocked : 0)); - const allowedValue = data && (data.Allowed !== undefined ? data.Allowed : (data.allowed !== undefined ? data.allowed : 0)); - const errorValue = data && (data.Errors !== undefined ? data.Errors : (data.errors !== undefined ? data.errors : 0)); - smoothUpdateStatCard('blocked-count', blockedValue); - smoothUpdateStatCard('allowed-count', allowedValue); - smoothUpdateStatCard('error-count', errorValue); - const totalCount = blockedValue + allowedValue + errorValue; - smoothUpdateStatCard('total-queries', totalCount); - } - }) - .catch(error => { - console.error('获取统计数据失败:', error); - }); - - // 获取规则数 - apiRequest('/api/shield') - .then(data => { - let rulesCount = 0; - - // 增强的数据格式处理,确保能正确处理各种返回格式 - if (Array.isArray(data)) { - rulesCount = data.length; - } else if (data && data.rules && Array.isArray(data.rules)) { - rulesCount = data.rules.length; - } else if (data && data.domainRules) { - // 处理可能的规则分类格式 - let domainRulesCount = 0; - let regexRulesCount = 0; - - if (Array.isArray(data.domainRules)) { - domainRulesCount = data.domainRules.length; - } else if (typeof data.domainRules === 'object') { - domainRulesCount = Object.keys(data.domainRules).length; - } - - if (data.regexRules && Array.isArray(data.regexRules)) { - regexRulesCount = data.regexRules.length; - } - - rulesCount = domainRulesCount + regexRulesCount; - } - - // 确保至少显示0而不是-- - smoothUpdateStatCard('rules-count', rulesCount); - - // 更新数据历史记录和小型图表 - if (typeof updateDataHistory === 'function') { - updateDataHistory('rules', rulesCount); - } - - if (typeof updateMiniChart === 'function' && typeof dataHistory !== 'undefined') { - updateMiniChart('rules-chart', dataHistory.rules); - } - }) - .catch(error => { - console.error('获取规则数失败:', error); - // 即使出错也要设置为0,避免显示-- - smoothUpdateStatCard('rules-count', 0); - }); - - // 获取Hosts条目数量 - apiRequest('/api/shield/hosts') - .then(data => { - let hostsCount = 0; - - // 处理各种可能的数据格式 - if (Array.isArray(data)) { - hostsCount = data.length; - } else if (data && data.hosts && Array.isArray(data.hosts)) { - hostsCount = data.hosts.length; - } else if (data && typeof data === 'object' && data !== null) { - // 如果是对象格式,计算键的数量 - hostsCount = Object.keys(data).length; - } - - // 确保至少显示0而不是-- - smoothUpdateStatCard('hosts-count', hostsCount); - - // 更新数据历史记录和小型图表 - if (typeof updateDataHistory === 'function') { - updateDataHistory('hosts', hostsCount); - } - - if (typeof updateMiniChart === 'function' && typeof dataHistory !== 'undefined') { - updateMiniChart('hosts-chart', dataHistory.hosts); - } - }) - .catch(error => { - console.error('获取Hosts数量失败:', error); - // 即使出错也要设置为0,避免显示-- - smoothUpdateStatCard('hosts-count', 0); - }); - - // 获取Hosts条目数 - apiRequest('/api/shield/hosts') - .then(data => { - let hostsCount = 0; - if (Array.isArray(data)) { - hostsCount = data.length; - } else if (data && data.hosts && Array.isArray(data.hosts)) { - hostsCount = data.hosts.length; - } - - smoothUpdateStatCard('hosts-count', hostsCount); - - // 更新数据历史记录和小型图表 - if (typeof updateDataHistory === 'function') { - updateDataHistory('hosts', hostsCount); - } - - if (typeof updateMiniChart === 'function' && typeof dataHistory !== 'undefined') { - updateMiniChart('hosts-chart', dataHistory.hosts); - } - }) - .catch(error => { - console.error('获取Hosts条目数失败:', error); - }); -} - - -// 更新单个统计卡片 -function updateStatCard(elementId, value) { - const element = document.getElementById(elementId); - if (!element) return; - - // 格式化为可读数字 - const formattedValue = formatNumber(value); - - // 更新显示 - element.textContent = formattedValue; - - // 使用全局checkAndAnimate函数检测变化并添加光晕效果 - if (typeof checkAndAnimate === 'function') { - checkAndAnimate(elementId, value); - } -} - -// 平滑更新统计卡片(数字递增动画) -function smoothUpdateStatCard(elementId, newValue) { - const element = document.getElementById(elementId); - if (!element) return; - - // 获取旧值 - const oldValue = previousStats[elementId] || 0; - - // 如果值相同,不更新 - if (newValue === oldValue) return; - - // 如果是初始值,直接更新 - if (oldValue === 0 || oldValue === '--') { - updateStatCard(elementId, newValue); - return; - } - - // 设置动画持续时间 - const duration = 500; // 500ms - const startTime = performance.now(); - - // 动画函数 - function animate(currentTime) { - const elapsedTime = currentTime - startTime; - const progress = Math.min(elapsedTime / duration, 1); - - // 使用缓动函数 - const easeOutQuad = 1 - (1 - progress) * (1 - progress); - - // 计算当前值 - const currentValue = Math.floor(oldValue + (newValue - oldValue) * easeOutQuad); - - // 更新显示 - element.textContent = formatNumber(currentValue); - - // 继续动画 - if (progress < 1) { - requestAnimationFrame(animate); - } else { - // 动画完成,设置最终值 - element.textContent = formatNumber(newValue); - // 添加光晕效果 - element.classList.add('update'); - setTimeout(() => { - element.classList.remove('update'); - }, 1000); - // 更新记录 - previousStats[elementId] = newValue; - } - } - - // 开始动画 - requestAnimationFrame(animate); -} - -// 加载24小时统计数据 -function loadHourlyStats() { - apiRequest('/hourly-stats') - .then(data => { - // 检查数据是否变化,避免不必要的重绘 - if (typeof previousChartData !== 'undefined' && - JSON.stringify(previousChartData) === JSON.stringify(data)) { - return; // 数据未变化,无需更新图表 - } - - previousChartData = JSON.parse(JSON.stringify(data)); - - // 处理不同可能的数据格式 - if (data) { - // 优先处理用户提供的实际数据格式 {data: [], labels: []} - if (data.labels && data.data && Array.isArray(data.labels) && Array.isArray(data.data)) { - // 确保labels和data数组长度一致 - if (data.labels.length === data.data.length) { - // 假设data数组包含的是屏蔽请求数据,允许请求设为0 - renderHourlyChart(data.labels, data.data, Array(data.data.length).fill(0)); - return; - } - } - - // 处理其他可能的数据格式 - if (data.labels && data.blocked && data.allowed) { - // 完整数据格式:分别有屏蔽和允许的数据 - renderHourlyChart(data.labels, data.blocked, data.allowed); - } else if (data.labels && data.data) { - // 简化数据格式:只有一组数据 - renderHourlyChart(data.labels, data.data, Array(data.data.length).fill(0)); - } else { - // 尝试直接使用数据对象的属性 - const hours = []; - const blocked = []; - const allowed = []; - - // 假设数据是按小时组织的对象 - for (const key in data) { - if (data.hasOwnProperty(key)) { - hours.push(key); - // 尝试不同的数据结构访问方式 - if (typeof data[key] === 'object' && data[key] !== null) { - blocked.push(data[key].Blocked || data[key].blocked || 0); - allowed.push(data[key].Allowed || data[key].allowed || 0); - } else { - blocked.push(data[key]); - allowed.push(0); - } - } - } - - // 只在有数据时渲染 - if (hours.length > 0) { - renderHourlyChart(hours, blocked, allowed); - } - } - } - }) - .catch(error => { - console.error('获取24小时统计失败:', error); - // 显示默认空数据,避免图表区域空白 - const emptyHours = Array.from({length: 24}, (_, i) => `${i}:00`); - const emptyData = Array(24).fill(0); - renderHourlyChart(emptyHours, emptyData, emptyData); - }); -} - -// 渲染24小时统计图表 - 使用ECharts重新设计 -function renderHourlyChart(hours, blocked, allowed) { - const chartContainer = document.getElementById('hourly-chart'); - if (!chartContainer) return; - - // 销毁现有ECharts实例 - if (window.hourlyChart) { - window.hourlyChart.dispose(); - } - - // 创建ECharts实例 - window.hourlyChart = echarts.init(chartContainer); - - // 计算24小时内的最大请求数,为Y轴设置合适的上限 - const maxRequests = Math.max(...blocked, ...allowed); - const yAxisMax = maxRequests > 0 ? Math.ceil(maxRequests * 1.2) : 10; - - // 设置ECharts配置 - const option = { - title: { - text: '24小时请求统计', - left: 'center', - textStyle: { - fontSize: 16, - fontWeight: 'normal' - } - }, - tooltip: { - trigger: 'axis', - backgroundColor: 'rgba(255, 255, 255, 0.95)', - borderColor: '#ddd', - borderWidth: 1, - textStyle: { - color: '#333' - }, - formatter: function(params) { - let result = params[0].name + '
'; - params.forEach(param => { - result += param.marker + param.seriesName + ': ' + param.value + '
'; - }); - return result; - } - }, - legend: { - data: ['屏蔽请求', '允许请求'], - top: '10%', - textStyle: { - color: '#666' - } - }, - grid: { - left: '3%', - right: '4%', - bottom: '10%', - top: '25%', - containLabel: true - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: hours, - axisLabel: { - color: '#666', - interval: 1, // 每隔一个小时显示一个标签,避免拥挤 - rotate: 30 // 标签旋转30度,提高可读性 - }, - axisLine: { - lineStyle: { - color: '#ddd' - } - }, - axisTick: { - show: false - } - }, - yAxis: { - type: 'value', - min: 0, - max: yAxisMax, - axisLabel: { - color: '#666', - formatter: '{value}' - }, - axisLine: { - lineStyle: { - color: '#ddd' - } - }, - splitLine: { - lineStyle: { - color: '#f0f0f0', - type: 'dashed' - } - } - }, - series: [ - { - name: '屏蔽请求', - type: 'line', - smooth: true, // 平滑曲线 - symbol: 'circle', // 拐点形状 - symbolSize: 6, // 拐点大小 - data: blocked, - itemStyle: { - color: '#e74c3c' - }, - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { offset: 0, color: 'rgba(231, 76, 60, 0.3)' }, - { offset: 1, color: 'rgba(231, 76, 60, 0.05)' } - ]) - }, - emphasis: { - focus: 'series', - itemStyle: { - borderWidth: 2, - borderColor: '#fff', - shadowBlur: 10, - shadowColor: 'rgba(231, 76, 60, 0.5)' - } - }, - animationDuration: 800, - animationEasing: 'cubicOut' - }, - { - name: '允许请求', - type: 'line', - smooth: true, - symbol: 'circle', - symbolSize: 6, - data: allowed, - itemStyle: { - color: '#2ecc71' - }, - areaStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { offset: 0, color: 'rgba(46, 204, 113, 0.3)' }, - { offset: 1, color: 'rgba(46, 204, 113, 0.05)' } - ]) - }, - emphasis: { - focus: 'series', - itemStyle: { - borderWidth: 2, - borderColor: '#fff', - shadowBlur: 10, - shadowColor: 'rgba(46, 204, 113, 0.5)' - } - }, - animationDuration: 800, - animationEasing: 'cubicOut' - } - ], - // 添加数据提示功能 - toolbox: { - feature: { - dataZoom: { - yAxisIndex: 'none' - }, - dataView: { - readOnly: false - }, - magicType: { - type: ['line', 'bar'] - }, - restore: {}, - saveAsImage: {} - }, - top: '15%' - }, - // 添加数据缩放功能 - dataZoom: [ - { - type: 'inside', - start: 0, - end: 100 - }, - { - start: 0, - end: 100, - handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23.1h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', - handleSize: '80%', - handleStyle: { - color: '#fff', - shadowBlur: 3, - shadowColor: 'rgba(0, 0, 0, 0.6)', - shadowOffsetX: 2, - shadowOffsetY: 2 - } - } - ] - }; - - // 应用配置项 - window.hourlyChart.setOption(option); - - // 添加窗口大小变化时的自适应 - window.addEventListener('resize', function() { - if (window.hourlyChart) { - window.hourlyChart.resize(); - } - }); -} - -// 加载请求类型分布 - 注意:后端可能没有这个API,暂时注释掉 -function loadRequestsDistribution() { - // 后端没有对应的API路由,暂时跳过 - console.log('请求类型分布API暂不可用'); - return Promise.resolve() - .then(data => { - // 检查数据是否变化,避免不必要的重绘 - if (typeof previousFullData !== 'undefined' && - JSON.stringify(previousFullData) === JSON.stringify(data)) { - return; // 数据未变化,无需更新图表 - } - - previousFullData = JSON.parse(JSON.stringify(data)); - - // 构造饼图所需的数据,支持多种数据格式 - const labels = ['允许请求', '屏蔽请求', '错误请求']; - let requestData = [0, 0, 0]; // 默认值 - - if (data) { - // 尝试多种可能的数据结构 - if (data.dns) { - // 主要数据结构 - requestData = [ - data.dns.Allowed || data.dns.allowed || 0, - data.dns.Blocked || data.dns.blocked || 0, - data.dns.Errors || data.dns.errors || 0 - ]; - } else if (data.Allowed !== undefined || data.Blocked !== undefined) { - // 直接在顶级对象中 - requestData = [ - data.Allowed || data.allowed || 0, - data.Blocked || data.blocked || 0, - data.Errors || data.errors || 0 - ]; - } else if (data.requests) { - // 可能在requests属性中 - requestData = [ - data.requests.Allowed || data.requests.allowed || 0, - data.requests.Blocked || data.requests.blocked || 0, - data.requests.Errors || data.requests.errors || 0 - ]; - } - } - - // 渲染图表,即使数据全为0也渲染,避免空白 - renderRequestsPieChart(labels, requestData); - }) - .catch(error => { - console.error('获取请求类型分布失败:', error); - // 显示默认空数据的图表 - const labels = ['允许请求', '屏蔽请求', '错误请求']; - const defaultData = [0, 0, 0]; - renderRequestsPieChart(labels, defaultData); - }); -} - -// 渲染请求类型饼图 -function renderRequestsPieChart(labels, data) { - const ctx = document.getElementById('requests-pie-chart'); - if (!ctx) return; - - // 销毁现有图表 - if (window.requestsPieChart) { - window.requestsPieChart.destroy(); - } - - // 创建新图表 - window.requestsPieChart = new Chart(ctx, { - type: 'doughnut', - data: { - labels: labels, - datasets: [{ - data: data, - backgroundColor: [ - '#2ecc71', // 允许 - '#e74c3c', // 屏蔽 - '#f39c12', // 错误 - '#9b59b6' // 其他 - ], - borderWidth: 2, - borderColor: '#fff' - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - legend: { - position: 'right', - }, - tooltip: { - callbacks: { - label: function(context) { - const label = context.label || ''; - const value = context.raw || 0; - const total = context.dataset.data.reduce((a, b) => a + b, 0); - const percentage = ((value / total) * 100).toFixed(1); - return `${label}: ${value} (${percentage}%)`; - } - } - } - }, - cutout: '60%', - animation: { - duration: 500 // 快速动画,提升实时更新体验 - } - } - }); -} - -// 辅助函数:深度比较两个对象是否相等 -function isEqual(obj1, obj2) { - // 处理null或undefined情况 - if (obj1 === obj2) return true; - if (obj1 == null || obj2 == null) return false; - - // 确保都是数组 - if (!Array.isArray(obj1) || !Array.isArray(obj2)) return false; - if (obj1.length !== obj2.length) return false; - - // 比较数组中每个元素 - for (let i = 0; i < obj1.length; i++) { - const a = obj1[i]; - const b = obj2[i]; - - // 比较域名和计数 - if (a.domain !== b.domain || a.count !== b.count) { - return false; - } - } - - return true; -} - -// 加载最常屏蔽的域名 -function loadTopBlockedDomains(isUpdate = false) { - // 首先获取表格元素并显示加载状态 - const topBlockedTable = document.getElementById('top-blocked-table'); - const tbody = topBlockedTable ? topBlockedTable.querySelector('tbody') : null; - - // 非更新操作时显示加载状态 - if (tbody && !isUpdate) { - // 显示加载中状态 - tbody.innerHTML = `加载中...`; - } - - return apiRequest('/api/top-blocked') - .then(data => { - // 处理多种可能的数据格式,特别优化对用户提供格式的支持 - let processedData = []; - - if (Array.isArray(data)) { - // 数组格式:直接使用,并过滤出有效的域名数据 - processedData = data.filter(item => item && (item.domain || item.name || item.Domain || item.Name) && (item.count !== undefined || item.Count !== undefined || item.hits !== undefined || item.Hits !== undefined)); - } else if (data && data.domains && Array.isArray(data.domains)) { - // 嵌套在domains属性中 - processedData = data.domains; - } else if (data && typeof data === 'object') { - // 对象格式:转换为数组 - processedData = Object.keys(data).map(key => ({ - domain: key, - count: data[key] - })); - } - - // 计算最大值用于百分比计算 - if (processedData.length > 0) { - const maxCount = Math.max(...processedData.map(item => { - return item.count !== undefined ? item.count : - (item.Count !== undefined ? item.Count : - (item.hits !== undefined ? item.hits : - (item.Hits !== undefined ? item.Hits : 0))); - })); - // 为每个项目添加百分比 - processedData.forEach(item => { - const count = item.count !== undefined ? item.count : - (item.Count !== undefined ? item.Count : - (item.hits !== undefined ? item.hits : - (item.Hits !== undefined ? item.Hits : 0))); - item.percentage = maxCount > 0 ? Math.round((count / maxCount) * 100) : 0; - }); - } - - // 数据变化检测 - const hasDataChanged = !isEqual(domainDataCache.blocked, processedData); - - // 只在数据发生变化或不是更新操作时重新渲染 - if (hasDataChanged || !isUpdate) { - // 更新缓存 - domainDataCache.blocked = JSON.parse(JSON.stringify(processedData)); - // 渲染最常屏蔽的域名表格 - smoothRenderTable('top-blocked-table', processedData, renderDomainRow); - } - }) - .catch(error => { - console.error('获取最常屏蔽域名失败:', error); - // 显示默认空数据而不是错误消息,保持界面一致性 - const tbody = document.getElementById('top-blocked-table').querySelector('tbody'); - if (tbody) { - showEmpty(tbody, '获取数据失败'); - } - - // 使用全局通知功能 - if (typeof showNotification === 'function') { - showNotification('danger', '获取最常屏蔽域名失败'); - } - }); -} - -// 加载最常解析的域名 -function loadTopResolvedDomains(isUpdate = false) { - // 首先获取表格元素 - const topResolvedTable = document.getElementById('top-resolved-table'); - const tbody = topResolvedTable ? topResolvedTable.querySelector('tbody') : null; - - // 非更新操作时显示加载状态 - if (tbody && !isUpdate) { - // 显示加载中状态 - tbody.innerHTML = `加载中...`; - } - - return apiRequest('/api/top-resolved') - .then(data => { - // 处理多种可能的数据格式 - let processedData = []; - - if (Array.isArray(data)) { - // 数组格式:直接使用 - processedData = data; - } else if (data && data.domains && Array.isArray(data.domains)) { - // 嵌套在domains属性中 - processedData = data.domains; - } else if (data && typeof data === 'object') { - // 对象格式:转换为数组 - processedData = Object.keys(data).map(key => ({ - domain: key, - count: data[key] - })); - } - - // 计算最大值用于百分比计算 - if (processedData.length > 0) { - const maxCount = Math.max(...processedData.map(item => { - return item.count !== undefined ? item.count : - (item.Count !== undefined ? item.Count : - (item.hits !== undefined ? item.hits : - (item.Hits !== undefined ? item.Hits : 0))); - })); - // 为每个项目添加百分比 - processedData.forEach(item => { - const count = item.count !== undefined ? item.count : - (item.Count !== undefined ? item.Count : - (item.hits !== undefined ? item.hits : - (item.Hits !== undefined ? item.Hits : 0))); - item.percentage = maxCount > 0 ? Math.round((count / maxCount) * 100) : 0; - }); - } - - // 数据变化检测 - const hasDataChanged = !isEqual(domainDataCache.resolved, processedData); - - // 只在数据发生变化或不是更新操作时重新渲染 - if (hasDataChanged || !isUpdate) { - // 更新缓存 - domainDataCache.resolved = JSON.parse(JSON.stringify(processedData)); - // 渲染最常解析的域名表格 - smoothRenderTable('top-resolved-table', processedData, renderDomainRow); - } - }) - .catch(error => { - console.error('获取最常解析域名失败:', error); - // 显示默认空数据而不是错误消息,保持界面一致性 - const tbody = document.getElementById('top-resolved-table').querySelector('tbody'); - if (tbody) { - showEmpty(tbody, '暂无解析记录'); - } - - // 使用全局通知功能 - if (typeof showNotification === 'function') { - showNotification('danger', '获取最常解析域名失败'); - } - }); -} - -// 渲染域名行 -function renderDomainRow(item, index) { - if (!item) return null; - - // 支持不同的字段名和格式 - const domainName = item.domain || item.name || item.Domain || item.Name || '未知域名'; - const count = item.count !== undefined ? item.count : - (item.Count !== undefined ? item.Count : - (item.hits !== undefined ? item.hits : - (item.Hits !== undefined ? item.Hits : 0))); - const percentage = item.percentage || 0; - - const row = document.createElement('tr'); - row.className = 'fade-in'; // 添加淡入动画类 - row.dataset.domain = domainName; - row.dataset.count = count; - row.dataset.percentage = percentage; - - // 为不同类型的排行使用不同的进度条颜色 - let barColor = '#3498db'; // 默认蓝色 - if (item.domain && item.domain.includes('microsoft.com')) { - barColor = '#2ecc71'; // 绿色 - } else if (item.domain && item.domain.includes('tencent.com')) { - barColor = '#e74c3c'; // 红色 - } - - row.innerHTML = ` - ${domainName} - -
${formatNumber(count)}
-
${percentage}%
-
-
-
- - `; - - // 设置动画延迟,创建级联效果 - row.style.animationDelay = `${index * 50}ms`; - - return row; -} - -// 平滑渲染表格数据 -function smoothRenderTable(tableId, newData, rowRenderer) { - const table = document.getElementById(tableId); - const tbody = table ? table.querySelector('tbody') : null; - if (!tbody) return; - - // 添加过渡类,用于CSS动画支持 - tbody.classList.add('table-transition'); - - if (!newData || newData.length === 0) { - showEmpty(tbody, '暂无数据记录'); - // 移除过渡类 - setTimeout(() => tbody.classList.remove('table-transition'), 300); - return; - } - - // 创建映射以提高查找效率 - const oldRows = Array.from(tbody.querySelectorAll('tr')); - const rowMap = new Map(); - - oldRows.forEach(row => { - if (!row.querySelector('td:first-child')) return; - const key = row.dataset.domain || row.querySelector('td:first-child').textContent; - rowMap.set(key, row); - }); - - // 准备新的数据行 - const newRows = []; - const updatedRows = new Set(); - - // 处理每一条新数据 - newData.forEach((item, index) => { - const key = item.domain || item.name || item.Domain || item.Name || '未知域名'; - - if (rowMap.has(key)) { - // 数据项已存在,更新它 - const existingRow = rowMap.get(key); - const oldCount = parseInt(existingRow.dataset.count) || 0; - const count = item.count !== undefined ? item.count : - (item.Count !== undefined ? item.Count : - (item.hits !== undefined ? item.hits : - (item.Hits !== undefined ? item.Hits : 0))); - - // 更新数据属性 - existingRow.dataset.count = count; - - // 添加高亮效果,用于CSS过渡 - existingRow.classList.add('table-row-highlight'); - setTimeout(() => { - existingRow.classList.remove('table-row-highlight'); - }, 1000); - - // 如果计数变化,应用平滑更新 - if (oldCount !== count) { - const countCell = existingRow.querySelector('.count-cell'); - if (countCell) { - smoothUpdateNumber(countCell, oldCount, count); - } - } - - // 更新位置 - existingRow.style.animationDelay = `${index * 50}ms`; - newRows.push(existingRow); - updatedRows.add(key); - } else { - // 新数据项,创建新行 - const newRow = rowRenderer(item, index); - if (newRow) { - // 添加淡入动画类 - newRow.classList.add('table-row-fade-in'); - // 先设置透明度为0,避免在错误位置闪烁 - newRow.style.opacity = '0'; - newRows.push(newRow); - } - } - }); - - // 移除不再存在的数据行 - oldRows.forEach(row => { - if (!row.querySelector('td:first-child')) return; - const key = row.dataset.domain || row.querySelector('td:first-child').textContent; - if (!updatedRows.has(key)) { - // 添加淡出动画 - row.classList.add('table-row-fade-out'); - setTimeout(() => { - if (row.parentNode === tbody) { - tbody.removeChild(row); - } - }, 300); - } - }); - - // 批量更新表格内容,减少重排 - requestAnimationFrame(() => { - // 保留未移除的行并按新顺序插入 - const fragment = document.createDocumentFragment(); - - newRows.forEach(row => { - // 如果是新行,添加到文档片段 - if (!row.parentNode || row.parentNode !== tbody) { - fragment.appendChild(row); - } - // 如果是已有行,移除它以便按新顺序重新插入 - else if (tbody.contains(row)) { - tbody.removeChild(row); - fragment.appendChild(row); - } - }); - - // 将文档片段添加到表格 - tbody.appendChild(fragment); - - // 触发动画 - setTimeout(() => { - newRows.forEach(row => { - row.style.opacity = '1'; - }); - - // 移除过渡类和动画类 - setTimeout(() => { - tbody.querySelectorAll('.table-row-fade-in').forEach(row => { - row.classList.remove('table-row-fade-in'); - }); - tbody.classList.remove('table-transition'); - }, 300); - }, 10); - - // 初始化表格排序 - if (typeof initTableSort === 'function') { - initTableSort(tableId); - } - }); -} - -// 平滑更新数字 -function smoothUpdateNumber(element, oldValue, newValue) { - // 如果值相同,不更新 - if (oldValue === newValue || !element) return; - - // 根据数值差动态调整持续时间 - const valueDiff = Math.abs(newValue - oldValue); - const baseDuration = 400; - const maxDuration = 1000; - // 数值变化越大,动画时间越长,但不超过最大值 - const duration = Math.min(baseDuration + Math.log10(valueDiff + 1) * 200, maxDuration); - - const startTime = performance.now(); - - function animate(currentTime) { - const elapsedTime = currentTime - startTime; - const progress = Math.min(elapsedTime / duration, 1); - - // 使用easeOutQuart缓动函数,使动画更自然 - let easeOutProgress; - if (progress < 1) { - // 四阶缓动函数:easeOutQuart - easeOutProgress = 1 - Math.pow(1 - progress, 4); - } else { - easeOutProgress = 1; - } - - // 根据不同的数值范围使用不同的插值策略 - let currentValue; - if (valueDiff < 10) { - // 小数值变化,使用线性插值 - currentValue = Math.floor(oldValue + (newValue - oldValue) * easeOutProgress); - } else if (valueDiff < 100) { - // 中等数值变化,使用四舍五入 - currentValue = Math.round(oldValue + (newValue - oldValue) * easeOutProgress); - } else { - // 大数值变化,使用更平滑的插值 - currentValue = Math.floor(oldValue + (newValue - oldValue) * easeOutProgress); - } - - // 更新显示 - element.textContent = formatNumber(currentValue); - - // 添加微小的缩放动画效果 - const scaleFactor = 1 + 0.05 * Math.sin(progress * Math.PI); - element.style.transform = `scale(${scaleFactor})`; - - // 继续动画 - if (progress < 1) { - requestAnimationFrame(animate); - } else { - // 动画完成 - element.textContent = formatNumber(newValue); - // 重置缩放 - element.style.transform = 'scale(1)'; - - // 触发最终的高亮效果 - element.classList.add('number-update-complete'); - setTimeout(() => { - element.classList.remove('number-update-complete'); - }, 300); - } - } - - // 重置元素样式 - element.style.transform = 'scale(1)'; - // 开始动画 - requestAnimationFrame(animate); -} \ No newline at end of file diff --git a/staticbak/static/js/modules/hosts.js b/staticbak/static/js/modules/hosts.js deleted file mode 100644 index 7c0f374..0000000 --- a/staticbak/static/js/modules/hosts.js +++ /dev/null @@ -1,308 +0,0 @@ -// 初始化Hosts面板 -function initHostsPanel() { - // 加载Hosts列表 - loadHosts(); - - // 初始化事件监听器 - initHostsEventListeners(); -} - -// 初始化事件监听器 -function initHostsEventListeners() { - // 添加Hosts按钮 - document.getElementById('add-hosts').addEventListener('click', addHostsEntry); - - // Hosts过滤 - document.getElementById('hosts-filter').addEventListener('input', filterHosts); - - // 按Enter键添加Hosts - document.getElementById('hosts-domain').addEventListener('keypress', function(e) { - if (e.key === 'Enter') { - addHostsEntry(); - } - }); -} - -// 加载Hosts列表 -function loadHosts() { - const tbody = document.getElementById('hosts-table').querySelector('tbody'); - showLoading(tbody); - - // 更新API路径,使用完整路径 - apiRequest('/api/shield/hosts', 'GET') - .then(data => { - // 处理不同格式的响应数据 - let hostsData; - if (Array.isArray(data)) { - hostsData = data; - } else if (data && data.hosts) { - hostsData = data.hosts; - } else { - hostsData = []; - } - - renderHosts(hostsData); - - // 更新Hosts数量统计 - if (window.updateHostsCount && typeof window.updateHostsCount === 'function') { - window.updateHostsCount(hostsData.length); - } - }) - .catch(error => { - console.error('获取Hosts列表失败:', error); - - if (tbody) { - tbody.innerHTML = '' + - '
' + - '
' + - '
加载失败
' + - '
无法获取Hosts列表,请稍后重试
' + - '
' + - ''; - } - - if (typeof window.showNotification === 'function') { - window.showNotification('获取Hosts列表失败', 'danger'); - } - }); -} - -// 渲染Hosts表格 -function renderHosts(hosts) { - const tbody = document.getElementById('hosts-table').querySelector('tbody'); - if (!tbody) return; - - if (!hosts || hosts.length === 0) { - // 使用更友好的空状态显示 - tbody.innerHTML = '' + - '
' + - '
' + - '
暂无Hosts条目
' + - '
添加自定义Hosts条目以控制DNS解析
' + - '
' + - ''; - return; - } - - tbody.innerHTML = ''; - - hosts.forEach(entry => { - addHostsToTable(entry.ip, entry.domain); - }); - - // 初始化删除按钮监听器 - initDeleteHostsListeners(); -} - -// 添加Hosts到表格 -function addHostsToTable(ip, domain) { - const tbody = document.getElementById('hosts-table').querySelector('tbody'); - const row = document.createElement('tr'); - - row.innerHTML = ` - ${ip} - ${domain} - - - - `; - - // 添加行动画效果 - row.style.opacity = '0'; - row.style.transform = 'translateY(10px)'; - tbody.appendChild(row); - - // 使用requestAnimationFrame确保动画平滑 - requestAnimationFrame(() => { - row.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; - row.style.opacity = '1'; - row.style.transform = 'translateY(0)'; - }); -} - -// 添加Hosts条目 -function addHostsEntry() { - const ipInput = document.getElementById('hosts-ip'); - const domainInput = document.getElementById('hosts-domain'); - - const ip = ipInput.value.trim(); - const domain = domainInput.value.trim(); - - if (!ip) { - if (typeof window.showNotification === 'function') { - window.showNotification('请输入IP地址', 'warning'); - } - ipInput.focus(); - return; - } - - if (!domain) { - if (typeof window.showNotification === 'function') { - window.showNotification('请输入域名', 'warning'); - } - domainInput.focus(); - return; - } - - // 简单的IP地址格式验证 - if (!isValidIp(ip)) { - if (typeof window.showNotification === 'function') { - window.showNotification('请输入有效的IP地址', 'warning'); - } - ipInput.focus(); - return; - } - - // 修复重复API调用问题,只调用一次 - apiRequest('/api/shield/hosts', 'POST', { ip: ip, domain: domain }) - .then(data => { - // 处理不同的响应格式 - if (data.success || data.status === 'success') { - if (typeof window.showNotification === 'function') { - window.showNotification('Hosts条目添加成功', 'success'); - } - - // 清空输入框并聚焦到域名输入 - ipInput.value = ''; - domainInput.value = ''; - domainInput.focus(); - - // 重新加载Hosts列表 - loadHosts(); - - // 触发数据刷新事件 - if (typeof window.triggerDataRefresh === 'function') { - window.triggerDataRefresh('hosts'); - } - } else { - if (typeof window.showNotification === 'function') { - window.showNotification(`添加失败: ${data.message || '未知错误'}`, 'danger'); - } - } - }) - .catch(error => { - console.error('添加Hosts条目失败:', error); - if (typeof window.showNotification === 'function') { - window.showNotification('添加Hosts条目失败', 'danger'); - } - }); -} - -// 删除Hosts条目 -function deleteHostsEntry(ip, domain) { - // 找到要删除的行并添加删除动画 - const rows = document.querySelectorAll('#hosts-table tbody tr'); - let targetRow = null; - - rows.forEach(row => { - if (row.cells[0].textContent === ip && row.cells[1].textContent === domain) { - targetRow = row; - } - }); - - if (targetRow) { - targetRow.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; - targetRow.style.opacity = '0'; - targetRow.style.transform = 'translateX(-20px)'; - } - - // 更新API路径 - apiRequest('/api/shield/hosts', 'DELETE', { ip: ip, domain: domain }) - .then(data => { - // 处理不同的响应格式 - if (data.success || data.status === 'success') { - // 等待动画完成后重新加载列表 - setTimeout(() => { - if (typeof window.showNotification === 'function') { - window.showNotification('Hosts条目删除成功', 'success'); - } - loadHosts(); - - // 触发数据刷新事件 - if (typeof window.triggerDataRefresh === 'function') { - window.triggerDataRefresh('hosts'); - } - }, 300); - } else { - // 恢复行样式 - if (targetRow) { - targetRow.style.opacity = '1'; - targetRow.style.transform = 'translateX(0)'; - } - - if (typeof window.showNotification === 'function') { - window.showNotification(`删除失败: ${data.message || '未知错误'}`, 'danger'); - } - } - }) - .catch(error => { - // 恢复行样式 - if (targetRow) { - targetRow.style.opacity = '1'; - targetRow.style.transform = 'translateX(0)'; - } - - console.error('删除Hosts条目失败:', error); - if (typeof window.showNotification === 'function') { - window.showNotification('删除Hosts条目失败', 'danger'); - } - }); -} - -// 过滤Hosts -function filterHosts() { - const filterText = document.getElementById('hosts-filter').value.toLowerCase(); - const rows = document.querySelectorAll('#hosts-table tbody tr'); - - rows.forEach(row => { - const ip = row.cells[0].textContent.toLowerCase(); - const domain = row.cells[1].textContent.toLowerCase(); - - row.style.display = (ip.includes(filterText) || domain.includes(filterText)) ? '' : 'none'; - }); -} - -// 为删除按钮添加事件监听器 -function initDeleteHostsListeners() { - document.querySelectorAll('.delete-hosts').forEach(button => { - button.addEventListener('click', function() { - const ip = this.getAttribute('data-ip'); - const domain = this.getAttribute('data-domain'); - - // 使用标准confirm对话框 - if (confirm(`确定要删除这条Hosts条目吗?\n${ip} ${domain}`)) { - deleteHostsEntry(ip, domain); - } - }); - }); -} - -// 验证IP地址格式 -function isValidIp(ip) { - // 支持IPv4和IPv6简单验证 - const ipv4Regex = /^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/; - const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}$/; - - return ipv4Regex.test(ip) || ipv6Regex.test(ip); -} - -// 导出函数,供其他模块调用 -window.updateHostsCount = function(count) { - const hostsCountElement = document.getElementById('hosts-count'); - if (hostsCountElement) { - hostsCountElement.textContent = count; - } -} - -// 导出初始化函数 -window.initHostsPanel = initHostsPanel; - -// 注册到面板导航系统 -if (window.registerPanelModule) { - window.registerPanelModule('hosts-panel', { - init: initHostsPanel, - refresh: loadHosts - }); -} \ No newline at end of file diff --git a/staticbak/static/js/modules/query.js b/staticbak/static/js/modules/query.js deleted file mode 100644 index 77ce7b1..0000000 --- a/staticbak/static/js/modules/query.js +++ /dev/null @@ -1,294 +0,0 @@ -// 初始化DNS查询面板 -function initQueryPanel() { - // 初始化事件监听器 - initQueryEventListeners(); - - // 确保结果容器默认隐藏 - const resultContainer = document.getElementById('query-result-container'); - if (resultContainer) { - resultContainer.classList.add('hidden'); - } -} - -// 初始化事件监听器 -function initQueryEventListeners() { - // 查询按钮 - document.getElementById('run-query').addEventListener('click', runDnsQuery); - - // 按Enter键执行查询 - document.getElementById('query-domain').addEventListener('keypress', function(e) { - if (e.key === 'Enter') { - runDnsQuery(); - } - }); -} - -// 执行DNS查询 -function runDnsQuery() { - const domainInput = document.getElementById('query-domain'); - const domain = domainInput.value.trim(); - - if (!domain) { - if (typeof window.showNotification === 'function') { - window.showNotification('请输入要查询的域名', 'warning'); - } - domainInput.focus(); - return; - } - - // 显示查询中状态 - showQueryLoading(); - - // 更新API路径,使用完整路径 - apiRequest('/api/query', 'GET', { domain: domain }) - .then(data => { - // 处理可能的不同响应格式 - renderQueryResult(data); - - // 触发数据刷新事件 - if (typeof window.triggerDataRefresh === 'function') { - window.triggerDataRefresh('query'); - } - }) - .catch(error => { - console.error('DNS查询失败:', error); - showQueryError('查询失败,请稍后重试'); - if (typeof window.showNotification === 'function') { - window.showNotification('DNS查询失败', 'danger'); - } - }); -} - -// 显示查询加载状态 -function showQueryLoading() { - const resultContainer = document.getElementById('query-result-container'); - if (!resultContainer) return; - - // 添加加载动画类 - resultContainer.classList.add('loading-animation'); - resultContainer.classList.remove('hidden', 'error-animation', 'success-animation'); - - // 清空之前的结果 - const resultHeader = resultContainer.querySelector('.result-header h3'); - const resultContent = resultContainer.querySelector('.result-content'); - - if (resultHeader) resultHeader.textContent = '查询中...'; - if (resultContent) { - resultContent.innerHTML = '
' + - '
正在查询...' + - '
'; - } -} - -// 显示查询错误 -function showQueryError(message) { - const resultContainer = document.getElementById('query-result-container'); - if (!resultContainer) return; - - // 添加错误动画类 - resultContainer.classList.add('error-animation'); - resultContainer.classList.remove('hidden', 'loading-animation', 'success-animation'); - - const resultHeader = resultContainer.querySelector('.result-header h3'); - const resultContent = resultContainer.querySelector('.result-content'); - - if (resultHeader) resultHeader.textContent = '查询错误'; - if (resultContent) { - resultContent.innerHTML = `
- - ${message} -
`; - } -} - -// 渲染查询结果 -function renderQueryResult(result) { - const resultContainer = document.getElementById('query-result-container'); - if (!resultContainer) return; - - // 添加成功动画类 - resultContainer.classList.add('success-animation'); - resultContainer.classList.remove('hidden', 'loading-animation', 'error-animation'); - - const resultHeader = resultContainer.querySelector('.result-header h3'); - const resultContent = resultContainer.querySelector('.result-content'); - - if (resultHeader) resultHeader.textContent = '查询结果'; - if (!resultContent) return; - - // 安全的HTML转义函数 - function escapeHtml(text) { - const div = document.createElement('div'); - div.textContent = text || ''; - return div.innerHTML; - } - - // 根据查询结果构建内容 - let content = '
'; - - // 域名 - const safeDomain = escapeHtml(result.domain || ''); - content += `
-
域名
-
${safeDomain}
-
`; - - // 状态 - 映射API字段 - const isBlocked = result.blocked || false; - const isExcluded = result.excluded || false; - const isAllowed = !isBlocked || isExcluded; - - const statusText = isBlocked ? '被屏蔽' : isAllowed ? '允许访问' : '未知'; - const statusClass = isBlocked ? 'status-error' : isAllowed ? 'status-success' : ''; - const statusIcon = isBlocked ? 'fa-ban' : isAllowed ? 'fa-check-circle' : 'fa-question-circle'; - content += `
-
状态
-
- ${statusText} -
-
`; - - // 规则类型 - 映射API字段 - let ruleType = ''; - if (isBlocked) { - if (result.blockRuleType && result.blockRuleType.toLowerCase().includes('regex')) { - ruleType = '正则表达式规则'; - } else { - ruleType = result.blockRuleType || '域名规则'; - } - } else { - if (isExcluded) { - ruleType = '白名单规则'; - } else if (result.hasHosts) { - ruleType = 'Hosts记录'; - } else { - ruleType = '未匹配任何规则'; - } - } - content += `
-
规则类型
-
${escapeHtml(ruleType)}
-
`; - - // 匹配规则 - 映射API字段 - let matchedRule = ''; - if (isBlocked) { - matchedRule = result.blockRule || '无'; - } else if (isExcluded) { - matchedRule = result.excludeRule || '无'; - } else { - matchedRule = '无'; - } - content += `
-
匹配规则
-
${escapeHtml(matchedRule)}
-
`; - - // Hosts记录 - 映射API字段 - const hostsRecord = result.hasHosts && result.hostsIP ? - escapeHtml(`${result.hostsIP} ${result.domain}`) : '无'; - content += `
-
Hosts记录
-
${hostsRecord}
-
`; - - // 查询时间 - API没有提供,计算当前时间 - const queryTime = `${Date.now() % 100} ms`; - content += `
-
查询时间
-
${queryTime}
-
`; - - content += '
'; // 结束result-grid - - // DNS响应(如果有) - if (result.dnsResponse) { - content += '
'; - content += '

DNS响应

'; - - if (result.dnsResponse.answers && result.dnsResponse.answers.length > 0) { - content += '
'; - result.dnsResponse.answers.forEach((answer, index) => { - content += `
- #${index + 1} - ${escapeHtml(answer.name)} - ${escapeHtml(answer.type)} - ${escapeHtml(answer.value)} -
`; - }); - content += '
'; - } else { - content += '
无DNS响应记录
'; - } - content += '
'; - } - - // 添加复制功能 - content += `
- -
`; - - resultContent.innerHTML = content; - - // 通知用户查询成功 - if (typeof window.showNotification === 'function') { - const statusMsg = isBlocked ? '查询完成,该域名被屏蔽' : - isAllowed ? '查询完成,该域名允许访问' : '查询完成'; - window.showNotification(statusMsg, 'info'); - } -} - -// 复制查询结果到剪贴板 -function copyQueryResult() { - const resultContainer = document.getElementById('query-result-container'); - if (!resultContainer) return; - - // 收集关键信息 - const domain = document.getElementById('result-domain')?.textContent || '未知域名'; - const status = document.getElementById('result-status')?.textContent || '未知状态'; - const ruleType = document.getElementById('result-rule-type')?.textContent || '无规则类型'; - const matchedRule = document.getElementById('result-rule')?.textContent || '无匹配规则'; - const queryTime = document.getElementById('result-time')?.textContent || '未知时间'; - - // 构建要复制的文本 - const textToCopy = `DNS查询结果:\n` + - `域名: ${domain}\n` + - `状态: ${status}\n` + - `规则类型: ${ruleType}\n` + - `匹配规则: ${matchedRule}\n` + - `查询时间: ${queryTime}`; - - // 复制到剪贴板 - navigator.clipboard.writeText(textToCopy) - .then(() => { - if (typeof window.showNotification === 'function') { - window.showNotification('查询结果已复制到剪贴板', 'success'); - } - }) - .catch(err => { - console.error('复制失败:', err); - if (typeof window.showNotification === 'function') { - window.showNotification('复制失败,请手动复制', 'warning'); - } - }); -} - -// 导出函数,供其他模块调用 -window.initQueryPanel = initQueryPanel; -window.runDnsQuery = runDnsQuery; - -// 注册到面板导航系统 -if (window.registerPanelModule) { - window.registerPanelModule('query-panel', { - init: initQueryPanel, - refresh: function() { - // 清除当前查询结果 - const resultContainer = document.getElementById('query-result-container'); - if (resultContainer) { - resultContainer.classList.add('hidden'); - } - } - }); -} \ No newline at end of file diff --git a/staticbak/static/js/modules/rules.js b/staticbak/static/js/modules/rules.js deleted file mode 100644 index 30d2c3c..0000000 --- a/staticbak/static/js/modules/rules.js +++ /dev/null @@ -1,422 +0,0 @@ -// 屏蔽规则管理模块 - -// 全局变量 -let rules = []; -let currentPage = 1; -let itemsPerPage = 50; // 默认每页显示50条规则 -let filteredRules = []; - -// 初始化屏蔽规则面板 -function initRulesPanel() { - // 加载规则列表 - loadRules(); - - // 绑定添加规则按钮事件 - document.getElementById('add-rule-btn').addEventListener('click', addNewRule); - - // 绑定刷新规则按钮事件 - document.getElementById('reload-rules-btn').addEventListener('click', reloadRules); - - // 绑定搜索框事件 - document.getElementById('rule-search').addEventListener('input', filterRules); - - // 绑定每页显示数量变更事件 - document.getElementById('items-per-page').addEventListener('change', () => { - itemsPerPage = parseInt(document.getElementById('items-per-page').value); - currentPage = 1; // 重置为第一页 - renderRulesList(); - }); - - // 绑定分页按钮事件 - document.getElementById('prev-page-btn').addEventListener('click', goToPreviousPage); - document.getElementById('next-page-btn').addEventListener('click', goToNextPage); - document.getElementById('first-page-btn').addEventListener('click', goToFirstPage); - document.getElementById('last-page-btn').addEventListener('click', goToLastPage); -} - -// 加载规则列表 -async function loadRules() { - try { - const rulesPanel = document.getElementById('rules-panel'); - showLoading(rulesPanel); - - // 更新API路径,使用正确的API路径 - const data = await apiRequest('/api/shield', 'GET'); - - // 处理后端返回的复杂对象数据格式 - let allRules = []; - if (data && typeof data === 'object') { - // 合并所有类型的规则到一个数组 - if (Array.isArray(data.domainRules)) allRules = allRules.concat(data.domainRules); - if (Array.isArray(data.domainExceptions)) allRules = allRules.concat(data.domainExceptions); - if (Array.isArray(data.regexRules)) allRules = allRules.concat(data.regexRules); - if (Array.isArray(data.regexExceptions)) allRules = allRules.concat(data.regexExceptions); - } - - rules = allRules; - filteredRules = [...rules]; - currentPage = 1; // 重置为第一页 - renderRulesList(); - - // 更新规则数量统计卡片 - if (window.updateRulesCount && typeof window.updateRulesCount === 'function') { - window.updateRulesCount(rules.length); - } - } catch (error) { - console.error('加载规则失败:', error); - if (typeof window.showNotification === 'function') { - window.showNotification('加载规则失败', 'danger'); - } - } finally { - const rulesPanel = document.getElementById('rules-panel'); - hideLoading(rulesPanel); - } -} - -// 渲染规则列表 -function renderRulesList() { - const rulesList = document.getElementById('rules-list'); - const paginationInfo = document.getElementById('pagination-info'); - - // 清空列表 - rulesList.innerHTML = ''; - - if (filteredRules.length === 0) { - // 使用更友好的空状态显示 - rulesList.innerHTML = '' + - '
' + - '
' + - '
暂无规则
' + - '
点击添加按钮或刷新规则来获取规则列表
' + - '
' + - ''; - paginationInfo.textContent = '共0条规则'; - updatePaginationButtons(); - return; - } - - // 计算分页数据 - const totalPages = Math.ceil(filteredRules.length / itemsPerPage); - const startIndex = (currentPage - 1) * itemsPerPage; - const endIndex = Math.min(startIndex + itemsPerPage, filteredRules.length); - const currentRules = filteredRules.slice(startIndex, endIndex); - - // 渲染当前页的规则 - currentRules.forEach((rule, index) => { - const row = document.createElement('tr'); - const globalIndex = startIndex + index; - - // 根据规则类型添加不同的样式 - const ruleTypeClass = getRuleTypeClass(rule); - - row.innerHTML = ` - ${globalIndex + 1} -
${escapeHtml(rule)}
- - - - `; - - // 添加行动画效果 - row.style.opacity = '0'; - row.style.transform = 'translateY(10px)'; - rulesList.appendChild(row); - - // 使用requestAnimationFrame确保动画平滑 - requestAnimationFrame(() => { - row.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; - row.style.opacity = '1'; - row.style.transform = 'translateY(0)'; - }); - }); - - // 绑定删除按钮事件 - document.querySelectorAll('.delete-rule').forEach(button => { - button.addEventListener('click', (e) => { - const index = parseInt(e.currentTarget.dataset.index); - deleteRule(index); - }); - }); - - // 更新分页信息 - paginationInfo.textContent = `显示 ${startIndex + 1}-${endIndex} 条,共 ${filteredRules.length} 条规则,第 ${currentPage}/${totalPages} 页`; - - // 更新分页按钮状态 - updatePaginationButtons(); -} - -// 更新分页按钮状态 -function updatePaginationButtons() { - const totalPages = Math.ceil(filteredRules.length / itemsPerPage); - const prevBtn = document.getElementById('prev-page-btn'); - const nextBtn = document.getElementById('next-page-btn'); - const firstBtn = document.getElementById('first-page-btn'); - const lastBtn = document.getElementById('last-page-btn'); - - prevBtn.disabled = currentPage === 1; - nextBtn.disabled = currentPage === totalPages || totalPages === 0; - firstBtn.disabled = currentPage === 1; - lastBtn.disabled = currentPage === totalPages || totalPages === 0; -} - -// 上一页 -function goToPreviousPage() { - if (currentPage > 1) { - currentPage--; - renderRulesList(); - } -} - -// 下一页 -function goToNextPage() { - const totalPages = Math.ceil(filteredRules.length / itemsPerPage); - if (currentPage < totalPages) { - currentPage++; - renderRulesList(); - } -} - -// 第一页 -function goToFirstPage() { - currentPage = 1; - renderRulesList(); -} - -// 最后一页 -function goToLastPage() { - currentPage = Math.ceil(filteredRules.length / itemsPerPage); - renderRulesList(); -} - -// 添加新规则 -async function addNewRule() { - const ruleInput = document.getElementById('rule-input'); - const rule = ruleInput.value.trim(); - - if (!rule) { - if (typeof window.showNotification === 'function') { - window.showNotification('请输入规则内容', 'warning'); - } - return; - } - - try { - // 预处理规则,支持AdGuardHome格式 - const processedRule = preprocessRule(rule); - - // 使用正确的API路径 - const response = await apiRequest('/api/shield', 'POST', { rule: processedRule }); - - // 处理不同的响应格式 - if (response.success || response.status === 'success') { - rules.push(processedRule); - filteredRules = [...rules]; - ruleInput.value = ''; - - // 添加后跳转到最后一页,显示新添加的规则 - currentPage = Math.ceil(filteredRules.length / itemsPerPage); - renderRulesList(); - - // 更新规则数量统计 - if (window.updateRulesCount && typeof window.updateRulesCount === 'function') { - window.updateRulesCount(rules.length); - } - - if (typeof window.showNotification === 'function') { - window.showNotification('规则添加成功', 'success'); - } - } else { - if (typeof window.showNotification === 'function') { - window.showNotification('规则添加失败:' + (response.message || '未知错误'), 'danger'); - } - } - } catch (error) { - console.error('添加规则失败:', error); - if (typeof window.showNotification === 'function') { - window.showNotification('添加规则失败', 'danger'); - } - } -} - -// 删除规则 -async function deleteRule(index) { - if (!confirm('确定要删除这条规则吗?')) { - return; - } - - try { - const rule = filteredRules[index]; - const rowElement = document.querySelectorAll('#rules-list tr')[index]; - - // 添加删除动画 - if (rowElement) { - rowElement.style.transition = 'opacity 0.3s ease, transform 0.3s ease'; - rowElement.style.opacity = '0'; - rowElement.style.transform = 'translateX(-20px)'; - } - - // 使用正确的API路径 - const response = await apiRequest('/api/shield', 'DELETE', { rule }); - - // 处理不同的响应格式 - if (response.success || response.status === 'success') { - // 在原规则列表中找到并删除 - const originalIndex = rules.indexOf(rule); - if (originalIndex !== -1) { - rules.splice(originalIndex, 1); - } - - // 在过滤后的列表中删除 - filteredRules.splice(index, 1); - - // 如果当前页没有数据了,回到上一页 - const totalPages = Math.ceil(filteredRules.length / itemsPerPage); - if (currentPage > totalPages && totalPages > 0) { - currentPage = totalPages; - } - - // 等待动画完成后重新渲染列表 - setTimeout(() => { - renderRulesList(); - - // 更新规则数量统计 - if (window.updateRulesCount && typeof window.updateRulesCount === 'function') { - window.updateRulesCount(rules.length); - } - - if (typeof window.showNotification === 'function') { - window.showNotification('规则删除成功', 'success'); - } - }, 300); - } else { - // 恢复行样式 - if (rowElement) { - rowElement.style.opacity = '1'; - rowElement.style.transform = 'translateX(0)'; - } - - if (typeof window.showNotification === 'function') { - window.showNotification('规则删除失败:' + (response.message || '未知错误'), 'danger'); - } - } - } catch (error) { - console.error('删除规则失败:', error); - if (typeof window.showNotification === 'function') { - window.showNotification('删除规则失败', 'danger'); - } - } -} - -// 重新加载规则 -async function reloadRules() { - if (!confirm('确定要重新加载所有规则吗?这将覆盖当前内存中的规则。')) { - return; - } - - try { - const rulesPanel = document.getElementById('rules-panel'); - showLoading(rulesPanel); - - // 使用正确的API路径和方法 - PUT请求到/api/shield - await apiRequest('/api/shield', 'PUT'); - - // 重新加载规则列表 - await loadRules(); - - // 触发数据刷新事件,通知其他模块数据已更新 - if (typeof window.triggerDataRefresh === 'function') { - window.triggerDataRefresh('rules'); - } - - if (typeof window.showNotification === 'function') { - window.showNotification('规则重新加载成功', 'success'); - } - } catch (error) { - console.error('重新加载规则失败:', error); - if (typeof window.showNotification === 'function') { - window.showNotification('重新加载规则失败', 'danger'); - } - } finally { - const rulesPanel = document.getElementById('rules-panel'); - hideLoading(rulesPanel); - } -} - -// 过滤规则 -function filterRules() { - const searchTerm = document.getElementById('rule-search').value.toLowerCase(); - - if (searchTerm) { - filteredRules = rules.filter(rule => rule.toLowerCase().includes(searchTerm)); - } else { - filteredRules = [...rules]; - } - - currentPage = 1; // 重置为第一页 - renderRulesList(); -} - -// HTML转义,防止XSS攻击 -function escapeHtml(text) { - const map = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - return text.replace(/[&<>'"]/g, m => map[m]); -} - -// 根据规则类型返回对应的CSS类名 -function getRuleTypeClass(rule) { - // 简单的规则类型判断 - if (rule.startsWith('||') || rule.startsWith('|http')) { - return 'rule-type-url'; - } else if (rule.startsWith('@@')) { - return 'rule-type-exception'; - } else if (rule.startsWith('#')) { - return 'rule-type-comment'; - } else if (rule.includes('$')) { - return 'rule-type-filter'; - } - return 'rule-type-standard'; -} - -// 预处理规则,支持多种规则格式 -function preprocessRule(rule) { - // 移除首尾空白字符 - let processed = rule.trim(); - - // 处理AdGuardHome格式的规则 - if (processed.startsWith('0.0.0.0 ') || processed.startsWith('127.0.0.1 ')) { - const parts = processed.split(' '); - if (parts.length >= 2) { - // 转换为AdBlock Plus格式 - processed = '||' + parts[1] + '^'; - } - } - - return processed; -} - -// 导出函数,供其他模块调用 -window.updateRulesCount = function(count) { - const rulesCountElement = document.getElementById('rules-count'); - if (rulesCountElement) { - rulesCountElement.textContent = count; - } -} - -// 导出初始化函数 -window.initRulesPanel = initRulesPanel; - -// 注册到面板导航系统 -if (window.registerPanelModule) { - window.registerPanelModule('rules-panel', { - init: initRulesPanel, - refresh: loadRules - }); -} \ No newline at end of file diff --git a/staticbak/static/js/query.js b/staticbak/static/js/query.js deleted file mode 100644 index 6c9a764..0000000 --- a/staticbak/static/js/query.js +++ /dev/null @@ -1,301 +0,0 @@ -// DNS查询页面功能实现 - -// 初始化查询页面 -function initQueryPage() { - console.log('初始化DNS查询页面...'); - setupQueryEventListeners(); - loadQueryHistory(); -} - -// 执行DNS查询 -async function handleDNSQuery() { - const domainInput = document.getElementById('dns-query-domain'); - const resultDiv = document.getElementById('query-result'); - - if (!domainInput || !resultDiv) { - console.error('找不到必要的DOM元素'); - return; - } - - const domain = domainInput.value.trim(); - if (!domain) { - showErrorMessage('请输入域名'); - return; - } - - try { - const response = await fetch(`/api/query?domain=${encodeURIComponent(domain)}`); - if (!response.ok) { - throw new Error('查询失败'); - } - - const result = await response.json(); - displayQueryResult(result, domain); - saveQueryHistory(domain, result); - loadQueryHistory(); - } catch (error) { - console.error('DNS查询出错:', error); - showErrorMessage('查询失败,请稍后重试'); - } -} - -// 显示查询结果 -function displayQueryResult(result, domain) { - const resultDiv = document.getElementById('query-result'); - if (!resultDiv) return; - - // 显示结果容器 - resultDiv.classList.remove('hidden'); - - // 解析结果 - const status = result.blocked ? '被屏蔽' : '正常'; - const statusClass = result.blocked ? 'text-danger' : 'text-success'; - const blockType = result.blocked ? result.blockRuleType || '未知' : '正常'; - const blockRule = result.blocked ? result.blockRule || '未知' : '无'; - const blockSource = result.blocked ? result.blocksource || '未知' : '无'; - const timestamp = new Date(result.timestamp).toLocaleString(); - - // 更新结果显示 - document.getElementById('result-domain').textContent = domain; - document.getElementById('result-status').innerHTML = `${status}`; - document.getElementById('result-type').textContent = blockType; - - // 检查是否存在屏蔽规则显示元素,如果不存在则创建 - let blockRuleElement = document.getElementById('result-block-rule'); - if (!blockRuleElement) { - // 创建屏蔽规则显示区域 - const grid = resultDiv.querySelector('.grid'); - if (grid) { - const newGridItem = document.createElement('div'); - newGridItem.className = 'bg-gray-50 p-4 rounded-lg'; - newGridItem.innerHTML = ` -

屏蔽规则

-

-

- `; - grid.appendChild(newGridItem); - blockRuleElement = document.getElementById('result-block-rule'); - } - } - - // 更新屏蔽规则显示 - if (blockRuleElement) { - blockRuleElement.textContent = blockRule; - } - - // 检查是否存在屏蔽来源显示元素,如果不存在则创建 - let blockSourceElement = document.getElementById('result-block-source'); - if (!blockSourceElement) { - // 创建屏蔽来源显示区域 - const grid = resultDiv.querySelector('.grid'); - if (grid) { - const newGridItem = document.createElement('div'); - newGridItem.className = 'bg-gray-50 p-4 rounded-lg'; - newGridItem.innerHTML = ` -

屏蔽来源

-

-

- `; - grid.appendChild(newGridItem); - blockSourceElement = document.getElementById('result-block-source'); - } - } - - // 更新屏蔽来源显示 - if (blockSourceElement) { - blockSourceElement.textContent = blockSource; - } - - document.getElementById('result-time').textContent = timestamp; - document.getElementById('result-details').textContent = JSON.stringify(result, null, 2); -} - -// 保存查询历史 -function saveQueryHistory(domain, result) { - // 获取现有历史记录 - let history = JSON.parse(localStorage.getItem('dnsQueryHistory') || '[]'); - - // 创建历史记录项 - const historyItem = { - domain: domain, - timestamp: new Date().toISOString(), - result: { - blocked: result.blocked, - blockRuleType: result.blockRuleType, - blockRule: result.blockRule, - blocksource: result.blocksource - } - }; - - // 添加到历史记录开头 - history.unshift(historyItem); - - // 限制历史记录数量 - if (history.length > 20) { - history = history.slice(0, 20); - } - - // 保存到本地存储 - localStorage.setItem('dnsQueryHistory', JSON.stringify(history)); -} - -// 加载查询历史 -function loadQueryHistory() { - const historyDiv = document.getElementById('query-history'); - if (!historyDiv) return; - - // 获取历史记录 - const history = JSON.parse(localStorage.getItem('dnsQueryHistory') || '[]'); - - if (history.length === 0) { - historyDiv.innerHTML = '
暂无查询历史
'; - return; - } - - // 生成历史记录HTML - const historyHTML = history.map(item => { - const statusClass = item.result.blocked ? 'text-danger' : 'text-success'; - const statusText = item.result.blocked ? '被屏蔽' : '正常'; - const blockType = item.result.blocked ? item.result.blockRuleType : '正常'; - const blockRule = item.result.blocked ? item.result.blockRule : '无'; - const blockSource = item.result.blocked ? item.result.blocksource : '无'; - const formattedTime = new Date(item.timestamp).toLocaleString(); - - return ` -
-
-
- ${item.domain} - ${statusText} - ${blockType} -
-
规则: ${blockRule}
-
来源: ${blockSource}
-
${formattedTime}
-
- -
- `; - }).join(''); - - historyDiv.innerHTML = historyHTML; -} - -// 从历史记录重新查询 -function requeryFromHistory(domain) { - const domainInput = document.getElementById('dns-query-domain'); - if (domainInput) { - domainInput.value = domain; - handleDNSQuery(); - } -} - -// 清空查询历史 -function clearQueryHistory() { - if (confirm('确定要清空所有查询历史吗?')) { - localStorage.removeItem('dnsQueryHistory'); - loadQueryHistory(); - showSuccessMessage('查询历史已清空'); - } -} - -// 设置事件监听器 -function setupQueryEventListeners() { - // 查询按钮事件 - const queryBtn = document.getElementById('dns-query-btn'); - if (queryBtn) { - queryBtn.addEventListener('click', handleDNSQuery); - } - - // 输入框回车键事件 - const domainInput = document.getElementById('dns-query-domain'); - if (domainInput) { - domainInput.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - e.preventDefault(); - handleDNSQuery(); - } - }); - } - - // 清空历史按钮事件 - const clearHistoryBtn = document.getElementById('clear-history-btn'); - if (clearHistoryBtn) { - clearHistoryBtn.addEventListener('click', clearQueryHistory); - } -} - - - -// 显示成功消息 -function showSuccessMessage(message) { - showNotification(message, 'success'); -} - -// 显示错误消息 -function showErrorMessage(message) { - showNotification(message, 'error'); -} - -// 显示通知 -function showNotification(message, type = 'info') { - // 移除现有通知 - const existingNotification = document.querySelector('.notification'); - if (existingNotification) { - existingNotification.remove(); - } - - // 创建新通知 - const notification = document.createElement('div'); - notification.className = `notification fixed bottom-4 right-4 px-6 py-3 rounded-lg shadow-lg z-50 transform transition-all duration-300 ease-in-out translate-y-0 opacity-0`; - - // 设置通知样式 - if (type === 'success') { - notification.classList.add('bg-green-500', 'text-white'); - } else if (type === 'error') { - notification.classList.add('bg-red-500', 'text-white'); - } else { - notification.classList.add('bg-blue-500', 'text-white'); - } - - notification.innerHTML = ` -
- - ${message} -
- `; - - document.body.appendChild(notification); - - // 显示通知 - setTimeout(() => { - notification.classList.remove('opacity-0'); - notification.classList.add('opacity-100'); - }, 10); - - // 3秒后隐藏通知 - setTimeout(() => { - notification.classList.remove('opacity-100'); - notification.classList.add('opacity-0'); - setTimeout(() => { - notification.remove(); - }, 300); - }, 3000); -} - -// 页面加载完成后初始化 -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initQueryPage); -} else { - initQueryPage(); -} - -// 当切换到DNS查询页面时重新加载数据 -document.addEventListener('DOMContentLoaded', () => { - // 监听hash变化,当切换到DNS查询页面时重新加载数据 - window.addEventListener('hashchange', () => { - if (window.location.hash === '#query') { - initQueryPage(); - } - }); -}); \ No newline at end of file diff --git a/staticbak/static/js/server-status.js b/staticbak/static/js/server-status.js deleted file mode 100644 index fa2d8c0..0000000 --- a/staticbak/static/js/server-status.js +++ /dev/null @@ -1,305 +0,0 @@ -// 服务器状态组件 - 显示CPU使用率和查询统计 - -// 全局变量 -let serverStatusUpdateTimer = null; -let previousServerData = { - cpu: 0, - queries: 0 -}; - -// 初始化服务器状态组件 -function initServerStatusWidget() { - // 确保DOM元素存在 - const widget = document.getElementById('server-status-widget'); - if (!widget) return; - - // 初始化页面类型检测 - updateWidgetDisplayByPageType(); - - // 设置页面切换事件监听 - handlePageSwitchEvents(); - - // 设置WebSocket监听(如果可用) - setupWebSocketListeners(); - - // 立即加载一次数据 - loadServerStatusData(); - - // 设置定时更新(每5秒更新一次) - serverStatusUpdateTimer = setInterval(loadServerStatusData, 5000); -} - -// 判断当前页面是否为仪表盘 -function isCurrentPageDashboard() { - // 方法1:检查侧边栏激活状态 - const dashboardLink = document.querySelector('.sidebar a[href="#dashboard"]'); - if (dashboardLink && dashboardLink.classList.contains('active')) { - return true; - } - - // 方法2:检查仪表盘特有元素 - const dashboardElements = [ - '#dashboard-container', - '.dashboard-summary', - '#dashboard-stats' - ]; - - for (const selector of dashboardElements) { - if (document.querySelector(selector)) { - return true; - } - } - - // 方法3:检查URL哈希值 - if (window.location.hash === '#dashboard' || window.location.hash === '') { - return true; - } - - return false; -} - -// 根据页面类型更新组件显示 -function updateWidgetDisplayByPageType() { - const additionalStats = document.getElementById('server-additional-stats'); - if (!additionalStats) return; - - // 如果当前页面是仪表盘,隐藏额外统计指标 - if (isCurrentPageDashboard()) { - additionalStats.classList.add('hidden'); - } else { - // 非仪表盘页面,显示额外统计指标 - additionalStats.classList.remove('hidden'); - } -} - -// 处理页面切换事件 -function handlePageSwitchEvents() { - // 监听哈希变化(导航切换) - window.addEventListener('hashchange', updateWidgetDisplayByPageType); - - // 监听侧边栏点击事件 - const sidebarLinks = document.querySelectorAll('.sidebar a'); - sidebarLinks.forEach(link => { - link.addEventListener('click', function() { - // 延迟检查,确保页面已切换 - setTimeout(updateWidgetDisplayByPageType, 100); - }); - }); - - // 监听导航菜单点击事件 - const navLinks = document.querySelectorAll('nav a'); - navLinks.forEach(link => { - link.addEventListener('click', function() { - setTimeout(updateWidgetDisplayByPageType, 100); - }); - }); -} - -// 监控WebSocket连接状态 -function monitorWebSocketConnection() { - // 如果存在WebSocket连接,监听消息 - if (window.socket) { - window.socket.addEventListener('message', function(event) { - try { - const data = JSON.parse(event.data); - if (data.type === 'status_update') { - updateServerStatusWidget(data.payload); - } - } catch (error) { - console.error('解析WebSocket消息失败:', error); - } - }); - } -} - -// 设置WebSocket监听器 -function setupWebSocketListeners() { - // 如果WebSocket已经存在 - if (window.socket) { - monitorWebSocketConnection(); - } else { - // 监听socket初始化事件 - window.addEventListener('socketInitialized', function() { - monitorWebSocketConnection(); - }); - } -} - -// 加载服务器状态数据 -async function loadServerStatusData() { - try { - // 使用现有的API获取系统状态 - const api = window.api || {}; - const getStatusFn = api.getStatus || function() { return Promise.resolve({}); }; - const statusData = await getStatusFn(); - if (statusData && !statusData.error) { - updateServerStatusWidget(statusData); - } - } catch (error) { - console.error('加载服务器状态数据失败:', error); - } -} - -// 更新服务器状态组件 -function updateServerStatusWidget(stats) { - // 确保组件存在 - const widget = document.getElementById('server-status-widget'); - if (!widget) return; - - // 确保stats存在 - stats = stats || {}; - - // 提取CPU使用率 - let cpuUsage = 0; - if (stats.system && typeof stats.system.cpu === 'number') { - cpuUsage = stats.system.cpu; - } else if (typeof stats.cpuUsage === 'number') { - cpuUsage = stats.cpuUsage; - } - - // 提取查询统计数据 - let totalQueries = 0; - let blockedQueries = 0; - let allowedQueries = 0; - - if (stats.dns) { - const allowed = typeof stats.dns.Allowed === 'number' ? stats.dns.Allowed : 0; - const blocked = typeof stats.dns.Blocked === 'number' ? stats.dns.Blocked : 0; - const errors = typeof stats.dns.Errors === 'number' ? stats.dns.Errors : 0; - totalQueries = allowed + blocked + errors; - blockedQueries = blocked; - allowedQueries = allowed; - } else { - totalQueries = typeof stats.totalQueries === 'number' ? stats.totalQueries : 0; - blockedQueries = typeof stats.blockedQueries === 'number' ? stats.blockedQueries : 0; - allowedQueries = typeof stats.allowedQueries === 'number' ? stats.allowedQueries : 0; - } - - // 更新CPU使用率 - const cpuValueElement = document.getElementById('server-cpu-value'); - if (cpuValueElement) { - cpuValueElement.textContent = cpuUsage.toFixed(1) + '%'; - } - - const cpuBarElement = document.getElementById('server-cpu-bar'); - if (cpuBarElement) { - cpuBarElement.style.width = Math.min(cpuUsage, 100) + '%'; - - // 根据CPU使用率改变颜色 - if (cpuUsage > 80) { - cpuBarElement.className = 'h-full bg-danger rounded-full'; - } else if (cpuUsage > 50) { - cpuBarElement.className = 'h-full bg-warning rounded-full'; - } else { - cpuBarElement.className = 'h-full bg-success rounded-full'; - } - } - - // 更新查询量 - const queriesValueElement = document.getElementById('server-queries-value'); - if (queriesValueElement) { - queriesValueElement.textContent = formatNumber(totalQueries); - } - - // 计算查询量百分比(假设最大查询量为10000) - const queryPercentage = Math.min((totalQueries / 10000) * 100, 100); - const queriesBarElement = document.getElementById('server-queries-bar'); - if (queriesBarElement) { - queriesBarElement.style.width = queryPercentage + '%'; - } - - // 更新额外统计指标 - const totalQueriesElement = document.getElementById('server-total-queries'); - if (totalQueriesElement) { - totalQueriesElement.textContent = formatNumber(totalQueries); - } - - const blockedQueriesElement = document.getElementById('server-blocked-queries'); - if (blockedQueriesElement) { - blockedQueriesElement.textContent = formatNumber(blockedQueries); - } - - const allowedQueriesElement = document.getElementById('server-allowed-queries'); - if (allowedQueriesElement) { - allowedQueriesElement.textContent = formatNumber(allowedQueries); - } - - // 添加光晕提示效果 - if (previousServerData.cpu !== cpuUsage || previousServerData.queries !== totalQueries) { - addGlowEffect(); - } - - // 更新服务器状态指示器 - const statusIndicator = document.getElementById('server-status-indicator'); - if (statusIndicator) { - // 检查系统状态 - if (stats.system && stats.system.status === 'error') { - statusIndicator.className = 'inline-block w-2 h-2 bg-danger rounded-full'; - } else { - statusIndicator.className = 'inline-block w-2 h-2 bg-success rounded-full'; - } - } - - // 保存当前数据用于下次比较 - previousServerData = { - cpu: cpuUsage, - queries: totalQueries - }; -} - -// 添加光晕提示效果 -function addGlowEffect() { - const widget = document.getElementById('server-status-widget'); - if (!widget) return; - - // 添加光晕类 - widget.classList.add('glow-effect'); - - // 2秒后移除光晕 - setTimeout(function() { - widget.classList.remove('glow-effect'); - }, 2000); -} - -// 格式化数字 -function formatNumber(num) { - // 显示完整数字的最大长度阈值 - const MAX_FULL_LENGTH = 5; - - // 先获取完整数字字符串 - const fullNumStr = num.toString(); - - // 如果数字长度小于等于阈值,直接返回完整数字 - if (fullNumStr.length <= MAX_FULL_LENGTH) { - return fullNumStr; - } - - // 否则使用缩写格式 - if (num >= 1000000) { - return (num / 1000000).toFixed(1) + 'M'; - } else if (num >= 1000) { - return (num / 1000).toFixed(1) + 'K'; - } - - return fullNumStr; -} - -// 在DOM加载完成后初始化 -window.addEventListener('DOMContentLoaded', function() { - // 延迟初始化,确保页面完全加载 - setTimeout(initServerStatusWidget, 500); -}); - -// 在页面卸载时清理资源 -window.addEventListener('beforeunload', function() { - if (serverStatusUpdateTimer) { - clearInterval(serverStatusUpdateTimer); - serverStatusUpdateTimer = null; - } -}); - -// 导出函数供其他模块使用 -window.serverStatusWidget = { - init: initServerStatusWidget, - update: updateServerStatusWidget -}; \ No newline at end of file diff --git a/staticbak/static/js/shield.js b/staticbak/static/js/shield.js deleted file mode 100644 index a9ec599..0000000 --- a/staticbak/static/js/shield.js +++ /dev/null @@ -1,1302 +0,0 @@ -// 屏蔽管理页面功能实现 - -// 初始化屏蔽管理页面 -async function initShieldPage() { - // 并行加载所有数据 - await Promise.all([ - loadShieldStats(), - loadLocalRules(), - loadRemoteBlacklists() - ]); - // 设置事件监听器 - setupShieldEventListeners(); -} - -// 更新状态显示函数 -function updateStatus(url, status, message) { - const statusElement = document.getElementById(`update-status-${encodeURIComponent(url)}`); - if (!statusElement) return; - - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - let statusHTML = ''; - - switch (status) { - case 'loading': - statusHTML = ' 处理中...'; - break; - case 'success': - statusHTML = ` ${message || '成功'}`; - break; - case 'error': - statusHTML = ` ${message || '失败'}`; - break; - default: - statusHTML = '-'; - } - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 设置新的HTML内容 - statusElement.innerHTML = statusHTML; - - // 添加过渡类和对应状态类 - statusElement.classList.add('status-transition'); - - // 如果不是默认状态,添加淡入动画和对应状态类 - if (status !== 'default') { - statusElement.classList.add('status-fade-in'); - statusElement.classList.add(`status-${status}`); - } - - // 如果是成功或失败状态,3秒后渐变消失 - if (status === 'success' || status === 'error') { - setTimeout(() => { - // 添加淡出类 - statusElement.classList.add('status-fade-out'); - - // 等待淡出动画完成后切换到默认状态 - setTimeout(() => { - // 清除所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - // 设置默认状态 - statusElement.innerHTML = '-'; - }, 300); // 与CSS动画持续时间一致 - }, 3000); - } -} - -// 更新规则状态显示函数 -function updateRuleStatus(rule, status, message) { - const statusElement = document.getElementById(`rule-status-${encodeURIComponent(rule)}`); - if (!statusElement) return; - - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - let statusHTML = ''; - - switch (status) { - case 'loading': - statusHTML = ' 处理中...'; - break; - case 'success': - statusHTML = ` ${message || '成功'}`; - break; - case 'error': - statusHTML = ` ${message || '失败'}`; - break; - default: - statusHTML = '-'; - } - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 设置新的HTML内容 - statusElement.innerHTML = statusHTML; - - // 添加过渡类和对应状态类 - statusElement.classList.add('status-transition'); - - // 如果不是默认状态,添加淡入动画和对应状态类 - if (status !== 'default') { - statusElement.classList.add('status-fade-in'); - statusElement.classList.add(`status-${status}`); - } - - // 如果是成功或失败状态,3秒后渐变消失 - if (status === 'success' || status === 'error') { - setTimeout(() => { - // 添加淡出类 - statusElement.classList.add('status-fade-out'); - - // 等待淡出动画完成后切换到默认状态 - setTimeout(() => { - // 清除所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - // 设置默认状态 - statusElement.innerHTML = '-'; - }, 300); // 与CSS动画持续时间一致 - }, 3000); - } -} - -// 数字更新动画函数 -function animateCounter(element, target, duration = 1000) { - // 确保element存在 - if (!element) return; - - // 清除元素上可能存在的现有定时器 - if (element.animationTimer) { - clearInterval(element.animationTimer); - } - - // 确保target是数字 - const targetNum = typeof target === 'number' ? target : parseInt(target) || 0; - - // 获取起始值,使用更安全的方法 - const startText = element.textContent.replace(/[^0-9]/g, ''); - const start = parseInt(startText) || 0; - - // 如果起始值和目标值相同,直接返回 - if (start === targetNum) { - element.textContent = targetNum; - return; - } - - let current = start; - const increment = (targetNum - start) / (duration / 16); // 16ms per frame - - // 使用requestAnimationFrame实现更平滑的动画 - let startTime = null; - - function updateCounter(timestamp) { - if (!startTime) startTime = timestamp; - const elapsed = timestamp - startTime; - const progress = Math.min(elapsed / duration, 1); - - // 使用缓动函数使动画更自然 - const easeOutQuad = progress * (2 - progress); - current = start + (targetNum - start) * easeOutQuad; - - // 根据方向使用floor或ceil确保平滑过渡 - const displayValue = targetNum > start ? Math.floor(current) : Math.ceil(current); - element.textContent = displayValue; - - if (progress < 1) { - // 继续动画 - element.animationTimer = requestAnimationFrame(updateCounter); - } else { - // 动画结束,确保显示准确值 - element.textContent = targetNum; - // 清除定时器引用 - element.animationTimer = null; - } - } - - // 开始动画 - element.animationTimer = requestAnimationFrame(updateCounter); -} - -// 加载屏蔽规则统计信息 -async function loadShieldStats() { - try { - // 获取屏蔽规则统计信息 - const shieldResponse = await fetch('/api/shield'); - - if (!shieldResponse.ok) { - throw new Error(`加载屏蔽统计失败: ${shieldResponse.status}`); - } - - const stats = await shieldResponse.json(); - - // 获取黑名单列表,计算禁用数量 - const blacklistsResponse = await fetch('/api/shield/blacklists'); - - if (!blacklistsResponse.ok) { - throw new Error(`加载黑名单列表失败: ${blacklistsResponse.status}`); - } - - const blacklists = await blacklistsResponse.json(); - const disabledBlacklistCount = blacklists.filter(blacklist => !blacklist.enabled).length; - - // 更新统计信息 - const elements = [ - { id: 'domain-rules-count', value: stats.domainRulesCount }, - { id: 'domain-exceptions-count', value: stats.domainExceptionsCount }, - { id: 'regex-rules-count', value: stats.regexRulesCount }, - { id: 'regex-exceptions-count', value: stats.regexExceptionsCount }, - { id: 'hosts-rules-count', value: stats.hostsRulesCount }, - { id: 'blacklist-count', value: stats.blacklistCount } - ]; - - elements.forEach(item => { - const element = document.getElementById(item.id); - if (element) { - animateCounter(element, item.value || 0); - } - }); - - // 更新禁用黑名单数量 - const disabledBlacklistElement = document.getElementById('blacklist-disabled-count'); - if (disabledBlacklistElement) { - animateCounter(disabledBlacklistElement, disabledBlacklistCount); - } - } catch (error) { - console.error('加载屏蔽规则统计信息失败:', error); - showNotification('加载屏蔽规则统计信息失败', 'error'); - } -} - -// 加载自定义规则 -async function loadLocalRules() { - try { - const response = await fetch('/api/shield/localrules'); - - if (!response.ok) { - throw new Error(`加载失败: ${response.status}`); - } - - const data = await response.json(); - - // 更新自定义规则数量显示 - if (document.getElementById('local-rules-count')) { - document.getElementById('local-rules-count').textContent = data.localRulesCount || 0; - } - - // 设置当前规则类型 - currentRulesType = 'local'; - - // 合并所有自定义规则 - let rules = []; - // 添加域名规则 - if (Array.isArray(data.domainRules)) { - rules = rules.concat(data.domainRules); - } - // 添加域名排除规则 - if (Array.isArray(data.domainExceptions)) { - rules = rules.concat(data.domainExceptions); - } - // 添加正则规则 - if (Array.isArray(data.regexRules)) { - rules = rules.concat(data.regexRules); - } - // 添加正则排除规则 - if (Array.isArray(data.regexExceptions)) { - rules = rules.concat(data.regexExceptions); - } - - updateRulesTable(rules); - } catch (error) { - console.error('加载自定义规则失败:', error); - showNotification('加载自定义规则失败', 'error'); - } -} - -// 加载远程规则 -async function loadRemoteRules() { - try { - // 设置当前规则类型 - currentRulesType = 'remote'; - const response = await fetch('/api/shield/remoterules'); - - if (!response.ok) { - throw new Error(`加载失败: ${response.status}`); - } - - const data = await response.json(); - - // 更新远程规则数量显示 - if (document.getElementById('remote-rules-count')) { - document.getElementById('remote-rules-count').textContent = data.remoteRulesCount || 0; - } - - // 合并所有远程规则 - let rules = []; - // 添加域名规则 - if (Array.isArray(data.domainRules)) { - rules = rules.concat(data.domainRules); - } - // 添加域名排除规则 - if (Array.isArray(data.domainExceptions)) { - rules = rules.concat(data.domainExceptions); - } - // 添加正则规则 - if (Array.isArray(data.regexRules)) { - rules = rules.concat(data.regexRules); - } - // 添加正则排除规则 - if (Array.isArray(data.regexExceptions)) { - rules = rules.concat(data.regexExceptions); - } - - updateRulesTable(rules); - } catch (error) { - console.error('加载远程规则失败:', error); - showNotification('加载远程规则失败', 'error'); - } -} - -// 更新规则表格 -function updateRulesTable(rules) { - const tbody = document.getElementById('rules-table-body'); - - // 清空表格 - tbody.innerHTML = ''; - - if (rules.length === 0) { - const emptyRow = document.createElement('tr'); - emptyRow.innerHTML = '暂无规则'; - tbody.appendChild(emptyRow); - return; - } - - // 对于大量规则,限制显示数量 - const maxRulesToShow = 1000; // 限制最大显示数量 - const rulesToShow = rules.length > maxRulesToShow ? rules.slice(0, maxRulesToShow) : rules; - - // 使用DocumentFragment提高性能 - const fragment = document.createDocumentFragment(); - - rulesToShow.forEach(rule => { - const tr = document.createElement('tr'); - tr.className = 'border-b border-gray-200'; - - const tdRule = document.createElement('td'); - tdRule.className = 'py-3 px-4'; - tdRule.textContent = rule; - - const tdStatus = document.createElement('td'); - tdStatus.className = 'py-3 px-4 text-center'; - tdStatus.id = `rule-status-${encodeURIComponent(rule)}`; - tdStatus.innerHTML = '-'; - - const tdAction = document.createElement('td'); - tdAction.className = 'py-3 px-4 text-right'; - - const deleteBtn = document.createElement('button'); - deleteBtn.className = 'delete-rule-btn px-3 py-1 bg-danger text-white rounded-md hover:bg-danger/90 transition-colors text-sm'; - deleteBtn.dataset.rule = rule; - - // 创建删除图标 - const deleteIcon = document.createElement('i'); - deleteIcon.className = 'fa fa-trash'; - deleteIcon.style.pointerEvents = 'none'; // 防止图标拦截点击事件 - - deleteBtn.appendChild(deleteIcon); - - // 使用普通函数,确保this指向按钮元素 - deleteBtn.onclick = function(e) { - e.stopPropagation(); // 阻止事件冒泡 - handleDeleteRule(e); - }; - - tdAction.appendChild(deleteBtn); - - tr.appendChild(tdRule); - tr.appendChild(tdStatus); - tr.appendChild(tdAction); - fragment.appendChild(tr); - }); - - // 一次性添加所有行到DOM - tbody.appendChild(fragment); - - // 如果有更多规则,添加提示 - if (rules.length > maxRulesToShow) { - const infoRow = document.createElement('tr'); - infoRow.innerHTML = `显示前 ${maxRulesToShow} 条规则,共 ${rules.length} 条`; - tbody.appendChild(infoRow); - } -} - -// 处理删除规则 -async function handleDeleteRule(e) { - console.log('Delete button clicked'); - let deleteBtn; - - // 尝试从事件目标获取按钮元素 - deleteBtn = e.target.closest('.delete-rule-btn'); - console.log('Delete button from event target:', deleteBtn); - - // 尝试从this获取按钮元素(备用方案) - if (!deleteBtn && this && typeof this.classList === 'object' && this.classList) { - if (this.classList.contains('delete-rule-btn')) { - deleteBtn = this; - console.log('Delete button from this:', deleteBtn); - } - } - - if (!deleteBtn) { - console.error('Delete button not found'); - return; - } - - const rule = deleteBtn.dataset.rule; - console.log('Rule to delete:', rule); - - if (!rule) { - console.error('Rule not found in data-rule attribute'); - return; - } - - try { - // 显示加载状态 - updateRuleStatus(rule, 'loading'); - - console.log('Sending DELETE request to /api/shield'); - const response = await fetch('/api/shield', { - method: 'DELETE', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ rule }) - }); - - console.log('Response status:', response.status); - console.log('Response ok:', response.ok); - - // 解析服务器响应 - let responseData; - try { - responseData = await response.json(); - } catch (jsonError) { - responseData = {}; - } - - console.log('Response data:', responseData); - - // 根据服务器响应判断是否成功 - if (response.ok && responseData.status === 'success') { - // 显示成功状态 - updateRuleStatus(rule, 'success', '已删除'); - - showNotification('规则删除成功', 'success'); - console.log('Current rules type:', currentRulesType); - - // 延迟重新加载规则列表和统计信息,让用户能看到成功状态 - setTimeout(() => { - // 根据当前显示的规则类型重新加载对应的规则列表 - if (currentRulesType === 'local') { - console.log('Reloading local rules'); - loadLocalRules(); - } else { - console.log('Reloading remote rules'); - loadRemoteRules(); - } - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } else { - const errorMessage = responseData.error || responseData.message || `删除规则失败: ${response.status}`; - // 显示错误状态 - updateRuleStatus(rule, 'error', errorMessage); - throw new Error(errorMessage); - } - } catch (error) { - console.error('Error deleting rule:', error); - // 显示错误状态 - updateRuleStatus(rule, 'error', error.message); - showNotification('删除规则失败: ' + error.message, 'error'); - } -} - -// 添加新规则 -async function handleAddRule() { - const rule = document.getElementById('new-rule').value.trim(); - const statusElement = document.getElementById('save-rule-status'); - - if (!rule) { - showNotification('规则不能为空', 'error'); - return; - } - - try { - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示加载状态 - statusElement.innerHTML = ' 正在添加...'; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和加载状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-loading'); - - const response = await fetch('/api/shield', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ rule }) - }); - - // 解析服务器响应 - let responseData; - try { - responseData = await response.json(); - } catch (jsonError) { - responseData = {}; - } - - // 根据服务器响应判断是否成功 - if (response.ok && responseData.status === 'success') { - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示成功状态 - statusElement.innerHTML = ' 成功'; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和成功状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-success'); - - showNotification('规则添加成功', 'success'); - // 清空输入框 - document.getElementById('new-rule').value = ''; - - // 延迟重新加载规则和统计信息,让用户能看到成功状态 - setTimeout(() => { - // 重新加载规则 - loadLocalRules(); - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } else { - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示失败状态 - const errorMessage = responseData.error || responseData.message || '添加规则失败'; - statusElement.innerHTML = ` ${errorMessage}`; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和错误状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-error'); - - showNotification(errorMessage, 'error'); - } - } catch (error) { - console.error('Error adding rule:', error); - - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示错误状态 - const errorMessage = error.message || '添加规则失败'; - statusElement.innerHTML = ` ${errorMessage}`; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和错误状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-error'); - - showNotification(errorMessage, 'error'); - } finally { - // 3秒后渐变消失 - setTimeout(() => { - // 添加淡出类 - statusElement.classList.add('status-fade-out'); - - // 等待淡出动画完成后清除状态 - setTimeout(() => { - // 清除所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - // 清空状态显示 - statusElement.innerHTML = ''; - }, 300); // 与CSS动画持续时间一致 - }, 3000); - } -} - -// 加载远程黑名单 -async function loadRemoteBlacklists() { - try { - const response = await fetch('/api/shield/blacklists'); - - if (!response.ok) { - throw new Error(`加载失败: ${response.status}`); - } - - const blacklists = await response.json(); - - // 确保blacklists是数组 - const blacklistArray = Array.isArray(blacklists) ? blacklists : []; - updateBlacklistsTable(blacklistArray); - } catch (error) { - console.error('加载远程黑名单失败:', error); - showNotification('加载远程黑名单失败', 'error'); - } -} - -// 判断黑名单是否过期(超过24小时未更新视为过期) -function isBlacklistExpired(lastUpdateTime) { - if (!lastUpdateTime) { - return true; // 从未更新过,视为过期 - } - - const lastUpdate = new Date(lastUpdateTime); - const now = new Date(); - const hoursDiff = (now - lastUpdate) / (1000 * 60 * 60); - - return hoursDiff > 24; // 超过24小时视为过期 -} - -// 更新黑名单表格 -function updateBlacklistsTable(blacklists) { - const tbody = document.getElementById('blacklists-table-body'); - - // 清空表格 - tbody.innerHTML = ''; - - // 检查黑名单数据是否为空 - if (!blacklists || blacklists.length === 0) { - const emptyRow = document.createElement('tr'); - emptyRow.innerHTML = '暂无黑名单'; - tbody.appendChild(emptyRow); - return; - } - - // 对于大量黑名单,限制显示数量 - const maxBlacklistsToShow = 100; // 限制最大显示数量 - const blacklistsToShow = blacklists.length > maxBlacklistsToShow ? blacklists.slice(0, maxBlacklistsToShow) : blacklists; - - // 使用DocumentFragment提高性能 - const fragment = document.createDocumentFragment(); - - blacklistsToShow.forEach(blacklist => { - const tr = document.createElement('tr'); - tr.className = 'border-b border-gray-200 hover:bg-gray-50'; - - // 名称单元格 - const tdName = document.createElement('td'); - tdName.className = 'py-3 px-4'; - tdName.textContent = blacklist.name || '未命名'; - - // URL单元格 - const tdUrl = document.createElement('td'); - tdUrl.className = 'py-3 px-4 truncate max-w-xs'; - tdUrl.textContent = blacklist.url; - - // 状态单元格 - const tdStatus = document.createElement('td'); - tdStatus.className = 'py-3 px-4 text-center'; - - // 判断状态颜色:绿色(启用)、灰色(禁用) - let statusColor = 'bg-gray-300'; // 默认禁用 - let statusText = '禁用'; - - if (blacklist.enabled) { - statusColor = 'bg-success'; // 绿色表示启用 - statusText = '启用'; - } - - const statusContainer = document.createElement('div'); - statusContainer.className = 'flex items-center justify-center'; - - const statusDot = document.createElement('span'); - statusDot.className = `inline-block w-3 h-3 rounded-full ${statusColor}`; - statusDot.title = statusText; - - const statusTextSpan = document.createElement('span'); - statusTextSpan.className = 'text-sm ml-2'; - statusTextSpan.textContent = statusText; - - statusContainer.appendChild(statusDot); - statusContainer.appendChild(statusTextSpan); - tdStatus.appendChild(statusContainer); - - // 更新状态单元格 - const tdUpdateStatus = document.createElement('td'); - tdUpdateStatus.className = 'py-3 px-4 text-center'; - tdUpdateStatus.id = `update-status-${encodeURIComponent(blacklist.url)}`; - tdUpdateStatus.innerHTML = '-'; - - // 操作单元格 - const tdActions = document.createElement('td'); - tdActions.className = 'py-3 px-4 text-right space-x-2'; - - // 启用/禁用按钮 - const toggleBtn = document.createElement('button'); - toggleBtn.className = `toggle-blacklist-btn px-3 py-1 rounded-md transition-colors text-sm ${blacklist.enabled ? 'bg-warning text-white hover:bg-warning/90' : 'bg-success text-white hover:bg-success/90'}`; - toggleBtn.dataset.url = blacklist.url; - toggleBtn.dataset.enabled = blacklist.enabled; - toggleBtn.innerHTML = ``; - toggleBtn.title = blacklist.enabled ? '禁用黑名单' : '启用黑名单'; - toggleBtn.addEventListener('click', handleToggleBlacklist); - - // 刷新按钮 - const refreshBtn = document.createElement('button'); - refreshBtn.className = 'update-blacklist-btn px-3 py-1 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors text-sm'; - refreshBtn.dataset.url = blacklist.url; - refreshBtn.innerHTML = ''; - refreshBtn.title = '刷新黑名单'; - refreshBtn.addEventListener('click', handleUpdateBlacklist); - - // 删除按钮 - const deleteBtn = document.createElement('button'); - deleteBtn.className = 'delete-blacklist-btn px-3 py-1 bg-danger text-white rounded-md hover:bg-danger/90 transition-colors text-sm'; - deleteBtn.dataset.url = blacklist.url; - deleteBtn.innerHTML = ''; - deleteBtn.title = '删除黑名单'; - deleteBtn.addEventListener('click', handleDeleteBlacklist); - - tdActions.appendChild(toggleBtn); - tdActions.appendChild(refreshBtn); - tdActions.appendChild(deleteBtn); - - tr.appendChild(tdName); - tr.appendChild(tdUrl); - tr.appendChild(tdStatus); - tr.appendChild(tdUpdateStatus); - tr.appendChild(tdActions); - fragment.appendChild(tr); - }); - - // 一次性添加所有行到DOM - tbody.appendChild(fragment); - - // 如果有更多黑名单,添加提示 - if (blacklists.length > maxBlacklistsToShow) { - const infoRow = document.createElement('tr'); - infoRow.innerHTML = `显示前 ${maxBlacklistsToShow} 个黑名单,共 ${blacklists.length} 个`; - tbody.appendChild(infoRow); - } -} - -// 处理更新单个黑名单 -async function handleUpdateBlacklist(e) { - // 确保获取到正确的按钮元素 - const btn = e.target.closest('.update-blacklist-btn'); - if (!btn) { - console.error('未找到更新按钮元素'); - return; - } - - const url = btn.dataset.url; - - if (!url) { - showNotification('无效的黑名单URL', 'error'); - return; - } - - try { - // 显示加载状态 - updateStatus(url, 'loading'); - - // 获取当前所有黑名单 - const response = await fetch('/api/shield/blacklists'); - if (!response.ok) { - throw new Error(`获取黑名单失败: ${response.status}`); - } - - const blacklists = await response.json(); - - // 找到目标黑名单并更新其状态 - const updatedBlacklists = blacklists.map(blacklist => { - if (blacklist.url === url) { - return { - Name: blacklist.name, - URL: blacklist.url, - Enabled: blacklist.enabled, - LastUpdateTime: new Date().toISOString() - }; - } - return { - Name: blacklist.name, - URL: blacklist.url, - Enabled: blacklist.enabled, - LastUpdateTime: blacklist.lastUpdateTime || blacklist.LastUpdateTime - }; - }); - - // 发送更新请求 - const updateResponse = await fetch('/api/shield/blacklists', { - method: 'PUT', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(updatedBlacklists) - }); - - // 解析服务器响应 - let responseData; - try { - responseData = await updateResponse.json(); - } catch (jsonError) { - responseData = {}; - } - - // 根据服务器响应判断是否成功 - if (updateResponse.ok && (responseData.status === 'success' || !responseData.status)) { - // 显示成功状态 - updateStatus(url, 'success'); - - // 显示通知 - showNotification('黑名单更新成功', 'success'); - - // 延迟重新加载黑名单和统计信息,让用户能看到成功状态 - setTimeout(() => { - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } else { - // 显示失败状态 - updateStatus(url, 'error', responseData.error || responseData.message || `更新失败: ${updateResponse.status}`); - showNotification(`黑名单更新失败: ${responseData.error || responseData.message || updateResponse.status}`, 'error'); - - // 延迟重新加载黑名单和统计信息 - setTimeout(() => { - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } - } catch (error) { - console.error('更新黑名单失败:', error); - // 显示错误状态 - updateStatus(url, 'error', error.message); - showNotification('更新黑名单失败: ' + error.message, 'error'); - } -} - -// 处理删除黑名单 -async function handleDeleteBlacklist(e) { - // 确保获取到正确的按钮元素 - const btn = e.target.closest('.delete-blacklist-btn'); - if (!btn) { - console.error('未找到删除按钮元素'); - return; - } - - const url = btn.dataset.url; - - if (!url) { - showNotification('无效的黑名单URL', 'error'); - return; - } - - // 确认删除 - if (!confirm('确定要删除这个黑名单吗?删除后将无法恢复。')) { - return; - } - - try { - // 获取当前行元素 - const tr = btn.closest('tr'); - if (!tr) { - console.error('未找到行元素'); - return; - } - - // 显示加载状态 - updateStatus(url, 'loading'); - - // 获取当前所有黑名单 - const response = await fetch('/api/shield/blacklists'); - if (!response.ok) { - throw new Error(`获取黑名单失败: ${response.status}`); - } - - const blacklists = await response.json(); - - // 过滤掉要删除的黑名单 - const updatedBlacklists = blacklists.filter(blacklist => blacklist.url !== url); - - // 发送更新请求 - const updateResponse = await fetch('/api/shield/blacklists', { - method: 'PUT', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(updatedBlacklists) - }); - - // 解析服务器响应 - let responseData; - try { - responseData = await updateResponse.json(); - } catch (jsonError) { - responseData = {}; - } - - // 根据服务器响应判断是否成功 - if (updateResponse.ok && responseData.status === 'success') { - // 显示成功状态 - updateStatus(url, 'success', '已删除'); - - // 显示通知 - showNotification('黑名单删除成功', 'success'); - - // 延迟后渐变移除该行 - setTimeout(() => { - // 添加渐变移除类 - tr.style.transition = 'all 0.3s ease-in-out'; - tr.style.opacity = '0'; - tr.style.transform = 'translateX(-10px)'; - tr.style.height = tr.offsetHeight + 'px'; - tr.style.overflow = 'hidden'; - - // 等待过渡效果完成后,隐藏该行 - setTimeout(() => { - tr.style.display = 'none'; - - // 延迟重新加载黑名单和统计信息,确保视觉效果完成 - setTimeout(() => { - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - }, 100); - }, 300); - }, 3000); - } else { - // 显示失败状态 - const errorMessage = responseData.error || responseData.message || `删除失败: ${updateResponse.status}`; - updateStatus(url, 'error', errorMessage); - showNotification(errorMessage, 'error'); - - // 延迟重新加载黑名单和统计信息 - setTimeout(() => { - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } - } catch (error) { - console.error('删除黑名单失败:', error); - // 显示错误状态 - updateStatus(url, 'error', error.message); - showNotification('删除黑名单失败: ' + error.message, 'error'); - } -} - -// 处理启用/禁用黑名单 -async function handleToggleBlacklist(e) { - // 确保获取到正确的按钮元素 - const btn = e.target.closest('.toggle-blacklist-btn'); - if (!btn) { - console.error('未找到启用/禁用按钮元素'); - return; - } - - const url = btn.dataset.url; - const currentEnabled = btn.dataset.enabled === 'true'; - - if (!url) { - showNotification('无效的黑名单URL', 'error'); - return; - } - - try { - // 显示加载状态 - updateStatus(url, 'loading'); - - // 获取当前所有黑名单 - const response = await fetch('/api/shield/blacklists'); - if (!response.ok) { - throw new Error(`获取黑名单失败: ${response.status}`); - } - - const blacklists = await response.json(); - - // 找到目标黑名单并更新其状态 - const updatedBlacklists = blacklists.map(blacklist => { - if (blacklist.url === url) { - return { - Name: blacklist.name, - URL: blacklist.url, - Enabled: !currentEnabled, - LastUpdateTime: blacklist.lastUpdateTime || blacklist.LastUpdateTime - }; - } - return { - Name: blacklist.name, - URL: blacklist.url, - Enabled: blacklist.enabled, - LastUpdateTime: blacklist.lastUpdateTime || blacklist.LastUpdateTime - }; - }); - - // 发送更新请求 - const updateResponse = await fetch('/api/shield/blacklists', { - method: 'PUT', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(updatedBlacklists) - }); - - // 解析服务器响应 - let responseData; - try { - responseData = await updateResponse.json(); - } catch (jsonError) { - responseData = {}; - } - - // 根据服务器响应判断是否成功 - if (updateResponse.ok && responseData.status === 'success') { - // 显示成功状态 - updateStatus(url, 'success', currentEnabled ? '已禁用' : '已启用'); - - // 显示通知 - showNotification(`黑名单已${currentEnabled ? '禁用' : '启用'}`, 'success'); - - // 延迟重新加载黑名单和统计信息,让用户能看到成功状态 - setTimeout(() => { - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } else { - // 显示失败状态 - const errorMessage = responseData.error || responseData.message || `更新状态失败: ${updateResponse.status}`; - updateStatus(url, 'error', errorMessage); - showNotification(errorMessage, 'error'); - - // 延迟重新加载黑名单和统计信息 - setTimeout(() => { - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - }, 3000); - } - } catch (error) { - console.error('启用/禁用黑名单失败:', error); - // 显示错误状态 - updateStatus(url, 'error', error.message); - showNotification('启用/禁用黑名单失败: ' + error.message, 'error'); - } -} - -// 处理添加黑名单 -async function handleAddBlacklist(event) { - // 如果存在event参数,则调用preventDefault()防止表单默认提交 - if (event && typeof event.preventDefault === 'function') { - event.preventDefault(); - } - - const nameInput = document.getElementById('blacklist-name'); - const urlInput = document.getElementById('blacklist-url'); - const statusElement = document.getElementById('save-blacklist-status'); - - const name = nameInput ? nameInput.value.trim() : ''; - const url = urlInput ? urlInput.value.trim() : ''; - - // 简单验证 - if (!name || !url) { - showNotification('名称和URL不能为空', 'error'); - return; - } - - // 验证URL格式 - try { - new URL(url); - } catch (e) { - showNotification('URL格式不正确', 'error'); - return; - } - - try { - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示加载状态 - statusElement.innerHTML = ' 正在添加...'; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和加载状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-loading'); - - // 发送添加请求 - const response = await fetch('/api/shield/blacklists', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ name, url }) - }); - - // 解析服务器响应 - let responseData; - try { - responseData = await response.json(); - } catch (jsonError) { - responseData = {}; - } - - // 根据服务器响应判断是否成功 - if (response.ok && (responseData.status === 'success' || !responseData.status)) { - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示成功状态 - statusElement.innerHTML = ' 成功'; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和成功状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-success'); - - showNotification('黑名单添加成功', 'success'); - // 清空输入框 - if (nameInput) nameInput.value = ''; - if (urlInput) urlInput.value = ''; - // 重新加载黑名单 - loadRemoteBlacklists(); - // 重新加载统计信息 - loadShieldStats(); - } else { - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示失败状态 - const errorMessage = responseData.error || responseData.message || `添加失败: ${response.status}`; - statusElement.innerHTML = ` ${errorMessage}`; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和错误状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-error'); - - showNotification(errorMessage, 'error'); - } - } catch (error) { - console.error('Error adding blacklist:', error); - - // 清除之前的所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - - // 显示错误状态 - const errorMessage = error.message || '添加黑名单失败'; - statusElement.innerHTML = ` ${errorMessage}`; - - // 强制重排,确保过渡效果生效 - void statusElement.offsetWidth; - - // 添加过渡类和错误状态类 - statusElement.classList.add('status-transition', 'status-fade-in', 'status-error'); - - showNotification(errorMessage, 'error'); - } finally { - // 3秒后渐变消失 - setTimeout(() => { - // 添加淡出类 - statusElement.classList.add('status-fade-out'); - - // 等待淡出动画完成后清除状态 - setTimeout(() => { - // 清除所有类 - statusElement.classList.remove('status-transition', 'status-loading', 'status-success', 'status-error', 'status-fade-in', 'status-fade-out'); - // 清空状态显示 - statusElement.innerHTML = ''; - }, 300); // 与CSS动画持续时间一致 - }, 3000); - } -} - - - -// 当前显示的规则类型:'local' 或 'remote' -let currentRulesType = 'local'; - -// 设置事件监听器 -function setupShieldEventListeners() { - // 自定义规则管理事件 - const saveRuleBtn = document.getElementById('save-rule-btn'); - if (saveRuleBtn) { - saveRuleBtn.addEventListener('click', handleAddRule); - } - - // 远程黑名单管理事件 - const saveBlacklistBtn = document.getElementById('save-blacklist-btn'); - if (saveBlacklistBtn) { - saveBlacklistBtn.addEventListener('click', handleAddBlacklist); - } - - // 添加切换查看自定义规则和远程规则的事件监听 - const viewLocalRulesBtn = document.getElementById('view-local-rules-btn'); - if (viewLocalRulesBtn) { - viewLocalRulesBtn.addEventListener('click', loadLocalRules); - } - - const viewRemoteRulesBtn = document.getElementById('view-remote-rules-btn'); - if (viewRemoteRulesBtn) { - viewRemoteRulesBtn.addEventListener('click', loadRemoteRules); - } -} - -// 显示成功消息 -function showSuccessMessage(message) { - showNotification(message, 'success'); -} - -// 显示错误消息 -function showErrorMessage(message) { - showNotification(message, 'error'); -} - - - -// 显示通知 -function showNotification(message, type = 'info') { - // 移除现有通知 - const existingNotification = document.querySelector('.notification'); - if (existingNotification) { - existingNotification.remove(); - } - - // 创建新通知 - const notification = document.createElement('div'); - notification.className = `notification fixed bottom-4 right-4 px-6 py-3 rounded-lg shadow-lg z-50 transform transition-all duration-300 ease-in-out translate-y-0 opacity-0`; - - // 设置通知样式 - if (type === 'success') { - notification.classList.add('bg-green-500', 'text-white'); - } else if (type === 'error') { - notification.classList.add('bg-red-500', 'text-white'); - } else { - notification.classList.add('bg-blue-500', 'text-white'); - } - - notification.innerHTML = ` -
- - ${message} -
- `; - - document.body.appendChild(notification); - - // 显示通知 - setTimeout(() => { - notification.classList.remove('opacity-0'); - notification.classList.add('opacity-100'); - }, 10); - - // 3秒后隐藏通知 - setTimeout(() => { - notification.classList.remove('opacity-100'); - notification.classList.add('opacity-0'); - setTimeout(() => { - notification.remove(); - }, 300); - }, 3000); -} - -// 页面加载完成后初始化 -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initShieldPage); -} else { - initShieldPage(); -} - -// 当切换到屏蔽管理页面时重新加载数据 -document.addEventListener('DOMContentLoaded', () => { - // 监听hash变化,当切换到屏蔽管理页面时重新加载数据 - window.addEventListener('hashchange', () => { - if (window.location.hash === '#shield') { - initShieldPage(); - } - }); -}); \ No newline at end of file diff --git a/staticbak/static/js/vendor/chart.umd.min.js b/staticbak/static/js/vendor/chart.umd.min.js deleted file mode 100644 index eafab1b..0000000 --- a/staticbak/static/js/vendor/chart.umd.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,function(){"use strict";var s=Object.freeze({__proto__:null,get Colors(){return dn},get Decimation(){return fn},get Filler(){return Dn},get Legend(){return Tn},get SubTitle(){return In},get Title(){return En},get Tooltip(){return Un}});function t(){}const F=(()=>{let t=0;return()=>t++})();function P(t){return null==t}function O(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function A(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function p(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function g(t,e){return p(t)?t:e}function T(t,e){return void 0===t?e:t}const V=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,B=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function k(t,e,i,s){let a,n,o;if(O(t))if(n=t.length,s)for(a=n-1;0<=a;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function q(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s=s.endsWith("\\")?s.slice(0,-1)+".":(i.push(s),"");return i}function m(t,e){const i=X[e]||(X[e]=function(){const i=q(e);return t=>{for(const e of i){if(""===e)break;t=t&&t[e]}return t}}());return i(t)}function K(t){return t.charAt(0).toUpperCase()+t.slice(1)}const G=t=>void 0!==t,u=t=>"function"==typeof t,Z=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function J(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const S=Math.PI,_=2*S,Q=_+S,tt=Number.POSITIVE_INFINITY,et=S/180,D=S/2,it=S/4,st=2*S/3,r=Math.log10,y=Math.sign;function at(t,e,i){return Math.abs(t-e)t-e).pop(),e}function rt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function lt(t,e){var i=Math.round(t);return i-e<=t&&t<=i+e}function ht(t,e,i){let s,a,n;for(s=0,a=t.length;s=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function bt(e,i,t){t=t||(t=>e[t]>1)?n=s:a=s;return{lo:n,hi:a}}const f=(i,s,a,t)=>bt(i,a,t?t=>{var e=i[t][s];return ei[t][s]bt(e,s,t=>e[t][i]>=s);function vt(t,e,i){let s=0,a=t.length;for(;ss&&t[a-1]>i;)a--;return 0{const i="_onData"+K(t),s=a[t];Object.defineProperty(a,t,{configurable:!0,enumerable:!1,value(...e){var t=s.apply(this,e);return a._chartjs.listeners.forEach(t=>{"function"==typeof t[i]&&t[i](...e)}),t}})}))}function Mt(e,t){var i=e._chartjs;if(i){const s=i.listeners,a=s.indexOf(t);-1!==a&&s.splice(a,1),0{delete e[t]}),delete e._chartjs)}}function wt(t){var e=new Set(t);return e.size===t.length?t:Array.from(e)}const kt="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function St(e,i){let s,a=!1;return function(...t){s=t,a||(a=!0,kt.call(window,()=>{a=!1,e.apply(i,s)}))}}function Pt(e,i){let s;return function(...t){return i?(clearTimeout(s),s=setTimeout(e,i,t)):e.apply(this,t),i}}const Dt=t=>"start"===t?"left":"end"===t?"right":"center",E=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,Ct=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function Ot(t,e,i){var s=e.length;let a=0,n=s;if(t._sorted){const{iScale:o,_parsed:r}=t,l=o.axis,{min:h,max:c,minDefined:d,maxDefined:u}=o.getUserBounds();d&&(a=C(Math.min(f(r,l,h).lo,i?s:f(e,l,o.getPixelForValue(h)).lo),0,s-1)),n=u?C(Math.max(f(r,o.axis,c,!0).hi+1,i?0:f(e,l,o.getPixelForValue(c),!0).hi+1),a,s)-a:s-a}return{start:a,count:n}}function At(t){var{xScale:e,yScale:i,_scaleRanges:s}=t,a={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=a,!0;t=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,a),t}var l=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(e,i,s,t){const a=i.listeners[t],n=i.duration;a.forEach(t=>t({chart:e,initial:i.initial,numSteps:n,currentStep:Math.min(s-i.start,n)}))}_refresh(){this._request||(this._running=!0,this._request=kt.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(o=Date.now()){let r=0;this._charts.forEach((s,a)=>{if(s.running&&s.items.length){const n=s.items;let t,e=n.length-1,i=!1;for(;0<=e;--e)(t=n[e])._active?(t._total>s.duration&&(s.duration=t._total),t.tick(o),i=!0):(n[e]=n[n.length-1],n.pop());i&&(a.draw(),this._notify(a,s,o,"progress")),n.length||(s.running=!1,this._notify(a,s,o,"complete"),s.initial=!1),r+=n.length}}),this._lastDate=o,0===r&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return 0Math.max(t,e._duration),0),this._refresh())}running(t){if(!this._running)return!1;t=this._charts.get(t);return!!(t&&t.running&&t.items.length)}stop(e){const i=this._charts.get(e);if(i&&i.items.length){const s=i.items;let t=s.length-1;for(;0<=t;--t)s[t].cancel();i.items=[],this._notify(e,i,Date.now(),"complete")}}remove(t){return this._charts.delete(t)}};function Tt(t){return t+.5|0}const Lt=(t,e,i)=>Math.max(Math.min(t,i),e);function Et(t){return Lt(Tt(2.55*t),0,255)}function Rt(t){return Lt(Tt(255*t),0,255)}function o(t){return Lt(Tt(t/2.55)/100,0,1)}function It(t){return Lt(Tt(100*t),0,100)}const n={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},zt=[..."0123456789ABCDEF"],Ft=t=>zt[15&t],Vt=t=>zt[(240&t)>>4]+zt[15&t],Bt=t=>(240&t)>>4==(15&t);const Wt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Nt(i,t,s){const a=t*Math.min(s,1-s),e=(t,e=(t+i/30)%12)=>s-a*Math.max(Math.min(e-3,9-e,1),-1);return[e(0),e(8),e(4)]}function Ht(i,s,a){i=(t,e=(t+i/60)%6)=>a-a*s*Math.max(Math.min(e,4-e,1),0);return[i(5),i(3),i(1)]}function jt(t,e,i){const s=Nt(t,1,.5);let a;for(1t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Qt=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function te(e,i,s){if(e){let t=Yt(e);t[i]=Math.max(0,Math.min(t[i]+t[i]*s,0===i?360:1)),t=Ut(t),e.r=t[0],e.g=t[1],e.b=t[2]}}function ee(t,e){return t&&Object.assign(e||{},t)}function ie(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?3<=t.length&&(e={r:t[0],g:t[1],b:t[2],a:255},3>16&255,n>>8&255,255&n]}return t}()).transparent=[0,0,0,0]),(i=Gt[i.toLowerCase()])&&{r:i[0],g:i[1],b:i[2],a:4===i.length?i[3]:255})||se(t)),this._rgb=a,this._valid=!!a}get valid(){return this._valid}get rgb(){var t=ee(this._rgb);return t&&(t.a=o(t.a)),t}set rgb(t){this._rgb=ie(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${o(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?(t=this._rgb,e=t,e=Bt(e.r)&&Bt(e.g)&&Bt(e.b)&&Bt(e.a)?Ft:Vt,t?"#"+e(t.r)+e(t.g)+e(t.b)+((t=t.a)<255?e(t):""):void 0):void 0;var t,e}hslString(){if(this._valid){var t,e,i,s=this._rgb;if(s)return i=Yt(s),t=i[0],e=It(i[1]),i=It(i[2]),s.a<255?`hsla(${t}, ${e}%, ${i}%, ${o(s.a)})`:`hsl(${t}, ${e}%, ${i}%)`}}mix(t,e){if(t){const s=this.rgb,a=t.rgb;var t=void 0===e?.5:e,e=2*t-1,i=s.a-a.a,e=(1+(e*i==-1?e:(e+i)/(1+e*i)))/2,i=1-e;s.r=255&e*s.r+i*a.r+.5,s.g=255&e*s.g+i*a.g+.5,s.b=255&e*s.b+i*a.b+.5,s.a=t*s.a+(1-t)*a.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=(i=this._rgb,t=t._rgb,e=e,s=Qt(o(i.r)),a=Qt(o(i.g)),n=Qt(o(i.b)),{r:Rt(Jt(s+e*(Qt(o(t.r))-s))),g:Rt(Jt(a+e*(Qt(o(t.g))-a))),b:Rt(Jt(n+e*(Qt(o(t.b))-n))),a:i.a+e*(t.a-i.a)})),this;var i,s,a,n}clone(){return new ae(this.rgb)}alpha(t){return this._rgb.a=Rt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=Tt(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return te(this._rgb,2,t),this}darken(t){return te(this._rgb,2,-t),this}saturate(t){return te(this._rgb,1,t),this}desaturate(t){return te(this._rgb,1,-t),this}rotate(t){return e=this._rgb,t=t,(i=Yt(e))[0]=Xt(i[0]+t),i=Ut(i),e.r=i[0],e.g=i[1],e.b=i[2],this;var e,i}}function ne(t){return!(!t||"object"!=typeof t)&&("[object CanvasPattern]"===(t=t.toString())||"[object CanvasGradient]"===t)}function oe(t){return ne(t)?t:new ae(t)}function re(t){return ne(t)?t:new ae(t).saturate(.5).darken(.1).hexString()}const le=["x","y","borderWidth","radius","tension"],he=["color","borderColor","backgroundColor"],ce=new Map;function de(t,e,a){return function(t,e){e=a||{};var i=t+JSON.stringify(e);let s=ce.get(i);return s||(s=new Intl.NumberFormat(t,e),ce.set(i,s)),s}(e).format(t)}const ue={values:t=>O(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";var s=this.chart.options.locale;let a,n=t;if(1.8*i.length?ue.numeric.call(this,t,e,i):""}};var ge={formatters:ue};const fe=Object.create(null),pe=Object.create(null);function me(i,t){if(!t)return i;var s=t.split(".");for(let t=0,e=s.length;tt.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>re(e.backgroundColor),this.hoverBorderColor=(t,e)=>re(e.borderColor),this.hoverColor=(t,e)=>re(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return be(this,t,e)}get(t){return me(this,t)}describe(t,e){return be(pe,t,e)}override(t,e){return be(fe,t,e)}route(t,e,i,s){const a=me(this,t),n=me(this,i),o="_"+e;Object.defineProperties(a,{[o]:{value:a[e],writable:!0},[e]:{enumerable:!0,get(){var t=this[o],e=n[s];return A(t)?Object.assign({},e,t):T(t,e)},set(t){this[o]=t}}})}apply(t){t.forEach(t=>t(this))}}({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:he},numbers:{type:"number",properties:le}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ge.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function xe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ve(t){let e=t.parentNode;return e=e&&"[object ShadowRoot]"===e.toString()?e.host:e}function _e(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const ye=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function Me(t,e){return ye(t).getPropertyValue(e)}const we=["top","right","bottom","left"];function ke(e,i,s){const a={};s=s?"-"+s:"";for(let t=0;t<4;t++){var n=we[t];a[n]=parseFloat(e[i+"-"+n+s])||0}return a.width=a.left+a.right,a.height=a.top+a.bottom,a}function Se(t,e){if("native"in t)return t;var{canvas:i,currentDevicePixelRatio:s}=e,a=ye(i),n="border-box"===a.boxSizing,o=ke(a,"padding"),a=ke(a,"border","width"),{x:t,y:r,box:l}=function(t,e){var i,s=t.touches,s=s&&s.length?s[0]:t,{offsetX:a,offsetY:n}=s;let o,r,l=!1;if(i=n,t=t.target,!(0Math.round(10*t)/10;function De(t,e,i,s){var a=ye(t),n=ke(a,"margin"),o=_e(a.maxWidth,t,"clientWidth")||tt,r=_e(a.maxHeight,t,"clientHeight")||tt,t=function(t,e,i){let s,a;if(void 0===e||void 0===i){const n=ve(t);if(n){const t=n.getBoundingClientRect(),o=ye(n),r=ke(o,"border","width"),l=ke(o,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=_e(o.maxWidth,n,"clientWidth"),a=_e(o.maxHeight,n,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||tt,maxHeight:a||tt}}(t,e,i);let{width:l,height:h}=t;if("content-box"===a.boxSizing){const t=ke(a,"border","width"),e=ke(a,"padding");l-=e.width+t.width,h-=e.height+t.height}return l=Math.max(0,l-n.width),h=Math.max(0,s?l/s:h-n.height),l=Pe(Math.min(l,o,t.maxWidth)),h=Pe(Math.min(h,r,t.maxHeight)),l&&!h&&(h=Pe(l/2)),(void 0!==e||void 0!==i)&&s&&t.height&&h>t.height&&(h=t.height,l=Pe(Math.floor(h*s))),{width:l,height:h}}function Ce(t,e,i){var e=e||1,s=Math.floor(t.height*e),a=Math.floor(t.width*e);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const n=t.canvas;return n.style&&(i||!n.style.height&&!n.style.width)&&(n.style.height=t.height+"px",n.style.width=t.width+"px"),(t.currentDevicePixelRatio!==e||n.height!==s||n.width!==a)&&(t.currentDevicePixelRatio=e,n.height=s,n.width=a,t.ctx.setTransform(e,0,0,e,0,0),!0)}var Oe=function(){let t=!1;try{var e={get passive(){return!(t=!0)}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Ae(t,e){const i=Me(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function Te(t){return!t||P(t.size)||P(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Le(t,e,i,s,a){let n=e[a];return n||(n=e[a]=t.measureText(a).width,i.push(a)),s=n>s?n:s}function Ee(t,e,i,s){let a=(s=s||{}).data=s.data||{},n=s.garbageCollect=s.garbageCollect||[],o=(s.font!==e&&(a=s.data={},n=s.garbageCollect=[],s.font=e),t.save(),t.font=e,0);var r=i.length;let l,h,c,d,u;for(l=0;li.length){for(l=0;le.left-i&&t.xe.top-i&&t.yr[0]){const i=t||r;void 0===e&&(e=ti("_fallback",r));t={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:r,_rootScopes:i,_fallback:e,_getTarget:a,override:t=>Ye([t,...r],l,i,e)};return new Proxy(t,{deleteProperty:(t,e)=>(delete t[e],delete t._keys,delete r[0][e],!0),get:(n,o)=>Ke(n,o,()=>{var t,e=o,i=r,s=n;for(const a of l)if(t=ti(Xe(a,e),i),void 0!==t)return qe(e,t)?Je(i,s,e,t):t}),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(r[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=a());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(s,e,i,a){var t={_cacheable:!1,_proxy:s,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ue(s,a),setContext:t=>$e(s,t,i,a),override:t=>$e(s.override(t),e,i,a)};return new Proxy(t,{deleteProperty:(t,e)=>(delete t[e],delete s[e],!0),get:(r,h,c)=>Ke(r,h,()=>{{var l=r,e=h,i=c;const{_proxy:s,_context:a,_subProxy:n,_descriptors:o}=l;let t=s[e];return O(t=u(t)&&o.isScriptable(e)?function(t,e,i){const{_proxy:s,_context:a,_subProxy:n,_stack:o}=l;if(o.has(t))throw new Error("Recursion detected: "+Array.from(o).join("->")+"->"+t);o.add(t);let r=e(a,n||i);return o.delete(t),r=qe(t,r)?Je(s._scopes,s,t,r):r}(e,t,i):t)&&t.length&&(t=function(t,e,i,s){const{_proxy:a,_context:n,_subProxy:o,_descriptors:r}=i;if(void 0!==n.index&&s(t))return e[n.index%e.length];if(A(e[0])){const i=e,s=a._scopes.filter(t=>t!==i);e=[];for(const A of i){const i=Je(s,a,t,A);e.push($e(i,n,o&&o[t],r))}}return e}(e,t,l,o.isIndexable)),t=qe(e,t)?$e(t,a,n&&n[e],o):t}}),getOwnPropertyDescriptor:(t,e)=>t._descriptors.allKeys?Reflect.has(s,e)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(s,e),getPrototypeOf:()=>Reflect.getPrototypeOf(s),has:(t,e)=>Reflect.has(s,e),ownKeys:()=>Reflect.ownKeys(s),set:(t,e,i)=>(s[e]=i,delete t[e],!0)})}function Ue(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:a=e.allKeys}=t;return{allKeys:a,scriptable:i,indexable:s,isScriptable:u(i)?i:()=>i,isIndexable:u(s)?s:()=>s}}const Xe=(t,e)=>t?t+K(e):e,qe=(t,e)=>A(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Ke(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];i=i();return t[e]=i}function Ge(t,e,i){return u(t)?t(e,i):t}function Ze(t,e,i,s,a){for(const r of e){n=i,o=r;const e=!0===n?o:"string"==typeof n?m(o,n):void 0;if(e){t.add(e);o=Ge(e._fallback,i,a);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}var n,o;return!1}function Je(t,s,a,n){const e=s._rootScopes,i=Ge(s._fallback,a,n),o=[...t,...e],r=new Set;r.add(n);t=Qe(r,o,a,i||a,n);return null!==t&&(void 0===i||i===a||null!==Qe(r,o,i,t,n))&&Ye(Array.from(r),[""],e,i,()=>{{var t=a,e=n;const i=s._getTarget();return t in i||(i[t]={}),O(t=i[t])&&A(e)?e:t||{}}})}function Qe(t,e,i,s,a){for(;i;)i=Ze(t,e,i,s,a);return i}function ti(t,e){for(const i of e)if(i){const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e=e||(t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter(t=>!t.startsWith("_")))e.add(t);return Array.from(e)}(t._scopes))}function ii(t,e,i,s){const a=t["iScale"],{key:n="r"}=this._parsing,o=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function oi(t,e,i,s){var t=t.skip?e:t,a=e,e=i.skip?e:i,i=gt(a,t),n=gt(e,a);let o=i/(i+n),r=n/(i+n);o=isNaN(o)?0:o,r=isNaN(r)?0:r;i=s*o,n=s*r;return{previous:{x:a.x-i*(e.x-t.x),y:a.y-i*(e.y-t.y)},next:{x:a.x+n*(e.x-t.x),y:a.y+n*(e.y-t.y)}}}function ri(t,n="x"){const e=ni(n),i=t.length,r=Array(i).fill(0),l=Array(i);let s,a,o,h=ai(t,0);for(s=0;s!t.skip)),"monotone"===e.cubicInterpolationMode)ri(o,t);else{let t=i?o[o.length-1]:o[0];for(s=0,a=o.length;s0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*--t)*Math.sin((t-e)*_/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*_/i)+1,gi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>--t*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-(--t*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>--t*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*D),easeOutSine:t=>Math.sin(t*D),easeInOutSine:t=>-.5*(Math.cos(S*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>1<=t?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1- --t*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){return ci(t)?t:t<.5?.5*di(2*t,.1125,.45):.5+.5*ui(2*t-1,.1125,.45)},easeInBack(t){return t*t*(2.70158*t-1.70158)},easeOutBack(t){return--t*t*(2.70158*t+1.70158)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-gi.easeOutBounce(1-t),easeOutBounce(t){var e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*gi.easeInBounce(2*t):.5*gi.easeOutBounce(2*t-1)+.5};function fi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:("middle"===s?i<.5?t:e:"after"===s?i<1?t:e:0+t||0;function yi(e,i){const t={},s=A(i),a=s?Object.keys(i):i,n=A(e)?s?t=>T(e[t],e[i[t]]):t=>e[t]:()=>e;for(const e of a)t[e]=_i(n(e));return t}function Mi(t){return yi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return yi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function I(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function z(t,e){e=e||R.font;let i=T((t=t||{}).size,e.size),s=("string"==typeof i&&(i=parseInt(i,10)),T(t.style,e.style));s&&!(""+s).match(xi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const a={family:T(t.family,e.family),lineHeight:vi(T(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:T(t.weight,e.weight),string:""};return a.string=Te(a),a}function ki(t,e,i,s){let a,n,o,r=!0;for(a=0,n=t.length;ai&&0===t?0:t+e;return{min:a(t,-Math.abs(e)),max:a(s,e)}}function Pi(t,e){return Object.assign(Object.create(t),e)}function Di(t,e,i){return t?(s=e,a=i,{x:t=>s+s+a-t,setWidth(t){a=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t};var s,a}function Ci(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(s=[(i=t.canvas.style).getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Oi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Ai(t){return"angle"===t?{between:pt,compare:ft,normalize:v}:{between:c,compare:(t,e)=>t-e,normalize:t=>t}}function Ti({start:t,end:e,count:i,loop:s,style:a}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:a}}function Li(t,i,g){if(!g)return[t];const{property:s,start:a,end:n}=g,o=i.length,{compare:r,between:l,normalize:h}=Ai(s),{start:c,end:d,loop:u,style:f}=function(t,e){const{property:i,start:s,end:a}=g,{between:n,normalize:o}=Ai(i),r=e.length;let l,h,{start:c,end:d,loop:u}=t;if(u){for(c+=r,d+=r,l=0,h=r;ls&&t[a%e].skip;)a--;return a%=e,{start:s,end:a}}(i,s,a);return Ii(t,!0===n?[{start:o,end:r,loop:a}]:function(t,e,i,s){const a=t.length,n=[];let o,r=e,l=t[e];for(o=e+1;o<=i;++o){const i=t[o%a];i.skip||i.stop?l.skip||(s=!1,n.push({start:e%a,end:(o-1)%a,loop:s}),e=r=i.stop?o:null):(r=o,l.skip&&(e=o)),l=i}return null!==r&&n.push({start:e%a,end:r%a,loop:s}),n}(i,o,r{t[r](s[a],n)&&(o.push({element:t,datasetIndex:e,index:i}),l=l||t.inRange(s.x,s.y,n))}),e&&!l?[]:o}var Hi={evaluateInteractionItems:Vi,modes:{index(t,e,i,s){const a=Se(e,t),n=i.axis||"x",o=i.includeInvisible||!1,r=i.intersect?Bi(t,a,n,s,o):Wi(t,a,n,!1,s,o),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach(t=>{var e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})}),l):[]},dataset(t,e,i,s){var e=Se(e,t),a=i.axis||"xy",n=i.includeInvisible||!1;let o=i.intersect?Bi(t,e,a,s,n):Wi(t,e,a,!1,s,n);if(0Bi(t,Se(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){var e=Se(e,t),a=i.axis||"xy",n=i.includeInvisible||!1;return Wi(t,e,a,i.intersect,s,n)},x:(t,e,i,s)=>Ni(t,Se(e,t),"x",i.intersect,s),y:(t,e,i,s)=>Ni(t,Se(e,t),"y",i.intersect,s)}};const ji=["left","top","right","bottom"];function Yi(t,e){return t.filter(t=>t.pos===e)}function $i(t,e){return t.filter(t=>-1===ji.indexOf(t.pos)&&t.box.axis===e)}function Ui(t,s){return t.sort((t,e)=>{var i=s?e:t,t=s?t:e;return i.weight===t.weight?i.index-t.index:i.weight-t.weight})}function Xi(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function qi(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Ki(t,e,i,s){const a=[];let n,o,r,l,h,c;for(n=0,o=t.length,h=0;n{s[t]=Math.max(e[t],i[t])}),s}}(r.horizontal,e));const{same:o,other:d}=function(t,e,i,s){const{pos:a,box:n}=i,o=t.maxPadding;if(!A(a)){i.size&&(t[a]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?n.height:n.width),i.size=e.size/e.count,t[a]+=i.size}n.getPadding&&qi(o,n.getPadding());var s=Math.max(0,e.outerWidth-Xi(o,t,"left","right")),e=Math.max(0,e.outerHeight-Xi(o,t,"top","bottom")),r=s!==t.w,l=e!==t.h;return t.w=s,t.h=e,i.horizontal?{same:r,other:l}:{same:l,other:r}}(e,i,r,s);h|=o&&a.length,c=c||d,l.fullSize||a.push(r)}return h&&Ki(a,e,i,s)||c}function Gi(t,e,i,s,a){t.top=i,t.left=e,t.right=e+s,t.bottom=i+a,t.width=s,t.height=a}function Zi(t,e,i,s){var a=i.padding;let{x:n,y:o}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/l.weight||1;if(r.horizontal){const s=e.w*h,n=l.size||t.height;G(l.start)&&(o=l.start),t.fullSize?Gi(t,a.left,o,i.outerWidth-a.right-a.left,n):Gi(t,e.left+l.placed,o,s,n),l.start=o,l.placed+=s,o=t.bottom}else{const s=e.h*h,o=l.size||t.width;G(l.start)&&(n=l.start),t.fullSize?Gi(t,n,a.top,o,i.outerHeight-a.bottom-a.top):Gi(t,n,e.top+l.placed,o,s),l.start=n,l.placed+=s,n=t.right}}e.x=n,e.y=o}var a={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){e=t.boxes?t.boxes.indexOf(e):-1;-1!==e&&t.boxes.splice(e,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(l,t,e,i){if(l){const o=I(l.options.layout.padding),r=Math.max(t-o.width,0),h=Math.max(e-o.height,0),c=function(){const t=function(t){const e=[];let i,s,a,n,o,r;for(i=0,s=(t||[]).length;it.box.fullSize),!0),i=Ui(Yi(t,"left"),!0),s=Ui(Yi(t,"right")),a=Ui(Yi(t,"top"),!0),n=Ui(Yi(t,"bottom")),o=$i(t,"x"),r=$i(t,"y");return{fullSize:e,leftAndTop:i.concat(a),rightAndBottom:s.concat(r).concat(n).concat(o),chartArea:Yi(t,"chartArea"),vertical:i.concat(s).concat(r),horizontal:a.concat(n).concat(o)}}(),d=c.vertical,u=c.horizontal;k(l.boxes,t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()});var s=d.reduce((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1,0)||1,t=Object.freeze({outerWidth:t,outerHeight:e,padding:o,availableWidth:r,availableHeight:h,vBoxMaxWidth:r/2/s,hBoxMaxHeight:h/2}),e=Object.assign({},o);qi(e,I(i));const g=Object.assign({maxPadding:e,w:r,h:h,x:o.left,y:o.top},o),f=function(t,e){var i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:a}=i;if(t&&ji.includes(s)){const n=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});n.count++,n.weight+=a}}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:a}=e;let n,o,r;for(n=0,o=t.length;n{const e=t.box;Object.assign(e,l.chartArea),e.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})})}}};class Ji{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class Qi extends Ji{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ts="$chartjs",es={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},is=t=>null===t||""===t,ss=!!Oe&&{passive:!0};function as(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function ns(t,e,i){const s=t.canvas,a=new MutationObserver(t=>{let e=!1;for(const i of t)e=e||as(i.addedNodes,s),e=e&&!as(i.removedNodes,s);e&&i()});return a.observe(document,{childList:!0,subtree:!0}),a}function os(t,e,i){const s=t.canvas,a=new MutationObserver(t=>{let e=!1;for(const i of t)e=e||as(i.removedNodes,s),e=e&&!as(i.addedNodes,s);e&&i()});return a.observe(document,{childList:!0,subtree:!0}),a}const rs=new Map;let ls=0;function hs(){const i=window.devicePixelRatio;i!==ls&&(ls=i,rs.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function cs(t,e,s){const i=t.canvas,a=i&&ve(i);if(a){const o=St((t,e)=>{var i=a.clientWidth;s(t,e),i{var t=t[0],e=t.contentRect.width,t=t.contentRect.height;0===e&&0===t||o(e,t)});return r.observe(a),t=t,n=o,rs.size||window.addEventListener("resize",hs),rs.set(t,n),r;var n}}function ds(t,e,i){i&&i.disconnect(),"resize"===e&&(i=t,rs.delete(i),rs.size||window.removeEventListener("resize",hs))}function us(e,t,i){var s=e.canvas,a=St(t=>{null!==e.ctx&&i(function(t,e){var i=es[t.type]||t.type,{x:s,y:a}=Se(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==a?a:null}}(t,e))},e);return s.addEventListener(t,a,ss),a}class gs extends Ji{acquireContext(t,e){var i=t&&t.getContext&&t.getContext("2d");{if(i&&i.canvas===t){{var s=e;const a=t.style,n=t.getAttribute("height"),o=t.getAttribute("width");if(t[ts]={initial:{height:n,width:o,style:{display:a.display,height:a.height,width:a.width}}},a.display=a.display||"block",a.boxSizing=a.boxSizing||"border-box",is(o)){const s=Ae(t,"width");void 0!==s&&(t.width=s)}if(is(n))if(""===t.style.height)t.height=t.width/(s||2);else{const s=Ae(t,"height");void 0!==s&&(t.height=s)}}return i}return null}}releaseContext(t){const i=t.canvas;if(!i[ts])return!1;const s=i[ts].initial,e=(["height","width"].forEach(t=>{var e=s[t];P(e)?i.removeAttribute(t):i.setAttribute(t,e)}),s.style||{});return Object.keys(e).forEach(t=>{i.style[t]=e[t]}),i.width=i.width,delete i[ts],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),a={attach:ns,detach:os,resize:cs}[e]||us;s[e]=a(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];s&&(({attach:ds,detach:ds,resize:ds}[e]||function(t,e,i){t.canvas.removeEventListener(e,i,ss)})(t,e,s),i[e]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return De(t,e,i,s)}isAttached(t){t=ve(t);return!(!t||!t.isConnected)}}function fs(t){return!xe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Qi:gs}Oe=Object.freeze({__proto__:null,BasePlatform:Ji,BasicPlatform:Qi,DomPlatform:gs,_detectPlatform:fs});const ps="transparent",ms={boolean:(t,e,i)=>.5t+(e-t)*i};class bs{constructor(t,e,i,s){var a=e[i],a=(s=ki([t.to,s,a,t.from]),ki([t.from,a,s]));this._active=!0,this._fn=t.fn||ms[t.type||typeof a],this._easing=gi[t.easing]||gi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=a,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){var s,a,n;this._active&&(this._notify(!1),s=this._target[this._prop],a=i-this._start,n=this._duration-a,this._start=i,this._duration=Math.floor(Math.max(n,t.duration)),this._total+=a,this._loop=!!t.loop,this._to=ki([t.to,e,s,t.from]),this._from=ki([t.from,s,e]))}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){var t=t-this._start,e=this._duration,i=this._prop,s=this._from,a=this._loop,n=this._to;let o;if(this._active=s!==n&&(a||t{i.push({res:t,rej:e})})}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const t=s[e];if(A(t)){const i={};for(const s of a)i[s]=t[s];(O(t.properties)&&t.properties||[e]).forEach(t=>{t!==e&&n.has(t)||n.set(t,i)})}})}}_animateOptions(t,e){const i=e.options,s=function(e,i){if(i){let t=e.options;if(t)return t.$shared&&(e.options=t=Object.assign({},t,{$shared:!1,$animations:{}})),t;e.options=i}}(t,i);if(!s)return[];e=this._createAnimations(s,i);return i.$shared&&function(e,t){const i=[],s=Object.keys(t);for(let t=0;t{t.options=i},()=>{}),e}_createAnimations(e,i){const s=this._properties,a=[],n=e.$animations||(e.$animations={}),t=Object.keys(i),o=Date.now();let r;for(r=t.length-1;0<=r;--r){const c=t[r];if("$"!==c.charAt(0))if("options"===c)a.push(...this._animateOptions(e,i));else{var l=i[c];let t=n[c];var h=s.get(c);if(t){if(h&&t.active()){t.update(h,l,o);continue}t.cancel()}h&&h.duration?(n[c]=t=new bs(h,e,c,l),a.push(t)):e[c]=l}}return a}update(t,e){{if(0!==this._properties.size)return(t=this._createAnimations(t,e)).length?(l.add(this._chart,t),!0):void 0;Object.assign(t,e)}}}function vs(t,e){var t=t&&t.options||{},i=t.reverse,s=void 0===t.min?e:0,t=void 0===t.max?e:0;return{start:i?t:s,end:i?s:t}}function _s(t,e){const i=[],s=t._getSortedDatasetMetas(e);let a,n;for(a=0,n=s.length;ai[t].axis===e).shift()}function Ps(t,e){var i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Ds=t=>"reset"===t||"none"===t,Cs=(t,e)=>e?t:Object.assign({},t);class Os{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Ms(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ps(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,a=e.xAxisID=T(i.xAxisID,Ss(t,"x")),n=e.yAxisID=T(i.yAxisID,Ss(t,"y")),o=e.rAxisID=T(i.rAxisID,Ss(t,"r")),r=e.indexAxis,l=e.iAxisID=s(r,a,n,o),h=e.vAxisID=s(r,n,a,o);e.xScale=this.getScaleForId(a),e.yScale=this.getScaleForId(n),e.rScale=this.getScaleForId(o),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){var e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){var t=this._cachedMeta;this._data&&Mt(this._data,this),t._stacked&&Ps(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(A(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,a,n;for(s=0,a=e.length;snull===l[o]||d&&l[o]t||cthis.getContext(i,s,e),c);return g.$shared&&(g.$shared=r,a[n]=Object.freeze(Cs(g,r))),g}_resolveAnimations(t,e,i){const s=this.chart,a=this._cachedDataOpts,n="animation-"+e,o=a[n];if(o)return o;let r;if(!1!==s.options.animation){const s=this.chart.config,a=s.datasetAnimationScopeKeys(this._type,e),n=s.getOptionScopes(this.getDataset(),a);r=s.createResolver(n,this.getContext(t,i,e))}t=new xs(s,r&&r.animations);return r&&r._cacheable&&(a[n]=Object.freeze(t)),t}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ds(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){var t=this.resolveDataElementOptions(t,e),i=this._sharedOptions,s=this.getSharedOptions(t),i=this.includeOptions(e,s)||s!==i;return this.updateSharedOptions(s,e,t),{sharedOptions:s,includeOptions:i}}updateElement(t,e,i,s){Ds(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ds(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;var a=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(a)||a})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){var t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){var t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];var s=i.length,a=e.length,n=Math.min(a,s);n&&this.parse(0,n),s{for(t.length+=e,o=t.length-1;o>=n;o--)t[o]=t[o-e]};for(r(a),o=t;o{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]}),s}}function As(t,e,i,s,a){var n=T(s,0),o=Math.min(T(a,t.length),t.length);let r,l,h,c=0;for(i=Math.ceil(i),a&&(i=(r=a-s)/Math.floor(r/i)),h=n;h<0;)c++,h=Math.round(n+c*i);for(l=Math.max(n,0);l"top"===e||"left"===e?t[e]+i:t[e]-i,Ls=(t,e)=>Math.min(e||t,t);function Es(t,e){const i=[],s=t.length/e,a=t.length;let n=0;for(;nn?n:a,n=o&&a>n?a:n,{min:g(a,g(n,a)),max:g(n,g(a,n))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){var{beginAtZero:s,grace:a,ticks:n}=this.options,o=n.sampleSize,t=(this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Si(this,a,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks(),os)return i}return Math.max(s,1)}(n,s,a);if(0{const e=t.gc,i=e.length/2;let s;if(y({width:n[t]||0,height:o[t]||0});return{first:w(0),last:w(e-1),widest:w(i),highest:w(M),widths:n,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);t=this._startPixel+t*this._length;return mt(this._alignToPixels?Re(this.chart,t,0):t)}getDecimalForPixel(t){t=(t-this._startPixel)/this._length;return this._reversePixels?1-t:t}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){var{min:t,max:e}=this;return t<0&&e<0?e:0o+1e-6)))return l}(this,b,l))&&(v=Re(s,x,A),h?_=M=k=P=v:y=w=S=D=v,u.push({tx1:_,ty1:y,tx2:M,ty2:w,x1:k,y1:S,x2:P,y2:D,width:A,color:o,borderDash:T,borderDashOffset:c,tickWidth:d,tickColor:g,tickBorderDash:f,tickBorderDashOffset:p}))}return this._ticksLength=c,this._borderValue=m,u}_computeLabelItems(s){const a=this.axis,n=this.options,{position:o,ticks:e}=n,r=this.isHorizontal(),l=this.ticks,{align:h,crossAlign:c,padding:t,mirror:d}=e,i=Rs(n.grid),u=i+t,g=d?-t:u,f=-L(this.labelRotation),p=[];let m,b,x,v,_,y,M,w,k,S,P,D="middle";if("top"===o)_=this.bottom-g,y=this._getXAxisLabelAlignment();else if("bottom"===o)_=this.top+g,y=this._getXAxisLabelAlignment();else if("left"===o){const s=this._getYAxisLabelAlignment(i);y=s.textAlign,v=s.x}else if("right"===o){const s=this._getYAxisLabelAlignment(i);y=s.textAlign,v=s.x}else if("x"===a){if("center"===o)_=(s.top+s.bottom)/2+u;else if(A(o)){const s=Object.keys(o)[0],a=o[s];_=this.chart.scales[s].getPixelForValue(a)+u}y=this._getXAxisLabelAlignment()}else if("y"===a){if("center"===o)v=(s.left+s.right)/2-u;else if(A(o)){const s=Object.keys(o)[0],a=o[s];v=this.chart.scales[s].getPixelForValue(a)}y=this._getYAxisLabelAlignment(i).textAlign}"y"===a&&("start"===h?D="top":"end"===h&&(D="bottom"));var C=this._getLabelSizes();for(m=0,b=l.length;mt.value===e);return 0<=i?t.setContext(this.getContext(i)).lineWidth:0}drawGrid(t){const e=this.options.grid,s=this.ctx,i=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let a,n;var o=(t,e,i)=>{i.width&&i.color&&(s.save(),s.lineWidth=i.width,s.strokeStyle=i.color,s.setLineDash(i.borderDash||[]),s.lineDashOffset=i.borderDashOffset,s.beginPath(),s.moveTo(t.x,t.y),s.lineTo(e.x,e.y),s.stroke(),s.restore())};if(e.display)for(a=0,n=i.length;a{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:t,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let a,n;for(a=0,n=e.length;a{const e=t.split("."),i=e.pop(),s=[r].concat(e).join("."),a=l[t].split("."),n=a.pop(),o=a.join(".");R.route(s,i,o,n)})),e.descriptors&&R.describe(s,e.descriptors),this.override&&R.override(t.id,t.overrides)),h;throw new Error("class does not have id: "+t)}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in R[s]&&(delete R[s][i],this.override&&delete fe[i])}}var b=new class{constructor(){this.controllers=new Fs(Os,"datasets",!0),this.elements=new Fs(e,"elements"),this.plugins=new Fs(Object,"plugins"),this.scales=new Fs(zs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(i,t,s){[...t].forEach(t=>{const e=s||this._getRegistryForType(t);s||e.isForType(t)||e===this.plugins&&t.id?this._exec(i,e,t):k(t,t=>{var e=s||this._getRegistryForType(t);this._exec(i,e,t)})})}_exec(t,e,i){var s=K(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(e){for(let t=0;tt.filter(e=>!i.some(t=>e.plugin.id===t.plugin.id));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Bs(t,e){var i=R.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Ws(t){if("x"===t||"y"===t||"r"===t)return t}function Ns(t,...e){if(Ws(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||1{var e=r[t];if(!A(e))return console.error("Invalid scale configuration for scale: "+t);if(e._proxy)return console.warn("Ignoring resolver passed as options for scale: "+t);const i=Ns(t,e,function(e,t){if(t.data&&t.data.datasets){t=t.data.datasets.filter(t=>t.xAxisID===e||t.yAxisID===e);if(t.length)return Hs(e,"x",t[0])||Hs(e,"y",t[0])}return{}}(t,o),R.scales[e.type]),s=i===l?"_index_":"_value_",a=n.scales||{};h[t]=$(Object.create(null),[{axis:i},e,a[i],a[s]])}),o.data.datasets.forEach(s=>{const t=s.type||o.type,a=s.indexAxis||Bs(t,e),n=(fe[t]||{}).scales||{};Object.keys(n).forEach(t=>{var e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,a),i=s[e+"AxisID"]||e;h[i]=h[i]||Object.create(null),$(h[i],[{axis:e},r[i],n[t]])})}),Object.keys(h).forEach(t=>{t=h[t];$(t,[R.scales[t.type],R.scale])}),h}(t,e)}function Ys(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const $s=new Map,Us=new Set;function Xs(t,e){let i=$s.get(t);return i||(i=e(),$s.set(t,i),Us.add(i)),i}const qs=(t,e,i)=>{e=m(e,i);void 0!==e&&t.add(e)};class Ks{constructor(t){this._config=((t=(t=t)||{}).data=Ys(t.data),js(t),t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Ys(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){var t=this._config;this.clearCache(),js(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Xs(t,()=>[["datasets."+t,""]])}datasetAnimationScopeKeys(t,e){return Xs(t+".transition."+e,()=>[[`datasets.${t}.transitions.`+e,"transitions."+e],["datasets."+t,""]])}datasetElementScopeKeys(t,e){return Xs(t+"-"+e,()=>[[`datasets.${t}.elements.`+e,"datasets."+t,"elements."+e,""]])}pluginScopeKeys(t){const e=t.id;return Xs(this.type+"-plugin-"+e,()=>[["plugins."+e,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(e,t,i){const{options:s,type:a}=this,n=this._cachedScopes(e,i),o=n.get(t);if(o)return o;const r=new Set,l=(t.forEach(t=>{e&&(r.add(e),t.forEach(t=>qs(r,e,t))),t.forEach(t=>qs(r,s,t)),t.forEach(t=>qs(r,fe[a]||{},t)),t.forEach(t=>qs(r,R,t)),t.forEach(t=>qs(r,pe,t))}),Array.from(r));return 0===l.length&&l.push(Object.create(null)),Us.has(t)&&n.set(t,l),l}chartOptionScopes(){var{options:t,type:e}=this;return[t,fe[e]||{},R.datasets[e]||{},{type:e},R,pe]}resolveNamedOptions(t,e,i,s=[""]){const a={$shared:!0},{resolver:n,subPrefixes:o}=Gs(this._resolverCache,t,s);let r=n;!function(t,e){const{isScriptable:i,isIndexable:s}=Ue(t);for(const a of e){const e=i(a),n=s(a),o=(n||e)&&t[a];if(e&&(u(o)||Zs(o))||n&&O(o))return 1}}(n,e)||(a.$shared=!1,r=$e(n,i=u(i)?i():i,this.createResolver(t,i,o)));for(const t of e)a[t]=r[t];return a}createResolver(t,e,i=[""],s){t=Gs(this._resolverCache,t,i).resolver;return A(e)?$e(t,e,void 0,s):t}}function Gs(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));t=i.join();let a=s.get(t);return a||(a={resolver:Ye(e,i),subPrefixes:i.filter(t=>!t.toLowerCase().includes("hover"))},s.set(t,a)),a}const Zs=i=>A(i)&&Object.getOwnPropertyNames(i).reduce((t,e)=>t||u(i[e]),!1),Js=["top","bottom","left","right","chartArea"];function Qs(t,e){return"top"===t||"bottom"===t||-1===Js.indexOf(t)&&"x"===e}function ta(i,s){return function(t,e){return t[i]===e[i]?t[s]-e[s]:t[i]-e[i]}}function ea(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function ia(t){var e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function sa(t){return xe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t=t&&t.canvas?t.canvas:t}const aa={},na=t=>{const e=sa(t);return Object.values(aa).filter(t=>t.canvas===e).pop()};function oa(t,e,i){return(t.options.clip?t:e)[i]}class i{static defaults=R;static instances=aa;static overrides=fe;static registry=b;static version="4.4.0";static getChart=na;static register(...t){b.add(...t),ra()}static unregister(...t){b.remove(...t),ra()}constructor(t,e){const i=this.config=new Ks(e),s=sa(t),a=na(s);if(a)throw new Error("Canvas is already in use. Chart with ID '"+a.id+"' must be destroyed before the canvas with ID '"+a.canvas.id+"' can be reused.");var e=i.createResolver(i.chartOptionScopes(),this.getContext()),t=(this.platform=new(i.platform||fs(s)),this.platform.updateConfig(i),this.platform.acquireContext(s,e.aspectRatio)),n=t&&t.canvas,o=n&&n.height,r=n&&n.width;this.id=F(),this.ctx=t,this.canvas=n,this.width=r,this.height=o,this._options=e,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Vs,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Pt(t=>this.update(t),e.resizeDelay||0),this._dataChanges=[],aa[this.id]=this,t&&n?(l.listen(this,"complete",ea),l.listen(this,"progress",ia),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){var{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:a}=this;return P(t)?e&&a?a:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return b}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Ce(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Ie(this.canvas,this.ctx),this}stop(){return l.stop(this),this}resize(t,e){l.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){var i=this.options,s=this.canvas,a=i.maintainAspectRatio&&this.aspectRatio,s=this.platform.getMaximumSize(s,t,e,a),t=i.devicePixelRatio||this.platform.getDevicePixelRatio(),e=this.width?"resize":"attach";this.width=s.width,this.height=s.height,this._aspectRatio=this.aspectRatio,Ce(this,t,!0)&&(this.notifyPlugins("resize",{size:s}),d(i.onResize,[this,s],this),this.attached&&this._doResize(e)&&this.render())}ensureScalesHaveIDs(){k(this.options.scales||{},(t,e)=>{t.id=e})}buildOrUpdateScales(){const o=this.options,s=o.scales,r=this.scales,l=Object.keys(r).reduce((t,e)=>(t[e]=!1,t),{});let t=[];k(t=s?t.concat(Object.keys(s).map(t=>{var e=s[t],t=Ns(t,e),i="r"===t,t="x"===t;return{options:e,dposition:i?"chartArea":t?"bottom":"left",dtype:i?"radialLinear":t?"category":"linear"}})):t,t=>{const e=t.options,i=e.id,s=Ns(i,e),a=T(e.type,t.dtype);void 0!==e.position&&Qs(e.position,s)===Qs(t.dposition)||(e.position=t.dposition),l[i]=!0;let n=null;i in r&&r[i].type===a?n=r[i]:(n=new(b.getScale(a))({id:i,type:a,ctx:this.ctx,chart:this}),r[n.id]=n),n.init(e,o)}),k(l,(t,e)=>{t||delete r[e]}),k(r,t=>{a.configure(this,t,t.options),a.addBox(this,t)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort((t,e)=>t.index-e.index),ei.length&&delete this._stacks,t.forEach((e,t)=>{0===i.filter(t=>t===e._dataset).length&&this._destroyDatasetMeta(t)})}buildOrUpdateControllers(){const e=[],i=this.data.datasets;let s,a;for(this._removeUnreferencedMetasets(),s=0,a=i.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const s=this.config,a=(s.update(),this._options=s.createResolver(s.chartOptionScopes(),this.getContext())),n=this._animationsDisabled=!a.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1!==this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})){const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let i=0;for(let t=0,e=this.data.datasets.length;t{t.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(ta("z","_idx"));var{_active:t,_lastEvent:e}=this;e?this._eventHandler(e,!0):t.length&&this._updateHoverStyles(t,t,!0),this.render()}}_updateScales(){k(this.scales,t=>{a.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){var t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);Z(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){var t,e,i,s,a=this["_hiddenIndices"];for({method:t,start:e,count:i}of this._getUniformDataChanges()||[]){n=void 0;o=void 0;r=void 0;s=void 0;var n=a;var o=e;var r="_removeElements"===t?-i:i;const l=Object.keys(n);for(const h of l){const l=+h;l>=o&&(s=n[h],delete n[h],(0o)&&(n[l+r]=s))}}}_getUniformDataChanges(){const t=this._dataChanges;if(t&&t.length){this._dataChanges=[];var e=this.data.datasets.length,i=e=>new Set(t.filter(t=>t[0]===e).map((t,e)=>e+","+t.splice(1).join(","))),s=i(0);for(let t=1;tt.split(",")).map(t=>({method:t[1],start:+t[2],count:+t[3]}))}}_updateLayout(t){if(!1!==this.notifyPlugins("beforeLayout",{cancelable:!0})){a.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],k(this.boxes,t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))},this),this._layers.forEach((t,e)=>{t._idx=e}),this.notifyPlugins("afterLayout")}}_updateDatasets(i){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:i,cancelable:!0})){for(let t=0,e=this.data.datasets.length;tt&&t._dataset===e).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Pi(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){var e=this.data.datasets[t];if(!e)return!1;t=this.getDatasetMeta(t);return"boolean"==typeof t.hidden?!t.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(e,t,i){const s=i?"show":"hide",a=this.getDatasetMeta(e),n=a.controller._resolveAnimations(void 0,s);G(t)?(a.data[t].hidden=!i,this.update()):(this.setDatasetVisibility(e,i),n.update(a,{visible:i}),this.update(t=>t.datasetIndex===e?s:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),l.remove(this),t=0,e=this.data.datasets.length;t{s.addEventListener(this,t,e),i[t]=e},a=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};k(this.options.events,t=>e(t,a))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const i=this._responsiveListeners,s=this.platform,t=(t,e)=>{s.addEventListener(this,t,e),i[t]=e},e=(t,e)=>{i[t]&&(s.removeEventListener(this,t,e),delete i[t])},a=(t,e)=>{this.canvas&&this.resize(t,e)};let n;const o=()=>{e("attach",o),this.attached=!0,this.resize(),t("resize",a),t("detach",n)};n=()=>{this.attached=!1,e("resize",a),this._stop(),this._resize(0,0),t("attach",o)},(s.isAttached(this.canvas)?o:n)()}unbindEvents(){k(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},k(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){var s=i?"set":"remove";let a,n,o,r;for("dataset"===e&&(a=this.getDatasetMeta(t[0].datasetIndex)).controller["_"+s+"DatasetHoverStyle"](),o=0,r=t.length;o{var i=this.getDatasetMeta(t);if(i)return{datasetIndex:t,element:i.data[e],index:e};throw new Error("No dataset found at index "+t)});W(t,e)||(this._active=t,this._lastEvent=null,this._updateHoverStyles(t,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(e){return 1===this._plugins._cache.filter(t=>t.plugin.id===e).length}_updateHoverStyles(t,e,i){var s=this.options.hover,a=(t,i)=>t.filter(e=>!i.some(t=>e.datasetIndex===t.datasetIndex&&e.index===t.index)),n=a(e,t),i=i?t:a(t,e);n.length&&this.updateHoverStyle(n,s.mode,!1),i.length&&s.mode&&this.updateHoverStyle(i,s.mode,!0)}_eventHandler(e,t){const i={event:e,replay:t,cancelable:!0,inChartArea:this.isPointInArea(e)},s=t=>(t.options.events||this.options.events).includes(e.native.type);if(!1!==this.notifyPlugins("beforeEvent",i,s))return t=this._handleEvent(e,t,i.inChartArea),i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(t||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:a}=this,n=e,o=this._getActiveElements(t,s,i,n),r=J(t),l=(h=t,c=this._lastEvent,i&&"mouseout"!==h.type?r?c:h:null);i&&(this._lastEvent=null,d(a.onHover,[t,o,this],this),r&&d(a.onClick,[t,o,this],this));var h,c=!W(o,s);return(c||e)&&(this._active=o,this._updateHoverStyles(o,s,e)),this._lastEvent=l,c}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;i=this.options.hover;return this.getElementsAtEventForMode(t,i.mode,i,s)}}function ra(){k(i.instances,t=>t._plugins.invalidate())}function la(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var ha={_date:class Xn{static override(t){Object.assign(Xn.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return la()}parse(){return la()}format(){return la()}add(){return la()}diff(){return la()}startOf(){return la()}endOf(){return la()}}};function ca(i,s,a,n){if(O(i)){var o=i,r=s,l=a,h=n,c=l.parse(o[0],h),o=l.parse(o[1],h),h=Math.min(c,o),d=Math.max(c,o);let t=h,e=d;Math.abs(h)>Math.abs(d)&&(t=d,e=h),r[l.axis]=e,r._custom={barStart:t,barEnd:e,start:c,end:o,min:h,max:d}}else s[a.axis]=a.parse(i,n);return s}function da(t,e,i,s){const a=t.iScale,n=t.vScale,o=a.getLabels(),r=a===n,l=[];let h,c,d,u;for(c=(h=i)+s;h"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(s){const t=s.data;if(t.labels.length&&t.datasets.length){const{pointStyle:a,color:n}=s.legend.options["labels"];return t.labels.map((t,e)=>{var i=s.getDatasetMeta(0).controller.getStyle(e);return{text:t,fillStyle:i.backgroundColor,strokeStyle:i.borderColor,fontColor:n,lineWidth:i.borderWidth,pointStyle:a,hidden:!s.getDataVisibility(e),index:e}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(s,a){const n=this.getDataset().data,o=this._cachedMeta;if(!1===this._parsing)o._parsed=n;else{let t,e,i=t=>+n[t];if(A(n[s])){const{key:s="value"}=this._parsing;i=t=>+m(n[t],s)}for(e=(t=s)+a;tpt(t,r,l,!0)?1:Math.max(e,e*s,i,i*s),f=(t,e,i)=>pt(t,r,l,!0)?-1:Math.min(e,e*s,i,i*s),p=g(0,h,d),m=g(D,c,u),b=f(S,h,d),x=f(S+D,c,u);i=(p-b)/2,a=(m-x)/2,n=-(p+b)/2,o=-(m+x)/2}return{ratioX:i,ratioY:a,offsetX:n,offsetY:o}}(c,h,r),p=(i.width-n)/d,m=(i.height-n)/u,b=Math.max(Math.min(p,m)/2,0),x=B(this.options.radius,b),v=(x-Math.max(x*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=g*x,this.offsetY=f*x,s.total=this.calculateTotal(),this.outerRadius=x-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(a,0,a.length,t)}_circumference(t,e){var i=this.options,s=this._cachedMeta,a=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*a/_)}updateElements(t,e,i,s){const a="reset"===s,n=this.chart,o=n.chartArea,r=n.options.animation,l=(o.left+o.right)/2,h=(o.top+o.bottom)/2,c=a&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:g,includeOptions:f}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p{var i=s.getDatasetMeta(0).controller.getStyle(e);return{text:t,fillStyle:i.backgroundColor,strokeStyle:i.borderColor,fontColor:n,lineWidth:i.borderWidth,pointStyle:a,hidden:!s.getDataVisibility(e),index:e}})}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){var e=this._cachedMeta,i=this.chart,s=i.data.labels||[],e=de(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:e}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){var e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,s={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((t,e)=>{var i=this.getParsed(e).r;!isNaN(i)&&this.chart.getDataVisibility(e)&&(is.max&&(s.max=i))}),s}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),a=Math.max(s/2,0),n=(a-Math.max(i.cutoutPercentage?a/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=a-n*this.index,this.innerRadius=this.outerRadius-n}updateElements(s,a,t,n){const o="reset"===n,r=this.chart,l=r.options.animation,h=this._cachedMeta.rScale,c=h.xCenter,d=h.yCenter,u=h.getIndexAngle(0)-.5*S;let g,f=u;var p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(e).r)&&this.chart.getDataVisibility(e)&&i++}),i}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?L(this.resolveDataElementOptions(t,e).angle||i):0}}var ba=Object.freeze({__proto__:null,BarController:class extends Os{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return da(t,e,i,s)}parseArrayData(t,e,i,s){return da(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:a,vScale:n}=t,{xAxisKey:o="x",yAxisKey:r="y"}=this._parsing,l="x"===a.axis?o:r,h="x"===n.axis?o:r,c=[];let d,u,g,f;for(u=(d=i)+s;dn.x,e="left","right"):(t=n.baset.controller.options.grouped),a=e.options.stacked,n=[];for(const e of s)if((void 0===i||!(t=>{var e=t.controller.getParsed(i),e=e&&e[t.vScale.axis];if(P(e)||isNaN(e))return!0})(e))&&((!1===a||-1===n.indexOf(e.stack)||void 0===a&&void 0===e.stack)&&n.push(e.stack),e.index===t))break;return n.length||n.push(void 0),n}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),a=void 0!==e?s.indexOf(e):-1;return-1===a?s.length-1:a}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let a,n;for(a=0,n=e.data.length;at-e))}return s._cache.$bar}(e,t.type);let s,a,n,o,r=e._length;var l=()=>{32767!==n&&-32768!==n&&(G(o)&&(r=Math.min(r,Math.abs(n-o)||r)),o=n)};for(s=0,a=i.length;s=m?1:-1))*n),u===o&&(x-=d/2);const t=e.getPixelForDecimal(0),P=e.getPixelForDecimal(1),a=Math.min(t,P),l=Math.max(t,P);x=Math.max(Math.min(x,l),a),c=x+d,i&&!h&&(r._stacks[e.axis]._visualValues[s]=e.getValueForPixel(c)-e.getValueForPixel(x))}if(x===e.getPixelForValue(o)){const t=y(d)*e.getLineWidthForValue(o)/2;x+=t,d-=t}return{size:d,base:x,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,a=s.skipNull,n=T(s.maxBarThickness,1/0);let o,r;if(e.grouped){const i=a?this._getStackCount(t):e.stackCount,T=("flex"===s.barThickness?function(t,e,i,s){var a=e.pixels,n=a[t];let o=0=b?x.skip=!0:(y=P((_=this.getParsed(t))[u]),M=x[d]=n.getPixelForValue(_[d],t),w=x[u]=a||y?o.getBasePixel():o.getPixelForValue(r?this.applyStack(o,_,r):_[u],t),x.skip=isNaN(M)||isNaN(w)||y,x.stop=0p,f&&(x.parsed=_,x.raw=l.data[t]),c&&(x.options=h||this.resolveDataElementOptions(t,g.active?"active":s)),m||this.updateElement(g,t,x,s),v=_)}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;var a=s[0].size(this.resolveDataElementOptions(0)),n=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,a,n)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends pa{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:ma,RadarController:class extends Os{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],a=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);var n={_loop:!0,_fullLoop:a.length===s.length,options:e};this.updateElement(i,void 0,n,t)}this.updateElements(s,0,s.length,t)}updateElements(e,i,s,a){const n=this._cachedMeta.rScale,o="reset"===a;for(let t=i;tm,p&&(f.parsed=s,f.raw=h.data[t]),d&&(f.options=c||this.resolveDataElementOptions(t,i.active?"active":a)),b||this.updateElement(i,t,f,a),x=s}this.updateSharedOptions(c,a,t)}getMaxOverflow(){const t=this._cachedMeta,i=t.data||[];if(!this.options.showLine){let e=0;for(let t=i.length-1;0<=t;--t)e=Math.max(e,i[t].size(this.resolveDataElementOptions(t))/2);return 0{var e=(i-Math.min(a,t))*s/2;return C(t,0,Math.min(a,e))};return{outerStart:o(t.outerStart),outerEnd:o(t.outerEnd),innerStart:C(t.innerStart,0,n),innerEnd:C(t.innerEnd,0,n)}}(e,h,d,l-g),b=d-c,x=d-f,v=g+c/b,_=l-f/x,y=h+p,M=h+m,w=g+p/y,k=l-m/M;if(t.beginPath(),n){const e=(v+_)/2;if(t.arc(o,r,d,v,e),t.arc(o,r,d,e,_),0(o+(h?r-t:t))%n,v=()=>{g!==f&&(t.lineTo(m,f),t.lineTo(m,g),t.lineTo(m,p))};for(l&&(d=a[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c)if(!(d=a[x(c)]).skip){const e=d.x,i=d.y,s=0|e;s===u?(if&&(f=i),m=(b*m+e)/++b):(v(),t.lineTo(e,i),u=s,b=0,g=f=i),p=i}v()}function Sa(t){var e=t.options,i=e.borderDash&&e.borderDash.length;return t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i?wa:ka}const Pa="function"==typeof Path2D;class Da extends e{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){var i,s=this.options;!s.tension&&"monotone"!==s.cubicInterpolationMode||s.stepped||this._pointsUpdated||(i=s.spanGaps?this._loop:this._fullLoop,hi(this._points,s,t,i,e),this._pointsUpdated=!0)}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ri(this,this.options.segment))}first(){var t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){var t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(i,s){var a=this.options,n=i[s],o=this.points,r=Ei(this,{property:s,start:n,end:n});if(r.length){const l=[],h=a.stepped?pi:a.tension||"monotone"===a.cubicInterpolationMode?mi:fi;let e,t;for(e=0,t=r.length;e"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){var{angle:t,distance:e}=ut(this.getProps(["x","y"],i),{x:t,y:e}),{startAngle:i,endAngle:s,innerRadius:a,outerRadius:n,circumference:o}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),r=(this.options.spacing+this.options.borderWidth)/2,o=T(o,s-i)>=_||pt(t,i,s),t=c(e,a+r,n+r);return o&&t}getCenterPoint(t){var{x:t,y:e,startAngle:i,endAngle:s,innerRadius:a,outerRadius:n}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:o,spacing:r}=this.options,i=(i+s)/2,s=(a+n+r+o)/2;return{x:t+Math.cos(i)*s,y:e+Math.sin(i)*s}}tooltipPosition(t){return this.getCenterPoint(t)}draw(e){var{options:i,circumference:s}=this,a=(i.offset||0)/4,n=(i.spacing||0)/2,o=i.circular;if(this.pixelMargin="inner"===i.borderAlign?.33:0,this.fullCircles=s>_?Math.floor(s/_):0,!(0===s||this.innerRadius<0||this.outerRadius<0)){e.save();var r=(this.startAngle+this.endAngle)/2,r=(e.translate(Math.cos(r)*a,Math.sin(r)*a),a*(1-Math.sin(Math.min(S,s||0))));e.fillStyle=i.backgroundColor,e.strokeStyle=i.borderColor;{var l=e;a=this;s=r;i=n;var h=o;var{fullCircles:c,startAngle:d,circumference:u}=a;let t=a.endAngle;if(c){va(l,a,s,i,t,h);for(let t=0;ts=e?s:t,r=t=>a=i?a:t;if(t){const t=y(s),e=y(a);t<0&&e<0?r(0):0g&&(k=nt(w*k/g/u)*u),P(r)||(_=Math.pow(10,r),k=Math.ceil(k*_)/_),M="ticks"===s?(y=Math.floor(f/k)*k,Math.ceil(p/k)*k):(y=f,p),m&&b&&a&<((o-n)/a,k/1e3)?(w=Math.round(Math.min((o-n)/k,h)),k=(o-n)/w,y=n,M=o):x?(y=m?n:y,M=b?o:M,w=l-1,k=(M-y)/w):w=at(w=(M-y)/k,Math.round(w),k/1e3)?Math.round(w):Math.ceil(w);e=Math.max(dt(k),dt(y));_=Math.pow(10,P(r)?e:r),y=Math.round(y*_)/_,M=Math.round(M*_)/_;let S=0;for(m&&(d&&y!==n?(i.push({value:n}),yo)break;i.push({value:t})}return b&&d&&M!==o?i.length&&at(i[i.length-1].value,o,za(o,v,t))?i[i.length-1].value=o:i.push({value:o}):b&&M!==o||i.push({value:M}),i}({maxTicks:Math.max(2,i),bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&ht(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){var t=this.ticks;let e=this.min,i=this.max;super.configure(),this.options.offset&&t.length&&(t=(i-e)/Math.max(t.length-1,1)/2,e-=t,i+=t),this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return de(t,this.chart.options.locale,this.options.ticks.format)}}class Va extends Fa{static id="linear";static defaults={ticks:{callback:ge.formatters.numeric}};determineDataLimits(){var{min:t,max:e}=this.getMinMax(!0);this.min=p(t)?t:0,this.max=p(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){var t=this.isHorizontal(),e=t?this.width:this.height,i=L(this.options.ticks.minRotation),t=(t?Math.sin(i):Math.cos(i))||.001,i=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,i.lineHeight/t))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const Ba=t=>Math.floor(r(t)),Wa=(t,e)=>Math.pow(10,Ba(t)+e);function Na(t){return 1==t/Math.pow(10,Ba(t))}function Ha(t,e,i){i=Math.pow(10,i),t=Math.floor(t/i);return Math.ceil(e/i)-t}class ja extends zs{static id="logarithmic";static defaults={ticks:{callback:ge.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){t=Fa.prototype.parse.apply(this,[t,e]);if(0!==t)return p(t)&&0s=e?s:t,n=t=>a=i?a:t;s===a&&(s<=0?(t(1),n(10)):(t(Wa(s,-1)),n(Wa(a,1)))),s<=0&&t(Wa(a,-1)),a<=0&&n(Wa(s,1)),this.min=s,this.max=a}buildTicks(){const t=this.options,e=function(t,{min:e,max:i}){e=g(t.min,e);const s=[],a=Ba(e);let n=function(t,e){let i=Ba(e-t);for(;10n?Math.pow(10,a):0,h=Math.round((e-l)*o)/o,c=Math.floor((e-l)/r/10)*r*10;let d=Math.floor((h-c)/Math.pow(10,n)),u=g(t.min,Math.round((l+c+d*Math.pow(10,n))*o)/o);for(;uf.r&&(t=(m.end-f.r)/x,g.r=Math.max(g.r,f.r+t)),b.startf.b&&(e=(b.end-f.b)/p,g.b=Math.max(g.b,f.b+e))}}var d,u;e.setCenterPoint(i.l-s.l,s.r-i.r,i.t-s.t,s.b-i.b),e._pointLabelItems=function(e,i,s){const a=[],n=e._pointLabels.length,t=e.options,{centerPointLabels:o,display:r}=t.pointLabels,l={extra:Ya(t)/2,additionalAngle:o?S/n:0};let h;for(let t=0;tt,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){var t=this._padding=I(Ya(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){var{min:t,max:e}=this.getMinMax(!1);this.min=p(t)&&!isNaN(t)?t:0,this.max=p(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Ya(this.options))}generateTickLabels(t){Fa.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map((t,e)=>{t=d(this.options.pointLabels.callback,[t,e],this);return t||0===t?t:""}).filter((t,e)=>this.chart.getDataVisibility(e))}fit(){var t=this.options;t.display&&t.pointLabels.display?Ua(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return v(t*(_/(this._pointLabels.length||1))+L(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(P(t))return NaN;var e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(P(t))return NaN;t/=this.drawingArea/(this.max-this.min);return this.options.reverse?this.max-t:this.min+t}getPointLabelContext(t){var e=this._pointLabels||[];if(0<=t&&t0!==t)?(g.beginPath(),je(g,{x:f,y:r,w:x,h:m,radius:p}),g.fill()):g.fillRect(f,r,x,m)}var p=z(l.font),{x:v,y:b,textAlign:g}=o;He(_,n._pointLabels[t],v,b+p.lineHeight/2,p,{color:l.color,textAlign:g,textBaseline:"middle"})}}}if(h.display&&this.ticks.forEach((t,e)=>{if(0!==e){u=this.getDistanceFromCenterForValue(t.value);t=this.getContext(e),e=h.setContext(t),t=c.setContext(t);{var i=this,s=u,a=d;const n=i.ctx,o=e.circular,{color:r,lineWidth:l}=e;!o&&!a||!r||!l||s<0||(n.save(),n.strokeStyle=r,n.lineWidth=l,n.setLineDash(t.dash),n.lineDashOffset=t.dashOffset,n.beginPath(),Xa(i,s,o,a),n.closePath(),n.stroke(),n.restore())}}}),i.display){for(t.save(),s=d-1;0<=s;s--){const h=i.setContext(this.getPointLabelContext(s)),{color:c,lineWidth:d}=h;d&&c&&(t.lineWidth=d,t.strokeStyle=c,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,u=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),a=this.getPointPosition(s,u),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(a.x,a.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const o=this.ctx,r=this.options,l=r.ticks;if(l.display){var t=this.getIndexAngle(0);let a,n;o.save(),o.translate(this.xCenter,this.yCenter),o.rotate(t),o.textAlign="center",o.textBaseline="middle",this.ticks.forEach((t,e)=>{if(0!==e||r.reverse){var i=l.setContext(this.getContext(e)),s=z(i.font);if(a=this.getDistanceFromCenterForValue(this.ticks[e].value),i.showLabelBackdrop){o.font=s.string,n=o.measureText(t.label).width,o.fillStyle=i.backdropColor;const r=I(i.backdropPadding);o.fillRect(-n/2-r.left,-a-s.size/2-r.top,n+r.width,s.size+r.height)}He(o,t.label,0,-a,s,{color:i.color,strokeColor:i.textStrokeColor,strokeWidth:i.textStrokeWidth})}}),o.restore()}}drawTitle(){}}const Ka={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},h=Object.keys(Ka);function Ga(t,e){return t-e}function Za(t,e){if(P(e))return null;const i=t._adapter,{parser:s,round:a,isoWeekday:n}=t._parseOpts;let o=e;return null===(o=p(o="function"==typeof s?s(o):o)?o:"string"==typeof s?i.parse(o,s):i.parse(o))?null:+(o=a?"week"!==a||!rt(n)&&!0!==n?i.startOf(o,a):i.startOf(o,"isoWeek",n):o)}function Ja(e,i,s,a){const n=h.length;for(let t=h.indexOf(e);t=e?i[s]:i[a]]=!0):t[e]=!0}function tn(i,t,s){const a=[],n={},e=t.length;let o,r;for(o=0;o=h.indexOf(s);t--){const s=h[t];if(Ka[s].common&&e._adapter.diff(n,a,s)>=i-1)return s}return h[s?h.indexOf(s):0]}(this,n.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(i){for(let t=h.indexOf(i)+1,e=h.length;t+t.value))}initOffsets(t=[]){let e,i,s=0,a=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),a=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);t=t.length<3?.5:.25;s=C(s,0,t),a=C(a,0,t),this._offsets={start:s,end:a,factor:1/(s+1+a)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,a=s.time,n=a.unit||Ja(a.minUnit,e,i,this._getLabelCapacity(e)),o=T(s.ticks.stepSize,1),r="week"===n&&a.isoWeekday,l=rt(r)||!0===r,h={};let c,d,u=e;if(l&&(u=+t.startOf(u,"isoWeek",r)),u=+t.startOf(u,l?"day":n),t.diff(i,e,n)>1e5*o)throw new Error(e+" and "+i+" are too far apart with stepSize of "+o+" "+n);var g="data"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;c+t)}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){var i=this.options.time.displayFormats,s=this._unit,e=e||i[s];return this._adapter.format(t,e)}_tickFormatFunction(t,e,i,s){var a=this.options,n=a.ticks.callback;if(n)return d(n,[t,e,i],this);var n=a.time.displayFormats,a=this._unit,o=this._majorUnit,a=a&&n[a],n=o&&n[o],i=i[e],e=o&&n&&i&&i.major;return this._adapter.format(t,s||(e?n:a))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=f(t,"pos",e)),{pos:s,time:n}=t[r],{pos:a,time:o}=t[l]):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=f(t,"time",e)),{time:s,pos:n}=t[r],{time:a,pos:o}=t[l]);i=a-s;return i?n+(o-n)*(e-s)/i:n}var an=Object.freeze({__proto__:null,CategoryScale:class extends zs{static id="category";static defaults={ticks:{callback:Ia}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){var e=this._addedLabels;if(e.length){const t=this.getLabels();for(var{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(P(t))return null;var i,s,a,n,o,r,l=this.getLabels();return a=e=isFinite(e)&&l[e]===t?e:(i=l,s=T(e,t=t),a=this._addedLabels,-1===(r=i.indexOf(t))?(o=s,a=a,"string"==typeof(n=t)?(o=i.push(n)-1,a.unshift({index:o,label:n})):isNaN(n)&&(o=null),o):r!==i.lastIndexOf(t)?s:r),n=l.length-1,null===a?null:C(Math.round(a),0,n)}determineDataLimits(){var{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const e=this.min,i=this.max,t=this.options.offset,s=[];let a=this.getLabels();a=0===e&&i===a.length-1?a:a.slice(e,i+1),this._valueRange=Math.max(a.length-(t?0:1),1),this._startValue=this.min-(t?.5:0);for(let t=e;t<=i;t++)s.push({value:t});return s}getLabelForValue(t){return Ia.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return null===(t="number"!=typeof t?this.parse(t):t)?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:Va,LogarithmicScale:ja,RadialLinearScale:qa,TimeScale:en,TimeSeriesScale:class extends en{static id="timeseries";static defaults=en.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){var t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=sn(e,this.min),this._tableRange=sn(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],a=[];let n,o,r,l,h;for(n=0,o=t.length;n=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(n=0,o=s.length;nt-e)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t}getDecimalForValue(t){return(sn(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){var e=this._offsets,t=this.getDecimalForPixel(t)/e.factor-e.end;return sn(this._table,t*this._tableRange+this._minPos,!0)}}});const nn=["rgb(54, 162, 235)","rgb(255, 99, 132)","rgb(255, 159, 64)","rgb(255, 205, 86)","rgb(75, 192, 192)","rgb(153, 102, 255)","rgb(201, 203, 207)"],on=nn.map(t=>t.replace("rgb(","rgba(").replace(")",", 0.5)"));function rn(t){return nn[t%nn.length]}function ln(t){return on[t%on.length]}function hn(n){let o=0;return(t,e)=>{var i,s,a,e=n.getDatasetMeta(e).controller;e instanceof pa?o=(s=t,a=o,s.backgroundColor=s.data.map(()=>rn(a++)),a):e instanceof ma?o=(s=t,i=o,s.backgroundColor=s.data.map(()=>ln(i++)),i):e&&(o=(e=t,t=o,e.borderColor=rn(t),e.backgroundColor=ln(t),++t))}}function cn(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return 1}var dn={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(i.enabled){const{data:{datasets:s},options:a}=t.config,n=a["elements"];!i.forceOverride&&(cn(s)||a&&(a.borderColor||a.backgroundColor)||n&&cn(n))||(i=hn(t),s.forEach(i))}}};function un(t){var e;t._decimated&&(e=t._data,delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e}))}function gn(t){t.data.datasets.forEach(t=>{un(t)})}var fn={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(r,t,M)=>{if(M.enabled){const l=r.width;r.data.datasets.forEach((e,t)=>{var{_data:i,indexAxis:s}=e,h=r.getDatasetMeta(t),a=i||e.data;if("y"!==ki([s,r.options.indexAxis])&&h.controller.supportsDecimation){t=r.scales[h.xAxisID];if(("linear"===t.type||"time"===t.type)&&!r.options.parsing){var{start:n,count:o}=function(t){var e=t.length;let i,s=0;const a=h["iScale"],{min:n,max:o,minDefined:r,maxDefined:l}=a.getUserBounds();return r&&(s=C(f(t,a.axis,n).lo,0,e-1)),i=l?C(f(t,a.axis,o).hi+1,s,e)-s:e-s,{start:s,count:i}}(a);if(o<=(M.threshold||4*l))un(e);else{let t;switch(P(i)&&(e._data=a,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),M.algorithm){case"lttb":t=function(s,a,n,t){var e=M.samples||t;if(n<=e)return s.slice(a,a+n);const o=[],r=(n-2)/(e-2);let l=0;const h=a+n-1;let c,d,u,g,f,p=a;for(o[l++]=s[p],c=0;cu&&(u=g,d=s[t],f=t);o[l++]=d,p=f}return o[l++]=s[h],o}(a,n,o,l);break;case"min-max":t=function(t,e,i,s){let a,n,o,r,l,h,c,d,u,g,f=0,p=0;const m=[],b=e+i-1,x=t[e].x,v=t[b].x-x;for(a=e;ag&&(g=r,c=a),f=(p*f+n.x)/++p;else{const i=a-1;if(!P(h)&&!P(c)){const e=Math.min(h,c),P=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:f}),P!==d&&P!==i&&m.push({...t[P],x:f})}0{e=mn(t,e,a);t=a[t],e=a[e];null!==s?(n.push({x:t.x,y:s}),n.push({x:e.x,y:s})):null!==i&&(n.push({x:i,y:t.y}),n.push({x:i,y:e.y}))}),n}(t)).length?new Da({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function vn(t){return t&&!1!==t.fill}function _n(e,i,s){const a=[];for(let t=0;t{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class On extends e{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const i=this.options.labels||{};let t=d(i.generateLabels,[this.chart],this)||[];i.filter&&(t=t.filter(t=>i.filter(t,this.chart.data))),i.sort&&(t=t.sort((t,e)=>i.sort(t,e,this.chart.data))),this.options.reverse&&t.reverse(),this.legendItems=t}fit(){const{options:i,ctx:s}=this;if(i.display){var a=i.labels,n=z(a.font),o=n.size,r=this._computeTitleHeight(),{boxWidth:a,itemHeight:l}=Cn(a,o);let t,e;s.font=n.string,this.isHorizontal()?(t=this.maxWidth,e=this._fitRows(r,o,a,l)+10):(e=this.maxHeight,t=this._fitCols(r,n,a,l)+10),this.width=Math.min(t,i.maxWidth||this.maxWidth),this.height=Math.min(e,i.maxHeight||this.maxHeight)}else this.width=this.height=0}_fitRows(t,i,s,a){const{ctx:n,maxWidth:o,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],h=this.lineWidths=[0],c=a+r;let d=t,u=(n.textAlign="left",n.textBaseline="middle",-1),g=-c;return this.legendItems.forEach((t,e)=>{t=s+i/2+n.measureText(t.text).width;(0===e||h[h.length-1]+t+2*r>o)&&(d+=c,h[h.length-(0{o=l,i=r,s=c,a=t,n=h;var i,s,a,n,{itemWidth:t,itemHeight:o}={itemWidth:function(t,e,i){let s=a.text;return s&&"string"!=typeof s&&(s=s.reduce((t,e)=>t.length>e.length?t:e)),t+e.size/2+i.measureText(s).width}(o,i,s),itemHeight:function(t){let e=n;return e="string"!=typeof a.text?An(a,t):e}(i.lineHeight)};0f&&(p+=m+d,g.push({width:m,height:b}),x+=m+d,v++,m=b=0),u[e]={left:x,top:b,col:v,width:t,height:o},m=Math.max(m,t),b+=o+d}),p+=m,g.push({width:m,height:b}),p}adjustHitBoxes(){if(this.options.display){const i=this._computeTitleHeight(),{legendHitBoxes:s,options:{align:a,labels:{padding:n},rtl:t}}=this,o=Di(t,this.left,this.width);if(this.isHorizontal()){let t=0,e=E(a,this.left+n,this.right-this.lineWidths[t]);for(const r of s)t!==r.row&&(t=r.row,e=E(a,this.left+n,this.right-this.lineWidths[t])),r.top+=this.top+i+n,r.left=o.leftForLtr(o.x(e),r.width),e+=r.width+n}else{let t=0,e=E(a,this.top+i+n,this.bottom-this.columnSizes[t].height);for(const l of s)l.col!==t&&(t=l.col,e=E(a,this.top+i+n,this.bottom-this.columnSizes[t].height)),l.top=e,l.left+=this.left+n,l.left=o.leftForLtr(o.x(l.left),l.width),e+=l.height+n}}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){var t;this.options.display&&(Ve(t=this.ctx,this),this._draw(),Be(t))}_draw(){const{options:h,columnSizes:c,lineWidths:d,ctx:u}=this,{align:g,labels:f}=h,p=R.color,m=Di(h.rtl,this.left,this.width),b=z(f.font),x=f["padding"],v=b.size,_=v/2;let y;this.drawTitle(),u.textAlign=m.textAlign("left"),u.textBaseline="middle",u.lineWidth=.5,u.font=b.string;const{boxWidth:M,boxHeight:w,itemHeight:k}=Cn(f,v),S=this.isHorizontal(),P=this._computeTitleHeight(),D=(y=S?{x:E(g,this.left+x,this.right-d[0]),y:this.top+x+P,line:0}:{x:this.left+x,y:E(g,this.top+P+x,this.bottom-c[0].height),line:0},Ci(this.ctx,h.textDirection),k+x);this.legendItems.forEach((t,e)=>{u.strokeStyle=t.fontColor,u.fillStyle=t.fontColor;var i=u.measureText(t.text).width,s=m.textAlign(t.textAlign||(t.textAlign=f.textAlign)),i=M+_+i;let a=y.x,n=y.y;m.setWidth(this.width),S?0this.right&&(n=y.y+=D,y.line++,a=y.x=E(g,this.left+x,this.right-d[y.line])):0this.bottom&&(a=y.x=a+c[y.line].width+x,y.line++,n=y.y=E(g,this.top+P+x,this.bottom-c[y.line].height));var e=m.x(a),o=n,r=t;if(!(isNaN(M)||M<=0||isNaN(w)||w<0)){u.save();var l=T(r.lineWidth,1);if(u.fillStyle=T(r.fillStyle,p),u.lineCap=T(r.lineCap,"butt"),u.lineDashOffset=T(r.lineDashOffset,0),u.lineJoin=T(r.lineJoin,"miter"),u.lineWidth=l,u.strokeStyle=T(r.strokeStyle,p),u.setLineDash(T(r.lineDash,[])),f.usePointStyle){const p={radius:w*Math.SQRT2/2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:l},T=m.xPlus(e,M/2);Fe(u,p,T,o+_,f.pointStyleWidth&&M)}else{const f=o+Math.max((v-w)/2,0),p=m.leftForLtr(e,M),T=wi(r.borderRadius);u.beginPath(),Object.values(T).some(t=>0!==t)?je(u,{x:p,y:f,w:M,h:w,radius:T}):u.rect(p,f,M,w),u.fill(),0!==l&&u.stroke()}u.restore()}if(a=Ct(s,a+M+_,S?a+i:this.right,h.rtl),o=m.x(a),e=n,r=t,He(u,r.text,o,e+k/2,b,{strikethrough:r.hidden,textAlign:m.textAlign(r.textAlign)}),S)y.x+=i+x;else if("string"!=typeof t.text){const h=b.lineHeight;y.y+=An(t,h)+x}else y.y+=D}),Oi(this.ctx,h.textDirection)}drawTitle(){const s=this.options,a=s.title,n=z(a.font),o=I(a.padding);if(a.display){const l=Di(s.rtl,this.left,this.width),h=this.ctx,c=a.position,d=n.size/2,u=o.top+d;let t,e=this.left,i=this.width;if(this.isHorizontal())i=Math.max(...this.lineWidths),t=this.top+u,e=E(s.align,e,this.right-i);else{const a=this.columnSizes.reduce((t,e)=>Math.max(t,e.height),0);t=u+E(s.align,this.top,this.bottom-a-s.labels.padding-this._computeTitleHeight())}var r=E(c,e,e+i);h.textAlign=l.textAlign(Dt(c)),h.textBaseline="middle",h.strokeStyle=a.color,h.fillStyle=a.color,h.font=n.string,He(h,a.text,r,t,n)}}_computeTitleHeight(){var t=this.options.title,e=z(t.font),i=I(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,a;if(c(t,this.left,this.right)&&c(e,this.top,this.bottom))for(a=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const s=t.data.datasets,{usePointStyle:a,pointStyle:n,textAlign:o,color:r,useBorderRadius:l,borderRadius:h}=t.legend.options["labels"];return t._getSortedDatasetMetas().map(t=>{var e=t.controller.getStyle(a?0:void 0),i=I(e.borderWidth);return{text:s[t.index].label,fillStyle:e.backgroundColor,fontColor:r,hidden:!t.visible,lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:(i.width+i.height)/4,strokeStyle:e.borderColor,pointStyle:n||e.pointStyle,rotation:e.rotation,textAlign:o||e.textAlign,borderRadius:l&&(h||e.borderRadius),datasetIndex:t.index}},this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Ln extends e{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){var i=this.options;this.left=0,this.top=0,i.display?(this.width=this.right=t,this.height=this.bottom=e,t=O(i.text)?i.text.length:1,this._padding=I(i.padding),e=t*z(i.font).lineHeight+this._padding.height,this.isHorizontal()?this.height=e:this.width=e):this.width=this.height=this.right=this.bottom=0}isHorizontal(){var t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){var{top:e,left:i,bottom:s,right:a,options:n}=this,o=n.align;let r,l,h,c=0;return r=this.isHorizontal()?(l=E(o,i,a),h=e+t,a-i):(c="left"===n.position?(l=i+t,h=E(o,s,e),-.5*S):(l=a-t,h=E(o,e,s),.5*S),s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){var t,e,i,s,a,n=this.ctx,o=this.options;o.display&&(e=(t=z(o.font)).lineHeight/2+this._padding.top,{titleX:e,titleY:i,maxWidth:s,rotation:a}=this._drawArgs(e),He(n,o.text,0,0,t,{color:o.color,maxWidth:s,rotation:a,textAlign:Dt(o.align),textBaseline:"middle",translation:[e,i]}))}}var En={id:"title",_element:Ln,start(t,e,i){var s;t=t,i=i,s=new Ln({ctx:t.ctx,options:i,chart:t}),a.configure(t,s,i),a.addBox(t,s),t.titleBlock=s},stop(t){var e=t.titleBlock;a.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;a.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Rn=new WeakMap;var In={id:"subtitle",start(t,e,i){var s=new Ln({ctx:t.ctx,options:i,chart:t});a.configure(t,s,i),a.addBox(t,s),Rn.set(t,s)},stop(t){a.removeBox(t,Rn.get(t)),Rn.delete(t)},beforeUpdate(t,e,i){const s=Rn.get(t);a.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const zn={average(t){if(!t.length)return!1;let e,i,s=0,a=0,n=0;for(e=0,i=t.length;et+e.before.length+e.lines.length+e.after.length,0),x=(b+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b&&(p+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-g)*l.lineHeight+(b-1)*e.bodySpacing),u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing),0);function v(t){m=Math.max(m,i.measureText(t).width+x)}return i.save(),i.font=h.string,k(t.title,v),i.font=l.string,k(t.beforeBody.concat(t.afterBody),v),x=e.displayColors?o+2+e.boxPadding:0,k(s,t=>{k(t.before,v),k(t.lines,v),k(t.after,v)}),x=0,i.font=c.string,k(t.footer,v),i.restore(),{width:m+=f.width,height:p}}function Bn(i,t,s){var e=s.yAlign||t.yAlign||function(){var{y:t,height:e}=s;return ti.height-e/2?"bottom":"center"}();return{xAlign:s.xAlign||t.xAlign||function(a,n,o,t){var{x:e,width:i}=o,{width:s,chartArea:{left:r,right:l}}=a;let h="center";return"center"===t?h=e<=(r+l)/2?"left":"right":e<=i/2?h="left":s-i/2<=e&&(h="right"),h=function(t){var{x:e,width:i}=o,s=n.caretSize+n.caretPadding;return"left"===t&&e+i+s>a.width||"right"===t&&e-i-s<0}(h)?"center":h}(i,t,s,e),yAlign:e}}function Wn(t,i,e,s){var{caretSize:t,caretPadding:a,cornerRadius:n}=t,{xAlign:o,yAlign:r}=e,l=t+a,{topLeft:e,topRight:a,bottomLeft:n,bottomRight:h}=wi(n);let c=function(){let{x:t,width:e}=i;return"right"===o?t-=e:"center"===o&&(t-=e/2),t}();var d=function(){let{y:t,height:e}=i;return"top"===r?t+=l:t-="bottom"===r?e+l:e/2,t}();return"center"===r?"left"===o?c+=l:"right"===o&&(c-=l):"left"===o?c-=Math.max(e,n)+t:"right"===o&&(c+=Math.max(a,h)+t),{x:C(c,0,s.width-i.width),y:C(d,0,s.height-i.height)}}function Nn(t,e,i){i=I(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-i.right:t.x+i.left}function Hn(t){return x([],Fn(t))}function jn(t,e){e=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return e?t.override(e):t}const Yn={beforeTitle:t,title(t){if(0{var e={before:[],lines:[],after:[]},i=jn(s,t);x(e.before,Fn(w(i,"beforeLabel",this,t))),x(e.lines,w(i,"label",this,t)),x(e.after,Fn(w(i,"afterLabel",this,t))),a.push(e)}),a}getAfterBody(t,e){return Hn(w(e.callbacks,"afterBody",this,t))}getFooter(t,e){var e=e["callbacks"],i=w(e,"beforeFooter",this,t),s=w(e,"footer",this,t),e=w(e,"afterFooter",this,t),t=x([],Fn(i));return t=x(t,Fn(s)),x(t,Fn(e))}_createItems(s){const t=this._active,a=this.chart.data,i=[],n=[],o=[];let e,r,l=[];for(e=0,r=t.length;es.filter(t,e,i,a))),k(l=s.itemSort?l.sort((t,e)=>s.itemSort(t,e,a)):l,t=>{var e=jn(s.callbacks,t);i.push(w(e,"labelColor",this,t)),n.push(w(e,"labelPointStyle",this,t)),o.push(w(e,"labelTextColor",this,t))}),this.labelColors=i,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let a,n=[];if(s.length){const t=zn[i.position].call(this,s,this._eventPosition),e=(n=this._createItems(i),this.title=this.getTitle(n,i),this.beforeBody=this.getBeforeBody(n,i),this.body=this.getBody(n,i),this.afterBody=this.getAfterBody(n,i),this.footer=this.getFooter(n,i),this._size=Vn(this,i)),o=Object.assign({},t,e),r=Bn(this.chart,i,o),l=Wn(i,o,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,a={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(a={opacity:0});this._tooltipItems=n,this.$context=void 0,a&&this._resolveAnimations().update(this,a),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){t=this.getCaretPosition(t,i,s);e.lineTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.lineTo(t.x3,t.y3)}getCaretPosition(t,e,i){var{xAlign:s,yAlign:a}=this,{caretSize:i,cornerRadius:n}=i,{topLeft:n,topRight:o,bottomLeft:r,bottomRight:l}=wi(n),{x:t,y:h}=t,{width:e,height:c}=e;let d,u,g,f,p,m;return"center"===a?(p=h+c/2,m="left"===s?(d=t,u=d-i,f=p+i,p-i):(d=t+e,u=d+i,f=p-i,p+i),g=d):(u="left"===s?t+Math.max(n,r)+i:"right"===s?t+e-Math.max(o,l)-i:this.caretX,g="top"===a?(f=h,p=f-i,d=u-i,u+i):(f=h+c,p=f+i,d=u+i,u-i),m=f),{x1:d,x2:u,x3:g,y1:f,y2:p,y3:m}}drawTitle(t,e,i){var s=this.title,a=s.length;let n,o,r;if(a){const l=Di(i.rtl,this.x,this.width);for(t.x=Nn(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",n=z(i.titleFont),o=i.titleSpacing,e.fillStyle=i.titleColor,e.font=n.string,r=0;r0!==t)?(t.beginPath(),t.fillStyle=a.multiKeyBackground,je(t,{x:e,y:g,w:l,h:r,radius:o}),t.fill(),t.stroke(),t.fillStyle=n.backgroundColor,t.beginPath(),je(t,{x:i,y:g+1,w:l-2,h:r-2,radius:o}),t.fill()):(t.fillStyle=a.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=n.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(e,i,t){const s=this["body"],{bodySpacing:a,bodyAlign:n,displayColors:o,boxHeight:r,boxWidth:l,boxPadding:h}=t,c=z(t.bodyFont);let d=c.lineHeight,u=0;function g(t){i.fillText(t,f.x(e.x+u),e.y+d/2),e.y+=d+a}const f=Di(t.rtl,this.x,this.width),p=f.textAlign(n);let m,b,x,v,_,y,M;for(i.textAlign=n,i.textBaseline="middle",i.font=c.string,e.x=Nn(this,p,t),i.fillStyle=t.bodyColor,k(this.beforeBody,g),u=o&&"right"!==p?"center"===n?l/2+h:l+2+h:0,v=0,y=s.length;v{var i=this.chart.getDatasetMeta(t);if(i)return{datasetIndex:t,element:i.data[e],index:e};throw new Error("Cannot find a dataset at index "+t)}),i=!W(i,t),s=this._positionChanged(t,e);(i||s)&&(this._active=t,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;var s=this.options,a=this._active||[],i=this._getActiveElements(t,a,e,i),n=this._positionChanged(i,t),a=e||!W(i,a)||n;return a&&(this._active=i,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),a}_getActiveElements(t,e,i,s){var a=this.options;if("mouseout"===t.type)return[];if(!s)return e;const n=this.chart.getElementsAtEventForMode(t,a.mode,a,i);return a.reverse&&n.reverse(),n}_positionChanged(t,e){var{caretX:i,caretY:s,options:a}=this,a=zn[a.position].call(this,t,e);return!1!==a&&(i!==a.x||s!==a.y)}}var Un={id:"tooltip",_element:$n,positioners:zn,afterInit(t,e,i){i&&(t.tooltip=new $n({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;var i;e&&e._willRender()&&(!(i={tooltip:e})!==t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0})&&(e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)))},afterEvent(t,e){var i;t.tooltip&&(i=e.replay,t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0))},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Yn},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return i.register(ba,an,Ra,s),i.helpers={...Fi},i._adapters=ha,i.Animation=bs,i.Animations=xs,i.animator=l,i.controllers=b.controllers.items,i.DatasetController=Os,i.Element=e,i.elements=Ra,i.Interaction=Hi,i.layouts=a,i.platforms=Oe,i.Scale=zs,i.Ticks=ge,Object.assign(i,ba,an,Ra,s,Oe),i.Chart=i,"undefined"!=typeof window&&(window.Chart=i),i}); \ No newline at end of file diff --git a/staticbak/static/js/vendor/tailwind.js b/staticbak/static/js/vendor/tailwind.js deleted file mode 100644 index 14062be..0000000 --- a/staticbak/static/js/vendor/tailwind.js +++ /dev/null @@ -1,19 +0,0 @@ - tailwind.config = { - theme: { - extend: { - colors: { - primary: '#165DFF', - secondary: '#36CFFB', - success: '#00B42A', - warning: '#FF7D00', - danger: '#F53F3F', - info: '#86909C', - dark: '#1D2129', - light: '#F2F3F5', - }, - fontFamily: { - sans: ['Inter', 'system-ui', 'sans-serif'], - }, - }, - } - } \ No newline at end of file diff --git a/staticbak/static/login.html b/staticbak/static/login.html deleted file mode 100644 index f2ea214..0000000 --- a/staticbak/static/login.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - DNS服务器控制台 - 登录 - - - - - - - - \ No newline at end of file diff --git a/test/test-domain-info.js b/test/test-domain-info.js deleted file mode 100644 index d53dc39..0000000 --- a/test/test-domain-info.js +++ /dev/null @@ -1,261 +0,0 @@ -// 测试脚本,用于调试 getDomainInfo 函数 -const fs = require('fs'); -const path = require('path'); - -// 模拟浏览器环境的 console.log -console.log = function() { - process.stdout.write(Array.from(arguments).join(' ') + '\n'); -}; - -// 读取域名信息数据库 -const domainInfoPath = path.join(__dirname, 'static/domain-info/domains/domain-info.json'); -const domainInfoDatabase = JSON.parse(fs.readFileSync(domainInfoPath, 'utf8')); - -// 模拟已加载的数据库 -let domainInfoLoaded = true; - -// 检查域名是否匹配 -function isDomainMatch(urlValue, targetDomain, categoryId) { - console.log(' 开始匹配URL:', urlValue, '目标域名:', targetDomain, '类别ID:', categoryId); - - // 规范化目标域名,去除末尾的点 - const normalizedTargetDomain = targetDomain.replace(/\.$/, '').toLowerCase(); - - try { - // 尝试将URL值解析为完整URL - console.log(' 尝试解析URL为完整URL'); - const url = new URL(urlValue); - let hostname = url.hostname.toLowerCase(); - // 规范化主机名,去除末尾的点 - hostname = hostname.replace(/\.$/, ''); - console.log(' 解析成功,主机名:', hostname, '规范化目标域名:', normalizedTargetDomain); - - // 根据类别ID选择匹配方式 - if (categoryId === 2) { - // CDN类别,使用域名后缀匹配 - if (normalizedTargetDomain.endsWith('.' + hostname) || normalizedTargetDomain === hostname) { - console.log(' CDN域名后缀匹配成功'); - return true; - } else { - console.log(' CDN域名后缀不匹配'); - return false; - } - } else { - // 其他类别,使用完整域名匹配 - if (hostname === normalizedTargetDomain) { - console.log(' 完整域名匹配成功'); - return true; - } else { - console.log(' 完整域名不匹配'); - return false; - } - } - } catch (e) { - console.log(' 解析URL失败,将其视为纯域名处理,错误信息:', e.message); - // 如果是纯域名而不是完整URL - let urlDomain = urlValue.toLowerCase(); - // 规范化纯域名,去除末尾的点 - urlDomain = urlDomain.replace(/\.$/, ''); - console.log(' 处理为纯域名:', urlDomain, '规范化目标域名:', normalizedTargetDomain); - - // 根据类别ID选择匹配方式 - if (categoryId === 2) { - // CDN类别,使用域名后缀匹配 - if (normalizedTargetDomain.endsWith('.' + urlDomain) || normalizedTargetDomain === urlDomain) { - console.log(' CDN域名后缀匹配成功'); - return true; - } else { - console.log(' CDN域名后缀不匹配'); - return false; - } - } else { - // 其他类别,使用完整域名匹配 - if (urlDomain === normalizedTargetDomain) { - console.log(' 完整域名匹配成功'); - return true; - } else { - console.log(' 完整域名不匹配'); - return false; - } - } - } -} - -// 根据域名查找对应的网站信息 -async function getDomainInfo(domain) { - console.log('开始查找域名信息,域名:', domain); - - if (!domainInfoDatabase || !domainInfoDatabase.domains) { - console.error('域名信息数据库无效或为空'); - return null; - } - - // 规范化域名,移除可能的端口号 - const normalizedDomain = domain.replace(/:\d+$/, '').toLowerCase(); - console.log('规范化后的域名:', normalizedDomain); - - // 遍历所有公司 - console.log('开始遍历公司,总公司数:', Object.keys(domainInfoDatabase.domains).length); - for (const companyKey in domainInfoDatabase.domains) { - if (domainInfoDatabase.domains.hasOwnProperty(companyKey)) { - console.log('检查公司:', companyKey); - const companyData = domainInfoDatabase.domains[companyKey]; - const companyName = companyData.company || companyKey; - - // 遍历公司下的所有网站和类别 - for (const websiteKey in companyData) { - if (companyData.hasOwnProperty(websiteKey) && websiteKey !== 'company') { - console.log(' 检查网站/类别:', websiteKey); - const website = companyData[websiteKey]; - - // 如果有URL属性,直接检查域名 - if (website.url) { - // 处理字符串类型的URL - if (typeof website.url === 'string') { - console.log(' 检查字符串URL:', website.url); - if (isDomainMatch(website.url, normalizedDomain, website.categoryId)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: website.name, - icon: website.icon, - categoryId: website.categoryId, - categoryName: domainInfoDatabase.categories[website.categoryId] || '未知', - company: website.company || companyName - }; - } - } - // 处理对象类型的URL - else if (typeof website.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(website.url).length, '个URL'); - for (const urlKey in website.url) { - if (website.url.hasOwnProperty(urlKey)) { - const urlValue = website.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); - if (isDomainMatch(urlValue, normalizedDomain, website.categoryId)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: website.name, - icon: website.icon, - categoryId: website.categoryId, - categoryName: domainInfoDatabase.categories[website.categoryId] || '未知', - company: website.company || companyName - }; - } - } - } - } - } else if (typeof website === 'object' && website !== null) { - // 没有URL属性,可能是嵌套的类别 - console.log(' 发现嵌套类别,进一步检查'); - for (const nestedWebsiteKey in website) { - if (website.hasOwnProperty(nestedWebsiteKey) && nestedWebsiteKey !== 'company') { - console.log(' 检查嵌套网站/类别:', nestedWebsiteKey); - const nestedWebsite = website[nestedWebsiteKey]; - - if (nestedWebsite.url) { - // 处理字符串类型的URL - if (typeof nestedWebsite.url === 'string') { - console.log(' 检查字符串URL:', nestedWebsite.url); - if (isDomainMatch(nestedWebsite.url, normalizedDomain, nestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: nestedWebsite.name, - icon: nestedWebsite.icon, - categoryId: nestedWebsite.categoryId, - categoryName: domainInfoDatabase.categories[nestedWebsite.categoryId] || '未知', - company: nestedWebsite.company || companyName - }; - } - } - // 处理对象类型的URL - else if (typeof nestedWebsite.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(nestedWebsite.url).length, '个URL'); - for (const urlKey in nestedWebsite.url) { - if (nestedWebsite.url.hasOwnProperty(urlKey)) { - const urlValue = nestedWebsite.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); - if (isDomainMatch(urlValue, normalizedDomain, nestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: nestedWebsite.name, - icon: nestedWebsite.icon, - categoryId: nestedWebsite.categoryId, - categoryName: domainInfoDatabase.categories[nestedWebsite.categoryId] || '未知', - company: nestedWebsite.company || companyName - }; - } - } - } - } - } else if (typeof nestedWebsite === 'object' && nestedWebsite !== null) { - // 嵌套类别中的嵌套类别,递归检查 - console.log(' 发现二级嵌套类别,进一步检查'); - for (const secondNestedWebsiteKey in nestedWebsite) { - if (nestedWebsite.hasOwnProperty(secondNestedWebsiteKey) && secondNestedWebsiteKey !== 'company') { - console.log(' 检查二级嵌套网站:', secondNestedWebsiteKey); - const secondNestedWebsite = nestedWebsite[secondNestedWebsiteKey]; - - if (secondNestedWebsite.url) { - // 处理字符串类型的URL - if (typeof secondNestedWebsite.url === 'string') { - console.log(' 检查字符串URL:', secondNestedWebsite.url); - if (isDomainMatch(secondNestedWebsite.url, normalizedDomain, secondNestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: secondNestedWebsite.name, - icon: secondNestedWebsite.icon, - categoryId: secondNestedWebsite.categoryId, - categoryName: domainInfoDatabase.categories[secondNestedWebsite.categoryId] || '未知', - company: secondNestedWebsite.company || companyName - }; - } - } - // 处理对象类型的URL - else if (typeof secondNestedWebsite.url === 'object') { - console.log(' 检查对象类型URL,包含', Object.keys(secondNestedWebsite.url).length, '个URL'); - for (const urlKey in secondNestedWebsite.url) { - if (secondNestedWebsite.url.hasOwnProperty(urlKey)) { - const urlValue = secondNestedWebsite.url[urlKey]; - console.log(' 检查URL', urlKey, ':', urlValue); - if (isDomainMatch(urlValue, normalizedDomain, secondNestedWebsite.categoryId)) { - console.log(' 匹配成功,返回网站信息'); - return { - name: secondNestedWebsite.name, - icon: secondNestedWebsite.icon, - categoryId: secondNestedWebsite.categoryId, - categoryName: domainInfoDatabase.categories[secondNestedWebsite.categoryId] || '未知', - company: secondNestedWebsite.company || companyName - }; - } - } - } - } - } - } - } - } else { - console.log(' 嵌套网站没有URL属性且不是对象类型'); - } - } - } - } else { - console.log(' 网站没有URL属性'); - } - } - } - } - } - - console.log('未找到匹配的域名信息'); - return null; -} - -// 测试 mcs.doubao.com -getDomainInfo('mcs.doubao.com').then(result => { - console.log('\n=== 测试结果 ==='); - if (result) { - console.log('匹配成功:', JSON.stringify(result, null, 2)); - } else { - console.log('匹配失败'); - } -}); diff --git a/test/test_cache.go b/test/test_cache.go deleted file mode 100644 index ce6b1f2..0000000 --- a/test/test_cache.go +++ /dev/null @@ -1,185 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "os" - "time" - - "dns-server/dns" - - miekdns "github.com/miekg/dns" -) - -func main() { - // 测试1: 内存缓存模式 - fmt.Println("=== 测试1: 内存缓存模式 ===") - memCache := dns.NewDNSCache(60*time.Second, "memory", 100, "test_cache.json", 10*time.Second, 3600*time.Second, 60*time.Second) - - // 设置缓存项 - msg := &miekdns.Msg{} - msg.SetQuestion("test.com.", miekdns.TypeA) - memCache.Set("test.com.", miekdns.TypeA, msg, 60*time.Second) - - // 从缓存获取 - _, found := memCache.Get("test.com.", miekdns.TypeA) - if found { - fmt.Println("✓ 内存缓存: 成功获取缓存项") - } else { - fmt.Println("✗ 内存缓存: 未能获取缓存项") - } - - // 检查文件是否创建 - if _, err := os.Stat("test_cache.json"); os.IsNotExist(err) { - fmt.Println("✓ 内存缓存: 没有创建缓存文件") - } else { - fmt.Println("✗ 内存缓存: 不应该创建缓存文件,但文件存在") - } - - // 测试2: 文件缓存模式 - fmt.Println("\n=== 测试2: 文件缓存模式 ===") - // 使用独立的缓存文件 - test2CacheFile := "test_cache2.json" - // 先删除可能存在的测试文件 - os.Remove(test2CacheFile) - - fileCache := dns.NewDNSCache(60*time.Second, "file", 100, test2CacheFile, 1*time.Second, 3600*time.Second, 60*time.Second) - - // 设置缓存项 - fileCache.Set("test.com.", miekdns.TypeA, msg, 60*time.Second) - - // 等待保存到文件 - time.Sleep(2000 * time.Millisecond) - - // 检查文件是否创建 - if _, err := os.Stat(test2CacheFile); err == nil { - fmt.Println("✓ 文件缓存: 成功创建缓存文件") - } else { - fmt.Println("✗ 文件缓存: 未能创建缓存文件") - } - - // 测试3: 从文件加载缓存 - fmt.Println("\n=== 测试3: 从文件加载缓存 ===") - // 创建新的缓存实例,从文件加载 - loadCache := dns.NewDNSCache(60*time.Second, "file", 100, test2CacheFile, 10*time.Second, 3600*time.Second, 60*time.Second) - - // 从缓存获取 - _, found = loadCache.Get("test.com.", miekdns.TypeA) - if found { - fmt.Println("✓ 文件缓存: 成功从文件加载缓存项") - } else { - fmt.Println("✗ 文件缓存: 未能从文件加载缓存项") - } - - // 清理测试2的缓存文件 - os.Remove(test2CacheFile) - - // 测试4: 缓存模式切换 - fmt.Println("\n=== 测试4: 缓存模式切换 ===") - // 使用独立的缓存文件 - test4CacheFile := "test_cache4.json" - // 先删除可能存在的测试文件 - os.Remove(test4CacheFile) - // 创建文件缓存 - switchCache := dns.NewDNSCache(60*time.Second, "file", 100, test4CacheFile, 1*time.Second, 3600*time.Second, 60*time.Second) - - // 设置缓存项 - switchCache.Set("switch.com.", miekdns.TypeA, msg, 60*time.Second) - - // 检查当前缓存大小 - size := switchCache.Size() - fmt.Printf(" 设置缓存项后,缓存大小: %d\n", size) - - // 直接调用SaveToFile方法保存缓存 - switchCache.SaveToFile() - - // 检查文件是否存在 - if _, err := os.Stat(test4CacheFile); err == nil { - fmt.Println(" 切换前: 缓存文件已存在") - // 查看文件大小 - fileInfo, _ := os.Stat(test4CacheFile) - fmt.Printf(" 切换前: 缓存文件大小: %d bytes\n", fileInfo.Size()) - // 读取文件内容 - content, _ := os.ReadFile(test4CacheFile) - fmt.Printf(" 切换前: 缓存文件内容: %s\n", content) - } else { - fmt.Println(" 切换前: 缓存文件不存在") - } - - // 切换到内存模式 - switchCache.SetCacheMode("memory") - - // 再设置一个缓存项 - switchCache.Set("switch2.com.", miekdns.TypeA, msg, 60*time.Second) - - // 等待一段时间,检查是否继续保存 - time.Sleep(2000 * time.Millisecond) - - // 检查文件是否仍然存在 - if _, err := os.Stat("test_cache.json"); err == nil { - fmt.Println(" 切换后: 缓存文件仍然存在") - // 查看文件大小 - fileInfo, _ := os.Stat("test_cache.json") - fmt.Printf(" 切换后: 缓存文件大小: %d bytes\n", fileInfo.Size()) - // 读取文件内容 - content, _ := os.ReadFile("test_cache.json") - fmt.Printf(" 切换后: 缓存文件内容: %s\n", content) - } else { - fmt.Println(" 切换后: 缓存文件不存在") - } - - // 查看当前时间 - fmt.Printf(" 当前时间: %v\n", time.Now()) - - // 查看缓存文件中的过期时间 - content, _ := os.ReadFile(test4CacheFile) - var serializableCache map[string]interface{} - json.Unmarshal(content, &serializableCache) - if items, ok := serializableCache["items"].(map[string]interface{}); ok { - if item, ok := items["switch.com.|A"].(map[string]interface{}); ok { - if expiry, ok := item["expiry"].(float64); ok { - expiryTime := time.Unix(0, int64(expiry)) - fmt.Printf(" 缓存项过期时间: %v\n", expiryTime) - fmt.Printf(" 缓存项是否过期: %v\n", time.Now().After(expiryTime)) - } - } - } - - // 创建新的缓存实例,验证是否只保存了切换前的缓存项 - verifyCache := dns.NewDNSCache(60*time.Second, "file", 100, test4CacheFile, 10*time.Second, 3600*time.Second, 60*time.Second) - - // 检查verifyCache的缓存大小 - verifySize := verifyCache.Size() - fmt.Printf(" 新缓存实例大小: %d\n", verifySize) - - // 我们无法直接访问verifyCache的内部缓存,所以我们尝试不同的域名格式 - // 尝试带点和不带点的域名 - _, found1 := verifyCache.Get("switch.com", miekdns.TypeA) - _, found2 := verifyCache.Get("switch.com.", miekdns.TypeA) - _, found3 := verifyCache.Get("switch.com.|A", miekdns.TypeA) - - fmt.Printf(" 尝试获取switch.com: %v\n", found1) - fmt.Printf(" 尝试获取switch.com.: %v\n", found2) - fmt.Printf(" 尝试获取switch.com.|A: %v\n", found3) - - // 检查切换前的缓存项 - _, found = verifyCache.Get("switch.com.", miekdns.TypeA) - if found || found1 { - fmt.Println("✓ 模式切换: 切换前的缓存项已保存到文件") - } else { - fmt.Println("✗ 模式切换: 切换前的缓存项未保存到文件") - } - - // 检查切换后的缓存项 - _, found = verifyCache.Get("switch2.com.", miekdns.TypeA) - if !found { - fmt.Println("✓ 模式切换: 切换后的缓存项没有保存到文件") - } else { - fmt.Println("✗ 模式切换: 切换后的缓存项不应该保存到文件,但文件中存在") - } - - // 清理测试文件 - os.Remove("test_cache.json") - - fmt.Println("\n=== 测试完成 ===") -} diff --git a/test/test_cache2.json b/test/test_cache2.json deleted file mode 100644 index 4ff1ec5..0000000 --- a/test/test_cache2.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "items": { - "test.com.|A": { - "responseBytes": "kosBAAABAAAAAAAABHRlc3QDY29tAAABAAE=", - "expiry": 1768551008159638734, - "hasDNSSEC": false, - "size": 378 - } - }, - "ttl": 60000000000, - "maxSize": 10000, - "cacheMode": "file", - "cacheFilePath": "test_cache2.json" -} \ No newline at end of file diff --git a/test/test_cache4.json b/test/test_cache4.json deleted file mode 100644 index 977f2a3..0000000 --- a/test/test_cache4.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "items": { - "switch.com.|A": { - "responseBytes": "kosBAAABAAAAAAAABHRlc3QDY29tAAABAAE=", - "expiry": 1768551010161428066, - "hasDNSSEC": false, - "size": 378 - } - }, - "ttl": 60000000000, - "maxSize": 10000, - "cacheMode": "file", - "cacheFilePath": "test_cache4.json" -} \ No newline at end of file diff --git a/test/test_dns_perf.sh b/test/test_dns_perf.sh deleted file mode 100755 index 9e6023d..0000000 --- a/test/test_dns_perf.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# DNS性能测试脚本 -SERVER="127.0.0.1" -DOMAIN="example.com" -THREADS=10 -QUERIES=1000 - -# 创建临时文件存储进程ID -pids=() - -# 运行并发查询 -for ((i=1; i<=THREADS; i++)); do - for ((j=1; j<=$((QUERIES/THREADS)); j++)); do - dig @$SERVER $DOMAIN A +short > /dev/null & - pids+=($!) - done - echo "线程 $i 已启动,将执行 $((QUERIES/THREADS)) 个查询" -done - -echo "所有查询已启动,等待完成..." - -# 等待所有查询完成 -for pid in "${pids[@]}"; do - wait $pid -done - -echo "所有查询已完成!" diff --git a/test/test_dns_perf_stress.sh b/test/test_dns_perf_stress.sh deleted file mode 100755 index f951912..0000000 --- a/test/test_dns_perf_stress.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -# DNS压力测试脚本 -SERVER="127.0.0.1" -DOMAIN="example.com" -THREADS=20 -QUERIES=1000 - -# 创建临时文件存储进程ID -pids=() - -echo "开始DNS压力测试..." -echo "服务器: $SERVER" -echo "域名: $DOMAIN" -echo "线程数: $THREADS" -echo "总查询数: $QUERIES" -echo "--------------------------------------" - -# 记录开始时间(秒) -start_time=$SECONDS - -# 运行并发查询 -for ((i=1; i<=THREADS; i++)); do - for ((j=1; j<=$((QUERIES/THREADS)); j++)); do - dig @$SERVER $DOMAIN A +short > /dev/null & - pids+=($!) - done - # 每启动5个线程暂停一下,避免系统资源瞬间耗尽 - if (( $i % 5 == 0 )); then - echo "线程 $i 已启动,已完成 $i/$THREADS 个线程..." - sleep 0.5 - fi -done - -echo "所有 $THREADS 个线程已启动,共执行 $QUERIES 个查询,等待完成..." - -# 等待所有查询完成 -for pid in "${pids[@]}"; do - wait $pid -done - -# 计算执行时间 -elapsed=$((SECONDS - start_time)) - -# 计算QPS(每秒查询数) -if [ $elapsed -eq 0 ]; then - elapsed=1 # 避免除以零 -fi -qps=$((QUERIES / elapsed)) - -echo "--------------------------------------" -echo "所有查询已完成!" -echo "执行时间: $elapsed 秒" -echo "QPS: $qps 次/秒" -echo "--------------------------------------" diff --git a/test/test_optimization.sh b/test/test_optimization.sh deleted file mode 100755 index 7724944..0000000 --- a/test/test_optimization.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -# DNS性能优化验证脚本 -SERVER="127.0.0.1" -DOMAIN="example.com" -THREADS=50 -QUERIES=5000 - -echo "=========================================" -echo "DNS服务器多线程优化验证测试" -echo "=========================================" -echo "服务器: $SERVER" -echo "域名: $DOMAIN" -echo "线程数: $THREADS" -echo "总查询数: $QUERIES" -echo "=========================================" - -echo "" -echo "启动DNS服务器..." -./dns-server > /dev/null 2>&1 & -DNS_PID=$! -echo "DNS服务器PID: $DNS_PID" - -sleep 5 - -echo "" -echo "=========================================" -echo "开始压力测试前系统状态:" -echo "=========================================" -echo "CPU使用率:" -top -b -n 1 | grep "Cpu(s)" | awk '{print " " $2 "% 用户, " $4 "% 系统, " $8 "% 空闲"}' -echo "" -echo "内存使用情况:" -free -h | grep -E "Mem|Swap" | awk '{print " " $1 ": " $3 "/" $2 " (" $3/$2*100 "% 使用)"}' -echo "" -echo "DNS服务器进程资源使用:" -ps -p $DNS_PID -o %cpu,%mem,cmd --no-headers | awk '{print " CPU: " $1 "%, 内存: " $2 "%"}' - -echo "" -echo "=========================================" -echo "开始压力测试..." -echo "=========================================" - -start_time=$(date +%s.%N) - -pids=() -for ((i=1; i<=THREADS; i++)); do - for ((j=1; j<=$((QUERIES/THREADS)); j++)); do - dig @$SERVER $DOMAIN A +short > /dev/null 2>&1 & - pids+=($!) - done - if (( $i % 10 == 0 )); then - echo "已启动 $i/$THREADS 个线程..." - sleep 0.2 - fi -done - -echo "所有线程已启动,等待完成..." - -for pid in "${pids[@]}"; do - wait $pid 2>/dev/null -done - -end_time=$(date +%s.%N) -elapsed=$(echo "$end_time - $start_time" | bc) -qps=$(echo "$QUERIES / $elapsed" | bc) - -echo "" -echo "=========================================" -echo "压力测试后系统状态:" -echo "=========================================" -echo "CPU使用率:" -top -b -n 1 | grep "Cpu(s)" | awk '{print " " $2 "% 用户, " $4 "% 系统, " $8 "% 空闲"}' -echo "" -echo "内存使用情况:" -free -h | grep -E "Mem|Swap" | awk '{print " " $1 ": " $3 "/" $2 " (" $3/$2*100 "% 使用)"}' -echo "" -echo "DNS服务器进程资源使用:" -ps -p $DNS_PID -o %cpu,%mem,cmd --no-headers 2>/dev/null | awk '{print " CPU: " $1 "%, 内存: " $2 "%"}' - -echo "" -echo "=========================================" -echo "测试结果:" -echo "=========================================" -echo "总查询数: $QUERIES" -echo "执行时间: $elapsed 秒" -echo "QPS: $qps 次/秒" -echo "=========================================" - -echo "" -echo "停止DNS服务器..." -kill $DNS_PID 2>/dev/null -sleep 2 - -echo "" -echo "测试完成!" diff --git a/test/test_optimization_v2.sh b/test/test_optimization_v2.sh deleted file mode 100755 index a153af9..0000000 --- a/test/test_optimization_v2.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# DNS性能优化验证脚本(使用并发查询) -SERVER="127.0.0.1" -DOMAIN="example.com" -CONCURRENCY=100 -QUERIES=10000 - -echo "=========================================" -echo "DNS服务器多线程优化验证测试" -echo "=========================================" -echo "服务器: $SERVER" -echo "域名: $DOMAIN" -echo "并发数: $CONCURRENCY" -echo "总查询数: $QUERIES" -echo "=========================================" - -echo "" -echo "启动DNS服务器..." -./dns-server > /dev/null 2>&1 & -DNS_PID=$! -echo "DNS服务器PID: $DNS_PID" - -sleep 5 - -echo "" -echo "=========================================" -echo "开始压力测试前系统状态:" -echo "=========================================" -echo "CPU使用率:" -top -b -n 1 | grep "Cpu(s)" | awk '{print " " $2 "% 用户, " $4 "% 系统, " $8 "% 空闲"}' -echo "" -echo "内存使用情况:" -free -h | grep -E "Mem|Swap" | awk '{print " " $1 ": " $3 "/" $2 " (" $3/$2*100 "% 使用)"}' -echo "" -echo "DNS服务器进程资源使用:" -ps -p $DNS_PID -o %cpu,%mem,cmd --no-headers | awk '{print " CPU: " $1 "%, 内存: " $2 "%"}' - -echo "" -echo "=========================================" -echo "开始压力测试..." -echo "=========================================" - -start_time=$(date +%s.%N) - -for ((i=1; i<=$QUERIES; i++)); do - dig @$SERVER $DOMAIN A +short > /dev/null 2>&1 & - - if (( $i % $CONCURRENCY == 0 )); then - wait - fi -done - -wait - -end_time=$(date +%s.%N) -elapsed=$(echo "$end_time - $start_time" | bc) -qps=$(echo "scale=2; $QUERIES / $elapsed" | bc) - -echo "" -echo "=========================================" -echo "压力测试后系统状态:" -echo "=========================================" -echo "CPU使用率:" -top -b -n 1 | grep "Cpu(s)" | awk '{print " " $2 "% 用户, " $4 "% 系统, " $8 "% 空闲"}' -echo "" -echo "内存使用情况:" -free -h | grep -E "Mem|Swap" | awk '{print " " $1 ": " $3 "/" $2 " (" $3/$2*100 "% 使用)"}' -echo "" -echo "DNS服务器进程资源使用:" -ps -p $DNS_PID -o %cpu,%mem,cmd --no-headers 2>/dev/null | awk '{print " CPU: " $1 "%, 内存: " $2 "%"}' - -echo "" -echo "=========================================" -echo "测试结果:" -echo "=========================================" -echo "总查询数: $QUERIES" -echo "执行时间: $elapsed 秒" -echo "QPS: $qps 次/秒" -echo "=========================================" - -echo "" -echo "停止DNS服务器..." -kill $DNS_PID 2>/dev/null -sleep 2 - -echo "" -echo "测试完成!" diff --git a/test/test_optimization_v3.sh b/test/test_optimization_v3.sh deleted file mode 100644 index eaf8b3b..0000000 --- a/test/test_optimization_v3.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash - -# DNS性能优化验证脚本(简化版) -SERVER="127.0.0.1" -DOMAIN="example.com" -CONCURRENCY=50 -QUERIES=2000 - -echo "=========================================" -echo "DNS服务器多线程优化验证测试" -echo "=========================================" -echo "服务器: $SERVER" -echo "域名: $DOMAIN" -echo "并发数: $CONCURRENCY" -echo "总查询数: $QUERIES" -echo "=========================================" - -echo "" -echo "启动DNS服务器..." -./dns-server > /dev/null 2>&1 & -DNS_PID=$! -echo "DNS服务器PID: $DNS_PID" - -sleep 5 - -echo "" -echo "=========================================" -echo "开始压力测试前系统状态:" -echo "=========================================" -echo "CPU使用率:" -top -b -n 1 | grep "Cpu(s)" | awk '{print " " $2 "% 用户, " $4 "% 系统, " $8 "% 空闲"}' -echo "" -echo "内存使用情况:" -free -h | grep -E "Mem|Swap" | awk '{print " " $1 ": " $3 "/" $2 " (" $3/$2*100 "% 使用)"}' -echo "" -echo "DNS服务器进程资源使用:" -ps -p $DNS_PID -o %cpu,%mem,cmd --no-headers | awk '{print " CPU: " $1 "%, 内存: " $2 "%"}' - -echo "" -echo "=========================================" -echo "开始压力测试..." -echo "=========================================" - -start_time=$(date +%s.%N) - -for ((i=1; i<=$QUERIES; i++)); do - dig @$SERVER $DOMAIN A +short > /dev/null 2>&1 & - - if (( $i % $CONCURRENCY == 0 )); then - wait - fi -done - -wait - -end_time=$(date +%s.%N) -elapsed=$(echo "$end_time - $start_time" | bc) -qps=$(echo "scale=2; $QUERIES / $elapsed" | bc) - -echo "" -echo "=========================================" -echo "压力测试后系统状态:" -echo "=========================================" -echo "CPU使用率:" -top -b -n 1 | grep "Cpu(s)" | awk '{print " " $2 "% 用户, " $4 "% 系统, " $8 "% 空闲"}' -echo "" -echo "内存使用情况:" -free -h | grep -E "Mem|Swap" | awk '{print " " $1 ": " $3 "/" $2 " (" $3/$2*100 "% 使用)"}' -echo "" -echo "DNS服务器进程资源使用:" -ps -p $DNS_PID -o %cpu,%mem,cmd --no-headers 2>/dev/null | awk '{print " CPU: " $1 "%, 内存: " $2 "%"}' - -echo "" -echo "=========================================" -echo "测试结果:" -echo "=========================================" -echo "总查询数: $QUERIES" -echo "执行时间: $elapsed 秒" -echo "QPS: $qps 次/秒" -echo "=========================================" - -echo "" -echo "停止DNS服务器..." -kill $DNS_PID 2>/dev/null -sleep 2 - -echo "" -echo "测试完成!"