diff --git a/package/ctcgfw/luci-app-adguardhome/Makefile b/package/ctcgfw/luci-app-adguardhome/Makefile deleted file mode 100644 index 7420fe8759..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (C) 2018-2019 Lienol -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-adguardhome -PKG_VERSION:=1.8 -PKG_RELEASE:=12 -PKG_MAINTAINER:= - -LUCI_TITLE:=LuCI app for AdGuardHome -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+ca-certs +curl +wget-ssl +PACKAGE_$(PKG_NAME)_INCLUDE_binary:adguardhome -LUCI_DESCRIPTION:=LuCI support for AdGuardHome - -define Package/$(PKG_NAME)/config -config PACKAGE_$(PKG_NAME)_INCLUDE_binary - bool "Include Binary File" - default y -endef - -PKG_CONFIG_DEPENDS:= CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_binary - -define Package/luci-app-adguardhome/conffiles -/usr/share/AdGuardHome/links.txt -/etc/config/AdGuardHome -endef - -define Package/luci-app-adguardhome/postinst -#!/bin/sh - /etc/init.d/AdGuardHome enable >/dev/null 2>&1 - enable=$(uci get AdGuardHome.AdGuardHome.enabled 2>/dev/null) - if [ "$enable" == "1" ]; then - /etc/init.d/AdGuardHome reload - fi - rm -f /tmp/luci-indexcache - rm -f /tmp/luci-modulecache/* -exit 0 -endef - -define Package/luci-app-adguardhome/prerm -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - /etc/init.d/AdGuardHome disable - /etc/init.d/AdGuardHome stop -uci -q batch <<-EOF >/dev/null 2>&1 - delete ucitrack.@AdGuardHome[-1] - commit ucitrack -EOF -fi -exit 0 -endef - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/controller/AdGuardHome.lua b/package/ctcgfw/luci-app-adguardhome/luasrc/controller/AdGuardHome.lua deleted file mode 100644 index 31cf0d0f06..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/controller/AdGuardHome.lua +++ /dev/null @@ -1,127 +0,0 @@ -module("luci.controller.AdGuardHome",package.seeall) -local fs=require"nixio.fs" -local http=require"luci.http" -local uci=require"luci.model.uci".cursor() -function index() -entry({"admin", "services", "AdGuardHome"},alias("admin", "services", "AdGuardHome", "base"),_("AdGuard Home"), 10).dependent = true -entry({"admin","services","AdGuardHome","base"},cbi("AdGuardHome/base"),_("Base Setting"),1).leaf = true -entry({"admin","services","AdGuardHome","log"},form("AdGuardHome/log"),_("Log"),2).leaf = true -entry({"admin","services","AdGuardHome","manual"},cbi("AdGuardHome/manual"),_("Manual Config"),3).leaf = true -entry({"admin","services","AdGuardHome","status"},call("act_status")).leaf=true -entry({"admin", "services", "AdGuardHome", "check"}, call("check_update")) -entry({"admin", "services", "AdGuardHome", "doupdate"}, call("do_update")) -entry({"admin", "services", "AdGuardHome", "getlog"}, call("get_log")) -entry({"admin", "services", "AdGuardHome", "dodellog"}, call("do_dellog")) -entry({"admin", "services", "AdGuardHome", "reloadconfig"}, call("reload_config")) -entry({"admin", "services", "AdGuardHome", "gettemplateconfig"}, call("get_template_config")) -end -function get_template_config() - local b - local d="" - for cnt in io.lines("/tmp/resolv.conf.d/resolv.conf.auto") do - b=string.match (cnt,"^[^#]*nameserver%s+([^%s]+)$") - if (b~=nil) then - d=d.." - "..b.."\n" - end - end - local f=io.open("/usr/share/AdGuardHome/AdGuardHome_template.yaml", "r+") - local tbl = {} - local a="" - while (1) do - a=f:read("*l") - if (a=="#bootstrap_dns") then - a=d - elseif (a=="#upstream_dns") then - a=d - elseif (a==nil) then - break - end - table.insert(tbl, a) - end - f:close() - http.prepare_content("text/plain; charset=utf-8") - http.write(table.concat(tbl, "\n")) -end -function reload_config() - fs.remove("/tmp/AdGuardHometmpconfig.yaml") - http.prepare_content("application/json") - http.write('') -end -function act_status() - local e={} - local binpath=uci:get("AdGuardHome","AdGuardHome","binpath") - e.running=luci.sys.call("pgrep "..binpath.." >/dev/null")==0 - e.redirect=(fs.readfile("/var/run/AdGredir")=="1") - http.prepare_content("application/json") - http.write_json(e) -end -function do_update() - fs.writefile("/var/run/lucilogpos","0") - http.prepare_content("application/json") - http.write('') - local arg - if luci.http.formvalue("force") == "1" then - arg="force" - else - arg="" - end - if fs.access("/var/run/update_core") then - if arg=="force" then - luci.sys.exec("kill $(pgrep /usr/share/AdGuardHome/update_core.sh) ; sh /usr/share/AdGuardHome/update_core.sh "..arg.." >/tmp/AdGuardHome_update.log 2>&1 &") - end - else - luci.sys.exec("sh /usr/share/AdGuardHome/update_core.sh "..arg.." >/tmp/AdGuardHome_update.log 2>&1 &") - end -end -function get_log() - local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") - if (logfile==nil) then - http.write("no log available\n") - return - elseif (logfile=="syslog") then - if not fs.access("/var/run/AdGuardHomesyslog") then - luci.sys.exec("(/usr/share/AdGuardHome/getsyslog.sh &); sleep 1;") - end - logfile="/tmp/AdGuardHometmp.log" - fs.writefile("/var/run/AdGuardHomesyslog","1") - elseif not fs.access(logfile) then - http.write("") - return - end - http.prepare_content("text/plain; charset=utf-8") - local fdp - if fs.access("/var/run/lucilogreload") then - fdp=0 - fs.remove("/var/run/lucilogreload") - else - fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0 - end - local f=io.open(logfile, "r+") - f:seek("set",fdp) - local a=f:read(2048000) or "" - fdp=f:seek() - fs.writefile("/var/run/lucilogpos",tostring(fdp)) - f:close() - http.write(a) -end -function do_dellog() - local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") - fs.writefile(logfile,"") - http.prepare_content("application/json") - http.write('') -end -function check_update() - http.prepare_content("text/plain; charset=utf-8") - local fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0 - local f=io.open("/tmp/AdGuardHome_update.log", "r+") - f:seek("set",fdp) - local a=f:read(2048000) or "" - fdp=f:seek() - fs.writefile("/var/run/lucilogpos",tostring(fdp)) - f:close() -if fs.access("/var/run/update_core") then - http.write(a) -else - http.write(a.."\0") -end -end diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua b/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua deleted file mode 100644 index 6896b61eff..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/base.lua +++ /dev/null @@ -1,304 +0,0 @@ -require("luci.sys") -require("luci.util") -require("io") -local m,s,o,o1 -local fs=require"nixio.fs" -local uci=require"luci.model.uci".cursor() -local configpath=uci:get("AdGuardHome","AdGuardHome","configpath") or "/etc/AdGuardHome.yaml" -local binpath=uci:get("AdGuardHome","AdGuardHome","binpath") or "/usr/bin/AdGuardHome" -httpport=uci:get("AdGuardHome","AdGuardHome","httpport") or "3000" -m = Map("AdGuardHome", "AdGuard Home") -m.description = translate("Free and open source, powerful network-wide ads & trackers blocking DNS server.") -m:section(SimpleSection).template = "AdGuardHome/AdGuardHome_status" - -s = m:section(TypedSection, "AdGuardHome") -s.anonymous=true -s.addremove=false ----- enable -o = s:option(Flag, "enabled", translate("Enable")) -o.default = 0 -o.optional = false ----- httpport -o =s:option(Value,"httpport",translate("Browser management port")) -o.placeholder=3000 -o.default=3000 -o.datatype="port" -o.optional = false -o.description = translate("") ----- update warning not safe -local binmtime=uci:get("AdGuardHome","AdGuardHome","binmtime") or "0" -local e="" -if not fs.access(configpath) then - e=e.." "..translate("no config") -end -if not fs.access(binpath) then - e=e.." "..translate("no core") -else - local version=uci:get("AdGuardHome","AdGuardHome","version") - local testtime=fs.stat(binpath,"mtime") - if testtime~=tonumber(binmtime) or version==nil then - local tmp=luci.sys.exec(binpath.." --version | grep -m 1 -E 'v[0-9.]+' -o ") - version=string.sub(tmp, 1) - if version=="" then version="core error" end - uci:set("AdGuardHome","AdGuardHome","version",version) - uci:set("AdGuardHome","AdGuardHome","binmtime",testtime) - uci:save("AdGuardHome") - end - e=version..e -end -o=s:option(Button,"restart",translate("Update")) -o.inputtitle=translate("Update core version") -o.template = "AdGuardHome/AdGuardHome_check" -o.showfastconfig=(not fs.access(configpath)) -o.description=string.format(translate("core version:").."%s ",e) ----- port warning not safe -local port=luci.sys.exec("awk '/ port:/{printf($2);exit;}' "..configpath.." 2>nul") -if (port=="") then port="?" end ----- Redirect -o = s:option(ListValue, "redirect", port..translate("Redirect"), translate("AdGuardHome redirect mode")) -o.placeholder = "none" -o:value("none", translate("none")) -o:value("dnsmasq-upstream", translate("Run as dnsmasq upstream server")) -o:value("redirect", translate("Redirect 53 port to AdGuardHome")) -o:value("exchange", translate("Use port 53 replace dnsmasq")) -o.default = "none" -o.optional = true ----- bin path -o = s:option(Value, "binpath", translate("Bin Path"), translate("AdGuardHome Bin path if no bin will auto download")) -o.default = "/usr/bin/AdGuardHome" -o.datatype = "string" -o.optional = false -o.rmempty=false -o.validate=function(self, value) -if value=="" then return nil end -if fs.stat(value,"type")=="dir" then - fs.rmdir(value) -end -if fs.stat(value,"type")=="dir" then - if (m.message) then - m.message =m.message.."\nerror!bin path is a dir" - else - m.message ="error!bin path is a dir" - end - return nil -end -return value -end ---- upx -o = s:option(ListValue, "upxflag", translate("use upx to compress bin after download")) -o:value("", translate("none")) -o:value("-1", translate("compress faster")) -o:value("-9", translate("compress better")) -o:value("--best", translate("compress best(can be slow for big files)")) -o:value("--brute", translate("try all available compression methods & filters [slow]")) -o:value("--ultra-brute", translate("try even more compression variants [very slow]")) -o.default = "" -o.description=translate("bin use less space,but may have compatibility issues") -o.rmempty = true ----- config path -o = s:option(Value, "configpath", translate("Config Path"), translate("AdGuardHome config path")) -o.default = "/etc/AdGuardHome.yaml" -o.datatype = "string" -o.optional = false -o.rmempty=false -o.validate=function(self, value) -if value==nil then return nil end -if fs.stat(value,"type")=="dir" then - fs.rmdir(value) -end -if fs.stat(value,"type")=="dir" then - if m.message then - m.message =m.message.."\nerror!config path is a dir" - else - m.message ="error!config path is a dir" - end - return nil -end -return value -end ----- work dir -o = s:option(Value, "workdir", translate("Work dir"), translate("AdGuardHome work dir include rules,audit log and database")) -o.default = "/etc/AdGuardHome" -o.datatype = "string" -o.optional = false -o.rmempty=false -o.validate=function(self, value) -if value=="" then return nil end -if fs.stat(value,"type")=="reg" then - if m.message then - m.message =m.message.."\nerror!work dir is a file" - else - m.message ="error!work dir is a file" - end - return nil -end -if string.sub(value, -1)=="/" then - return string.sub(value, 1, -2) -else - return value -end -end ----- log file -o = s:option(Value, "logfile", translate("Runtime log file"), translate("AdGuardHome runtime Log file if 'syslog': write to system log;if empty no log")) -o.datatype = "string" -o.rmempty = true -o.validate=function(self, value) -if fs.stat(value,"type")=="dir" then - fs.rmdir(value) -end -if fs.stat(value,"type")=="dir" then - if m.message then - m.message =m.message.."\nerror!log file is a dir" - else - m.message ="error!log file is a dir" - end - return nil -end -return value -end ----- debug -o = s:option(Flag, "verbose", translate("Verbose log")) -o.default = 0 -o.optional = true ----- gfwlist -local a=luci.sys.call("grep -m 1 -q programadd "..configpath) -if (a==0) then -a="Added" -else -a="Not added" -end -o=s:option(Button,"gfwdel",translate("Del gfwlist"),translate(a)) -o.optional = true -o.inputtitle=translate("Del") -o.write=function() - luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh del 2>&1") - luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome")) -end -o=s:option(Button,"gfwadd",translate("Add gfwlist"),translate(a)) -o.optional = true -o.inputtitle=translate("Add") -o.write=function() - luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh 2>&1") - luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome")) -end -o = s:option(Value, "gfwupstream", translate("Gfwlist upstream dns server"), translate("Gfwlist domain upstream dns service")..translate(a)) -o.default = "tcp://208.67.220.220:5353" -o.datatype = "string" -o.optional = true ----- chpass -o = s:option(Value, "hashpass", translate("Change browser management password"), translate("Press load culculate model and culculate finally save/apply")) -o.default = "" -o.datatype = "string" -o.template = "AdGuardHome/AdGuardHome_chpass" -o.optional = true ----- upgrade protect -o = s:option(MultiValue, "upprotect", translate("Keep files when system upgrade")) -o:value("$binpath",translate("core bin")) -o:value("$configpath",translate("config file")) -o:value("$logfile",translate("log file")) -o:value("$workdir/data/sessions.db",translate("sessions.db")) -o:value("$workdir/data/stats.db",translate("stats.db")) -o:value("$workdir/data/querylog.json",translate("querylog.json")) -o:value("$workdir/data/filters",translate("filters")) -o.widget = "checkbox" -o.default = nil -o.optional=true ----- wait net on boot -o = s:option(Flag, "waitonboot", translate("On boot when network ok restart")) -o.default = 1 -o.optional = true ----- backup workdir on shutdown -local workdir=uci:get("AdGuardHome","AdGuardHome","workdir") or "/etc/AdGuardHome" -o = s:option(MultiValue, "backupfile", translate("Backup workdir files when shutdown")) -o1 = s:option(Value, "backupwdpath", translate("Backup workdir path")) -local name -o:value("filters","filters") -o:value("stats.db","stats.db") -o:value("querylog.json","querylog.json") -o:value("sessions.db","sessions.db") -o1:depends ("backupfile", "filters") -o1:depends ("backupfile", "stats.db") -o1:depends ("backupfile", "querylog.json") -o1:depends ("backupfile", "sessions.db") -for name in fs.glob(workdir.."/data/*") -do - name=fs.basename (name) - if name~="filters" and name~="stats.db" and name~="querylog.json" and name~="sessions.db" then - o:value(name,name) - o1:depends ("backupfile", name) - end -end -o.widget = "checkbox" -o.default = nil -o.optional=false -o.description=translate("Will be restore when workdir/data is empty") -----backup workdir path - -o1.default = "/etc/AdGuardHome" -o1.datatype = "string" -o1.optional = false -o1.validate=function(self, value) -if fs.stat(value,"type")=="reg" then - if m.message then - m.message =m.message.."\nerror!backup dir is a file" - else - m.message ="error!backup dir is a file" - end - return nil -end -if string.sub(value,-1)=="/" then - return string.sub(value, 1, -2) -else - return value -end -end - -----Crontab -o = s:option(MultiValue, "crontab", translate("Crontab task"),translate("Please change time and args in crontab")) -o:value("autoupdate",translate("Auto update core")) -o:value("cutquerylog",translate("Auto tail querylog")) -o:value("cutruntimelog",translate("Auto tail runtime log")) -o:value("autohost",translate("Auto update ipv6 hosts and restart adh")) -o:value("autogfw",translate("Auto update gfwlist and restart adh")) -o.widget = "checkbox" -o.default = nil -o.optional=true - -----downloadpath -o = s:option(TextValue, "downloadlinks",translate("Download links for update")) -o.optional = false -o.rows = 4 -o.wrap = "soft" -o.cfgvalue = function(self, section) - return fs.readfile("/usr/share/AdGuardHome/links.txt") -end -o.write = function(self, section, value) - fs.writefile("/usr/share/AdGuardHome/links.txt", value:gsub("\r\n", "\n")) -end -fs.writefile("/var/run/lucilogpos","0") -function m.on_commit(map) - if (fs.access("/var/run/AdGserverdis")) then - io.popen("/etc/init.d/AdGuardHome reload &") - return - end - local ucitracktest=uci:get("AdGuardHome","AdGuardHome","ucitracktest") - if ucitracktest=="1" then - return - elseif ucitracktest=="0" then - io.popen("/etc/init.d/AdGuardHome reload &") - else - if (fs.access("/var/run/AdGlucitest")) then - uci:set("AdGuardHome","AdGuardHome","ucitracktest","0") - io.popen("/etc/init.d/AdGuardHome reload &") - else - fs.writefile("/var/run/AdGlucitest","") - if (ucitracktest=="2") then - uci:set("AdGuardHome","AdGuardHome","ucitracktest","1") - else - uci:set("AdGuardHome","AdGuardHome","ucitracktest","2") - end - end - uci:save("AdGuardHome") - end -end -return m diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua b/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua deleted file mode 100644 index 5d18a88db4..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/log.lua +++ /dev/null @@ -1,16 +0,0 @@ -local fs=require"nixio.fs" -local uci=require"luci.model.uci".cursor() -local f,t -f=SimpleForm("logview") -f.reset = false -f.submit = false -t=f:field(TextValue,"conf") -t.rmempty=true -t.rows=20 -t.template="AdGuardHome/log" -t.readonly="readonly" -local logfile=uci:get("AdGuardHome","AdGuardHome","logfile") or "" -t.timereplace=(logfile~="syslog" and logfile~="" ) -t.pollcheck=logfile~="" -fs.writefile("/var/run/lucilogreload","") -return f diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua b/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua deleted file mode 100644 index ecf072bbc7..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/model/cbi/AdGuardHome/manual.lua +++ /dev/null @@ -1,97 +0,0 @@ -local m, s, o -local fs = require "nixio.fs" -local uci=require"luci.model.uci".cursor() -local sys=require"luci.sys" -require("string") -require("io") -require("table") -function gen_template_config() - local b - local d="" - for cnt in io.lines("/tmp/resolv.conf.d/resolv.conf.auto") do - b=string.match (cnt,"^[^#]*nameserver%s+([^%s]+)$") - if (b~=nil) then - d=d.." - "..b.."\n" - end - end - local f=io.open("/usr/share/AdGuardHome/AdGuardHome_template.yaml", "r+") - local tbl = {} - local a="" - while (1) do - a=f:read("*l") - if (a=="#bootstrap_dns") then - a=d - elseif (a=="#upstream_dns") then - a=d - elseif (a==nil) then - break - end - table.insert(tbl, a) - end - f:close() - return table.concat(tbl, "\n") -end -m = Map("AdGuardHome") -local configpath = uci:get("AdGuardHome","AdGuardHome","configpath") -local binpath = uci:get("AdGuardHome","AdGuardHome","binpath") -s = m:section(TypedSection, "AdGuardHome") -s.anonymous=true -s.addremove=false ---- config -o = s:option(TextValue, "escconf") -o.rows = 66 -o.wrap = "off" -o.rmempty = true -o.cfgvalue = function(self, section) - return fs.readfile("/tmp/AdGuardHometmpconfig.yaml") or fs.readfile(configpath) or gen_template_config() or "" -end -o.validate=function(self, value) - fs.writefile("/tmp/AdGuardHometmpconfig.yaml", value:gsub("\r\n", "\n")) - if fs.access(binpath) then - if (sys.call(binpath.." -c /tmp/AdGuardHometmpconfig.yaml --check-config 2> /tmp/AdGuardHometest.log")==0) then - return value - end - else - return value - end - luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome","manual")) - return nil -end -o.write = function(self, section, value) - fs.move("/tmp/AdGuardHometmpconfig.yaml",configpath) -end -o.remove = function(self, section, value) - fs.writefile(configpath, "") -end ---- js and reload button -o = s:option(DummyValue, "") -o.anonymous=true -o.template = "AdGuardHome/yamleditor" -if not fs.access(binpath) then - o.description=translate("WARNING!!! no bin found apply config will not be test") -end ---- log -if (fs.access("/tmp/AdGuardHometmpconfig.yaml")) then -local c=fs.readfile("/tmp/AdGuardHometest.log") -if (c~="") then -o = s:option(TextValue, "") -o.readonly=true -o.rows = 5 -o.rmempty = true -o.name="" -o.cfgvalue = function(self, section) - return fs.readfile("/tmp/AdGuardHometest.log") -end -end -end -function m.on_commit(map) - local ucitracktest=uci:get("AdGuardHome","AdGuardHome","ucitracktest") - if ucitracktest=="1" then - return - elseif ucitracktest=="0" then - io.popen("/etc/init.d/AdGuardHome reload &") - else - fs.writefile("/var/run/AdGlucitest","") - end -end -return m diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm b/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm deleted file mode 100644 index 52315ef7e4..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_check.htm +++ /dev/null @@ -1,78 +0,0 @@ -<%+cbi/valueheader%> -<%local fs=require"nixio.fs"%> - - -<% if self.showfastconfig then %> - -<%end%> - - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm b/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm deleted file mode 100644 index 440eafd970..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_chpass.htm +++ /dev/null @@ -1,49 +0,0 @@ -<%+cbi/valueheader%> - - 0, "data-choices", { self.keylist, self.vallist }) - %> /> - <% if self.password then %><% end %> - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm b/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm deleted file mode 100644 index 7e924d1195..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/AdGuardHome_status.htm +++ /dev/null @@ -1,27 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
\ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm b/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm deleted file mode 100644 index 44b3da0b1f..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/log.htm +++ /dev/null @@ -1,110 +0,0 @@ -<%+cbi/valueheader%> -<%:reverse%> -<%if self.timereplace then%> -<%:localtime%>
-<%end%> - - - - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm b/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm deleted file mode 100644 index 639cb99888..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/luasrc/view/AdGuardHome/yamleditor.htm +++ /dev/null @@ -1,39 +0,0 @@ -<%+cbi/valueheader%> - - - - - - - - - -<%fs=require"nixio.fs"%> -<%if fs.access("/tmp/AdGuardHometmpconfig.yaml") then%> - -<%end%> - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/po/zh-cn/AdGuardHome.po b/package/ctcgfw/luci-app-adguardhome/po/zh-cn/AdGuardHome.po deleted file mode 100644 index b0abca72a2..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/po/zh-cn/AdGuardHome.po +++ /dev/null @@ -1,266 +0,0 @@ -#/cgi-bin/luci/admin/services/AdGuardHome -msgid "Base Setting" -msgstr "基础设置" - -msgid "Log" -msgstr "日志" - -msgid "Manual Config" -msgstr "手动设置" - -msgid "Free and open source, powerful network-wide ads & trackers blocking DNS server." -msgstr "免费开源,功能强大的全网络广告和跟踪程序拦截DNS服务器" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Redirected" -msgstr "已重定向" - -msgid "Not redirect" -msgstr "未重定向" - -msgid "Collecting data..." -msgstr "获取数据中..." - -msgid "Enable" -msgstr "启用" - -msgid "Browser management port" -msgstr "网页管理端口" - -msgid "Update" -msgstr "更新" -#button change -msgid "Update core version" -msgstr "更新核心版本" - -msgid "Check..." -msgstr "检查中..." - -msgid "Updated" -msgstr "已更新" - -#button hide -msgid "Force update" -msgstr "强制更新" - -msgid "Fast config" -msgstr "快速配置" -# -msgid "core version:" -msgstr "核心版本:" -#description change -msgid "no config" -msgstr "没有配置文件" -msgid "no core" -msgstr "没有核心" -# -msgid "Redirect" -msgstr "重定向" -#inlist -msgid "none" -msgstr "无" - -msgid "Run as dnsmasq upstream server" -msgstr "作为dnsmasq的上游服务器" - -msgid "Redirect 53 port to AdGuardHome" -msgstr "重定向53端口到AdGuardHome" - -msgid "Use port 53 replace dnsmasq" -msgstr "使用53端口替换dnsmasq" -# -msgid "AdGuardHome redirect mode" -msgstr "AdGuardHome重定向模式" - -msgid "Bin Path" -msgstr "执行文件路径" - -msgid "AdGuardHome Bin path if no bin will auto download" -msgstr "AdGuardHome 执行文件路径 如果没有执行文件将自动下载" - -msgid "use upx to compress bin after download" -msgstr "下载后使用upx压缩执行文件" -#inlist -msgid "compress faster" -msgstr "快速压缩" - -msgid "compress better" -msgstr "更好的压缩" - -msgid "compress best(can be slow for big files)" -msgstr "最好的压缩(大文件可能慢)" - -msgid "try all available compression methods & filters [slow]" -msgstr "尝试所有可能的压缩方法和过滤器[慢]" - -msgid "try even more compression variants [very slow]" -msgstr "尝试更多变体压缩手段[很慢]" - -msgid "bin use less space,but may have compatibility issues" -msgstr "减小执行文件空间占用,但是可能压缩后有兼容性问题" -# -msgid "Config Path" -msgstr "配置文件路径" - -msgid "AdGuardHome config path" -msgstr "AdGuardHome 配置文件路径" - -msgid "Work dir" -msgstr "工作目录" - -msgid "AdGuardHome work dir include rules,audit log and database" -msgstr "AdGuardHome 工作目录包含规则,审计日志和数据库" - -msgid "Runtime log file" -msgstr "运行日志" - -msgid "AdGuardHome runtime Log file if 'syslog': write to system log;if empty no log" -msgstr "AdGuardHome 运行日志 如果填syslog将写入系统日志;如果空则不记录日志" - -msgid "Verbose log" -msgstr "详细日志" -#hide div -msgid "Add gfwlist" -msgstr "加入gfw列表" - -msgid "Add" -msgstr "添加" - -msgid "Added" -msgstr "已添加" - -msgid "Not added" -msgstr "未添加" -#hide div -msgid "Del gfwlist" -msgstr "删除gfw列表" - -msgid "Del" -msgstr "删除" -#hide div -msgid "Gfwlist upstream dns server" -msgstr "gfw列表上游服务器" - -msgid "Gfwlist domain upstream dns service" -msgstr "gfw列表域名上游服务器" -#hide div -msgid "Change browser management password" -msgstr "改变网页登录密码" - -msgid "Culculate" -msgstr "计算" -##button change -msgid "Load culculate model" -msgstr "载入计算模块" - -msgid "loading..." -msgstr "载入中" - -msgid "Please save/apply" -msgstr "请提交" - -msgid "is empty" -msgstr "为空" - -msgid "Press load culculate model and culculate finally save/apply" -msgstr "按载入计算模块 然后计算 最后保存/提交" -# -msgid "Keep files when system upgrade" -msgstr "系统升级时保留文件" -#checkbox -msgid "core bin" -msgstr "核心执行文件" - -msgid "config file" -msgstr "配置文件" - -msgid "log file" -msgstr "日志文件" - -msgid "querylog.json" -msgstr "审计日志.json" -# -msgid "On boot when network ok restart" -msgstr "开机后网络准备好时重启" - -msgid "Backup workdir files when shutdown" -msgstr "在关机时备份工作目录文件" - -msgid "Will be restore when workdir/data is empty" -msgstr "在工作目录/data为空的时候恢复" - -msgid "Backup workdir path" -msgstr "工作目录备份路径" - -msgid "Crontab task" -msgstr "计划任务" - -msgid "Auto update core" -msgstr "自动升级核心" - -msgid "Auto tail querylog" -msgstr "自动截短查询日志" - -msgid "Auto tail runtime log" -msgstr "自动截短运行日志" - -msgid "Auto update ipv6 hosts and restart adh" -msgstr "自动更新ipv6主机并重启adh" - -msgid "Auto update gfwlist and restart adh" -msgstr "自动更新gfw列表并重启adh" - -msgid "Please change time and args in crontab" -msgstr "请在计划任务中修改时间和参数" - -msgid "Download links for update" -msgstr "升级用的下载链接" - -#/cgi-bin/luci/admin/services/AdGuardHome/log/ -msgid "reverse" -msgstr "逆序" - -msgid "localtime" -msgstr "本地时间" - -msgid "Please add log path in config to enable log" -msgstr "请在设置里填写日志路径以启用日志" - -msgid "dellog" -msgstr "删除日志" - -msgid "download log" -msgstr "下载日志" - -#/cgi-bin/luci//admin/services/AdGuardHome/manual/ -msgid "Use template" -msgstr "使用模板" -#hide button -msgid "Reload Config" -msgstr "重新载入配置" - -msgid "WARNING!!! no bin found apply config will not be test" -msgstr "警告!!!未找到执行文件,提交配置将不会进行校验" -#unused -msgid "Change browser management username" -msgstr "改变网页登录用户名" - -msgid "Username" -msgstr "用户名" - -msgid "Check Config" -msgstr "检查配置" - -msgid "unknown" -msgstr "未知" - -msgid "Keep database when system upgrade" -msgstr "系统升级时保留数据" - -msgid "Boot delay until network ok" -msgstr "开机时直到网络准备好再启动" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/root/etc/config/AdGuardHome b/package/ctcgfw/luci-app-adguardhome/root/etc/config/AdGuardHome deleted file mode 100644 index 6ecfde8b14..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/etc/config/AdGuardHome +++ /dev/null @@ -1,11 +0,0 @@ -config AdGuardHome 'AdGuardHome' - option enabled '0' - option httpport '3000' - option redirect 'none' - option configpath '/etc/AdGuardHome.yaml' - option workdir '/etc/AdGuardHome' - option logfile '/tmp/AdGuardHome.log' - option verbose '0' - option binpath '/usr/bin/AdGuardHome' - option upxflag '' - diff --git a/package/ctcgfw/luci-app-adguardhome/root/etc/init.d/AdGuardHome b/package/ctcgfw/luci-app-adguardhome/root/etc/init.d/AdGuardHome deleted file mode 100755 index 58f65bf2d7..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/etc/init.d/AdGuardHome +++ /dev/null @@ -1,632 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 - -START=95 -STOP=01 - -CONFIGURATION=AdGuardHome -CRON_FILE=/etc/crontabs/root - -extra_command "do_redirect" "0 or 1" -extra_command "testbackup" "backup or restore" -extra_command "test_crontab" -extra_command "force_reload" -extra_command "isrunning" - -set_forward_dnsmasq() -{ - local PORT="$1" - addr="127.0.0.1#$PORT" - OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`" - echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1 - if [ $? -eq 0 ]; then - return - fi - uci delete dhcp.@dnsmasq[0].server 2>/dev/null - uci add_list dhcp.@dnsmasq[0].server=$addr - for server in $OLD_SERVER; do - if [ "$server" = "$addr" ]; then - continue - fi - uci add_list dhcp.@dnsmasq[0].server=$server - done - uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null - uci set dhcp.@dnsmasq[0].noresolv=1 - uci commit dhcp - /etc/init.d/dnsmasq restart -} - -stop_forward_dnsmasq() -{ - local OLD_PORT="$1" - addr="127.0.0.1#$OLD_PORT" - OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`" - echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1 - if [ $? -ne 0 ]; then - return - fi - - uci del_list dhcp.@dnsmasq[0].server=$addr 2>/dev/null - addrlist="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`" - if [ -z "$addrlist" ] ; then - uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto 2>/dev/null - uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null - fi - uci commit dhcp - /etc/init.d/dnsmasq restart -} - -set_iptable() -{ - local ipv6_server=$1 - local tcp_server=$2 - uci -q batch <<-EOF >/dev/null 2>&1 - delete firewall.AdGuardHome - set firewall.AdGuardHome=include - set firewall.AdGuardHome.type=script - set firewall.AdGuardHome.path=/usr/share/AdGuardHome/firewall.start - set firewall.AdGuardHome.reload=1 - commit firewall -EOF - - IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`" - for IP in $IPS - do - if [ "$tcp_server" == "1" ]; then - iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 - fi - iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 - done - - if [ "$ipv6_server" == 0 ]; then - return - fi - - IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`" - for IP in $IPS - do - if [ "$tcp_server" == "1" ]; then - ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 - fi - ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1 - done -} - -clear_iptable() -{ - uci -q batch <<-EOF >/dev/null 2>&1 - delete firewall.AdGuardHome - commit firewall -EOF - local OLD_PORT="$1" - local ipv6_server=$2 - IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`" - for IP in $IPS - do - iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 - iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 - done - - if [ "$ipv6_server" == 0 ]; then - return - fi - echo "warn ip6tables nat mod is needed" - IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`" - for IP in $IPS - do - ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 - ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1 - done -} - -service_triggers() { - procd_add_reload_trigger "$CONFIGURATION" - [ "$(uci get AdGuardHome.AdGuardHome.redirect)" == "redirect" ] && procd_add_reload_trigger firewall -} - -isrunning(){ - config_load "${CONFIGURATION}" - _isrunning - local r=$? - ([ "$r" == "0" ] && echo "running") || ([ "$r" == "1" ] && echo "not run" ) || echo "no bin" - return $r -} - -_isrunning(){ - config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" - [ ! -f "$binpath" ] && return 2 - pgrep $binpath 2>&1 >/dev/null && return 0 - return 1 -} - -force_reload(){ - config_load "${CONFIGURATION}" - _isrunning && procd_send_signal "$CONFIGURATION" || start -} - -get_tz() -{ - SET_TZ="" - - if [ -e "/etc/localtime" ]; then - return - fi - - for tzfile in /etc/TZ /var/etc/TZ - do - if [ ! -e "$tzfile" ]; then - continue - fi - - tz="`cat $tzfile 2>/dev/null`" - done - - if [ -z "$tz" ]; then - return - fi - - SET_TZ=$tz -} - -rm_port53() -{ - local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1") - dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null) - if [ -z "$dnsmasq_port" ]; then - dnsmasq_port="53" - fi - if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then - if [ "$dnsmasq_port" == "53" ]; then - dnsmasq_port="1745" - fi - elif [ "$dnsmasq_port" == "53" ]; then - return - fi - config_editor "dns.port" "$dnsmasq_port" "$configpath" - uci set dhcp.@dnsmasq[0].port="53" - uci commit dhcp - /etc/init.d/dnsmasq reload -} - -use_port53() -{ - local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1") - dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null) - if [ -z "$dnsmasq_port" ]; then - dnsmasq_port="53" - fi - if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then - if [ "$dnsmasq_port" == "53" ]; then - AdGuardHome_PORT="1745" - fi - elif [ "$AdGuardHome_PORT" == "53" ]; then - return - fi - config_editor "dns.port" "53" "$configpath" - uci set dhcp.@dnsmasq[0].port="$AdGuardHome_PORT" - uci commit dhcp - /etc/init.d/dnsmasq reload -} - -do_redirect() -{ - config_load "${CONFIGURATION}" - _do_redirect $1 -} - -_do_redirect() -{ - local section="$CONFIGURATION" - args="" - ipv6_server=1 - tcp_server=0 - enabled=$1 - if [ "$enabled" == "1" ]; then - echo -n "1">/var/run/AdGredir - else - echo -n "0">/var/run/AdGredir - fi - config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml" - AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1") - if [ -z "$AdGuardHome_PORT" ]; then - AdGuardHome_PORT="0" - fi - config_get "redirect" "$section" "redirect" "none" - config_get "old_redirect" "$section" "old_redirect" "none" - config_get "old_port" "$section" "old_port" "0" - config_get "old_enabled" "$section" "old_enabled" "0" - uci get dhcp.@dnsmasq[0].port >/dev/null 2>&1 || uci set dhcp.@dnsmasq[0].port="53" >/dev/null 2>&1 - if [ "$old_enabled" = "1" -a "$old_redirect" == "exchange" ]; then - AdGuardHome_PORT=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null) - fi - - if [ "$old_redirect" != "$redirect" ] || [ "$old_port" != "$AdGuardHome_PORT" ] || [ "$old_enabled" = "1" -a "$enabled" = "0" ]; then - if [ "$old_redirect" != "none" ]; then - if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then - clear_iptable "$old_port" "$ipv6_server" - elif [ "$old_redirect" == "dnsmasq-upstream" ]; then - stop_forward_dnsmasq "$old_port" - elif [ "$old_redirect" == "exchange" ]; then - rm_port53 - fi - fi - elif [ "$old_enabled" = "1" -a "$enabled" = "1" ]; then - if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then - clear_iptable "$old_port" "$ipv6_server" - fi - fi - uci delete AdGuardHome.@AdGuardHome[0].old_redirect 2>/dev/null - uci delete AdGuardHome.@AdGuardHome[0].old_port 2>/dev/null - uci delete AdGuardHome.@AdGuardHome[0].old_enabled 2>/dev/null - uci add_list AdGuardHome.@AdGuardHome[0].old_redirect="$redirect" 2>/dev/null - uci add_list AdGuardHome.@AdGuardHome[0].old_port="$AdGuardHome_PORT" 2>/dev/null - uci add_list AdGuardHome.@AdGuardHome[0].old_enabled="$enabled" 2>/dev/null - uci commit AdGuardHome - [ "$enabled" == "0" ] && return 1 - if [ "$AdGuardHome_PORT" == "0" ]; then - return 1 - fi - if [ "$redirect" = "redirect" ]; then - set_iptable $ipv6_server $tcp_server - elif [ "$redirect" = "dnsmasq-upstream" ]; then - set_forward_dnsmasq "$AdGuardHome_PORT" - elif [ "$redirect" == "exchange" -a "$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)" == "53" ]; then - use_port53 - fi -} - -get_filesystem() -{ -# print out path filesystem - echo $1 | awk ' - BEGIN{ - while (("mount"| getline ret) > 0) - { - split(ret,d); - fs[d[3]]=d[5]; - m=index(d[1],":") - if (m==0) - { - pt[d[3]]=d[1] - }else{ - pt[d[3]]=substr(d[1],m+1) - }}}{ - split($0,d,"/"); - if ("/" in fs) - { - result1=fs["/"]; - } - if ("/" in pt) - { - result2=pt["/"]; - } - for (i=2;i<=length(d);i++) - { - p[i]=p[i-1]"/"d[i]; - if (p[i] in fs) - { - result1=fs[p[i]]; - result2=pt[p[i]]; - } - } - if (result2 in fs){ - result=fs[result2]} - else{ - result=result1} - print(result);}' -} - -config_editor() -{ - awk -v yaml="$1" -v value="$2" -v file="$3" -v ro="$4" ' - BEGIN{split(yaml,part,"\.");s="";i=1;l=length(part);} - { - if (match($0,s""part[i]":")) - { - if (i==l) - { - split($0,t,": "); - if (ro==""){ - system("sed -i '\''"FNR"c \\"t[1]": "value"'\'' "file); - }else{ - print(t[2]); - } - exit; - } - s=s"[- ]{2}"; - i++; - } - }' $3 -} - -boot_service() { - rm /var/run/AdGserverdis >/dev/null 2>&1 - config_load "${CONFIGURATION}" - config_get waitonboot $CONFIGURATION waitonboot "0" - config_get_bool enabled $CONFIGURATION enabled 0 - config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" - [ -f "$binpath" ] && start_service - if [ "$enabled" == "1" ] && [ "$waitonboot" == "1" ]; then - procd_open_instance "waitnet" - procd_set_param command "/usr/share/AdGuardHome/waitnet.sh" - procd_close_instance - echo "no net start pinging" - fi -} - -testbackup(){ - config_load "${CONFIGURATION}" - if [ "$1" == "backup" ]; then - backup - elif [ "$1" == "restore" ]; then - restore - fi -} - -restore() -{ - config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" - config_get backupwdpath $CONFIGURATION backupwdpath "/etc/AdGuardHome" - cp -u -r -f $backupwdpath/data $workdir -} - -backup() { - config_get backupwdpath $CONFIGURATION backupwdpath "/etc/AdGuardHome" - mkdir -p $backupwdpath/data - config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" - config_get backupfile $CONFIGURATION backupfile "" - for one in $backupfile; - do - while : - do - if [ -d "$backupwdpath/data/$one" ]; then - cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data 2>&1) - else - cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data/$one 2>&1) - fi - echo "$cpret" - echo "$cpret" | grep "no space left on device" - if [ "$?" == "0" ]; then - echo "磁盘已满,删除log重试中" - del_querylog && continue - rm -f -r $backupwdpath/data/filters - rm -f -r $workdir/data/filters && continue - echo "backup failed" - fi - break - done - done -} - -start_service() { - # Reading config - rm /var/run/AdGserverdis >/dev/null 2>&1 - config_load "${CONFIGURATION}" - # update password - config_get hashpass $CONFIGURATION hashpass "" - config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml" - if [ -n "$hashpass" ]; then - config_editor "users.password" "$hashpass" "$configpath" - uci set $CONFIGURATION.$CONFIGURATION.hashpass="" - fi - local enabled - config_get_bool enabled $CONFIGURATION enabled 0 - # update crontab - do_crontab - if [ "$enabled" == "0" ]; then - _do_redirect 0 - return - fi - #what need to do before reload - config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" - - config_get backupfile $CONFIGURATION backupfile "" - mkdir -p $workdir/data - if [ -n "$backupfile" ] && [ ! -d "$workdir/data" ]; then - restore - fi - # for overlay data-stk-oo not suppport - local cwdfs=$(get_filesystem $workdir) - echo "workdir is a $cwdfs filesystem" - if [ "$cwdfs" == "jffs2" ]; then - echo "fs error ln db to tmp $workdir $cwdfs" - logger "AdGuardHome" "warning db redirect to tmp" - touch $workdir/data/stats.db - if [ ! -L $workdir/data/stats.db ]; then - mv -f $workdir/data/stats.db /tmp/stats.db 2>/dev/null - ln -s /tmp/stats.db $workdir/data/stats.db 2>/dev/null - fi - touch $workdir/data/sessions.db - if [ ! -L $workdir/data/sessions.db ]; then - mv -f $workdir/data/sessions.db /tmp/sessions.db 2>/dev/null - ln -s /tmp/sessions.db $workdir/data/sessions.db 2>/dev/null - fi - fi - local ADDITIONAL_ARGS="" - config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome" - - mkdir -p ${binpath%/*} - ADDITIONAL_ARGS="$ADDITIONAL_ARGS -c $configpath" - ADDITIONAL_ARGS="$ADDITIONAL_ARGS -w $workdir" - config_get httpport $CONFIGURATION httpport 3000 - ADDITIONAL_ARGS="$ADDITIONAL_ARGS -p $httpport" - - # hack to save config file when upgrade system - config_get upprotect $CONFIGURATION upprotect "" - eval upprotect=${upprotect// /\\\\n} - echo -e "$upprotect">/lib/upgrade/keep.d/luci-app-adguardhome - - config_get logfile $CONFIGURATION logfile "" - if [ -n "$logfile" ]; then - ADDITIONAL_ARGS="$ADDITIONAL_ARGS -l $logfile" - fi - - if [ ! -f "$binpath" ]; then - _do_redirect 0 - /usr/share/AdGuardHome/update_core.sh 2>&1 >/tmp/AdGuardHome_update.log & - exit 0 - fi - - config_get_bool verbose $CONFIGURATION verbose 0 - if [ "$verbose" -eq 1 ]; then - ADDITIONAL_ARGS="$ADDITIONAL_ARGS -v" - fi - - procd_open_instance - get_tz - if [ -n "$SET_TZ" ]; then - procd_set_param env TZ="$SET_TZ" - fi - procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5} - procd_set_param limits core="unlimited" nofile="65535 65535" - procd_set_param stderr 1 - procd_set_param command $binpath $ADDITIONAL_ARGS - procd_set_param file "$configpath" "/etc/hosts" "/etc/config/AdGuardHome" - procd_close_instance - if [ -f "$configpath" ]; then - _do_redirect 1 - else - _do_redirect 0 - config_get "redirect" "AdGuardHome" "redirect" "none" - if [ "$redirect" != "none" ]; then - procd_open_instance "waitconfig" - procd_set_param command "/usr/share/AdGuardHome/watchconfig.sh" - procd_close_instance - echo "no config start watching" - fi - fi - echo "AdGuardHome service enabled" - echo "luci enable switch=$enabled" - (sleep 10 && [ -z "$(pgrep $binpath)" ] && logger "AdGuardHome" "no process in 10s cancel redirect" && _do_redirect 0 )& -} - -reload_service() -{ - rm /var/run/AdGlucitest >/dev/null 2>&1 - echo "AdGuardHome reloading" - start -} - -del_querylog(){ - local btarget=$(ls $backupwdpath/data | grep -F "querylog.json" | sort -r | head -n 1) - local wtarget=$(ls $workdir/data | grep -F "querylog.json" | sort -r | head -n 1) - if [ "$btarget"x == "$wtarget"x ]; then - [ -z "$btarget" ] && return 1 - rm -f $workdir/data/$wtarget - rm -f $backupwdpath/data/$btarget - return 0 - fi - if [ "$btarget" \> "$wtarget" ]; then - rm -f $backupwdpath/data/$btarget - return 0 - else - rm -f $workdir/data/$wtarget - return 0 - fi -} - -stop_service() -{ - config_load "${CONFIGURATION}" - _do_redirect 0 - do_crontab - if [ "$1" != "nobackup" ]; then - config_get backupfile $CONFIGURATION backupfile "0" - if [ -n "$backupfile" ]; then - backup - fi - fi - echo "AdGuardHome service disabled" - touch /var/run/AdGserverdis -} - -boot() { - rc_procd boot_service "$@" - if eval "type service_started" 2>/dev/null >/dev/null; then - service_started - fi -} - -test_crontab(){ - config_load "${CONFIGURATION}" - do_crontab -} - -do_crontab(){ - config_get_bool enabled $CONFIGURATION enabled 0 - config_get crontab $CONFIGURATION crontab "" - local findstr default cronenable replace commit - local cronreload=0 - local commit=0 - findstr="/usr/share/AdGuardHome/update_core.sh" - default="30 3 * * * /usr/share/AdGuardHome/update_core.sh 2>&1" - [ "$enabled" == "0" ] || [ "${crontab//autoupdate/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - - config_get workdir $CONFIGURATION workdir "/etc/AdGuardHome" - config_get lastworkdir $CONFIGURATION lastworkdir "/etc/AdGuardHome" - findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json" - #[ -n "$lastworkdir" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastworkdir/data/querylog.json" && [ "$lastworkdir" != "$workdir" ] && replace="${lastworkdir//\//\\/}/${workdir//\//\\/}" - default="0 * * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json" - [ "$enabled" == "0" ] || [ "${crontab//cutquerylog/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - #[ "$lastworkdir" != "$workdir" ] && uci set AdGuardHome.AdGuardHome.lastworkdir="$workdir" && commit=1 - - config_get logfile $CONFIGURATION logfile "" - config_get lastlogfile $CONFIGURATION lastlogfile "" - findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.logfile)" - default="30 3 * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.logfile)" - #[ -n "$lastlogfile" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastlogfile" && [ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && replace="${lastlogfile//\//\\/}/${logfile//\//\\/}" - [ "$logfile" == "syslog" ] || [ "$logfile" == "" ] || [ "$enabled" == "0" ] || [ "${crontab//cutruntimelog/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - #[ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && uci set AdGuardHome.AdGuardHome.lastlogfile="$logfile" && commit=1 - - findstr="/usr/share/AdGuardHome/addhost.sh" - default="0 * * * * /usr/share/AdGuardHome/addhost.sh" - [ "$enabled" == "0" ] || [ "${crontab//autohost/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - [ "$cronenable" == "0" ] && /usr/share/AdGuardHome/addhost.sh "del" "noreload" || /usr/share/AdGuardHome/addhost.sh "" "noreload" - - findstr="/usr/share/AdGuardHome/gfw2adg.sh" - default="30 3 * * * /usr/share/AdGuardHome/gfw2adg.sh" - [ "$enabled" == "0" ] || [ "${crontab//autogfw/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - [ "$cronreload" -gt 0 ] && /etc/init.d/cron restart - #[ "$commit" -gt 0 ] && uci commit AdGuardHome -} - -crontab_editor(){ - #usage input: - #findstr= - #default= - #cronenable= - #replace="${last//\//\\/}/${now//\//\\/}" - #output:cronreload:if >1 please /etc/init.d/cron restart manual - local testline reload - local line="$(grep "$findstr" $CRON_FILE)" - [ -n "$replace" ] && [ -n "$line" ] && eval testline="\${line//$replace}" && [ "$testline" != "$line" ] && line="$testline" && reload="1" && replace="" - if [ "${line:0:1}" != "#" ]; then - if [ $cronenable -eq 1 ]; then - [ -z "$line" ] && line="$default" && reload="1" - if [ -n "$reload" ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "$line" >> $CRON_FILE - cronreload=$((cronreload+1)) - fi - elif [ -n "$line" ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "#$line" >> $CRON_FILE - cronreload=$((cronreload+1)) - fi - else - if [ $cronenable -eq 1 ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "${line:1}" >> $CRON_FILE - cronreload=$((cronreload+1)) - elif [ -z "$reload" ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "$line" >> $CRON_FILE - fi - fi -} diff --git a/package/ctcgfw/luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome b/package/ctcgfw/luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome deleted file mode 100755 index 2d467df980..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/etc/uci-defaults/40_luci-AdGuardHome +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null 2>&1 - delete ucitrack.@AdGuardHome[-1] - add ucitrack AdGuardHome - set ucitrack.@AdGuardHome[-1].init=AdGuardHome - commit ucitrack - delete AdGuardHome.AdGuardHome.ucitracktest -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml deleted file mode 100644 index 7e6a66abc7..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/AdGuardHome_template.yaml +++ /dev/null @@ -1,109 +0,0 @@ -#提交就可以直接用的配置模板文件 -#a template config can be use with a apply -bind_host: 0.0.0.0 -bind_port: 3000 -users: -- name: root - password: $2y$10$FfeQavihMUiXCuJhHuQwy.6EOXDvkXb/S50qI5fXizqarNT/ShhQm -language: "" -rlimit_nofile: 0 -dns: - bind_host: 0.0.0.0 - port: 5553 - statistics_interval: 1 - protection_enabled: true - filtering_enabled: true - filters_update_interval: 24 - blocking_mode: nxdomain - blocked_response_ttl: 10 - querylog_enabled: false - querylog_interval: 1 - ratelimit: 0 - ratelimit_whitelist: [] - refuse_any: false - bootstrap_dns: -#bootstrap_dns - all_servers: false - allowed_clients: [] - disallowed_clients: [] - blocked_hosts: [] - parental_block_host: "" - safebrowsing_block_host: "" - blocked_services: [] - cache_size: 4194304 - parental_sensitivity: 13 - parental_enabled: false - safesearch_enabled: false - safebrowsing_enabled: false - safebrowsing_cache_size: 1048576 - safesearch_cache_size: 1048576 - parental_cache_size: 1048576 - cache_time: 30 - rewrites: [] - upstream_dns: -#upstream_dns -tls: - enabled: false - server_name: "" - force_https: false - port_https: 443 - port_dns_over_tls: 853 - certificate_chain: "" - private_key: "" - certificate_path: "" - private_key_path: "" -filters: -- enabled: true - url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt - name: AdGuard Simplified Domain Names filter - id: 1 -- enabled: true - url: https://adaway.org/hosts.txt - name: AdAway - id: 2 -- enabled: false - url: https://hosts-file.net/ad_servers.txt - name: hpHosts - Ad and Tracking servers only - id: 3 -- enabled: true - url: https://www.malwaredomainlist.com/hostslist/hosts.txt - name: MalwareDomainList.com Hosts List - id: 4 -- enabled: false - url: https://raw.githubusercontent.com/vokins/yhosts/master/data/tvbox.txt - name: tvbox - id: 1575018007 -- enabled: true - url: https://hosts.nfz.moe/full/hosts - name: neoHosts full - id: 1575618240 -- enabled: false - url: https://hosts.nfz.moe/basic/hosts - name: neoHosts basic - id: 1575618241 -- enabled: false - url: http://sbc.io/hosts/hosts - name: StevenBlack host basic - id: 1575618242 -- enabled: false - url: http://sbc.io/hosts/alternates/fakenews-gambling-porn-social/hosts - name: StevenBlack host+fakenews + gambling + porn + social - id: 1575618243 -- enabled: false - url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD/anti-ad-easylist.txt - name: anti-AD(Adblock+neohosts+yhosts+cjxlist+adhlist) - id: 1577113202 -user_rules: [] -dhcp: - enabled: false - interface_name: "" - gateway_ip: "" - subnet_mask: "" - range_start: "" - range_end: "" - lease_duration: 86400 - icmp_timeout_msec: 1000 -clients: [] -log_file: "" -verbose: false -schema_version: 5 \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh deleted file mode 100755 index 6c6b7b7691..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/addhost.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -checkmd5(){ -local nowmd5=$(md5sum /etc/hosts) -nowmd5=${nowmd5%% *} -local lastmd5=$(uci get AdGuardHome.AdGuardHome.hostsmd5 2>/dev/null) -if [ "$nowmd5" != "$lastmd5" ]; then - uci set AdGuardHome.AdGuardHome.hostsmd5="$nowmd5" - uci commit AdGuardHome - [ "$1" == "noreload" ] || /etc/init.d/AdGuardHome reload -fi -} - -[ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' /etc/hosts && checkmd5 "$2" && exit 0 -/usr/bin/awk 'BEGIN{ -while ((getline < "/tmp/dhcp.leases") > 0) -{ - a[$2]=$4; -} -while (("ip -6 neighbor show | grep -v fe80" | getline) > 0) -{ - if (a[$5]) {print $1" "a[$5] >"/tmp/tmphost"; } -} -print "#programaddend" >"/tmp/tmphost"; -}' -grep programaddstart /etc/hosts >/dev/null 2>&1 -if [ "$?" == "0" ]; then - sed -i '/programaddstart/,/programaddend/c\#programaddstart' /etc/hosts - sed -i '/programaddstart/'r/tmp/tmphost /etc/hosts -else - echo "#programaddstart" >>/etc/hosts - cat /tmp/tmphost >> /etc/hosts -fi -rm /tmp/tmphost -checkmd5 "$2" diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start deleted file mode 100755 index 562117e52e..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/firewall.start +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -AdGuardHome_enable=$(uci get AdGuardHome.AdGuardHome.enabled) -redirect=$(uci get AdGuardHome.AdGuardHome.redirect) - -if [ $AdGuardHome_enable -eq 1 -a "$redirect" == "redirect" ]; then - /etc/init.d/AdGuardHome do_redirect 1 -fi diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh deleted file mode 100755 index 908bdf6318..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/getsyslog.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -logread -e AdGuardHome > /tmp/AdGuardHometmp.log -logread -e AdGuardHome -f >> /tmp/AdGuardHometmp.log & -pid=$! -echo "1">/var/run/AdGuardHomesyslog -while true -do - sleep 12 - watchdog=$(cat /var/run/AdGuardHomesyslog) - if [ "$watchdog"x == "0"x ]; then - kill $pid - rm /tmp/AdGuardHometmp.log - rm /var/run/AdGuardHomesyslog - exit 0 - else - echo "0">/var/run/AdGuardHomesyslog - fi -done diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh deleted file mode 100755 index a3add84e8b..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/gfw2adg.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh - -PATH="/usr/sbin:/usr/bin:/sbin:/bin" - -checkmd5(){ -local nowmd5=$(md5sum /tmp/adguard.list 2>/dev/null) -nowmd5=${nowmd5%% *} -local lastmd5=$(uci get AdGuardHome.AdGuardHome.gfwlistmd5 2>/dev/null) -if [ "$nowmd5" != "$lastmd5" ]; then - uci set AdGuardHome.AdGuardHome.gfwlistmd5="$nowmd5" - uci commit AdGuardHome - [ "$1" == "noreload" ] || /etc/init.d/AdGuardHome reload -fi -} - -configpath=$(uci get AdGuardHome.AdGuardHome.configpath 2>/dev/null) -[ "$1" == "del" ] && sed -i '/programaddstart/,/programaddend/d' $configpath && checkmd5 "$2" && exit 0 -gfwupstream=$(uci get AdGuardHome.AdGuardHome.gfwupstream 2>/dev/null) -if [ -z $gfwupstream ]; then -gfwupstream="tcp://208.67.220.220:5353" -fi -if [ ! -f "$configpath" ]; then - echo "please make a config first" - exit 1 -fi -wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O- | base64 -d > /tmp/gfwlist.txt -cat /tmp/gfwlist.txt | awk -v upst="$gfwupstream" 'BEGIN{getline;}{ -s1=substr($0,1,1); -if (s1=="!") -{next;} -if (s1=="@"){ - $0=substr($0,3); - s1=substr($0,1,1); - white=1;} -else{ - white=0; -} - -if (s1=="|") - {s2=substr($0,2,1); - if (s2=="|") - { - $0=substr($0,3); - split($0,d,"/"); - $0=d[1]; - }else{ - split($0,d,"/"); - $0=d[3]; - }} -else{ - split($0,d,"/"); - $0=d[1]; -} -star=index($0,"*"); -if (star!=0) -{ - $0=substr($0,star+1); - dot=index($0,"."); - if (dot!=0) - $0=substr($0,dot+1); - else - next; - s1=substr($0,1,1); -} -if (s1==".") -{fin=substr($0,2);} -else{fin=$0;} -if (index(fin,".")==0) next; -if (index(fin,"%")!=0) next; -if (index(fin,":")!=0) next; -match(fin,"^[0-9\.]+") -if (RSTART==1 && RLENGTH==length(fin)) {print "ipset add gfwlist "fin>"/tmp/doipset.sh";next;} -if (fin=="" || finl==fin) next; -finl=fin; -if (white==0) - {print(" - '\''[/"fin"/]"upst"'\''");} -else{ - print(" - '\''[/"fin"/]#'\''");} -}END{print(" - '\''[/programaddend/]#'\''")}' > /tmp/adguard.list -grep programaddstart $configpath -if [ "$?" == "0" ]; then - sed -i '/programaddstart/,/programaddend/c\ - '\''\[\/programaddstart\/\]#'\''' $configpath - sed -i '/programaddstart/'r/tmp/adguard.list $configpath -else - sed -i '1i\ - '\''[/programaddstart/]#'\''' /tmp/adguard.list - sed -i '/upstream_dns:/'r/tmp/adguard.list $configpath -fi -checkmd5 "$2" -rm -f /tmp/gfwlist.txt /tmp/adguard.list diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt deleted file mode 100644 index 1059be5512..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/links.txt +++ /dev/null @@ -1,3 +0,0 @@ -https://github.com/AdguardTeam/AdGuardHome/releases/download/${latest_ver}/AdGuardHome_linux_${Arch}.tar.gz -https://static.adguard.com/adguardhome/release/AdGuardHome_linux_${Arch}.tar.gz -#https://static.adguard.com/adguardhome/beta/AdGuardHome_linux_${Arch}.tar.gz \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh deleted file mode 100755 index 9ccc21903a..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/tailto.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -tail -n $1 "$2" > /var/run/tailtmp -cat /var/run/tailtmp > "$2" -rm /var/run/tailtmp diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh deleted file mode 100755 index 74ba7268d5..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/update_core.sh +++ /dev/null @@ -1,236 +0,0 @@ -#!/bin/bash - -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -binpath=$(uci get AdGuardHome.AdGuardHome.binpath) -if [ -z "$binpath" ]; then -uci set AdGuardHome.AdGuardHome.binpath="/tmp/AdGuardHome/AdGuardHome" -binpath="/tmp/AdGuardHome/AdGuardHome" -fi -mkdir -p ${binpath%/*} -upxflag=$(uci get AdGuardHome.AdGuardHome.upxflag 2>/dev/null) - -check_if_already_running(){ - running_tasks="$(ps |grep "AdGuardHome" |grep "update_core" |grep -v "grep" |awk '{print $1}' |wc -l)" - [ "${running_tasks}" -gt "2" ] && echo -e "\nA task is already running." && EXIT 2 -} - -check_wgetcurl(){ - which curl && downloader="curl -L -k --retry 2 --connect-timeout 20 -o" && return - which wget-ssl && downloader="wget-ssl --no-check-certificate -t 2 -T 20 -O" && return - [ -z "$1" ] && opkg update || (echo error opkg && EXIT 1) - [ -z "$1" ] && (opkg remove wget wget-nossl --force-depends ; opkg install wget ; check_wgetcurl 1 ;return) - [ "$1" == "1" ] && (opkg install curl ; check_wgetcurl 2 ; return) - echo error curl and wget && EXIT 1 -} - -check_latest_version(){ - check_wgetcurl - latest_ver="$($downloader - https://api.github.com/repos/AdguardTeam/AdGuardHome/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E 'v[0-9.]+' -o 2>/dev/null)" - if [ -z "${latest_ver}" ]; then - echo -e "\nFailed to check latest version, please try again later." && EXIT 1 - fi - now_ver="$($binpath -c /dev/null --check-config 2>&1| grep -m 1 -E 'v[0-9.]+' -o)" - if [ "${latest_ver}"x != "${now_ver}"x ] || [ "$1" == "force" ]; then - echo -e "Local version: ${now_ver}., cloud version: ${latest_ver}." - doupdate_core - else - echo -e "\nLocal version: ${now_ver}, cloud version: ${latest_ver}." - echo -e "You're already using the latest version." - if [ ! -z "$upxflag" ]; then - filesize=$(ls -l $binpath | awk '{ print $5 }') - if [ $filesize -gt 8000000 ]; then - echo -e "start upx may take a long time" - doupx - mkdir -p "/tmp/AdGuardHomeupdate/AdGuardHome" >/dev/null 2>&1 - rm -fr /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} - /tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $binpath -o /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} - rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux - /etc/init.d/AdGuardHome stop nobackup - rm $binpath - mv -f /tmp/AdGuardHomeupdate/AdGuardHome/${binpath##*/} $binpath - /etc/init.d/AdGuardHome start - echo -e "finished" - fi - fi - EXIT 0 - fi -} - -doupx(){ - Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')" - case $Archt in - "i386") - Arch="i386" - ;; - "i686") - Arch="i386" - echo -e "i686 use $Arch may have bug" - ;; - "x86") - Arch="amd64" - ;; - "mipsel") - Arch="mipsel" - ;; - "mips64el") - Arch="mips64el" - Arch="mipsel" - echo -e "mips64el use $Arch may have bug" - ;; - "mips") - Arch="mips" - ;; - "mips64") - Arch="mips64" - Arch="mips" - echo -e "mips64 use $Arch may have bug" - ;; - "arm") - Arch="arm" - ;; - "armeb") - Arch="armeb" - ;; - "aarch64") - Arch="arm64" - ;; - "powerpc") - Arch="powerpc" - ;; - "powerpc64") - Arch="powerpc64" - ;; - *) - echo -e "error not support $Archt if you can use offical release please issue a bug" - EXIT 1 - ;; - esac - upx_latest_ver="$($downloader - https://api.github.com/repos/upx/upx/releases/latest 2>/dev/null|grep -E 'tag_name' |grep -E '[0-9.]+' -o 2>/dev/null)" - $downloader /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz "https://github.com/upx/upx/releases/download/v${upx_latest_ver}/upx-${upx_latest_ver}-${Arch}_linux.tar.xz" 2>&1 - #tar xvJf - which xz || (opkg list | grep ^xz || opkg update && opkg install xz) || (echo "xz download fail" && EXIT 1) - mkdir -p /tmp/upx-${upx_latest_ver}-${Arch}_linux - xz -d -c /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz| tar -x -C "/tmp" >/dev/null 2>&1 - if [ ! -e "/tmp/upx-${upx_latest_ver}-${Arch}_linux/upx" ]; then - echo -e "Failed to download upx." - EXIT 1 - fi - rm /tmp/upx-${upx_latest_ver}-${Arch}_linux.tar.xz -} - -doupdate_core(){ - echo -e "Updating core..." - mkdir -p "/tmp/AdGuardHomeupdate" - rm -rf /tmp/AdGuardHomeupdate/* >/dev/null 2>&1 - Archt="$(opkg info kernel | grep Architecture | awk -F "[ _]" '{print($2)}')" - case $Archt in - "i386") - Arch="386" - ;; - "i686") - Arch="386" - ;; - "x86") - Arch="amd64" - ;; - "mipsel") - Arch="mipsle" - ;; - "mips64el") - Arch="mips64le" - Arch="mipsle" - echo -e "mips64el use $Arch may have bug" - ;; - "mips") - Arch="mips" - ;; - "mips64") - Arch="mips64" - Arch="mips" - echo -e "mips64 use $Arch may have bug" - ;; - "arm") - Arch="arm" - ;; - "aarch64") - Arch="arm64" - ;; - "powerpc") - Arch="ppc" - echo -e "error not support $Archt" - EXIT 1 - ;; - "powerpc64") - Arch="ppc64" - echo -e "error not support $Archt" - EXIT 1 - ;; - *) - echo -e "error not support $Archt if you can use offical release please issue a bug" - EXIT 1 - ;; - esac - echo -e "start download" - grep -v "^#" /usr/share/AdGuardHome/links.txt >/tmp/run/AdHlinks.txt - while read link - do - eval link="$link" - $downloader /tmp/AdGuardHomeupdate/${link##*/} "$link" 2>&1 - if [ "$?" != "0" ]; then - echo "download failed try another download" - rm -f /tmp/AdGuardHomeupdate/${link##*/} - else - local success="1" - break - fi - done < "/tmp/run/AdHlinks.txt" - rm /tmp/run/AdHlinks.txt - [ -z "$success" ] && echo "no download success" && EXIT 1 - if [ "${link##*.}" == "gz" ]; then - tar -zxf "/tmp/AdGuardHomeupdate/${link##*/}" -C "/tmp/AdGuardHomeupdate/" - if [ ! -e "/tmp/AdGuardHomeupdate/AdGuardHome" ]; then - echo -e "Failed to download core." - rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1 - EXIT 1 - fi - downloadbin="/tmp/AdGuardHomeupdate/AdGuardHome/AdGuardHome" - else - downloadbin="/tmp/AdGuardHomeupdate/${link##*/}" - fi - chmod 755 $downloadbin - echo -e "download success start copy" - if [ -n "$upxflag" ]; then - echo -e "start upx may take a long time" - doupx - /tmp/upx-${upx_latest_ver}-${Arch}_linux/upx $upxflag $downloadbin - rm -rf /tmp/upx-${upx_latest_ver}-${Arch}_linux - fi - echo -e "start copy" - /etc/init.d/AdGuardHome stop nobackup - rm "$binpath" - mv -f "$downloadbin" "$binpath" - if [ "$?" == "1" ]; then - echo "mv failed maybe not enough space please use upx or change bin to /tmp/AdGuardHome" - EXIT 1 - fi - /etc/init.d/AdGuardHome start - rm -rf "/tmp/AdGuardHomeupdate" >/dev/null 2>&1 - echo -e "Succeeded in updating core." - echo -e "Local version: ${latest_ver}, cloud version: ${latest_ver}.\n" - EXIT 0 -} - -EXIT(){ - rm /var/run/update_core 2>/dev/null - [ "$1" != "0" ] && touch /var/run/update_core_error - exit $1 -} - -main(){ - check_if_already_running - check_latest_version $1 -} - trap "EXIT 1" SIGTERM SIGINT - touch /var/run/update_core - rm /var/run/update_core_error 2>/dev/null - main $1 diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh deleted file mode 100755 index c7745e101d..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/waitnet.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -count=0 -while : -do - ping -c 1 -W 1 -q www.baidu.com 1>/dev/null 2>&1 - if [ "$?" == "0" ]; then - /etc/init.d/AdGuardHome force_reload - break - fi - ping -c 1 -W 1 -q 202.108.22.5 1>/dev/null 2>&1 - if [ "$?" == "0" ]; then - /etc/init.d/AdGuardHome force_reload - break - fi - sleep 5 - ping -c 1 -W 1 -q www.google.com 1>/dev/null 2>&1 - if [ "$?" == "0" ]; then - /etc/init.d/AdGuardHome force_reload - break - fi - ping -c 1 -W 1 -q 8.8.8.8 1>/dev/null 2>&1 - if [ "$?" == "0" ]; then - /etc/init.d/AdGuardHome force_reload - break - fi - sleep 5 - count=$((count+1)) - if [ $count -gt 18 ]; then - /etc/init.d/AdGuardHome force_reload - break - fi -done -return 0 diff --git a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh b/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh deleted file mode 100755 index 61ba09de75..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/usr/share/AdGuardHome/watchconfig.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -configpath=$(uci get AdGuardHome.AdGuardHome.configpath) -while : -do - sleep 10 - if [ -f "$configpath" ]; then - /etc/init.d/AdGuardHome do_redirect 1 - break - fi -done -return 0 diff --git a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js b/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js deleted file mode 100644 index f93d42b7fe..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/addon/fold/foldcode.js +++ /dev/null @@ -1 +0,0 @@ -!function(n){"object"==typeof exports&&"object"==typeof module?n(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],n):n(CodeMirror)}(function(n){"use strict";function e(e,o,i,t){if(i&&i.call){var l=i;i=null}else l=r(e,i,"rangeFinder");"number"==typeof o&&(o=n.Pos(o,0));var f=r(e,i,"minFoldSize");function d(n){var r=l(e,o);if(!r||r.to.line-r.from.linee.firstLine();)o=n.Pos(o.line-1,0),u=d(!1);if(u&&!u.cleared&&"unfold"!==t){var a=function(n,e){var o=r(n,e,"widget");if("string"==typeof o){var i=document.createTextNode(o);(o=document.createElement("span")).appendChild(i),o.className="CodeMirror-foldmarker"}else o&&(o=o.cloneNode(!0));return o}(e,i);n.on(a,"mousedown",function(e){c.clear(),n.e_preventDefault(e)});var c=e.markText(u.from,u.to,{replacedWith:a,clearOnEnter:r(e,i,"clearOnEnter"),__isFold:!0});c.on("clear",function(o,r){n.signal(e,"unfold",e,o,r)}),n.signal(e,"fold",e,u.from,u.to)}}n.newFoldFunction=function(n,o){return function(r,i){e(r,i,{rangeFinder:n,widget:o})}},n.defineExtension("foldCode",function(n,o,r){e(this,n,o,r)}),n.defineExtension("isFolded",function(n){for(var e=this.findMarksAt(n),o=0;o=u){if(s&&f&&s.test(f.className))return;i=r(a.indicatorOpen)}}(i||f)&&t.setGutterMarker(n,a.gutter,i)})}function i(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}function f(t){var o=t.getViewport(),e=t.state.foldGutter;e&&(t.operation(function(){n(t,o.from,o.to)}),e.from=o.from,e.to=o.to)}function a(t,r,n){var i=t.state.foldGutter;if(i){var f=i.options;if(n==f.gutter){var a=e(t,r);a?a.clear():t.foldCode(o(r,0),f)}}}function d(t){var o=t.state.foldGutter;if(o){var e=o.options;o.from=o.to=0,clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){f(t)},e.foldOnChangeTimeSpan||600)}}function u(t){var o=t.state.foldGutter;if(o){var e=o.options;clearTimeout(o.changeUpdate),o.changeUpdate=setTimeout(function(){var e=t.getViewport();o.from==o.to||e.from-o.to>20||o.from-e.to>20?f(t):t.operation(function(){e.fromo.to&&(n(t,o.to,e.to),o.to=e.to)})},e.updateViewportTimeSpan||400)}}function l(t,o){var e=t.state.foldGutter;if(e){var r=o.line;r>=e.from&&ro))break;r=l}}return r?{from:e.Pos(i.line,t.getLine(i.line).length),to:e.Pos(r,t.getLine(r).length)}:void 0}})}); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css b/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css deleted file mode 100644 index 43ac1a9fab..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.css +++ /dev/null @@ -1 +0,0 @@ -.CodeMirror{font-family:monospace;height:500px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:0;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0} diff --git a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js b/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js deleted file mode 100644 index d01f072ee4..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/lib/codemirror.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\//.test(e),u=a&&/Qt\/\d+\.\d+/.test(e),c=!o&&/Chrome\//.test(e),h=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),g=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(e){}});var R=function(){this.id=null,this.f=null,this.time=0,this.handler=E(this.onTimeout,this)};function B(e,t){for(var r=0;r=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[""];function _(e){for(;Y.length<=e;)Y.push($(Y)+" ");return Y[e]}function $(e){return e[e.length-1]}function q(e,t){for(var r=[],n=0;n"€"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:tr?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}var se=null;function ae(e,t,r){var n;se=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:se=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:se=i)}return null!=n?n:se}var ue=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c="ltr"==u?"L":"R";if(0==a.length||"ltr"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function ge(e,t){var r=de(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i0}function be(e){e.prototype.on=function(e,t){fe(this,e,t)},e.prototype.off=function(e,t){pe(this,e,t)}}function we(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function xe(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ce(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){we(e),xe(e)}function Le(e){return e.target||e.srcElement}function ke(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Te,Me,Ne=function(){if(l&&s<9)return!1;var e=O("div");return"draggable"in e||"dragDrop"in e}();function Oe(e){if(null==Te){var t=O("span","​");N(e,O("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=Te?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ae(e){if(null!=Me)return Me;var t=N(e,document.createTextNode("AخA")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(Me=n.right-r.right<3)}var De,We=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},He=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Fe="oncopy"in(De=O("div"))||(De.setAttribute("oncopy","return;"),"function"==typeof De.oncopy),Pe=null;var Ee={},Ie={};function ze(e){if("string"==typeof e&&Ie.hasOwnProperty(e))e=Ie[e];else if(e&&"string"==typeof e.name&&Ie.hasOwnProperty(e.name)){var t=Ie[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return ze("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return ze("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Re(e,t){t=ze(t);var r=Ee[t.name];if(!r)return Re(e,"text/plain");var n=r(e,t);if(Be.hasOwnProperty(t.name)){var i=Be[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Be={};function Ge(e,t){I(t,Be.hasOwnProperty(e)?Be[e]:Be[e]={})}function Ue(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Ve(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ke(e,t,r){return!e.startState||e.startState(t,r)}var je=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};function Xe(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t=e.first&&tr?et(r,Xe(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?et(e.line,t):r<0?et(e.line,0):e}(t,Xe(e,t.line).text.length)}function at(e,t){for(var r=[],n=0;n=this.string.length},je.prototype.sol=function(){return this.pos==this.lineStart},je.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},je.prototype.next=function(){if(this.post},je.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},je.prototype.skipToEnd=function(){this.pos=this.string.length},je.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},je.prototype.backUp=function(e){this.pos-=e},je.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},je.prototype.current=function(){return this.string.slice(this.start,this.pos)},je.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},je.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},je.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ut=function(e,t){this.state=e,this.lookAhead=t},ct=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function ht(e,t,r,n){var i=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,wt(e,t.text,s.mode,r,function(e,t){for(var r=a;ue&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;re.options.maxHighlightLength&&Ue(e.doc.mode,n.state),o=ht(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function dt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new ct(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=Xe(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof ut?u.lookAhead:0)<=o.modeFrontier))return s;var c=z(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&Xe(n,o-1).stateAfter,s=l?ct.fromSaved(n,l,o):new ct(n,Ke(n.mode),o);return n.iter(o,t,function(r){pt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&nt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ct.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ct.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ct.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ct.fromSaved=function(e,t,r){return t instanceof ut?new ct(e,Ue(e.mode,t.state),r,t.lookAhead):new ct(e,Ue(e.mode,t),r)},ct.prototype.save=function(e){var t=!1!==e?Ue(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ut(t,this.maxLookAhead):t};var mt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function yt(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=Xe(l,(t=st(l,t)).line),u=dt(e,t.line,r),c=new je(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pose.options.maxHighlightLength?(s=!1,l&&pt(e,t,n,h.pos),h.pos=t.length,a=null):a=bt(vt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u=t:o.to>t);(n||(n=[])).push(new St(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from0&&s)for(var b=0;bt)&&(!r||Wt(r,o.marker)<0)&&(r=o.marker)}return r}function It(e,t,r,n,i){var o=Xe(e,t),l=Ct&&o.markedSpans;if(l)for(var s=0;s=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.to,r)>=0:tt(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.from,n)<=0:tt(u.from,n)<0)))return!0}}}function zt(e){for(var t;t=Ft(e);)e=t.find(-1,!0).line;return e}function Rt(e,t){var r=Xe(e,t),n=zt(r);return r==n?t:qe(n)}function Bt(e,t){if(t>e.lastLine())return t;var r,n=Xe(e,t);if(!Gt(e,n))return t;for(;r=Pt(n);)n=r.find(1,!0).line;return qe(n)+1}function Gt(e,t){var r=Ct&&t.markedSpans;if(r)for(var n=void 0,i=0;it.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var Xt=function(e,t,r){this.text=e,Ot(this,t),this.height=r?r(this):1};function Yt(e){e.parent=null,Nt(e)}Xt.prototype.lineNo=function(){return qe(this)},be(Xt);var _t={},$t={};function qt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?$t:_t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Zt(e,t){var r=A("span",null,null,a?"padding-right: .1px":null),n={pre:A("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;n.pos=0,n.addToken=Jt,Ae(e.display.measure)&&(l=ce(o,e.doc.direction))&&(n.addToken=er(n.addToken,l)),n.map=[],rr(o,n,ft(e,o,t!=e.display.externalMeasured&&qe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Oe(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return ge(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Qt(e){var t=O("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;iu&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function tr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=s="",f=null,h=null,m=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&((f||(f={})).title=C.title),C.attributes)for(var S in C.attributes)(f||(f={}))[S]=C.attributes[S];C.collapsed&&(!h||Wt(h.marker,C)<0)&&(h=x)}else x.from>p&&m>x.from&&(m=x.from)}if(b)for(var L=0;L=d)break;for(var T=Math.min(d,m);;){if(v){var M=p+v.length;if(!h){var N=M>T?v.slice(0,T-p):v;t.addToken(t,N,l?l+a:a,c,p+N.length==m?u:"",s,f)}if(M>=T){v=v.slice(T-p),p=T;break}p=M,c=""}v=i.slice(o,o=r[g++]),l=qt(r[g++],t.cm.options)}}else for(var O=1;Or)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Or(e,t,r,n){return Wr(e,Dr(e,t),r,n)}function Ar(e,t){if(t>=e.display.viewFrom&&t=r.lineN&&t2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Pr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n="right"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+tn(e.display),top:p.top,bottom:p.bottom}:Fr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=a-s)-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u=0&&(r=e[i]).left==r.right;i--);return r}function Ir(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=n.text.length?(a=n.text.length,u="before"):a<=0&&(a=0,u="after"),!s)return l("before"==u?a-1:a,"before"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=ae(s,a,u),f=se,d=c(a,h,"before"==u);return null!=f&&(d.other=c(a,f,"before"!=u)),d}function Yr(e,t){var r=0;t=st(e.doc,t),e.options.lineWrapping||(r=tn(e.display)*t.ch);var n=Xe(e.doc,t.line),i=Vt(n)+Cr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function _r(e,t,r,n,i){var o=et(e,t,r);return o.xRel=i,n&&(o.outside=n),o}function $r(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return _r(n.first,0,null,-1,-1);var i=Ze(n,r),o=n.first+n.size-1;if(i>o)return _r(n.first+n.size-1,Xe(n,o).text.length,null,1,1);t<0&&(t=0);for(var l=Xe(n,i);;){var s=Jr(e,l,i,t,r),a=Et(l,s.ch+(s.xRel>0||s.outside>0?1:0));if(!a)return s;var u=a.find(1);if(u.line==i)return u;l=Xe(n,i=u.line)}}function qr(e,t,r,n){n-=Ur(t);var i=t.text.length,o=le(function(t){return Wr(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Wr(e,r,t).top>n},o,i)}}function Zr(e,t,r,n){return r||(r=Dr(e,t)),qr(e,t,r,Vr(e,t,Wr(e,r,n),"line").top)}function Qr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Jr(e,t,r,n,i){i-=Vt(t);var o=Dr(e,t),l=Ur(t),s=0,a=t.text.length,u=!0,c=ce(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=qr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f=u||d.to<=a)){var p=1!=d.level,g=Wr(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=gv)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.fromu&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return Qr(Xr(e,et(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Xr(e,et(r,u?a.from:a.to,u?"after":"before"),"line",t,n);Qr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Wr(e,o,t);return r.top+=l,r.bottom+=l,!!Qr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left=w.bottom?1:0}return _r(r,v=oe(t.text,v,1),d,m,n-f)}function en(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Hr){Hr=O("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Hr.appendChild(document.createTextNode("x")),Hr.appendChild(O("br"));Hr.appendChild(document.createTextNode("x"))}N(e.measure,Hr);var r=Hr.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function tn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O("span","xxxxxxxxxx"),r=O("pre",[t],"CodeMirror-line-like");N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function rn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;r[s]=o.offsetLeft+o.clientLeft+i,n[s]=o.clientWidth}return{fixedPos:nn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function nn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function on(e){var t=en(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/tn(e.display)-3);return function(i){if(Gt(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;nt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Ct&&Rt(e.doc,t)i.viewFrom?hn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)hn(e);else if(t<=i.viewFrom){var o=fn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):hn(e)}else if(r>=i.viewTo){var l=fn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):hn(e)}else{var s=fn(e,t,t,-1),a=fn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(ir(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):hn(e)}var u=i.externalMeasured;u&&(r=i.lineN&&t=n.viewTo)){var o=n.view[an(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function hn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function fn(e,t,r,n){var i,o=an(e,t),l=e.display.view;if(!Ct||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Rt(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function dn(e){for(var t=e.display.view,r=0,n=0;n=e.display.viewTo||s.to().linet||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(g,r||0,null==n?f:n,function(e,t,i,h){var v="ltr"==i,m=d(e,v?"left":"right"),y=d(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,"before"),N=u?s:p(t,i,"after"),O=u&&w&&C?a:y.right):(T=u?p(e,i,"before"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,"after"):a),c(T,m.top,M-T,m.bottom),m.bottom0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function wn(e){e.state.focused||(e.display.input.focus(),Cn(e))}function xn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Sn(e))},100)}function Cn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ge(e,"focus",e,t),e.state.focused=!0,H(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),bn(e))}function Sn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ge(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Ln(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n.005||f<-.005)&&($e(i.line,a),kn(i.line),i.rest))for(var d=0;de.display.sizerWidth){var p=Math.ceil(u/tn(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function kn(e){if(e.widgets)for(var t=0;t=l&&(o=Ze(t,Vt(Xe(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Mn(e,t){var r=e.display,n=en(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Mr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Sr(r),a=t.tops-n;if(t.topi+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Tr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?l.scrollLeft=0:t.leftf+h-3&&(l.scrollLeft=t.right+(d?0:10)-f),l}function Nn(e,t){null!=t&&(Dn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function On(e){Dn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function An(e,t,r){null==t&&null==r||Dn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function Dn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Wn(e,Yr(e,t.from),Yr(e,t.to),t.margin))}function Wn(e,t,r,n){var i=Mn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});An(e,i.scrollLeft,i.scrollTop)}function Hn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||oi(e,{top:t}),Fn(e,t,!0),r&&oi(e),ei(e,100))}function Fn(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Pn(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,ai(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function En(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Sr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+kr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var In=function(e,t,r){this.cm=r;var n=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),fe(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),fe(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};In.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},In.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},In.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},In.prototype.zeroWidthHack=function(){var e=y&&!d?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new R,this.disableVert=new R},In.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents="auto",t.set(1e3,function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)})},In.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var zn=function(){};function Rn(e,t){t||(t=En(e));var r=e.display.barWidth,n=e.display.barHeight;Bn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Ln(e),Bn(e,En(e)),r=e.display.barWidth,n=e.display.barHeight}function Bn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}zn.prototype.update=function(){return{bottom:0,right:0}},zn.prototype.setScrollLeft=function(){},zn.prototype.setScrollTop=function(){},zn.prototype.clear=function(){};var Gn={native:In,null:zn};function Un(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Gn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),fe(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Pn(e,t):Hn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var Vn=0;function Kn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vn},t=e.curOp,or?or.ops.push(t):t.ownsGroup=or={ops:[t],delayedCallbacks:[]}}function jn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ri(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Yn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Ln(t),e.barMeasure=En(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Or(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+kr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Tr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function _n(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-Cr(e.display))+"px;\n height: "+(t.bottom-t.top+kr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=Xr(e,t),a=r&&r!=t?Xr(e,r):s,u=Mn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Hn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Pn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,st(n,e.scrollToPos.from),st(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l=e.display.viewTo)){var r=+new Date+e.options.workTime,n=dt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Ue(t.mode,n.state):null,a=ht(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&fr)return ei(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&qn(e,function(){for(var t=0;t=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==dn(e))return!1;ui(e)&&(hn(e),t.dims=rn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFroml&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),Ct&&(o=Rt(e.doc,o),l=Bt(e.doc,l));var s=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=ir(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=ir(e,t,n.viewFrom).concat(n.view):n.viewFromr&&(n.view=n.view.slice(0,an(e,r)))),n.viewTo=r}(e,o,l),r.viewOffset=Vt(Xe(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var u=dn(e);if(!s&&0==u&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var c=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return u>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h-1&&(d=!1),ur(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(Je(e.options,c)))),l=f.node.nextSibling}else{var p=vr(e,f,c,r);o.insertBefore(p,l)}c+=f.size}for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),u>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(c),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ei(e,400)),r.updateLineNumbers=null,!0}function ii(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Tr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Sr(e.display)-Mr(e),r.top)}),t.visible=Tn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ni(e,t);n=!1){Ln(e);var i=En(e);pn(e),Rn(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function oi(e,t){var r=new ri(e,t);if(ni(e,r)){Ln(e),ii(e,r);var n=En(e);pn(e),Rn(e,n),si(e,n),r.finish()}}function li(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+kr(e)+"px"}function ai(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=nn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;ls.clientWidth,c=s.scrollHeight>s.clientHeight;if(i&&u||o&&c){if(o&&y&&a)e:for(var f=t.target,d=l.view;f!=s;f=f.parentNode)for(var p=0;p=0&&tt(e,n.to())<=0)return r}return-1};var bi=function(e,t){this.anchor=e,this.head=t};function wi(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort(function(e,t){return tt(e.from(),t.from())}),r=B(t,i);for(var o=1;o0:a>=0){var u=ot(s.from(),l.from()),c=it(s.to(),l.to()),h=s.empty()?l.from()==l.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new bi(h?c:u,h?u:c))}}return new yi(t,r)}function xi(e,t){return new yi([new bi(e,t||e)],0)}function Ci(e){return e.text?et(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Si(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Ci(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Ci(t).ch-t.to.ch),et(r,n)}function Li(e,t){for(var r=[],n=0;n1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}sr(e,"change",e,t)}function Ai(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;ls-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Pi(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(i,i.lastOp==n)))l=$(o.changes),0==tt(t.from,t.to)&&0==tt(t.from,l.to)?l.to=Ci(t):o.changes.push(Fi(e,t));else{var a=$(i.done);for(a&&a.ranges||zi(e.sel,i.done),o={changes:[Fi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||ge(e,"historyAdded")}function Ii(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,$(i.done),t))?i.done[i.done.length-1]=t:zi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Pi(i.undone)}function zi(e,t){var r=$(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Ri(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function Bi(e){if(!e)return null;for(var t,r=0;r-1&&($(s)[h]=u[h],delete u[h])}}}return n}function Vi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=tt(t,i)<0;o!=tt(r,i)<0?(i=t,t=r):o!=tt(t,r)<0&&(t=r)}return new bi(i,t)}return new bi(r||t,t)}function Ki(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),$i(e,new yi([Vi(e.sel.primary(),t,r,i)],0),n)}function ji(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(ge(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var h=a.find(n<0?1:-1),f=void 0;if((n<0?c:u)&&(h=ro(e,h,-n,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(f=tt(h,r))&&(n<0?f<0:f>0))return eo(e,h,t,n,i)}var d=a.find(n<0?-1:1);return(n<0?u:c)&&(d=ro(e,d,n,d.line==t.line?o:null)),d?eo(e,d,t,n,i):null}}return t}function to(e,t,r,n,i){var o=n||1,l=eo(e,t,r,o,i)||!i&&eo(e,t,r,o,!0)||eo(e,t,r,-o,i)||!i&&eo(e,t,r,-o,!0);return l||(e.cantEdit=!0,et(e.first,0))}function ro(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1)):null:r>0&&t.ch==(n||Xe(e,t.line)).text.length?t.line0)){var c=[a,1],h=tt(u.from,s.from),f=tt(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)lo(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else lo(e,t)}}function lo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var r=Li(e,t);Ei(e,t,r,e.cm?e.cm.curOp.id:NaN),uo(e,t,r,Tt(e,t));var n=[];Ai(e,function(e,r){r||-1!=B(n,e.history)||(po(e.history,t),n.push(e.history)),uo(e,t,null,Tt(e,t))})}}function so(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s="undo"==t?o.done:o.undone,a="undo"==t?o.undone:o.done,u=0;u=0;--d){var p=f(d);if(p)return p.v}}}}function ao(e,t){if(0!=t&&(e.first+=t,e.sel=new yi(q(e.sel.ranges,function(e){return new bi(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){un(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;ne.lastLine())){if(t.from.lineo&&(t={from:t.from,to:et(o,Xe(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ye(e,t.from,t.to),r||(r=Li(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=qe(zt(Xe(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&me(e);Oi(n,t,r,on(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=Kt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontierr;n--){var i=Xe(e,n).stateAfter;if(i&&(!(i instanceof ut)||n+i.lookAhead1||!(this.children[0]instanceof vo))){var s=[];this.collapse(s),this.children=[new vo(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,s=l;s10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(It(e,t.line,t,r,o)||t.line!=r.line&&It(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Ct=!0}o.addToHistory&&Ei(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(e){u&&o.collapsed&&!u.options.lineWrapping&&zt(e)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&$e(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new St(o,a==t.line?t.ch:null,a==r.line?r.ch:null)),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){Gt(e,t)&&$e(t,0)}),o.clearOnEnter&&fe(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(xt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++wo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)un(u,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=r.line;c++)cn(u,c,"text");o.atomic&&Qi(u.doc),sr(u,"markerAdded",u,o)}return o}xo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Kn(e),ye(this,"clear")){var r=this.find();r&&sr(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&un(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Qi(e.doc)),e&&sr(e,"markerCleared",e,this,n,i),t&&jn(e),this.parent&&this.parent.clear()}},xo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;a--)oo(this,n[a]);s?_i(this,s):this.cm&&On(this.cm)}),undo:Jn(function(){so(this,"undo")}),redo:Jn(function(){so(this,"redo")}),undoSelection:Jn(function(){so(this,"undo",!0)}),redoSelection:Jn(function(){so(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=st(this,e),t=st(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;ne)return t=e,!0;e-=o,++r}),st(this,et(r,t))},indexFromPos:function(e){var t=(e=st(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),qi(t.doc,xi(r,r)),h)for(var f=0;f=0;t--)co(e.doc,"",n[t].from,n[t].to,"+delete");On(e)})}function _o(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function $o(e,t,r){var n=_o(e,t.ch,r);return null==n?null:new et(t.line,n,r<0?"after":"before")}function qo(e,t,r,n,i){if(e){var o=ce(r,t.doc.direction);if(o){var l,s=i<0?$(o):o[0],a=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Dr(t,r);l=i<0?r.text.length-1:0;var c=Wr(t,u,l).top;l=le(function(e){return Wr(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),"before"==a&&(l=_o(r,l,1))}else l=i<0?s.to:s.from;return new et(n,l,a)}}return new et(n,i<0?r.text.length:0,i<0?"before":"after")}Ro.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Ro.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Ro.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ro.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Ro.default=y?Ro.macDefault:Ro.pcDefault;var Zo={selectAll:no,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return Yo(e,function(t){if(t.empty()){var r=Xe(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Xe(e.doc,i.line-1).text;l&&(i=new et(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),et(i.line-1,l.length-1),i,"+transpose"))}r.push(new bi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return qn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n-1&&(tt((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=Zn(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,pe(i.wrapper.ownerDocument,"mouseup",u),pe(i.wrapper.ownerDocument,"mousemove",c),pe(i.scroller,"dragstart",h),pe(i.scroller,"drop",u),o||(we(t),n.addNew||Ki(e.doc,r,null,null,n.extend),a||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();fe(i.wrapper.ownerDocument,"mouseup",u),fe(i.wrapper.ownerDocument,"mousemove",c),fe(i.scroller,"dragstart",h),fe(i.scroller,"drop",u),xn(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){var i=e.display,o=e.doc;we(t);var l,s,a=o.sel,u=a.ranges;n.addNew&&!n.extend?(s=o.sel.contains(r),l=s>-1?u[s]:new bi(r,r)):(l=o.sel.primary(),s=o.sel.primIndex);if("rectangle"==n.unit)n.addNew||(l=new bi(r,r)),r=sn(e,t,!0,!0),s=-1;else{var c=dl(e,r,n.unit);l=n.extend?Vi(l,c.anchor,c.head,n.extend):c}n.addNew?-1==s?(s=u.length,$i(o,wi(e,u.concat([l]),s),{scroll:!1,origin:"*mouse"})):u.length>1&&u[s].empty()&&"char"==n.unit&&!n.extend?($i(o,wi(e,u.slice(0,s).concat(u.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),a=o.sel):Xi(o,s,l,K):(s=0,$i(o,new yi([l],0),K),a=o.sel);var h=r;function f(t){if(0!=tt(h,t))if(h=t,"rectangle"==n.unit){for(var i=[],u=e.options.tabSize,c=z(Xe(o,r.line).text,r.ch,u),f=z(Xe(o,t.line).text,t.ch,u),d=Math.min(c,f),p=Math.max(c,f),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=Xe(o,g).text,y=X(m,d,u);d==p?i.push(new bi(et(g,y),et(g,y))):m.length>y&&i.push(new bi(et(g,y),et(g,X(m,p,u))))}i.length||i.push(new bi(r,r)),$i(o,wi(e,a.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,w=l,x=dl(e,t,n.unit),C=w.anchor;tt(x.anchor,C)>0?(b=x.head,C=ot(w.from(),x.anchor)):(b=x.anchor,C=it(w.to(),x.head));var S=a.ranges.slice(0);S[s]=function(e,t){var r=t.anchor,n=t.head,i=Xe(e.doc,r.line);if(0==tt(r,n)&&r.sticky==n.sticky)return t;var o=ce(i);if(!o)return t;var l=ae(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ae(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new bi(new et(r.line,p,g),n)}(e,new bi(st(o,C),b)),$i(o,wi(e,S,s),K)}}var d=i.wrapper.getBoundingClientRect(),p=0;function g(t){e.state.selectingText=!1,p=1/0,t&&(we(t),i.input.focus()),pe(i.wrapper.ownerDocument,"mousemove",v),pe(i.wrapper.ownerDocument,"mouseup",m),o.history.lastSelOrigin=null}var v=Zn(e,function(t){0!==t.buttons&&ke(t)?function t(r){var l=++p;var s=sn(e,r,!0,"rectangle"==n.unit);if(!s)return;if(0!=tt(s,h)){e.curOp.focus=W(),f(s);var a=Tn(i,o);(s.line>=a.to||s.lined.bottom?20:0;u&&setTimeout(Zn(e,function(){p==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):g(t)}),m=Zn(e,g);e.state.selectingText=m,fe(i.wrapper.ownerDocument,"mousemove",v),fe(i.wrapper.ownerDocument,"mouseup",m)}(e,n,t,o)}(t,n,o,e):Le(e)==r.scroller&&we(e):2==i?(n&&Ki(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(S?t.display.input.onContextMenu(e):xn(t)))}}function dl(e,t,r){if("char"==r)return new bi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new bi(et(t.line,0),st(e.doc,et(t.line+1,0)));var n=r(e,t);return new bi(n.from,n.to)}function pl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&we(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!ye(e,r))return Ce(t);o-=s.top-l.viewOffset;for(var a=0;a=i)return ge(e,r,e,Ze(e.doc,o),e.display.gutterSpecs[a].className,t),Ce(t)}}function gl(e,t){return pl(e,t,"gutterClick",!0)}function vl(e,t){xr(e.display,t)||function(e,t){if(!ye(e,"gutterContextMenu"))return!1;return pl(e,t,"gutterContextMenu",!1)}(e,t)||ve(e,t,"contextmenu")||S||e.display.input.onContextMenu(t)}function ml(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Rr(e)}hl.prototype.compare=function(e,t,r){return this.time+400>e&&0==tt(t,this.pos)&&r==this.button};var yl={toString:function(){return"CodeMirror.Init"}},bl={},wl={};function xl(e,t,r){if(!t!=!(r&&r!=yl)){var n=e.display.dragFunctions,i=t?fe:pe;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Cl(e){e.options.lineWrapping?(H(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),jt(e)),ln(e),un(e),Rr(e),setTimeout(function(){return Rn(e)},100)}function Sl(e,t){var n=this;if(!(this instanceof Sl))return new Sl(e,t);this.options=t=t?I(t):{},I(bl,t,!1);var i=t.value;"string"==typeof i?i=new Mo(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var o=new Sl.inputStyles[t.inputStyle](this),u=this.display=new function(e,t,n,i){var o=this;this.input=n,o.scrollbarFiller=O("div",null,"CodeMirror-scrollbar-filler"),o.scrollbarFiller.setAttribute("cm-not-content","true"),o.gutterFiller=O("div",null,"CodeMirror-gutter-filler"),o.gutterFiller.setAttribute("cm-not-content","true"),o.lineDiv=A("div",null,"CodeMirror-code"),o.selectionDiv=O("div",null,null,"position: relative; z-index: 1"),o.cursorDiv=O("div",null,"CodeMirror-cursors"),o.measure=O("div",null,"CodeMirror-measure"),o.lineMeasure=O("div",null,"CodeMirror-measure"),o.lineSpace=A("div",[o.measure,o.lineMeasure,o.selectionDiv,o.cursorDiv,o.lineDiv],null,"position: relative; outline: none");var u=A("div",[o.lineSpace],"CodeMirror-lines");o.mover=O("div",[u],null,"position: relative"),o.sizer=O("div",[o.mover],"CodeMirror-sizer"),o.sizerWidth=null,o.heightForcer=O("div",null,null,"position: absolute; height: "+G+"px; width: 1px;"),o.gutters=O("div",null,"CodeMirror-gutters"),o.lineGutter=null,o.scroller=O("div",[o.sizer,o.heightForcer,o.gutters],"CodeMirror-scroll"),o.scroller.setAttribute("tabIndex","-1"),o.wrapper=O("div",[o.scrollbarFiller,o.gutterFiller,o.scroller],"CodeMirror"),l&&s<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),a||r&&m||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=ci(i.gutters,i.lineNumbers),hi(o),n.init(o)}(e,i,o,t);for(var c in u.wrapper.CodeMirror=this,ml(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Un(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new R,keySeq:null,specialChars:null},t.autofocus&&!m&&u.input.focus(),l&&s<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;fe(t.scroller,"mousedown",Zn(e,fl)),fe(t.scroller,"dblclick",l&&s<11?Zn(e,function(t){if(!ve(e,t)){var r=sn(e,t);if(r&&!gl(e,t)&&!xr(e.display,t)){we(t);var n=e.findWordAt(r);Ki(e.doc,n.anchor,n.head)}}}):function(t){return ve(e,t)||we(t)});fe(t.scroller,"contextmenu",function(t){return vl(e,t)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}fe(t.scroller,"touchstart",function(i){if(!ve(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!gl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),fe(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),fe(t.scroller,"touchend",function(r){var n=t.activeTouch;if(n&&!xr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,"page");l=!n.prev||o(n,n.prev)?new bi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new bi(et(s.line,0),st(e.doc,et(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),we(r)}i()}),fe(t.scroller,"touchcancel",i),fe(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Hn(e,t.scroller.scrollTop),Pn(e,t.scroller.scrollLeft,!0),ge(e,"scroll",e))}),fe(t.scroller,"mousewheel",function(t){return mi(e,t)}),fe(t.scroller,"DOMMouseScroll",function(t){return mi(e,t)}),fe(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){ve(e,t)||Se(t)},over:function(t){ve(e,t)||(!function(e,t){var r=sn(e,t);if(r){var n=document.createDocumentFragment();vn(e,r,n),e.display.dragCursor||(e.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),Se(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-No<100))Se(t);else if(!ve(e,t)&&!xr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var r=O("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:Zn(e,Oo),leave:function(t){ve(e,t)||Ao(e)}};var a=t.input.getField();fe(a,"keyup",function(t){return sl.call(e,t)}),fe(a,"keydown",Zn(e,ll)),fe(a,"keypress",Zn(e,al)),fe(a,"focus",function(t){return Cn(e,t)}),fe(a,"blur",function(t){return Sn(e,t)})}(this),Ho(),Kn(this),this.curOp.forceUpdate=!0,Di(this,i),t.autofocus&&!m||this.hasFocus()?setTimeout(E(Cn,this),20):Sn(this),wl)wl.hasOwnProperty(c)&&wl[c](n,t[c],yl);ui(this),t.finishInit&&t.finishInit(this);for(var d=0;d150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?z(Xe(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+="\t";if(fl,a=We(t),u=null;if(s&&n.ranges.length>1)if(Tl&&Tl.text.join("\n")==t){if(n.ranges.length%Tl.text.length==0){u=[];for(var c=0;c=0;f--){var d=n.ranges[f],p=d.from(),g=d.to();d.empty()&&(r&&r>0?p=et(p.line,p.ch-r):e.state.overwrite&&!s?g=et(g.line,Math.min(Xe(o,g.line).text.length,g.ch+$(a).length)):s&&Tl&&Tl.lineWise&&Tl.text.join("\n")==t&&(p=g=et(p.line,0)));var v={from:p,to:g,text:u?u[f%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")};oo(e.doc,v),sr(e,"inputRead",e,v)}t&&!s&&Al(e,t),On(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ol(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||qn(t,function(){return Nl(t,r,0,null,"paste")}),!0}function Al(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s-1){l=kl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Xe(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=kl(e,i.head.line,"smart"));l&&sr(e,"electricInput",e,i.head.line)}}}function Dl(e){for(var t=[],r=[],n=0;n=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ae(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from=l.from&&f>=c.begin)){var d=h?"before":"after";return new et(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new et(r.line,a(e,1),"before"):new et(r.line,e,"after")};e>=0&&e0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):$o(s,t,r))){if(n||(l=t.line+r)=e.first+e.size||(t=new et(l,t.ch,t.sticky),!(s=Xe(e,l))))return!1;t=qo(i,e.cm,s,t.line,r)}else t=o;return!0}if("char"==n)a();else if("column"==n)a(!0);else if("word"==n||"group"==n)for(var u=null,c="group"==n,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(r<0)||a(!f);f=!1){var d=s.text.charAt(t.ch)||"\n",p=te(d,h)?"w":c&&"\n"==d?"n":!c||/\s/.test(d)?null:"p";if(!c||f||p||(p="s"),u&&u!=p){r<0&&(r=1,a(),t.sticky="after");break}if(p&&(u=p),r>0&&!a(!f))break}var g=to(e,t,o,l,!0);return rt(o,g)&&(g.hitSide=!0),g}function Pl(e,t,r,n){var i,o,l=e.doc,s=t.left;if("page"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*en(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=$r(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var El=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new R,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Il(e,t){var r=Ar(e,t.line);if(!r||r.hidden)return null;var n=Xe(e.doc,t.line),i=Nr(r,n,t.line),o=ce(n,e.doc.direction),l="left";o&&(l=ae(o,t.ch)%2?"right":"left");var s=Pr(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function zl(e,t){return t&&(e.bad=!0),e}function Rl(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return zl(e.clipPos(et(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Il(t,i)||{node:a[0].measure.map[2],offset:0},c=o.linen.firstLine()&&(l=et(l.line-1,Xe(n.doc,l.line-1).length)),s.ch==Xe(n.doc,s.line).text.length&&s.linei.viewTo-1)return!1;l.line==i.viewFrom||0==(e=an(n,l.line))?(t=qe(i.view[0].line),r=i.view[0].node):(t=qe(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=an(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=qe(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o="",l=!1,s=e.doc.lineSeparator(),a=!1;function u(){l&&(o+=s,a&&(o+=s),l=a=!1)}function c(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void c(r);var o,f=t.getAttribute("cm-marker");if(f){var d=e.findMarks(et(n,0),et(i+1,0),(v=+f,function(e){return e.id==v}));return void(d.length&&(o=d[0].find(0))&&c(Ye(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var g=0;g1&&f.length>1;)if($(h)==$(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);dl.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var x=et(t,d),C=et(a,f.length?$(f).length-p:0);return h.length>1||h[0]||tt(x,C)?(co(n.doc,h,x,C,"+input"),!0):void 0},El.prototype.ensurePolled=function(){this.forceCompositionEnd()},El.prototype.reset=function(){this.forceCompositionEnd()},El.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},El.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},El.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||qn(this.cm,function(){return un(e.cm)})},El.prototype.setUneditable=function(e){e.contentEditable="false"},El.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Zn(this.cm,Nl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},El.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},El.prototype.onContextMenu=function(){},El.prototype.resetPosition=function(){},El.prototype.needsContentAttribute=!0;var Gl=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new R,this.hasSelection=!1,this.composing=null};Gl.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ve(n,e)){if(n.somethingSelected())Ml({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Dl(n);Ml({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(n.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),fe(i,"input",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),fe(i,"paste",function(e){ve(n,e)||Ol(e,n)||(n.state.pasteIncoming=+new Date,r.fastPoll())}),fe(i,"cut",o),fe(i,"copy",o),fe(e.scroller,"paste",function(t){if(!xr(e,t)&&!ve(n,t)){if(!i.dispatchEvent)return n.state.pasteIncoming=+new Date,void r.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}}),fe(e.lineSpace,"selectstart",function(t){xr(e,t)||we(t)}),fe(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),fe(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Gl.prototype.createField=function(e){this.wrapper=Hl(),this.textarea=this.wrapper.firstChild},Gl.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=gn(e);if(e.options.moveInputWithCursor){var i=Xr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Gl.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Gl.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",l&&s>=9&&(this.hasSelection=null))}},Gl.prototype.getField=function(){return this.textarea},Gl.prototype.supportsTouch=function(){return!1},Gl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(e){}},Gl.prototype.blur=function(){this.textarea.blur()},Gl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Gl.prototype.receivedFocus=function(){this.slowPoll()},Gl.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Gl.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Gl.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||He(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,u=Math.min(n.length,i.length);a1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Gl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Gl.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Gl.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=sn(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&Zn(r,$i)(r.doc,xi(o),V);var c,f=i.style.cssText,d=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(l?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",a&&(c=window.scrollY),n.input.focus(),a&&window.scrollTo(null,c),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=m,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){Se(e);var g=function(){pe(window,"mouseup",g),setTimeout(m,20)};fe(window,"mouseup",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending==m&&(t.contextMenuPending=!1,t.wrapper.style.cssText=d,i.style.cssText=f,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart)){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?Zn(r,no)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Gl.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Gl.prototype.setUneditable=function(){},Gl.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=yl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=yl,r("value","",function(e,t){return e.setValue(t)},!0),r("mode",null,function(e,t){e.doc.modeOption=t,Ti(e)},!0),r("indentUnit",2,Ti,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,function(e){Mi(e),Rr(e),un(e)},!0),r("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(et(n,o))}n++});for(var i=r.length-1;i>=0;i--)co(e.doc,t,r[i],et(r[i].line,r[i].ch+t.length))}}),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=yl&&e.refresh()}),r("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),r("electricChars",!0),r("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),r("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),r("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),r("rtlMoveVisually",!w),r("wholeLineUpdateBefore",!0),r("theme","default",function(e){ml(e),fi(e)},!0),r("keyMap","default",function(e,t,r){var n=Xo(t),i=r!=yl&&Xo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,Cl,!0),r("gutters",[],function(e,t){e.display.gutterSpecs=ci(t,e.options.lineNumbers),fi(e)},!0),r("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?nn(e.display)+"px":"0",e.refresh()},!0),r("coverGutterNextToScrollbar",!1,function(e){return Rn(e)},!0),r("scrollbarStyle","native",function(e){Un(e),Rn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r("lineNumbers",!1,function(e,t){e.display.gutterSpecs=ci(e.options.gutters,t),fi(e)},!0),r("firstLineNumber",1,fi,!0),r("lineNumberFormatter",function(e){return e},fi,!0),r("showCursorWhenSelecting",!1,pn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,function(e,t){"nocursor"==t&&(Sn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),r("dragDrop",!0,xl),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,pn,!0),r("singleCursorHeightPerLine",!0,pn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Mi,!0),r("addModeClass",!1,Mi,!0),r("pollInterval",100),r("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),r("historyEventDelay",1250),r("viewportMargin",10,function(e){return e.refresh()},!0),r("maxHighlightLength",1e4,Mi,!0),r("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),r("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),r("autofocus",null),r("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),r("phrases",null)}(Sl),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&Zn(this,t[e])(this,r,i),ge(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Xo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;rr&&(kl(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&On(this));else{var o=i.from(),l=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var a=s;a0&&Xi(this.doc,n,new bi(o,u[n].to()),V)}}}),getTokenAt:function(e,t){return yt(this,e,t)},getLineTokens:function(e,t){return yt(this,et(e),t,!0)},getTokenTypeAt:function(e){e=st(this.doc,e);var t,r=ft(this,Xe(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]o&&(e=o,i=!0),n=Xe(this.doc,e)}else n=e;return Vr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Vt(n):0)},defaultTextHeight:function(){return en(this.display)},defaultCharWidth:function(){return tn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Xr(this,st(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==n)u=e.top;else if("above"==n||"near"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=Mn(o,l)).scrollTop&&Hn(o,s.scrollTop),null!=s.scrollLeft&&Pn(o,s.scrollLeft))},triggerOnKeyDown:Qn(ll),triggerOnKeyPress:Qn(al),triggerOnKeyUp:sl,triggerOnMouseDown:Qn(fl),execCommand:function(e){if(Zo.hasOwnProperty(e))return Zo[e].call(null,this)},triggerElectric:Qn(function(e){Al(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=st(this.doc,e),l=0;l0&&l(t.charAt(r-1));)--r;for(;n.5)&&ln(this),ge(this,"refresh",this)}),swapDoc:Qn(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Di(this,e),Rr(this),this.display.input.reset(),An(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,sr(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},be(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Sl);var Ul="iter insert remove copy getEditor constructor".split(" ");for(var Vl in Mo.prototype)Mo.prototype.hasOwnProperty(Vl)&&B(Ul,Vl)<0&&(Sl.prototype[Vl]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mo.prototype[Vl]));return be(Mo),Sl.inputStyles={textarea:Gl,contenteditable:El},Sl.defineMode=function(e){Sl.defaults.mode||"null"==e||(Sl.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Ee[e]=t}.apply(this,arguments)},Sl.defineMIME=function(e,t){Ie[e]=t},Sl.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Sl.defineMIME("text/plain","null"),Sl.defineExtension=function(e,t){Sl.prototype[e]=t},Sl.defineDocExtension=function(e,t){Mo.prototype[e]=t},Sl.fromTextArea=function(e,t){if((t=t?I(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(fe(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(r){r.save=n,r.getTextArea=function(){return e},r.toTextArea=function(){r.toTextArea=isNaN,n(),e.parentNode.removeChild(r.getWrapperElement()),e.style.display="",e.form&&(pe(e.form,"submit",n),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Sl(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=pe,e.on=fe,e.wheelEventPixels=vi,e.Doc=Mo,e.splitLines=We,e.countColumn=z,e.findColumn=X,e.isWordChar=ee,e.Pass=U,e.signal=ge,e.Line=Xt,e.changeEnd=Ci,e.scrollbarModel=Gn,e.Pos=et,e.cmpPos=tt,e.modes=Ee,e.mimeModes=Ie,e.resolveMode=ze,e.getMode=Re,e.modeExtensions=Be,e.extendMode=Ge,e.copyState=Ue,e.startState=Ke,e.innerMode=Ve,e.commands=Zo,e.keyMap=Ro,e.keyName=jo,e.isModifierKey=Vo,e.lookupKey=Uo,e.normalizeKeyMap=Go,e.StringStream=je,e.SharedTextMarker=So,e.TextMarker=xo,e.LineWidget=yo,e.e_preventDefault=we,e.e_stopPropagation=xe,e.e_stop=Se,e.addClass=H,e.contains=D,e.rmClass=T,e.keyNames=Po}(Sl),Sl.version="5.49.2",Sl}); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js b/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js deleted file mode 100644 index 4a5e499bf6..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/mode/yaml/yaml.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("yaml",function(){var e=new RegExp("\\b(("+["true","false","on","off","yes","no"].join(")|(")+"))$","i");return{token:function(i,t){var r=i.peek(),n=t.escaped;if(t.escaped=!1,"#"==r&&(0==i.pos||/\s/.test(i.string.charAt(i.pos-1))))return i.skipToEnd(),"comment";if(i.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/))return"string";if(t.literal&&i.indentation()>t.keyCol)return i.skipToEnd(),"string";if(t.literal&&(t.literal=!1),i.sol()){if(t.keyCol=0,t.pair=!1,t.pairStart=!1,i.match(/---/))return"def";if(i.match(/\.\.\./))return"def";if(i.match(/\s*-\s+/))return"meta"}if(i.match(/^(\{|\}|\[|\])/))return"{"==r?t.inlinePairs++:"}"==r?t.inlinePairs--:"["==r?t.inlineList++:t.inlineList--,"meta";if(t.inlineList>0&&!n&&","==r)return i.next(),"meta";if(t.inlinePairs>0&&!n&&","==r)return t.keyCol=0,t.pair=!1,t.pairStart=!1,i.next(),"meta";if(t.pairStart){if(i.match(/^\s*(\||\>)\s*/))return t.literal=!0,"meta";if(i.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==t.inlinePairs&&i.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(t.inlinePairs>0&&i.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(i.match(e))return"keyword"}return!t.pair&&i.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(t.pair=!0,t.keyCol=i.indentation(),"atom"):t.pair&&i.match(/^:\s*/)?(t.pairStart=!0,"meta"):(t.pairStart=!1,t.escaped="\\"==r,i.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),e.defineMIME("text/x-yaml","yaml"),e.defineMIME("text/yaml","yaml")}); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css b/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css deleted file mode 100644 index 6c708c010c..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/codemirror/theme/dracula.css +++ /dev/null @@ -1 +0,0 @@ -.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36 !important;color:#f8f8f2 !important;border:0}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:rgba(255,255,255,0.10)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:rgba(255,255,255,0.10)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:white}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-keyword{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute{color:#50fa7b}.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-variable-3,.cm-s-dracula span.cm-type{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:rgba(255,255,255,0.1)}.cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:white !important} diff --git a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js b/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js deleted file mode 100644 index 6284357c60..0000000000 --- a/package/ctcgfw/luci-app-adguardhome/root/www/luci-static/resources/twin-bcrypt.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/* @license - * Twin-Bcrypt 2.2.0 - * https://github.com/fpirsch/twin-bcrypt - * Licence: BSD-3-Clause - */ -!function(r,n){"use strict";function e(r){return y[g]=t.apply(n,r),g++}function t(r){var e=[].slice.call(arguments,1);return function(){"function"==typeof r?r.apply(n,e):new Function(""+r)()}}function o(r){if(m)setTimeout(t(o,r),0);else{var n=y[r];if(n){m=!0;try{n()}finally{a(r),m=!1}}}}function a(r){delete y[r]}function i(){p=function(){var r=e(arguments);return process.nextTick(t(o,r)),r}}function u(){if(r.postMessage&&!r.importScripts){var n=!0,e=r.onmessage;return r.onmessage=function(){n=!1},r.postMessage("","*"),r.onmessage=e,n}}function f(){var n="setImmediate$"+Math.random()+"$",t=function(e){e.source===r&&"string"==typeof e.data&&0===e.data.indexOf(n)&&o(+e.data.slice(n.length))};r.addEventListener?r.addEventListener("message",t,!1):r.attachEvent("onmessage",t),p=function(){var t=e(arguments);return r.postMessage(n+t,"*"),t}}function c(){var r=new MessageChannel;r.port1.onmessage=function(r){var n=r.data;o(n)},p=function(){var n=e(arguments);return r.port2.postMessage(n),n}}function s(){var r=v.documentElement;p=function(){var n=e(arguments),t=v.createElement("script");return t.onreadystatechange=function(){o(n),t.onreadystatechange=null,r.removeChild(t),t=null},r.appendChild(t),n}}function l(){p=function(){var r=e(arguments);return setTimeout(t(o,r),0),r}}if(!r.setImmediate){var p,g=1,y={},m=!1,v=r.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(r);d=d&&d.setTimeout?d:r,"[object process]"==={}.toString.call(r.process)?i():u()?f():r.MessageChannel?c():v&&"onreadystatechange"in v.createElement("script")?s():l(),d.setImmediate=p,d.clearImmediate=a}}(new Function("return this")()),function(r){"object"==typeof exports?r(exports,require("crypto")):r(self.TwinBcrypt={},self.crypto||self.msCrypto)}(function(r,n){"use strict";function e(r){for(var n=unescape(encodeURIComponent(r)),e=n.length,t=new Array(e),o=0;e>o;o++)t[o]=n.charCodeAt(o);return t}function t(r){for(var n=r.length,e=new Array(n),t=0;n>t;t++)e[t]=r.charCodeAt(t);return e}function o(r,n){for(var e,t,o=0,a="";n>o;){if(e=255&r[o++],a+=B[e>>2],e=(3&e)<<4,o>=n){a+=B[e];break}if(t=255&r[o++],e|=t>>4,a+=B[e],e=(15&t)<<2,o>=n){a+=B[e];break}t=255&r[o++],e|=t>>6,a+=B[e],a+=B[63&t]}return a}function a(r){for(var n,e,t=new Array(16),o=0,a=0;;){if(n=D[r.charCodeAt(o++)-46],e=D[r.charCodeAt(o++)-46],t[a++]=255&(n<<2|e>>4),22===o)break;n=e<<4,e=D[r.charCodeAt(o++)-46],t[a++]=255&(n|e>>2),n=e<<6,e=D[r.charCodeAt(o++)-46],t[a++]=255&(n|e)}return t}function i(r){for(var n=r.length,e=new Array(72),t=0,o=0;72>o;)e[o++]=r[t++],t===n&&(t=0);return e}function u(r,n,e){for(var t=0,o=e>>2;tt;)r[n++]=e[t++]<<24|e[t++]<<16|e[t++]<<8|e[t++]}function c(r){function n(n){for(var e=r,t=G>>2,o=t|O,f=n>>2,c=e[f]^e[t],s=e[1|f];o>t;)s^=(e[c>>>24]+e[a|c>>>16&255]^e[i|c>>>8&255])+e[u|255&c]^e[++t],c^=(e[s>>>24]+e[a|s>>>16&255]^e[i|s>>>8&255])+e[u|255&s]^e[++t];e[f]=s^e[S>>2],e[1|f]=c}function e(n){var e;for(r[L>>2]=0,r[L+4>>2]=0,e=0;M>e;e++)r[G>>2|e]^=r[(n>>2)+e];var t,o,f,c,s,l=r;for(e=0;M>e;e+=2){for(t=G>>2,o=t|O,f=L>>2,c=l[f]^l[t],s=l[1|f];o>t;)s^=(l[c>>>24]+l[a|c>>>16&255]^l[i|c>>>8&255])+l[u|255&c]^l[++t],c^=(l[s>>>24]+l[a|s>>>16&255]^l[i|s>>>8&255])+l[u|255&s]^l[++t];l[f]=s^l[S>>2],l[1|f]=c,r[G>>2|e]=l[f],r[G>>2|e+1]=c}for(e=0;T>e;e+=2){for(t=G>>2,o=t|O,f=L>>2,c=l[f]^l[t],s=l[1|f];o>t;)s^=(l[c>>>24]+l[a|c>>>16&255]^l[i|c>>>8&255])+l[u|255&c]^l[++t],c^=(l[s>>>24]+l[a|s>>>16&255]^l[i|s>>>8&255])+l[u|255&s]^l[++t];l[f]=s^l[S>>2],l[1|f]=c,r[e]=l[f],r[1|e]=c}}function t(r,n,t){for(var o=0;t>=o&&!(r>n);o++)e(R),e(j),r++;return r}var o=k>>2,a=o+256|0,i=a+256|0,u=i+256|0;return{encrypt:n,expandLoop:t}}function s(stdlib, foreign, heap) {"use asm";var HEAP32=new stdlib.Uint32Array(heap);var BLOWFISH_NUM_ROUNDS=16;var S_offset=0x0000;var S1_offset=0x0400;var S2_offset=0x0800;var S3_offset=0x0C00;var P_offset=0x1000;var P_last_offset=0x1044;var crypt_ciphertext_offset=0x1048;var LR_offset=0x01060;var password_offset=0x1068;var salt_offset=0x10b0;var P_LEN=18;var S_LEN=1024;function encrypt(offset) {offset=offset|0;var i=0;var n=0;var L=0;var R=0;var imax=0;imax=P_offset|BLOWFISH_NUM_ROUNDS<<2;L=HEAP32[offset>>2]|0;R=HEAP32[offset+4>>2]|0;L=L^HEAP32[P_offset>>2];for (i=P_offset; (i|0)<(imax|0);) {i=(i+4)>>>0;R=R^(((HEAP32[(L>>>22)>>2]>>>0) +(HEAP32[(S1_offset|(L>>>14&0x3ff))>>2]>>>0) ^(HEAP32[(S2_offset|(L>>>6&0x3ff))>>2])) +(HEAP32[(S3_offset|(L<<2&0x3ff))>>2]>>>0))^HEAP32[i>>2];i=(i+4)>>>0;L=L^(((HEAP32[(R>>>22)>>2]>>>0) +(HEAP32[(S1_offset|(R>>>14&0x3ff))>>2]>>>0) ^(HEAP32[(S2_offset|(R>>>6&0x3ff))>>2])) +(HEAP32[(S3_offset|(R<<2&0x3ff))>>2]>>>0))^HEAP32[i>>2];}HEAP32[offset>>2]=R^HEAP32[P_last_offset>>2];HEAP32[(offset+4)>>2]=L;}function expandKey(offset) {offset=offset|0;var i=0;var off=0;off=P_offset|0;for (i=0; (i|0)<(P_LEN|0); i=(i+1)|0) {HEAP32[off>>2]=HEAP32[off>>2]^HEAP32[offset>>2];offset=(offset+4)|0;off=(off+4)|0;}HEAP32[LR_offset>>2]=0;HEAP32[LR_offset+4>>2]=0;off=P_offset;for (i=0; (i|0)<(P_LEN|0); i=(i+2)|0) {encrypt(LR_offset);HEAP32[off>>2]=HEAP32[LR_offset>>2];HEAP32[off+4>>2]=HEAP32[LR_offset+4>>2];off=(off+8)|0;}off=S_offset;for (i=0; (i|0)<(S_LEN|0); i=(i+2)|0) {encrypt(LR_offset);HEAP32[off>>2]=HEAP32[LR_offset>>2];HEAP32[off+4>>2]=HEAP32[LR_offset+4>>2];off=(off+8)|0;}}function expandLoop(i, counterEnd, maxIterations) {i=i|0;counterEnd=counterEnd|0;maxIterations=maxIterations|0;var j=0;for (j=0; (j|0) <= (maxIterations|0); j=(j+1)|0) {if ((i>>>0)>(counterEnd>>>0)) break;expandKey(password_offset);expandKey(salt_offset);i=(i+1)>>>0;}return i|0;}return {encrypt: encrypt,expandLoop: expandLoop};} -function l(r,n,e,t){var o,a,i,u=L>>2,f=u+1;for(t[u]=0,t[f]=0,a=0,o=0;M>o;o++)i=n[a++]<<24|n[a++]<<16|n[a++]<<8|n[a++],t[G>>2|o]^=i;for(a=0,o=0;M>o;o+=2)i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[u]^=i,i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[f]^=i,e.encrypt(L),t[G>>2|o]=t[u],t[G>>2|o+1]=t[f];var c=k>>2;for(o=0;T>o;o+=2)i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[u]^=i,i=r[a++]<<24|r[a++]<<16|r[a++]<<8|r[a++],a&=65295,t[f]^=i,e.encrypt(L),t[c|o]=t[u],t[c|o+1]=t[f]}function p(r,n,e,t,o,a,i){for(var u=e;t>=u;){if(u=r.expandLoop(u,t,o),a){var f=a(u/(t+1));if(f===!1)return}if(u>t){if(i)return void setImmediate(g.bind(null,r,n,i));return}if(i)return void setImmediate(p.bind(null,r,n,u,t,o,a,i))}}function g(r,n,e){u(n,x,F);var t;for(t=0;64>t;t++)r.encrypt(F+0),r.encrypt(F+8),r.encrypt(F+16);var o,a=0,i=x.length,f=new Array(4*i);for(t=0;i>t;t++)o=n[(F>>2)+t],f[a++]=o>>24,f[a++]=o>>16&255,f[a++]=o>>8&255,f[a++]=255&o;return e&&e(f),f}function y(r,n){return r+o(n,23)}function m(n,o,m,v){var d,h=o.substr(0,29),w=+o.substr(4,2),A=o.substr(7,22);if("string"==typeof n)d=r.encodingMode===r.ENCODING_UTF8?e(n):t(n);else if(Array.isArray(n))d=n.map(function(r){return 255&r});else{if(!(n instanceof Uint8Array))throw new Error("Incorrect arguments");d=Array.prototype.slice.call(n)}d.push(0);var b,E,N=a(A,C),O=31>w?1<>2,N),f(b,R>>2,d),l(N,d,E,b),v?void p(E,b,0,M,T,m,function(r){v(y(h,r))}):(p(E,b,0,M,T,m),y(h,g(E,b)))}function v(r){if(!b)throw new Error("No cryptographically secure pseudorandom number generator available.");if(null==r&&(r=N),r=0|+r,isNaN(r)||4>r||r>31)throw new Error("Invalid cost parameter.");var n="$2y$";return 10>r&&(n+="0"),n+=r+"$",n+=o(b(C),C)}function d(r,n,e){if(n&&"number"!=typeof n){if("string"!=typeof n||!z.test(n))throw new Error("Invalid salt")}else n=v(n);return m(r,n,e)}function h(r,n,e,t){if(arguments.length<2)throw new Error("Incorrect arguments");if(2===arguments.length?(t=n,n=e=null):3===arguments.length&&(t=e,e=null,"function"==typeof n&&(e=n,n=null)),n&&"number"!=typeof n){if("string"!=typeof n||!z.test(n))throw new Error("Invalid salt")}else n=v(n);if(!t||"function"!=typeof t)throw new Error("No callback function was given.");m(r,n,e,t)}function w(r,n){if("string"!=typeof n||!Z.test(n))throw new Error("Incorrect arguments");var e=n.substr(0,n.length-31),t=d(r,e);return t===n}function A(r,n,e,t){if("string"!=typeof n||!Z.test(n))throw new Error("Incorrect arguments");if(t||(t=e,e=null),!t||"function"!=typeof t)throw new Error("No callback function was given.");var o=n.substr(0,n.length-31);h(r,o,e,function(r){t(r===n)})}var b,E="undefined"!=typeof InstallTrigger,I=E;n&&(b=n.randomBytes,n.getRandomValues&&(b=function(r){var e=new Uint8Array(r);return n.getRandomValues(e)}));var C=16,N=10,O=16,$=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],U=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946,1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055,3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504,976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],M=$.length,T=U.length,x=[1332899944,1700884034,1701343084,1684370003,1668446532,1869963892],k=0,G=4096,S=4164,F=4168,L=4192,R=4200,j=4272,B="./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",D=[0,1,54,55,56,57,58,59,60,61,62,63,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,-1,-1,-1,-1,-1,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,-1,-1,-1,-1,-1],z=/^\$2[ay]\$(0[4-9]|[12][0-9]|3[01])\$[.\/A-Za-z0-9]{21}[.Oeu]/,Z=/^\$2[ay]\$(0[4-9]|[12][0-9]|3[01])\$[.\/A-Za-z0-9]{21}[.Oeu][.\/A-Za-z0-9]{30}[.CGKOSWaeimquy26]$/;r.genSalt=v,r.hashSync=d,r.hash=h,r.compareSync=w,r.compare=A,r.ENCODING_UTF8=0,r.ENCODING_RAW=1,r.encodingMode=r.ENCODING_UTF8,r.cryptoRNG=!!b,r.randomBytes=b,r.defaultCost=N,r.version="2.2.0"}); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-airwhu/Makefile b/package/ctcgfw/luci-app-airwhu/Makefile deleted file mode 100644 index 1e07ecea21..0000000000 --- a/package/ctcgfw/luci-app-airwhu/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-airwhu -PKG_VERSION=1.0 -PKG_RELEASE:=1 -LUCI_TITLE:=luci-app-airwhu -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+mentohust +kmod-ipt-nat6 -LUCI_DESCRIPTION:=LuCI web-interface for Ruijie 802.1X Client with IPv6 NAT. - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-airwhu/luasrc/controller/airwhu.lua b/package/ctcgfw/luci-app-airwhu/luasrc/controller/airwhu.lua deleted file mode 100644 index a3085a1e82..0000000000 --- a/package/ctcgfw/luci-app-airwhu/luasrc/controller/airwhu.lua +++ /dev/null @@ -1,5 +0,0 @@ -module("luci.controller.airwhu", package.seeall) - -function index() - entry({"admin", "services", "AirWHU"}, cbi("airwhu"), _("AirWHU"), 100) - end diff --git a/package/ctcgfw/luci-app-airwhu/luasrc/model/cbi/airwhu.lua b/package/ctcgfw/luci-app-airwhu/luasrc/model/cbi/airwhu.lua deleted file mode 100644 index 544a5d6db2..0000000000 --- a/package/ctcgfw/luci-app-airwhu/luasrc/model/cbi/airwhu.lua +++ /dev/null @@ -1,115 +0,0 @@ ---[[ - -LuCI - Lua Configuration Interface -LICENSE under GPLv3. -Copyright 2017 KyleRicardo[W.B.L.E. TeAm] - -]] --- -require("luci.sys") -require("luci.tools.webadmin") - -local IsOnAir = (luci.sys.call("pidof mentohust > /dev/null") == 0) -if IsOnAir then - state_msg = "" .. translate("Running") .. "" -else - state_msg = "" .. translate("Not Running") .. "" -end - -m = Map("airwhu", translate("AirWHU"), translate("Configure Ruijie 802.1X client with IPv6 NAT based on Masquerade.") .. "

" .. translate("Status") .. " : " .. state_msg) - -s = m:section(TypedSection, "switch", translate("Global Switch"), translate("Configure global 802.1X Authentication and IPv6-NAT on-off.")) -s.addremove = false -s.anonymous = true - -s:option(Flag, "enableauth", translate("Enable 802.1X Auth"), translate("Enable or disable Ruijie 802.1X authentication.")) -tmp = s:option(Flag, "startwithboot", translate("Start with boot"), translate("Start Ruijie 802.1X Authentication based on MentoHUST when the router is booting.")) -tmp:depends("enableauth","1") -s:option(Flag, "enableipv6", translate("Enable IPv6 NAT"), translate("Enable IPv6 NAT pass-through based on ip6tables MASQUERADE.")) - -s = m:section(TypedSection, "auth", translate("Config Authentication"), translate("The options below are all of MentoHUST's arguments.")) -s.anonymous = true -s.addremove = false - -ur = s:option(Value, "Username", translate("Username")) -ur.rmempty = false - -pw = s:option(Value, "Password", translate("Password")) -pw.password = true -pw.rmempty = false - -wan_dev = luci.sys.exec("uci get network.wan.ifname") -wan_dev = string.sub(wan_dev,1,string.len(wan_dev)-1) -ifname = s:option(ListValue, "ifname", translate("Interfaces")) -ifname:value(wan_dev) - -s:option(Value, "IP", translate("IP"), translate("default to localhost's IP")).default = "0.0.0.0" - -s:option(Value, "Mask", translate("Netmask"), translate("default to localhost's netmask")).default = "255.255.255.0" - -s:option(Value, "Gateway", translate("Gateway"), translate("default to 0.0.0.0")).default = "0.0.0.0" - -s:option(Value, "DNS", translate("DNS"), translate("default to 0.0.0.0")).default = "0.0.0.0" - -s:option(Value, "PingHost", translate("Ping host"), translate("default to 0.0.0.0,i.e. disable this function")).default = "0.0.0.0" - -s:option(Value, "Timeout", translate("Authenticate timeout(s)"), translate("default to 8s")).default = "8" - -s:option(Value, "EchoInterval", translate("Heartbeat timeout(s)"), translate("default to 30s")).default = "30" - -s:option(Value, "RestartWait", translate("Timeout on failure(s)"), translate("default to 15s")).default = "15" - -s:option(Value, "MaxFail", translate("Max failure times"), translate("0 means no limit,default to 8")).default = "8" - -t = s:option(ListValue, "StartMode", translate("mulcast address"), translate("default to 1")) -t:value("0", translate("0(standard)")) -t:value("1", translate("1(ruijjie)")) -t:value("2", translate("2(saier)")) -t.default = "1" - -t = s:option(ListValue, "DHCPMode", translate("DHCP type"), translate("default to 1")) -t:value("0", translate("0(not in used)")) -t:value("1", translate("1(secondary authenticate)")) -t:value("2", translate("2(post authenticate)")) -t:value("3", translate("3(pre authenticate)")) -t.default = "1" - -t = s:option(ListValue, "DaemonMode", translate("run in daemon mode"), translate("default to 3")) -t:value("0", translate("0(no)")) -t:value("1", translate("1(yes,turn off output)")) -t:value("2", translate("2(yes,persevere output)")) -t:value("3", translate("3(yes,output to file)")) -t.default = "3" - -s:option(Value, "ShowNotify", translate("display notification"), translate("0(no),1-20(yes),default to 0")).default = "0" - -s:option(Value, "Version", translate("client version"), translate("default to 0.00,compatible with xrgsu")).default = "0.00" - -tmp = s:option(Value, "DataFile", translate("customized data file"), translate("not in used by default")) -tmp.rmempty = true - -script = s:option(Value, "DHCPScript", translate("DHCP script"), translate("use dhclient by default")) -script.default = "udhcpc -i "..wan_dev - -local apply = luci.http.formvalue("cbi.apply") -if apply then - if luci.sys.exec("uci get airwhu.@switch[0].enableauth") then - luci.sys.exec("/etc/init.d/mentohust restart") - else - luci.sys.exec("/etc/init.d/mentohust stop") - end - - if luci.sys.exec("uci get airwhu.@switch[0].startwithboot") then - luci.sys.exec("/etc/init.d/mentohust enable") - else - luci.sys.exec("/etc/init.d/mentohust disable") - end - - if luci.sys.exec("uci get airwhu.@switch[0].enableipv6") then - luci.sys.exec("sh /bin/ipv6masq.sh install") - else - luci.sys.exec("sh /bin/ipv6masq.sh uninstall") - end -end - -return m diff --git a/package/ctcgfw/luci-app-airwhu/po/zh-cn/airwhu.po b/package/ctcgfw/luci-app-airwhu/po/zh-cn/airwhu.po deleted file mode 100644 index 8cc68762cc..0000000000 --- a/package/ctcgfw/luci-app-airwhu/po/zh-cn/airwhu.po +++ /dev/null @@ -1,258 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: airwhu\n" -"POT-Creation-Date: 2017-05-11 19:39+0800\n" -"PO-Revision-Date: 2017-05-11 19:40+0800\n" -"Last-Translator: KyleRicardo \n" -"Language-Team: [W.B.L.E. TeAm] \n" -"Language: en_US\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.8\n" -"X-Poedit-Basepath: ../files\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: translate\n" -"X-Poedit-SearchPath-0: .\n" - -#: root/usr/lib/lua/luci/controller/airwhu.lua:4 -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:19 -msgid "AirWHU" -msgstr "AirWHU" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:14 -msgid "Running" -msgstr "运行中" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:16 -msgid "Not Running" -msgstr "未运行" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:19 -msgid "Configure Ruijie 802.1X client with IPv6 NAT based on Masquerade." -msgstr "配置基于IPv6 Masquerade技术的锐捷802.1X认证网络。" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:19 -msgid "Status" -msgstr "状态" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:21 -msgid "Global Switch" -msgstr "全局开关" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:21 -msgid "Configure global 802.1X Authentication and IPv6-NAT on-off." -msgstr "配置全局802.1X认证与IPv6 NAT开关。" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:25 -msgid "Enable 802.1X Auth" -msgstr "开启锐捷认证" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:25 -msgid "Enable or disable Ruijie 802.1X authentication." -msgstr "打开或关闭锐捷802.1X认证。" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:26 -msgid "Start with boot" -msgstr "开机启动" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:26 -msgid "" -"Start Ruijie 802.1X Authentication based on MentoHUST when the router is " -"booting." -msgstr "开机自动启动基于MentoHUST的锐捷802.1X认证客户端。" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:28 -msgid "Enable IPv6 NAT" -msgstr "开启IPv6 NAT" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:28 -msgid "Enable IPv6 NAT pass-through based on ip6tables MASQUERADE." -msgstr "开启基于ip6tables Masquerade技术的IPv6 NAT穿透。" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:30 -msgid "Config Authentication" -msgstr "配置认证参数" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:30 -msgid "The options below are all of MentoHUST's arguments." -msgstr "以下是全部的MentoHUST认证参数。" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:34 -msgid "Username" -msgstr "用户名" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:36 -msgid "Password" -msgstr "密码" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:41 -msgid "Interfaces" -msgstr "网卡" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:51 -msgid "IP" -msgstr "IP地址" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:51 -msgid "default to localhost's IP" -msgstr "默认为localhost的IP地址" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:53 -msgid "Netmask" -msgstr "掩码" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:53 -msgid "default to localhost's netmask" -msgstr "默认为localhost的掩码" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:55 -msgid "Gateway" -msgstr "网关" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:55 -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:57 -msgid "default to 0.0.0.0" -msgstr "默认为0.0.0.0" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:57 -msgid "DNS" -msgstr "DNS服务器" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:59 -msgid "Ping host" -msgstr "Ping主机" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:59 -msgid "default to 0.0.0.0,i.e. disable this function" -msgstr "默认为0.0.0.0,即关闭该功能" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:61 -msgid "Authenticate timeout(s)" -msgstr "认证超时(秒)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:61 -msgid "default to 8s" -msgstr "默认为8秒" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:63 -msgid "Heartbeat timeout(s)" -msgstr "心跳包超时(秒)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:63 -msgid "default to 30s" -msgstr "默认为30秒" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:65 -msgid "Timeout on failure(s)" -msgstr "失败等待(秒)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:65 -msgid "default to 15s" -msgstr "默认为15秒" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:67 -msgid "Max failure times" -msgstr "允许失败次数" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:67 -msgid "0 means no limit,default to 8" -msgstr "0表示无限制,默认为8" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:69 -msgid "mulcast address" -msgstr "多播地址" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:69 -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:75 -msgid "default to 1" -msgstr "默认为1" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:70 -msgid "0(standard)" -msgstr "0(标准)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:71 -msgid "1(ruijjie)" -msgstr "1(锐捷)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:72 -msgid "2(saier)" -msgstr "2(赛尔)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:75 -msgid "DHCP type" -msgstr "DHCP方式" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:76 -msgid "0(not in used)" -msgstr "0(不使用)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:77 -msgid "1(secondary authenticate)" -msgstr "1(二次认证)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:78 -msgid "2(post authenticate)" -msgstr "3(认证后)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:79 -msgid "3(pre authenticate)" -msgstr "3(认证前)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:82 -msgid "run in daemon mode" -msgstr "后台运行模式" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:82 -msgid "default to 3" -msgstr "默认为3" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:83 -msgid "0(no)" -msgstr "0(不使用后台模式)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:84 -msgid "1(yes,turn off output)" -msgstr "1(后台模式,关闭输出)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:85 -msgid "2(yes,persevere output)" -msgstr "2(后台模式,保留输出)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:86 -msgid "3(yes,output to file)" -msgstr "3(后台模式,输出到日志文件)" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:89 -msgid "display notification" -msgstr "显示通知" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:89 -msgid "0(no),1-20(yes),default to 0" -msgstr "0(不使用),1-20(使用),默认为0" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:91 -msgid "client version" -msgstr "客户端版本号" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:91 -msgid "default to 0.00,compatible with xrgsu" -msgstr "默认为0.00,表示兼容xrgsu" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:93 -msgid "customized data file" -msgstr "自定义数据文件" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:93 -msgid "not in used by default" -msgstr "默认不使用" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:96 -msgid "DHCP script" -msgstr "DHCP脚本" - -#: root/usr/lib/lua/luci/model/cbi/airwhu.lua:96 -msgid "use dhclient by default" -msgstr "默认使用dhclient" diff --git a/package/ctcgfw/luci-app-airwhu/root/bin/ipv6masq.sh b/package/ctcgfw/luci-app-airwhu/root/bin/ipv6masq.sh deleted file mode 100755 index 6096621bb9..0000000000 --- a/package/ctcgfw/luci-app-airwhu/root/bin/ipv6masq.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh /etc/rc.common -#Author:KyleRicardo -#Email:shaoyz714@126.com - -action=$1 - -if [ "$action"x = "install"x ]; then - uci delete network.globals.ula_prefix - - uci set network.wan6.peerdns='0' - uci set network.wan6.dns='240c::6666' - - uci delete network.lan.ip6assign - uci set network.lan.ip6addr='BABE:BABE:BABE:BABE::1/64' - uci set network.lan.ip6prefix='BABE:BABE:BABE:BABE::/64' - - uci set dhcp.lan.ra_management='1' - uci set dhcp.lan.ra_default='1' - - uci set $(uci show firewall|grep Allow-ICMPv6-Forward|sed -e 's/.name[^ ]*'//).enabled='0' - - uci commit - -elif [ "$action"x = "uninstall"x ]; then - uci set network.globals.ula_prefix='fdad:91b7:54bb::/48' - - uci delete network.wan6.peerdns='0' - uci delete network.wan6.dns='240c::6666' - - uci set network.lan.ip6assign='60' - uci delete network.lan.ip6addr='BABE:BABE:BABE:BABE::1/64' - uci delete network.lan.ip6prefix='BABE:BABE:BABE:BABE::/64' - - uci delete dhcp.lan.ra_management='1' - uci delete dhcp.lan.ra_default='1' - - uci delete $(uci show firewall|grep Allow-ICMPv6-Forward|sed -e 's/.name[^ ]*'//).enabled - - uci commit -fi diff --git a/package/ctcgfw/luci-app-airwhu/root/etc/config/airwhu b/package/ctcgfw/luci-app-airwhu/root/etc/config/airwhu deleted file mode 100644 index 53959280ba..0000000000 --- a/package/ctcgfw/luci-app-airwhu/root/etc/config/airwhu +++ /dev/null @@ -1,26 +0,0 @@ - -config switch - option enableauth - option startwithboot - option enableipv6 - -config auth - option Username - option Password - option ifname - option IP - option Mask - option Gateway - option DNS - option PingHost - option Timeout - option EchoInterval - option RestartWait - option MaxFail - option StartMode - option DHCPMode - option DaemonMode - option ShowNotify - option Version - option DataFile - option DHCPScript diff --git a/package/ctcgfw/luci-app-airwhu/root/etc/hotplug.d/iface/99-ipv6nat b/package/ctcgfw/luci-app-airwhu/root/etc/hotplug.d/iface/99-ipv6nat deleted file mode 100755 index d123dfa0f4..0000000000 --- a/package/ctcgfw/luci-app-airwhu/root/etc/hotplug.d/iface/99-ipv6nat +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh /etc/rc.common -#Author:KyleRicardo -#Email:shaoyz714@126.com - -[ "$ACTION" = ifup ] || exit 0 - -iface=wan6 - -[ -z "$iface" -o "$INTERFACE" = "$iface" ] || exit 0 - -ip -6 route add `ip -6 route show default|sed -e 's/from [^ ]* //'` -logger -t IPv6 "Add IPv6 default route." - -MAX_TRIES=99 - -WAN6_NAME="wan6" - -WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname") -#eth0.2 by default - -LAN_IP6PREFIX=$(uci get network.lan.ip6prefix) -#e.g. aaaa:bbbb:cccc:dddd::/64 - -#LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix) -#e.g. ddc2:d512:65f5::/48 - -PROBE=0 - -COUNT=1 - -while [ $PROBE -eq 0 ] -do - if [ $COUNT -gt $MAX_TRIES ];then - logger -t NAT6 "No IPv6 route found (reached retry limit $MAX_TRIES times)" && exit 1 - fi - sleep 5 - logger -t NAT6 "Probing IPv6 route ($COUNT time)" - COUNT=$((COUNT+1)) - PROBE=$(route -A inet6 | grep -c '::/0') -done - -#ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE -ip6tables -t nat -I POSTROUTING -s "$LAN_IP6PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE - -#WAN6_GATEWAY=$(route -A inet6 -e | grep "$WAN6_INTERFACE" | awk '/::\/0/{print $2; exit}') -#get gateway from routing table. !!!Caution!!! May not work ! -WAN6_GATEWAY=$(ifconfig eth0.2 | grep 'Global' | awk '{print $3}'| awk -F':' '{print $1":"$2":"$3":"$4"::1"}') -#caculate gateway from wan ipv6 -#WAN6_GATEWAY=$(tracepath6 -n tv.byr.cn | grep ' 1: ' | awk 'NR==1 {print $2}') - -#route -A inet6 add 2000::/3 gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE" -route -A inet6 add default gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE" - -logger -t NAT6 "Done with IPv6 settings" diff --git a/package/ctcgfw/luci-app-airwhu/root/etc/init.d/mentohust b/package/ctcgfw/luci-app-airwhu/root/etc/init.d/mentohust deleted file mode 100755 index 5bfd80ebf2..0000000000 --- a/package/ctcgfw/luci-app-airwhu/root/etc/init.d/mentohust +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh /etc/rc.common -#Author:KyleRicardo -#Email:shaoyz714@126.com - -START=65 -STOP=10 - -start() -{ - if [ $(uci get airwhu.@switch[0].enableauth) ];then - local Username=$(uci get airwhu.@auth[0].Username) - local Password=$(uci get airwhu.@auth[0].Password) - local ifname=$(uci get airwhu.@auth[0].ifname) - local IP=$(uci get airwhu.@auth[0].IP) - local Mask=$(uci get airwhu.@auth[0].Mask) - local Gateway=$(uci get airwhu.@auth[0].Gateway) - local DNS=$(uci get airwhu.@auth[0].DNS) - local PingHost=$(uci get airwhu.@auth[0].PingHost) - local Timeout=$(uci get airwhu.@auth[0].Timeout) - local EchoInterval=$(uci get airwhu.@auth[0].EchoInterval) - local RestartWait=$(uci get airwhu.@auth[0].RestartWait) - local MaxFail=$(uci get airwhu.@auth[0].MaxFail) - local StartMode=$(uci get airwhu.@auth[0].StartMode) - local DHCPMode=$(uci get airwhu.@auth[0].DHCPMode) - local DaemonMode=$(uci get airwhu.@auth[0].DaemonMode) - local ShowNotify=$(uci get airwhu.@auth[0].ShowNotify) - local Version=$(uci get airwhu.@auth[0].Version) - local DataFile=$(uci get airwhu.@auth[0].DataFile) - local DHCPScript=$(uci get airwhu.@auth[0].DHCPScript) - mentohust -u$Username -p$Password -n$ifname -b$DaemonMode -a$StartMode -d$DaemonMode -c"$DHCPScript" -w>/dev/null 2>&1 - #Temporarily designed only for whu. To be continued... - else - stop - fi -} - -stop() -{ - sync - mentohust -k >/dev/null 2>&1 -} - -restart() -{ - stop - start -} diff --git a/package/ctcgfw/luci-app-appfilter/Makefile b/package/ctcgfw/luci-app-appfilter/Makefile deleted file mode 100644 index 4d0ecc5041..0000000000 --- a/package/ctcgfw/luci-app-appfilter/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=Open App Filter Module -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+appfilter - -PKG_NAME:=luci-app-appfilter -PKG_VERSION:=5.0.1 -PKG_RELEASE:=1 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-appfilter/htdocs/luci-static/resources/echarts.min.js b/package/ctcgfw/luci-app-appfilter/htdocs/luci-static/resources/echarts.min.js deleted file mode 100644 index 4b25b97b78..0000000000 --- a/package/ctcgfw/luci-app-appfilter/htdocs/luci-static/resources/echarts.min.js +++ /dev/null @@ -1,22 +0,0 @@ - -/* -* Licensed to the Apache Software Foundation (ASF) under one -* or more contributor license agreements. See the NOTICE file -* distributed with this work for additional information -* regarding copyright ownership. The ASF licenses this file -* to you under the Apache License, Version 2.0 (the -* "License"); you may not use this file except in compliance -* with the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, -* software distributed under the License is distributed on an -* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -* KIND, either express or implied. See the License for the -* specific language governing permissions and limitations -* under the License. -*/ - - -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";var e=2311,n=function(){return e++},v="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:function(t){var e={},i=t.match(/Firefox\/([\d.]+)/),n=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge\/([\d.]+)/),a=/micromessenger/i.test(t);i&&(e.firefox=!0,e.version=i[1]);n&&(e.ie=!0,e.version=n[1]);o&&(e.edge=!0,e.version=o[1]);a&&(e.weChat=!0);return{browser:e,os:{},node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!e.ie&&!e.edge,pointerEventsSupported:"onpointerdown"in window&&(e.edge||e.ie&&11<=e.version),domSupported:"undefined"!=typeof document}}(navigator.userAgent);var s={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},l={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},u=Object.prototype.toString,i=Array.prototype,r=i.forEach,h=i.filter,o=i.slice,c=i.map,d=i.reduce,a={};function f(t,e){"createCanvas"===t&&(g=null),a[t]=e}function k(t){if(null==t||"object"!=typeof t)return t;var e=t,i=u.call(t);if("[object Array]"===i){if(!$(t)){e=[];for(var n=0,o=t.length;n>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",n[l]+":0",o[u]+":0",n[1-l]+":auto",o[1-u]+":auto",""].join("!important;"),t.appendChild(r),i.push(r)}return i}(e,a),a,o);if(r)return r(t,i,n),!0}return!1}function zt(t){return"CANVAS"===t.nodeName.toUpperCase()}var Bt="undefined"!=typeof window&&!!window.addEventListener,Vt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Gt=[];function Ft(t,e,i,n){return i=i||{},n||!v.canvasSupported?Wt(t,e,i):v.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(i.zrX=e.layerX,i.zrY=e.layerY):null!=e.offsetX?(i.zrX=e.offsetX,i.zrY=e.offsetY):Wt(t,e,i),i}function Wt(t,e,i){if(v.domSupported&&t.getBoundingClientRect){var n=e.clientX,o=e.clientY;if(zt(t)){var a=t.getBoundingClientRect();return i.zrX=n-a.left,void(i.zrY=o-a.top)}if(Et(Gt,t,n,o))return i.zrX=Gt[0],void(i.zrY=Gt[1])}i.zrX=i.zrY=0}function Ht(t){return t||window.event}function Zt(t,e,i){if(null!=(e=Ht(e)).zrX)return e;var n=e.type;if(n&&0<=n.indexOf("touch")){var o="touchend"!==n?e.targetTouches[0]:e.changedTouches[0];o&&Ft(t,o,e,i)}else Ft(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var a=e.button;return null==e.which&&void 0!==a&&Vt.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function Ut(t,e,i,n){Bt?t.addEventListener(e,i,n):t.attachEvent("on"+e,i)}var Xt=Bt?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function Yt(t){return 2===t.which||3===t.which}function jt(){this._track=[]}function qt(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}jt.prototype={constructor:jt,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var o={points:[],touches:[],target:e,event:t},a=0,r=n.length;an.getWidth()||i<0||i>n.getHeight()}te.prototype={constructor:te,setHandlerProxy:function(e){this.proxy&&this.proxy.dispose(),e&&(R(ee,function(t){e.on&&e.on(t,this[t],this)},this),e.handler=this),this.proxy=e},mousemove:function(t){var e=t.zrX,i=t.zrY,n=ne(this,e,i),o=this._hovered,a=o.target;a&&!a.__zr&&(a=(o=this.findHover(o.x,o.y)).target);var r=this._hovered=n?{x:e,y:i}:this.findHover(e,i),s=r.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),a&&s!==a&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(r,"mousemove",t),s&&s!==a&&this.dispatchToElement(r,"mouseover",t)},mouseout:function(t){var e=t.zrEventControl,i=t.zrIsToLocalDOM;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&(i||this.trigger("globalout",{type:"globalout",event:t}))},resize:function(t){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){var n=(t=t||{}).target;if(!n||!n.silent){for(var o="on"+e,a=function(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:Jt}}(e,t,i);n&&(n[o]&&(a.cancelBubble=n[o].call(n,a)),n.trigger(e,a),n=n.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[o]&&t[o].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o={x:t,y:e},a=n.length-1;0<=a;a--){var r;if(n[a]!==i&&!n[a].ignore&&(r=ie(n[a],t,e))&&(o.topTarget||(o.topTarget=n[a]),r!==$t)){o.target=n[a];break}}return o},processGesture:function(t,e){this._gestureMgr||(this._gestureMgr=new jt);var i=this._gestureMgr;"start"===e&&i.clear();var n=i.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&i.clear(),n){var o=n.type;t.gestureEvent=o,this.dispatchToElement({target:n.target},o,n.event)}}},R(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(r){te.prototype[r]=function(t){var e,i,n=t.zrX,o=t.zrY,a=ne(this,n,o);if("mouseup"===r&&a||(i=(e=this.findHover(n,o)).target),"mousedown"===r)this._downEl=i,this._downPoint=[t.zrX,t.zrY],this._upEl=i;else if("mouseup"===r)this._upEl=i;else if("click"===r){if(this._downEl!==this._upEl||!this._downPoint||4=this._maxSize&&0>4|(3840&n)>>8,240&n|(240&n)>>4,15&n|(15&n)<<4,1),Ge(t,e),e):void Ee(e,0,0,0,1):7===o.length?0<=(n=parseInt(o.substr(1),16))&&n<=16777215?(Ee(e,(16711680&n)>>16,(65280&n)>>8,255&n,1),Ge(t,e),e):void Ee(e,0,0,0,1):void 0;var a=o.indexOf("("),r=o.indexOf(")");if(-1!==a&&r+1===o.length){var s=o.substr(0,a),l=o.substr(a+1,r-(a+1)).split(","),u=1;switch(s){case"rgba":if(4!==l.length)return void Ee(e,0,0,0,1);u=Ne(l.pop());case"rgb":return 3!==l.length?void Ee(e,0,0,0,1):(Ee(e,Pe(l[0]),Pe(l[1]),Pe(l[2]),u),Ge(t,e),e);case"hsla":return 4!==l.length?void Ee(e,0,0,0,1):(l[3]=Ne(l[3]),We(l,e),Ge(t,e),e);case"hsl":return 3!==l.length?void Ee(e,0,0,0,1):(We(l,e),Ge(t,e),e);default:return}}Ee(e,0,0,0,1)}}function We(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=Ne(t[1]),o=Ne(t[2]),a=o<=.5?o*(n+1):o+n-o*n,r=2*o-a;return Ee(e=e||[],Le(255*Oe(r,a,i+1/3)),Le(255*Oe(r,a,i)),Le(255*Oe(r,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function He(t,e){var i=Fe(t);if(i){for(var n=0;n<3;n++)i[n]=e<0?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,255e);i++);i=Math.min(i-1,u-2)}C=e;var n=g[(D=i)+1]-g[i];if(0!=n)if(S=(e-g[i])/n,l)if(I=m[i],M=m[0===i?i:i-1],T=m[u-2=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new Di(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},Di.create=function(t){return new Di(t.x,t.y,t.width,t.height)};var Ci=function(t){for(var e in t=t||{},_i.call(this,t),t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};Ci.prototype={constructor:Ci,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i>>1])<0?l=a:s=1+a;var u=n-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);a(t,e[i+h])<0?l=h:r=h+1}return l}function Ei(p,g){var r,s,m=ki,l=0,v=[];function e(t){var e=r[t],i=s[t],n=r[t+1],o=s[t+1];s[t]=i+o,t===l-3&&(r[t+1]=r[t+2],s[t+1]=s[t+2]),l--;var a=Ri(p[n],p,e,i,0,g);e+=a,0!==(i-=a)&&0!==(o=Oi(p[e+i-1],p,n,o,o-1,g))&&(i<=o?function(t,e,i,n){var o=0;for(o=0;os[t+1])break;e(t)}},this.forceMergeRuns=function(){for(;1>=1;return t+e}(o);do{if((a=Pi(t,i,n,e))=e.maxIterations){t+=e.ellipsis;break}var s=0===r?bn(t,o,e.ascCharWidth,e.cnCharWidth):0f)return{lines:[],width:0,height:0};C.textWidth=pn(C.text,w);var S=x.textWidth,M=null==S||"auto"===S;if("string"==typeof S&&"%"===S.charAt(S.length-1))C.percentWidth=S,u.push(C),S=0;else{if(M){S=C.textWidth;var I=x.textBackgroundColor,T=I&&I.image;T&&sn(T=on(T))&&(S=Math.max(S,T.width*b/T.height))}var A=_?_[1]+_[3]:0;S+=A;var D=null!=d?d-v:null;null!=D&&Dn[0]){for(r=0;rt);r++);a=i[n[r]]}if(n.splice(r+1,0,t),!(i[t]=e).virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)}else vi("Layer of zlevel "+t+" is not valid")},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n=a.length&&a.push({option:t})}}),a}function Zo(t){var r=Q();Ro(t,function(t,e){var i=t.exist;i&&r.set(i.id,t)}),Ro(t,function(t,e){var i=t.option;Y(!i||null==i.id||!r.get(i.id)||r.get(i.id)===t,"id duplicates: "+(i&&i.id)),i&&null!=i.id&&r.set(i.id,t),t.keyInfo||(t.keyInfo={})}),Ro(t,function(t,e){var i=t.exist,n=t.option,o=t.keyInfo;if(Eo(n)){if(o.name=null!=n.name?n.name+"":i?i.name:Bo+e,i)o.id=i.id;else if(null!=n.id)o.id=n.id+"";else for(var a=0;o.id="\0"+o.name+"\0"+a++,r.get(o.id););r.set(o.id,t)}})}function Uo(t){var e=t.name;return!(!e||!e.indexOf(Bo))}function Xo(t){return Eo(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")}function Yo(e,t){return null!=t.dataIndexInside?t.dataIndexInside:null!=t.dataIndex?L(t.dataIndex)?O(t.dataIndex,function(t){return e.indexOfRawIndex(t)}):e.indexOfRawIndex(t.dataIndex):null!=t.name?L(t.name)?O(t.name,function(t){return e.indexOfName(t)}):e.indexOfName(t.name):void 0}function jo(){var e="__\0ec_inner_"+qo+++"_"+Math.random().toFixed(5);return function(t){return t[e]||(t[e]={})}}var qo=0;function Ko(s,l,u){if(E(l)){var t={};t[l+"Index"]=0,l=t}var e=u&&u.defaultMainType;!e||$o(l,e+"Index")||$o(l,e+"Id")||$o(l,e+"Name")||(l[e+"Index"]=0);var h={};return Ro(l,function(t,e){t=l[e];if("dataIndex"!==e&&"dataIndexInside"!==e){var i=e.match(/^(\w+)(Index|Id|Name)$/)||[],n=i[1],o=(i[2]||"").toLowerCase();if(!(!n||!o||null==t||"index"===o&&"none"===t||u&&u.includeMainTypes&&_(u.includeMainTypes,n)<0)){var a={mainType:n};"index"===o&&"all"===t||(a[o]=t);var r=s.queryComponents(a);h[n+"Models"]=r,h[n+"Model"]=r[0]}}else h[e]=t}),h}function $o(t,e){return t&&t.hasOwnProperty(e)}function Jo(t,e,i){t.setAttribute?t.setAttribute(e,i):t[e]=i}function Qo(t){return"auto"===t?v.domSupported?"html":"richText":t||"html"}function ta(t,i){var n=Q(),o=[];return R(t,function(t){var e=i(t);(n.get(e)||(o.push(e),n.set(e,[]))).push(t)}),{keys:o,buckets:n}}var ea=".",ia="___EC__COMPONENT__CONTAINER___";function na(t){var e={main:"",sub:""};return t&&(t=t.split(ea),e.main=t[0]||"",e.sub=t[1]||""),e}function oa(t){(t.$constructor=t).extend=function(t){function e(){t.$constructor?t.$constructor.apply(this,arguments):i.apply(this,arguments)}var i=this;return P(e.prototype,t),e.extend=this.extend,e.superCall=sa,e.superApply=la,w(e,this),e.superClass=i,e}}var aa=0;function ra(t){var e=["__\0is_clz",aa++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function sa(t,e){var i=U(arguments,2);return this.superClass.prototype[e].apply(t,i)}function la(t,e,i){return this.superClass.prototype[e].apply(t,i)}function ua(i,t){t=t||{};var o={};if(i.registerClass=function(t,e){if(e)if(function(t){Y(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}(e),(e=na(e)).sub){if(e.sub!==ia){(function(t){var e=o[t.main];e&&e[ia]||((e=o[t.main]={})[ia]=!0);return e})(e)[e.sub]=t}}else o[e.main]=t;return t},i.getClass=function(t,e,i){var n=o[t];if(n&&n[ia]&&(n=e?n[e]:null),i&&!n)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return n},i.getClassesByMainType=function(t){t=na(t);var i=[],e=o[t.main];return e&&e[ia]?R(e,function(t,e){e!==ia&&i.push(t)}):i.push(e),i},i.hasClass=function(t){return t=na(t),!!o[t.main]},i.getAllClassMainTypes=function(){var i=[];return R(o,function(t,e){i.push(e)}),i},i.hasSubTypes=function(t){t=na(t);var e=o[t.main];return e&&e[ia]},i.parseClassType=na,t.registerWhenExtend){var n=i.extend;n&&(i.extend=function(t){var e=n.call(this,t);return i.registerClass(e,t.type)})}return i}function ha(s){for(var t=0;tthis._ux||or(e-this._yi)>this._uy||this._len<5;return this.addData(ja.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,a){return this.addData(ja.C,t,e,i,n,o,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,a):this._ctx.bezierCurveTo(t,e,i,n,o,a)),this._xi=o,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(ja.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,a){return this.addData(ja.A,t,e,i,i,n,o-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,a),this._xi=er(o)*i+t,this._yi=ir(o)*i+e,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(ja.R,t,e,i,n),this},closePath:function(){this.addData(ja.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,i=0;ie.length&&(this._expandData(),e=this.data);for(var i=0;il||or(r-o)>u||c===h-1)&&(t.lineTo(a,r),n=a,o=r);break;case ja.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case ja.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],o=s[c-1];break;case ja.A:var f=s[c++],p=s[c++],g=s[c++],m=s[c++],v=s[c++],y=s[c++],x=s[c++],_=s[c++],w=m=yr[n=0]+t&&r<=yr[1]+t?h:0}if(a){l=n;n=cr(o),o=cr(l)}else n=cr(n),o=cr(o);oMath.PI/2&&p<1.5*Math.PI&&(h=-h),c+=h)}}return c}function Sr(t,e,i,n,o){for(var a=0,r=0,s=0,l=0,u=0,h=0;hMath.abs(a[1])?0=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*a+i[0]}function El(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?function(t){return t.replace(/^\s+|\s+$/g,"")}(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t}function zl(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Bl(t){return t.sort(function(t,e){return t-e}),t}function Vl(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Gl(t){var e=t.toString(),i=e.indexOf("e");if(0h&&(h=u[d],c=d);++s[c],u[c]=0,++l}return s[e]/o}var Hl=9007199254740991;function Zl(t){var e=2*Math.PI;return(t%e+e)%e}function Ul(t){return-Ol"'])/g,ou={"&":"&","<":"<",">":">",'"':""","'":"'"};function au(t){return null==t?"":(t+"").replace(nu,function(t,e){return ou[e]})}function ru(t,e){return"{"+t+(null==e?"":e)+"}"}var su=["a","b","c","d","e","f","g"];function lu(t,e,i){L(e)||(e=[e]);var n=e.length;if(!n)return"";for(var o=e[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:i}}:""}function cu(t,e){return"0000".substr(0,e-(t+="").length)+t}function du(t,e,i){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var n=Yl(e),o=i?"UTC":"",a=n["get"+o+"FullYear"](),r=n["get"+o+"Month"]()+1,s=n["get"+o+"Date"](),l=n["get"+o+"Hours"](),u=n["get"+o+"Minutes"](),h=n["get"+o+"Seconds"](),c=n["get"+o+"Milliseconds"]();return t=t.replace("MM",cu(r,2)).replace("M",r).replace("yyyy",a).replace("yy",a%100).replace("dd",cu(s,2)).replace("d",s).replace("hh",cu(l,2)).replace("h",l).replace("mm",cu(u,2)).replace("m",u).replace("ss",cu(h,2)).replace("s",h).replace("SSS",cu(c,3))}function fu(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}var pu=xn;function gu(t,e){if("_blank"===e||"blank"===e){var i=window.open();i.opener=null,i.location=t}else window.open(t,e)}var mu=(Object.freeze||Object)({addCommas:tu,toCamelCase:eu,normalizeCssArray:iu,encodeHTML:au,formatTpl:lu,formatTplSimple:uu,getTooltipMarker:hu,formatTime:du,capitalFirst:fu,truncateText:pu,getTextBoundingRect:function(t){return gn(t.text,t.font,t.textAlign,t.textVerticalAlign,t.textPadding,t.textLineHeight,t.rich,t.truncate)},getTextRect:function(t,e,i,n,o,a,r,s){return gn(t,e,i,n,o,s,a,r)},windowOpen:gu}),vu=R,yu=["left","right","top","bottom","width","height"],xu=[["width","left","right"],["height","top","bottom"]];function _u(h,c,d,f,p){var g=0,m=0;null==f&&(f=1/0),null==p&&(p=1/0);var v=0;c.eachChild(function(t,e){var i,n,o=t.position,a=t.getBoundingRect(),r=c.childAt(e+1),s=r&&r.getBoundingRect();if("horizontal"===h){var l=a.width+(s?-s.x+a.x:0);v=f<(i=g+l)||t.newline?(g=0,i=l,m+=v+d,a.height):Math.max(v,a.height)}else{var u=a.height+(s?-s.y+a.y:0);v=p<(n=m+u)||t.newline?(g+=v+d,m=0,n=u,a.width):Math.max(v,a.width)}t.newline||(o[0]=g,o[1]=m,"horizontal"===h?g=i+d:m=n+d)})}var wu=_u;T(_u,"vertical"),T(_u,"horizontal");function bu(t,e,i){i=iu(i||0);var n=e.width,o=e.height,a=El(t.left,n),r=El(t.top,o),s=El(t.right,n),l=El(t.bottom,o),u=El(t.width,n),h=El(t.height,o),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(u)&&(u=n-s-d-a),isNaN(h)&&(h=o-l-c-r),null!=f&&(isNaN(u)&&isNaN(h)&&(n/oe)return t[n];return t[i-1]}(s,i):r;if((l=l||r)&&l.length){var u=l[o];return t&&(a[t]=u),n.colorIdx=(o+1)%l.length,u}}},zu="original",Bu="arrayRows",Vu="objectRows",Gu="keyedColumns",Fu="unknown",Wu="typedArray",Hu="column",Zu="row";function Uu(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===Gu?{}:[]),this.sourceFormat=t.sourceFormat||Fu,this.seriesLayoutBy=t.seriesLayoutBy||Hu,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&Q(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}Uu.seriesDataToSource=function(t){return new Uu({data:t,sourceFormat:V(t)?Wu:zu,fromDataset:!1})},ra(Uu);var Xu={Must:1,Might:2,Not:3},Yu=jo();function ju(t){var e=t.option,i=e.data,n=V(i)?Wu:zu,o=!1,a=e.seriesLayoutBy,r=e.sourceHeader,s=e.dimensions,l=Qu(t);if(l){var u=l.option;i=u.source,n=Yu(l).sourceFormat,o=!0,a=a||u.seriesLayoutBy,null==r&&(r=u.sourceHeader),s=s||u.dimensions}var h=function(t,e,i,n,o){if(!t)return{dimensionsDefine:qu(o)};var a,r;if(e===Bu)"auto"===n||null==n?Ku(function(t){null!=t&&"-"!==t&&(E(t)?null==r&&(r=1):r=0)},i,t,10):r=n?1:0,o||1!==r||(o=[],Ku(function(t,e){o[e]=null!=t?t:""},i,t)),a=o?o.length:i===Zu?t.length:t[0]?t[0].length:null;else if(e===Vu)o=o||function(t){var e,i=0;for(;i":"\n",f="richText"===c,p={},g=0;function i(t){return{renderMode:c,content:au(tu(t)),style:p}}var m=this.getData(),a=m.mapDimension("defaultedTooltip",!0),n=a.length,r=this.getRawValue(o),s=L(r),v=m.getItemVisual(o,"color");z(v)&&v.colorStops&&(v=(v.colorStops[0]||{}).color),v=v||"transparent";var l=(1":"",n=i+u.join(i||", ");return{renderMode:c,content:n,style:p}}(r):i(n?Hh(m,o,a[0]):s?r[0]:r)).content,u=d.seriesIndex+"at"+g,y=hu({color:v,type:"item",renderMode:c,markerId:u});p[u]=v,++g;var x=m.getName(o),_=this.name;Uo(this)||(_=""),_=_?au(_)+(h?": ":e):"";var w="string"==typeof y?y:y.content;return{html:h?w+_+l:_+w+(x?au(x)+": "+l:l),markers:p}},isAnimationEnabled:function(){if(v.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,o=Eu.getColorFromPalette.call(this,t,e,i);return o=o||n.getColorFromPalette(t,e,i)},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});function lc(t){var e=t.name;Uo(t)||(t.name=function(t){var i=t.getRawData(),e=i.mapDimension("seriesName",!0),n=[];return R(e,function(t){var e=i.getDimensionInfo(t);e.displayName&&n.push(e.displayName)}),n.join(" ")}(t)||e)}function uc(t){return t.model.getRawData().count()}function hc(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),cc}function cc(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function dc(e,i){R(e.CHANGABLE_METHODS,function(t){e.wrapMethod(t,T(fc,i))})}function fc(t){var e=pc(t);e&&e.setOutputEnd(this.count())}function pc(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var o=n.agentStubMap;o&&(n=o.get(t.uid))}return n}}b(sc,Xh),b(sc,Eu);var gc=function(){this.group=new Ci,this.uid=Nl("viewComponent")};gc.prototype={constructor:gc,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){},filterForExposedEvent:null};var mc=gc.prototype;mc.updateView=mc.updateLayout=mc.updateVisual=function(t,e,i,n){},oa(gc),ua(gc,{registerWhenExtend:!0});function vc(){var s=jo();return function(t){var e=s(t),i=t.pipelineContext,n=e.large,o=e.progressiveRender,a=e.large=i&&i.large,r=e.progressiveRender=i&&i.progressiveRender;return!!(n^a||o^r)&&"reset"}}var yc=jo(),xc=vc();function _c(){this.group=new Ci,this.uid=Nl("viewChart"),this.renderTask=Yh({plan:Mc,reset:Ic}),this.renderTask.context={view:this}}var wc=_c.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){Sc(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){Sc(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};function bc(t,e,i){if(t&&(t.trigger(e,i),t.isGroup&&!Qs(t)))for(var n=0,o=t.childCount();nc?i+=p(g("data.partialData"),{displayCnt:c}):i+=g("data.allData");for(var r=[],s=0;si.blockIndex?i.step:null,a=n&&n.modDataCount;return{step:o,modBy:null!=a?Math.ceil(a/o):null,modDataCount:a}}},Bc.getPipeline=function(t){return this._pipelineMap.get(t)},Bc.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData().count(),o=i.progressiveEnabled&&e.incrementalPrepareRender&&n>=i.threshold,a=t.get("large")&&n>=t.get("largeThreshold"),r="mod"===t.get("progressiveChunkMode")?n:null;t.pipelineContext=i.context={progressiveRender:o,modDataCount:r,large:a}},Bc.restorePipelines=function(t){var n=this,o=n._pipelineMap=Q();t.eachSeries(function(t){var e=t.getProgressive(),i=t.uid;o.set(i,{id:i,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:e&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(e||700),count:0}),Kc(n,t,t.dataTask)})},Bc.prepareStageTasks=function(){var i=this._stageTaskMap,n=this.ecInstance.getModel(),o=this.api;R(this._allHandlers,function(t){var e=i.get(t.uid)||i.set(t.uid,[]);t.reset&&function(n,o,t,a,r){var s=t.seriesTaskMap||(t.seriesTaskMap=Q()),e=o.seriesType,i=o.getTargetSeries;o.createOnAllSeries?a.eachRawSeries(l):e?a.eachRawSeriesByType(e,l):i&&i(a,r).each(l);function l(t){var e=t.uid,i=s.get(e)||s.set(e,Yh({plan:Uc,reset:Xc,count:qc}));i.context={model:t,ecModel:a,api:r,useClearVisual:o.isVisual&&!o.isLayout,plan:o.plan,reset:o.reset,scheduler:n},Kc(n,t,i)}var u=n._pipelineMap;s.each(function(t,e){u.get(e)||(t.dispose(),s.removeKey(e))})}(this,t,e,n,o),t.overallReset&&function(n,t,e,i,o){var a=e.overallTask=e.overallTask||Yh({reset:Fc});a.context={ecModel:i,api:o,overallReset:t.overallReset,scheduler:n};var r=a.agentStubMap=a.agentStubMap||Q(),s=t.seriesType,l=t.getTargetSeries,u=!0,h=t.modifyOutputEnd;s?i.eachRawSeriesByType(s,c):l?l(i,o).each(c):(u=!1,R(i.getSeries(),c));function c(t){var e=t.uid,i=r.get(e);i||(i=r.set(e,Yh({reset:Wc,onDirty:Zc})),a.dirty()),i.context={model:t,overallProgress:u,modifyOutputEnd:h},i.agent=a,i.__block=u,Kc(n,t,i)}var d=n._pipelineMap;r.each(function(t,e){d.get(e)||(t.dispose(),a.dirty(),r.removeKey(e))})}(this,t,e,n,o)},this)},Bc.prepareView=function(t,e,i,n){var o=t.renderTask,a=o.context;a.model=e,a.ecModel=i,a.api=n,o.__block=!t.incrementalPrepareRender,Kc(this,e,o)},Bc.performDataProcessorTasks=function(t,e){Vc(this,this._dataProcessorHandlers,t,e,{block:!0})},Bc.performVisualTasks=function(t,e,i){Vc(this,this._visualHandlers,t,e,i)},Bc.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},Bc.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var Gc=Bc.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)};function Fc(t){t.overallReset(t.ecModel,t.api,t.payload)}function Wc(t,e){return t.overallProgress&&Hc}function Hc(){this.agent.dirty(),this.getDownstream().dirty()}function Zc(){this.agent&&this.agent.dirty()}function Uc(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function Xc(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Vo(t.reset(t.model,t.ecModel,t.api,t.payload));return 1'+t.dom+""}),p.painter.getSvgRoot().innerHTML=g,o.connectedBackgroundColor&&p.painter.setBackgroundColor(o.connectedBackgroundColor),p.refreshImmediately(),p.painter.toDataURL()}return o.connectedBackgroundColor&&p.add(new rs({shape:{x:0,y:0,width:t,height:e},style:{fill:o.connectedBackgroundColor}})),Td(f,function(t){var e=new Qn({style:{x:t.left*i-u,y:t.top*i-h,image:t.dom}});p.add(e)}),p.refreshImmediately(),n.toDataURL("image/"+(o&&o.type||"png"))}return this.getDataURL(o)}},zd.convertToPixel=T(Bd,"convertToPixel"),zd.convertFromPixel=T(Bd,"convertFromPixel"),zd.containPixel=function(t,o){var a;if(!this._disposed)return R(t=Ko(this._model,t),function(t,n){0<=n.indexOf("Models")&&R(t,function(t){var e=t.coordinateSystem;if(e&&e.containPoint)a|=!!e.containPoint(o);else if("seriesModels"===n){var i=this._chartsMap[t.__viewId];i&&i.containPoint&&(a|=i.containPoint(o,t))}},this)},this),!!a},zd.getVisual=function(t,e){var i=(t=Ko(this._model,t,{defaultMainType:"series"})).seriesModel.getData(),n=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?i.indexOfRawIndex(t.dataIndex):null;return null!=n?i.getItemVisual(n,e):i.getVisual(e)},zd.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},zd.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var Vd={prepareAndUpdate:function(t){Gd(this),Vd.update.call(this,t)},update:function(t){var e=this._model,i=this._api,n=this._zr,o=this._coordSysMgr,a=this._scheduler;if(e){a.restoreData(e,t),a.performSeriesTasks(e),o.create(e,i),a.performDataProcessorTasks(e,t),Wd(this,e),o.update(e,i),Yd(e),a.performVisualTasks(e,t),jd(this,e,i,t);var r=e.get("backgroundColor")||"transparent";if(v.canvasSupported)n.setBackgroundColor(r);else{var s=Fe(r);r=$e(s,"rgb"),0===s[3]&&(r="transparent")}Kd(e,i)}},updateTransform:function(o){var a=this._model,r=this,s=this._api;if(a){var l=[];a.eachComponent(function(t,e){var i=r.getViewOfComponentModel(e);if(i&&i.__alive)if(i.updateTransform){var n=i.updateTransform(e,a,s,o);n&&n.update&&l.push(i)}else l.push(i)});var n=Q();a.eachSeries(function(t){var e=r._chartsMap[t.__viewId];if(e.updateTransform){var i=e.updateTransform(t,a,s,o);i&&i.update&&n.set(t.uid,1)}else n.set(t.uid,1)}),Yd(a),this._scheduler.performVisualTasks(a,o,{setDirty:!0,dirtyMap:n}),qd(r,a,s,o,n),Kd(a,this._api)}},updateView:function(t){var e=this._model;e&&(_c.markUpdateMethod(t,"updateView"),Yd(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),jd(this,this._model,this._api,t),Kd(e,this._api))},updateVisual:function(t){Vd.update.call(this,t)},updateLayout:function(t){Vd.update.call(this,t)}};function Gd(t){var e=t._model,i=t._scheduler;i.restorePipelines(e),i.prepareStageTasks(),Xd(t,"component",e,i),Xd(t,"chart",e,i),i.plan()}function Fd(e,i,n,o,t){var a=e._model;if(o){var r={};r[o+"Id"]=n[o+"Id"],r[o+"Index"]=n[o+"Index"],r[o+"Name"]=n[o+"Name"];var s={mainType:o,query:r};t&&(s.subType=t);var l=n.excludeSeriesId;null!=l&&(l=Q(Vo(l))),a&&a.eachComponent(s,function(t){l&&null!=l.get(t.id)||u(e["series"===o?"_chartsMap":"_componentsMap"][t.__viewId])},e)}else Td(e._componentsViews.concat(e._chartsViews),u);function u(t){t&&t.__alive&&t[i]&&t[i](t.__model,a,e._api,n)}}function Wd(t,e){var i=t._chartsMap,n=t._scheduler;e.eachSeries(function(t){n.updateStreamModes(t,i[t.__viewId])})}function Hd(e,t){var i=e.type,n=e.escapeConnect,o=tf[i],a=o.actionInfo,r=(a.update||"update").split(":"),s=r.pop();r=null!=r[0]&&Cd(r[0]),this[kd]=!0;var l=[e],u=!1;e.batch&&(u=!0,l=O(e.batch,function(t){return(t=D(P({},t),e)).batch=null,t}));var h,c=[],d="highlight"===i||"downplay"===i;Td(l,function(t){(h=(h=o.action(t,this._model,this._api))||P({},t)).type=a.event||h.type,c.push(h),d?Fd(this,s,t,"series"):r&&Fd(this,s,t,r.main,r.sub)},this),"none"===s||d||r||(this[Pd]?(Gd(this),Vd.update.call(this,e),this[Pd]=!1):Vd[s].call(this,e)),h=u?{type:a.event||i,escapeConnect:n,batch:c}:c[0],this[kd]=!1,t||this._messageCenter.trigger(h.type,h)}function Zd(t){for(var e=this._pendingActions;e.length;){var i=e.shift();Hd.call(this,i,t)}}function Ud(t){t||this.trigger("updated")}function Xd(t,e,o,a){for(var r="component"===e,s=r?t._componentsViews:t._chartsViews,l=r?t._componentsMap:t._chartsMap,u=t._zr,h=t._api,i=0;it.get("hoverLayerThreshold")&&!v.node&&t.eachSeries(function(t){if(!t.preventUsingHoverLayer){var e=i._chartsMap[t.__viewId];e.__alive&&e.group.traverse(function(t){t.useHoverLayer=!0})}})}(n,t),Rc(n._zr.dom,t)}function Kd(e,i){Td(af,function(t){t(e,i)})}zd.resize=function(t){if(!this._disposed){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[kd]=!0,i&&Gd(this),Vd.update.call(this),this[kd]=!1,Zd.call(this,n),Ud.call(this,n)}}},zd.showLoading=function(t,e){if(!this._disposed&&(Dd(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),lf[t])){var i=lf[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},zd.hideLoading=function(){this._disposed||(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},zd.makeActionFromEvent=function(t){var e=P({},t);return e.type=ef[t.type],e},zd.dispatchAction=function(t,e){this._disposed||(Dd(e)||(e={silent:!!e}),tf[t.type]&&this._model&&(this[kd]?this._pendingActions.push(t):(Hd.call(this,t,e.silent),e.flush?this._zr.flush(!0):!1!==e.flush&&v.browser.weChat&&this._throttledZrFlush(),Zd.call(this,e.silent),Ud.call(this,e.silent))))},zd.appendData=function(t){if(!this._disposed){var e=t.seriesIndex;this.getModel().getSeriesByIndex(e).appendData(t),this._scheduler.unfinished=!0}},zd.on=Od("on",!1),zd.off=Od("off",!1),zd.one=Od("one",!1);var $d=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];function Jd(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function Qd(){this.eventInfo}zd._initEvents=function(){Td($d,function(u){function t(t){var e,i=this.getModel(),n=t.target;if("globalout"===u)e={};else if(n&&null!=n.dataIndex){var o=n.dataModel||i.getSeriesByIndex(n.seriesIndex);e=o&&o.getDataParams(n.dataIndex,n.dataType,n)||{}}else n&&n.eventData&&(e=P({},n.eventData));if(e){var a=e.componentType,r=e.componentIndex;"markLine"!==a&&"markPoint"!==a&&"markArea"!==a||(a="series",r=e.seriesIndex);var s=a&&null!=r&&i.getComponent(a,r),l=s&&this["series"===s.mainType?"_chartsMap":"_componentsMap"][s.__viewId];e.event=t,e.type=u,this._ecEventProcessor.eventInfo={targetEl:n,packedEvent:e,model:s,view:l},this.trigger(u,e)}}t.zrEventfulCallAtLast=!0,this._zr.on(u,t,this)},this),Td(ef,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},zd.isDisposed=function(){return this._disposed},zd.clear=function(){this._disposed||this.setOption({series:[]},!0)},zd.dispose=function(){if(!this._disposed){this._disposed=!0,Jo(this.getDom(),ff,"");var e=this._api,i=this._model;Td(this._componentsViews,function(t){t.dispose(i,e)}),Td(this._chartsViews,function(t){t.dispose(i,e)}),this._zr.dispose(),delete uf[this.id]}},b(Ed,Ct),Qd.prototype={constructor:Qd,normalizeQuery:function(t){var s={},l={},u={};if(E(t)){var e=Cd(t);s.mainType=e.main||null,s.subType=e.sub||null}else{var h=["Index","Name","Id"],c={name:1,dataIndex:1,dataType:1};R(t,function(t,e){for(var i=!1,n=0;nx[1]&&(x[1]=y)}e&&(this._nameList[d]=e[f])}this._rawCount=this._count=l,this._extent={},Kf(this)},jf._initDataFromProvider=function(t,e){if(!(e<=t)){for(var i,n=this._chunkSize,o=this._rawData,a=this._storage,r=this.dimensions,s=r.length,l=this._dimensionInfos,u=this._nameList,h=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=0;pM[1]&&(M[1]=S)}if(!o.pure){var I=u[v];if(m&&null==I)if(null!=m.name)u[v]=I=m.name;else if(null!=i){var T=r[i],A=a[T][y];if(A){I=A[x];var D=l[T].ordinalMeta;D&&D.categories.length&&(I=D.categories[I])}}var C=null==m?null:m.id;null==C&&null!=I&&(d[I]=d[I]||0,0=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,i=e[t];if(null!=i&&it))return a;o=a-1}}return-1},jf.indicesOfNearest=function(t,e,i){var n=[];if(!this._storage[t])return n;null==i&&(i=1/0);for(var o=1/0,a=-1,r=0,s=0,l=this.count();st[I][1])&&(M=!1)}M&&(a[r++]=this.getRawIndex(m))}return rw[1]&&(w[1]=_)}}}return o},jf.downSample=function(t,e,i,n){for(var o=ip(this,[t]),a=o._storage,r=[],s=Math.floor(1/e),l=a[t],u=this.count(),h=this._chunkSize,c=o._rawExtent[t],d=new(Hf(this))(u),f=0,p=0;pc[1]&&(c[1]=x),d[f++]=_}return o._count=f,o._indices=d,o.getRawIndex=Qf,o},jf.getItemModel=function(t){var e=this.hostModel;return new Cl(this.getRawDataItem(t),e,e&&e.ecModel)},jf.diff=function(e){var i=this;return new kf(e?e.getIndices():[],this.getIndices(),function(t){return tp(e,t)},function(t){return tp(i,t)})},jf.getVisual=function(t){var e=this._visual;return e&&e[t]},jf.setVisual=function(t,e){if(zf(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},jf.setLayout=function(t,e){if(zf(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},jf.getLayout=function(t){return this._layout[t]},jf.getItemLayout=function(t){return this._itemLayouts[t]},jf.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?P(this._itemLayouts[t]||{},e):e},jf.clearItemLayouts=function(){this._itemLayouts.length=0},jf.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},jf.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},o=this.hasItemVisual;if(this._itemVisuals[t]=n,zf(e))for(var a in e)e.hasOwnProperty(a)&&(n[a]=e[a],o[a]=!0);else n[e]=i,o[e]=!0},jf.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};function ap(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType}function rp(t,e,i){Uu.isInstance(e)||(e=Uu.seriesDataToSource(e)),i=i||{},t=(t||[]).slice();for(var n=(i.dimsDef||[]).slice(),o=Q(),a=Q(),l=[],r=function(t,e,i,n){var o=Math.max(t.dimensionsDetectCount||1,e.length,i.length,n||0);return R(e,function(t){var e=t.dimsDef;e&&(o=Math.max(o,e.length))}),o}(e,t,n,i.dimCount),s=0;s=e[0]&&t<=e[1]},mp.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},mp.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},mp.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},mp.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},mp.prototype.getExtent=function(){return this._extent.slice()},mp.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},mp.prototype.isBlank=function(){return this._isBlank},mp.prototype.setBlank=function(t){this._isBlank=t},mp.prototype.getLabel=null,oa(mp),ua(mp,{registerWhenExtend:!0}),vp.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&O(i,_p);return new vp({categories:n,needCollect:!n,deduplication:!1!==e.dedplication})};var yp=vp.prototype;function xp(t){return t._map||(t._map=Q(t.categories))}function _p(t){return z(t)&&null!=t.value?t.value:t+""}yp.getOrdinal=function(t){return xp(this).get(t)},yp.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=xp(this);return null==(e=n.get(t))&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=NaN),e};var wp=mp.prototype,bp=mp.extend({type:"ordinal",init:function(t,e){t&&!L(t)||(t=new vp({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),wp.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return wp.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(wp.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){if(!this.isBlank())return this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:et,niceExtent:et});bp.create=function(){return new bp};var Sp=zl;function Mp(t){return Gl(t)+2}function Ip(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function Tp(t,e){isFinite(t[0])||(t[0]=e[0]),isFinite(t[1])||(t[1]=e[1]),Ip(t,0,e),Ip(t,1,e),t[0]>t[1]&&(t[0]=t[1])}var Ap=zl,Dp=mp.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),Dp.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Mp(t)},getTicks:function(t){var e=this._interval,i=this._extent,n=this._niceExtent,o=this._intervalPrecision,a=[];if(!e)return a;i[0]s&&(t?a.push(Ap(s+e,o)):a.push(i[1])),a},getMinorTicks:function(t){for(var e=this.getTicks(!0),i=[],n=this.getExtent(),o=1;on[0]&&h>>1;t[o][1]>1^-(1&s),l=l>>1^-(1&l),o=s+=o,a=l+=a,n.push([s/i,l/i])}return n}Ag.prototype={constructor:Ag,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],a=[],r=this.geometries,s=0;ss[1];d(e[0].coord,s[0])&&(n?e[0].coord=s[0]:e.shift());n&&d(s[0],e[0].coord)&&e.unshift({coord:s[0]});d(s[1],a.coord)&&(n?a.coord=s[1]:e.pop());n&&d(a.coord,s[1])&&e.push({coord:s[1]});function d(t,e){return t=zl(t),e=zl(e),c?en[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}var xm=Ar.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:Xr(Ar.prototype.brush),buildPath:function(t,e){var i=e.points,n=0,o=i.length,a=ym(i,e.smoothConstraint);if(e.connectNulls){for(;0n)return!1;return!0}(a,e))){var r=e.mapDimension(a.dim),s={};return R(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(r,t))}}}}function Cm(t,e,i){if("cartesian2d"!==t.type)return bm(t,e,i);var n=t.getBaseAxis().isHorizontal(),o=wm(t,e,i);if(!i.get("clip",!0)){var a=o.shape,r=Math.max(a.width,a.height);n?(a.y-=r,a.height+=2*r):(a.x-=r,a.width+=2*r)}return o}_c.extend({type:"line",init:function(){var t=new Ci,e=new im;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var n=t.coordinateSystem,o=this.group,a=t.getData(),r=t.getModel("lineStyle"),s=t.getModel("areaStyle"),l=a.mapArray(a.getItemLayout),u="polar"===n.type,h=this._coordSys,c=this._symbolDraw,d=this._polyline,f=this._polygon,p=this._lineGroup,g=t.get("animation"),m=!s.isEmpty(),v=s.get("origin"),y=function(t,e,i){if(!i.valueDim)return[];for(var n=[],o=0,a=e.count();oh[c-1].coord&&(h.reverse(),d.reverse());var f=h[0].coord-10,p=h[c-1].coord+10,g=p-f;if(g<.001)return"transparent";R(h,function(t){t.offset=(t.coord-f)/g}),h.push({offset:c?h[c-1].offset:.5,color:d[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:d[0]||"transparent"});var m=new gs(0,0,0,0,h,!0);return m[n]=f,m[n+"2"]=p,m}}}(a,n)||a.getVisual("color");d.useStyle(D(r.getLineStyle(),{fill:"none",stroke:M,lineJoin:"bevel"}));var I=t.get("smooth");if(I=Tm(t.get("smooth")),d.setShape({smooth:I,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),f){var T=a.getCalculationInfo("stackedOnSeries"),A=0;f.useStyle(D(s.getAreaStyle(),{fill:M,opacity:.7,lineJoin:"bevel"})),T&&(A=Tm(T.get("smooth"))),f.setShape({smooth:I,stackedOnSmooth:A,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=a,this._coordSys=n,this._stackedOnPoints=y,this._points=l,this._step=S,this._valueOrigin=v},dispose:function(){},highlight:function(t,e,i,n){var o=t.getData(),a=Yo(o,n);if(!(a instanceof Array)&&null!=a&&0<=a){var r=o.getItemGraphicEl(a);if(!r){var s=o.getItemLayout(a);if(!s)return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(s[0],s[1]))return;(r=new Xg(o,a)).position=s,r.setZ(t.get("zlevel"),t.get("z")),r.ignore=isNaN(s[0])||isNaN(s[1]),r.__temp=!0,o.setItemGraphicEl(a,r),r.stopSymbolAnimation(!0),this.group.add(r)}r.highlight()}else _c.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),a=Yo(o,n);if(null!=a&&0<=a){var r=o.getItemGraphicEl(a);r&&(r.__temp?(o.setItemGraphicEl(a,null),this.group.remove(r)):r.downplay())}else _c.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new xm({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new _m({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i},_updateAnimation:function(t,e,i,n,o,a){var r=this._polyline,s=this._polygon,l=t.hostModel,u=function(t,e,i,n,o,a,r,s){for(var l=function(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],m=sm(o,e,r),v=sm(a,t,s),y=0;ye&&(e=t[i]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,i=0;ie[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},w(zm,Gg);var Bm={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},Vm={};Vm.categoryAxis=m({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},Bm),Vm.valueAxis=m({boundaryGap:[0,0],splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#eee",width:1}}},Bm),Vm.timeAxis=D({scale:!0,min:"dataMin",max:"dataMax"},Vm.valueAxis),Vm.logAxis=D({scale:!0,logBase:10},Vm.valueAxis);function Gm(a,t,r,e){R(Fm,function(o){t.extend({type:a+"Axis."+o,mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,n=i?Iu(t):{};m(t,e.getTheme().get(o+"Axis")),m(t,this.getDefaultOption()),t.type=r(a,t),i&&Mu(t,n,i)},optionUpdated:function(){"category"===this.option.type&&(this.__ordinalMeta=vp.createByAxisModel(this))},getCategories:function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:p([{},Vm[o+"Axis"],e],!0)})}),ku.registerSubTypeDefaulter(a+"Axis",T(r,a))}var Fm=["value","category","time","log"],Wm=ku.extend({type:"cartesian2dAxis",axis:null,init:function(){Wm.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){Wm.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){Wm.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});function Hm(t,e){return e.type||(e.data?"category":"value")}m(Wm.prototype,dg);var Zm={offset:0};function Um(t,e){return t.getCoordSysModel()===e}function Xm(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}Gm("x",Wm,Hm,Zm),Gm("y",Wm,Hm,Zm),ku.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var Ym=Xm.prototype;function jm(t,e,i,n){i.getAxesOnZeroOf=function(){return o?[o]:[]};var o,a=t[e],r=i.model,s=r.get("axisLine.onZero"),l=r.get("axisLine.onZeroAxisIndex");if(s){if(null!=l)qm(a[l])&&(o=a[l]);else for(var u in a)if(a.hasOwnProperty(u)&&qm(a[u])&&!n[h(a[u])]){o=a[u];break}o&&(n[h(o)]=!0)}function h(t){return t.dim+"_"+t.index}}function qm(t){return t&&"category"!==t.type&&"time"!==t.type&&function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(0u[1]?-1:1,c=["start"===a?u[0]-h*l:"end"===a?u[1]+h*l:(u[0]+u[1])/2,sv(a)?t.labelOffset+r*l:0],d=e.get("nameRotate");null!=d&&(d=d*tv/180),sv(a)?n=nv(t.rotation,null!=d?d:t.rotation,r):(n=function(t,e,i,n){var o,a,r=Zl(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;o=Ul(r-tv/2)?(a=l?"bottom":"top","center"):Ul(r-1.5*tv)?(a=l?"top":"bottom","center"):(a="middle",r<1.5*tv&&tv/2l[1]&&l.reverse(),(null==r||r>l[1])&&(r=l[1]),r=i.r0}}});var ny=Math.PI/180;function oy(o,t,e,i,n,a,r,s,l,u){function h(t,e,i){for(var n=t;nl+r);n++)if(o[n].y+=i,to[n].y+o[n].height)return void c(n,i/2);c(e-1,i/2)}function c(t,e){for(var i=t;0<=i&&!(o[i].y-eo[i-1].y+o[i-1].height));i--);}function d(t,e,i,n,o,a){for(var r=e?Number.MAX_VALUE:0,s=0,l=t.length;s=e?v.push(o[y]):m.push(o[y]);d(m,!1,t,e,i,n),d(v,!0,t,e,i,n)}function ay(t){return"center"===t.position}function ry(L,k,P,t,N,e){var O,R,E=L.getData(),z=[],B=!1,V=(L.get("minShowLabelAngle")||0)*ny;E.each(function(t){var e=E.getItemLayout(t),i=E.getItemModel(t),n=i.getModel("label"),o=n.get("position")||i.get("emphasis.label.position"),a=n.get("distanceToLabelLine"),r=n.get("alignTo"),s=El(n.get("margin"),P),l=n.get("bleedMargin"),u=n.getFont(),h=i.getModel("labelLine"),c=h.get("length");c=El(c,P);var d=h.get("length2");if(d=El(d,P),!(e.anglei[0]&&isFinite(h)&&isFinite(i[0]););else{var l=o.getTicks().length-1;c":"\n";return au(""===r?this.name:r)+s+O(a,function(t,e){var i=o.get(o.mapDimension(t.dim),n);return au(t.name+" : "+i)}).join(s)},getTooltipPosition:function(t){if(null!=t)for(var e=this.getData(),i=this.coordinateSystem,n=e.getValues(O(i.dimensions,function(t){return e.mapDimension(t)}),t,!0),o=0,a=n.length;o":"\n";return l.join(", ")+d+au(r+" : "+a)},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}},nameProperty:"name"}}),jv);var Ey="\0_ec_interaction_mutex";function zy(t,e){return!!By(t)[e]}function By(t){return t[Ey]||(t[Ey]={})}function Vy(i){this.pointerChecker,this._zr=i,this._opt={};var t=A,n=t(Gy,this),o=t(Fy,this),a=t(Wy,this),r=t(Hy,this),s=t(Zy,this);Ct.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(t,e){this.disable(),this._opt=D(k(e)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(i.on("mousedown",n),i.on("mousemove",o),i.on("mouseup",a)),!0!==t&&"scale"!==t&&"zoom"!==t||(i.on("mousewheel",r),i.on("pinch",s))},this.disable=function(){i.off("mousedown",n),i.off("mousemove",o),i.off("mouseup",a),i.off("mousewheel",r),i.off("pinch",s)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function Gy(t){if(!(Yt(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function Fy(t){if(this._dragging&&Yy("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!zy(this._zr,"globalPan")){var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,a=e-n,r=i-o;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&Xt(t.event),Xy(this,"pan","moveOnMouseMove",t,{dx:a,dy:r,oldX:n,oldY:o,newX:e,newY:i})}}function Wy(t){Yt(t)||(this._dragging=!1)}function Hy(t){var e=Yy("zoomOnMouseWheel",t,this._opt),i=Yy("moveOnMouseWheel",t,this._opt),n=t.wheelDelta,o=Math.abs(n),a=t.offsetX,r=t.offsetY;if(0!==n&&(e||i)){if(e){var s=3e&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;ei&&(i=t.depth)});var a=t.expandAndCollapse&&0<=t.initialTreeDepth?t.initialTreeDepth:i;return o.root.eachNode("preorder",function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=a}),o.data},getOrient:function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},formatTooltip:function(t){for(var e=this.getData().tree,i=e.root.children[0],n=e.getNodeByDataIndex(t),o=n.getValue(),a=n.name;n&&n!==i;)a=n.parentNode.name+"."+a,n=n.parentNode;return au(a+(isNaN(o)||null==o?"":" : "+o))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderColor:"#c23531",borderWidth:1.5},label:{show:!0,color:"#555"},leaves:{label:{show:!0}},animationEasing:"linear",animationDuration:700,animationDurationUpdate:1e3}});var zx=Cs({shape:{parentPoint:[],childPoints:[],orient:"",forkPosition:""},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.childPoints,n=i.length,o=e.parentPoint,a=i[0],r=i[n-1];if(1===n)return t.moveTo(o[0],o[1]),void t.lineTo(a[0],a[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,h=El(e.forkPosition,1),c=[];c[l]=o[l],c[u]=o[u]+(r[u]-o[u])*h,t.moveTo(o[0],o[1]),t.lineTo(c[0],c[1]),t.moveTo(a[0],a[1]),c[l]=a[l],t.lineTo(c[0],c[1]),c[l]=r[l],t.lineTo(c[0],c[1]),t.lineTo(r[0],r[1]);for(var d=1;dx.x)||(m-=Math.PI);var b=v?"left":"right",S=a.labelModel.get("rotate"),M=S*(Math.PI/180);g.setStyle({textPosition:a.labelModel.get("position")||b,textRotation:null==S?-m:M,textOrigin:"center",verticalAlign:"middle"})}!function(t,e,i,n,o,a,r,s,l){var u=l.edgeShape,h=n.__edge;if("curve"===u)e.parentNode&&e.parentNode!==i&&cl(h=h||(n.__edge=new ds({shape:Wx(l,o,o),style:D({opacity:0,strokeNoScale:!0},l.lineStyle)})),{shape:Wx(l,a,r),style:D({opacity:1},l.lineStyle)},t);else if("polyline"===u&&"orthogonal"===l.layout&&e!==i&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var c=e.children,d=[],f=0;fh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)});var d=u===h?1:r(u,h)/2,f=d-u.getLayout().x,p=0,g=0,m=0,v=0;if("radial"===n)p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),Hx(l,function(t){m=(t.getLayout().x+f)*p,v=(t.depth-1)*g;var e=Px(m,v);t.setLayout({x:e.x,y:e.y,rawX:m,rawY:v},!0)});else{var y=t.getOrient();"RL"===y||"LR"===y?(g=a/(h.getLayout().x+d+f),p=o/(c.depth-1||1),Hx(l,function(t){v=(t.getLayout().x+f)*g,m="LR"===y?(t.depth-1)*p:o-(t.depth-1)*p,t.setLayout({x:m,y:v},!0)})):"TB"!==y&&"BT"!==y||(p=o/(h.getLayout().x+d+f),g=a/(c.depth-1||1),Hx(l,function(t){m=(t.getLayout().x+f)*p,v="TB"===y?(t.depth-1)*g:a-(t.depth-1)*g,t.setLayout({x:m,y:v},!0)}))}}}(t,e)})}),sc.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],preventUsingHoverLayer:!0,_viewRoot:null,defaultOption:{progressive:0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i={name:t.name,children:t.data};!function i(t){var n=0;R(t.children,function(t){i(t);var e=t.value;L(e)&&(e=e[0]),n+=e});var e=t.value;L(e)&&(e=e[0]);null!=e&&!isNaN(e)||(e=n);e<0&&(e=0);L(t.value)?t.value[0]=e:t.value=e}(i);var n=t.levels||[],o=new Cl({itemStyle:this.designatedVisualItemStyle={}},this,e),a=O((n=t.levels=function(t,e){var n,i=e.get("color");if(!i)return;if(R(t=t||[],function(t){var e=new Cl(t),i=e.get("color");(e.get("itemStyle.color")||i&&"none"!==i)&&(n=!0)}),!n){(t[0]||(t[0]={})).color=i.slice()}return t}(n,e))||[],function(t){return new Cl(t,o,e)},this),r=Ax.createTree(i,this,function(t){t.wrapMethod("getItemModel",function(t,e){var i=r.getNodeByDataIndex(e),n=a[i.depth];return t.parentModel=n||o,t})});return r.data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=L(i)?tu(i[0]):tu(i);return au(e.getName(t)+": "+n)},getDataParams:function(t){var e=sc.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=Yx(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},P(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=Q(),this._idIndexMapCount=0);var i=e.get(t);return null==i&&e.set(t,i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}});var jx=5;function qx(t){this.group=new Ci,t.add(this.group)}function Kx(t,e,i,n,o,a){var r=[[o?t:t-jx,e],[t+i,e],[t+i,e+n],[o?t:t-jx,e+n]];return a||r.splice(2,0,[t+i+jx,e+n/2]),o||r.push([t,e+n/2]),r}qx.prototype={constructor:qx,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),a=this.group;if(a.removeAll(),o.get("show")&&i){var r=o.getModel("itemStyle"),s=r.getModel("textStyle"),l={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,l,s),this._renderContent(t,l,r,s,n),Su(a,l.pos,l.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),a=i.getTextRect(o),r=Math.max(a.width+16,e.emptyItemWidth);e.totalWidth+=r+8,e.renderList.push({node:n,text:o,width:r})}},_renderContent:function(t,e,i,n,o){for(var a,r,s=0,l=e.emptyItemWidth,u=t.get("breadcrumb.height"),h=function(t,e,i){var n=e.width,o=e.height,a=El(t.x,n),r=El(t.y,o),s=El(t.x2,n),l=El(t.y2,o);return(isNaN(a)||isNaN(parseFloat(t.x)))&&(a=0),(isNaN(s)||isNaN(parseFloat(t.x2)))&&(s=n),(isNaN(r)||isNaN(parseFloat(t.y)))&&(r=0),(isNaN(l)||isNaN(parseFloat(t.y2)))&&(l=o),i=iu(i||0),{width:Math.max(s-a-i[1]-i[3],0),height:Math.max(l-r-i[0]-i[2],0)}}(e.pos,e.box),c=e.totalWidth,d=e.renderList,f=d.length-1;0<=f;f--){var p=d[f],g=p.node,m=p.width,v=p.text;c>h.width&&(c-=m-l,m=l,v=null);var y=new Qr({shape:{points:Kx(s,0,m,u,f===d.length-1,0===f)},style:D(i.getItemStyle(),{lineJoin:"bevel",text:v,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:T(o,g)});this.group.add(y),a=t,r=g,y.eventData={componentType:"series",componentSubType:"treemap",componentIndex:a.componentIndex,seriesIndex:a.componentIndex,seriesName:a.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:r&&r.dataIndex,name:r&&r.name},treePathInfo:r&&Yx(r,a)},s+=m+8}},remove:function(){this.group.removeAll()}};function $x(t){var e=s_(t);return e.stroke=e.fill=e.lineWidth=null,e}var Jx=A,Qx=Ci,t_=rs,e_=R,i_=["label"],n_=["emphasis","label"],o_=["upperLabel"],a_=["emphasis","upperLabel"],r_=10,s_=ha([["fill","color"],["stroke","strokeColor"],["lineWidth","strokeWidth"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);function l_(h,r,s,l,u,e,c,t,i,n){if(c){var d=c.getLayout(),o=h.getData();if(o.setItemGraphicEl(c.dataIndex,null),d&&d.isInView){var f=d.width,p=d.height,g=d.borderWidth,m=d.invisible,v=c.getRawIndex(),y=t&&t.getRawIndex(),a=c.viewChildren,x=d.upperHeight,_=a&&a.length,w=c.getModel("itemStyle"),b=c.getModel("emphasis.itemStyle"),S=L("nodeGroup",Qx);if(S){if(i.add(S),S.attr("position",[d.x||0,d.y||0]),S.__tmNodeWidth=f,S.__tmNodeHeight=p,d.isAboveViewRoot)return S;var M=c.getModel(),I=L("background",t_,n,1);if(I&&function(t,e,i){if(e.dataIndex=c.dataIndex,e.seriesIndex=h.seriesIndex,e.setShape({x:0,y:0,width:f,height:p}),m)A(e);else{e.invisible=!1;var n=c.getVisual("borderColor",!0),o=b.get("borderColor"),a=$x(w);a.fill=n;var r=s_(b);if(r.fill=o,i){var s=f-2*g;D(a,r,n,s,x,{x:g,y:0,width:s,height:x})}else a.text=r.text=null;e.setStyle(a),Us(e,r)}t.add(e)}(S,I,_&&d.upperLabelHeight),_)Qs(S)&&Js(S,!1),I&&(Js(I,!0),o.setItemGraphicEl(c.dataIndex,I));else{var T=L("content",t_,n,2);T&&function(t,e){e.dataIndex=c.dataIndex,e.seriesIndex=h.seriesIndex;var i=Math.max(f-2*g,0),n=Math.max(p-2*g,0);if(e.culling=!0,e.setShape({x:g,y:g,width:i,height:n}),m)A(e);else{e.invisible=!1;var o=c.getVisual("color",!0),a=$x(w);a.fill=o;var r=s_(b);D(a,r,o,i,n),e.setStyle(a),Us(e,r)}t.add(e)}(S,T),I&&Qs(I)&&Js(I,!1),Js(S,!0),o.setItemGraphicEl(c.dataIndex,S)}return S}}}function A(t){t.invisible||e.push(t)}function D(t,e,i,n,o,a){var r=M.get("name"),s=M.getModel(a?o_:i_),l=M.getModel(a?a_:n_),u=s.getShallow("show");el(t,e,s,l,{defaultText:u?r:null,autoColor:i,isRectText:!0,labelFetcher:h,labelDataIndex:c.dataIndex,labelProp:a?"upperLabel":"label"}),C(t,a,d),C(e,a,d),a&&(t.textRect=k(a)),t.truncate=u&&s.get("ellipsis")?{outerWidth:n,outerHeight:o,minChar:2}:null}function C(t,e,i){var n=t.text;if(!e&&i.isLeafRoot&&null!=n){var o=h.get("drillDownIcon",!0);t.text=o?o+" "+n:n}}function L(t,e,i,n){var o=null!=y&&s[t][y],a=u[t];return o?(s[t][y]=null,function(t,e,i){(t[v]={}).old="nodeGroup"===i?e.position.slice():P({},e.shape)}(a,o,t)):m||((o=new e({z:function(t,e){var i=t*r_+e;return(i-1)/i}(i,n)})).__tmDepth=i,function(t,e,i){var n=t[v]={},o=c.parentNode;if(o&&(!l||"drillDown"===l.direction)){var a=0,r=0,s=u.background[o.getRawIndex()];!l&&s&&s.old&&(a=s.old.width,r=s.old.height),n.old="nodeGroup"===i?[0,r]:{x:a,y:r,width:0,height:0}}n.fadein="nodeGroup"!==i}(a,0,o.__tmStorageName=t)),r[t][v]=o}}Cf({type:"treemap",init:function(t,e){this._containerGroup,this._storage={nodeGroup:[],background:[],content:[]},this._oldTree,this._breadcrumb,this._controller,this._state="ready"},render:function(t,e,i,n){if(!(_(e.findComponents({mainType:"series",subType:"treemap",query:n}),t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var o=Zx(n,["treemapZoomToNode","treemapRootToNode"],t),a=n&&n.type,r=t.layoutInfo,s=!this._oldTree,l=this._storage,u="treemapRootToNode"===a&&o&&l?{rootNodeGroup:l.nodeGroup[o.node.getRawIndex()],direction:n.direction}:null,h=this._giveContainerGroup(r),c=this._doRender(h,t,u);s||a&&"treemapZoomToNode"!==a&&"treemapRootToNode"!==a?c.renderFinally():this._doAnimation(h,c,t,u),this._resetController(i),this._renderBreadcrumb(t,i,o)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new Qx,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){var n=e.getData().tree,o=this._oldTree,a={nodeGroup:[],background:[],content:[]},r={nodeGroup:[],background:[],content:[]},s=this._storage,l=[],c=T(l_,e,r,s,i,a,l);!function a(r,s,l,u,h){u?e_(s=r,function(t,e){t.isRemoved()||i(e,e)}):new kf(s,r,t,t).add(i).update(i).remove(T(i,null)).execute();function t(t){return t.getId()}function i(t,e){var i=null!=t?r[t]:null,n=null!=e?s[e]:null,o=c(i,n,l,h);o&&a(i&&i.viewChildren||[],n&&n.viewChildren||[],o,u,h+1)}}(n.root?[n.root]:[],o&&o.root?[o.root]:[],t,n===o||!o,0);var u,h,d=(h={nodeGroup:[],background:[],content:[]},(u=s)&&e_(u,function(t,e){var i=h[e];e_(t,function(t){t&&(i.push(t),t.__tmWillDelete=1)})}),h);return this._oldTree=n,this._storage=r,{lastsForAnimation:a,willDeleteEls:d,renderFinally:function(){e_(d,function(t){e_(t,function(t){t.parent&&t.parent.remove(t)})}),e_(l,function(t){t.invisible=!0,t.dirty()})}}},_doAnimation:function(t,a,e,s){if(e.get("animation")){var l=e.get("animationDurationUpdate"),u=e.get("animationEasing"),h=function(){var a,r=[],s={};return{add:function(t,e,i,n,o){return E(n)&&(o=n,n=0),!s[t.id]&&(s[t.id]=1,r.push({el:t,target:e,time:i,delay:n,easing:o}),!0)},done:function(t){return a=t,this},start:function(){for(var t=r.length,e=0,i=r.length;e=o.length||t===o[t.depth]){var i=E_(r,l,t,e,g,a);n(t,i,o,a)}})}else c=P_(l),t.setVisual("color",c)}(o,{},t.getViewRoot().getAncestors(),t)}};function k_(i,n,t){var o=P({},n),a=t.designatedVisualItemStyle;return R(["color","colorAlpha","colorSaturation"],function(t){a[t]=n[t];var e=i.get(t);(a[t]=null)!=e&&(o[t]=e)}),o}function P_(t){var e=N_(t,"color");if(e){var i=N_(t,"colorAlpha"),n=N_(t,"colorSaturation");return n&&(e=qe(e,null,null,n)),i&&(e=Ke(e,i)),e}}function N_(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function O_(t,e,i,n,o,a){if(a&&a.length){var r=R_(e,"color")||null!=o.color&&"none"!==o.color&&(R_(e,"colorAlpha")||R_(e,"colorSaturation"));if(r){var s=e.get("visualMin"),l=e.get("visualMax"),u=i.dataExtent.slice();null!=s&&su[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:r.name,dataExtent:u,visual:r.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var d=new g_(c);return d.__drColorMappingBy=h,d}}}function R_(t,e){var i=t.get(e);return D_(i)&&i.length?{name:e,range:i}:null}function E_(t,e,i,n,o,a){var r=P({},e);if(o){var s=o.type,l="color"===s&&o.__drColorMappingBy,u="index"===l?n:"id"===l?a.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));r[s]=o.mapValueToVisual(u)}return r}var z_=Math.max,B_=Math.min,V_=W,G_=R,F_=["itemStyle","borderWidth"],W_=["itemStyle","gapWidth"],H_=["upperLabel","show"],Z_=["upperLabel","height"],U_={seriesType:"treemap",reset:function(t,e,i,n){var o=i.getWidth(),a=i.getHeight(),r=t.option,s=bu(t.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()}),l=r.size||[],u=El(V_(s.width,l[0]),o),h=El(V_(s.height,l[1]),a),c=n&&n.type,d=Zx(n,["treemapZoomToNode","treemapRootToNode"],t),f="treemapRender"===c||"treemapMove"===c?n.rootRect:null,p=t.getViewRoot(),g=Ux(p);if("treemapMove"!==c){var m="treemapZoomToNode"===c?function(t,e,i,n,o){var a,r=(e||{}).node,s=[n,o];if(!r||r===i)return s;var l=n*o,u=l*t.option.zoomToNodeRatio;for(;a=r.parentNode;){for(var h=0,c=a.children,d=0,f=c.length;ds[1]&&(s[1]=e)})}else s=[NaN,NaN];return{sum:n,dataExtent:s}}(e,r,s);if(0===u.sum)return t.viewChildren=[];if(u.sum=function(t,e,i,n,o){if(!n)return i;for(var a=t.get("visibleMin"),r=o.length,s=r,l=r-1;0<=l;l--){var u=o["asc"===n?r-l-1:l].getValue();u/i*ei[l[r]])&&(h=i[l[r]]);for(var c=0,d=t.length;c "+d)),u++)}var f,p=i.get("coordinateSystem");if("cartesian2d"===p||"polar"===p)f=gp(t,i);else{var g=lh.get(p),m=g&&"view"!==g.type&&g.dimensions||[];_(m,"value")<0&&m.concat(["value"]);var v=lp(t,{coordDimensions:m});(f=new Yf(v,i)).initData(t)}var y=new Yf(["value"],i);return y.initData(l,s),o&&o(f,y),yx({mainData:f,struct:a,structAttr:"graph",datas:{node:f,edge:y},datasAttr:{node:"data",edge:"edgeData"}}),a.update(),a}var nw="--\x3e",ow=function(t){return t.get("autoCurveness")||null},aw=function(t,e){var i=ow(t),n=20,o=[];if("number"==typeof i)n=i;else if(L(i))return void(t.__curvenessList=i);n ")),o.value&&(l+=" : "+au(o.value)),l},_updateCategoriesData:function(){var t=O(this.option.categories||[],function(t){return null!=t.value?t:P({value:0},t)}),e=new Yf(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},isAnimationEnabled:function(){return dw.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,opacity:.5},emphasis:{label:{show:!0}}}}),fw=ls.prototype,pw=ds.prototype;function gw(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var mw=Cs({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){this[gw(e)?"_buildPathLine":"_buildPathCurve"](t,e)},_buildPathLine:fw.buildPath,_buildPathCurve:pw.buildPath,pointAt:function(t){return this[gw(this.shape)?"_pointAtLine":"_pointAtCurve"](t)},_pointAtLine:fw.pointAt,_pointAtCurve:pw.pointAt,tangentAt:function(t){var e=this.shape,i=gw(e)?[e.x2-e.x1,e.y2-e.y1]:this._tangentAtCurve(t);return mt(i,i)},_tangentAtCurve:pw.tangentAt}),vw=["fromSymbol","toSymbol"];function yw(t){return"_"+t+"Type"}function xw(t,e,i){var n=e.getItemVisual(i,t);if(n&&"none"!==n){var o=e.getItemVisual(i,"color"),a=e.getItemVisual(i,t+"Size"),r=e.getItemVisual(i,t+"Rotate");L(a)||(a=[a,a]);var s=wg(n,-a[0]/2,-a[1]/2,a[0],a[1],o);return s.__specifiedRotation=null==r||isNaN(r)?void 0:+r*Math.PI/180||0,s.name=t,s}}function _w(t,e){t.x1=e[0][0],t.y1=e[0][1],t.x2=e[1][0],t.y2=e[1][1],t.percent=1;var i=e[2];i?(t.cpx1=i[0],t.cpy1=i[1]):(t.cpx1=NaN,t.cpy1=NaN)}function ww(t,e,i){Ci.call(this),this._createLine(t,e,i)}var bw=ww.prototype;function Sw(t){this._ctor=t||ww,this.group=new Ci}bw.beforeUpdate=function(){var t=this.childOfName("fromSymbol"),e=this.childOfName("toSymbol"),i=this.childOfName("label");if(t||e||!i.ignore){for(var n=1,o=this.parent;o;)o.scale&&(n/=o.scale[0]),o=o.parent;var a=this.childOfName("line");if(this.__dirty||a.__dirty){var r=a.shape.percent,s=a.pointAt(0),l=a.pointAt(r),u=ht([],l,s);if(mt(u,u),t){if(t.attr("position",s),null==(c=t.__specifiedRotation)){var h=a.tangentAt(0);t.attr("rotation",Math.PI/2-Math.atan2(h[1],h[0]))}else t.attr("rotation",c);t.attr("scale",[n*r,n*r])}if(e){var c;if(e.attr("position",l),null==(c=e.__specifiedRotation)){h=a.tangentAt(1);e.attr("rotation",-Math.PI/2-Math.atan2(h[1],h[0]))}else e.attr("rotation",c);e.attr("scale",[n*r,n*r])}if(!i.ignore){var d,f,p,g;i.attr("position",l);var m=i.__labelDistance,v=m[0]*n,y=m[1]*n,x=r/2,_=[(h=a.tangentAt(x))[1],-h[0]],w=a.pointAt(x);0<_[1]&&(_[0]=-_[0],_[1]=-_[1]);var b,S=h[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var M=-Math.atan2(h[1],h[0]);l[0]=t&&(0===e?0:n[e-1][0])a&&(e[1-n]=e[n]+c.sign*a),e}function lb(t,e){var i=t[e]-t[1-e];return{span:Math.abs(i),sign:0o*(1-h[0])?(l="jump",r=s-o*(1-h[2])):0<=(r=s-o*h[1])&&(r=s-o*(1-h[1]))<=0&&(r=0),(r*=e.axisExpandWidth/u)?sb(r,n,a,"all"):l="none";else{o=n[1]-n[0];(n=[db(0,a[1]*s/o-o/2)])[1]=cb(a[1],n[0]+o),n[0]=n[1]-o}return{axisExpandWindow:n,behavior:l}}},lh.register("parallel",{create:function(n,o){var a=[];return n.eachComponent("parallel",function(t,e){var i=new vb(t,n,o);i.name="parallel_"+e,i.resize(t,o),(t.coordinateSystem=i).model=t,a.push(i)}),n.eachSeries(function(t){if("parallel"===t.get("coordinateSystem")){var e=n.queryComponents({mainType:"parallel",index:t.get("parallelIndex"),id:t.get("parallelId")})[0];t.coordinateSystem=e.coordinateSystem}}),a}});var xb=ku.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return ha([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]])(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=k(t);if(e)for(var i=e.length-1;0<=i;i--)Bl(e[i])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(t))return"inactive";if(1===e.length){var i=e[0];if(i[0]<=t&&t<=i[1])return"active"}else for(var n=0,o=e.length;nn.getWidth()||i<0||i>n.getHeight()}(t,e)){var n=t._zr,o=t._covers,a=Fb(t,e,i);if(!t._dragging)for(var r=0;rf&&(f=m.depth),g.setLayout({depth:v?m.depth:c},!0),"vertical"===a?g.setLayout({dy:i},!0):g.setLayout({dx:i},!0);for(var y=0;y "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},getProgressiveThreshold:function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}});function bM(t,e,i){Ci.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}var SM=bM.prototype;function MM(t,e,i){Ci.call(this),this._createPolyline(t,e,i)}SM.createLine=function(t,e,i){return new ww(t,e,i)},SM._updateEffectSymbol=function(t,e){var i=t.getItemModel(e).getModel("effect"),n=i.get("symbolSize"),o=i.get("symbol");L(n)||(n=[n,n]);var a=i.get("color")||t.getItemVisual(e,"color"),r=this.childAt(1);this._symbolType!==o&&(this.remove(r),(r=wg(o,-.5,-.5,1,1,a)).z2=100,r.culling=!0,this.add(r)),r&&(r.setStyle("shadowColor",a),r.setStyle(i.getItemStyle(["color"])),r.attr("scale",n),r.setColor(a),r.attr("scale",n),this._symbolType=o,this._symbolScale=n,this._updateEffectAnimation(t,i,e))},SM._updateEffectAnimation=function(e,t,i){var n=this.childAt(1);if(n){var o=this,a=e.getItemLayout(i),r=1e3*t.get("period"),s=t.get("loop"),l=t.get("constantSpeed"),u=W(t.get("delay"),function(t){return t/e.count()*r/3}),h="function"==typeof u;if(n.ignore=!0,this.updateAnimationPoints(n,a),0e);r++);r=Math.min(r-1,o-2)}wt(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var s=i[r+1][0]-i[r][0],l=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(l,s)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},w(TM,bM);var DM=Cs({shape:{polyline:!1,curveness:0,segs:[]},buildPath:function(t,e){var i=e.segs,n=e.curveness;if(e.polyline)for(var o=0;o=e[0]&&t<=e[1]}}(y,e.option.range):function(e,n,o){var i=e[1]-e[0],a=(n=O(n,function(t){return{interval:[(t.interval[0]-e[0])/i,(t.interval[1]-e[0])/i]}})).length,r=0;return function(t){for(var e=r;e=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0==o?i.y+i.height/2:i.x+i.width/2,n}}).dimensions});var sI=["axisLine","axisTickLabel","axisName"],lI=["splitArea","splitLine"],uI=mv.extend({type:"singleAxis",axisPointerClass:"SingleAxisPointer",render:function(e,t,i,n){var o=this.group;o.removeAll();var a=this._axisGroup;this._axisGroup=new Ci;var r=rI(e),s=new Qm(e,r);R(sI,s.add,s),o.add(this._axisGroup),o.add(s.getGroup()),R(lI,function(t){e.get(t+".show")&&this["_"+t](e)},this),ml(a,this._axisGroup,e),uI.superCall(this,"render",e,t,i,n)},remove:function(){bv(this)},_splitLine:function(t){var e=t.axis;if(!e.scale.isBlank()){var i=t.getModel("splitLine"),n=i.getModel("lineStyle"),o=n.get("width"),a=n.get("color");a=a instanceof Array?a:[a];for(var r=t.coordinateSystem.getRect(),s=e.isHorizontal(),l=[],u=0,h=e.getTicksCoords({tickModel:i}),c=[],d=[],f=0;fr)return!0;if(a){var s=fv(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>r}return!1},makeElOption:function(t,e,i,n,o){},createPointerEl:function(t,e,i,n){var o=e.pointer;if(o){var a=AI(t).pointerEl=new bl[o.type](DI(e.pointer));t.add(a)}},createLabelEl:function(t,e,i,n){if(e.label){var o=AI(t).labelEl=new rs(DI(e.label));t.add(o),PI(o,n)}},updatePointerEl:function(t,e,i){var n=AI(t).pointerEl;n&&e.pointer&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var o=AI(t).labelEl;o&&(o.setStyle(e.label.style),i(o,{shape:e.label.shape,position:e.label.position}),PI(o,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e,i=this._axisPointerModel,n=this._api.getZr(),o=this._handle,a=i.getModel("handle"),r=i.get("status");if(!a.get("show")||!r||"hide"===r)return o&&n.remove(o),void(this._handle=null);this._handle||(e=!0,o=this._handle=yl(a.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){Xt(t.event)},onmousedown:CI(this._onHandleDragMove,this,0,0),drift:CI(this._onHandleDragMove,this),ondragend:CI(this._onHandleDragEnd,this)}),n.add(o)),OI(o,i,!1);o.setStyle(a.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=a.get("size");L(s)||(s=[s,s]),o.attr("scale",[s[0]/2,s[1]/2]),kc(this,"_doDispatchAxisPointer",a.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},_moveHandleToValue:function(t,e){kI(this._axisPointerModel,!e&&this._moveAnimation,this._handle,NI(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(NI(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(NI(n)),AI(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},_onHandleDragEnd:function(t){if(this._dragging=!1,this._handle){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return{x:t[i=i||0],y:t[1-i],width:e[i],height:e[1-i]}}}).constructor=LI);var HI=LI.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.grid,s=n.get("type"),l=ZI(r,a).getOtherAxis(a).getGlobalExtent(),u=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var h=RI(n),c=UI[s](a,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}VI(e,t,_v(r.model,i),i,n,o)},getHandleTransform:function(t,e,i){var n=_v(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:BI(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.grid,r=o.getGlobalExtent(!0),s=ZI(a,o).getOtherAxis(o).getGlobalExtent(),l="x"===o.dim?0:1,u=t.position;u[l]+=e[l],u[l]=Math.min(r[1],u[l]),u[l]=Math.max(r[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{position:u,rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}}});function ZI(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}var UI={line:function(t,e,i){return{type:"Line",subPixelOptimize:!0,shape:GI([e,i[0]],[e,i[1]],XI(t))}},shadow:function(t,e,i){var n=Math.max(1,t.getBandWidth()),o=i[1]-i[0];return{type:"Rect",shape:FI([e-n/2,i[0]],[n,o],XI(t))}}};function XI(t){return"x"===t.dim?0:1}mv.registerAxisPointerClass("CartesianAxisPointer",HI),yf(function(t){if(t){t.axisPointer&&0!==t.axisPointer.length||(t.axisPointer={});var e=t.axisPointer.link;e&&!L(e)&&(t.axisPointer.link=[e])}}),xf(Ld.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=cv(t,e)}),_f({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},function(t,e,i){var n=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||A(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){xI(r)&&(r=cI({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=xI(r),u=o.axesInfo,h=s.axesInfo,c="leave"===n||xI(r),d={},f={},p={list:[],map:{}},g={showPointer:fI(mI,f),showTooltip:fI(vI,p)};dI(s.coordSysMap,function(t,e){var a=l||t.containPoint(r);dI(s.coordSysAxesInfo[e],function(t,e){var i=t.axis,n=function(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}(u,t);if(!c&&a&&(!u||n)){var o=n&&n.value;null!=o||l||(o=i.pointToData(r)),null!=o&&gI(t,o,g,!1,d)}})});var m={};return dI(h,function(o,t){var a=o.linkGroup;a&&!f[t]&&dI(a.axesInfo,function(t,e){var i=f[e];if(t!==o&&i){var n=i.value;a.mapper&&(n=o.axis.scale.parse(a.mapper(n,yI(t),yI(o)))),m[o.key]=n}})}),dI(m,function(t,e){gI(h[e],t,g,!0,d)}),function(o,t,e){var a=e.axesInfo=[];dI(t,function(t,e){var i=t.axisPointerModel.option,n=o[e];n?(t.useHandle||(i.status="show"),i.value=n.value,i.seriesDataIndices=(n.payloadBatch||[]).slice()):t.useHandle||(i.status="hide"),"show"===i.status&&a.push({axisDim:t.axis.dim,axisIndex:t.axis.model.componentIndex,value:i.value})})}(f,h,d),function(t,e,i,n){if(xI(e)||!t.list.length)return n({type:"hideTip"});var o=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:o.dataIndexInside,dataIndex:o.dataIndex,seriesIndex:o.seriesIndex,dataByCoordSys:t.list})}(p,r,t,a),function(t,e,i){var n=i.getZr(),o="axisPointerLastHighlights",a=pI(n)[o]||{},r=pI(n)[o]={};dI(t,function(t,e){var i=t.axisPointerModel.option;"show"===i.status&&dI(i.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;r[e]=t})});var s=[],l=[];R(a,function(t,e){r[e]||l.push(t)}),R(r,function(t,e){a[e]||s.push(t)}),l.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:l}),s.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:s})}(h,0,i),d}});var YI=["x","y"],jI=["width","height"],qI=LI.extend({makeElOption:function(t,e,i,n,o){var a=i.axis,r=a.coordinateSystem,s=JI(r,1-$I(a)),l=r.dataToPoint(e)[0],u=n.get("type");if(u&&"none"!==u){var h=RI(n),c=KI[u](a,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}VI(e,t,rI(i),i,n,o)},getHandleTransform:function(t,e,i){var n=rI(e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:BI(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i,n){var o=i.axis,a=o.coordinateSystem,r=$I(o),s=JI(a,r),l=t.position;l[r]+=e[r],l[r]=Math.min(s[1],l[r]),l[r]=Math.max(s[0],l[r]);var u=JI(a,1-r),h=(u[1]+u[0])/2,c=[h,h];return c[r]=l[r],{position:l,rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}}}),KI={line:function(t,e,i){return{type:"Line",subPixelOptimize:!0,shape:GI([e,i[0]],[e,i[1]],$I(t))}},shadow:function(t,e,i){var n=t.getBandWidth(),o=i[1]-i[0];return{type:"Rect",shape:FI([e-n/2,i[0]],[n,o],$I(t))}}};function $I(t){return t.isHorizontal()?0:1}function JI(t,e){var i=t.getRect();return[i[YI[e]],i[YI[e]]+i[jI[e]]]}mv.registerAxisPointerClass("SingleAxisPointer",qI),Af({type:"single"});var QI=sc.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(t){QI.superApply(this,"init",arguments),this.legendVisualProvider=new qv(A(this.getData,this),A(this.getRawData,this))},fixData:function(t){var e=t.length,i={},n=ta(t,function(t){return i.hasOwnProperty(t[0])||(i[t[0]]=-1),t[2]}),o=[];n.buckets.each(function(t,e){o.push({name:e,dataList:t})});for(var a=o.length,r=0;rMath.PI/2?"right":"left"):x&&"center"!==x?"left"===x?(f=u.r0+y,p>Math.PI/2&&(x="right")):"right"===x&&(f=u.r-y,p>Math.PI/2&&(x="left")):(f=(u.r+u.r0)/2,x="center"),d.attr("style",{text:l,textAlign:x,textVerticalAlign:M("verticalAlign")||"middle",opacity:M("opacity")});var _=f*g+u.cx,w=f*m+u.cy;d.attr("position",[_,w]);var b=M("rotate"),S=0;function M(t){var e=a.get(t);return null==e?o.get(t):e}"radial"===b?(S=-p)<-Math.PI/2&&(S+=Math.PI):"tangential"===b?(S=Math.PI/2-p)>Math.PI/2?S-=Math.PI:S<-Math.PI/2&&(S+=Math.PI):"number"==typeof b&&(S=b*Math.PI/180),d.attr("rotation",S)},sT._initEvents=function(t,e,i,n){t.off("mouseover").off("mouseout").off("emphasis").off("normal");function o(){r.onEmphasis(n)}function a(){r.onNormal()}var r=this;i.isAnimationEnabled()&&t.on("mouseover",o).on("mouseout",a).on("emphasis",o).on("normal",a).on("downplay",function(){r.onDownplay()}).on("highlight",function(){r.onHighlight()})},w(rT,Ci);_c.extend({type:"sunburst",init:function(){},render:function(o,a,t,e){var n=this;this.seriesModel=o,this.api=t,this.ecModel=a;var r=o.getData(),s=r.tree.root,i=o.getViewRoot(),l=this.group,u=o.get("renderLabelForZeroData"),h=[];i.eachNode(function(t){h.push(t)});var c=this._oldChildren||[];if(function(i,n){if(0===i.length&&0===n.length)return;function t(t){return t.getId()}function e(t,e){!function(t,e){u||!t||t.getValue()||(t=null);if(t!==s&&e!==s)if(e&&e.piece)t?(e.piece.updateData(!1,t,"normal",o,a),r.setItemGraphicEl(t.dataIndex,e.piece)):function(t){if(!t)return;t.piece&&(l.remove(t.piece),t.piece=null)}(e);else if(t){var i=new rT(t,o,a);l.add(i),r.setItemGraphicEl(t.dataIndex,i)}}(null==t?null:i[t],null==e?null:n[e])}new kf(n,i,t,t).add(e).update(e).remove(T(e,null)).execute()}(h,c),function(t,e){if(0=i.r0}}});var lT="sunburstRootToNode";_f({type:lT,update:"updateView"},function(o,t){t.eachComponent({mainType:"series",subType:"sunburst",query:o},function(t,e){var i=Zx(o,[lT],t);if(i){var n=t.getViewRoot();n&&(o.direction=Xx(n,i.node)?"rollUp":"drillDown"),t.resetViewRoot(i.node)}})});var uT="sunburstHighlight";_f({type:uT,update:"updateView"},function(n,t){t.eachComponent({mainType:"series",subType:"sunburst",query:n},function(t,e){var i=Zx(n,[uT],t);i&&(n.highlight=i.node)})});_f({type:"sunburstUnhighlight",update:"updateView"},function(i,t){t.eachComponent({mainType:"series",subType:"sunburst",query:i},function(t,e){i.unhighlight=!0})});var hT=Math.PI/180;function cT(t,e){if("function"==typeof e)return t.sort(e);var n="asc"===e;return t.sort(function(t,e){var i=(t.getValue()-e.getValue())*(n?1:-1);return 0==i?(t.dataIndex-e.dataIndex)*(n?-1:1):i})}function dT(a,r){return r=r||[0,0],O(["x","y"],function(t,e){var i=this.getAxis(t),n=r[e],o=a[e]/2;return"category"===i.type?i.getBandWidth():Math.abs(i.dataToCoord(n-o)-i.dataToCoord(n+o))},this)}Sf(T(iy,"sunburst")),bf(T(function(t,e,C,i){e.eachSeriesByType(t,function(t){var e=t.get("center"),i=t.get("radius");L(i)||(i=[0,i]),L(e)||(e=[e,e]);var n=C.getWidth(),o=C.getHeight(),h=Math.min(n,o),c=El(e[0],n),d=El(e[1],o),f=El(i[0],h/2),a=El(i[1],h/2),r=-t.get("startAngle")*hT,p=t.get("minAngle")*hT,g=t.getData().tree.root,s=t.getViewRoot(),m=s.depth,l=t.get("sort");null!=l&&!function e(t,i){var n=t.children||[];t.children=cT(n,i);n.length&&R(t.children,function(t){e(t,i)})}(s,l);var u=0;R(s.children,function(t){isNaN(t.getValue())||u++});var v=s.getValue(),y=Math.PI/(v||u)*2,x=0t[1]&&t.reverse(),{coordSys:{type:"polar",cx:o.cx,cy:o.cy,r:t[1],r0:t[0]},api:{coord:A(function(t){var e=a.dataToRadius(t[0]),i=r.dataToAngle(t[1]),n=o.coordToPoint([e,i]);return n.push(e,i*Math.PI/180),n}),size:A(gT,o)}}},calendar:function(i){var t=i.getRect(),e=i.getRangeInfo();return{coordSys:{type:"calendar",x:t.x,y:t.y,width:t.width,height:t.height,cellWidth:i.getCellWidth(),cellHeight:i.getCellHeight(),rangeInfo:{start:e.start,end:e.end,weeks:e.weeks,dayCount:e.allDay}},api:{coord:function(t,e){return i.dataToPoint(t,e)}}}}};function ST(t,e,i,n,o){null==i[t]||o||(e[t]=i[t],i[t]=n[t])}function MT(a,r,e,t){var i=a.get("renderItem"),n=a.coordinateSystem,o={};n&&(o=n.prepareCustoms?n.prepareCustoms():bT[n.type](n));var s,l,u,h,c,d=D({getWidth:t.getWidth,getHeight:t.getHeight,getZr:t.getZr,getDevicePixelRatio:t.getDevicePixelRatio,value:function(t,e){return null==e&&(e=s),r.get(r.getDimension(t||0),e)},style:function(t,e){null==e&&(e=s),g(e);var i=l.getModel(vT).getItemStyle();null!=c&&(i.fill=c);var n=r.getItemVisual(e,"opacity");null!=n&&(i.opacity=n);var o=t?CT(t,u):u;return nl(i,o,null,{autoColor:c,isRectText:!0}),i.text=o.getShallow("show")?H(a.getFormattedLabel(e,"normal"),Ug(r,e)):null,t&<(i,t),i},styleEmphasis:function(t,e){null==e&&(e=s),g(e);var i=l.getModel(yT).getItemStyle(),n=t?CT(t,h):h;return nl(i,n,null,{isRectText:!0},!0),i.text=n.getShallow("show")?Z(a.getFormattedLabel(e,"emphasis"),a.getFormattedLabel(e,"normal"),Ug(r,e)):null,t&<(i,t),i},visual:function(t,e){return null==e&&(e=s),r.getItemVisual(e,t)},barLayout:function(t){if(n.getBaseAxis){return function(t){var e=[],i=t.axis;if("category"===i.type){for(var n=i.getBandWidth(),o=0;oe[1]&&e.reverse();var i=t.getExtent(),n=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:e[0],r:e[1],startAngle:-i[0]*n,endAngle:-i[1]*n,clockwise:t.inverse,contain:function(t,e){var i=t-this.cx,n=e-this.cy,o=i*i+n*n,a=this.r,r=this.r0;return o<=a*a&&r*r<=o}}}};var GT=ku.extend({type:"polarAxis",axis:null,getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"polar",index:this.option.polarIndex,id:this.option.polarId})[0]}});m(GT.prototype,dg);var FT={splitNumber:5};function WT(t,e){return e.type||(e.data?"category":"value")}function HT(t,e){var i=this,n=i.getAngleAxis(),o=i.getRadiusAxis();if(n.scale.setExtent(1/0,-1/0),o.scale.setExtent(1/0,-1/0),t.eachSeries(function(t){if(t.coordinateSystem===i){var e=t.getData();R(e.mapDimension("radius",!0),function(t){o.scale.unionExtentFromData(e,pp(e,t))}),R(e.mapDimension("angle",!0),function(t){n.scale.unionExtentFromData(e,pp(e,t))})}}),rg(n.scale,n.model),rg(o.scale,o.model),"category"===n.type&&!n.onBand){var a=n.getExtent(),r=360/n.scale.count();n.inverse?a[1]+=r:a[1]-=r,n.setExtent(a[0],a[1])}}function ZT(t,e){if(t.type=e.get("type"),t.scale=sg(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,t.inverse=e.get("inverse"),"angleAxis"===e.mainType){t.inverse^=e.get("clockwise");var i=e.get("startAngle");t.setExtent(i,i+(t.inverse?-360:360))}(e.axis=t).model=e}Gm("angle",GT,WT,{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}}),Gm("radius",GT,WT,FT),Tf({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e;return this.ecModel.eachComponent(t,function(t){t.getCoordSysModel()===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}}),lh.register("polar",{dimensions:VT.prototype.dimensions,create:function(i,s){var l=[];return i.eachComponent("polar",function(t,e){var i=new VT(e);i.update=HT;var n=i.getRadiusAxis(),o=i.getAngleAxis(),a=t.findAxisModel("radiusAxis"),r=t.findAxisModel("angleAxis");ZT(n,a),ZT(o,r),function(t,e,i){var n=e.get("center"),o=i.getWidth(),a=i.getHeight();t.cx=El(n[0],o),t.cy=El(n[1],a);var r=t.getRadiusAxis(),s=Math.min(o,a)/2,l=e.get("radius");null==l?l=[0,"100%"]:L(l)||(l=[0,l]),l=[El(l[0],s),El(l[1],s)],r.inverse?r.setExtent(l[1],l[0]):r.setExtent(l[0],l[1])}(i,t,s),l.push(i),(t.coordinateSystem=i).model=t}),i.eachSeries(function(t){if("polar"===t.get("coordinateSystem")){var e=i.queryComponents({mainType:"polar",index:t.get("polarIndex"),id:t.get("polarId")})[0];t.coordinateSystem=e.coordinateSystem}}),l}});var UT=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function XT(t,e,i){e[1]>e[0]&&(e=e.slice().reverse());var n=t.coordToPoint([e[0],i]),o=t.coordToPoint([e[1],i]);return{x1:n[0],y1:n[1],x2:o[0],y2:o[1]}}function YT(t){return t.getRadiusAxis().inverse?0:1}function jT(t){var e=t[0],i=t[t.length-1];e&&i&&Math.abs(Math.abs(e.coord-i.coord)-360)<1e-4&&t.pop()}mv.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(e,t){if(this.group.removeAll(),e.get("show")){var i=e.axis,n=i.polar,o=n.getRadiusAxis().getExtent(),a=i.getTicksCoords(),r=i.getMinorTicksCoords(),s=O(i.getViewLabels(),function(t){return(t=k(t)).coord=i.dataToCoord(t.tickValue),t});jT(s),jT(a),R(UT,function(t){!e.get(t+".show")||i.scale.isBlank()&&"axisLine"!==t||this["_"+t](e,n,a,r,o,s)},this)}},_axisLine:function(t,e,i,n,o){var a,r=t.getModel("axisLine.lineStyle"),s=YT(e),l=s?0:1;(a=0===o[l]?new Yr({shape:{cx:e.cx,cy:e.cy,r:o[s]},style:r.getLineStyle(),z2:1,silent:!0}):new Kr({shape:{cx:e.cx,cy:e.cy,r:o[s],r0:o[l]},style:r.getLineStyle(),z2:1,silent:!0})).style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,n,o){var a=t.getModel("axisTick"),r=(a.get("inside")?-1:1)*a.get("length"),s=o[YT(e)],l=O(i,function(t){return new ls({shape:XT(e,[s,s+r],t.coord)})});this.group.add(Rs(l,{style:D(a.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_minorTick:function(t,e,i,n,o){if(n.length){for(var a=t.getModel("axisTick"),r=t.getModel("minorTick"),s=(a.get("inside")?-1:1)*r.get("length"),l=o[YT(e)],u=[],h=0;hr?"left":"right",u=Math.abs(a[1]-s)/o<.3?"middle":a[1]>s?"top":"bottom";p&&p[n]&&p[n].textStyle&&(i=new Cl(p[n].textStyle,g,g.ecModel));var h=new Ur({silent:Qm.isLabelSilent(c)});this.group.add(h),nl(h.style,i,{x:a[0],y:a[1],textFill:i.getTextColor()||c.get("axisLine.lineStyle.color"),text:t.formattedLabel,textAlign:l,textVerticalAlign:u}),v&&(h.eventData=Qm.makeAxisEventDataBase(c),h.eventData.targetType="axisLabel",h.eventData.value=t.rawLabel)},this)},_splitLine:function(t,e,i,n,o){var a=t.getModel("splitLine").getModel("lineStyle"),r=a.get("color"),s=0;r=r instanceof Array?r:[r];for(var l=[],u=0;um?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}(e,i,0,s,d))}});var JT={line:function(t,e,i,n,o){return"angle"===t.dim?{type:"Line",shape:GI(e.coordToPoint([n[0],i]),e.coordToPoint([n[1],i]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:i}}},shadow:function(t,e,i,n,o){var a=Math.max(1,t.getBandWidth()),r=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:WI(e.cx,e.cy,n[0],n[1],(-i-a/2)*r,(a/2-i)*r)}:{type:"Sector",shape:WI(e.cx,e.cy,i-a/2,i+a/2,0,2*Math.PI)}}};function QT(n,t){t.update="updateView",_f(t,function(t,e){var i={};return e.eachComponent({mainType:"geo",query:t},function(e){e[n](t.name),R(e.coordinateSystem.regions,function(t){i[t.name]=e.isSelected(t.name)||!1})}),{selected:i,name:t.name}})}mv.registerAxisPointerClass("PolarAxisPointer",$T),bf(T(function(t,e,i){var N={},O=function(t){var g={};R(t,function(t,e){var i=t.getData(),n=t.coordinateSystem,o=n.getBaseAxis(),a=RT(n,o),r=o.getExtent(),s="category"===o.type?o.getBandWidth():Math.abs(r[1]-r[0])/i.count(),l=g[a]||{bandWidth:s,remainedWidth:s,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},u=l.stacks;g[a]=l;var h=OT(t);u[h]||l.autoWidthCount++,u[h]=u[h]||{width:0,maxWidth:0};var c=El(t.get("barWidth"),s),d=El(t.get("barMaxWidth"),s),f=t.get("barGap"),p=t.get("barCategoryGap");c&&!u[h].width&&(c=Math.min(l.remainedWidth,c),u[h].width=c,l.remainedWidth-=c),d&&(u[h].maxWidth=d),null!=f&&(l.gap=f),null!=p&&(l.categoryGap=p)});var d={};return R(g,function(t,i){d[i]={};var e=t.stacks,n=t.bandWidth,o=El(t.categoryGap,n),a=El(t.gap,1),r=t.remainedWidth,s=t.autoWidthCount,l=(r-o)/(s+(s-1)*a);l=Math.max(l,0),R(e,function(t,e){var i=t.maxWidth;i&&i=n.start.time&&i.timea.end.time&&t.reverse(),t},_getRangeInfo:function(t){var e;(t=[this.getDateInfo(t[0]),this.getDateInfo(t[1])])[0].time>t[1].time&&(e=!0,t.reverse());var i=Math.floor(t[1].time/864e5)-Math.floor(t[0].time/864e5)+1,n=new Date(t[0].time),o=n.getDate(),a=t[1].date.getDate();n.setDate(o+i-1);var r=n.getDate();if(r!==a)for(var s=0n.weeks||0===t&&en.lweek)return!1;var o=7*(t-1)-n.fweek+e,a=new Date(n.start.time);return a.setDate(n.start.d+o),this.getDateInfo(a)}},tA.dimensions=tA.prototype.dimensions,tA.getDimensionsInfo=tA.prototype.getDimensionsInfo,tA.create=function(i,n){var o=[];return i.eachComponent("calendar",function(t){var e=new tA(t,i,n);o.push(e),t.coordinateSystem=e}),i.eachSeries(function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=o[t.get("calendarIndex")||0])}),o},lh.register("calendar",tA);var iA=ku.extend({type:"calendar",coordinateSystem:null,defaultOption:{zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},init:function(t,e,i,n){var o=Iu(t);iA.superApply(this,"init",arguments),nA(t,o)},mergeOption:function(t,e){iA.superApply(this,"mergeOption",arguments),nA(this.option,t)}});function nA(t,e){var i=t.cellSize;L(i)?1===i.length&&(i[1]=i[0]):i=t.cellSize=[i,i];var n=O([0,1],function(t){return function(t,e){return null!=t[xu[e][0]]||null!=t[xu[e][1]]&&null!=t[xu[e][2]]}(e,t)&&(i[t]="auto"),null!=i[t]&&"auto"!==i[t]});Mu(t,e,{type:"box",ignoreSize:n})}var oA={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},aA={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]};Af({type:"calendar",_tlpoints:null,_blpoints:null,_firstDayOfMonth:null,_firstDayPoints:null,render:function(t,e,i){var n=this.group;n.removeAll();var o=t.coordinateSystem,a=o.getRangeInfo(),r=o.getOrient();this._renderDayRect(t,a,n),this._renderLines(t,a,r,n),this._renderYearText(t,a,r,n),this._renderMonthText(t,r,n),this._renderWeekText(t,a,r,n)},_renderDayRect:function(t,e,i){for(var n=t.coordinateSystem,o=t.getModel("itemStyle").getItemStyle(),a=n.getCellWidth(),r=n.getCellHeight(),s=e.start.time;s<=e.end.time;s=n.getNextNDay(s,1).time){var l=n.dataToRect([s],!1).tl,u=new rs({shape:{x:l[0],y:l[1],width:a,height:r},cursor:"default",style:o});i.add(u)}},_renderLines:function(i,t,n,o){var a=this,r=i.coordinateSystem,s=i.getModel("splitLine.lineStyle").getLineStyle(),l=i.get("splitLine.show"),e=s.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=t.start,h=0;u.time<=t.end.time;h++){d(u.formatedDate),0===h&&(u=r.getDateInfo(t.start.y+"-"+t.start.m));var c=u.date;c.setMonth(c.getMonth()+1),u=r.getDateInfo(c)}function d(t){a._firstDayOfMonth.push(r.getDateInfo(t)),a._firstDayPoints.push(r.dataToRect([t],!1).tl);var e=a._getLinePointsOfOneWeek(i,t,n);a._tlpoints.push(e[0]),a._blpoints.push(e[e.length-1]),l&&a._drawSplitline(e,s,o)}d(r.getNextNDay(t.end.time,1).formatedDate),l&&this._drawSplitline(a._getEdgesPoints(a._tlpoints,e,n),s,o),l&&this._drawSplitline(a._getEdgesPoints(a._blpoints,e,n),s,o)},_getEdgesPoints:function(t,e,i){var n=[t[0].slice(),t[t.length-1].slice()],o="horizontal"===i?0:1;return n[0][o]=n[0][o]-e/2,n[1][o]=n[1][o]+e/2,n},_drawSplitline:function(t,e,i){var n=new ts({z2:20,shape:{points:t},style:e});i.add(n)},_getLinePointsOfOneWeek:function(t,e,i){var n=t.coordinateSystem;e=n.getDateInfo(e);for(var o=[],a=0;a<7;a++){var r=n.getNextNDay(e.time,a),s=n.dataToRect([r.time],!1);o[2*r.day]=s.tl,o[2*r.day+1]=s["horizontal"===i?"bl":"tr"]}return o},_formatterLabel:function(t,e){return"string"==typeof t&&t?uu(t,e):"function"==typeof t?t(e):e.nameMap},_yearTextPositionControl:function(t,e,i,n,o){e=e.slice();var a=["center","bottom"];"bottom"===n?(e[1]+=o,a=["center","top"]):"left"===n?e[0]-=o:"right"===n?(e[0]+=o,a=["center","top"]):e[1]-=o;var r=0;return"left"!==n&&"right"!==n||(r=Math.PI/2),{rotation:r,position:e,style:{textAlign:a[0],textVerticalAlign:a[1]}}},_renderYearText:function(t,e,i,n){var o=t.getModel("yearLabel");if(o.get("show")){var a=o.get("margin"),r=o.get("position");r=r||("horizontal"!==i?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===i?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},d=e.start.y;+e.end.y>+e.start.y&&(d=d+"-"+e.end.y);var f=o.get("formatter"),p={start:e.start.y,end:e.end.y,nameMap:d},g=this._formatterLabel(f,p),m=new Ur({z2:30});nl(m.style,o,{text:g}),m.attr(this._yearTextPositionControl(m,c[r],i,r,a)),n.add(m)}},_monthTextPositionControl:function(t,e,i,n,o){var a="left",r="top",s=t[0],l=t[1];return"horizontal"===i?(l+=o,e&&(a="center"),"start"===n&&(r="bottom")):(s+=o,e&&(r="middle"),"start"===n&&(a="right")),{x:s,y:l,textAlign:a,textVerticalAlign:r}},_renderMonthText:function(t,e,i){var n=t.getModel("monthLabel");if(n.get("show")){var o=n.get("nameMap"),a=n.get("margin"),r=n.get("position"),s=n.get("align"),l=[this._tlpoints,this._blpoints];E(o)&&(o=oA[o.toUpperCase()]||[]);var u="start"===r?0:1,h="horizontal"===e?0:1;a="start"===r?-a:a;for(var c="center"===s,d=0;dd.getHeight()&&(i.textPosition="top",a=!0);var r=a?-5-n.height:p+8;o+n.width/2>d.getWidth()?(i.textPosition=["100%",r],i.textAlign="right"):o-n.width/2<0&&(i.textPosition=[0,r],i.textAlign="left")}})}function t(t,e){var i,n=m[t],o=m[e],a=u[n],r=new Cl(a,h,h.ecModel);if(l&&null!=l.newTitle&&l.featureName===n&&(a.title=l.newTitle),n&&!o){if(function(t){return 0===t.indexOf("my")}(n))i={model:r,onclick:r.option.onclick,featureName:n};else{var s=fA(n);if(!s)return;i=new s(r,c,d)}g[n]=i}else{if(!(i=g[o]))return;i.model=r,i.ecModel=c,i.api=d}n||!o?r.get("show")&&!i.unusable?(function(o,a,t){var r=o.getModel("iconStyle"),s=o.getModel("emphasis.iconStyle"),e=a.getIcons?a.getIcons():o.get("icon"),l=o.get("title")||{};if("string"==typeof e){var i=e,n=l;l={},(e={})[t]=i,l[t]=n}var u=o.iconPaths={};R(e,function(t,e){var i=yl(t,{},{x:-p/2,y:-p/2,width:p,height:p});i.setStyle(r.getItemStyle()),i.hoverStyle=s.getItemStyle(),i.setStyle({text:l[e],textAlign:s.get("textAlign"),textBorderRadius:s.get("textBorderRadius"),textPadding:s.get("textPadding"),textFill:null});var n=h.getModel("tooltip");n&&n.get("show")&&i.attr("tooltip",P({content:l[e],formatter:n.get("formatter",!0)||function(){return l[e]},formatterParams:{componentType:"toolbox",name:e,title:l[e],$vars:["name","title"]},position:n.get("position",!0)||"bottom"},n.option)),$s(i),h.get("showTitle")&&(i.__title=l[e],i.on("mouseover",function(){var t=s.getItemStyle(),e="vertical"===h.get("orient")?null==h.get("right")?"right":"left":null==h.get("bottom")?"bottom":"top";i.setStyle({textFill:s.get("textFill")||t.fill||t.stroke||"#000",textBackgroundColor:s.get("textBackgroundColor"),textPosition:s.get("textPosition")||e})}).on("mouseout",function(){i.setStyle({textFill:null,textBackgroundColor:null})})),i.trigger(o.get("iconStatus."+e)||"normal"),f.add(i),i.on("click",A(a.onclick,a,c,d,e)),u[e]=i})}(r,i,n),r.setIconStatus=function(t,e){var i=this.option,n=this.iconPaths;i.iconStatus=i.iconStatus||{},i.iconStatus[t]=e,n[t]&&n[t].trigger(e)},i.render&&i.render(r,c,d,l)):i.remove&&i.remove(c,d):i.dispose&&i.dispose(c,d)}},updateView:function(t,e,i,n){R(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},remove:function(e,i){R(this._features,function(t){t.remove&&t.remove(e,i)}),this.group.removeAll()},dispose:function(e,i){R(this._features,function(t){t.dispose&&t.dispose(e,i)})}});var mA=Oc.toolbox.saveAsImage;function vA(t){this.model=t}vA.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:mA.title,type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:mA.lang.slice()},vA.prototype.unusable=!v.canvasSupported,vA.prototype.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o="svg"===e.getZr().painter.getType()?"svg":i.get("type",!0)||"png",a=e.getConnectedDataURL({type:o,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:i.get("connectedBackgroundColor"),excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if("function"!=typeof MouseEvent||v.browser.ie||v.browser.edge)if(window.navigator.msSaveOrOpenBlob){for(var r=atob(a.split(",")[1]),s=r.length,l=new Uint8Array(s);s--;)l[s]=r.charCodeAt(s);var u=new Blob([l]);window.navigator.msSaveOrOpenBlob(u,n+"."+o)}else{var h=i.get("lang"),c='';window.open().document.write(c)}else{var d=document.createElement("a");d.download=n+"."+o,d.target="_blank",d.href=a;var f=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});d.dispatchEvent(f)}},dA("saveAsImage",vA);var yA=Oc.toolbox.magicType,xA="__ec_magicType_stack__";function _A(t){this.model=t}_A.defaultOption={show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:k(yA.title),option:{},seriesIndex:{}};var wA=_A.prototype;wA.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return R(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var bA={line:function(t,e,i,n){if("bar"===t)return m({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.line")||{},!0)},bar:function(t,e,i,n){if("line"===t)return m({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.bar")||{},!0)},stack:function(t,e,i,n){var o=i.get("stack")===xA;if("line"===t||"bar"===t)return n.setIconStatus("stack",o?"normal":"emphasis"),m({id:e,stack:o?"":xA},n.get("option.stack")||{},!0)}},SA=[["line","bar"],["stack"]];wA.onclick=function(u,t,h){var c=this.model,e=c.get("seriesIndex."+h);if(bA[h]){var i,d={series:[]};if(R(SA,function(t){0<=_(t,h)&&R(t,function(t){c.setIconStatus(t,"normal")})}),c.setIconStatus(h,"emphasis"),u.eachComponent({mainType:"series",query:null==e?null:{seriesIndex:e}},function(t){var e=t.subType,i=t.id,n=bA[h](e,i,t,c);n&&(D(n,t.option),d.series.push(n));var o=t.coordinateSystem;if(o&&"cartesian2d"===o.type&&("line"===h||"bar"===h)){var a=o.getAxesByScale("ordinal")[0];if(a){var r=a.dim+"Axis",s=u.queryComponents({mainType:r,index:t.get(name+"Index"),id:t.get(name+"Id")})[0].componentIndex;d[r]=d[r]||[];for(var l=0;l<=s;l++)d[r][s]=d[r][s]||{};d[r][s].boundaryGap="bar"===h}}}),"stack"===h)i=d.series&&d.series[0]&&d.series[0].stack===xA?m({stack:yA.title.tiled},yA.title):k(yA.title);t.dispatchAction({type:"changeMagicType",currentType:h,newOption:d,newTitle:i,featureName:"magicType"})}},_f({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),dA("magicType",_A);var MA=Oc.toolbox.dataView,IA=new Array(60).join("-"),TA="\t";function AA(t){var e=function(t){var o={},a=[],r=[];return t.eachRawSeries(function(t){var e=t.coordinateSystem;if(!e||"cartesian2d"!==e.type&&"polar"!==e.type)a.push(t);else{var i=e.getBaseAxis();if("category"===i.type){var n=i.dim+"_"+i.index;o[n]||(o[n]={categoryAxis:i,valueAxis:e.getOtherAxis(i),series:[]},r.push({axisDim:i.dim,axisIndex:i.index})),o[n].series.push(t)}else a.push(t)}}),{seriesGroupByCategoryAxis:o,other:a,meta:r}}(t);return{value:M([function(t){var h=[];return R(t,function(t,e){var i=t.categoryAxis,n=t.valueAxis.dim,o=[" "].concat(O(t.series,function(t){return t.name})),a=[i.model.getCategories()];R(t.series,function(t){var e=t.getRawData();a.push(t.getRawData().mapArray(e.mapDimension(n),function(t){return t}))});for(var r=[o.join(TA)],s=0;st[1]&&t.reverse(),t}function GA(t,e){return Ko(t,e,{includeMainTypes:EA})}BA.setOutputRanges=function(t,e){this.matchOutputRanges(t,e,function(t,e,i){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var n=ZA[t.brushType](0,i,e);t.__rangeOffset={offset:XA[t.brushType](n.values,t.range,[1,1]),xyMinMax:n.xyMinMax}}})},BA.matchOutputRanges=function(t,n,o){PA(t,function(i){var t=this.findTargetInfo(i,n);t&&!0!==t&&R(t.coordSyses,function(t){var e=ZA[i.brushType](1,t,i.range);o(i,e.values,t,n)})},this)},BA.setInputRanges=function(t,o){PA(t,function(t){var e=this.findTargetInfo(t,o);if(t.range=t.range||[],e&&!0!==e){t.panelId=e.panelId;var i=ZA[t.brushType](0,e.coordSys,t.coordRange),n=t.__rangeOffset;t.range=n?XA[t.brushType](i.values,n.offset,function(t,e){var i=jA(t),n=jA(e),o=[i[0]/n[0],i[1]/n[1]];return isNaN(o[0])&&(o[0]=1),isNaN(o[1])&&(o[1]=1),o}(i.xyMinMax,n.xyMinMax)):i.values}},this)},BA.makePanelOpts=function(i,n){return O(this._targetInfoList,function(t){var e=t.getPanelRect();return{panelId:t.panelId,defaultBrushType:n&&n(t),clipPath:hS(e),isTargetByCursor:dS(e,i,t.coordSysModel),getLinearBrushOtherExtent:cS(e)}})},BA.controlSeries=function(t,e,i){var n=this.findTargetInfo(t,i);return!0===n||n&&0<=NA(n.coordSyses,e.coordinateSystem)},BA.findTargetInfo=function(t,e){for(var i=this._targetInfoList,n=GA(e,t),o=0;on[1]&&(n[1]=e[1])})}),n[1]c[1];if(r&&!s&&!l)return!0;r&&(n=!0),s&&(e=!0),l&&(i=!0)}return n&&e&&i}):rD(h,function(t){if("empty"===o)i.setData(u=u.map(t,function(t){return function(t){return t>=c[0]&&t<=c[1]}(t)?t:NaN}));else{var e={};e[t]=c,u.selectRange(e)}}),rD(h,function(t){u.setApproximateExtent(c,t)}))})}}};var uD=R,hD=nD,cD=Tf({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=dD(t);this.settledOption=n,this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=dD(t);m(this.option,t,!0),m(this.settledOption,e,!0),this.doInit(e)},doInit:function(t){var i=this.option;v.canvasSupported||(i.realtime=!1),this._setDefaultThrottle(t),fD(this,t);var n=this.settledOption;uD([["start","startValue"],["end","endValue"]],function(t,e){"value"===this._rangePropMode[e]&&(i[t[0]]=n[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var r=this._axisProxies;this.eachTargetAxis(function(t,e,i,n){var o=this.dependentModels[t.axis][e],a=o.__dzAxisProxy||(o.__dzAxisProxy=new aD(t.name,e,this,n));r[t.name+"_"+e]=a},this)},_resetTarget:function(){var i=this.option,t=this._judgeAutoMode();hD(function(t){var e=t.axisIndex;i[e]=Vo(i[e])},this),"axisIndex"===t?this._autoSetAxisIndex():"orient"===t&&this._autoSetOrient()},_judgeAutoMode:function(){var e=this.option,i=!1;hD(function(t){null!=e[t.axisIndex]&&(i=!0)},this);var t=e.orient;return null==t&&i?"orient":i?void 0:(null==t&&(e.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var a=!0,e=this.get("orient",!0),r=this.option,t=this.dependentModels;if(a){var i="vertical"===e?"y":"x";t[i+"Axis"].length?(r[i+"AxisIndex"]=[0],a=!1):uD(t.singleAxis,function(t){a&&t.get("orient",!0)===e&&(r.singleAxisIndex=[t.componentIndex],a=!1)})}a&&hD(function(t){if(a){var e=[],i=this.dependentModels[t.axis];if(i.length&&!e.length)for(var n=0,o=i.length;ne[0][1]&&(e[0][1]=a[0]),a[1]e[1][1]&&(e[1][1]=a[1])}return e&&eC(e)}};function eC(t){return new Di(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var iC=["#ddd"];Tf({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;e||WD(i,t,["inBrush","outOfBrush"]);var n=i.inBrush=i.inBrush||{};i.outOfBrush=i.outOfBrush||{color:iC},n.hasOwnProperty("liftZ")||(n.liftZ=5)},setAreas:function(t){t&&(this.areas=O(t,function(t){return nC(this.option,t)},this))},setBrushOption:function(t){this.brushOption=nC(this.option,t),this.brushType=this.brushOption.brushType}});function nC(t,e){return m({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new Cl(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}function oC(t,e,i,n){n&&n.$from===t.id||this._brushController.setPanels(t.brushTargetManager.makePanelOpts(i)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}Af({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new Ob(e.getZr())).on("brush",A(this._onBrush,this)).mount()},render:function(t){return this.model=t,oC.apply(this,arguments)},updateTransform:function(t,e){return KD(e),oC.apply(this,arguments)},updateView:oC,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var i=this.model.id;this.model.brushTargetManager.setOutputRanges(t,this.ecModel),e.isEnd&&!e.removeOnClick||this.api.dispatchAction({type:"brush",brushId:i,areas:k(t),$from:i}),e.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:i,areas:k(t),$from:i})}}),_f({type:"brush",event:"brush"},function(e,t){t.eachComponent({mainType:"brush",query:e},function(t){t.setAreas(e.areas)})}),_f({type:"brushSelect",event:"brushSelected",update:"none"},function(){}),_f({type:"brushEnd",event:"brushEnd",update:"none"},function(){});var aC=Oc.toolbox.brush;function rC(t,e,i){this.model=t,this.ecModel=e,this.api=i,this._brushType,this._brushMode}rC.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:k(aC.title)};var sC=rC.prototype;sC.render=sC.updateView=function(e,t,i){var n,o,a;t.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,R(e.get("type",!0),function(t){e.setIconStatus(t,("keep"===t?"multiple"===o:"clear"===t?a:t===n)?"emphasis":"normal")})},sC.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return R(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},sC.onclick=function(t,e,i){var n=this._brushType,o=this._brushMode;"clear"===i?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},dA("brush",rC),yf(function(t,e){var i=t&&t.brush;if(L(i)||(i=i?[i]:[]),i.length){var n=[];R(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(n=n.concat(e))});var o=t&&t.toolbox;L(o)&&(o=o[0]),o||(o={feature:{}},t.toolbox=[o]);var a=o.feature||(o.feature={}),r=a.brush||(a.brush={}),s=r.type||(r.type=[]);s.push.apply(s,n),function(i){var e={};R(i,function(t){e[t]=1}),i.length=0,R(e,function(t,e){i.push(e)})}(s),e&&!s.length&&s.push.apply(s,BD)}}),Tf({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),Af({type:"title",render:function(t,e,i){if(this.group.removeAll(),t.get("show")){var n=this.group,o=t.getModel("textStyle"),a=t.getModel("subtextStyle"),r=t.get("textAlign"),s=H(t.get("textBaseline"),t.get("textVerticalAlign")),l=new Ur({style:nl({},o,{text:t.get("text"),textFill:o.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new Ur({style:nl({},a,{text:h,textFill:a.getTextColor(),y:u.height+t.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),d=t.get("link"),f=t.get("sublink"),p=t.get("triggerEvent",!0);l.silent=!d&&!p,c.silent=!f&&!p,d&&l.on("click",function(){gu(d,"_"+t.get("target"))}),f&&c.on("click",function(){gu(f,"_"+t.get("subtarget"))}),l.eventData=c.eventData=p?{componentType:"title",componentIndex:t.componentIndex}:null,n.add(l),h&&n.add(c);var g=n.getBoundingRect(),m=t.getBoxLayoutParams();m.width=g.width,m.height=g.height;var v=bu(m,{width:i.getWidth(),height:i.getHeight()},t.get("padding"));r||("middle"===(r=t.get("left")||t.get("right"))&&(r="center"),"right"===r?v.x+=v.width:"center"===r&&(v.x+=v.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?v.y+=v.height:"middle"===s&&(v.y+=v.height/2),s=s||"top"),n.attr("position",[v.x,v.y]);var y={textAlign:r,textVerticalAlign:s};l.setStyle(y),c.setStyle(y),g=n.getBoundingRect();var x=v.margin,_=t.getItemStyle(["color","opacity"]);_.fill=t.get("backgroundColor");var w=new rs({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:t.get("borderRadius")},style:_,subPixelOptimize:!0,silent:!0});n.add(w)}}});function lC(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},o=n.normal||(n.normal={}),a={normal:1,emphasis:1};R(n,function(t,e){a[e]||uC(o,e)||(o[e]=t)}),i.label&&!uC(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function uC(t,e){return t.hasOwnProperty(e)}ku.registerSubTypeDefaulter("timeline",function(){return"slider"}),_f({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),D({currentIndex:i.option.currentIndex},t)}),_f({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var hC=ku.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){hC.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(e<=t&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],i=t.axisType,o=this._names=[];if("category"===i){var a=[];R(e,function(t,e){var i,n=Wo(t);z(t)?(i=k(t)).value=e:i=e,a.push(i),E(n)||null!=n&&!isNaN(n)||(n=""),o.push(n+"")}),e=a}var n={category:"ordinal",time:"time"}[i]||"number";(this._data=new Yf([{name:"value",type:n}],this)).initData(e,o)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});b(hC.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}}),Xh);function cC(t,e,i,n){Gg.call(this,t,e,i),this.type=n||"value",this.model=null}var dC=gc.extend({type:"timeline"});cC.prototype={constructor:cC,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},w(cC,Gg);var fC=A,pC=R,gC=Math.PI;function mC(t,e,i,n,o,a){var r=e.get("color");o?(o.setColor(r),i.add(o),a&&a.onUpdate(o)):((o=wg(t.get("symbol"),-1,-1,2,2,r)).setStyle("strokeNoScale",!0),i.add(o),a&&a.onCreate(o));var s=e.getItemStyle(["color","symbol","symbolSize"]);o.setStyle(s),n=m({rectHover:!0,z2:100},n,!0);var l=t.get("symbolSize");(l=l instanceof Array?l.slice():[+l,+l])[0]/=2,l[1]/=2,n.scale=l;var u=t.get("symbolOffset");if(u){var h=n.position=n.position||[0,0];h[0]+=El(u[0],l[0]),h[1]+=El(u[1],l[1])}var c=t.get("symbolRotate");return n.rotation=(c||0)*Math.PI/180||0,o.attr(n),o.updateTransform(),o}function vC(t,e,i,n,o){if(!t.dragging){var a=n.getModel("checkpointStyle"),r=i.dataToCoord(n.getData().get(["value"],e));o||!a.get("animation",!0)?t.attr({position:[r,0]}):(t.stopAnimation(!0),t.animateTo({position:[r,0]},a.get("animationDuration",!0),a.get("animationEasing",!0)))}}dC.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(e,t,i,n){if(this.model=e,this.api=i,this.ecModel=t,this.group.removeAll(),e.get("show",!0)){var o=this._layout(e,i),a=this._createGroup("mainGroup"),r=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,e);e.formatTooltip=function(t){return au(s.scale.getLabel(t))},pC(["AxisLine","AxisTick","Control","CurrentPointer"],function(t){this["_render"+t](o,a,s,e)},this),this._renderAxisLabel(o,r,s,e),this._position(o,e)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),o=function(t,e){return bu(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}(t,e);null==i||"auto"===i?i="horizontal"===n?o.y+o.height/2n[1]&&(i=n[1]),i":"\n"),s&&(l+=xC(s),null!=a&&(l+=" : ")),null!=a&&(l+=xC(r)),l},getData:function(){return this._data},setData:function(t){this._data=t}});b(wC,Xh),wC.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var bC=_;function SC(t,e,i,n,o,a){var r=[],s=fp(e,n)?e.getCalculationInfo("stackResultDimension"):n,l=LC(e,s,t),u=e.indicesOfNearest(s,l)[0];r[o]=e.get(i,u),r[a]=e.get(s,u);var h=e.get(n,u),c=Vl(e.get(n,u));return 0<=(c=Math.min(c,20))&&(r[a]=+r[a].toFixed(c)),[r,h]}var MC=T,IC={min:MC(SC,"min"),max:MC(SC,"max"),average:MC(SC,"average")};function TC(t,e){var i=t.getData(),n=t.coordinateSystem;if(e&&!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!L(e.coord)&&n){var o=n.dimensions,a=AC(e,i,n,t);if((e=k(e)).type&&IC[e.type]&&a.baseAxis&&a.valueAxis){var r=bC(o,a.baseAxis.dim),s=bC(o,a.valueAxis.dim),l=IC[e.type](i,a.baseDataDim,a.valueDataDim,r,s);e.coord=l[0],e.value=l[1]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)IC[u[h]]&&(u[h]=LC(i,i.mapDimension(o[h]),u[h]));e.coord=u}}return e}function AC(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(function(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var o=0;oi[o],f=[-h.x,-h.y];e||(f[n]=s.position[n]);var p=[0,0],g=[-c.x,-c.y],m=H(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?g[n]+=i[o]-c[o]:p[n]+=c[o]+m);g[1-n]+=h[a]/2-c[a]/2,s.attr("position",f),l.attr("position",p),u.attr("position",g);var v={x:0,y:0};if(v[o]=d?i[o]:h[o],v[a]=Math.max(h[a],c[a]),v[r]=Math.min(0,c[r]+g[1-n]),l.__rectSize=i[o],d){var y={x:0,y:0};y[o]=Math.max(i[o]-c[o]-m,0),y[a]=v[a],l.setClipPath(new rs({shape:y})),l.__rectSize=y[o]}else u.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(t);return null!=x.pageIndex&&cl(s,{position:x.contentPosition},d&&t),this._updatePageInfoView(t,x),v},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(n,o){var a=this._controllerGroup;R(["pagePrev","pageNext"],function(t){var e=null!=o[t+"DataIndex"],i=a.childOfName(t);i&&(i.setStyle("fill",e?n.get("pageIconColor",!0):n.get("pageIconInactiveColor",!0)),i.cursor=e?"pointer":"default")});var t=a.childOfName("pageText"),e=n.get("pageFormatter"),i=o.pageIndex,r=null!=i?i+1:0,s=o.pageCount;t&&e&&t.setStyle("text",E(e)?e.replace("{current}",r).replace("{total}",s):e({current:r,total:s}))},_getPageInfo:function(t){var e=t.get("scrollDataIndex",!0),i=this.getContentGroup(),n=this._containerGroup.__rectSize,o=t.getOrient().index,a=aL[o],r=rL[o],s=this._findTargetItemIndex(e),l=i.children(),u=l[s],h=l.length,c=h?1:0,d={contentPosition:i.position.slice(),pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return d;var f=y(u);d.contentPosition[o]=-f.s;for(var p=s+1,g=f,m=f,v=null;p<=h;++p)(!(v=y(l[p]))&&m.e>g.s+n||v&&!x(v,g.s))&&(g=m.i>g.i?m:v)&&(null==d.pageNextDataIndex&&(d.pageNextDataIndex=g.i),++d.pageCount),m=v;for(p=s-1,g=f,m=f,v=null;-1<=p;--p)(v=y(l[p]))&&x(m,v.s)||!(g.i=e&&t.s<=e+n}},_findTargetItemIndex:function(n){return this._showController?(this.getContentGroup().eachChild(function(t,e){var i=t.__legendDataIndex;null==a&&null!=i&&(a=e),i===n&&(o=e)}),null!=o?o:a):0;var o,a}});_f("legendScroll","legendscroll",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(i)})});cD.extend({type:"dataZoom.slider",layoutMode:"box",defaultOption:{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#2f4554",width:.5,opacity:.3},areaStyle:{color:"rgba(47,69,84,0.3)",opacity:.3}},borderColor:"#ddd",fillerColor:"rgba(167,183,204,0.4)",handleIcon:"M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",handleSize:"100%",handleStyle:{color:"#a7b7cc"},labelPrecision:null,labelFormatter:null,showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#333"}}});var lL=rs,uL=Rl,hL=Bl,cL=A,dL=R,fL="horizontal",pL="vertical",gL=["line","bar","candlestick","scatter"],mL=pD.extend({type:"dataZoom.slider",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){mL.superApply(this,"render",arguments),kc(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),!1!==this.dataZoomModel.get("show")?(n&&"dataZoom"===n.type&&n.from===this.uid||this._buildView(),this._updateView()):this.group.removeAll()},remove:function(){mL.superApply(this,"remove",arguments),Pc(this,"_dispatchZoomAction")},dispose:function(){mL.superApply(this,"dispose",arguments),Pc(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new Ci;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},o=this._orient===fL?{right:n.width-i.x-i.width,top:n.height-30-7,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=Iu(t.option);R(["right","top","width","height"],function(t){"ph"===a[t]&&(a[t]=o[t])});var r=bu(a,n,t.padding);this._location={x:r.x,y:r.y},this._size=[r.width,r.height],this._orient===pL&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),o=n&&n.get("inverse"),a=this._displayables.barGroup,r=(this._dataShadowInfo||{}).otherAxisInverse;a.attr(i!==fL||o?i===fL&&o?{scale:r?[-1,1]:[-1,-1]}:i!==pL||o?{scale:r?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:r?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:r?[1,1]:[1,-1]});var s=t.getBoundingRect([a]);t.attr("position",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size,i=this._displayables.barGroup;i.add(new lL({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40})),i.add(new lL({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:A(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),o=i.getShadowDim?i.getShadowDim():t.otherDim;if(null!=o){var a=n.getDataExtent(o),r=.3*(a[1]-a[0]);a=[a[0]-r,a[1]+r];var s,l=[0,e[1]],u=[0,e[0]],h=[[e[0],0],[0,0]],c=[],d=u[1]/(n.count()-1),f=0,p=Math.round(n.count()/e[0]);n.each([o],function(t,e){if(0e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,o=(n[0]+n[1])/2,a=this._updateInterval("all",i[0]-o);this._updateView(),a&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var i;if(dL(this.getTargetCoordInfo(),function(t){if(!i&&t.length){var e=t[0].model.coordinateSystem;i=e.getRect&&e.getRect()}}),!i){var t=this.api.getWidth(),e=this.api.getHeight();i={x:.2*t,y:.2*e,width:.6*t,height:.6*e}}return i}});function vL(t){return"vertical"===t?"ns-resize":"ew-resize"}cD.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var yL="\0_ec_dataZoom_roams";function xL(t,n){var e=wL(t),o=n.dataZoomId,a=n.coordId;R(e,function(t,e){var i=t.dataZoomInfos;i[o]&&_(n.allCoordIds,a)<0&&(delete i[o],t.count--)}),bL(e);var i=e[a];i||((i=e[a]={coordId:a,dataZoomInfos:{},count:0}).controller=function(t,r){var e=new Vy(t.getZr());return R(["pan","zoom","scrollMove"],function(a){e.on(a,function(n){var o=[];R(r.dataZoomInfos,function(t){if(n.isAvailableBehavior(t.dataZoomModel.option)){var e=(t.getRange||{})[a],i=e&&e(r.controller,n);!t.dataZoomModel.get("disabled",!0)&&i&&o.push({dataZoomId:t.dataZoomId,start:i[0],end:i[1]})}}),o.length&&r.dispatchAction(o)})}),e}(t,i),i.dispatchAction=T(SL,t)),i.dataZoomInfos[o]||i.count++,i.dataZoomInfos[o]=n;var r=function(t){var n,o={type_true:2,type_move:1,type_false:0,type_undefined:-1},a=!0;return R(t,function(t){var e=t.dataZoomModel,i=!e.get("disabled",!0)&&(!e.get("zoomLock",!0)||"move");o["type_"+n]"],L(t)&&(t=t.slice(),n=!0),o=e?t:n?[u(t[0]),u(t[1])]:u(t),E(l)?l.replace("{value}",n?o[0]:o).replace("{value2}",n?o[1]:o):C(l)?n?l(t[0],t[1]):l(t):n?t[0]===s[0]?i[0]+" "+o[1]:t[1]===s[1]?i[1]+" "+o[0]:o[0]+" - "+o[1]:o;function u(t){return t===s[0]?"min":t===s[1]?"max":(+t).toFixed(Math.min(r,20))}},resetExtent:function(){var t=this.option,e=GL([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension,i=t.dimensions;if(null!=e||i.length){if(null!=e)return t.getDimension(e);for(var n=t.dimensions,o=n.length-1;0<=o;o--){var a=n[o];if(!t.getDimensionInfo(a).isCalculationCoord)return a}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){var t=this.ecModel,e=this.option,i={inRange:e.inRange,outOfRange:e.outOfRange},n=e.target||(e.target={}),o=e.controller||(e.controller={});m(n,i),m(o,i);var u=this.isCategory();function a(n){BL(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")},VL(this.stateList,function(t){var e=n[t];if(E(e)){var i=OL(e,"active",u);i?(n[t]={},n[t][e]=i):delete n[t]}},this)}a.call(this,n),a.call(this,o),function(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},VL(n,function(t,e){if(g_.isValidType(e)){var i=OL(e,"inactive",u);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}.call(this,n,"inRange","outOfRange"),function(a){var r=(a.inRange||{}).symbol||(a.outOfRange||{}).symbol,s=(a.inRange||{}).symbolSize||(a.outOfRange||{}).symbolSize,l=this.get("inactiveColor");VL(this.stateList,function(t){var e=this.itemSize,i=a[t];null==(i=i||(a[t]={color:u?l:[l]})).symbol&&(i.symbol=r&&k(r)||(u?"roundRect":["roundRect"])),null==i.symbolSize&&(i.symbolSize=s&&k(s)||(u?e[0]:[e[0],e[0]])),i.symbol=EL(i.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var n=i.symbolSize;if(null!=n){var o=-1/0;zL(n,function(t){oe[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){WL.prototype.completeVisualOption.apply(this,arguments),R(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=Bl((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(n){var o=[];return this.eachTargetSeries(function(t){var i=[],e=t.getData();e.each(this.getDataDimension(e),function(t,e){n[0]<=t&&t<=n[1]&&i.push(e)},this),o.push({seriesId:t.id,dataIndex:i})},this),o},getVisualMeta:function(i){var t=UL(this,"outOfRange",this.getExtent()),e=UL(this,"inRange",this.option.range.slice()),n=[];function o(t,e){n.push({value:t,color:i(t,e)})}for(var a=0,r=0,s=e.length,l=t.length;rt[1])break;i.push({color:this.getControllerVisual(a,"color",e),offset:o/100})}return i.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),i},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new Ci("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(n,o){if(this._useHandle){var a=this._shapes,r=this.visualMapModel,s=a.handleThumbs,l=a.handleLabels;KL([0,1],function(t){var e=s[t];e.setStyle("fill",o.handlesColor[t]),e.position[1]=n[t];var i=pl(a.handleLabelPoints[t],fl(e,this.group));l[t].setStyle({x:i[0],y:i[1],text:r.formatValueText(this._dataInterval[t]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===t?"bottom":"top":"left",a.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),r=o.itemSize,s=[0,r[1]],l=qL(t,a,s,!0),u=this._shapes,h=u.indicator;if(h){h.position[1]=l,h.attr("invisible",!1),h.setShape("points",function(t,e,i,n){return t?[[0,-$L(e,JL(i,0))],[6,0],[0,$L(e,JL(n-i,0))]]:[[0,0],[5,-5],[5,5]]}(!!i,n,l,r[1]));var c=this.getControllerVisual(t,"color",{convertOpacityToAlpha:!0});h.setStyle("fill",c);var d=pl(u.indicatorLabelPoint,fl(h,this.group)),f=u.indicatorLabel;f.attr("invisible",!1);var p=this._applyTransform("left",u.barGroup),g=this._orient;f.setStyle({text:(i||"")+o.formatValueText(e),textVerticalAlign:"horizontal"===g?p:"middle",textAlign:"horizontal"===g?"center":p,x:d[0],y:d[1]})}},_enableHoverLinkToSeries:function(){var n=this;this._shapes.barGroup.on("mousemove",function(t){if(n._hovering=!0,!n._dragging){var e=n.visualMapModel.itemSize,i=n._applyTransform([t.offsetX,t.offsetY],n._shapes.barGroup,!0,!0);i[1]=$L(JL(0,i[1]),e[1]),n._doHoverLinkToSeries(i[1],0<=i[0]&&i[0]<=e[0])}}).on("mouseout",function(){n._hovering=!1,n._dragging||n._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],a=i.getExtent();t=$L(JL(o[0],t),o[1]);var r=function(t,e,i){var n=6,o=t.get("hoverLinkDataSize");o&&(n=qL(o,e,i,!0)/2);return n}(i,a,o),s=[t-r,t+r],l=qL(t,o,a,!0),u=[qL(s[0],o,a,!0),qL(s[1],o,a,!0)];s[0] ",r):this._showIndicator(l,l,"≈ ",r));var h=this._hoverLinkDataIndices,c=[];(e||ek(i))&&(c=this._hoverLinkDataIndices=i.findTargetDataIndices(u));var d=function(t,e){var i={},n={};return o(t||[],i),o(e||[],n,i),[a(i),a(n)];function o(t,e,i){for(var n=0,o=t.length;ni&&n([i,e[0]],"outOfRange"),n(e.slice()),i=e[1])},this),{stops:a,outerColors:r}}function n(t,e){var i=s.getRepresentValue({interval:t});e=e||s.getValueState(i);var n=o(i,e);t[0]===-1/0?r[0]=n:t[1]===1/0?r[1]=n:a.push({value:t[0],color:n},{value:t[1],color:n})}}}),ok={splitNumber:function(){var t=this.option,e=this._pieceList,i=Math.min(t.precision,20),n=this.getExtent(),o=t.splitNumber;o=Math.max(parseInt(o,10),1),t.splitNumber=o;for(var a=(n[1]-n[0])/o;+a.toFixed(i)!==a&&i<5;)i++;t.precision=i,a=+a.toFixed(i),t.minOpen&&e.push({interval:[-1/0,n[0]],close:[0,0]});for(var r=0,s=n[0];r","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};function ak(t,e){var i=t.inverse;("vertical"===t.orient?!i:i)&&e.reverse()}XL.extend({type:"visualMap.piecewise",doRender:function(){var a=this.group;a.removeAll();var r=this.visualMapModel,s=r.get("textGap"),t=r.textStyleModel,l=t.getFont(),u=t.getTextColor(),h=this._getItemAlign(),c=r.itemSize,e=this._getViewData(),i=e.endsText,d=W(r.get("showLabel",!0),!i);i&&this._renderEndsText(a,i[0],c,d,h),R(e.viewPieceList,function(t){var e=t.piece,i=new Ci;i.onclick=A(this._onItemClick,this,e),this._enableHoverLink(i,t.indexInModelPieceList);var n=r.getRepresentValue(e);if(this._createItemSymbol(i,n,[0,0,c[0],c[1]]),d){var o=this.visualMapModel.getValueState(n);i.add(new Ur({style:{x:"right"===h?-s:c[0]+s,y:c[1]/2,text:e.text,textVerticalAlign:"middle",textAlign:h,textFont:l,textFill:u,opacity:"outOfRange"===o?.5:1}}))}a.add(i)},this),i&&this._renderEndsText(a,i[1],c,d,h),wu(r.get("orient"),a,r.get("itemGap")),this.renderBackground(a),this.positionGroup(a)},_enableHoverLink:function(t,i){function e(t){var e=this.visualMapModel;e.option.hoverLink&&this.api.dispatchAction({type:t,batch:jL(e.findTargetDataIndices(i),e)})}t.on("mouseover",A(e,this,"highlight")).on("mouseout",A(e,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return YL(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i,n,o){if(e){var a=new Ci,r=this.visualMapModel.textStyleModel;a.add(new Ur({style:{x:n?"right"===o?i[0]:0:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:n?o:"center",text:e,textFont:r.getFont(),textFill:r.getTextColor()}})),t.add(a)}},_getViewData:function(){var t=this.visualMapModel,e=O(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),o=t.get("inverse");return("horizontal"===n?o:!o)?e.reverse():i=i&&i.slice().reverse(),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(wg(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,i=e.option,n=k(i.selected),o=e.getSelectedMapKey(t);"single"===i.selectedMode?(n[o]=!0,R(n,function(t,e){n[e]=e===o})):n[o]=!n[o],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:n})}});yf(DL);var rk,sk="urn:schemas-microsoft-com:vml",lk="undefined"==typeof window?null:window,uk=!1,hk=lk&&lk.document;function ck(t){return rk(t)}if(hk&&!v.canvasSupported)try{hk.namespaces.zrvml||hk.namespaces.add("zrvml",sk),rk=function(t){return hk.createElement("')}}catch(t){rk=function(t){return hk.createElement("<"+t+' xmlns="'+sk+'" class="zrvml">')}}var dk,fk=rr.CMD,pk=Math.round,gk=Math.sqrt,mk=Math.abs,vk=Math.cos,yk=Math.sin,xk=Math.max;if(!v.canvasSupported){var _k=",",wk="progid:DXImageTransform.Microsoft",bk=21600,Sk=bk/2,Mk=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=bk+","+bk,t.coordorigin="0,0"},Ik=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},Tk=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},Ak=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},Dk=function(t,e,i){return 1e5*(parseFloat(t)||0)+1e3*(parseFloat(e)||0)+i},Ck=Yn,Lk=function(t,e,i){var n=Fe(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=Ik(n[0],n[1],n[2]),t.opacity=i*n[3])},kk=function(t,e,i,n){var o="fill"===e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof cs&&Ak(t,a),a=a||ck(e),o?function(t,e,i){var n,o,a=e.fill;if(null!=a)if(a instanceof cs){var r,s=0,l=[0,0],u=0,h=1,c=i.getBoundingRect(),d=c.width,f=c.height;if("linear"===a.type){r="gradient";var p=i.transform,g=[a.x*d,a.y*f],m=[a.x2*d,a.y2*f];p&&(bt(g,g,p),bt(m,m,p));var v=m[0]-g[0],y=m[1]-g[1];(s=180*Math.atan2(v,y)/Math.PI)<0&&(s+=360),s<1e-6&&(s=0)}else{r="gradientradial";g=[a.x*d,a.y*f],p=i.transform;var x=i.scale,_=d,w=f;l=[(g[0]-c.x)/_,(g[1]-c.y)/w],p&&bt(g,g,p),_/=x[0]*bk,w/=x[1]*bk;var b=xk(_,w);u=0/b,h=2*a.r/b-u}var S=a.colorStops.slice();S.sort(function(t,e){return t.offset-e.offset});for(var M=S.length,I=[],T=[],A=0;A=c&&d<=i+1){for(var n=[],o=0;o=c&&d<=o+1)return _P(h,e.components,u,l);p[t]=e}else p[t]=void 0}var s;f++}for(;f<=e;){var r=a();if(r)return r}},pushComponent:function(t,e,i){var n=t[t.length-1];n&&n.added===e&&n.removed===i?t[t.length-1]={count:n.count+1,added:e,removed:i}:t.push({count:1,added:e,removed:i})},extractCommon:function(t,e,i,n){for(var o=e.length,a=i.length,r=t.newPos,s=r-n,l=0;r+1\n\r<"))}},R(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","pathToImage"],function(t){OP.prototype[t]=function(t){return function(){vi('In SVG mode painter not support method "'+t+'"')}}(t)}),Po("svg",OP),t.version="4.9.0",t.dependencies={zrender:"4.3.2"},t.PRIORITY=Ld,t.init=function(t,e,i){var n=mf(t);if(n)return n;var o=new Ed(t,e,i);return o.id="ec_"+cf++,uf[o.id]=o,Jo(t,ff,o.id),function(n){var o="__connectUpdateStatus";function a(t,e){for(var i=0;i b.latest_time -end - - -function user_status() - local json = require "luci.jsonc" - luci.http.prepare_content("application/json") - local fd = io.open("/proc/net/af_client","r") - status_buf=fd:read('*a') - fd:close() - user_array=json.parse(status_buf) - - local visit_obj=utl.ubus("appfilter", "visit_list", {}); - local user_array=visit_obj.dev_list - local history={} - for i, v in pairs(user_array) do - visit_array=user_array[i].visit_info - for j,s in pairs(visit_array) do - print(user_array[i].mac, user_array[i].ip,visit_array[j].appid, visit_array[j].latest_time) - total_time=visit_array[j].latest_time - visit_array[j].first_time; - history[#history+1]={ - mac=user_array[i].mac, - ip=user_array[i].ip, - hostname=get_hostname_by_mac(user_array[i].mac), - appid=visit_array[j].appid, - appname=get_app_name_by_id(visit_array[j].appid), - --total_num=visit_array[j].total_num, - --drop_num=visit_array[j].drop_num, - total_num=0, - drop_num=0, - latest_action=visit_array[j].latest_action, - latest_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].latest_time), - first_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].first_time), - total_time=total_time - } - end - end - table.sort(history, cmp_func) - luci.http.write_json(history); -end - - -function dev_app_status() - local json = require "luci.jsonc" - luci.http.prepare_content("application/json") - local visit_obj=utl.ubus("appfilter", "dev_list", {}); - luci.http.write_json(visit_obj); -end - - -function get_dev_visit_time(mac) - local json = require "luci.jsonc" - luci.http.prepare_content("application/json") - local fd = io.open("/proc/net/af_client","r") - status_buf=fd:read('*a') - fd:close() - user_array=json.parse(status_buf) - local req_obj = {} - req_obj.mac = mac; - local visit_obj=utl.ubus("appfilter", "dev_visit_time", req_obj); - local user_array=visit_obj.app_list - luci.http.write_json(user_array); -end - -function get_app_class_visit_time(mac) - local json = require "luci.jsonc" - luci.http.prepare_content("application/json") - local req_obj = {} - req_obj.mac = mac; - local visit_obj=utl.ubus("appfilter", "app_class_visit_time", req_obj); - local class_array=visit_obj.class_list - luci.http.write_json(class_array); -end - - -function get_dev_visit_list(mac) - local json = require "luci.jsonc" - luci.http.prepare_content("application/json") - local req_obj = {} - req_obj.mac = mac; - - local visit_obj=utl.ubus("appfilter", "visit_list", req_obj); - local user_array=visit_obj.dev_list - local history={} - for i, v in pairs(user_array) do - visit_array=user_array[i].visit_info - for j,s in pairs(visit_array) do - print(user_array[i].mac, user_array[i].ip,visit_array[j].appid, visit_array[j].latest_time) - total_time=visit_array[j].latest_time - visit_array[j].first_time; - history[#history+1]={ - mac=user_array[i].mac, - ip=user_array[i].ip, - hostname=get_hostname_by_mac(user_array[i].mac), - appid=visit_array[j].appid, - appname=get_app_name_by_id(visit_array[j].appid), - total_num=0, - drop_num=0, - latest_action=visit_array[j].latest_action, - latest_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].latest_time), - first_time=os.date("%Y/%m/%d %H:%M:%S", visit_array[j].first_time), - total_time=total_time - } - end - end - table.sort(history, cmp_func) - luci.http.write_json(history); -end diff --git a/package/ctcgfw/luci-app-appfilter/luasrc/model/cbi/appfilter/appfilter.lua b/package/ctcgfw/luci-app-appfilter/luasrc/model/cbi/appfilter/appfilter.lua deleted file mode 100644 index 3d9af1016d..0000000000 --- a/package/ctcgfw/luci-app-appfilter/luasrc/model/cbi/appfilter/appfilter.lua +++ /dev/null @@ -1,225 +0,0 @@ - -local ds = require "luci.dispatcher" -local nxo = require "nixio" -local nfs = require "nixio.fs" -local ipc = require "luci.ip" -local sys = require "luci.sys" -local utl = require "luci.util" -local dsp = require "luci.dispatcher" -local uci = require "luci.model.uci" -local lng = require "luci.i18n" -local jsc = require "luci.jsonc" -local http = luci.http -local SYS = require "luci.sys" -local m, s - -m = Map("appfilter", - translate("appfilter"), - translate("")) - -s = m:section(TypedSection, "global", translate("Basic Settings")) -s:option(Flag, "enable", translate("Enable App Filter"),translate("")) -s.anonymous = true - -local rule_count=0 -local version="" -if nixio.fs.access("/etc/appfilter/feature.cfg") then - rule_count=tonumber(SYS.exec("cat /etc/appfilter/feature.cfg | wc -l")) - version=SYS.exec("cat /etc/appfilter/feature.cfg |grep \"#version\" | awk '{print $2}'") -end -local display_str="当前版本: "..version.."
特征码个数: "..rule_count.."
下载地址:https://destan19.github.io" -s = m:section(TypedSection, "feature", translate("特征库更新"), display_str ) - -fu = s:option(FileUpload, "") -fu.template = "cbi/oaf_upload" -s.anonymous = true - -um = s:option(DummyValue, "rule_data") - -s=m:section(TypedSection,"time",translate("时间控制")) s.anonymous = true -hv = s:option(Value, "start_time", translate("开始时间")) hv.default="00:00" -hv.optional=false -hv = s:option(Value, "end_time", translate("结束时间")) hv.default="23:59" -hv.optional=false days = s:option(MultiValue, "days", "", translate("")) -days.widget="checkbox" days.size=10 -days:value("0", "周日"); -days:value("1", "周一"); -days:value("2", "周二"); -days:value("3", "周三"); -days:value("4", "周四"); -days:value("5", "周五"); -days:value("6", "周六"); - ---um.value =rule_count .. " " .. translate("Records").. " "..version -s = m:section(TypedSection, "appfilter", translate("App Filter Rules")) -s.anonymous = true -s.addremove = false - - -local class_fd = io.popen("find /tmp/appfilter/ -type f -name '*.class'") -if class_fd then - while true do - local apps - local class - local path = class_fd:read("*l") - if not path then - break - end - - class = path:match("([^/]+)%.class$") - -- add a tab - s:tab(class, translate(class)) - -- multi value option - apps = s:taboption(class, MultiValue, class.."apps", translate("")) - apps.rmempty=true - --apps.delimiter=";" - -- select - apps.widget="checkbox" - apps.size=10 - - local fd = io.open(path) - if fd then - local line - while true do - local cmd - local cmd_fd - line = fd:read("*l") - if not line then break end - if string.len(line) < 5 then break end - if not string.find(line,"#") then - cmd = "echo "..line.."|awk '{print $1}'" - cmd_fd = io.popen(cmd) - id = cmd_fd:read("*l"); - cmd_fd:close() - - cmd = "echo "..line.."|awk '{print $2}'" - cmd_fd = io.popen(cmd) - name = cmd_fd:read("*l") - - cmd_fd:close() - if not id then break end - if not name then break end - apps:value(id, name) - end - end - fd:close() - end - end - class_fd:close() -end - - - - -function get_hostname_by_mac(dst_mac) - leasefile="/tmp/dhcp.leases" - local fd = io.open(leasefile, "r") - if not fd then return end - while true do - local ln = fd:read("*l") - if not ln then - break - end - local ts, mac, ip, name, duid = ln:match("^(%d+) (%S+) (%S+) (%S+) (%S+)") - print(ln) - if dst_mac == mac then - fd:close() - return name - end - end - fd:close() - return nil -end -function get_cmd_result(command) - local fd - local result - fd = io.popen(command); - if not fd then return "" end - result = fd:read("*l"); - fd:close() - return result -end - -s=m:section(TypedSection,"user",translate("Select users")) -s.anonymous = true -users = s:option(MultiValue, "users", "", translate("Select at least one user, otherwise it will take effect for all users")) -users.widget="checkbox" ---users.widget="select" -users.size=1 - -local fd = io.open("/tmp/dev_list", "r") -if not fd then return m end -while true do - local line = fd:read("*l") - if not line then - break - end - if not line:match("Id*") then - local ip=get_cmd_result(string.format("echo '%s' | awk '{print $3}'", line)) - local mac=get_cmd_result(string.format("echo '%s' | awk '{print $2}'", line)) - if mac ~= nil then - local hostname=get_hostname_by_mac(mac) - if not hostname or hostname == "*" then - users:value(mac, mac); - else - users:value(mac, hostname); - end - end - end -end - -local config_users=m.uci:get_all("appfilter.user.users") -if config_users~=nil then -local r=utl.split(config_users, "%s+", nil, true) -local max = table.getn(r) -for i=1,max,1 do - users:value(r[i], r[i]); -end -end -m:section(SimpleSection).template = "admin_network/user_status" -local dir, fd -dir = "/tmp/upload/" -nixio.fs.mkdir(dir) -http.setfilehandler( - function(meta, chunk, eof) - if not fd then - if not meta then return end - if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end - if not fd then - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - local fd2 = io.open("/tmp/upload/"..meta.file) - local line=fd2:read("*l"); - fd2:close() - local ret=string.match(line, "#version") - if ret ~= nil then - local cmd="cp /tmp/upload/"..meta.file.." /etc/appfilter/feature.cfg"; - os.execute(cmd); - os.execute("rm /tmp/appfilter -fr"); - luci.sys.exec("/etc/init.d/appfilter restart &"); - um.value = translate("更新成功,请刷新页面!") - else - um.value = translate("更新失败,格式错误!") - end - end - - end -) - -if luci.http.formvalue("upload") then - local f = luci.http.formvalue("ulfile") - if #f <= 0 then - --um.value = translate("No specify upload file.") - end -elseif luci.http.formvalue("download") then - Download() -end - - -return m diff --git a/package/ctcgfw/luci-app-appfilter/luasrc/model/cbi/appfilter/dev_status.lua b/package/ctcgfw/luci-app-appfilter/luasrc/model/cbi/appfilter/dev_status.lua deleted file mode 100644 index 55d3440c78..0000000000 --- a/package/ctcgfw/luci-app-appfilter/luasrc/model/cbi/appfilter/dev_status.lua +++ /dev/null @@ -1,24 +0,0 @@ - -local ds = require "luci.dispatcher" -local nxo = require "nixio" -local nfs = require "nixio.fs" -local ipc = require "luci.ip" -local sys = require "luci.sys" -local utl = require "luci.util" -local dsp = require "luci.dispatcher" -local uci = require "luci.model.uci" -local lng = require "luci.i18n" -local jsc = require "luci.jsonc" - -local m, s -arg[1] = arg[1] or "" -m = Map("appfilter", - translate("上网统计("..arg[1]..")"), - translate("")) - -local v -v=m:section(SimpleSection) -v.template="admin_network/dev_status" -v.mac=arg[1] -m.redirect = luci.dispatcher.build_url("admin", "network", "appfilter") -return m diff --git a/package/ctcgfw/luci-app-appfilter/luasrc/view/admin_network/dev_status.htm b/package/ctcgfw/luci-app-appfilter/luasrc/view/admin_network/dev_status.htm deleted file mode 100644 index 89a844865f..0000000000 --- a/package/ctcgfw/luci-app-appfilter/luasrc/view/admin_network/dev_status.htm +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - -
-
-
-
-
- - - - - - - - - - - - -
<%:App%><%:主机名%><%:mac地址%><%:开始时间%><%:访问时长%><%:过滤状态%>

<%:Collecting data...%>
- -
\ No newline at end of file diff --git a/package/ctcgfw/luci-app-appfilter/luasrc/view/admin_network/user_status.htm b/package/ctcgfw/luci-app-appfilter/luasrc/view/admin_network/user_status.htm deleted file mode 100644 index 7d178a482d..0000000000 --- a/package/ctcgfw/luci-app-appfilter/luasrc/view/admin_network/user_status.htm +++ /dev/null @@ -1,150 +0,0 @@ - - - - -
- <%:终端列表%> - - - - - - - - - - - -
<%:主机名%><%:mac地址%><%:ip地址%><%:常用APP(TOP5)%>

<%:Collecting data...%>
-
diff --git a/package/ctcgfw/luci-app-appfilter/luasrc/view/cbi/oaf_upload.htm b/package/ctcgfw/luci-app-appfilter/luasrc/view/cbi/oaf_upload.htm deleted file mode 100644 index 0fe8150f10..0000000000 --- a/package/ctcgfw/luci-app-appfilter/luasrc/view/cbi/oaf_upload.htm +++ /dev/null @@ -1,5 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-appfilter/po/zh-cn/oaf.po b/package/ctcgfw/luci-app-appfilter/po/zh-cn/oaf.po deleted file mode 100644 index 3717faa1e4..0000000000 --- a/package/ctcgfw/luci-app-appfilter/po/zh-cn/oaf.po +++ /dev/null @@ -1,53 +0,0 @@ - -msgid "website" -msgstr "常用网站" - -msgid "appfilter" -msgstr "应用过滤" - -msgid "game" -msgstr "游戏" - -msgid "web" -msgstr "网页" - -msgid "video" -msgstr "视频" - -msgid "chat" -msgstr "聊天" - -msgid "download" -msgstr "下载" - -msgid "p2p" -msgstr "p2p" - -msgid "music" -msgstr "音乐" - -msgid "shopping" -msgstr "购物" - -msgid "working" -msgstr "办公" - -msgid "employee" -msgstr "招聘" - -msgid "Basic Settings" -msgstr "基本设置" - -msgid "App Filter Rules" -msgstr "应用过滤规则" - -msgid "Select at least one user, otherwise it will take effect for all users" -msgstr "至少选择一个用户,否则对所有用户生效" - -msgid "Select users" -msgstr "选择用户" - -msgid "Enable App Filter" -msgstr "开启应用过滤" - - diff --git a/package/ctcgfw/luci-app-appfilter/root/etc/uci-defaults/91_luci-oaf b/package/ctcgfw/luci-app-appfilter/root/etc/uci-defaults/91_luci-oaf deleted file mode 100755 index 2041cc3dfa..0000000000 --- a/package/ctcgfw/luci-app-appfilter/root/etc/uci-defaults/91_luci-oaf +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -# replace existing mwan ucitrack entry -uci -q batch <<-EOF >/dev/null - del ucitrack.@appfilter[-1] - add ucitrack appfilter - set ucitrack.@appfilter[-1].exec="/etc/init.d/appfilter reload" - commit ucitrack -EOF - -# remove LuCI cache -rm -rf /tmp/luci-indexcache /tmp/luci-modulecache - -exit 0 diff --git a/package/ctcgfw/luci-app-appfilter/root/etc/uci-defaults/92_add_user_section b/package/ctcgfw/luci-app-appfilter/root/etc/uci-defaults/92_add_user_section deleted file mode 100755 index cea403fbb2..0000000000 --- a/package/ctcgfw/luci-app-appfilter/root/etc/uci-defaults/92_add_user_section +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - set appfilter.user=user - appfilter.feature=feature - commit appfilter -EOF -exit 0 diff --git a/package/ctcgfw/luci-app-argon-config/Makefile b/package/ctcgfw/luci-app-argon-config/Makefile deleted file mode 100644 index 3cf0201804..0000000000 --- a/package/ctcgfw/luci-app-argon-config/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# -# Copyright (C) 2008-2014 The LuCI Team -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-argon-config -PKG_VERSION:=0.9 -PKG_RELEASE:=20210309 - -LUCI_TITLE:=LuCI page for Argon Config -LUCI_DEPENDS:=+luci-theme-argonv3 -LUCI_PKGARCH:=all - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-argon-config/luasrc/controller/argon-config.lua b/package/ctcgfw/luci-app-argon-config/luasrc/controller/argon-config.lua deleted file mode 100644 index 8810e37f25..0000000000 --- a/package/ctcgfw/luci-app-argon-config/luasrc/controller/argon-config.lua +++ /dev/null @@ -1,12 +0,0 @@ ---[[ -luci-app-argon-config -]]-- - -module("luci.controller.argon-config", package.seeall) - -function index() - if not nixio.fs.access('/www/luci-static/argon/css/cascade.css') then - return - end - entry({"admin", "system", "argon-config"}, form("argon-config/configuration"), _("Argon Config"),90) -end diff --git a/package/ctcgfw/luci-app-argon-config/luasrc/model/cbi/argon-config/configuration.lua b/package/ctcgfw/luci-app-argon-config/luasrc/model/cbi/argon-config/configuration.lua deleted file mode 100644 index f1f0ec7f62..0000000000 --- a/package/ctcgfw/luci-app-argon-config/luasrc/model/cbi/argon-config/configuration.lua +++ /dev/null @@ -1,223 +0,0 @@ -local nxfs = require 'nixio.fs' -local wa = require 'luci.tools.webadmin' -local opkg = require 'luci.model.ipkg' -local sys = require 'luci.sys' -local http = require 'luci.http' -local nutil = require 'nixio.util' -local name = 'argon' -local uci = require 'luci.model.uci'.cursor() - -local fstat = nxfs.statvfs(opkg.overlay_root()) -local space_total = fstat and fstat.blocks or 0 -local space_free = fstat and fstat.bfree or 0 -local space_used = space_total - space_free - -local free_byte = space_free * fstat.frsize - -local primary, dark_primary, blur_radius, blur_radius_dark, blur_opacity, mode -if nxfs.access('/etc/config/argon') then - primary = uci:get_first('argon', 'global', 'primary') - dark_primary = uci:get_first('argon', 'global', 'dark_primary') - blur_radius = uci:get_first('argon', 'global', 'blur') - blur_radius_dark = uci:get_first('argon', 'global', 'blur_dark') - blur_opacity = uci:get_first('argon', 'global', 'transparency') - blur_opacity_dark = uci:get_first('argon', 'global', 'transparency_dark') - mode = uci:get_first('argon', 'global', 'mode') - bing_background = uci:get_first('argon', 'global', 'bing_background') -end - -function glob(...) - local iter, code, msg = nxfs.glob(...) - if iter then - return nutil.consume(iter) - else - return nil, code, msg - end -end - -local transparency_sets = { - 0, - 0.1, - 0.2, - 0.3, - 0.4, - 0.5, - 0.6, - 0.7, - 0.8, - 0.9, - 1 -} - --- [[ 模糊设置 ]]-- -br = SimpleForm('config', translate('Argon Config'), translate('Here you can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended]')) -br.reset = false -br.submit = false -s = br:section(SimpleSection) - -o = s:option(ListValue, 'bing_background', translate('Wallpaper Source')) -o:value('0', translate('Built-in')) -o:value('1', translate('Bing Wallpapers')) -o.default = bing_background -o.rmempty = false - -o = s:option(ListValue, 'mode', translate('Theme mode')) -o:value('normal', translate('Follow System')) -o:value('light', translate('Force Light')) -o:value('dark', translate('Force Dark')) -o.default = mode -o.rmempty = false -o.description = translate('You can choose Theme color mode here') - -o = s:option(Value, 'primary', translate('[Light mode] Primary Color'), translate('A HEX Color ; ( Default: #5e72e4 )')) -o.default = primary -o.datatype = ufloat -o.rmempty = false - - - -o = s:option(ListValue, 'transparency', translate('[Light mode] Transparency'), translate('0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: 0.5 )')) -for _, v in ipairs(transparency_sets) do - o:value(v) -end -o.default = blur_opacity -o.datatype = ufloat -o.rmempty = false - -o = s:option(Value, 'blur', translate('[Light mode] Frosted Glass Radius'), translate('Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )')) -o.default = blur_radius -o.datatype = ufloat -o.rmempty = false - -o = s:option(Value, 'dark_primary', translate('[Dark mode] Primary Color'), translate('A HEX Color ; ( Default: #483d8b )')) -o.default = dark_primary -o.datatype = ufloat -o.rmempty = false - -o = s:option(ListValue, 'transparency_dark', translate('[Dark mode] Transparency'), translate('0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )')) -for _, v in ipairs(transparency_sets) do - o:value(v) -end -o.default = blur_opacity_dark -o.datatype = ufloat -o.rmempty = false - -o = s:option(Value, 'blur_dark', translate('[Dark mode] Frosted Glass Radius'), translate('Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )')) -o.default = blur_radius_dark -o.datatype = ufloat -o.rmempty = false - -o = s:option(Button, 'save', translate('Save Changes')) -o.inputstyle = 'reload' - -function br.handle(self, state, data) - if (state == FORM_VALID and data.blur ~= nil and data.blur_dark ~= nil and data.transparency ~= nil and data.transparency_dark ~= nil and data.mode ~= nil) then - nxfs.writefile('/tmp/aaa', data) - for key, value in pairs(data) do - uci:set('argon','@global[0]',key,value) - end - uci:commit('argon') - end - return true -end - -ful = SimpleForm('upload', translate('Upload (Free: ') .. wa.byte_format(free_byte) .. ')', translate("You can upload files such as jpg,png,gif,mp4 files, To change the login page background.")) -ful.reset = false -ful.submit = false - -sul = ful:section(SimpleSection, '', translate("Upload file to '/www/luci-static/argon/background/'")) -fu = sul:option(FileUpload, '') -fu.template = 'argon-config/other_upload' -um = sul:option(DummyValue, '', nil) -um.template = 'argon-config/other_dvalue' - -local dir, fd -dir = '/www/luci-static/argon/background/' -nxfs.mkdir(dir) -http.setfilehandler( - function(meta, chunk, eof) - if not fd then - if not meta then - return - end - - if meta and chunk then - fd = nixio.open(dir .. meta.file, 'w') - end - - if not fd then - um.value = translate('Create upload file error.') - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - fd = nil - um.value = translate('File saved to') .. ' "/www/luci-static/argon/background/' .. meta.file .. '"' - end - end -) - -if http.formvalue('upload') then - local f = http.formvalue('ulfile') - if #f <= 0 then - um.value = translate('No specify upload file.') - end -end - -local function getSizeStr(size) - local i = 0 - local byteUnits = {' kB', ' MB', ' GB', ' TB'} - repeat - size = size / 1024 - i = i + 1 - until (size <= 1024) - return string.format('%.1f', size) .. byteUnits[i] -end - -local inits, attr = {} -for i, f in ipairs(glob(dir .. '*')) do - attr = nxfs.stat(f) - if attr then - inits[i] = {} - inits[i].name = nxfs.basename(f) - inits[i].mtime = os.date('%Y-%m-%d %H:%M:%S', attr.mtime) - inits[i].modestr = attr.modestr - inits[i].size = getSizeStr(attr.size) - inits[i].remove = 0 - inits[i].install = false - end -end - -form = SimpleForm('filelist', translate('Background file list'), nil) -form.reset = false -form.submit = false - -tb = form:section(Table, inits) -nm = tb:option(DummyValue, 'name', translate('File name')) -mt = tb:option(DummyValue, 'mtime', translate('Modify time')) -sz = tb:option(DummyValue, 'size', translate('Size')) -btnrm = tb:option(Button, 'remove', translate('Remove')) -btnrm.render = function(self, section, scope) - self.inputstyle = 'remove' - Button.render(self, section, scope) -end - -btnrm.write = function(self, section) - local v = nxfs.unlink(dir .. nxfs.basename(inits[section].name)) - if v then - table.remove(inits, section) - end - return v -end - -function IsIpkFile(name) - name = name or '' - local ext = string.lower(string.sub(name, -4, -1)) - return ext == '.ipk' -end - -return br, ful, form diff --git a/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_button.htm b/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_button.htm deleted file mode 100644 index 1c391ad984..0000000000 --- a/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_button.htm +++ /dev/null @@ -1,7 +0,0 @@ -<%+cbi/valueheader%> - <% if self:cfgvalue(section) ~= false then %> - " style="display: <%= display %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> - <% else %> - - - <% end %> -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_dvalue.htm b/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_dvalue.htm deleted file mode 100644 index 296c61e4d6..0000000000 --- a/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_dvalue.htm +++ /dev/null @@ -1,8 +0,0 @@ -<%+cbi/valueheader%> - -<% - local val = self:cfgvalue(section) or self.default or "" - write(pcdata(val)) -%> - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm b/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm deleted file mode 100644 index ceb518ee7e..0000000000 --- a/package/ctcgfw/luci-app-argon-config/luasrc/view/argon-config/other_upload.htm +++ /dev/null @@ -1,5 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-argon-config/po/zh-cn/argon-config.po b/package/ctcgfw/luci-app-argon-config/po/zh-cn/argon-config.po deleted file mode 100644 index 1d25348e5f..0000000000 --- a/package/ctcgfw/luci-app-argon-config/po/zh-cn/argon-config.po +++ /dev/null @@ -1,133 +0,0 @@ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Last-Translator: dingpengyu \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"X-Generator: Poedit 2.3.1\n" - -msgid "Argon Config" -msgstr "Argon 主题设置" - -msgid "Here you can set the blur and transparency of the login page of argon theme, and manage the background pictures and videos.[Chrome is recommended]" -msgstr "在这里你可以设置argon 主题的登录页面的模糊和透明度,并管理背景图片与视频。[建议使用 Chrome]" - -msgid "Wallpaper Source" -msgstr "壁纸来源" - -msgid "Built-in" -msgstr "内建" - -msgid "Bing Wallpapers" -msgstr "Bing 壁纸" - -msgid "Theme mode" -msgstr "主题模式" - -msgid "Follow System" -msgstr "跟随系统" - -msgid "Force Light" -msgstr "强制亮色" - -msgid "Force Dark" -msgstr "强制暗色" - -msgid "You can choose Theme color mode here" -msgstr "你可以选择喜欢的主题模式" - -msgid "[Light mode] Primary Color" -msgstr "[亮色模式] 主色调" - -msgid "[Dark mode] Primary Color" -msgstr "[暗色模式] 主色调" - -msgid "A HEX Color ; ( Default: #5e72e4 )" -msgstr "十六进制颜色值 ( 预设为:#5e72e4 )" - -msgid "A HEX Color ; ( Default: #483d8b )" -msgstr "十六进制颜色值 ( 预设为:#483d8b )" - -msgid "[Light mode] Transparency" -msgstr "[亮色模式] 透明度" - -msgid "[Light mode] Transparency" -msgstr "[亮色模式] 透明度" - -msgid "[Dark mode] Transparency" -msgstr "[暗色模式] 透明度" - -msgid "0 transparent - 1 opaque ; ( Suggest: transparent: 0 or translucent preset: 0.5 )" -msgstr "0最透明 - 1不透明 ; ( 建议: 透明 0 或 半透明预设 0.5 )" - -msgid "0 transparent - 1 opaque ; ( Suggest: Black translucent preset: 0.5 )" -msgstr "0最透明 - 1不透明 ; ( 建议: 黑色半透明 0.5 )" - -msgid "[Light mode] Frosted Glass Radius" -msgstr "[亮色模式] 毛玻璃模糊半径" - -msgid "[Dark mode] Frosted Glass Radius" -msgstr "[暗色模式] 毛玻璃模糊半径" - -msgid "Larger value will more blurred ; ( Suggest: clear: 1 or blur preset: 10 )" -msgstr "值越大越模糊; ( 建议: 清透 1 或 模糊预设 10 )" - -msgid "You can upload files such as jpg,png,gif,mp4 files, To change the login page background." -msgstr "你可以上传jpg、png、gif或mp4文件,以创建自己喜欢的登录界面" - -msgid "Save Changes" -msgstr "保存更改" - -msgid "Choose local file:" -msgstr "选择本地文件:" - -msgid "Couldn't open file:" -msgstr "无法打开文件:" - -msgid "Create upload file error." -msgstr "创建上传文件失败。" - - -msgid "File name" -msgstr "文件名" - -msgid "File saved to" -msgstr "文件保存到" - -msgid "FileTransfer" -msgstr "文件传输" - -msgid "Install" -msgstr "安装" - -msgid "Attributes" -msgstr "属性" - -msgid "Modify time" -msgstr "修改时间" - -msgid "No specify upload file." -msgstr "未指定上传文件。" - -msgid "Path on Route:" -msgstr "路由根目录:" - -msgid "Remove" -msgstr "移除" - -msgid "Size" -msgstr "大小" - -msgid "Upload (Free:" -msgstr "上传 (剩余空间:" - -msgid "Background file list" -msgstr "背景文件列表" - -msgid "Upload file to '/www/luci-static/argon/background/'" -msgstr "文件将上传到'/www/luci-static/argon/background/'" diff --git a/package/ctcgfw/luci-app-argon-config/root/etc/config/argon b/package/ctcgfw/luci-app-argon-config/root/etc/config/argon deleted file mode 100644 index fb7f35d9c7..0000000000 --- a/package/ctcgfw/luci-app-argon-config/root/etc/config/argon +++ /dev/null @@ -1,9 +0,0 @@ -config global - option primary '#5e72e4' - option dark_primary '#483d8b' - option blur '10' - option blur_dark '10' - option transparency '0.5' - option transparency_dark '0.5' - option mode 'normal' - option bing_background '0' diff --git a/package/ctcgfw/luci-app-argon-config/root/etc/uci-defaults/luci-argon-config b/package/ctcgfw/luci-app-argon-config/root/etc/uci-defaults/luci-argon-config deleted file mode 100644 index 935d7c8be5..0000000000 --- a/package/ctcgfw/luci-app-argon-config/root/etc/uci-defaults/luci-argon-config +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -sed -i 's/cbi.submit\"] = true/cbi.submit\"] = \"1\"/g' /usr/lib/lua/luci/dispatcher.lua - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-autoipsetadder/Makefile b/package/ctcgfw/luci-app-autoipsetadder/Makefile deleted file mode 100644 index 47dd1b24f8..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/Makefile +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (C) 2018-2019 Lienol -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-autoipsetadder -PKG_VERSION:=1.0 -PKG_RELEASE:=7 - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/luci-app-autoipsetadder - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI Support for autoipsetadder - PKGARCH:=all - DEPENDS:= +httping +curl +coreutils-stdbuf -endef - -define Package/luci-app-autoipsetadder/description - LuCI support for autoipsetadder -endef - -define Build/Prepare -endef - -define Build/Compile -endef - -define Package/luci-app-autoipsetadder/conffiles -/etc/config/autoipsetadder -endef - -define Package/luci-app-autoipsetadder/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci - cp -pR ./luasrc/* $(1)/usr/lib/lua/luci - $(INSTALL_DIR) $(1)/ - cp -pR ./root/* $(1)/ -endef - -define Package/luci-app-autoipsetadder/postinst -#!/bin/sh - /etc/init.d/autoipsetadder enable >/dev/null 2>&1 - /etc/init.d/autoipsetadder start - rm -f /tmp/luci-indexcache - rm -f /tmp/luci-modulecache/* -exit 0 -endef - -define Package/luci-app-autoipsetadder/prerm -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - /etc/init.d/autoipsetadder disable - /etc/init.d/autoipsetadder stop -fi -exit 0 -endef - -$(eval $(call BuildPackage,luci-app-autoipsetadder)) diff --git a/package/ctcgfw/luci-app-autoipsetadder/luasrc/controller/autoipsetadder.lua b/package/ctcgfw/luci-app-autoipsetadder/luasrc/controller/autoipsetadder.lua deleted file mode 100644 index 6e88056d50..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/luasrc/controller/autoipsetadder.lua +++ /dev/null @@ -1,56 +0,0 @@ -module("luci.controller.autoipsetadder",package.seeall) -local io = require "io" -local fs=require"nixio.fs" -local sys=require"luci.sys" -local uci=require"luci.model.uci".cursor() -function index() - entry({"admin","services","autoipsetadder"},firstchild(),_("autoipsetadder"),30).dependent=true - entry({"admin","services","autoipsetadder","autoipsetadder"},cbi("autoipsetadder"),_("Base Setting"),1) - entry({"admin","services","autoipsetadder","status"},call("act_status")).leaf=true - entry({"admin", "services", "autoipsetadder", "getlog"}, call("get_log")) - entry({"admin", "services", "autoipsetadder", "dodellog"}, call("do_del_log")) - entry({"admin", "services", "autoipsetadder", "debugip"}, call("do_debug_ip")) -end - -function act_status() - local e={} - e.running=luci.sys.call("pgrep -f /usr/bin/autoipsetadder/autoaddlist.sh >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end -function do_del_log() -local logfile=uci:get("autoipsetadder","autoipsetadder","logfile") or "/tmp/addlist.log" -nixio.fs.writefile(logfile,"") -luci.http.prepare_content("application/json") -luci.http.write('') -end -function do_debug_ip() -luci.http.prepare_content("text/plain; charset=utf-8") -local a=sys.exec("/usr/bin/autoipsetadder/debugip.sh") -if (a=="") then -a="noproblem" -end -luci.http.write(a) -end -function get_log() - local logfile,fdp - logfile=uci:get("autoipsetadder","autoipsetadder","logfile") or "/tmp/addlist.log" - luci.http.prepare_content("text/plain; charset=utf-8") - if not fs.access(logfile) then - luci.http.write("") - return - end - if fs.access("/var/run/lucilogreload") then - fdp=0 - fs.remove("/var/run/lucilogreload") - else - fdp=tonumber(fs.readfile("/var/run/lucilogpos")) or 0 - end - local f=io.open(logfile, "r+") - f:seek("set",fdp) - local a=f:read(2048000) or "" - fdp=f:seek() - fs.writefile("/var/run/lucilogpos",tostring(fdp)) - f:close() - luci.http.write(a) -end \ No newline at end of file diff --git a/package/ctcgfw/luci-app-autoipsetadder/luasrc/model/cbi/autoipsetadder.lua b/package/ctcgfw/luci-app-autoipsetadder/luasrc/model/cbi/autoipsetadder.lua deleted file mode 100644 index 8e55be0a2a..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/luasrc/model/cbi/autoipsetadder.lua +++ /dev/null @@ -1,97 +0,0 @@ -require("luci.sys") -require("luci.util") -local fs=require"nixio.fs" -local uci=require"luci.model.uci".cursor() -local m,s,o -m = Map("autoipsetadder", translate("ipsetautoadder")) -m.description = translate("自动将联不通的域名加入ipset") -m:section(SimpleSection).template = "autoipsetadder/status" - -s = m:section(TypedSection, "autoipsetadder") -s.anonymous=true -s.addremove=false ----- enable -o = s:option(Flag, "enabled", translate("启用")) -o.default = 0 -o.rmempty = false ----- logview -o=s:option(TextValue, "show", "日志") -o.template = "autoipsetadder/check" ----- logpath -o = s:option(Value, "logfile", translate("Runtime log file")) -o.datatype = "string" -o.default="/tmp/addlist.log" -o.optional = false -o.validate=function(self, value) -if fs.stat(value,"type")=="dir" then - fs.rmdir(value) -end -if fs.stat(value,"type")=="dir" then - if m.message then - m.message =m.message.."\nerror!log file is a dir" - else - m.message ="error!log file is a dir" - end - return nil -end -return value -end ----- dnsmasq log -o = s:option(Value, "dnslogfile", translate("dnsmasq log file")) -o.datatype = "string" -o.optional = false -o.default="/tmp/dnsmasq.log" -o.validate=function(self, value) -if fs.stat(value,"type")=="dir" then - fs.rmdir(value) -end -if fs.stat(value,"type")=="dir" then - if m.message then - m.message =m.message.."\nerror!log file is a dir" - else - m.message ="error!log file is a dir" - end - return nil -end -return value -end ----- crontab -o = s:option(MultiValue, "crontab", translate("Crontab task"),translate("Please change time and args in crontab")) -o:value("autodeldnslog",translate("Auto del dnsmasq log")) -o:value("autotaillog",translate("Auto tail runtime log")) -o.widget = "checkbox" -o.default = "autodeldnslog autotaillog" -o.rmempty= true - -o = s:option(MultiValue, "config", translate("the way add to gfwlist")) -o:value("nochina",translate("no china ip")) -o:value("pingadd",translate("5ping loss1-4")) -o:value("packetpass",translate("packet >12 pass")) -o.widget = "checkbox" -o.default = "nochina pingadd packetpass" -o.rmempty=true ----- apply -nixio.fs.writefile("/var/run/lucilogreload","") -function m.on_commit(map) - local ucitracktest=uci:get("autoipsetadder","autoipsetadder","ucitracktest") - if ucitracktest=="1" then - return - elseif ucitracktest=="0" then - io.popen("/etc/init.d/autoipsetadder reload &") - else - if (fs.access("/var/run/AdGucitest")) then - uci:set("autoipsetadder","autoipsetadder","ucitracktest","0") - io.popen("/etc/init.d/autoipsetadder reload &") - else - fs.writefile("/var/run/AdGucitest","") - if (ucitracktest=="2") then - uci:set("autoipsetadder","autoipsetadder","ucitracktest","1") - else - uci:set("autoipsetadder","autoipsetadder","ucitracktest","2") - end - end - uci:save("autoipsetadder") - uci:commit("autoipsetadder") - end -end -return m diff --git a/package/ctcgfw/luci-app-autoipsetadder/luasrc/view/autoipsetadder/check.htm b/package/ctcgfw/luci-app-autoipsetadder/luasrc/view/autoipsetadder/check.htm deleted file mode 100644 index 651d93d46f..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/luasrc/view/autoipsetadder/check.htm +++ /dev/null @@ -1,62 +0,0 @@ -<%+cbi/valueheader%> -<%uci=require"luci.model.uci".cursor()%> -<%nixio=require"nixio"%> - -<%if uci:get("autoipsetadder","autoipsetadder","enabled")=="1" then%> - -<%:reverse%> - - - - - - - -<%end%> -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-autoipsetadder/luasrc/view/autoipsetadder/status.htm b/package/ctcgfw/luci-app-autoipsetadder/luasrc/view/autoipsetadder/status.htm deleted file mode 100644 index b9f123d6f1..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/luasrc/view/autoipsetadder/status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
\ No newline at end of file diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/etc/config/autoipsetadder b/package/ctcgfw/luci-app-autoipsetadder/root/etc/config/autoipsetadder deleted file mode 100644 index 5110d5260b..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/etc/config/autoipsetadder +++ /dev/null @@ -1,2 +0,0 @@ -config autoipsetadder 'autoipsetadder' - option enabled '0' diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/etc/init.d/autoipsetadder b/package/ctcgfw/luci-app-autoipsetadder/root/etc/init.d/autoipsetadder deleted file mode 100755 index 538c173a57..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/etc/init.d/autoipsetadder +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 - -START=99 -STOP=01 - -extra_command "test_crontab" "test_crontab" - -CRON_FILE=/etc/crontabs/root -CONFIGURATION=autoipsetadder - -set_dnsmasq_log() -{ - sed -i '/log-facility/d' /etc/dnsmasq.conf - sed -i '/log-queries/d' /etc/dnsmasq.conf - uci set dhcp.@dnsmasq[0].logfacility='/tmp/dnsmasq.log' - uci delete dhcp.@dnsmasq[0].logqueries - echo log-queries >> /etc/dnsmasq.conf - uci commit dhcp - /etc/init.d/dnsmasq reload -} - -stop_dnsmasq_log() -{ - sed -i '/log-queries/d' /etc/dnsmasq.conf - uci delete dhcp.@dnsmasq[0].logfacility - uci commit dhcp - /etc/init.d/dnsmasq reload -} - -reload_service() -{ - rm -f /var/run/AdGucitest 2>/dev/null - kill $(cat /var/run/autoipsetadder.pid) - start -} -service_triggers() { - procd_add_reload_trigger "$CONFIGURATION" -} -start_service() { - # Reading config - config_load "${CONFIGURATION}" - mkdir -p /tmp/run/autoipsetadder - local enabled - config_get_bool enabled $CONFIGURATION enabled 0 - do_crontab - if [ "$enabled" == "1" ]; then - set_dnsmasq_log - procd_open_instance - procd_set_param respawn - # pass config to script on start - procd_set_param command sh /usr/bin/autoipsetadder/autoaddlist.sh - procd_close_instance - echo "autoipsetadder turn on" - echo "enabled=$enabled" - else - stop_dnsmasq_log - echo "autoipsetadder turn off" - echo "enabled=$enabled" - fi -} - -stop_service() -{ - config_load "${CONFIGURATION}" - stop_dnsmasq_log - do_crontab - kill $(cat /var/run/autoipsetadder.pid) - echo "autoipsetadder turn off" - echo "enabled="$enabled"" -} -do_crontab(){ - config_get_bool enabled $CONFIGURATION enabled 0 - #config_get logfile $CONFIGURATION logfile "/tmp/addlist.log" - #config_get dnslogfile $CONFIGURATION dnslogfile "/tmp/dnsmasq.log" - config_get crontab $CONFIGURATION crontab "" - cronreload=0 - findstr="echo qingkong > \$(uci get autoipsetadder.autoipsetadder.dnslogfile)" - default="0 * * * * echo qingkong > \$(uci get autoipsetadder.autoipsetadder.dnslogfile)" - #[ -n "$lastdnslogfile" ] && findstr="echo qingkong > $lastdnslogfile" && [ "$lastdnslogfile" != "$dnslogfile" ] && replace="${lastdnslogfile//\//\\/}/${dnslogfile//\//\\/}" - [ "$enabled" == "0" ] || [ "${crontab//autodeldnslog/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - #[ "$lastdnslogfile" != "$dnslogfile" ] && uci set autoipsetadder.autoipsetadder.lastdnslogfile="$dnslogfile" && commit=1 - - findstr="/usr/bin/autoipsetadder/tailto.sh [0-9]* \$(uci get autoipsetadder.autoipsetadder.logfile)" - default="0 0 * * * /usr/bin/autoipsetadder/tailto.sh 2000 \$(uci get autoipsetadder.autoipsetadder.logfile)" - #[ -n "$lastlogfile" ] && findstr="/usr/bin/autoipsetadder/tailto.sh [0-9]* $lastlogfile" && [ "$lastlogfile" != "$logfile" ] && replace="${lastlogfile//\//\\/}/${logfile//\//\\/}" - [ "$enabled" == "0" ] || [ "${crontab//autotaillog/}" == "$crontab" ] && cronenable=0 || cronenable=1 - crontab_editor - #[ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && uci set autoipsetadder.autoipsetadder.lastlogfile="$logfile" && commit=1 - - [ "$cronreload" -gt 0 ] && /etc/init.d/cron restart - #[ "$commit" -gt 0 ] && uci commit autoipsetadder -} -crontab_editor(){ - local testline reload - local line="$(grep "$findstr" $CRON_FILE)" - [ -n "$replace" ] && [ -n "$line" ] && eval testline="\${line//$replace}" && [ "$testline" != "$line" ] && line="$testline" && reload="1" && replace="" - if [ "${line:0:1}" != "#" ]; then - if [ $cronenable -eq 1 ]; then - [ -z "$line" ] && line="$default" && reload="1" - if [ -n "$reload" ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "$line" >> $CRON_FILE - cronreload=$((cronreload+1)) - fi - elif [ -n "$line" ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "#$line" >> $CRON_FILE - cronreload=$((cronreload+1)) - fi - else - if [ $cronenable -eq 1 ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "${line:1}" >> $CRON_FILE - cronreload=$((cronreload+1)) - elif [ -z "$reload" ]; then - sed -i "\,$findstr,d" $CRON_FILE - echo "$line" >> $CRON_FILE - fi - fi -} -test_crontab(){ -config_load "${CONFIGURATION}" -do_crontab -} diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/etc/uci-defaults/40_luci-autoipsetadder b/package/ctcgfw/luci-app-autoipsetadder/root/etc/uci-defaults/40_luci-autoipsetadder deleted file mode 100755 index d1a8ee4577..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/etc/uci-defaults/40_luci-autoipsetadder +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@autoipsetadder[-1] - add ucitrack autoipsetadder - set ucitrack.@autoipsetadder[-1].init=autoipsetadder - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/autoaddlist.sh b/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/autoaddlist.sh deleted file mode 100755 index b6d8113b17..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/autoaddlist.sh +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/sh -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -logfile=$(uci get autoipsetadder.autoipsetadder.logfile) -[ -z "$logfile" ] && logfile="/tmp/addlist.log" -dnslogfile=$(uci get autoipsetadder.autoipsetadder.dnslogfile) -[ -z "$logfile" ] && dnslogfile="/tmp/dnsmasq.log" -config=$(uci get autoipsetadder.autoipsetadder.config 2>/dev/null) -[ "${config//nochina/}" == "$config" ] && nochina="0" || nochina="1" -[ "${config//packetpass/}" == "$config" ] && packetpass="0" || packetpass="1" -(tail -F $dnslogfile & echo $! >/var/run/autoipsetadder.pid ) | awk -v nochina="$nochina" -v packetpass="$packetpass" -F "[, ]+" '/reply/{ -ip=$8; -if (ip=="" || ip=="127.0.0.1"|| ip=="0.0.0.0") -{ -next; -} -if (index(ip,"")!=0) -{ -if (cname==1) -{ - next; -} -cname=1; -domain=$6; -#第一次cname时锁定域名,防止解析cname对其改动 -next; -} -#以上获得上行是否为cname,本行不是cname执行以下内容 -#lastdomain记录上次非cname的域名,与本次域名对比 -if(lastdomain!=$6){ - for (ipindex in ipcache) - { - delete ipcache[ipindex]; - } - ipcount=0; - createpid=1; -#上行非cname,并且不是同cname解析域名的多个ip,更新域名,清理同域名免试flag -if (cname!=1) -{ - domain=$6; - testall=0; -}} -ipcount++; -cname=0; -lastdomain=$6 -#去除非ipv4 -if (index(ip,".")==0) -{ - next; -} -#不重复探测ip -if (!(ip in a)) -{ -#包数>12的同域名放过 -if (passdomain==domain) -{ - print(ip" "domain" pass by same domain ok"); - a[ip]=domain; - next; -} -if (nochina==1){ -"ipset test china "ip" 2>&1"| getline ipset; -close("ipset test china "ip" 2>&1"); -if (index(ipset,"Warning")!=0){ - print("china "ip" pass"); - a[ip]=domain; - next; -}} -"ipset test gfwlist "ip" 2>&1"| getline ipset; -close("ipset test gfwlist "ip" 2>&1"); -if (index(ipset,"Warning")!=0){ - print("gfwlist "ip" pass"); - a[ip]=domain; - next; - } - -#ip压入缓存,用于未检测到443/80的缓存 -ipcache[ipcount]=ip; -if (testall==0){ - tryhttps=0; - tryhttp=0; - #探测 nf_conntrack 的443/80 - while ("grep "ip" /proc/net/nf_conntrack"| getline ret > 0) - { - split(ret, b," +"); - split(b[11], pagnum,"="); - #包数>12的放过 - if (packetpass==1 && pagnum[2]>12) - { - print("pass by packets="pagnum[2]" "ip" "domain); - for (ipindex in ipcache) - { - a[ipcache[ipindex]]=domain; - delete ipcache[ipindex]; - } - passdomain=domain; - close("grep "ip" /proc/net/nf_conntrack"); - ipcount--; - next; - } - if (b[8]=="dst="ip) - { - if (b[10]=="dport=443"){ - tryhttps=1; - break; - } - else if (b[10]=="dport=80"){ - tryhttp=1; - } - } - } - close("grep "ip" /proc/net/nf_conntrack"); -}else{ - if (testall==443) - { - tryhttps=1 - }else{ - tryhttp=1 - } -} -if (tryhttps==1) -{ if (createpid==1) - { - print "">"/tmp/run/autoipsetadder/"domain - close("/tmp/run/autoipsetadder/"domain); - print("create"domain); - print(ip" "domain" 443"ipcount-1); - a[ip]=domain; - #正在使用的ip用最大延迟,最后探测,减少打断tcp的可能 - system("/usr/bin/autoipsetadder/testip.sh "ip" "domain" 443 "ipcount-1" &"); - delete ipcache[ipcount]; - createpid=0; - } - #未检测到443/80同域名缓存的ip进行测试,ipindex-1为测试延迟时间 - for (ipindex in ipcache){ - print(ipcache[ipindex]" "domain" 443 "ipindex-1); - a[ipcache[ipindex]]=domain; - system("/usr/bin/autoipsetadder/testip.sh "ipcache[ipindex]" "domain" 443 "ipindex-1" &"); - delete ipcache[ipindex]; - } - #后续同域名ip免nf_conntrack测试 - testall=443; -} -else if (tryhttp==1) -{ - if (createpid==1) - { - print "">"/tmp/run/autoipsetadder/"domain - close("/tmp/run/autoipsetadder/"domain); - print("create"domain); - print(ip" "domain" 80 "ipcount-1); - a[ip]=domain; - system("/usr/bin/autoipsetadder/testip.sh "ip" "domain" 80 "ipcount-1" &"); - delete ipcache[ipcount]; - createpid=0; - } - for (ipindex in ipcache){ - print(ipcache[ipindex]" "domain" 80 "ipindex-1); - a[ipcache[ipindex]]=domain; - system("/usr/bin/autoipsetadder/testip.sh "ipcache[ipindex]" "domain" 80 "ipindex-1" &"); - delete ipcache[ipindex]; - } - testall=80; -}} -}' >> $logfile \ No newline at end of file diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/debugip.sh b/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/debugip.sh deleted file mode 100755 index 177ef65740..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/debugip.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -dlchina=$1; -logfile=$(uci get autoipsetadder.autoipsetadder.logfile) -[ -z "$logfile" ] && logfile="/tmp/addlist.log" - -dnslogfile=$(uci get autoipsetadder.autoipsetadder.dnslogfile) -[ -z "$logfile" ] && dnslogfile="/tmp/dnsmasq.log" - - -ipset list gfwlist | awk -v dlchina="$dlchina" -v dnslogfile="$dnslogfile" -v logfile="$logfile" '{ -if (index($0,".")==0) -{ - next; -} -if ($0=="127.0.0.1") {system("ipset d gfwlist 127.0.0.1");next;} -"ipset test whitelist "$0" 2>&1"| getline ipset; -close("ipset test whitelist "$0" 2>&1"); - if (index(ipset,"Warning")==0){ - white=0; - }else{ - white=1; - } - "ipset test china "$0" 2>&1"| getline ipset; - close("ipset test china "$0" 2>&1"); - if (index(ipset,"Warning")!=0){ - china=1; - } - else{ - china=0; - } - if (white==1) - { - if (china==0) - { - print("warning white ip not china"$0); - ret=system("grep "$0" "logfile); - if (ret!=0) - { - ret=system("grep "$0" "dnslogfile); - } - } - }else if (china==1) - { - print("warning china ip not white"$0); - ret=system("grep "$0" "logfile) - if (ret!=0) - { - ret=system("grep "$0" "dnslogfile); - } - if (dlchina) - { - system("ipset del gfwlist "$0); - } - } -}' \ No newline at end of file diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/tailto.sh b/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/tailto.sh deleted file mode 100755 index ab70e3a6ef..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/tailto.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -tail -n $1 "$2" > /var/run/tailtmp -cat /var/run/tailtmp > "$2" -rm /var/run/tailtmp \ No newline at end of file diff --git a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/testip.sh b/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/testip.sh deleted file mode 100755 index dcdda2ddd1..0000000000 --- a/package/ctcgfw/luci-app-autoipsetadder/root/usr/bin/autoipsetadder/testip.sh +++ /dev/null @@ -1,182 +0,0 @@ -#!/bin/sh -config=$(uci get autoipsetadder.autoipsetadder.config 2>/dev/null) -[ "${config//pingadd/}" == "$config" ] && pingadd="0" || pingadd="1" -echo $* | awk -v pingadd="$pingadd" '{ -if ($4=="") -{ -wait=0; -}else -{wait=$4;} -system("sleep "wait); -ERRNO=""; -pidfile="/tmp/run/autoipsetadder/"$2 -getline drop< pidfile; -close(pidfile); -if (ERRNO) { -addlist=0; -print("bypass"$1" "$2); -next;} -if ($3=="443") -{ -cmd=("httping -c 1 -t 4 -l "$2" --divert-connect "$1); -} -else if ($3=="80") -{ -cmd=("httping -c 1 -t 4 "$2" --divert-connect "$1); -} -addlist=0; -slow=0; -while ((cmd | getline ret) > 0) -{ - if (addlist!=0) - { - continue; - } - else if (index(ret,"short read")!=0) - { - if (system("httping -q -c 1 -t 4 -l "$2" --divert-connect "$1)==0) - { - addlist=-1; - break; - }else{ - print("doname rst autoaddip "$1" "$2); - addlist=1; - } - } - else if (index(ret,"timeout")!=0) - { - while ((cmd | getline ret) > 0) - { - if (index(ret,"timeout")!=0) - { - print("direct so slow autoaddip "$1" "$2); - addlist=1; - slow=1; - } - } - }else if (index(ret,"SSL handshake error: (null)")!=0) - { - if(system("curl -m 10 --resolve "$2":443:"$1" https://"$2" -o /dev/null 2>/dev/null")==0){ - addlist=-1; - break; - } - }else if (index(ret,"Connection refused")!=0){ - print("direct Connection refused autoaddip"$1" "$2); - addlist=1; - } -} -close(cmd); - -if (addlist!=1) -{ - if (addlist==0){ - split(ret, c,"[ /]+"); - print(c[6]); - if (c[6]=="failed,"){ - print("can not connect autoaddip "$1" "$2); - addlist=1; - } - else if (c[6]+0>10000) - { - print("direct ssl so slow autoaddip "$1" "$2); - addlist=1; - }else{ - addlist=-1;} - } - if (addlist==-1 && pingadd==1) - { - while (("ping -c 5 -q -A "$1 | getline ret) > 0) - { - if (index(ret,"packet loss")!=0) - { - split(ret, p,"[ ]+"); - if (p[4]>0 && p[4]<5) - { - print("ping packet loss autoaddip "$1" "$2); - pingloss=1; - addlist=1; - }else{pingloss=0;} - break; - } - } - close("ping -c 5 -q "$1); - } -} -ERRNO=""; -if (pingloss!=1){ - getline drop< pidfile; - close(pidfile); -} -if (ERRNO) {addlist=0;next;} -if (addlist==1){ -system("ipset add gfwlist "$1); -while ((cmd | getline ret) > 0) -{ - if (addlist==1) - { - if (index(ret,"short read")!=0) - { - system("ipset del gfwlist "$1); - print("doname proxy rst autodelip "$1" "$2); - addlist=-2; - } - else if (index(ret,"SSL handshake error: (null)")!=0) - { - if(system("curl -m 10 --resolve "$2":443:"$1" https://"$2" -o /dev/null 2>/dev/null")==0) - { - addlist=2; - } - } - } -} -close(cmd); -if (addlist==1){ - split(ret, c,"[ /]+"); - print(c[6]); - if (c[6]=="failed,") - { - system("ipset del gfwlist "$1); - print("proxy can not connect autodelip "$1" "$2); - addlist=-2; - }else{ - addlist=2; - } -} -} -}END{ -if (addlist==2) -{ if (pingloss==0){ - ERRNO=""; - getline drop< pidfile; - if (ERRNO) { - system("ipset del gfwlist "$1); - print("cancel add myself "$1" "$2" due to one ip success direct"); - }else{ - print $1"\n">>pidfile; - } - close(pidfile);} -}else if (addlist==-1) -{ - print($1" "$2" direct success"); - while ((getline ret< pidfile) > 0) - { - if (ret!=""){ - system("ipset del gfwlist "ret); - print("cancel add someone "ret" "$2" due to me"$1" success direct"); - } - } - close(pidfile); - system("rm "pidfile" 2>/dev/null"); - print($1" del "$2); -}else if (addlist==-2) -{ - system("sleep 10"); - while ((getline ret< pidfile) > 0) - { - if (ret!=""){ - system("ipset add gfwlist "$1); - print("add "ret" "$2" due to one ip success proxy"); - break;} - } - close(pidfile); -}}' \ No newline at end of file diff --git a/package/ctcgfw/luci-app-baidupcs-web/Makefile b/package/ctcgfw/luci-app-baidupcs-web/Makefile deleted file mode 100644 index 852179e3cc..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# -# -# -# Copyright (C) 2020 KFERMercer -# Copyright (C) 2021 ImmortalWrt -# -# THIS IS FREE SOFTWARE, LICENSED UNDER GPLv3. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-baidupcs-web -LUCI_TITLE:=LuCI support for BaiduPCS-Go -LUCI_DEPENDS:=+baidupcs-web +wget-ssl +openssl-util -LUCI_PKGARCH:=all -PKG_VERSION:=1.0 -PKG_RELEASE:=5 -PKG_MAINTAINER:= - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-baidupcs-web/luasrc/controller/baidupcs-web.lua b/package/ctcgfw/luci-app-baidupcs-web/luasrc/controller/baidupcs-web.lua deleted file mode 100644 index 805269dd16..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/luasrc/controller/baidupcs-web.lua +++ /dev/null @@ -1,17 +0,0 @@ -module("luci.controller.baidupcs-web", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/baidupcs-web") then - return - end - entry({"admin", "nas", "baidupcs-web"}, cbi("baidupcs-web"), _("BaiduPCS Web"), 300).dependent = true - entry({"admin","nas","baidupcs-web","status"},call("act_status")).leaf=true -end - -function act_status() - local e={} - e.running=luci.sys.call("pgrep baidupcs-web >/dev/null")==0 - -- e.port=luci.sys.exec("uci get baidupcs-web.config.port") - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-baidupcs-web/luasrc/model/cbi/baidupcs-web.lua b/package/ctcgfw/luci-app-baidupcs-web/luasrc/model/cbi/baidupcs-web.lua deleted file mode 100644 index c96dd58a17..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/luasrc/model/cbi/baidupcs-web.lua +++ /dev/null @@ -1,48 +0,0 @@ ---[[ - -Copyright (C) 2020 KFERMercer -Copyright (C) 2021 ImmortalWrt - -THIS IS FREE SOFTWARE, LICENSED UNDER GPLv3 - -]]-- - -m = Map("baidupcs-web") -m.title = translate("BaiduPCS-Web") -m.description = translate("基于BaiduPCS-Go, 可以让你高效的使用百度云") - -m:section(SimpleSection).template = "baidupcs-web/baidupcs-web_status" - -s = m:section(TypedSection, "baidupcs-web") -s.addremove = false -s.anonymous = true - -enable = s:option(Flag, "enabled", translate("启用")) -enable.rmempty = false - -o = s:option(Value, "port", translate("网页端口")) -o.datatype = "port" -o.placeholder = "5299" -o.default = "5299" -o.rmempty = false - -o = s:option(Value, "download_dir", translate("下载目录")) -o.placeholder = "/opt/baidupcsweb-download" -o.default = "/opt/baidupcsweb-download" -o.rmempty = false - -o = s:option(Value, "max_download_rate", translate("最大下载速度")) -o.placeholder = "0" - -o = s:option(Value, "max_upload_rate", translate("最大上传速度")) -o.placeholder = "0" -o.description = translate("0代表不限制, 单位为每秒的传输速率, 后缀'/s' 可省略, 如 2MB/s, 2MB, 2m, 2mb 均为一个意思") - -o = s:option(Value, "max_download_load", translate("同时进行下载文件的最大数量")) -o.placeholder = "1" -o.description = translate("不要太贪心, 当心被封号") - -o = s:option(Value, "max_parallel", translate("最大并发连接数")) -o.placeholder = "8" - -return m diff --git a/package/ctcgfw/luci-app-baidupcs-web/luasrc/view/baidupcs-web/baidupcs-web_status.htm b/package/ctcgfw/luci-app-baidupcs-web/luasrc/view/baidupcs-web/baidupcs-web_status.htm deleted file mode 100644 index 168e66011d..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/luasrc/view/baidupcs-web/baidupcs-web_status.htm +++ /dev/null @@ -1,38 +0,0 @@ - - - - -
-

- <%:Collecting data...%> -

-
diff --git a/package/ctcgfw/luci-app-baidupcs-web/root/etc/config/baidupcs-web b/package/ctcgfw/luci-app-baidupcs-web/root/etc/config/baidupcs-web deleted file mode 100644 index fd78131ef4..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/root/etc/config/baidupcs-web +++ /dev/null @@ -1,2 +0,0 @@ - -config baidupcs-web 'config' diff --git a/package/ctcgfw/luci-app-baidupcs-web/root/etc/init.d/baidupcs-web b/package/ctcgfw/luci-app-baidupcs-web/root/etc/init.d/baidupcs-web deleted file mode 100755 index ad70df944d..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/root/etc/init.d/baidupcs-web +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=90 -STOP=10 - -enabled="$(uci get baidupcs-web.config.enabled)" -port="$(uci get baidupcs-web.config.port)" -download_dir="$(uci get baidupcs-web.config.download_dir)" -max_download_rate="$(uci get baidupcs-web.config.max_download_rate || echo '0')" -max_upload_rate="$(uci get baidupcs-web.config.max_upload_rate || echo '0')" -max_download_load="$(uci get baidupcs-web.config.max_download_load || echo '1')" -max_parallel="$(uci get baidupcs-web.config.max_parallel || echo '8')" - -start() { - stop - [ "$enabled" == "1" ] || exit 0 - mkdir -p "${download_dir}" - baidupcs-web config set \ - --savedir "${download_dir}" \ - --max_download_rate "${max_download_rate}" \ - --max_upload_rate "${max_upload_rate}" \ - --max_download_load "${max_download_load}" \ - --max_parallel "${max_parallel}" \ - --max_upload_parallel "${max_parallel}" \ - >/dev/null 2>&1 - - baidupcs-web web --port "${port}" --access >/dev/null 2>&1 & -} - -stop() { - killall baidupcs-web >/dev/null 2>&1 -} diff --git a/package/ctcgfw/luci-app-baidupcs-web/root/etc/uci-defaults/luci-baidupcs-web b/package/ctcgfw/luci-app-baidupcs-web/root/etc/uci-defaults/luci-baidupcs-web deleted file mode 100755 index e72523b798..0000000000 --- a/package/ctcgfw/luci-app-baidupcs-web/root/etc/uci-defaults/luci-baidupcs-web +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@baidupcs-web[-1] - add ucitrack baidupcs-web - set ucitrack.@baidupcs-web[-1].init=baidupcs-web - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-beardropper/Makefile b/package/ctcgfw/luci-app-beardropper/Makefile deleted file mode 100644 index bbdbdcc0e3..0000000000 --- a/package/ctcgfw/luci-app-beardropper/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2020 Nate Ding -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -LUCI_Title:=LuCI Support for BearDropper -LUCI_PKGARCH=all - -PKG_VERSION:=1.1 -PKG_RELEASE:=20200522 - -PKG_MAINTANINER:=Nate Ding -PKG_LICENSE:=GLPv3 -PKG_LICENSE_FILES:=LICENSE - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-beardropper/luasrc/controller/beardropper.lua b/package/ctcgfw/luci-app-beardropper/luasrc/controller/beardropper.lua deleted file mode 100755 index 2c31a2ffc5..0000000000 --- a/package/ctcgfw/luci-app-beardropper/luasrc/controller/beardropper.lua +++ /dev/null @@ -1,19 +0,0 @@ -module("luci.controller.beardropper", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/beardropper") then - return - end - entry({"admin", "services", "beardropper"}, alias("admin", "services", "beardropper", "setting"),_("BearDropper"), 20).dependent = true - entry({"admin", "services", "beardropper", "status"}, call("act_status")) - entry({"admin", "services", "beardropper", "setting"}, cbi("beardropper/setting"), _("Setting"), 30).leaf= true - entry({"admin", "services", "beardropper", "log"}, form("beardropper/log"),_("Log"), 40).leaf= true - --entry: -end - -function act_status() - local e={} - e.running = luci.sys.call("pgrep -f /usr/sbin/beardropper >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end \ No newline at end of file diff --git a/package/ctcgfw/luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua b/package/ctcgfw/luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua deleted file mode 100644 index c725bcdf04..0000000000 --- a/package/ctcgfw/luci-app-beardropper/luasrc/model/cbi/beardropper/log.lua +++ /dev/null @@ -1,17 +0,0 @@ -f = SimpleForm("logview") -f.reset = false -f.submit = false -t = f:field(TextValue, "conf") -t.rmempty = true -t.rows = 20 -function t.cfgvalue() -local logs = luci.util.execi("logread | grep authpriv | grep beardropper") -local s = "" -for line in logs do -s = line .. "\n" .. s -end -return s -end -t.readonly="readonly" - -return f diff --git a/package/ctcgfw/luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua b/package/ctcgfw/luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua deleted file mode 100755 index 2735200bfd..0000000000 --- a/package/ctcgfw/luci-app-beardropper/luasrc/model/cbi/beardropper/setting.lua +++ /dev/null @@ -1,54 +0,0 @@ - -m = Map("beardropper", translate("BearDropper"), -translate("luci-app-beardropper, the LuCI app built with the elegant firewall rule generation on-the-fly script bearDropper.

Should you have any questions, please refer to the repo: ")..[[luci-app-beardropper]] -) -m:chain("luci") - -m:section(SimpleSection).template="beardropper/status" - -s = m:section(TypedSection, "beardropper", translate("")) -s.anonymous = true -s.addremove = false - --- TABS -s:tab("options", translate("Options")) -s:tab("blocked", translate("Blocked IP")) - -o = s:taboption("options", Flag, "enabled",translate("Enabled")) -o.default = 0 - --- OPTIONS -o = s:taboption("options", ListValue, "defaultMode", translate("Running Mode")) -o.default = "follow" -o:value("follow", translate("Follow")) -o:value("entire", translate("Entire")) -o:value("today", translate("Today")) -o:value("wipe", translate("Wipe")) - - -o = s:taboption("options", Value, "attemptCount", translate("Attempt Tolerance"), translate("failure attempts from a given IP required to trigger a ban")) - -o = s:taboption("options", Value, "attemptPeriod", translate("Attempt Cycle"), translate("time period during which attemptCount must be exceeded in order to trigger a ban
Format: 1w2d3h4m5s represents 1week 2days 3hours 4minutes 5 seconds")) - -o = s:taboption("options", Value, "banLength", translate("Ban Period"), translate("how long a ban exist once the attempt threshold is exceeded")) - -o = s:taboption("options", ListValue, "logLevel", translate("Log Level")) -o.default = "1" -o:value("0", translate("Silent")) -o:value("1", translate("Default")) -o:value("2", translate("Verbose")) -o:value("3", translate("Debug")) - - -o = s:taboption("blocked", Value, "blocked", translate("Blocked IP List")) -o.template="cbi/tvalue" -o.rows=40 -o.wrap="off" -o.readonly="true" -function o.cfgvalue(e, e) - return luci.sys.exec("cat /tmp/beardropper.bddb | awk /'=1/'| awk -F '=' '{print $1}' | awk '{print substr($0,6)}' | awk 'gsub(/_/,\":\",$0)'") -end - - - -return m diff --git a/package/ctcgfw/luci-app-beardropper/luasrc/view/beardropper/status.htm b/package/ctcgfw/luci-app-beardropper/luasrc/view/beardropper/status.htm deleted file mode 100755 index 808b3a0080..0000000000 --- a/package/ctcgfw/luci-app-beardropper/luasrc/view/beardropper/status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
\ No newline at end of file diff --git a/package/ctcgfw/luci-app-beardropper/po/zh-cn/beardropper.po b/package/ctcgfw/luci-app-beardropper/po/zh-cn/beardropper.po deleted file mode 100755 index bcffc10793..0000000000 --- a/package/ctcgfw/luci-app-beardropper/po/zh-cn/beardropper.po +++ /dev/null @@ -1,115 +0,0 @@ -bearDropper#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 -msgid "Attempt Cycle" -msgstr "尝试登录时间段" - - -msgid "Setting" -msgstr "设置" - -msgid "Log" -msgstr "日志" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 -msgid "Attempt Tolerance" -msgstr "最大尝试登录次数" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 -msgid "Ban Period" -msgstr "封禁IP时长" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/controller/bearDropper.lua:7 -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:7 -msgid "BearDropper" -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:20 -msgid "Blocked IP" -msgstr "屏蔽列表" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:52 -msgid "Blocked IP List" -msgstr "已屏蔽IP列表" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:20 -msgid "Collecting data..." -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:45 -msgid "Debug" -msgstr "调试" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:43 -msgid "Default" -msgstr "默认" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:22 -msgid "Enabled" -msgstr "启用" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:29 -msgid "Entire" -msgstr "已有记录" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:28 -msgid "Follow" -msgstr "后台监控" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:40 -msgid "Log Level" -msgstr "日志等级" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:10 -msgid "NOT RUNNING" -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:19 -msgid "Options" -msgstr "选项" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:7 -msgid "RUNNING" -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:26 -msgid "Running Mode" -msgstr "运行模式" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:42 -msgid "Silent" -msgstr "安静" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:30 -msgid "Today" -msgstr "仅今日" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:44 -msgid "Verbose" -msgstr "详细" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:31 -msgid "Wipe" -msgstr "清除所有" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 -msgid "failure attempts from a given IP required to trigger a ban" -msgstr "尝试登录超过设定值次数的IP将被封禁" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 -msgid "how long a ban exist once the attempt threshold is exceeded" -msgstr "IP将被封禁设定的时间" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:8 -msgid "" -"luci-app-beardropper, the LuCI app built with the elegant firewall rule " -"generation on-the-fly script bearDropper.

Should you have any " -"questions, please refer to the repo:" -msgstr "" -"luci-app-beardropper, 是一款能够在开启公网访问之后对潜在的ssh attack进行防御" -"的脚本.

如果你在使用中有任何问题,请到项目中提问: " - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 -msgid "" -"time period during which attemptCount must be exceeded in order to trigger a " -"ban
Format: 1w2d3h4m5s represents 1week 2days 3hours 4minutes 5 seconds" -msgstr "" -"在设定的时间段内连续尝试失败
格式:1w2d3h4m5s代表1周2天3小时4分5秒" diff --git a/package/ctcgfw/luci-app-beardropper/po/zh-tw/beardropper.po b/package/ctcgfw/luci-app-beardropper/po/zh-tw/beardropper.po deleted file mode 100644 index 00c1da72ea..0000000000 --- a/package/ctcgfw/luci-app-beardropper/po/zh-tw/beardropper.po +++ /dev/null @@ -1,115 +0,0 @@ -bearDropper#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 -msgid "Attempt Cycle" -msgstr "嘗試登錄時間段" - - -msgid "Setting" -msgstr "設置" - -msgid "Log" -msgstr "日誌" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 -msgid "Attempt Tolerance" -msgstr "最大嘗試登錄次數" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 -msgid "Ban Period" -msgstr "封禁IP時長" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/controller/bearDropper.lua:7 -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:7 -msgid "BearDropper" -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:20 -msgid "Blocked IP" -msgstr "屏蔽列表" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:52 -msgid "Blocked IP List" -msgstr "已屏蔽IP列表" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:20 -msgid "Collecting data..." -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:45 -msgid "Debug" -msgstr "調試" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:43 -msgid "Default" -msgstr "默認" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:22 -msgid "Enabled" -msgstr "啟用" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:29 -msgid "Entire" -msgstr "已有記錄" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:28 -msgid "Follow" -msgstr "後臺監控" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:40 -msgid "Log Level" -msgstr "日誌等級" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:10 -msgid "NOT RUNNING" -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:19 -msgid "Options" -msgstr "選項" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/view/bearDropper/status.htm:7 -msgid "RUNNING" -msgstr "" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:26 -msgid "Running Mode" -msgstr "運行模式" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:42 -msgid "Silent" -msgstr "安靜" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:30 -msgid "Today" -msgstr "僅今日" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:44 -msgid "Verbose" -msgstr "詳細" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:31 -msgid "Wipe" -msgstr "清除所有" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:34 -msgid "failure attempts from a given IP required to trigger a ban" -msgstr "嘗試登錄超過設定值次數的IP將被封禁" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:38 -msgid "how long a ban exist once the attempt threshold is exceeded" -msgstr "IP將被封禁設定的時間" - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:8 -msgid "" -"luci-app-beardropper, the LuCI app built with the elegant firewall rule " -"generation on-the-fly script bearDropper.

Should you have any " -"questions, please refer to the repo:" -msgstr "" -"luci-app-beardropper, 是壹款能夠在開啟公網訪問之後對潛在的ssh attack進行防禦" -"的腳本.

如果妳在使用中有任何問題,請到項目中提問: " - -#: ../../package/feeds/luci/luci-app-beardropper/luasrc/model/cbi/bearDropper/setting.lua:36 -msgid "" -"time period during which attemptCount must be exceeded in order to trigger a " -"ban
Format: 1w2d3h4m5s represents 1week 2days 3hours 4minutes 5 seconds" -msgstr "" -"在設定的時間段內連續嘗試失敗
格式:1w2d3h4m5s代表1周2天3小時4分5秒" diff --git a/package/ctcgfw/luci-app-beardropper/root/etc/config/beardropper b/package/ctcgfw/luci-app-beardropper/root/etc/config/beardropper deleted file mode 100644 index ec5d0d4e05..0000000000 --- a/package/ctcgfw/luci-app-beardropper/root/etc/config/beardropper +++ /dev/null @@ -1,18 +0,0 @@ -config beardropper - option attemptCount '5' - option attemptPeriod '12h' - option banLength '1w' - option logFacility 'authpriv.notice' - option fileStateType 'bddb' - option fileStateTempPrefix '/tmp/beardropper' - option fileStatePersistPrefix '/etc/beardropper' - list firewallHookChain 'input_wan_rule:1' - list firewallHookChain 'forwarding_wan_rule:1' - option firewallTarget 'DROP' - list logRegex 's/[`$"\'\'']//g' - list logRegex '/has invalid shell, rejected$/d' - list logRegex '/^[A-Za-z ]+[0-9: ]+authpriv.warn dropbear\[.+([0-9]+\.){3}[0-9]+/p' - list logRegex '/^[A-Za-z ]+[0-9: ]+authpriv.info dropbear\[.+:\ Exit before auth:.*/p' - option defaultMode 'follow' - option enabled '1' - option logLevel '2' diff --git a/package/ctcgfw/luci-app-beardropper/root/etc/init.d/beardropper b/package/ctcgfw/luci-app-beardropper/root/etc/init.d/beardropper deleted file mode 100755 index a7c1c98dbc..0000000000 --- a/package/ctcgfw/luci-app-beardropper/root/etc/init.d/beardropper +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh /etc/rc.common -START=98 - -PROG=/usr/sbin/beardropper -SERVICE_DAEMONIZE=1 -SERVICE_WRITE_PID=1 - -getKids() { - egrep "^PPid: *$1$" /proc/[0-9]*/s*s 2>/dev/null | cut -f3 -d/ | xargs echo -} - -start() { - service_start ${PROG} -m follow - echo "beardropper started!" -} - -stop() { - #PID=`cat /var/run/bearDropper.pid` - #kill `getKids $PID` - kill -9 `pgrep -f /usr/sbin/beardropper` - sleep 1 - service_stop ${PROG} - echo "beardropper exit...." -} - -restart() { - enabled=$(uci get beardropper.@beardropper[0].enabled) - pgrep -f ${PROG} >/dev/null - if [ $? -eq 0 ];then #running - if [ $enabled -eq 1 ]; then - stop - sleep 1 - echo "beardropper is restarting..." - start - else - stop - fi - else - if [ $enabled -eq 1 ]; then - start - else - exit 0 - fi - fi - -} diff --git a/package/ctcgfw/luci-app-beardropper/root/etc/uci-defaults/luci-beardropper b/package/ctcgfw/luci-app-beardropper/root/etc/uci-defaults/luci-beardropper deleted file mode 100755 index b484337f27..0000000000 --- a/package/ctcgfw/luci-app-beardropper/root/etc/uci-defaults/luci-beardropper +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@beardropper[-1] - add ucitrack beardropper - set ucitrack.@beardropper[-1].init=beardropper - commit ucitrack -EOF - -touch /tmp/beardropper.bddb -rm -rf /tmp/luci-* -exit 0 diff --git a/package/ctcgfw/luci-app-beardropper/root/usr/sbin/beardropper b/package/ctcgfw/luci-app-beardropper/root/usr/sbin/beardropper deleted file mode 100755 index d3015491fe..0000000000 --- a/package/ctcgfw/luci-app-beardropper/root/usr/sbin/beardropper +++ /dev/null @@ -1,517 +0,0 @@ -#!/bin/ash -# -# beardropper - dropbear log parsing ban agent for OpenWRT (Chaos Calmer rewrite of dropBrute.sh) -# http://github.com/robzr/bearDropper -- Rob Zwissler 11/2015 -# -# - lightweight, no dependencies, busybox ash + native OpenWRT commands -# - uses uci for configuration, overrideable via command line arguments -# - runs continuously in background (via init script) or periodically (via cron) -# - uses BIND time shorthand, ex: 1w5d3h1m8s is 1 week, 5 days, 3 hours, 1 minute, 8 seconds -# - Whitelist IP or CIDR entries (TBD) in uci config file -# - Records state file to tmpfs and intelligently syncs to persistent storage (can disable) -# - Persistent sync routines are optimized to avoid excessive writes (persistentStateWritePeriod) -# - Every run occurs in one of the following modes. If not specified, interval mode (24 hours) is -# the default when not specified (the init script specifies follow mode via command line) -# -# "follow" mode follows syslog to process entries as they happen; generally launched via init -# script. Responds the fastest, runs the most efficiently, but is always in memory. -# "interval" mode only processes entries going back the specified interval; requires -# more processing than today mode, but responds more accurately. Use with cron. -# "today" mode looks at log entries from the day it is being run, simple and lightweight, -# generally run from cron periodically (same simplistic behavior as dropBrute.sh) -# "entire" mode runs through entire contents of the syslog ring buffer -# "wipe" mode tears down the firewall rules and removes the state files - -# Load UCI config variable, or use default if not set -# Args: $1 = variable name (also uci option name), $2 = default_value -uciSection='beardropper.@[0]' -uciLoadVar () { - local getUci - getUci=`uci -q get ${uciSection}."$1"` || getUci="$2" - eval $1=\'$getUci\'; -} -uciLoad() { - local tFile=`mktemp` delim=" -" - [ "$1" = -d ] && { delim="$2"; shift 2; } - uci -q -d"$delim" get "$uciSection.$1" 2>/dev/null >$tFile - if [ $? = 0 ] ; then - sed -e s/^\'// -e s/\'$// <$tFile - else - while [ -n "$2" ]; do echo $2; shift; done - fi - rm -f $tFile -} - -# Common config variables - edit these in /etc/config/beardropper -# or they can be overridden at runtime with command line options -# -uciLoadVar defaultMode entire -uciLoadVar enabled 0 -uciLoadVar attemptCount 10 -uciLoadVar attemptPeriod 12h -uciLoadVar banLength 1w -uciLoadVar logLevel 1 -uciLoadVar logFacility authpriv.notice -uciLoadVar persistentStateWritePeriod -1 -uciLoadVar fileStateType bddb -uciLoadVar fileStateTempPrefix /tmp/beardropper -uciLoadVar fileStatePersistPrefix /etc/beardropper -firewallHookChains="`uciLoad -d \ firewallHookChain input_wan_rule:1 forwarding_wan_rule:1`" -uciLoadVar firewallTarget DROP - -# Not commonly changed, but changeable via uci or cmdline (primarily -# to enable multiple parallel runs with different parameters) -uciLoadVar firewallChain beardropper - -# Advanced variables, changeable via uci only (no cmdline), it is -# unlikely that these will need to be changed, but just in case... -# -uciLoadVar syslogTag "beardropper[$$]" -# how often to attempt to expire bans when in follow mode -uciLoadVar followModeCheckInterval 30m -uciLoadVar cmdLogread 'logread' # for tuning, ex: "logread -l250" -uciLoadVar cmdLogreadEba 'logread' # for "Exit before auth:" backscanning -uciLoadVar formatLogDate '%b %e %H:%M:%S %Y' # used to convert syslog dates -uciLoadVar formatTodayLogDateRegex '^%a %b %e ..:..:.. %Y' # filter for today mode - -# Begin functions -# -# Clear bddb entries from environment -bddbClear () { - local bddbVar - for bddbVar in `set | egrep '^bddb_[0-9_]*=' | cut -f1 -d= | xargs echo -n` ; do eval unset $bddbVar ; done - bddbStateChange=1 -} - -# Returns count of unique IP entries in environment -bddbCount () { set | egrep '^bddb_[0-9_]*=' | wc -l ; } - -# Loads existing bddb file into environment -# Arg: $1 = file, $2 = type (bddb/bddbz), $3 = -bddbLoad () { - local loadFile="$1.$2" fileType="$2" - if [ "$fileType" = bddb -a -f "$loadFile" ] ; then - . "$loadFile" - elif [ "$fileType" = bddbz -a -f "$loadFile" ] ; then - local tmpFile="`mktemp`" - zcat $loadFile > "$tmpFile" - . "$tmpFile" - rm -f "$tmpFile" - fi - bddbStateChange=0 -} - -# Saves environment bddb entries to file, Arg: $1 = file to save in -bddbSave () { - local saveFile="$1.$2" fileType="$2" - if [ "$fileType" = bddb ] ; then - set | egrep '^bddb_[0-9_]*=' | sed s/\'//g > "$saveFile" - elif [ "$fileType" = bddbz ] ; then - set | egrep '^bddb_[0-9_]*=' | sed s/\'//g | gzip -c > "$saveFile" - fi - bddbStateChange=0 -} - -# Set bddb record status=1, update ban time flag with newest -# Args: $1=IP Address $2=timeFlag -bddbEnableStatus () { - local record=`echo $1 | sed -e 's/\./_/g' -e 's/^/bddb_/'` - local newestTime=`bddbGetTimes $1 | sed 's/.* //' | xargs echo $2 | tr \ '\n' | sort -n | tail -1 ` - eval $record="1,$newestTime" - bddbStateChange=1 -} - -# Args: $1=IP Address -bddbGetStatus () { - bddbGetRecord $1 | cut -d, -f1 -} - -# Args: $1=IP Address -bddbGetTimes () { - bddbGetRecord $1 | cut -d, -f2- -} - -# Args: $1 = IP address, $2 [$3 ...] = timestamp (seconds since epoch) -bddbAddRecord () { - local ip="`echo "$1" | tr . _`" ; shift - local newEpochList="$@" status="`eval echo \\\$bddb_$ip | cut -f1 -d,`" - local oldEpochList="`eval echo \\\$bddb_$ip | cut -f2- -d, | tr , \ `" - local epochList=`echo $oldEpochList $newEpochList | xargs -n 1 echo | sort -un | xargs echo -n | tr \ ,` - [ -z "$status" ] && status=0 - eval "bddb_$ip"\=\"$status,$epochList\" - bddbStateChange=1 -} - -# Args: $1 = IP address -bddbRemoveRecord () { - local ip="`echo "$1" | tr . _`" - eval unset bddb_$ip - bddbStateChange=1 -} - -# Returns all IPs (not CIDR) present in records -bddbGetAllIPs () { - local ipRaw record - set | egrep '^bddb_[0-9_]*=' | tr \' \ | while read record ; do - ipRaw=`echo $record | cut -f1 -d= | sed 's/^bddb_//'` - if [ `echo $ipRaw | tr _ \ | wc -w` -eq 4 ] ; then - echo $ipRaw | tr _ . - fi - done -} - -# retrieve single IP record, Args: $1=IP -bddbGetRecord () { - local record - record=`echo $1 | sed -e 's/\./_/g' -e 's/^/bddb_/'` - eval echo \$$record -} - -isValidBindTime () { echo "$1" | egrep -q '^[0-9]+$|^([0-9]+[wdhms]?)+$' ; } - -# expands Bind time syntax into seconds (ex: 3w6d23h59m59s), Arg: $1=time string -expandBindTime () { - isValidBindTime "$1" || { logLine 0 "Error: Invalid time specified ($1)" >&2 ; exit 254 ; } - echo $((`echo "$1" | sed -e 's/w+*/*7d+/g' -e 's/d+*/*24h+/g' -e 's/h+*/*60m+/g' -e 's/m+*/*60+/g' \ - -e s/s//g -e s/+\$//`)) -} - -# Args: $1 = loglevel, $2 = info to log -logLine () { - [ $1 -gt $logLevel ] && return - shift - if [ "$logFacility" = "stdout" ] ; then echo "$@" - elif [ "$logFacility" = "stderr" ] ; then echo "$@" >&2 - else logger -t "$syslogTag" -p "$logFacility" "$@" - fi -} - -# extra validation, fails safe. Args: $1=log line -getLogTime () { - local logDateString=`echo "$1" | sed -n \ - 's/^[A-Z][a-z]* \([A-Z][a-z]* *[0-9][0-9]* *[0-9][0-9]*:[0-9][0-9]:[0-9][0-9] [0-9][0-9]*\) .*$/\1/p'` - date -d"$logDateString" -D"$formatLogDate" +%s || logLine 1 \ - "Error: logDateString($logDateString) malformed line ($1)" -} - -# extra validation, fails safe. Args: $1=log line -getLogIP () { - local logLine="$1" - local ebaPID=`echo "$logLine" | sed -n 's/^.*authpriv.info \(dropbear\[[0-9]*\]:\) Exit before auth:.*/\1/p'` - [ -n "$ebaPID" ] && logLine=`$cmdLogreadEba | fgrep "${ebaPID} Child connection from "` - echo "$logLine" | sed -n 's/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p' -} - -# Args: $1=IP -unBanIP () { - if iptables -C $firewallChain -s $ip -j "$firewallTarget" 2>/dev/null ; then - logLine 1 "Removing ban rule for IP $ip from iptables" - iptables -D $firewallChain -s $ip -j "$firewallTarget" - else - logLine 3 "unBanIP() Ban rule for $ip not present in iptables" - fi -} - -# Args: $1=IP -banIP () { - local ip="$1" x chain position - if ! iptables -nL $firewallChain >/dev/null 2>/dev/null ; then - logLine 1 "Creating iptables chain $firewallChain" - iptables -N $firewallChain - fi - for x in $firewallHookChains ; do - chain="${x%:*}" ; position="${x#*:}" - if [ $position -ge 0 ] && ! iptables -C $chain -j $firewallChain 2>/dev/null ; then - logLine 1 "Inserting hook into iptables chain $chain" - if [ $position = 0 ] ; then - iptables -A $chain -j $firewallChain - else - iptables -I $chain $position -j $firewallChain - fi ; fi - done - if ! iptables -C $firewallChain -s $ip -j "$firewallTarget" 2>/dev/null ; then - logLine 1 "Inserting ban rule for IP $ip into iptables chain $firewallChain" - iptables -A $firewallChain -s $ip -j "$firewallTarget" - else - logLine 3 "banIP() rule for $ip already present in iptables chain" - fi -} - -wipeFirewall () { - local x chain position - for x in $firewallHookChains ; do - chain="${x%:*}" ; position="${x#*:}" - if [ $position -ge 0 ] ; then - if iptables -C $chain -j $firewallChain 2>/dev/null ; then - logLine 1 "Removing hook from iptables chain $chain" - iptables -D $chain -j $firewallChain - fi ; fi - done - if iptables -nL $firewallChain >/dev/null 2>/dev/null ; then - logLine 1 "Flushing and removing iptables chain $firewallChain" - iptables -F $firewallChain 2>/dev/null - iptables -X $firewallChain 2>/dev/null - fi -} - -# review state file for expired records - we could add the bantime to -# the rule via --comment but I can't think of a reason why that would -# be necessary unless there is a bug in the expiration logic. The -# state db should be more resiliant than the firewall in practice. -# -bddbCheckStatusAll () { - local now=`date +%s` - bddbGetAllIPs | while read ip ; do - if [ `bddbGetStatus $ip` -eq 1 ] ; then - logLine 3 "bddbCheckStatusAll($ip) testing banLength:$banLength + bddbGetTimes:`bddbGetTimes $ip` vs. now:$now" - if [ $((banLength + `bddbGetTimes $ip`)) -lt $now ] ; then - logLine 1 "Ban expired for $ip, removing from iptables" - unBanIP $ip - bddbRemoveRecord $ip - else - logLine 3 "bddbCheckStatusAll($ip) not expired yet" - banIP $ip - fi - elif [ `bddbGetStatus $ip` -eq 0 ] ; then - local times=`bddbGetTimes $ip | tr , \ ` - local timeCount=`echo $times | wc -w` - local lastTime=`echo $times | cut -d\ -f$timeCount` - if [ $((lastTime + attemptPeriod)) -lt $now ] ; then - bddbRemoveRecord $ip - fi ; fi - saveState - done - loadState -} - -# Only used when status is already 0 and possibly going to 1, Args: $1=IP -bddbEvaluateRecord () { - local ip=$1 firstTime lastTime - local times=`bddbGetRecord $1 | cut -d, -f2- | tr , \ ` - local timeCount=`echo $times | wc -w` - local didBan=0 - - # 1: not enough attempts => do nothing and exit - # 2: attempts exceed threshold in time period => ban - # 3: attempts exceed threshold but time period is too long => trim oldest time, recalculate - while [ $timeCount -ge $attemptCount ] ; do - firstTime=`echo $times | cut -d\ -f1` - lastTime=`echo $times | cut -d\ -f$timeCount` - timeDiff=$((lastTime - firstTime)) - logLine 3 "bddbEvaluateRecord($ip) count=$timeCount timeDiff=$timeDiff/$attemptPeriod" - if [ $timeDiff -le $attemptPeriod ] ; then - bddbEnableStatus $ip $lastTime - logLine 2 "bddbEvaluateRecord($ip) exceeded ban threshold, adding to iptables" - banIP $ip - didBan=1 - fi - times=`echo $times | cut -d\ -f2-` - timeCount=`echo $times | wc -w` - done - [ $didBan = 0 ] && logLine 2 "bddbEvaluateRecord($ip) does not exceed threshhold, skipping" -} - -# Reads filtered log line and evaluates for action Args: $1=log line -processLogLine () { - local time=`getLogTime "$1"` - local ip=`getLogIP "$1"` - local status="`bddbGetStatus $ip`" - - if [ "$status" = -1 ] ; then - logLine 2 "processLogLine($ip,$time) IP is whitelisted" - elif [ "$status" = 1 ] ; then - if [ "`bddbGetTimes $ip`" -ge $time ] ; then - logLine 2 "processLogLine($ip,$time) already banned, ban timestamp already equal or newer" - else - logLine 2 "processLogLine($ip,$time) already banned, updating ban timestamp" - bddbEnableStatus $ip $time - fi - banIP $ip - elif [ -n "$ip" -a -n "$time" ] ; then - bddbAddRecord $ip $time - logLine 2 "processLogLine($ip,$time) Added record, comparing" - bddbEvaluateRecord $ip - else - logLine 1 "processLogLine($ip,$time) malformed line ($1)" - fi -} - -# Args, $1=-f to force a persistent write (unless lastPersistentStateWrite=-1) -saveState () { - local forcePersistent=0 - [ "$1" = "-f" ] && forcePersistent=1 - - if [ $bddbStateChange -gt 0 ] ; then - logLine 3 "saveState() saving to temp state file" - bddbSave "$fileStateTempPrefix" "$fileStateType" - logLine 3 "saveState() now=`date +%s` lPSW=$lastPersistentStateWrite pSWP=$persistentStateWritePeriod fP=$forcePersistent" - fi - if [ $persistentStateWritePeriod -gt 1 ] || [ $persistentStateWritePeriod -eq 0 -a $forcePersistent -eq 1 ] ; then - if [ $((`date +%s` - lastPersistentStateWrite)) -ge $persistentStateWritePeriod ] || [ $forcePersistent -eq 1 ] ; then - if [ ! -f "$fileStatePersist" ] || ! cmp -s "$fileStateTemp" "$fileStatePersist" ; then - logLine 2 "saveState() writing to persistent state file" - bddbSave "$fileStatePersistPrefix" "$fileStateType" - lastPersistentStateWrite="`date +%s`" - fi ; fi ; fi -} - -loadState () { - bddbClear - bddbLoad "$fileStatePersistPrefix" "$fileStateType" - bddbLoad "$fileStateTempPrefix" "$fileStateType" - logLine 2 "loadState() loaded `bddbCount` entries" -} - -printUsage () { - cat <<-_EOF_ - Usage: beardropper [-m mode] [-a #] [-b #] [-c ...] [-C ...] [-f ...] [-l #] [-j ...] [-p #] [-P #] [-s ...] - - Running Modes (-m) (def: $defaultMode) - follow constantly monitors log - entire processes entire log contents - today processes log entries from same day only - # interval mode, specify time string or seconds - wipe wipe state files, unhook and remove firewall chain - - Options - -a # attempt count before banning (def: $attemptCount) - -b # ban length once attempts hit threshold (def: $banLength) - -c ... firewall chain to record bans (def: $firewallChain) - -C ... firewall chains/positions to hook into (def: $firewallHookChains) - -f ... log facility (syslog facility or stdout/stderr) (def: $logFacility) - -j ... firewall target (def: $firewallTarget) - -l # log level - 0=off, 1=standard, 2=verbose (def: $logLevel) - -p # attempt period which attempt counts must happen in (def: $attemptPeriod) - -P # persistent state file write period (def: $persistentStateWritePeriod) - -s ... persistent state file prefix (def: $fileStatePersistPrefix) - -t ... temporary state file prefix (def: $fileStateTempPrefix) - - All time strings can be specified in seconds, or using BIND style - time strings, ex: 1w2d3h5m30s is 1 week, 2 days, 3 hours, etc... - - _EOF_ -} - -# Begin main logic -# -unset logMode -while getopts a:b:c:C:f:hj:l:m:p:P:s:t: arg ; do - case "$arg" in - a) attemptCount="$OPTARG" ;; - b) banLength="$OPTARG" ;; - c) firewallChain="$OPTARG" ;; - C) firewallHookChains="$OPTARG" ;; - f) logFacility="$OPTARG" ;; - j) firewallTarget="$OPTARG" ;; - l) logLevel="$OPTARG" ;; - m) logMode="$OPTARG" ;; - p) attemptPeriod="$OPTARG" ;; - P) persistentStateWritePeriod="$OPTARG" ;; - s) fileStatePersistPrefix="$OPTARG" ;; - s) fileStatePersistPrefix="$OPTARG" ;; - *) printUsage - exit 254 - esac - shift `expr $OPTIND - 1` -done -[ -z $logMode ] && logMode="$defaultMode" - -fileStateTemp="$fileStateTempPrefix.$fileStateType" -fileStatePersist="$fileStatePersistPrefix.$fileStateType" - -attemptPeriod=`expandBindTime $attemptPeriod` -banLength=`expandBindTime $banLength` -[ $persistentStateWritePeriod != -1 ] && persistentStateWritePeriod=`expandBindTime $persistentStateWritePeriod` -followModeCheckInterval=`expandBindTime $followModeCheckInterval` -exitStatus=0 - -# Here we convert the logRegex list into a sed -f file -fileRegex="/tmp/beardropper.$$.regex" -uciLoad logRegex 's/[`$"'\\\'']//g' '/has invalid shell, rejected$/d' \ - '/^[A-Za-z ]+[0-9: ]+authpriv.warn dropbear\[.+([0-9]+\.){3}[0-9]+/p' \ - '/^[A-Za-z ]+[0-9: ]+authpriv.info dropbear\[.+:\ Exit before auth:.*/p' > "$fileRegex" -lastPersistentStateWrite="`date +%s`" -loadState -bddbCheckStatusAll - -# main event loops - -if [ "$logMode" = follow ] ; then - logLine 1 "Running in follow mode" - readsSinceSave=0 lastCheckAll=0 worstCaseReads=1 tmpFile="/tmp/beardropper.$$.1" -# Verify if these do any good - try saving to a temp. Scope may make saveState useless. - trap "rm -f "$tmpFile" "$fileRegex" ; exit " SIGINT - [ $persistentStateWritePeriod -gt 1 ] && worstCaseReads=$((persistentStateWritePeriod / followModeCheckInterval)) - firstRun=1 - $cmdLogread -f | while read -t $followModeCheckInterval line || true ; do - if [ $firstRun -eq 1 ] ; then - trap "saveState -f" SIGHUP - trap "saveState -f; exit" SIGINT - firstRun=0 - fi - sed -nEf "$fileRegex" > "$tmpFile" <<-_EOF_ - $line - _EOF_ - line="`cat $tmpFile`" - [ -n "$line" ] && processLogLine "$line" - logLine 3 "ReadComp:$readsSinceSave/$worstCaseReads" - if [ $((++readsSinceSave)) -ge $worstCaseReads ] ; then - now="`date +%s`" - if [ $((now - lastCheckAll)) -ge $followModeCheckInterval ] ; then - bddbCheckStatusAll - lastCheckAll="$now" - saveState - readsSinceSave=0 - fi - fi - done -elif [ "$logMode" = entire ] ; then - logLine 1 "Running in entire mode" - $cmdLogread | sed -nEf "$fileRegex" | while read line ; do - processLogLine "$line" - saveState - done - loadState - bddbCheckStatusAll - saveState -f -elif [ "$logMode" = today ] ; then - logLine 1 "Running in today mode" - # merge the egrep into sed with -e /^$formatTodayLogDateRegex/!d - $cmdLogread | egrep "`date +\'$formatTodayLogDateRegex\'`" | sed -nEf "$fileRegex" | while read line ; do - processLogLine "$line" - saveState - done - loadState - bddbCheckStatusAll - saveState -f -elif isValidBindTime "$logMode" ; then - logInterval=`expandBindTime $logMode` - logLine 1 "Running in interval mode (reviewing $logInterval seconds of log entries)..." - timeStart=$((`date +%s` - logInterval)) - $cmdLogread | sed -nEf "$fileRegex" | while read line ; do - timeWhen=`getLogTime "$line"` - [ $timeWhen -ge $timeStart ] && processLogLine "$line" - saveState - done - loadState - bddbCheckStatusAll - saveState -f -elif [ "$logMode" = wipe ] ; then - logLine 2 "Wiping state files, unhooking and removing iptables chains" - wipeFirewall - if [ -f "$fileStateTemp" ] ; then - logLine 1 "Removing non-persistent statefile ($fileStateTemp)" - rm -f "$fileStateTemp" - fi - if [ -f "$fileStatePersist" ] ; then - logLine 1 "Removing persistent statefile ($fileStatePersist)" - rm -f "$fileStatePersist" - fi -else - logLine 0 "Error: invalid log mode ($logMode)" - exitStatus=254 -fi - -rm -f "$fileRegex" -exit $exitStatus diff --git a/package/ctcgfw/luci-app-chinadns/Makefile b/package/ctcgfw/luci-app-chinadns/Makefile deleted file mode 100644 index e6623e6d35..0000000000 --- a/package/ctcgfw/luci-app-chinadns/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (C) 2017 Ian Li -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for ChinaDNS -LUCI_DESCRIPTION:=LuCI Support for ChinaDNS. -LUCI_DEPENDS:=+ChinaDNS +curl -LUCI_PKGARCH:=all - -PKG_NAME:=luci-app-chinadns -PKG_VERSION:=2.0.1 -PKG_RELEASE:=2 - -PKG_LICENSE:=GPLv3 -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Ian Li - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature - diff --git a/package/ctcgfw/luci-app-chinadns/luasrc/controller/chinadns.lua b/package/ctcgfw/luci-app-chinadns/luasrc/controller/chinadns.lua deleted file mode 100644 index cd8056a4c0..0000000000 --- a/package/ctcgfw/luci-app-chinadns/luasrc/controller/chinadns.lua +++ /dev/null @@ -1,21 +0,0 @@ --- Copyright (C) 2016 OpenWrt-dist --- Copyright (C) 2016 Jian Chang --- Licensed to the public under the GNU General Public License v3. - -module("luci.controller.chinadns", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/chinadns") then - return - end - - entry({"admin", "services", "chinadns"}, cbi("chinadns"), _("ChinaDNS"), 70).dependent = true - entry({"admin", "services", "chinadns", "status"},call("act_status")).leaf=true -end - -function act_status() - local e={} - e.running=luci.sys.call("ps | grep /usr/sbin/chinadns | grep -v grep >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-chinadns/luasrc/model/cbi/chinadns.lua b/package/ctcgfw/luci-app-chinadns/luasrc/model/cbi/chinadns.lua deleted file mode 100644 index 66e1561d23..0000000000 --- a/package/ctcgfw/luci-app-chinadns/luasrc/model/cbi/chinadns.lua +++ /dev/null @@ -1,48 +0,0 @@ --- Copyright (C) 2016 OpenWrt-dist --- Copyright (C) 2016 Jian Chang --- Copyright (C) 2017 Ian Li --- Licensed to the public under the GNU General Public License v3. - -m = Map("chinadns", translate("ChinaDNS")) -m:section(SimpleSection).template = "chinadns/chinadns_status" - -s = m:section(TypedSection, "chinadns", translate("General Setting")) -s.anonymous = true - -o = s:option(Flag, "enable", translate("Enable")) -o.rmempty = false - -o = s:option(Flag, "yn_use_proxy", - translate("Used a proxy or not"), - translate("If you used a proxy like shadowsocks, please tick this option.")) -o.rmenpty = false - -o = s:option(Value, "port", translate("Local Port")) -o.placeholder = 5353 -o.default = 5353 -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "chnroute", translate("CHNRoute File")) -o.placeholder = "/etc/chinadns_chnroute.txt" -o.default = "/etc/chinadns_chnroute.txt" -o.datatype = "file" -o.rmempty = false - -o = s:option(Value, "foreign_subnet", - translate("Foreign Subnet"), - translate("Just foreign subnet. The local subnet will be automatically obtained.")) -o.placeholder = "45.76.96.0" -o.default = "45.76.96.0" -o.datatype = "ipaddr" -o:depends("yn_use_proxy", 0) - -o = s:option(Value, "server", - translate("Upstream Server"), - translate("A DNS server with edns-client-subnet support required, fill one only!")) -o.placeholder = "8.8.8.8" -o.default = "8.8.8.8" -o.datatype = "ipaddr" -o.rmempty = false - -return m diff --git a/package/ctcgfw/luci-app-chinadns/luasrc/view/chinadns/chinadns_status.htm b/package/ctcgfw/luci-app-chinadns/luasrc/view/chinadns/chinadns_status.htm deleted file mode 100644 index 6e63ee3b8b..0000000000 --- a/package/ctcgfw/luci-app-chinadns/luasrc/view/chinadns/chinadns_status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/package/ctcgfw/luci-app-chinadns/po/zh-cn/chinadns.po b/package/ctcgfw/luci-app-chinadns/po/zh-cn/chinadns.po deleted file mode 100644 index 7682c8ee76..0000000000 --- a/package/ctcgfw/luci-app-chinadns/po/zh-cn/chinadns.po +++ /dev/null @@ -1,41 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "ChinaDNS" -msgstr "ChinaDNS" - -msgid "CHNRoute File" -msgstr "国内路由表" - -msgid "Enable" -msgstr "启用" - -msgid "Used a proxy or not" -msgstr "是否使用了代理服务器" - -msgid "If you used a proxy like shadowsocks, please tick this option." -msgstr "如果您使用了类似SS的代理程序,请勾选此选项" - -msgid "Foreign Subnet" -msgstr "外网子网" - -msgid "Just foreign subnet. The local subnet will be automatically obtained." -msgstr "仅填写外网子网地址即可,本地子网地址会自动获取。" - -msgid "General Setting" -msgstr "基本设置" - -msgid "Local Port" -msgstr "本地端口" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "RUNNING" -msgstr "运行中" - -msgid "Upstream Server" -msgstr "上游服务器" - -msgid "A DNS server with edns-client-subnet support required, fill one only!" -msgstr "需要具有edns-client-subnet支持的DNS服务器,仅限填写一个!" diff --git a/package/ctcgfw/luci-app-chinadns/root/etc/config/chinadns b/package/ctcgfw/luci-app-chinadns/root/etc/config/chinadns deleted file mode 100644 index b7adc367aa..0000000000 --- a/package/ctcgfw/luci-app-chinadns/root/etc/config/chinadns +++ /dev/null @@ -1,7 +0,0 @@ -config chinadns - option chnroute '/etc/chinadns_chnroute.txt' - option enable '0' - option yn_use_proxy '0' - option port '5300' - option server '8.8.8.8' - option foreign_subnet '45.76.96.0' diff --git a/package/ctcgfw/luci-app-chinadns/root/etc/init.d/chinadns b/package/ctcgfw/luci-app-chinadns/root/etc/init.d/chinadns deleted file mode 100755 index 589ce1680b..0000000000 --- a/package/ctcgfw/luci-app-chinadns/root/etc/init.d/chinadns +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=99 -STOP=10 - -chnroute="$(uci get chinadns.@chinadns[0].chnroute)" -enable="$(uci get chinadns.@chinadns[0].enable)" -port="$(uci get chinadns.@chinadns[0].port)" -server="$(uci get chinadns.@chinadns[0].server)" -yn_use_proxy="$(uci get chinadns.@chinadns[0].yn_use_proxy)" - -local_subnet="$(curl -4 -s members.3322.org/dyndns/getip | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.')0" -[ "${yn_use_proxy}" -eq "1" ] && foreign_subnet="$(curl -4 -s ip.sb | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.')0)" || foreign_subnet="$(uci get chinadns.@chinadns[0].foreign_subnet)" - -start() -{ - stop - [ "${enable}" -eq "0" ] && exit 0 - /usr/sbin/chinadns -p "${port}" -s "${server}" -c "${chnroute}" -e "${local_subnet},${foreign_subnet}" >/dev/null 2>&1 & -} - -stop() -{ - kill -9 "$(ps | grep "/usr/sbin/chinadns" | grep -v grep | awk '{print $1}')" >/dev/null 2>&1 -} diff --git a/package/ctcgfw/luci-app-chinadns/root/etc/uci-defaults/luci-chinadns b/package/ctcgfw/luci-app-chinadns/root/etc/uci-defaults/luci-chinadns deleted file mode 100755 index 2309ac9612..0000000000 --- a/package/ctcgfw/luci-app-chinadns/root/etc/uci-defaults/luci-chinadns +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -uci -q batch <<-EOF >/dev/null - delete ucitrack.@chinands[-1] - add ucitrack chinadns - set ucitrack.@chinadns[-1].init=chinadns - commit ucitrack -EOF -exit 0 diff --git a/package/ctcgfw/luci-app-cupsd/Makefile b/package/ctcgfw/luci-app-cupsd/Makefile deleted file mode 100644 index fc17ebce89..0000000000 --- a/package/ctcgfw/luci-app-cupsd/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# -#-- Copyright (C) 2018 dz -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for cupsd -LUCI_DEPENDS:= +cups -PKG_VERSION:=1.2 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-cupsd/luasrc/controller/cupsd.lua b/package/ctcgfw/luci-app-cupsd/luasrc/controller/cupsd.lua deleted file mode 100644 index ec5acc619a..0000000000 --- a/package/ctcgfw/luci-app-cupsd/luasrc/controller/cupsd.lua +++ /dev/null @@ -1,17 +0,0 @@ -#-- Copyright (C) 2018 dz - -module("luci.controller.cupsd", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/cupsd") then - return - end - - local page - - - entry({"admin", "services", "cupsd"},alias("admin", "services", "cupsd","page1"),_("CUPS 打印服务器"),60).dependent = true - entry({"admin", "services", "cupsd","page1"}, cbi("cupsd/page1"),_("设置"),10).leaf = true - entry({"admin", "services", "cupsd","page2"}, cbi("cupsd/page2"),_("高级"),20).leaf = true -end - diff --git a/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page1.lua b/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page1.lua deleted file mode 100644 index af7c4cb14b..0000000000 --- a/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page1.lua +++ /dev/null @@ -1,42 +0,0 @@ --- Copyright 2008 Yanira --- Licensed to the public under the Apache License 2.0. ---mod by wulishui 20191205 - -require("luci.model.ipkg") -local fs = require "nixio.fs" -require("nixio.fs") -local uci = require "luci.model.uci".cursor() -local cport = uci:get_first("cupsd", "cupsd", "port") or 631 - -local m, s, o - -local running=(luci.sys.call("pidof cupsd > /dev/null") == 0) - -local button = "" -local state_msg = "" - -if running then - state_msg = "" .. translate("~正在运行~") .. "" -else - state_msg = "" .. translate("CUPS在睡觉觉zZZ") .. "" -end - -if running then - button = "

------" -end - -m = Map("cupsd", translate("CUPS打印服务器")) -m.description = translate("CUPS是苹果公司为MacOS和其他类似UNIX的操作系统开发的基于标准的开源打印系统。".. button .. "

" .. translate("运行状态").. " : " .. state_msg .. "
") - -s = m:section(TypedSection, "cupsd", translate("")) -s.anonymous = true - -s:option(Flag, "enabled", translate("Enable")) - -s:option(Value, "port", translate("WEB管理端口"),translate("可随意设定为无冲突的端口,对程序运行无影响。")).default = 631 -s.rmempty = true - - -return m - - diff --git a/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page2.lua b/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page2.lua deleted file mode 100644 index 4b54a11150..0000000000 --- a/package/ctcgfw/luci-app-cupsd/luasrc/model/cbi/cupsd/page2.lua +++ /dev/null @@ -1,29 +0,0 @@ -local fs = require "nixio.fs" -local sys = require "luci.sys" - -m = Map("samba", translate("CUPS高级配置"), translate("此处修改的是/etc/cups/cupsd.conf文件。")) -s = m:section(TypedSection, "samba") -s.anonymous=true - -o = s:option(TextValue, "/etc/cups/cupsd.conf") -o.rows = 20 -o.wrap = "off" -function o.cfgvalue(self, section) - return fs.readfile("/etc/cups/cupsd.conf") or "" -end - -function o.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - fs.writefile("/tmp/cupsd.conf", value) - if (luci.sys.call("cmp -s /tmp/cupsd.conf /etc/cups/cupsd.conf") == 1) then - fs.writefile("/etc/cups/cupsd.conf", value) - luci.sys.call("/etc/init.d/cupsd reload >/dev/null") - end - fs.remove("/tmp/cupsd.conf") - end -end - -return m - - diff --git a/package/ctcgfw/luci-app-cupsd/root/etc/config/cupsd b/package/ctcgfw/luci-app-cupsd/root/etc/config/cupsd deleted file mode 100644 index 132a52ee97..0000000000 --- a/package/ctcgfw/luci-app-cupsd/root/etc/config/cupsd +++ /dev/null @@ -1,4 +0,0 @@ - -config cupsd 'config' - option enabled '0' - option port '631' diff --git a/package/ctcgfw/luci-app-cupsd/root/etc/uci-defaults/luci-cupsd b/package/ctcgfw/luci-app-cupsd/root/etc/uci-defaults/luci-cupsd deleted file mode 100755 index 279f499120..0000000000 --- a/package/ctcgfw/luci-app-cupsd/root/etc/uci-defaults/luci-cupsd +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@cupsd[-1] - add ucitrack cupsd - set ucitrack.@cupsd[-1].init=cupsd - commit ucitrack -EOF - - -/etc/init.d/cupsd stop - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-cupsd/root/www/cups.pdf b/package/ctcgfw/luci-app-cupsd/root/www/cups.pdf deleted file mode 100644 index 42a52ef224..0000000000 Binary files a/package/ctcgfw/luci-app-cupsd/root/www/cups.pdf and /dev/null differ diff --git a/package/ctcgfw/luci-app-diskman/Makefile b/package/ctcgfw/luci-app-diskman/Makefile deleted file mode 100644 index 12fb45a803..0000000000 --- a/package/ctcgfw/luci-app-diskman/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-diskman -PKG_VERSION:=v0.2.11 -PKG_RELEASE:=beta -PKG_MAINTAINER:=lisaac -PKG_LICENSE:=AGPL-3.0 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/lisaac/luci-app-diskman.git -PKG_MIRROR_HASH:=b5ece7cb3918b9ca7ea0aabbf2e7b637ebf2b71ea2654117065c57079fad7df3 -PKG_SOURCE_VERSION:=$(PKG_VERSION) - -PKG_SOURCE_SUBDIR:=$(PKG_NAME) -PKG_SOURCE:=$(PKG_SOURCE_SUBDIR)-$(PKG_SOURCE_VERSION).tar.gz -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME)/config -config PACKAGE_$(PKG_NAME)_INCLUDE_btrfs_progs - bool "Include btrfs-progs" - default y -config PACKAGE_$(PKG_NAME)_INCLUDE_lsblk - bool "Include lsblk" - default y -config PACKAGE_$(PKG_NAME)_INCLUDE_mdadm - bool "Include mdadm" - default n -config PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456 - depends on PACKAGE_$(PKG_NAME)_INCLUDE_mdadm - bool "Include kmod-md-raid456" - default n -config PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linear - depends on PACKAGE_$(PKG_NAME)_INCLUDE_mdadm - bool "Include kmod-md-linear" - default n -endef - -define Package/$(PKG_NAME) - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=Disk Manager interface for LuCI - PKGARCH:=all - DEPENDS:=+e2fsprogs +parted +smartmontools +blkid \ - +PACKAGE_$(PKG_NAME)_INCLUDE_btrfs_progs:btrfs-progs \ - +PACKAGE_$(PKG_NAME)_INCLUDE_lsblk:lsblk \ - +PACKAGE_$(PKG_NAME)_INCLUDE_mdadm:mdadm \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456:mdadm \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_raid456:kmod-md-raid456 \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linears:mdadm \ - +PACKAGE_$(PKG_NAME)_INCLUDE_kmod_md_linears:kmod-md-linear -endef - -define Package/$(PKG_NAME)/description - Disk Manager interface for LuCI -endef - -define Build/Prepare - tar -xzvf $(DL_DIR)/$(PKG_SOURCE) -C $(BUILD_DIR) -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -rm -fr /tmp/luci-indexcache /tmp/luci-modulecache -endef - -define Package/$(PKG_NAME)/install - # $(INSTALL_DIR) $(1)/ - # cp -pR $(PKG_BUILD_DIR)/root/* $(1)/ - # $(INSTALL_DIR) $(1)/www - # cp -pR $(PKG_BUILD_DIR)/htdoc/* $(1)/www - $(INSTALL_DIR) $(1)/usr/lib/lua/luci - cp -pR $(PKG_BUILD_DIR)/applications/$(PKG_NAME)/luasrc/* $(1)/usr/lib/lua/luci/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $$(foreach po,$$(shell find $(PKG_BUILD_DIR)/applications/$(PKG_NAME)/po/*/*.po), \ - po2lmo $$(po) \ - $(1)/usr/lib/lua/luci/i18n/diskman.$$(shell echo $$(po) | awk -F'/' '{print $$$$(NF-1)}').lmo;) - #po2lmo $(PKG_BUILD_DIR)/po/zh-cn/diskman.po $(1)/usr/lib/lua/luci/i18n/diskman.zh-cn.lmo -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/ctcgfw/luci-app-dockerman/Makefile b/package/ctcgfw/luci-app-dockerman/Makefile deleted file mode 100644 index c9554d758e..0000000000 --- a/package/ctcgfw/luci-app-dockerman/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=Docker Manager interface for LuCI -LUCI_DEPENDS:=+luci-lib-docker +docker +dockerd +e2fsprogs +fdisk +ttyd -PKG_NAME:=luci-app-dockerman -PKG_VERSION:=v0.4.7 -PKG_RELEASE:=leanmod -PKG_MAINTAINER:=lisaac -PKG_LICENSE:=AGPL-3.0 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/controller/dockerman.lua b/package/ctcgfw/luci-app-dockerman/luasrc/controller/dockerman.lua deleted file mode 100644 index 12f37bee6a..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/controller/dockerman.lua +++ /dev/null @@ -1,384 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- -require "luci.util" -local docker = require "luci.model.docker" -local uci = require "luci.model.uci" - -module("luci.controller.dockerman",package.seeall) - -function index() - - entry({"admin", "services","docker"}, firstchild(), "Docker", 40).dependent = false - entry({"admin","services","docker","overview"},cbi("dockerman/overview"),_("Overview"),0).leaf=true - - local remote = luci.model.uci.cursor():get("dockerman", "local", "remote_endpoint") - if remote == nil then - local socket = luci.model.uci.cursor():get("dockerman", "local", "socket_path") - if socket and not nixio.fs.access(socket) then return end - elseif remote == "true" then - local host = luci.model.uci.cursor():get("dockerman", "local", "remote_host") - local port = luci.model.uci.cursor():get("dockerman", "local", "remote_port") - if not host or not port then return end - end - - if (require "luci.model.docker").new():_ping().code ~= 200 then return end - entry({"admin","services","docker","containers"},form("dockerman/containers"),_("Containers"),1).leaf=true - entry({"admin","services","docker","images"},form("dockerman/images"),_("Images"),2).leaf=true - entry({"admin","services","docker","networks"},form("dockerman/networks"),_("Networks"),3).leaf=true - entry({"admin","services","docker","volumes"},form("dockerman/volumes"),_("Volumes"),4).leaf=true - entry({"admin","services","docker","events"},call("action_events"),_("Events"),5) - entry({"admin","services","docker","newcontainer"},form("dockerman/newcontainer")).leaf=true - entry({"admin","services","docker","newnetwork"},form("dockerman/newnetwork")).leaf=true - entry({"admin","services","docker","container"},form("dockerman/container")).leaf=true - entry({"admin","services","docker","container_stats"},call("action_get_container_stats")).leaf=true - entry({"admin","services","docker","container_get_archive"},call("download_archive")).leaf=true - entry({"admin","services","docker","container_put_archive"},call("upload_archive")).leaf=true - entry({"admin","services","docker","images_save"},call("save_images")).leaf=true - entry({"admin","services","docker","images_load"},call("load_images")).leaf=true - entry({"admin","services","docker","images_import"},call("import_images")).leaf=true - entry({"admin","services","docker","images_get_tags"},call("get_image_tags")).leaf=true - entry({"admin","services","docker","images_tag"},call("tag_image")).leaf=true - entry({"admin","services","docker","images_untag"},call("untag_image")).leaf=true - entry({"admin","services","docker","confirm"},call("action_confirm")).leaf=true -end - -function action_events() - local logs = "" - local dk = docker.new() - local query ={} - query["until"] = os.time() - local events = dk:events({query = query}) - if events.code == 200 then - for _, v in ipairs(events.body) do - if v and v.Type == "container" then - logs = (logs ~= "" and (logs .. "\n") or logs) .. "[" .. os.date("%Y-%m-%d %H:%M:%S", v.time) .."] "..v.Type.. " " .. (v.Action or "null") .. " Container ID:".. (v.Actor.ID or "null") .. " Container Name:" .. (v.Actor.Attributes.name or "null") - elseif v.Type == "network" then - logs = (logs ~= "" and (logs .. "\n") or logs) .. "[" .. os.date("%Y-%m-%d %H:%M:%S", v.time) .."] "..v.Type.. " " .. v.Action .. " Container ID:"..( v.Actor.Attributes.container or "null" ) .. " Network Name:" .. (v.Actor.Attributes.name or "null") .. " Network type:".. v.Actor.Attributes.type or "" - elseif v.Type == "image" then - logs = (logs ~= "" and (logs .. "\n") or logs) .. "[" .. os.date("%Y-%m-%d %H:%M:%S", v.time) .."] "..v.Type.. " " .. v.Action .. " Image:".. (v.Actor.ID or "null").. " Image Name:" .. (v.Actor.Attributes.name or "null") - end - end - end - luci.template.render("dockerman/logs", {self={syslog = logs, title="Events"}}) -end - -local calculate_cpu_percent = function(d) - if type(d) ~= "table" then return end - cpu_count = tonumber(d["cpu_stats"]["online_cpus"]) - cpu_percent = 0.0 - cpu_delta = tonumber(d["cpu_stats"]["cpu_usage"]["total_usage"]) - tonumber(d["precpu_stats"]["cpu_usage"]["total_usage"]) - system_delta = tonumber(d["cpu_stats"]["system_cpu_usage"]) - tonumber(d["precpu_stats"]["system_cpu_usage"]) - if system_delta > 0.0 then - cpu_percent = string.format("%.2f", cpu_delta / system_delta * 100.0 * cpu_count) - end - -- return cpu_percent .. "%" - return cpu_percent -end - -local get_memory = function(d) - if type(d) ~= "table" then return end - -- local limit = string.format("%.2f", tonumber(d["memory_stats"]["limit"]) / 1024 / 1024) - -- local usage = string.format("%.2f", (tonumber(d["memory_stats"]["usage"]) - tonumber(d["memory_stats"]["stats"]["total_cache"])) / 1024 / 1024) - -- return usage .. "MB / " .. limit.. "MB" - local limit =tonumber(d["memory_stats"]["limit"]) - local usage = tonumber(d["memory_stats"]["usage"]) - tonumber(d["memory_stats"]["stats"]["total_cache"]) - return usage, limit -end - -local get_rx_tx = function(d) - if type(d) ~="table" then return end - -- local data - -- if type(d["networks"]) == "table" then - -- for e, v in pairs(d["networks"]) do - -- data = (data and (data .. "
") or "") .. e .. " Total Tx:" .. string.format("%.2f",(tonumber(v.tx_bytes)/1024/1024)) .. "MB Total Rx: ".. string.format("%.2f",(tonumber(v.rx_bytes)/1024/1024)) .. "MB" - -- end - -- end - local data = {} - if type(d["networks"]) == "table" then - for e, v in pairs(d["networks"]) do - data[e] = { - bw_tx = tonumber(v.tx_bytes), - bw_rx = tonumber(v.rx_bytes) - } - end - end - return data -end - -function action_get_container_stats(container_id) - if container_id then - local dk = docker.new() - local response = dk.containers:inspect({id = container_id}) - if response.code == 200 and response.body.State.Running then - response = dk.containers:stats({id = container_id, query = {stream = false}}) - if response.code == 200 then - local container_stats = response.body - local cpu_percent = calculate_cpu_percent(container_stats) - local mem_useage, mem_limit = get_memory(container_stats) - local bw_rxtx = get_rx_tx(container_stats) - luci.http.status(response.code, response.body.message) - luci.http.prepare_content("application/json") - luci.http.write_json({ - cpu_percent = cpu_percent, - memory = { - mem_useage = mem_useage, - mem_limit = mem_limit - }, - bw_rxtx = bw_rxtx - }) - else - luci.http.status(response.code, response.body.message) - luci.http.prepare_content("text/plain") - luci.http.write(response.body.message) - end - else - if response.code == 200 then - luci.http.status(500, "container "..container_id.." not running") - luci.http.prepare_content("text/plain") - luci.http.write("Container "..container_id.." not running") - else - luci.http.status(response.code, response.body.message) - luci.http.prepare_content("text/plain") - luci.http.write(response.body.message) - end - end - else - luci.http.status(404, "No container name or id") - luci.http.prepare_content("text/plain") - luci.http.write("No container name or id") - end -end - -function action_confirm() - local data = docker:read_status() - if data then - data = data:gsub("\n","
"):gsub(" "," ") - code = 202 - msg = data - else - code = 200 - msg = "finish" - data = "finish" - end - luci.http.status(code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({info = data}) -end - -function download_archive() - local id = luci.http.formvalue("id") - local path = luci.http.formvalue("path") - local dk = docker.new() - local first - - local cb = function(res, chunk) - if res.code == 200 then - if not first then - first = true - luci.http.header('Content-Disposition', 'inline; filename="archive.tar"') - luci.http.header('Content-Type', 'application\/x-tar') - end - luci.ltn12.pump.all(chunk, luci.http.write) - else - if not first then - first = true - luci.http.prepare_content("text/plain") - end - luci.ltn12.pump.all(chunk, luci.http.write) - end - end - - local res = dk.containers:get_archive({id = id, query = {path = path}}, cb) -end - -function upload_archive(container_id) - local path = luci.http.formvalue("upload-path") - local dk = docker.new() - local ltn12 = require "luci.ltn12" - - local rec_send = function(sinkout) - luci.http.setfilehandler(function (meta, chunk, eof) - if chunk then - ltn12.pump.step(ltn12.source.string(chunk), sinkout) - end - end) - end - - local res = dk.containers:put_archive({id = container_id, query = {path = path}, body = rec_send}) - local msg = res and res.body and res.body.message or nil - luci.http.status(res.code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg}) -end - -function save_images(container_id) - local names = luci.http.formvalue("names") - local dk = docker.new() - local first - - local cb = function(res, chunk) - if res.code == 200 then - if not first then - first = true - luci.http.status(res.code, res.message) - luci.http.header('Content-Disposition', 'inline; filename="images.tar"') - luci.http.header('Content-Type', 'application\/x-tar') - end - luci.ltn12.pump.all(chunk, luci.http.write) - else - if not first then - first = true - luci.http.prepare_content("text/plain") - end - luci.ltn12.pump.all(chunk, luci.http.write) - end - end - docker:write_status("Images: saving" .. " " .. container_id .. "...") - local res = dk.images:get({id = container_id, query = {names = names}}, cb) - docker:clear_status() - local msg = res and res.body and res.body.message or nil - luci.http.status(res.code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg}) -end - -function load_images() - local path = luci.http.formvalue("upload-path") - local dk = docker.new() - local ltn12 = require "luci.ltn12" - - local rec_send = function(sinkout) - luci.http.setfilehandler(function (meta, chunk, eof) - if chunk then - ltn12.pump.step(ltn12.source.string(chunk), sinkout) - end - end) - end - - docker:write_status("Images: loading...") - local res = dk.images:load({body = rec_send}) - -- res.body = {"stream":"Loaded image ID: sha256:1399d3d81f80d68832e85ed6ba5f94436ca17966539ba715f661bd36f3caf08f\n"} - local msg = res and res.body and ( res.body.message or res.body.stream or res.body.error)or nil - if res.code == 200 and msg and msg:match("Loaded image ID") then - docker:clear_status() - luci.http.status(res.code, msg) - else - docker:append_status("code:" .. res.code.." ".. msg) - luci.http.status(300, msg) - end - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg}) -end - --- function import_images() --- local src = luci.http.formvalue("src") --- local itag = luci.http.formvalue("tag") --- local dk = docker.new() --- local ltn12 = require "luci.ltn12" --- local rec_send = function(sinkout) --- luci.http.setfilehandler(function (meta, chunk, eof) --- if chunk then --- ltn12.pump.step(ltn12.source.string(chunk), sinkout) --- end --- end) --- end --- docker:write_status("Images: importing".. " ".. itag .."...\n") --- local repo = itag and itag:match("^([^:]+)") --- local tag = itag and itag:match("^[^:]-:([^:]+)") --- local res = dk.images:create({query = {fromSrc = src or "-", repo = repo or nil, tag = tag or nil }, body = not src and rec_send or nil}, docker.import_image_show_status_cb) --- local msg = res and res.body and ( res.body.message )or nil --- if not msg and #res.body == 0 then --- -- res.body = {"status":"sha256:d5304b58e2d8cc0a2fd640c05cec1bd4d1229a604ac0dd2909f13b2b47a29285"} --- msg = res.body.status or res.body.error --- elseif not msg and #res.body >= 1 then --- -- res.body = [...{"status":"sha256:d5304b58e2d8cc0a2fd640c05cec1bd4d1229a604ac0dd2909f13b2b47a29285"}] --- msg = res.body[#res.body].status or res.body[#res.body].error --- end --- if res.code == 200 and msg and msg:match("sha256:") then --- docker:clear_status() --- else --- docker:append_status("code:" .. res.code.." ".. msg) --- end --- luci.http.status(res.code, msg) --- luci.http.prepare_content("application/json") --- luci.http.write_json({message = msg}) --- end - -function get_image_tags(image_id) - if not image_id then - luci.http.status(400, "no image id") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "no image id"}) - return - end - local dk = docker.new() - local res = dk.images:inspect({id = image_id}) - local msg = res and res.body and res.body.message or nil - luci.http.status(res.code, msg) - luci.http.prepare_content("application/json") - if res.code == 200 then - local tags = res.body.RepoTags - luci.http.write_json({tags = tags}) - else - local msg = res and res.body and res.body.message or nil - luci.http.write_json({message = msg}) - end -end - -function tag_image(image_id) - local src = luci.http.formvalue("tag") - local image_id = image_id or luci.http.formvalue("id") - if type(src) ~= "string" or not image_id then - luci.http.status(400, "no image id or tag") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "no image id or tag"}) - return - end - local repo = src:match("^([^:]+)") - local tag = src:match("^[^:]-:([^:]+)") - local dk = docker.new() - local res = dk.images:tag({id = image_id, query={repo=repo, tag=tag}}) - local msg = res and res.body and res.body.message or nil - luci.http.status(res.code, msg) - luci.http.prepare_content("application/json") - if res.code == 201 then - local tags = res.body.RepoTags - luci.http.write_json({tags = tags}) - else - local msg = res and res.body and res.body.message or nil - luci.http.write_json({message = msg}) - end -end - -function untag_image(tag) - local tag = tag or luci.http.formvalue("tag") - if not tag then - luci.http.status(400, "no tag name") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "no tag name"}) - return - end - local dk = docker.new() - local res = dk.images:inspect({name = tag}) - if res.code == 200 then - local tags = res.body.RepoTags - if #tags > 1 then - local r = dk.images:remove({name = tag}) - local msg = r and r.body and r.body.message or nil - luci.http.status(r.code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg}) - else - luci.http.status(500, "Cannot remove the last tag") - luci.http.prepare_content("application/json") - luci.http.write_json({message = "Cannot remove the last tag"}) - end - else - local msg = res and res.body and res.body.message or nil - luci.http.status(res.code, msg) - luci.http.prepare_content("application/json") - luci.http.write_json({message = msg}) - end -end diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua deleted file mode 100644 index 2463e87254..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua +++ /dev/null @@ -1,575 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() -container_id = arg[1] -local action = arg[2] or "info" - -local images, networks, container_info -if not container_id then return end -local res = dk.containers:inspect({id = container_id}) -if res.code < 300 then container_info = res.body else return end -res = dk.networks:list() -if res.code < 300 then networks = res.body else return end - -local get_ports = function(d) - local data - if d.HostConfig and d.HostConfig.PortBindings then - for inter, out in pairs(d.HostConfig.PortBindings) do - data = (data and (data .. "
") or "") .. out[1]["HostPort"] .. ":" .. inter - end - end - return data -end - -local get_env = function(d) - local data - if d.Config and d.Config.Env then - for _,v in ipairs(d.Config.Env) do - data = (data and (data .. "
") or "") .. v - end - end - return data -end - -local get_command = function(d) - local data - if d.Config and d.Config.Cmd then - for _,v in ipairs(d.Config.Cmd) do - data = (data and (data .. " ") or "") .. v - end - end - return data -end - -local get_mounts = function(d) - local data - if d.Mounts then - for _,v in ipairs(d.Mounts) do - local v_sorce_d, v_dest_d - local v_sorce = "" - local v_dest = "" - for v_sorce_d in v["Source"]:gmatch('[^/]+') do - if v_sorce_d and #v_sorce_d > 12 then - v_sorce = v_sorce .. "/" .. v_sorce_d:sub(1,12) .. "..." - else - v_sorce = v_sorce .."/".. v_sorce_d - end - end - for v_dest_d in v["Destination"]:gmatch('[^/]+') do - if v_dest_d and #v_dest_d > 12 then - v_dest = v_dest .. "/" .. v_dest_d:sub(1,12) .. "..." - else - v_dest = v_dest .."/".. v_dest_d - end - end - data = (data and (data .. "
") or "") .. v_sorce .. ":" .. v["Destination"] .. (v["Mode"] ~= "" and (":" .. v["Mode"]) or "") - end - end - return data -end - -local get_device = function(d) - local data - if d.HostConfig and d.HostConfig.Devices then - for _,v in ipairs(d.HostConfig.Devices) do - data = (data and (data .. "
") or "") .. v["PathOnHost"] .. ":" .. v["PathInContainer"] .. (v["CgroupPermissions"] ~= "" and (":" .. v["CgroupPermissions"]) or "") - end - end - return data -end - -local get_links = function(d) - local data - if d.HostConfig and d.HostConfig.Links then - for _,v in ipairs(d.HostConfig.Links) do - data = (data and (data .. "
") or "") .. v - end - end - return data -end - -local get_tmpfs = function(d) - local data - if d.HostConfig and d.HostConfig.Tmpfs then - for k, v in pairs(d.HostConfig.Tmpfs) do - data = (data and (data .. "
") or "") .. k .. (v~="" and ":" or "")..v - end - end - return data -end - -local get_dns = function(d) - local data - if d.HostConfig and d.HostConfig.Dns then - for _, v in ipairs(d.HostConfig.Dns) do - data = (data and (data .. "
") or "") .. v - end - end - return data -end - -local get_sysctl = function(d) - local data - if d.HostConfig and d.HostConfig.Sysctls then - for k, v in pairs(d.HostConfig.Sysctls) do - data = (data and (data .. "
") or "") .. k..":"..v - end - end - return data -end - -local get_networks = function(d) - local data={} - if d.NetworkSettings and d.NetworkSettings.Networks and type(d.NetworkSettings.Networks) == "table" then - for k,v in pairs(d.NetworkSettings.Networks) do - data[k] = v.IPAddress or "" - end - end - return data -end - - -local start_stop_remove = function(m, cmd) - docker:clear_status() - docker:append_status("Containers: " .. cmd .. " " .. container_id .. "...") - local res - if cmd ~= "upgrade" then - res = dk.containers[cmd](dk, {id = container_id}) - else - res = dk.containers_upgrade(dk, {id = container_id}) - end - if res and res.code >= 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/container/"..container_id)) - else - docker:clear_status() - if cmd ~= "remove" and cmd ~= "upgrade" then - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/container/"..container_id)) - else - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/containers")) - end - end -end - -m=SimpleForm("docker", container_info.Name:sub(2), translate("Docker Container") ) -m.template = "dockerman/cbi/xsimpleform" -m.redirect = luci.dispatcher.build_url("admin/services/docker/containers") --- m:append(Template("dockerman/container")) -docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err=docker:read_status() -docker_status.err=docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - - -action_section = m:section(Table,{{}}) -action_section.notitle=true -action_section.rowcolors=false -action_section.template = "cbi/nullsection" - -btnstart=action_section:option(Button, "_start") -btnstart.template = "dockerman/cbi/inlinebutton" -btnstart.inputtitle=translate("Start") -btnstart.inputstyle = "apply" -btnstart.forcewrite = true -btnrestart=action_section:option(Button, "_restart") -btnrestart.template = "dockerman/cbi/inlinebutton" -btnrestart.inputtitle=translate("Restart") -btnrestart.inputstyle = "reload" -btnrestart.forcewrite = true -btnstop=action_section:option(Button, "_stop") -btnstop.template = "dockerman/cbi/inlinebutton" -btnstop.inputtitle=translate("Stop") -btnstop.inputstyle = "reset" -btnstop.forcewrite = true -btnupgrade=action_section:option(Button, "_upgrade") -btnupgrade.template = "dockerman/cbi/inlinebutton" -btnupgrade.inputtitle=translate("Upgrade") -btnupgrade.inputstyle = "reload" -btnstop.forcewrite = true -btnduplicate=action_section:option(Button, "_duplicate") -btnduplicate.template = "dockerman/cbi/inlinebutton" -btnduplicate.inputtitle=translate("Duplicate/Edit") -btnduplicate.inputstyle = "add" -btnstop.forcewrite = true -btnremove=action_section:option(Button, "_remove") -btnremove.template = "dockerman/cbi/inlinebutton" -btnremove.inputtitle=translate("Remove") -btnremove.inputstyle = "remove" -btnremove.forcewrite = true - -btnstart.write = function(self, section) - start_stop_remove(m,"start") -end -btnrestart.write = function(self, section) - start_stop_remove(m,"restart") -end -btnupgrade.write = function(self, section) - start_stop_remove(m,"upgrade") -end -btnremove.write = function(self, section) - start_stop_remove(m,"remove") -end -btnstop.write = function(self, section) - start_stop_remove(m,"stop") -end -btnduplicate.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/newcontainer/duplicate/"..container_id)) -end - -tab_section = m:section(SimpleSection) -tab_section.template = "dockerman/container" - -if action == "info" then - m.submit = false - m.reset = false - table_info = { - ["01name"] = {_key = translate("Name"), _value = container_info.Name:sub(2) or "-", _button=translate("Update")}, - ["02id"] = {_key = translate("ID"), _value = container_info.Id or "-"}, - ["03image"] = {_key = translate("Image"), _value = container_info.Config.Image .. "
" .. container_info.Image}, - ["04status"] = {_key = translate("Status"), _value = container_info.State and container_info.State.Status or "-"}, - ["05created"] = {_key = translate("Created"), _value = container_info.Created or "-"}, - } - table_info["06start"] = container_info.State.Status == "running" and {_key = translate("Start Time"), _value = container_info.State and container_info.State.StartedAt or "-"} or {_key = translate("Finish Time"), _value = container_info.State and container_info.State.FinishedAt or "-"} - table_info["07healthy"] = {_key = translate("Healthy"), _value = container_info.State and container_info.State.Health and container_info.State.Health.Status or "-"} - table_info["08restart"] = {_key = translate("Restart Policy"), _value = container_info.HostConfig and container_info.HostConfig.RestartPolicy and container_info.HostConfig.RestartPolicy.Name or "-", _button=translate("Update")} - table_info["081user"] = {_key = translate("User"), _value = container_info.Config and (container_info.Config.User ~="" and container_info.Config.User or "-") or "-"} - table_info["09mount"] = {_key = translate("Mount/Volume"), _value = get_mounts(container_info) or "-"} - table_info["10cmd"] = {_key = translate("Command"), _value = get_command(container_info) or "-"} - table_info["11env"] = {_key = translate("Env"), _value = get_env(container_info) or "-"} - table_info["12ports"] = {_key = translate("Ports"), _value = get_ports(container_info) or "-"} - table_info["13links"] = {_key = translate("Links"), _value = get_links(container_info) or "-"} - table_info["14device"] = {_key = translate("Device"), _value = get_device(container_info) or "-"} - table_info["15tmpfs"] = {_key = translate("Tmpfs"), _value = get_tmpfs(container_info) or "-"} - table_info["16dns"] = {_key = translate("DNS"), _value = get_dns(container_info) or "-"} - table_info["17sysctl"] = {_key = translate("Sysctl"), _value = get_sysctl(container_info) or "-"} - info_networks = get_networks(container_info) - list_networks = {} - for _, v in ipairs (networks) do - if v.Name then - local parent = v.Options and v.Options.parent or nil - local ip = v.IPAM and v.IPAM.Config and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil - ipv6 = v.IPAM and v.IPAM.Config and v.IPAM.Config[2] and v.IPAM.Config[2].Subnet or nil - local network_name = v.Name .. " | " .. v.Driver .. (parent and (" | " .. parent) or "") .. (ip and (" | " .. ip) or "").. (ipv6 and (" | " .. ipv6) or "") - list_networks[v.Name] = network_name - end - end - - if type(info_networks)== "table" then - for k,v in pairs(info_networks) do - table_info["14network"..k] = { - _key = translate("Network"), _value = k.. (v~="" and (" | ".. v) or ""), _button=translate("Disconnect") - } - list_networks[k]=nil - end - end - - table_info["15connect"] = {_key = translate("Connect Network"), _value = list_networks ,_opts = "", _button=translate("Connect")} - - - d_info = m:section(Table,table_info) - d_info.nodescr=true - d_info.formvalue=function(self, section) - return table_info - end - dv_key = d_info:option(DummyValue, "_key", translate("Info")) - dv_key.width = "20%" - dv_value = d_info:option(ListValue, "_value") - dv_value.render = function(self, section, scope) - if table_info[section]._key == translate("Name") then - self:reset_values() - self.template = "cbi/value" - self.size = 30 - self.keylist = {} - self.vallist = {} - self.default=table_info[section]._value - Value.render(self, section, scope) - elseif table_info[section]._key == translate("Restart Policy") then - self.template = "cbi/lvalue" - self:reset_values() - self.size = nil - self:value("no", "No") - self:value("unless-stopped", "Unless stopped") - self:value("always", "Always") - self:value("on-failure", "On failure") - self.default=table_info[section]._value - ListValue.render(self, section, scope) - elseif table_info[section]._key == translate("Connect Network") then - self.template = "cbi/lvalue" - self:reset_values() - self.size = nil - for k,v in pairs(list_networks) do - self:value(k,v) - end - self.default=table_info[section]._value - ListValue.render(self, section, scope) - else - self:reset_values() - self.rawhtml=true - self.template = "cbi/dvalue" - self.default=table_info[section]._value - DummyValue.render(self, section, scope) - end - end - dv_value.forcewrite = true -- for write function using simpleform - dv_value.write = function(self, section, value) - table_info[section]._value=value - end - dv_value.validate = function(self, value) - return value - end - dv_opts = d_info:option(Value, "_opts") - dv_opts.forcewrite = true -- for write function using simpleform - dv_opts.write = function(self, section, value) - - table_info[section]._opts=value - end - dv_opts.validate = function(self, value) - return value - end - dv_opts.render = function(self, section, scope) - if table_info[section]._key==translate("Connect Network") then - self.template = "cbi/value" - self.keylist = {} - self.vallist = {} - self.placeholder = "10.1.1.254" - self.datatype = "ip4addr" - self.default=table_info[section]._opts - Value.render(self, section, scope) - else - self.rawhtml=true - self.template = "cbi/dvalue" - self.default=table_info[section]._opts - DummyValue.render(self, section, scope) - end - end - btn_update = d_info:option(Button, "_button") - btn_update.forcewrite = true - btn_update.render = function(self, section, scope) - if table_info[section]._button and table_info[section]._value ~= nil then - btn_update.inputtitle=table_info[section]._button - self.template = "cbi/button" - self.inputstyle = "edit" - Button.render(self, section, scope) - else - self.template = "cbi/dvalue" - self.default="" - DummyValue.render(self, section, scope) - end - end - btn_update.write = function(self, section, value) - -- luci.util.perror(section) - local res - docker:clear_status() - if section == "01name" then - docker:append_status("Containers: rename " .. container_id .. "...") - local new_name = table_info[section]._value - res = dk.containers:rename({id = container_id, query = {name=new_name}}) - elseif section == "08restart" then - docker:append_status("Containers: update " .. container_id .. "...") - local new_restart = table_info[section]._value - res = dk.containers:update({id = container_id, body = {RestartPolicy = {Name = new_restart}}}) - elseif table_info[section]._key == translate("Network") then - local _,_,leave_network = table_info[section]._value:find("(.-) | .+") - leave_network = leave_network or table_info[section]._value - docker:append_status("Network: disconnect " .. leave_network .. container_id .. "...") - res = dk.networks:disconnect({name = leave_network, body = {Container = container_id}}) - elseif section == "15connect" then - local connect_network = table_info[section]._value - local network_opiton - if connect_network ~= "none" and connect_network ~= "bridge" and connect_network ~= "host" then - -- luci.util.perror(table_info[section]._opts) - network_opiton = table_info[section]._opts ~= "" and { - IPAMConfig={ - IPv4Address=table_info[section]._opts - } - } or nil - end - docker:append_status("Network: connect " .. connect_network .. container_id .. "...") - res = dk.networks:connect({name = connect_network, body = {Container = container_id, EndpointConfig= network_opiton}}) - end - if res and res.code > 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - else - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/container/"..container_id.."/info")) - end - --- info end -elseif action == "edit" then - local editsection= m:section(SimpleSection) - d = editsection:option( Value, "cpus", translate("CPUs"), translate("Number of CPUs. Number is a fractional number. 0.000 means no limit.")) - d.placeholder = "1.5" - d.rmempty = true - d.datatype="ufloat" - d.default = container_info.HostConfig.NanoCpus / (10^9) - - d = editsection:option(Value, "cpushares", translate("CPU Shares Weight"), translate("CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024.")) - d.placeholder = "1024" - d.rmempty = true - d.datatype="uinteger" - d.default = container_info.HostConfig.CpuShares - - d = editsection:option(Value, "memory", translate("Memory"), translate("Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.")) - d.placeholder = "128m" - d.rmempty = true - d.default = container_info.HostConfig.Memory ~=0 and ((container_info.HostConfig.Memory / 1024 /1024) .. "M") or 0 - - d = editsection:option(Value, "blkioweight", translate("Block IO Weight"), translate("Block IO weight (relative weight) accepts a weight value between 10 and 1000.")) - d.placeholder = "500" - d.rmempty = true - d.datatype="uinteger" - d.default = container_info.HostConfig.BlkioWeight - - m.handle = function(self, state, data) - if state == FORM_VALID then - local memory = data.memory - if memory and memory ~= 0 then - _,_,n,unit = memory:find("([%d%.]+)([%l%u]+)") - if n then - unit = unit and unit:sub(1,1):upper() or "B" - if unit == "M" then - memory = tonumber(n) * 1024 * 1024 - elseif unit == "G" then - memory = tonumber(n) * 1024 * 1024 * 1024 - elseif unit == "K" then - memory = tonumber(n) * 1024 - else - memory = tonumber(n) - end - end - end - request_body = { - BlkioWeight = tonumber(data.blkioweight), - NanoCPUs = tonumber(data.cpus)*10^9, - Memory = tonumber(memory), - CpuShares = tonumber(data.cpushares) - } - docker:write_status("Containers: update " .. container_id .. "...") - local res = dk.containers:update({id = container_id, body = request_body}) - if res and res.code >= 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - else - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/container/"..container_id.."/edit")) - end - end -elseif action == "file" then - local filesection= m:section(SimpleSection) - m.submit = false - m.reset = false - filesection.template = "dockerman/container_file" - filesection.container = container_id -elseif action == "logs" then - local logsection= m:section(SimpleSection) - local logs = "" - local query ={ - stdout = 1, - stderr = 1, - tail = 1000 - } - local logs = dk.containers:logs({id = container_id, query = query}) - if logs.code == 200 then - logsection.syslog=logs.body - else - logsection.syslog="Get Logs ERROR\n"..logs.code..": "..logs.body - end - logsection.title=translate("Container Logs") - logsection.template = "dockerman/logs" - m.submit = false - m.reset = false -elseif action == "console" then - m.submit = false - m.reset = false - local cmd_docker = luci.util.exec("which docker"):match("^.+docker") or nil - local cmd_ttyd = luci.util.exec("which ttyd"):match("^.+ttyd") or nil - if cmd_docker and cmd_ttyd then - local consolesection= m:section(SimpleSection) - local cmd = "/bin/sh" - local uid - local vcommand = consolesection:option(Value, "command", translate("Command")) - vcommand:value("/bin/sh", "/bin/sh") - vcommand:value("/bin/ash", "/bin/ash") - vcommand:value("/bin/bash", "/bin/bash") - vcommand.default = "/bin/sh" - vcommand.forcewrite = true - vcommand.write = function(self, section, value) - cmd = value - end - local vuid = consolesection:option(Value, "uid", translate("UID")) - vuid.forcewrite = true - vuid.write = function(self, section, value) - uid = value - end - local btn_connect = consolesection:option(Button, "connect") - btn_connect.render = function(self, section, scope) - self.inputstyle = "add" - self.title = " " - self.inputtitle = translate("Connect") - Button.render(self, section, scope) - end - btn_connect.write = function(self, section) - local cmd_docker = luci.util.exec("which docker"):match("^.+docker") or nil - local cmd_ttyd = luci.util.exec("which ttyd"):match("^.+ttyd") or nil - if not cmd_docker or not cmd_ttyd or cmd_docker:match("^%s+$") or cmd_ttyd:match("^%s+$") then return end - local kill_ttyd = 'netstat -lnpt | grep ":7682[ \t].*ttyd$" | awk \'{print $NF}\' | awk -F\'/\' \'{print "kill -9 " $1}\' | sh > /dev/null' - local hosts - local remote = uci:get("dockerman", "local", "remote_endpoint") - local socket_path = (remote == "false") and uci:get("dockerman", "local", "socket_path") or nil - local host = (remote == "true") and uci:get("dockerman", "local", "remote_host") or nil - local port = (remote == "true") and uci:get("dockerman", "local", "remote_port") or nil - if remote and host and port then - hosts = host .. ':'.. port - elseif socket_path then - hosts = "unix://" .. socket_path - else - return - end - - local start_cmd = cmd_ttyd .. ' -d 2 -p 7682 '.. cmd_docker .. ' -H "'.. hosts ..'" exec -it ' .. (uid and uid ~= "" and (" -u ".. uid .. ' ') or "").. container_id .. ' ' .. cmd .. ' &' - local res = luci.util.exec(start_cmd) - local console = consolesection:option(DummyValue, "console") - console.container_id = container_id - console.template = "dockerman/container_console" - end - end -elseif action == "stats" then - local response = dk.containers:top({id = container_id, query = {ps_args="-aux"}}) - local container_top - if response.code == 200 then - container_top=response.body - else - response = dk.containers:top({id = container_id}) - if response.code == 200 then - container_top=response.body - end - end - - if type(container_top) == "table" then - container_top=response.body - stat_section = m:section(SimpleSection) - stat_section.container_id = container_id - stat_section.template = "dockerman/container_stats" - table_stats = {cpu={key=translate("CPU Useage"),value='-'},memory={key=translate("Memory Useage"),value='-'}} - stat_section = m:section(Table, table_stats, translate("Stats")) - stat_section:option(DummyValue, "key", translate("Stats")).width="33%" - - stat_section:option(DummyValue, "value") - top_section= m:section(Table, container_top.Processes, translate("TOP")) - for i, v in ipairs(container_top.Titles) do - top_section:option(DummyValue, i, translate(v)) - end -end -m.submit = false -m.reset = false -end - -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua deleted file mode 100644 index 3520a8a3e7..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/containers.lua +++ /dev/null @@ -1,185 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local http = require "luci.http" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() - -local images, networks, containers -local res = dk.images:list() -if res.code <300 then images = res.body else return end -res = dk.networks:list() -if res.code <300 then networks = res.body else return end -res = dk.containers:list({query = {all=true}}) -if res.code <300 then containers = res.body else return end - -local urlencode = luci.http.protocol and luci.http.protocol.urlencode or luci.util.urlencode - -function get_containers() - local data = {} - if type(containers) ~= "table" then return nil end - for i, v in ipairs(containers) do - local index = v.Created .. v.Id - data[index]={} - data[index]["_selected"] = 0 - data[index]["_id"] = v.Id:sub(1,12) - data[index]["name"] = v.Names[1]:sub(2) - data[index]["_name"] = ''.. v.Names[1]:sub(2).."" - data[index]["_status"] = v.Status - if v.Status:find("^Up") then - data[index]["_status"] = ''.. data[index]["_status"] .. "" - else - data[index]["_status"] = ''.. data[index]["_status"] .. "" - end - if (type(v.NetworkSettings) == "table" and type(v.NetworkSettings.Networks) == "table") then - for networkname, netconfig in pairs(v.NetworkSettings.Networks) do - data[index]["_network"] = (data[index]["_network"] ~= nil and (data[index]["_network"] .." | ") or "").. networkname .. (netconfig.IPAddress ~= "" and (": " .. netconfig.IPAddress) or "") - end - end - -- networkmode = v.HostConfig.NetworkMode ~= "default" and v.HostConfig.NetworkMode or "bridge" - -- data[index]["_network"] = v.NetworkSettings.Networks[networkmode].IPAddress or nil - -- local _, _, image = v.Image:find("^sha256:(.+)") - -- if image ~= nil then - -- image=image:sub(1,12) - -- end - - if v.Ports then - data[index]["_ports"] = nil - for _,v2 in ipairs(v.Ports) do - data[index]["_ports"] = (data[index]["_ports"] and (data[index]["_ports"] .. ", ") or "") .. (v2.PublicPort and (v2.PublicPort .. ":") or "") .. (v2.PrivatePort and (v2.PrivatePort .."/") or "") .. (v2.Type and v2.Type or "") - end - end - for ii,iv in ipairs(images) do - if iv.Id == v.ImageID then - data[index]["_image"] = iv.RepoTags and iv.RepoTags[1] or (iv.RepoDigests[1]:gsub("(.-)@.+", "%1") .. ":") - end - end - - data[index]["_image_id"] = v.ImageID:sub(8,20) - data[index]["_command"] = v.Command - end - return data -end - -local c_lists = get_containers() --- list Containers --- m = Map("docker", translate("Docker")) -m = SimpleForm("docker", translate("Docker")) -m.template = "dockerman/cbi/xsimpleform" -m.submit=false -m.reset=false - -docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err=docker:read_status() -docker_status.err=docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - -c_table = m:section(Table, c_lists, translate("Containers")) -c_table.nodescr=true --- v.template = "cbi/tblsection" --- v.sortable = true -container_selecter = c_table:option(Flag, "_selected","") -container_selecter.disabled = 0 -container_selecter.enabled = 1 -container_selecter.default = 0 - -container_id = c_table:option(DummyValue, "_id", translate("ID")) -container_id.width="10%" -container_name = c_table:option(DummyValue, "_name", translate("Container Name")) -container_name.rawhtml = true -container_status = c_table:option(DummyValue, "_status", translate("Status")) -container_status.width="15%" -container_status.rawhtml=true -container_ip = c_table:option(DummyValue, "_network", translate("Network")) -container_ip.width="15%" -container_ports = c_table:option(DummyValue, "_ports", translate("Ports")) -container_ports.width="10%" -container_image = c_table:option(DummyValue, "_image", translate("Image")) -container_image.width="10%" -container_command = c_table:option(DummyValue, "_command", translate("Command")) -container_command.width="20%" - -container_selecter.write=function(self, section, value) - c_lists[section]._selected = value -end - -local start_stop_remove = function(m,cmd) - local c_selected = {} - -- 遍历table中sectionid - local c_table_sids = c_table:cfgsections() - for _, c_table_sid in ipairs(c_table_sids) do - -- 得到选中项的名字 - if c_lists[c_table_sid]._selected == 1 then - c_selected[#c_selected+1] = c_lists[c_table_sid].name --container_name:cfgvalue(c_table_sid) - end - end - if #c_selected >0 then - docker:clear_status() - local success = true - for _,cont in ipairs(c_selected) do - docker:append_status("Containers: " .. cmd .. " " .. cont .. "...") - local res = dk.containers[cmd](dk, {id = cont}) - if res and res.code >= 300 then - success = false - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") - else - docker:append_status("done\n") - end - end - if success then docker:clear_status() end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/containers")) - end -end - -action_section = m:section(Table,{{}}) -action_section.notitle=true -action_section.rowcolors=false -action_section.template="cbi/nullsection" - -btnnew=action_section:option(Button, "_new") -btnnew.inputtitle= translate("New") -btnnew.template = "dockerman/cbi/inlinebutton" -btnnew.inputstyle = "add" -btnnew.forcewrite = true -btnstart=action_section:option(Button, "_start") -btnstart.template = "dockerman/cbi/inlinebutton" -btnstart.inputtitle=translate("Start") -btnstart.inputstyle = "apply" -btnstart.forcewrite = true -btnrestart=action_section:option(Button, "_restart") -btnrestart.template = "dockerman/cbi/inlinebutton" -btnrestart.inputtitle=translate("Restart") -btnrestart.inputstyle = "reload" -btnrestart.forcewrite = true -btnstop=action_section:option(Button, "_stop") -btnstop.template = "dockerman/cbi/inlinebutton" -btnstop.inputtitle=translate("Stop") -btnstop.inputstyle = "reset" -btnstop.forcewrite = true -btnremove=action_section:option(Button, "_remove") -btnremove.template = "dockerman/cbi/inlinebutton" -btnremove.inputtitle=translate("Remove") -btnremove.inputstyle = "remove" -btnremove.forcewrite = true -btnnew.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/newcontainer")) -end -btnstart.write = function(self, section) - start_stop_remove(m,"start") -end -btnrestart.write = function(self, section) - start_stop_remove(m,"restart") -end -btnremove.write = function(self, section) - start_stop_remove(m,"remove") -end -btnstop.write = function(self, section) - start_stop_remove(m,"stop") -end - -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua deleted file mode 100644 index 5c41b63b13..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/images.lua +++ /dev/null @@ -1,224 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() - -local containers, images -local res = dk.images:list() -if res.code <300 then images = res.body else return end -res = dk.containers:list({query = {all=true}}) -if res.code <300 then containers = res.body else return end - -function get_images() - local data = {} - for i, v in ipairs(images) do - local index = v.Created .. v.Id - data[index]={} - data[index]["_selected"] = 0 - data[index]["id"] = v.Id:sub(8) - data[index]["_id"] = '' .. v.Id:sub(8,20) .. '' - if v.RepoTags and next(v.RepoTags)~=nil then - for i, v1 in ipairs(v.RepoTags) do - data[index]["_tags"] =(data[index]["_tags"] and ( data[index]["_tags"] .. "
" )or "") .. ((v1:match("") or (#v.RepoTags == 1)) and v1 or ('' .. v1 .. '')) - if not data[index]["tag"] then - data[index]["tag"] = v1--:match("") and nil or v1 - end - end - else - data[index]["_tags"] = v.RepoDigests[1] and v.RepoDigests[1]:match("^(.-)@.+") - data[index]["_tags"] = (data[index]["_tags"] and data[index]["_tags"] or "" ).. ":" - end - data[index]["_tags"] = data[index]["_tags"]:gsub("","<none>") - -- data[index]["_tags"] = '' .. data[index]["_tags"] .. '' - for ci,cv in ipairs(containers) do - if v.Id == cv.ImageID then - data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "").. - ''.. cv.Names[1]:sub(2).."" - end - end - data[index]["_size"] = string.format("%.2f", tostring(v.Size/1024/1024)).."MB" - data[index]["_created"] = os.date("%Y/%m/%d %H:%M:%S",v.Created) - end - return data -end - -local image_list = get_images() - --- m = Map("docker", translate("Docker")) -m = SimpleForm("docker", translate("Docker")) -m.template = "dockerman/cbi/xsimpleform" -m.submit=false -m.reset=false - -local pull_value={_image_tag_name="", _registry="index.docker.io"} -local pull_section = m:section(SimpleSection, translate("Pull Image")) -pull_section.template="cbi/nullsection" -local tag_name = pull_section:option(Value, "_image_tag_name") -tag_name.template = "dockerman/cbi/inlinevalue" -tag_name.placeholder="hello-world:latest" -local action_pull = pull_section:option(Button, "_pull") -action_pull.inputtitle= translate("Pull") -action_pull.template = "dockerman/cbi/inlinebutton" -action_pull.inputstyle = "add" -tag_name.write = function(self, section, value) - local hastag = value:find(":") - if not hastag then - value = value .. ":latest" - end - pull_value["_image_tag_name"] = value -end -action_pull.write = function(self, section) - local tag = pull_value["_image_tag_name"] - local json_stringify = luci.jsonc and luci.jsonc.stringify - if tag and tag ~= "" then - docker:write_status("Images: " .. "pulling" .. " " .. tag .. "...\n") - -- local x_auth = nixio.bin.b64encode(json_stringify({serveraddress= server})) , header={["X-Registry-Auth"] = x_auth} - local res = dk.images:create({query = {fromImage=tag}}, docker.pull_image_show_status_cb) - -- {"errorDetail": {"message": "failed to register layer: ApplyLayer exit status 1 stdout: stderr: write \/docker: no space left on device" }, "error": "failed to register layer: ApplyLayer exit status 1 stdout: stderr: write \/docker: no space left on device" } - if res and res.code == 200 and (res.body[#res.body] and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. tag)) then - docker:clear_status() - else - docker:append_status("code:" .. res.code.." ".. (res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message)).. "\n") - end - else - docker:append_status("code: 400 please input the name of image name!") - end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/images")) -end - --- local import_section = m:section(SimpleSection, translate("Import Images")) --- local im = import_section:option(DummyValue, "_image_import") --- im.template = "dockerman/images_import" - -local image_table = m:section(Table, image_list, translate("Images")) - -local image_selecter = image_table:option(Flag, "_selected","") -image_selecter.disabled = 0 -image_selecter.enabled = 1 -image_selecter.default = 0 - -local image_id = image_table:option(DummyValue, "_id", translate("ID")) -image_id.rawhtml = true -image_table:option(DummyValue, "_tags", translate("RepoTags")).rawhtml = true -image_table:option(DummyValue, "_containers", translate("Containers")).rawhtml = true -image_table:option(DummyValue, "_size", translate("Size")) -image_table:option(DummyValue, "_created", translate("Created")) -image_selecter.write = function(self, section, value) - image_list[section]._selected = value -end - -local remove_action = function(force) - local image_selected = {} - -- 遍历table中sectionid - local image_table_sids = image_table:cfgsections() - for _, image_table_sid in ipairs(image_table_sids) do - -- 得到选中项的名字 - if image_list[image_table_sid]._selected == 1 then - image_selected[#image_selected+1] = (image_list[image_table_sid]["_tags"]:match("
") or image_list[image_table_sid]["_tags"]:match("<none>")) and image_list[image_table_sid].id or image_list[image_table_sid].tag - end - end - if next(image_selected) ~= nil then - local success = true - docker:clear_status() - for _,img in ipairs(image_selected) do - docker:append_status("Images: " .. "remove" .. " " .. img .. "...") - local query - if force then query = {force = true} end - local msg = dk.images:remove({id = img, query = query}) - if msg.code ~= 200 then - docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") - success = false - else - docker:append_status("done\n") - end - end - if success then docker:clear_status() end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/images")) - end -end - -local docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err = docker:read_status() -docker_status.err = docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - -local action = m:section(Table,{{}}) -action.notitle=true -action.rowcolors=false -action.template="cbi/nullsection" - -local btnremove = action:option(Button, "remove") -btnremove.inputtitle= translate("Remove") -btnremove.template = "dockerman/cbi/inlinebutton" -btnremove.inputstyle = "remove" -btnremove.forcewrite = true -btnremove.write = function(self, section) - remove_action() -end - -local btnforceremove = action:option(Button, "forceremove") -btnforceremove.inputtitle= translate("Force Remove") -btnforceremove.template = "dockerman/cbi/inlinebutton" -btnforceremove.inputstyle = "remove" -btnforceremove.forcewrite = true -btnforceremove.write = function(self, section) - remove_action(true) -end - -local btnsave = action:option(Button, "save") -btnsave.inputtitle= translate("Save") -btnsave.template = "dockerman/cbi/inlinebutton" -btnsave.inputstyle = "edit" -btnsave.forcewrite = true -btnsave.write = function (self, section) - local image_selected = {} - local image_table_sids = image_table:cfgsections() - for _, image_table_sid in ipairs(image_table_sids) do - if image_list[image_table_sid]._selected == 1 then - image_selected[#image_selected+1] = image_list[image_table_sid].id --image_id:cfgvalue(image_table_sid) - end - end - if next(image_selected) ~= nil then - local names - for _,img in ipairs(image_selected) do - names = names and (names .. "&names=".. img) or img - end - local first - local cb = function(res, chunk) - if res.code == 200 then - if not first then - first = true - luci.http.header('Content-Disposition', 'inline; filename="images.tar"') - luci.http.header('Content-Type', 'application\/x-tar') - end - luci.ltn12.pump.all(chunk, luci.http.write) - else - if not first then - first = true - luci.http.prepare_content("text/plain") - end - luci.ltn12.pump.all(chunk, luci.http.write) - end - end - docker:write_status("Images: " .. "save" .. " " .. table.concat(image_selected, "\n") .. "...") - local msg = dk.images:get({query = {names = names}}, cb) - if msg.code ~= 200 then - docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") - success = false - else - docker:clear_status() - end - end -end - -local btnload = action:option(Button, "load") -btnload.inputtitle= translate("Load") -btnload.template = "dockerman/images_load" -btnload.inputstyle = "add" -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua deleted file mode 100644 index ec96756740..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/networks.lua +++ /dev/null @@ -1,124 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() -local networks -local res = dk.networks:list() -if res.code < 300 then networks = res.body else return end - -local get_networks = function () - local data = {} - - if type(networks) ~= "table" then return nil end - for i, v in ipairs(networks) do - local index = v.Created .. v.Id - data[index]={} - data[index]["_selected"] = 0 - data[index]["_id"] = v.Id:sub(1,12) - data[index]["_name"] = v.Name - data[index]["_driver"] = v.Driver - if v.Driver == "bridge" then - data[index]["_interface"] = v.Options["com.docker.network.bridge.name"] - elseif v.Driver == "macvlan" then - data[index]["_interface"] = v.Options.parent - end - data[index]["_subnet"] = v.IPAM and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil - data[index]["_gateway"] = v.IPAM and v.IPAM.Config[1] and v.IPAM.Config[1].Gateway or nil - end - return data -end - -local network_list = get_networks() --- m = Map("docker", translate("Docker")) -m = SimpleForm("docker", translate("Docker")) -m.template = "dockerman/cbi/xsimpleform" -m.submit=false -m.reset=false - -network_table = m:section(Table, network_list, translate("Networks")) -network_table.nodescr=true - -network_selecter = network_table:option(Flag, "_selected","") -network_selecter.template = "dockerman/cbi/xfvalue" -network_id = network_table:option(DummyValue, "_id", translate("ID")) -network_selecter.disabled = 0 -network_selecter.enabled = 1 -network_selecter.default = 0 -network_selecter.render = function(self, section, scope) - self.disable = 0 - if network_list[section]["_name"] == "bridge" or network_list[section]["_name"] == "none" or network_list[section]["_name"] == "host" then - self.disable = 1 - end - Flag.render(self, section, scope) -end - -network_name = network_table:option(DummyValue, "_name", translate("Network Name")) -network_driver = network_table:option(DummyValue, "_driver", translate("Driver")) -network_interface = network_table:option(DummyValue, "_interface", translate("Parent Interface")) -network_subnet = network_table:option(DummyValue, "_subnet", translate("Subnet")) -network_gateway = network_table:option(DummyValue, "_gateway", translate("Gateway")) - -network_selecter.write = function(self, section, value) - network_list[section]._selected = value -end - -docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err=docker:read_status() -docker_status.err=docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - -action = m:section(Table,{{}}) -action.notitle=true -action.rowcolors=false -action.template="cbi/nullsection" -btnnew=action:option(Button, "_new") -btnnew.inputtitle= translate("New") -btnnew.template = "dockerman/cbi/inlinebutton" -btnnew.notitle=true -btnnew.inputstyle = "add" -btnnew.forcewrite = true -btnnew.write = function(self, section) - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/newnetwork")) -end -btnremove = action:option(Button, "_remove") -btnremove.inputtitle= translate("Remove") -btnremove.template = "dockerman/cbi/inlinebutton" -btnremove.inputstyle = "remove" -btnremove.forcewrite = true -btnremove.write = function(self, section) - local network_selected = {} - -- 遍历table中sectionid - local network_table_sids = network_table:cfgsections() - for _, network_table_sid in ipairs(network_table_sids) do - -- 得到选中项的名字 - if network_list[network_table_sid]._selected == 1 then - network_selected[#network_selected+1] = network_list[network_table_sid]._id --network_name:cfgvalue(network_table_sid) - end - end - if next(network_selected) ~= nil then - local success = true - docker:clear_status() - for _,net in ipairs(network_selected) do - docker:append_status("Networks: " .. "remove" .. " " .. net .. "...") - local res = dk.networks["remove"](dk, {id = net}) - if res and res.code >= 300 then - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") - success = false - else - docker:append_status("done\n") - end - end - if success then - docker:clear_status() - end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/networks")) - end -end - -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua deleted file mode 100644 index 30c9720f95..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua +++ /dev/null @@ -1,585 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() -local cmd_line = table.concat(arg, '/') -local create_body = {} - -local images = dk.images:list().body -local networks = dk.networks:list().body -local containers = dk.containers:list({query = {all=true}}).body - -local is_quot_complete = function(str) - require "math" - if not str then return true end - local num = 0, w - for w in str:gmatch("\"") do - num = num + 1 - end - if math.fmod(num, 2) ~= 0 then return false end - num = 0 - for w in str:gmatch("\'") do - num = num + 1 - end - if math.fmod(num, 2) ~= 0 then return false end - return true -end - -local resolve_cli = function(cmd_line) - local config = {advance = 1} - local key_no_val = '|t|d|i|tty|rm|read-only|interactive|init|help|detach|privileged|' - local key_with_val = '|sysctl|add_host|a|attach|blkio_weight_device|cap_add|cap_drop|device|device_cgroup_rule|device_read_bps|device_read_iops|device_write_bps|device_write_iops|dns|dns_option|dns_search|e|env|env_file|expose|group_add|l|label|label_file|link|link_local_ip|log_driver|log_opt|network_alias|p|publish|security_opt|storage_opt|tmpfs|v|volume|volumes_from|blkio_weight|cgroup_parent|cidfile|cpu_period|cpu_quota|cpu_rt_period|cpu_rt_runtime|c|cpu_shares|cpus|cpuset_cpus|cpuset_mems|detach_keys|disable_content_trust|domainname|entrypoint|gpus|health_cmd|health_interval|health_retries|health_start_period|health_timeout|h|hostname|ip|ip6|ipc|isolation|kernel_memory|log_driver|mac_address|m|memory|memory_reservation|memory_swap|memory_swappiness|mount|name|network|no_healthcheck|oom_kill_disable|oom_score_adj|pid|pids_limit|P|publish_all|restart|runtime|shm_size|sig_proxy|stop_signal|stop_timeout|ulimit|u|user|userns|uts|volume_driver|w|workdir|' - local key_abb = {net='network',a='attach',c='cpu-shares',d='detach',e='env',h='hostname',i='interactive',l='label',m='memory',p='publish',P='publish_all',t='tty',u='user',v='volume',w='workdir'} - local key_with_list = '|sysctl|add_host|a|attach|blkio_weight_device|cap_add|cap_drop|device|device_cgroup_rule|device_read_bps|device_read_iops|device_write_bps|device_write_iops|dns|dns_option|dns_search|e|env|env_file|expose|group_add|l|label|label_file|link|link_local_ip|log_driver|log_opt|network_alias|p|publish|security_opt|storage_opt|tmpfs|v|volume|volumes_from|' - local key = nil - local _key = nil - local val = nil - local is_cmd = false - - cmd_line = cmd_line:match("^DOCKERCLI%s+(.+)") - for w in cmd_line:gmatch("[^%s]+") do - if w =='\\' then - elseif not key and not _key and not is_cmd then - --key=val - key, val = w:match("^%-%-([%lP%-]-)=(.+)") - if not key then - --key val - key = w:match("^%-%-([%lP%-]+)") - if not key then - -- -v val - key = w:match("^%-([%lP%-]+)") - if key then - -- for -dit - if key:match("i") or key:match("t") then - if key:match("i") then - config[key_abb["i"]] = true - key:gsub("i", "") - end - if key:match("t") then - config[key_abb["t"]] = true - key:gsub("t", "") - end - if key:match("d") then - config[key_abb["d"]] = true - key:gsub("d", "") - end - if key == "" then key = nil end - end - end - end - end - if key then - key = key:gsub("-","_") - if key_no_val:match("|"..key.."|") then - key = key_abb[key] or key - config[key] = true - val = nil - key = nil - elseif key_with_val:match("|"..key.."|") then - key = key_abb[key] or key - if key == "cap_add" then config.privileged = true end - else - key = nil - val = nil - end - else - config.image = w - key = nil - val = nil - is_cmd = true - end - elseif (key or _key) and not is_cmd then - val = w - elseif is_cmd then - config["command"] = (config["command"] and (config["command"] .. " " )or "") .. w - end - if (key or _key) and val then - key = _key or key - if key_with_list:match(key) then - if not config[key] then config[key] = {} end - if _key then - config[key][#config[key]] = config[key][#config[key]] .. " " .. w - else - table.insert( config[key], val ) - end - if is_quot_complete(config[key][#config[key]]) then - -- clear quotation marks - config[key][#config[key]] = config[key][#config[key]]:gsub("[\"\']", "") - _key = nil - else - _key = key - end - else - config[key] = (config[key] and (config[key] .. " ") or "") .. val - if is_quot_complete(config[key]) then - -- clear quotation marks - config[key] = config[key]:gsub("[\"\']", "") - _key = nil - else - _key = key - end - end - key = nil - val = nil - end - end - return config -end --- reslvo default config -local default_config = {} -if cmd_line and cmd_line:match("^DOCKERCLI.+") then - default_config = resolve_cli(cmd_line) -elseif cmd_line and cmd_line:match("^duplicate/[^/]+$") then - local container_id = cmd_line:match("^duplicate/(.+)") - create_body = dk:containers_duplicate_config({id = container_id}) or {} - if not create_body.HostConfig then create_body.HostConfig = {} end - if next(create_body) ~= nil then - default_config.name = nil - default_config.image = create_body.Image - default_config.hostname = create_body.Hostname - default_config.tty = create_body.Tty and true or false - default_config.interactive = create_body.OpenStdin and true or false - default_config.privileged = create_body.HostConfig.Privileged and true or false - default_config.restart = create_body.HostConfig.RestartPolicy and create_body.HostConfig.RestartPolicy.name or nil - -- default_config.network = create_body.HostConfig.NetworkMode == "default" and "bridge" or create_body.HostConfig.NetworkMode - -- if container has leave original network, and add new network, .HostConfig.NetworkMode is INcorrect, so using first child of .NetworkingConfig.EndpointsConfig - default_config.network = create_body.NetworkingConfig and create_body.NetworkingConfig.EndpointsConfig and next(create_body.NetworkingConfig.EndpointsConfig) or nil - default_config.ip = default_config.network and default_config.network ~= "bridge" and default_config.network ~= "host" and default_config.network ~= "null" and create_body.NetworkingConfig.EndpointsConfig[default_config.network].IPAMConfig and create_body.NetworkingConfig.EndpointsConfig[default_config.network].IPAMConfig.IPv4Address or nil - default_config.link = create_body.HostConfig.Links - default_config.env = create_body.Env - default_config.dns = create_body.HostConfig.Dns - default_config.volume = create_body.HostConfig.Binds - - if create_body.HostConfig.Sysctls and type(create_body.HostConfig.Sysctls) == "table" then - default_config.sysctl = {} - for k, v in pairs(create_body.HostConfig.Sysctls) do - table.insert( default_config.sysctl, k.."="..v ) - end - end - - if create_body.HostConfig.PortBindings and type(create_body.HostConfig.PortBindings) == "table" then - default_config.publish = {} - for k, v in pairs(create_body.HostConfig.PortBindings) do - table.insert( default_config.publish, v[1].HostPort..":"..k:match("^(%d+)/.+").."/"..k:match("^%d+/(.+)") ) - end - end - - default_config.user = create_body.User or nil - default_config.command = create_body.Cmd and type(create_body.Cmd) == "table" and table.concat(create_body.Cmd, " ") or nil - default_config.advance = 1 - default_config.cpus = create_body.HostConfig.NanoCPUs - default_config.cpu_shares = create_body.HostConfig.CpuShares - default_config.memory = create_body.HostConfig.Memory - default_config.blkio_weight = create_body.HostConfig.BlkioWeight - - if create_body.HostConfig.Devices and type(create_body.HostConfig.Devices) == "table" then - default_config.device = {} - for _, v in ipairs(create_body.HostConfig.Devices) do - table.insert( default_config.device, v.PathOnHost..":"..v.PathInContainer..(v.CgroupPermissions ~= "" and (":" .. v.CgroupPermissions) or "") ) - end - end - if create_body.HostConfig.Tmpfs and type(create_body.HostConfig.Tmpfs) == "table" then - default_config.tmpfs = {} - for k, v in pairs(create_body.HostConfig.Tmpfs) do - table.insert( default_config.tmpfs, k .. (v~="" and ":" or "")..v ) - end - end - end -end - -local m = SimpleForm("docker", translate("Docker")) -m.template = "dockerman/cbi/xsimpleform" -m.redirect = luci.dispatcher.build_url("admin", "services","docker", "containers") --- m.reset = false --- m.submit = false --- new Container - -docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err=docker:read_status() -docker_status.err=docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - -local s = m:section(SimpleSection, translate("New Container")) -s.addremove = true -s.anonymous = true - -local d = s:option(DummyValue,"cmd_line", translate("Resolve CLI")) -d.rawhtml = true -d.template = "dockerman/newcontainer_resolve" - -d = s:option(Value, "name", translate("Container Name")) -d.rmempty = true -d.default = default_config.name or nil - -d = s:option(Flag, "interactive", translate("Interactive (-i)")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = default_config.interactive and 1 or 0 - -d = s:option(Flag, "tty", translate("TTY (-t)")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = default_config.tty and 1 or 0 - -d = s:option(Value, "image", translate("Docker Image")) -d.rmempty = true -d.default = default_config.image or nil -for _, v in ipairs (images) do - if v.RepoTags then - d:value(v.RepoTags[1], v.RepoTags[1]) - end -end - -d = s:option(Flag, "_force_pull", translate("Always pull image first")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = 0 - -d = s:option(Flag, "privileged", translate("Privileged")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = default_config.privileged and 1 or 0 - -d = s:option(ListValue, "restart", translate("Restart Policy")) -d.rmempty = true - -d:value("no", "No") -d:value("unless-stopped", "Unless stopped") -d:value("always", "Always") -d:value("on-failure", "On failure") -d.default = default_config.restart or "unless-stopped" - -local d_network = s:option(ListValue, "network", translate("Networks")) -d_network.rmempty = true -d_network.default = default_config.network or "bridge" - -local d_ip = s:option(Value, "ip", translate("IPv4 Address")) -d_ip.datatype="ip4addr" -d_ip:depends("network", "nil") -d_ip.default = default_config.ip or nil - -d = s:option(DynamicList, "link", translate("Links with other containers")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "container_name:alias" -d.rmempty = true -d:depends("network", "bridge") -d.default = default_config.link or nil - -d = s:option(DynamicList, "dns", translate("Set custom DNS servers")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "8.8.8.8" -d.rmempty = true -d.default = default_config.dns or nil - -d = s:option(Value, "user", translate("User(-u)"), translate("The user that commands are run as inside the container.(format: name|uid[:group|gid])")) -d.placeholder = "1000:1000" -d.rmempty = true -d.default = default_config.user or nil - -d = s:option(DynamicList, "env", translate("Environmental Variable(-e)"), translate("Set environment variables to inside the container")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "TZ=Asia/Shanghai" -d.rmempty = true -d.default = default_config.env or nil - -d = s:option(DynamicList, "volume", translate("Bind Mount(-v)"), translate("Bind mount a volume")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "/media:/media:slave" -d.rmempty = true -d.default = default_config.volume or nil - -local d_publish = s:option(DynamicList, "publish", translate("Exposed Ports(-p)"), translate("Publish container's port(s) to the host")) -d_publish.template = "dockerman/cbi/xdynlist" -d_publish.placeholder = "2200:22/tcp" -d_publish.rmempty = true -d_publish.default = default_config.publish or nil - -d = s:option(Value, "command", translate("Run command")) -d.placeholder = "/bin/sh init.sh" -d.rmempty = true -d.default = default_config.command or nil - -d = s:option(Flag, "advance", translate("Advance")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = default_config.advance or 0 - -d = s:option(Value, "hostname", translate("Host Name"), translate("The hostname to use for the container")) -d.rmempty = true -d.default = default_config.hostname or nil -d:depends("advance", 1) - -d = s:option(DynamicList, "device", translate("Device(--device)"), translate("Add host device to the container")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "/dev/sda:/dev/xvdc:rwm" -d.rmempty = true -d:depends("advance", 1) -d.default = default_config.device or nil - -d = s:option(DynamicList, "tmpfs", translate("Tmpfs(--tmpfs)"), translate("Mount tmpfs directory")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "/run:rw,noexec,nosuid,size=65536k" -d.rmempty = true -d:depends("advance", 1) -d.default = default_config.tmpfs or nil - -d = s:option(DynamicList, "sysctl", translate("Sysctl(--sysctl)"), translate("Sysctls (kernel parameters) options")) -d.template = "dockerman/cbi/xdynlist" -d.placeholder = "net.ipv4.ip_forward=1" -d.rmempty = true -d:depends("advance", 1) -d.default = default_config.sysctl or nil - -d = s:option(Value, "cpus", translate("CPUs"), translate("Number of CPUs. Number is a fractional number. 0.000 means no limit.")) -d.placeholder = "1.5" -d.rmempty = true -d:depends("advance", 1) -d.datatype="ufloat" -d.default = default_config.cpus or nil - -d = s:option(Value, "cpu_shares", translate("CPU Shares Weight"), translate("CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024.")) -d.placeholder = "1024" -d.rmempty = true -d:depends("advance", 1) -d.datatype="uinteger" -d.default = default_config.cpu_shares or nil - -d = s:option(Value, "memory", translate("Memory"), translate("Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.")) -d.placeholder = "128m" -d.rmempty = true -d:depends("advance", 1) -d.default = default_config.memory or nil - -d = s:option(Value, "blkio_weight", translate("Block IO Weight"), translate("Block IO weight (relative weight) accepts a weight value between 10 and 1000.")) -d.placeholder = "500" -d.rmempty = true -d:depends("advance", 1) -d.datatype="uinteger" -d.default = default_config.blkio_weight or nil - - -for _, v in ipairs (networks) do - if v.Name then - local parent = v.Options and v.Options.parent or nil - local ip = v.IPAM and v.IPAM.Config and v.IPAM.Config[1] and v.IPAM.Config[1].Subnet or nil - ipv6 = v.IPAM and v.IPAM.Config and v.IPAM.Config[2] and v.IPAM.Config[2].Subnet or nil - local network_name = v.Name .. " | " .. v.Driver .. (parent and (" | " .. parent) or "") .. (ip and (" | " .. ip) or "").. (ipv6 and (" | " .. ipv6) or "") - d_network:value(v.Name, network_name) - - if v.Name ~= "none" and v.Name ~= "bridge" and v.Name ~= "host" then - d_ip:depends("network", v.Name) - end - - if v.Driver == "bridge" then - d_publish:depends("network", v.Name) - end - end -end - -m.handle = function(self, state, data) - if state ~= FORM_VALID then return end - local tmp - local name = data.name or ("luci_" .. os.date("%Y%m%d%H%M%S")) - local hostname = data.hostname - local tty = type(data.tty) == "number" and (data.tty == 1 and true or false) or default_config.tty or false - local interactive = type(data.interactive) == "number" and (data.interactive == 1 and true or false) or default_config.interactive or false - local image = data.image - local user = data.user - if image and not image:match(".-:.+") then - image = image .. ":latest" - end - local privileged = type(data.privileged) == "number" and (data.privileged == 1 and true or false) or default_config.privileged or false - local restart = data.restart - local env = data.env - local dns = data.dns - local sysctl = {} - tmp = data.sysctl - if type(tmp) == "table" then - for i, v in ipairs(tmp) do - local k,v1 = v:match("(.-)=(.+)") - if k and v1 then - sysctl[k]=v1 - end - end - end - local network = data.network - local ip = (network ~= "bridge" and network ~= "host" and network ~= "none") and data.ip or nil - local volume = data.volume - local memory = data.memory or 0 - local cpu_shares = data.cpu_shares or 0 - local cpus = data.cpus or 0 - local blkio_weight = data.blkio_weight or 500 - - local portbindings = {} - local exposedports = {} - local tmpfs = {} - tmp = data.tmpfs - if type(tmp) == "table" then - for i, v in ipairs(tmp)do - local k= v:match("([^:]+)") - local v1 = v:match(".-:([^:]+)") or "" - if k then - tmpfs[k]=v1 - end - end - end - - local device = {} - tmp = data.device - if type(tmp) == "table" then - for i, v in ipairs(tmp) do - local t = {} - local _,_, h, c, p = v:find("(.-):(.-):(.+)") - if h and c then - t['PathOnHost'] = h - t['PathInContainer'] = c - t['CgroupPermissions'] = p or "rwm" - else - local _,_, h, c = v:find("(.-):(.+)") - if h and c then - t['PathOnHost'] = h - t['PathInContainer'] = c - t['CgroupPermissions'] = "rwm" - end - end - if next(t) ~= nil then - table.insert( device, t ) - end - end - end - - tmp = data.publish or {} - for i, v in ipairs(tmp) do - for v1 ,v2 in string.gmatch(v, "(%d+):([^%s]+)") do - local _,_,p= v2:find("^%d+/(%w+)") - if p == nil then - v2=v2..'/tcp' - end - portbindings[v2] = {{HostPort=v1}} - exposedports[v2] = {HostPort=v1} - end - end - - local link = data.link - tmp = data.command - local command = {} - if tmp ~= nil then - for v in string.gmatch(tmp, "[^%s]+") do - command[#command+1] = v - end - end - if memory ~= 0 then - _,_,n,unit = memory:find("([%d%.]+)([%l%u]+)") - if n then - unit = unit and unit:sub(1,1):upper() or "B" - if unit == "M" then - memory = tonumber(n) * 1024 * 1024 - elseif unit == "G" then - memory = tonumber(n) * 1024 * 1024 * 1024 - elseif unit == "K" then - memory = tonumber(n) * 1024 - else - memory = tonumber(n) - end - end - end - - create_body.Hostname = network ~= "host" and (hostname or name) or nil - create_body.Tty = tty and true or false - create_body.OpenStdin = interactive and true or false - create_body.User = user - create_body.Cmd = (#command ~= 0) and command or nil - create_body.Env = env - create_body.Image = image - create_body.ExposedPorts = (next(exposedports) ~= nil) and exposedports or nil - create_body.HostConfig = create_body.HostConfig or {} - create_body.HostConfig.Dns = dns - create_body.HostConfig.Binds = (#volume ~= 0) and volume or nil - create_body.HostConfig.RestartPolicy = { Name = restart, MaximumRetryCount = 0 } - create_body.HostConfig.Privileged = privileged and true or false - create_body.HostConfig.PortBindings = (next(portbindings) ~= nil) and portbindings or nil - create_body.HostConfig.Memory = tonumber(memory) - create_body.HostConfig.CpuShares = tonumber(cpu_shares) - create_body.HostConfig.NanoCPUs = tonumber(cpus) * 10 ^ 9 - create_body.HostConfig.BlkioWeight = tonumber(blkio_weight) - if create_body.HostConfig.NetworkMode ~= network then - -- network mode changed, need to clear duplicate config - create_body.NetworkingConfig = nil - end - create_body.HostConfig.NetworkMode = network - if ip then - if create_body.NetworkingConfig and create_body.NetworkingConfig.EndpointsConfig and type(create_body.NetworkingConfig.EndpointsConfig) == "table" then - -- ip + duplicate config - for k, v in pairs (create_body.NetworkingConfig.EndpointsConfig) do - if k == network and v.IPAMConfig and v.IPAMConfig.IPv4Address then - v.IPAMConfig.IPv4Address = ip - else - create_body.NetworkingConfig.EndpointsConfig = { [network] = { IPAMConfig = { IPv4Address = ip } } } - end - break - end - else - -- ip + no duplicate config - create_body.NetworkingConfig = { EndpointsConfig = { [network] = { IPAMConfig = { IPv4Address = ip } } } } - end - elseif not create_body.NetworkingConfig then - -- no ip + no duplicate config - create_body.NetworkingConfig = nil - end - create_body["HostConfig"]["Tmpfs"] = (next(tmpfs) ~= nil) and tmpfs or nil - create_body["HostConfig"]["Devices"] = (next(device) ~= nil) and device or nil - create_body["HostConfig"]["Sysctls"] = (next(sysctl) ~= nil) and sysctl or nil - - if network == "bridge" and next(link) ~= nil then - create_body["HostConfig"]["Links"] = link - end - local pull_image = function(image) - local json_stringify = luci.jsonc and luci.jsonc.stringify - docker:append_status("Images: " .. "pulling" .. " " .. image .. "...\n") - local res = dk.images:create({query = {fromImage=image}}, docker.pull_image_show_status_cb) - if res and res.code == 200 and (res.body[#res.body] and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. image or res.body[#res.body].status == "Status: Image is up to date for ".. image)) then - docker:append_status("done\n") - else - docker:append_status("code:" .. res.code.." ".. (res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message)).. "\n") - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/newcontainer")) - end - end - docker:clear_status() - local exist_image = false - if image then - for _, v in ipairs (images) do - if v.RepoTags and v.RepoTags[1] == image then - exist_image = true - break - end - end - if not exist_image then - pull_image(image) - elseif data._force_pull == 1 then - pull_image(image) - end - end - - docker:append_status("Container: " .. "create" .. " " .. name .. "...") - local res = dk.containers:create({name = name, body = create_body}) - if res and res.code == 201 then - docker:clear_status() - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/containers")) - else - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message)) - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/newcontainer")) - end -end - -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua deleted file mode 100644 index 5216be4300..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/newnetwork.lua +++ /dev/null @@ -1,206 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() - -m = SimpleForm("docker", translate("Docker")) -m.template = "dockerman/cbi/xsimpleform" -m.redirect = luci.dispatcher.build_url("admin", "services","docker", "networks") - -docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err=docker:read_status() -docker_status.err=docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - -s = m:section(SimpleSection, translate("New Network")) -s.addremove = true -s.anonymous = true - -d = s:option(Value, "name", translate("Network Name")) -d.rmempty = true - -d = s:option(ListValue, "dirver", translate("Driver")) -d.rmempty = true -d:value("bridge", "bridge") -d:value("macvlan", "macvlan") -d:value("ipvlan", "ipvlan") -d:value("overlay", "overlay") - -d = s:option(Value, "parent", translate("Parent Interface")) -d.rmempty = true -d:depends("dirver", "macvlan") -d.placeholder="eth0" - -d = s:option(Value, "macvlan_mode", translate("Macvlan Mode")) -d.rmempty = true -d:depends("dirver", "macvlan") -d.default="bridge" -d:value("bridge", "bridge") -d:value("private", "private") -d:value("vepa", "vepa") -d:value("passthru", "passthru") - -d = s:option(Value, "ipvlan_mode", translate("Ipvlan Mode")) -d.rmempty = true -d:depends("dirver", "ipvlan") -d.default="l3" -d:value("l2", "l2") -d:value("l3", "l3") - -d = s:option(Flag, "ingress", translate("Ingress"), translate("Ingress network is the network which provides the routing-mesh in swarm mode.")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = 0 -d:depends("dirver", "overlay") - -d = s:option(DynamicList, "options", translate("Options")) -d.template = "dockerman/cbi/xdynlist" -d.rmempty = true -d.placeholder="com.docker.network.driver.mtu=1500" - -d = s:option(Flag, "internal", translate("Internal"), translate("Restrict external access to the network")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = 0 - -d = s:option(Value, "subnet", translate("Subnet")) -d.rmempty = true -d.placeholder="10.1.0.0/16" -d.datatype="ip4addr" - -d = s:option(Value, "gateway", translate("Gateway")) -d.rmempty = true -d.placeholder="10.1.1.1" -d.datatype="ip4addr" - -d = s:option(Value, "ip_range", translate("IP range")) -d.rmempty = true -d.placeholder="10.1.1.0/24" -d.datatype="ip4addr" - -d = s:option(DynamicList, "aux_address", translate("Exclude IPs")) -d.template = "dockerman/cbi/xdynlist" -d.rmempty = true -d.placeholder="my-route=10.1.1.1" - -d = s:option(Flag, "ipv6", translate("Enable IPv6")) -d.rmempty = true -d.disabled = 0 -d.enabled = 1 -d.default = 0 - -d = s:option(Value, "subnet6", translate("IPv6 Subnet")) -d.rmempty = true -d.placeholder="fe80::/10" -d.datatype="ip6addr" -d:depends("ipv6", 1) - -d = s:option(Value, "gateway6", translate("IPv6 Gateway")) -d.rmempty = true -d.placeholder="fe80::1" -d.datatype="ip6addr" -d:depends("ipv6", 1) - -m.handle = function(self, state, data) - if state == FORM_VALID then - local name = data.name - local driver = data.dirver - - local internal = data.internal == 1 and true or false - - local subnet = data.subnet - local gateway = data.gateway - local ip_range = data.ip_range - - local aux_address = {} - local tmp = data.aux_address or {} - for i,v in ipairs(tmp) do - _,_,k1,v1 = v:find("(.-)=(.+)") - aux_address[k1] = v1 - end - - local options = {} - tmp = data.options or {} - for i,v in ipairs(tmp) do - _,_,k1,v1 = v:find("(.-)=(.+)") - options[k1] = v1 - end - - local ipv6 = data.ipv6 == 1 and true or false - - local create_body={ - Name = name, - Driver = driver, - EnableIPv6 = ipv6, - IPAM = { - Driver= "default" - }, - Internal = internal - } - - if subnet or gateway or ip_range then - create_body["IPAM"]["Config"] = { - { - Subnet = subnet, - Gateway = gateway, - IPRange = ip_range, - -- AuxAddress = aux_address - -- AuxiliaryAddresses = aux_address - } - } - end - if next(aux_address)~=nil then - create_body["IPAM"]["Config"]["AuxiliaryAddresses"] = aux_address - end - if driver == "macvlan" then - create_body["Options"] = { - macvlan_mode = data.macvlan_mode, - parent = data.parent - } - elseif driver == "ipvlan" then - create_body["Options"] = { - ipvlan_mode = data.ipvlan_mode - } - elseif driver == "overlay" then - create_body["Ingress"] = data.ingerss == 1 and true or false - end - - if ipv6 and data.subnet6 and data.subnet6 then - if type(create_body["IPAM"]["Config"]) ~= "table" then - create_body["IPAM"]["Config"] = {} - end - local index = #create_body["IPAM"]["Config"] - create_body["IPAM"]["Config"][index+1] = { - Subnet = data.subnet6, - Gateway = data.gateway6 - } - end - - if next(options) ~= nil then - create_body["Options"] = create_body["Options"] or {} - for k, v in pairs(options) do - create_body["Options"][k] = v - end - end - - docker:write_status("Network: " .. "create" .. " " .. create_body.Name .. "...") - local res = dk.networks:create({body = create_body}) - if res and res.code == 201 then - docker:clear_status() - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/networks")) - else - docker:append_status("code:" .. res.code.." ".. (res.body.message and res.body.message or res.message).. "\n") - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/newnetwork")) - end - end -end - -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua deleted file mode 100644 index 7c4fd3befd..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/overview.lua +++ /dev/null @@ -1,149 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local docker = require "luci.model.docker" -local uci = require "luci.model.uci" - -function byte_format(byte) - local suff = {"B", "KB", "MB", "GB", "TB"} - for i=1, 5 do - if byte > 1024 and i < 5 then - byte = byte / 1024 - else - return string.format("%.2f %s", byte, suff[i]) - end - end -end - -local map_dockerman = Map("dockerman", translate("Docker")) -local docker_info_table = {} --- docker_info_table['0OperatingSystem'] = {_key=translate("Operating System"),_value='-'} --- docker_info_table['1Architecture'] = {_key=translate("Architecture"),_value='-'} --- docker_info_table['2KernelVersion'] = {_key=translate("Kernel Version"),_value='-'} -docker_info_table['3ServerVersion'] = {_key=translate("Docker Version"),_value='-'} -docker_info_table['4ApiVersion'] = {_key=translate("Api Version"),_value='-'} -docker_info_table['5NCPU'] = {_key=translate("CPUs"),_value='-'} -docker_info_table['6MemTotal'] = {_key=translate("Total Memory"),_value='-'} -docker_info_table['7DockerRootDir'] = {_key=translate("Docker Root Dir"),_value='-'} -docker_info_table['8IndexServerAddress'] = {_key=translate("Index Server Address"),_value='-'} -docker_info_table['9RegistryMirrors'] = {_key=translate("Registry Mirrors"),_value='-'} - -local s = map_dockerman:section(Table, docker_info_table) -s:option(DummyValue, "_key", translate("Info")) -s:option(DummyValue, "_value") -s = map_dockerman:section(SimpleSection) -s.containers_running = '-' -s.images_used = '-' -s.containers_total = '-' -s.images_total = '-' -s.networks_total = '-' -s.volumes_total = '-' --- local socket = luci.model.uci.cursor():get("dockerman", "local", "socket_path") -if (require "luci.model.docker").new():_ping().code == 200 then - local dk = docker.new() - local containers_list = dk.containers:list({query = {all=true}}).body - local images_list = dk.images:list().body - local vol = dk.volumes:list() - local volumes_list = vol and vol.body and vol.body.Volumes or {} - local networks_list = dk.networks:list().body or {} - local docker_info = dk:info() - -- docker_info_table['0OperatingSystem']._value = docker_info.body.OperatingSystem - -- docker_info_table['1Architecture']._value = docker_info.body.Architecture - -- docker_info_table['2KernelVersion']._value = docker_info.body.KernelVersion - docker_info_table['3ServerVersion']._value = docker_info.body.ServerVersion - docker_info_table['4ApiVersion']._value = docker_info.headers["Api-Version"] - docker_info_table['5NCPU']._value = tostring(docker_info.body.NCPU) - docker_info_table['6MemTotal']._value = byte_format(docker_info.body.MemTotal) - docker_info_table['7DockerRootDir']._value = docker_info.body.DockerRootDir - docker_info_table['8IndexServerAddress']._value = docker_info.body.IndexServerAddress - for i, v in ipairs(docker_info.body.RegistryConfig.Mirrors) do - docker_info_table['9RegistryMirrors']._value = docker_info_table['9RegistryMirrors']._value == "-" and v or (docker_info_table['9RegistryMirrors']._value .. ", " .. v) - end - - s.images_used = 0 - for i, v in ipairs(images_list) do - for ci,cv in ipairs(containers_list) do - if v.Id == cv.ImageID then - s.images_used = s.images_used + 1 - break - end - end - end - s.containers_running = tostring(docker_info.body.ContainersRunning) - s.images_used = tostring(s.images_used) - s.containers_total = tostring(docker_info.body.Containers) - s.images_total = tostring(#images_list) - s.networks_total = tostring(#networks_list) - s.volumes_total = tostring(#volumes_list) -end -s.template = "dockerman/overview" - ---tabs -tab_section = map_dockerman:section(SimpleSection) -tab_section.tabs = { - dockerman = translate("DockerMan"), -} -tab_section.default_tab = "dockerman" -tab_section.template="dockerman/overview_tab" - -local section_dockerman = map_dockerman:section(NamedSection, "local", "section") -section_dockerman.config = "dockerman" -section_dockerman.template = "dockerman/cbi/namedsection" -local socket_path = section_dockerman:option(Value, "socket_path", translate("Docker Socket Path")) -socket_path.default = "/var/run/docker.sock" -socket_path.placeholder = "/var/run/docker.sock" -socket_path.rmempty = false - -local remote_endpoint = section_dockerman:option(Flag, "remote_endpoint", translate("Remote Endpoint"), translate("Dockerman connect to remote endpoint")) -remote_endpoint.rmempty = false -remote_endpoint.enabled = "true" -remote_endpoint.disabled = "false" - -local remote_host = section_dockerman:option(Value, "remote_host", translate("Remote Host")) -remote_host.placeholder = "10.1.1.2" --- remote_host:depends("remote_endpoint", "true") - -local remote_port = section_dockerman:option(Value, "remote_port", translate("Remote Port")) -remote_port.placeholder = "2375" -remote_port.default = "2375" --- remote_port:depends("remote_endpoint", "true") - -local status_path = section_dockerman:option(Value, "status_path", translate("Action Status Tempfile Path"), translate("Where you want to save the docker status file")) -local debug = section_dockerman:option(Flag, "debug", translate("Enable Debug"), translate("For debug, It shows all docker API actions of luci-app-dockerman in Debug Tempfile Path")) -debug.enabled="true" -debug.disabled="false" -local debug_path = section_dockerman:option(Value, "debug_path", translate("Debug Tempfile Path"), translate("Where you want to save the debug tempfile")) - -local map_dockerd -if nixio.fs.access("/etc/config/dockerd") and nixio.fs.access("/usr/bin/dockerd") then - -- map_dockerman:chain("dockerd") - tab_section.tabs.docker_daemon = translate("Docker Daemon") - tab_section.default_tab = "docker_daemon" - map_dockerd = Map("dockerd","") - local section_dockerd = map_dockerd:section(NamedSection, "local", "section") - section_dockerd.config = "docker_daemon" - section_dockerd.template = "dockerman/cbi/namedsection" - local dockerd_enable = section_dockerd:option(Flag, "ea", translate("Enable")) - dockerd_enable.enabled = "true" - dockerd_enable.rmempty = true - local data_root = section_dockerd:option(Value, "data_root", translate("Docker Root Dir")) - data_root.placeholder = "/opt/docker/" - local hosts = section_dockerd:option(DynamicList, "hosts", translate("Server Host"), translate('Daemon unix socket (unix:///var/run/docker.sock) or TCP Remote Hosts (tcp://0.0.0.0:2375), default: unix:///var/run/docker.sock')) - hosts.placeholder = "unix:///var/run/docker.sock | tcp://0.0.0.0:2375" - hosts.rmempty = true - local registry_mirrors = section_dockerd:option(DynamicList, "registry_mirrors", translate("Registry Mirrors")) - registry_mirrors.placeholder = "https://hub-mirror.c.163.com" - local wan_enable = section_dockerd:option(Flag, "en_wan", translate("Enable WAN access"), translate("Enable WAN access container mapped ports")) - wan_enable.enabled = "true" - wan_enable.rmempty = true - local log_level = section_dockerd:option(ListValue, "log_level", translate("Log Level"), translate('Set the logging level')) - log_level:value("debug", "debug") - log_level:value("info", "info") - log_level:value("warn", "warn") - log_level:value("error", "error") - log_level:value("fatal", "fatal") -end -return map_dockerman, map_dockerd diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua deleted file mode 100644 index ca8111a28b..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/cbi/dockerman/volumes.lua +++ /dev/null @@ -1,117 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local uci = luci.model.uci.cursor() -local docker = require "luci.model.docker" -local dk = docker.new() - -local containers, volumes -local res = dk.volumes:list() -if res.code <300 then volumes = res.body.Volumes else return end -res = dk.containers:list({query = {all=true}}) -if res.code <300 then containers = res.body else return end - -function get_volumes() - local data = {} - for i, v in ipairs(volumes) do - -- local index = v.CreatedAt .. v.Name - local index = v.Name - data[index]={} - data[index]["_selected"] = 0 - data[index]["_nameraw"] = v.Name - data[index]["_name"] = v.Name:sub(1,12) - for ci,cv in ipairs(containers) do - if cv.Mounts and type(cv.Mounts) ~= "table" then break end - for vi, vv in ipairs(cv.Mounts) do - if v.Name == vv.Name then - data[index]["_containers"] = (data[index]["_containers"] and (data[index]["_containers"] .. " | ") or "").. - ''.. cv.Names[1]:sub(2)..'' - end - end - end - data[index]["_driver"] = v.Driver - data[index]["_mountpoint"] = nil - for v1 in v.Mountpoint:gmatch('[^/]+') do - if v1 == index then - data[index]["_mountpoint"] = data[index]["_mountpoint"] .."/" .. v1:sub(1,12) .. "..." - else - data[index]["_mountpoint"] = (data[index]["_mountpoint"] and data[index]["_mountpoint"] or "").."/".. v1 - end - end - data[index]["_created"] = v.CreatedAt - end - return data -end - -local volume_list = get_volumes() - --- m = Map("docker", translate("Docker")) -m = SimpleForm("docker", translate("Docker")) -m.template = "dockerman/cbi/xsimpleform" -m.submit=false -m.reset=false - - -volume_table = m:section(Table, volume_list, translate("Volumes")) - -volume_selecter = volume_table:option(Flag, "_selected","") -volume_selecter.disabled = 0 -volume_selecter.enabled = 1 -volume_selecter.default = 0 - -volume_id = volume_table:option(DummyValue, "_name", translate("Name")) -volume_table:option(DummyValue, "_driver", translate("Driver")) -volume_table:option(DummyValue, "_containers", translate("Containers")).rawhtml = true -volume_table:option(DummyValue, "_mountpoint", translate("Mount Point")) -volume_table:option(DummyValue, "_created", translate("Created")) -volume_selecter.write = function(self, section, value) - volume_list[section]._selected = value -end - -docker_status = m:section(SimpleSection) -docker_status.template = "dockerman/apply_widget" -docker_status.err=docker:read_status() -docker_status.err=docker_status.err and docker_status.err:gsub("\n","
"):gsub(" "," ") -if docker_status.err then docker:clear_status() end - -action = m:section(Table,{{}}) -action.notitle=true -action.rowcolors=false -action.template="cbi/nullsection" -btnremove = action:option(Button, "remove") -btnremove.inputtitle= translate("Remove") -btnremove.template = "dockerman/cbi/inlinebutton" -btnremove.inputstyle = "remove" -btnremove.forcewrite = true -btnremove.write = function(self, section) - local volume_selected = {} - -- 遍历table中sectionid - local volume_table_sids = volume_table:cfgsections() - for _, volume_table_sid in ipairs(volume_table_sids) do - -- 得到选中项的名字 - if volume_list[volume_table_sid]._selected == 1 then - -- volume_selected[#volume_selected+1] = volume_id:cfgvalue(volume_table_sid) - volume_selected[#volume_selected+1] = volume_table_sid - end - end - if next(volume_selected) ~= nil then - local success = true - docker:clear_status() - for _,vol in ipairs(volume_selected) do - docker:append_status("Volumes: " .. "remove" .. " " .. vol .. "...") - local msg = dk.volumes["remove"](dk, {id = vol}) - if msg.code ~= 204 then - docker:append_status("code:" .. msg.code.." ".. (msg.body.message and msg.body.message or msg.message).. "\n") - success = false - else - docker:append_status("done\n") - end - end - if success then docker:clear_status() end - luci.http.redirect(luci.dispatcher.build_url("admin/services/docker/volumes")) - end -end -return m diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/model/docker.lua b/package/ctcgfw/luci-app-dockerman/luasrc/model/docker.lua deleted file mode 100644 index 305089e248..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/model/docker.lua +++ /dev/null @@ -1,336 +0,0 @@ ---[[ -LuCI - Lua Configuration Interface -Copyright 2019 lisaac -]]-- - -require "luci.util" -local docker = require "luci.docker" -local uci = (require "luci.model.uci").cursor() - -local _docker = {} - ---pull image and return iamge id -local update_image = function(self, image_name) - local json_stringify = luci.jsonc and luci.jsonc.stringify - _docker:append_status("Images: " .. "pulling" .. " " .. image_name .. "...\n") - local res = self.images:create({query = {fromImage=image_name}}, _docker.pull_image_show_status_cb) - if res and res.code == 200 and (#res.body > 0 and not res.body[#res.body].error and res.body[#res.body].status and (res.body[#res.body].status == "Status: Downloaded newer image for ".. image_name)) then - _docker:append_status("done\n") - else - res.code = 500 - res.body.message = res.body[#res.body] and res.body[#res.body].error or (res.body.message or res.message) - end - new_image_id = self.images:inspect({name = image_name}).body.Id - return new_image_id, res -end - -local table_equal = function(t1, t2) - if not t1 then return true end - if not t2 then return false end - if #t1 ~= #t2 then return false end - for i, v in ipairs(t1) do - if t1[i] ~= t2[i] then return false end - end - return true -end - -local table_subtract = function(t1, t2) - if not t1 or next(t1) == nil then return nil end - if not t2 or next(t2) == nil then return t1 end - local res = {} - for _, v1 in ipairs(t1) do - local found = false - for _, v2 in ipairs(t2) do - if v1 == v2 then - found= true - break - end - end - if not found then - table.insert(res, v1) - end - end - return next(res) == nil and nil or res -end - -local map_subtract = function(t1, t2) - if not t1 or next(t1) == nil then return nil end - if not t2 or next(t2) == nil then return t1 end - local res = {} - for k1, v1 in pairs(t1) do - local found = false - for k2, v2 in ipairs(t2) do - if k1 == k2 and luci.util.serialize_data(v1) == luci.util.serialize_data(v2) then - found= true - break - end - end - if not found then - if v1 and type(v1) == "table" then - if next(v1) == nil then - res[k1] = { k = 'v' } - else - res[k1] = v1 - end - end - end - end - - return next(res) ~= nil and res or nil -end - -local function clear_empty_tables( t ) - local k, v - if next(t) == nil then - t = nil - else - for k, v in pairs(t) do - if type(v) == 'table' then - t[k] = clear_empty_tables(v) - end - end - end - return t -end - --- return create_body, extra_network -local get_config = function(container_config, image_config) - local config = container_config.Config - local old_host_config = container_config.HostConfig - local old_network_setting = container_config.NetworkSettings.Networks or {} - if config.WorkingDir == image_config.WorkingDir then config.WorkingDir = "" end - if config.User == image_config.User then config.User = "" end - if table_equal(config.Cmd, image_config.Cmd) then config.Cmd = nil end - if table_equal(config.Entrypoint, image_config.Entrypoint) then config.Entrypoint = nil end - if table_equal(config.ExposedPorts, image_config.ExposedPorts) then config.ExposedPorts = nil end - config.Env = table_subtract(config.Env, image_config.Env) - config.Labels = table_subtract(config.Labels, image_config.Labels) - config.Volumes = map_subtract(config.Volumes, image_config.Volumes) - -- subtract ports exposed in image from container - if old_host_config.PortBindings and next(old_host_config.PortBindings) ~= nil then - config.ExposedPorts = {} - for p, v in pairs(old_host_config.PortBindings) do - config.ExposedPorts[p] = { HostPort=v[1] and v[1].HostPort } - end - end - - -- handle network config, we need only one network, extras need to network connect action - local network_setting = {} - local multi_network = false - local extra_network = {} - for k, v in pairs(old_network_setting) do - if multi_network then - extra_network[k] = v - else - network_setting[k] = v - end - multi_network = true - end - - -- handle hostconfig - local host_config = old_host_config - if host_config.PortBindings and next(host_config.PortBindings) == nil then host_config.PortBindings = nil end - host_config.LogConfig = nil - host_config.Mounts = {} - -- for volumes - for i, v in ipairs(container_config.Mounts) do - if v.Type == "volume" then - table.insert(host_config.Mounts, { - Type = v.Type, - Target = v.Destination, - Source = v.Source:match("([^/]+)\/_data"), - BindOptions = v.Type == "bind" and {Propagation = v.Propagation} or nil, - ReadOnly = not v.RW - }) - end - end - - - -- merge configs - local create_body = config - create_body["HostConfig"] = host_config - create_body["NetworkingConfig"] = {EndpointsConfig = network_setting} - create_body = clear_empty_tables(create_body) or {} - extra_network = clear_empty_tables(extra_network) or {} - return create_body, extra_network -end - -local upgrade = function(self, request) - _docker:clear_status() - -- get image name, image id, container name, configuration information - local container_info = self.containers:inspect({id = request.id}) - if container_info.code > 300 and type(container_info.body) == "table" then - return container_info - end - local image_name = container_info.body.Config.Image - if not image_name:match(".-:.+") then image_name = image_name .. ":latest" end - local old_image_id = container_info.body.Image - local container_name = container_info.body.Name:sub(2) - - local image_id, res = update_image(self, image_name) - if res and res.code ~= 200 then return res end - if image_id == old_image_id then - return {code = 305, body = {message = "Already up to date"}} - end - - _docker:append_status("Container: " .. "Stop" .. " " .. container_name .. "...") - res = self.containers:stop({name = container_name}) - if res and res.code < 305 then - _docker:append_status("done\n") - else - return res - end - - _docker:append_status("Container: rename" .. " " .. container_name .. " to ".. container_name .. "_old ...") - res = self.containers:rename({name = container_name, query = { name = container_name .. "_old" }}) - if res and res.code < 300 then - _docker:append_status("done\n") - else - return res - end - - -- handle config - local image_config = self.images:inspect({id = old_image_id}).body.Config - local create_body, extra_network = get_config(container_info.body, image_config) - - -- create new container - _docker:append_status("Container: Create" .. " " .. container_name .. "...") - res = self.containers:create({name = container_name, body = create_body}) - if res and res.code > 300 then return res end - _docker:append_status("done\n") - - -- extra networks need to network connect action - for k, v in pairs(extra_network) do - -- if v.IPAMConfig and next(v.IPAMConfig) == nil then v.IPAMConfig =nil end - -- if v.DriverOpts and next(v.DriverOpts) == nil then v.DriverOpts =nil end - -- if v.Aliases and next(v.Aliases) == nil then v.Aliases =nil end - _docker:append_status("Networks: Connect" .. " " .. container_name .. "...") - res = self.networks:connect({id = k, body = {Container = container_name, EndpointConfig = v}}) - if res.code > 300 then return res end - - _docker:append_status("done\n") - end - _docker:clear_status() - return res -end - -local duplicate_config = function (self, request) - local container_info = self.containers:inspect({id = request.id}) - if container_info.code > 300 and type(container_info.body) == "table" then return nil end - local old_image_id = container_info.body.Image - -- local old_config = container_info.body.Config - -- local old_host_config = container_info.body.HostConfig - -- local old_network_setting = container_info.body.NetworkSettings.Networks or {} - local image_config = self.images:inspect({id = old_image_id}).body.Config - return get_config(container_info.body, image_config) -end - -_docker.new = function(option) - local option = option or {} - local remote = uci:get("dockerman", "local", "remote_endpoint") - options = { - host = (remote == "true") and (option.host or uci:get("dockerman", "local", "remote_host")) or nil, - port = (remote == "true") and (option.port or uci:get("dockerman", "local", "remote_port")) or nil, - debug = option.debug or uci:get("dockerman", "local", "debug") == 'true' and true or false, - debug_path = option.debug_path or uci:get("dockerman", "local", "debug_path") - } - options.socket_path = (remote ~= "true" or not options.host or not options.port) and (option.socket_path or uci:get("dockerman", "local", "socket_path") or "/var/run/docker.sock") or nil - local _new = docker.new(options) - _new.options.status_path = uci:get("dockerman", "local", "status_path") - _new.containers_upgrade = upgrade - _new.containers_duplicate_config = duplicate_config - return _new -end -_docker.options={} -_docker.options.status_path = uci:get("dockerman", "local", "status_path") - -_docker.append_status=function(self,val) - if not val then return end - local file_docker_action_status=io.open(self.options.status_path, "a+") - file_docker_action_status:write(val) - file_docker_action_status:close() -end - -_docker.write_status=function(self,val) - if not val then return end - local file_docker_action_status=io.open(self.options.status_path, "w+") - file_docker_action_status:write(val) - file_docker_action_status:close() -end - -_docker.read_status=function(self) - return nixio.fs.readfile(self.options.status_path) -end - -_docker.clear_status=function(self) - nixio.fs.remove(self.options.status_path) -end - -local status_cb = function(res, source, handler) - res.body = res.body or {} - while true do - local chunk = source() - if chunk then - --standard output to res.body - table.insert(res.body, chunk) - handler(chunk) - else - return - end - end -end - ---{"status":"Pulling from library\/debian","id":"latest"} ---{"status":"Pulling fs layer","progressDetail":[],"id":"50e431f79093"} ---{"status":"Downloading","progressDetail":{"total":50381971,"current":2029978},"id":"50e431f79093","progress":"[==> ] 2.03MB\/50.38MB"} ---{"status":"Download complete","progressDetail":[],"id":"50e431f79093"} ---{"status":"Extracting","progressDetail":{"total":50381971,"current":17301504},"id":"50e431f79093","progress":"[=================> ] 17.3MB\/50.38MB"} ---{"status":"Pull complete","progressDetail":[],"id":"50e431f79093"} ---{"status":"Digest: sha256:a63d0b2ecbd723da612abf0a8bdb594ee78f18f691d7dc652ac305a490c9b71a"} ---{"status":"Status: Downloaded newer image for debian:latest"} -_docker.pull_image_show_status_cb = function(res, source) - return status_cb(res, source, function(chunk) - local json_parse = luci.jsonc.parse - local step = json_parse(chunk) - if type(step) == "table" then - local buf = _docker:read_status() - local num = 0 - local str = '\t' .. (step.id and (step.id .. ": ") or "") .. (step.status and step.status or "") .. (step.progress and (" " .. step.progress) or "").."\n" - if step.id then buf, num = buf:gsub("\t"..step.id .. ": .-\n", str) end - if num == 0 then - buf = buf .. str - end - _docker:write_status(buf) - end - end) -end - ---{"status":"Downloading from https://downloads.openwrt.org/releases/19.07.0/targets/x86/64/openwrt-19.07.0-x86-64-generic-rootfs.tar.gz"} ---{"status":"Importing","progressDetail":{"current":1572391,"total":3821714},"progress":"[====================\u003e ] 1.572MB/3.822MB"} ---{"status":"sha256:d5304b58e2d8cc0a2fd640c05cec1bd4d1229a604ac0dd2909f13b2b47a29285"} --- _docker.import_image_show_status_cb = function(res, source) --- return status_cb(res, source, function(chunk) --- local json_parse = luci.jsonc.parse --- local step = json_parse(chunk) --- if type(step) == "table" then --- local buf = _docker:read_status() --- local num = 0 --- local str = '\t' .. (step.status and step.status or "") .. (step.progress and (" " .. step.progress) or "").."\n" --- if step.status then buf, num = buf:gsub("\t"..step.status .. " .-\n", str) end --- if num == 0 then --- buf = buf .. str --- end --- _docker:write_status(buf) --- end --- end --- ) --- end - --- _docker.print_status_cb = function(res, source) --- return status_cb(res, source, function(step) --- luci.util.perror(step) --- end --- ) --- end - -return _docker diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm deleted file mode 100644 index f7fb310e0b..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/apply_widget.htm +++ /dev/null @@ -1,140 +0,0 @@ - - diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm deleted file mode 100644 index b1b1932571..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinebutton.htm +++ /dev/null @@ -1,7 +0,0 @@ -
- <% if self:cfgvalue(section) ~= false then %> - " type="submit"" <% if self.disable then %>disabled <% end %><%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> - <% else %> - - - <% end %> -
diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm deleted file mode 100644 index 51c97f5c97..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/inlinevalue.htm +++ /dev/null @@ -1,33 +0,0 @@ -
- - <%- if self.password then -%> - /> - <%- end -%> - 0, "data-choices", { self.keylist, self.vallist }) - %> /> - <%- if self.password then -%> -
- <% end %> -
diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm deleted file mode 100644 index 244d2c10ad..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/namedsection.htm +++ /dev/null @@ -1,9 +0,0 @@ -<% if self:cfgvalue(self.section) then section = self.section %> -
- <%+cbi/tabmenu%> -
- <%+cbi/ucisection%> -
-
-<% end %> - diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xdynlist.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xdynlist.htm deleted file mode 100644 index 549c4ce319..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xdynlist.htm +++ /dev/null @@ -1,27 +0,0 @@ -<%+cbi/valueheader%> -> -<% - local vals = self:cfgvalue(section) or self.default or {} - for i=1, #vals + 1 do - local val = vals[i] - if (val and #val > 0) or (i == 1) then -%> - />
-<% end end %> - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm deleted file mode 100644 index 04f7bc2ee8..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xfvalue.htm +++ /dev/null @@ -1,10 +0,0 @@ -<%+cbi/valueheader%> - /> - disabled <% end %><%= - attr("id", cbid) .. attr("name", cbid) .. attr("value", self.enabled or 1) .. - ifattr((self:cfgvalue(section) or self.default) == self.enabled, "checked", "checked") - %> /> - > -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xsimpleform.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xsimpleform.htm deleted file mode 100644 index 7cfe8bf218..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/cbi/xsimpleform.htm +++ /dev/null @@ -1,89 +0,0 @@ -<% - if not self.embedded then - %>
> - - - <% - end - - %>
<% - - if self.title and #self.title > 0 then - %>

<%=self.title%>

<% - end - - if self.description and #self.description > 0 then - %>
<%=self.description%>
<% - end - - self:render_children() - - %>
<% - - if self.message then - %>
<%=self.message%>
<% - end - - if self.errmessage then - %>
<%=self.errmessage%>
<% - end - - if not self.embedded then - if type(self.hidden) == "table" then - local k, v - for k, v in pairs(self.hidden) do - %><% - end - end - - local display_back = (self.redirect) - local display_cancel = (self.cancel ~= false and self.on_cancel) - local display_skip = (self.flow and self.flow.skip) - local display_submit = (self.submit ~= false) - local display_reset = (self.reset ~= false) - - if display_back or display_cancel or display_skip or display_submit or display_reset then - %>
<% - - if display_back then - %> <% - end - - if display_cancel then - local label = pcdata(self.cancel or translate("Cancel")) - %> <% - end - - if display_skip then - %> <% - end - - if display_submit then - local label = pcdata(self.submit or translate("Submit")) - %> <% - end - - if display_reset then - local label = pcdata(self.reset or translate("Reset")) - %> <% - end - - %>
<% - end - - %>
<% - end -%> - - diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container.htm deleted file mode 100644 index 4d068dbf84..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container.htm +++ /dev/null @@ -1,26 +0,0 @@ -
- - - diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_console.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_console.htm deleted file mode 100644 index 636aec9605..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_console.htm +++ /dev/null @@ -1,6 +0,0 @@ -
- -
- diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_file.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_file.htm deleted file mode 100644 index b00746f68b..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_file.htm +++ /dev/null @@ -1,63 +0,0 @@ - -
- -
- -
-
- -
- -
-
-
- - -
-
- diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm deleted file mode 100644 index 2016181c58..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/container_stats.htm +++ /dev/null @@ -1,60 +0,0 @@ - diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/images_import.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/images_import.htm deleted file mode 100644 index e68724f226..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/images_import.htm +++ /dev/null @@ -1,90 +0,0 @@ - - - - -
- - -
- - diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/images_load.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/images_load.htm deleted file mode 100644 index 043b60d8d5..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/images_load.htm +++ /dev/null @@ -1,29 +0,0 @@ -
- - -
- diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/logs.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/logs.htm deleted file mode 100644 index 8e94cad42d..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/logs.htm +++ /dev/null @@ -1,11 +0,0 @@ -<% if self.title == "Events" then %> -<%+header%> -

<%:Docker%>

-<%:Events%> -<% end %> -
- -
-<% if self.title == "Events" then %> -<%+footer%> -<% end %> diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm deleted file mode 100644 index e26bacf33f..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/newcontainer_resolve.htm +++ /dev/null @@ -1,95 +0,0 @@ - - -<%+cbi/valueheader%> - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/overview.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/overview.htm deleted file mode 100644 index c2d6e6a7b8..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/overview.htm +++ /dev/null @@ -1,280 +0,0 @@ - - -
-
-
-
-
- - Docker icon - - -
-
-
-

<%:Containers%>

-

- <%- if self.containers_total ~= "-" then -%><%- end -%> - <%=self.containers_running%> - /<%=self.containers_total%> - <%- if self.containers_total ~= "-" then -%><%- end -%> -

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

<%:Images%>

-

- <%- if self.images_total ~= "-" then -%><%- end -%> - <%=self.images_used%> - /<%=self.images_total%> - <%- if self.images_total ~= "-" then -%><%- end -%> -

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

<%:Networks%>

-

- <%- if self.networks_total ~= "-" then -%><%- end -%> - <%=self.networks_total%> - - <%- if self.networks_total ~= "-" then -%><%- end -%> -

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

<%:Volumes%>

-

- <%- if self.volumes_total ~= "-" then -%><%- end -%> - <%=self.volumes_total%> - - <%- if self.volumes_total ~= "-" then -%><%- end -%> -

-
-
-
-
diff --git a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/overview_tab.htm b/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/overview_tab.htm deleted file mode 100644 index a85c15bb1a..0000000000 --- a/package/ctcgfw/luci-app-dockerman/luasrc/view/dockerman/overview_tab.htm +++ /dev/null @@ -1,31 +0,0 @@ -
-

<%:Setting%>

-
    - <% for k, v in pairs(self.tabs) do - local class = k == self.default_tab and "cbi-tab" or "cbi-tab-disabled" - local id = "tab.overview-tab." .. k - %> -
  • class=<%=class%> > - <%=v%> -
  • - <% end %> -
- diff --git a/package/ctcgfw/luci-app-dockerman/po/zh-cn/dockerman.po b/package/ctcgfw/luci-app-dockerman/po/zh-cn/dockerman.po deleted file mode 100644 index 40f377f435..0000000000 --- a/package/ctcgfw/luci-app-dockerman/po/zh-cn/dockerman.po +++ /dev/null @@ -1,413 +0,0 @@ -msgid "Containers" -msgstr "容器" - -msgid "Images" -msgstr "镜像" - -msgid "Networks" -msgstr "网络" - -msgid "Volumes" -msgstr "存储卷" - -msgid "Events" -msgstr "事件" - -msgid "Docker Contaienr" -msgstr "Docker 容器" - -msgid "Start" -msgstr "启动" - -msgid "Restart" -msgstr "重启" - -msgid "Stop" -msgstr "停止" - -msgid "Upgrade" -msgstr "升级容器" - -msgid "Duplicate/Edit" -msgstr "复制/编辑容器" - -msgid "Remove" -msgstr "移除" - -msgid "Name" -msgstr "名称" - -msgid "Image" -msgstr "镜像" - -msgid "Status" -msgstr "状态" - -msgid "Created" -msgstr "创建时间" - -msgid "Start Time" -msgstr "启动时间" - -msgid "Healthy" -msgstr "健康" - -msgid "Restart Policy" -msgstr "重启策略" - -msgid "Update" -msgstr "更新" - -msgid "Device(--device)" -msgstr "设备(--device)" - -msgid "Mount/Volume" -msgstr "挂载/存储卷" - -msgid "Command" -msgstr "启动命令" - -msgid "Setting" -msgstr "设置" - -msgid "Driver" -msgstr "驱动" - -msgid "Env" -msgstr "环境变量" - -msgid "Ports" -msgstr "端口" - -msgid "Links" -msgstr "链接" - -msgid "Disconnect" -msgstr "断开" - -msgid "Connect Network" -msgstr "连接网络" - -msgid "Connect" -msgstr "连接" - -msgid "Info" -msgstr "信息" - -msgid "CPUs" -msgstr "CPU数量" - -msgid "Number of CPUs. Number is a fractional number. 0.000 means no limit." -msgstr "CPU数量,数字是小数,0.000表示没有限制。" - -msgid "CPU Shares Weight" -msgstr "CPU份额权重" - -msgid "CPU shares relative weight, if 0 is set, the system will ignore the value and use the default of 1024." -msgstr "CPU份额相对权重,如果设置为0,则系统将忽略该值,并使用默认值1024。" - -msgid "Memory" -msgstr "内存" - -msgid "Memory limit (format: []). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M." -msgstr "内存限制 (格式: <容量>[<单位>]). 数字是一个正整数。单位可以是b,k,m或g之一。最小为4M。" - -msgid "Block IO Weight" -msgstr "IO 权重" - -msgid "Block IO weight (relative weight) accepts a weight value between 10 and 1000." -msgstr "IO 权重 (相对权重) 接受10到1000之间的权重值。" - -msgid "Container Logs" -msgstr "容器日志" - -msgid "RepoTags" -msgstr "标签" - -msgid "Size" -msgstr "大小" - -msgid "Force Remove" -msgstr "强制移除" - -msgid "Subnet" -msgstr "子网络" - -msgid "Gateway" -msgstr "网关" - -msgid "New" -msgstr "新建" - -msgid "Resolve CLI" -msgstr "解析命令行" - -msgid "Docker Image" -msgstr "Docker 镜像" - -msgid "User(-u)" -msgstr "用户(-u)" - -msgid "New Container" -msgstr "新容器" - -msgid "Container Name" -msgstr "容器名称" - -msgid "Interactive (-i)" -msgstr "互动式 (-i)" - -msgid "Always pull image first" -msgstr "始终先拉取镜像" - -msgid "Privileged" -msgstr "特权模式(--privileged)" - -msgid "IPv4 Address" -msgstr "IPv4 地址" - -msgid "Links with other containers" -msgstr "与其他容器的链接(--link)" - -msgid "Environmental Variable(-e)" -msgstr "环境变量(-e)" - -msgid "Bind Mount(-v)" -msgstr "挂载(-v)" - -msgid "Exposed Ports(-p)" -msgstr "暴露端口(-p)" - -msgid "Run command" -msgstr "运行命令" - -msgid "Advance" -msgstr "高级" - -msgid "Mount tmpfs directory" -msgstr "挂载tmpfs到容器内部目录" - -msgid "New Network" -msgstr "新网络" - -msgid "Network Name" -msgstr "网络名称" - -msgid "Parent Interface" -msgstr "父接口" - -msgid "Macvlan Mode" -msgstr "Macvlan模式" - -msgid "Ipvlan Mode" -msgstr "Ipvlan模式" - -msgid "Ingress network is the network which provides the routing-mesh in swarm mode." -msgstr "Ingress网络是在群集模式下提供路由网的网络。" - -msgid "Options" -msgstr "选项" - -msgid "Restrict external access to the network" -msgstr "限制外部访问网络" - -msgid "IP range" -msgstr "IP范围" - -msgid "Exclude IPs" -msgstr "排除IP" - -msgid "Enable IPv6" -msgstr "启用IPv6" - -msgid "IPv6 Subnet" -msgstr "IPv6子网" - -msgid "IPv6 Gateway" -msgstr "IPv6网关" - -msgid "Docker Version" -msgstr "Docker版本" - -msgid "Api Version" -msgstr "API版本" - -msgid "Total Memory" -msgstr "总内存" - -msgid "Docker Root Dir" -msgstr "Docker根目录" - -msgid "Index Server Address" -msgstr "默认服务器地址" - -msgid "Registry Mirrors" -msgstr "仓库镜像" - -msgid "Docker Socket Path" -msgstr "Docker Socket 路径" - -msgid "Action Status Tempfile Path" -msgstr "Docker 操作状态临时文件路径" - -msgid "Where you want to save the docker status file" -msgstr "保存docker status文件的位置" - -msgid "Enable Debug" -msgstr "启用调试" - -msgid "For debug, It shows all docker API actions of luci-app-dockerman in Debug Tempfile Path" -msgstr "用于调试,在调试临时文件路径中显示 luci-app-dockerman 的所有 Docker API 操作" - -msgid "Debug Tempfile Path" -msgstr "调试临时文件路径" - -msgid "Where you want to save the debug tempfile" -msgstr "保存调试临时文件的位置" - -msgid "Log Level" -msgstr "日志等级" - -msgid "Set the logging level" -msgstr "设置日志等级" - -msgid "Enable WAN access" -msgstr "允许 WAN 访问" - -msgid "Enable WAN access container mapped ports" -msgstr "允许 WAN 访问容器映射的端口" - -msgid "Server Host" -msgstr "服务端" - -msgid "Daemon unix socket (unix:///var/run/docker.sock) or TCP Remote Hosts (tcp://0.0.0.0:2375), default: unix:///var/run/docker.sock" -msgstr "后台 Unix socket (unix:///var/run/docker.sock) 或 TCP 远程服务端 (tcp://0.0.0.0:2375),默认: unix:///var/run/docker.sock" - -msgid "Stats" -msgstr "状态" - -msgid "Logs" -msgstr "日志" - -msgid "Network TX/RX" -msgstr "网络发送/接收" - -msgid "CPU Useage" -msgstr "CPU用量" - -msgid "Memory Useage" -msgstr "内存用量" - -msgid "Docker Container" -msgstr "Docker 容器" - -msgid "Overview" -msgstr "概况" - -msgid "Pull Image" -msgstr "拉取镜像" - -msgid "Pull" -msgstr "拉取" - -msgid "Command line" -msgstr "输入命令行" - -msgid "Plese input command line:" -msgstr "请输入 docker run/create ... 命令行:" - -msgid "Network Name" -msgstr "网络名" - -msgid "Set custom DNS servers" -msgstr "自定义 DNS 服务器" - -msgid "The user that commands are run as inside the container.(format: name|uid[:group|gid])" -msgstr "容器内部执行命令的用户(组), 格式: UID:GID" - -msgid "Set environment variables to inside the container" -msgstr "容器内部环境变量" - -msgid "Bind mount a volume" -msgstr "绑定挂载" - -msgid "Publish container's port(s) to the host" -msgstr "将容器的端口发布到宿主" - -msgid "Add host device to the container" -msgstr "添加宿主设备到容器内部" - -msgid "Device" -msgstr "设备" - -msgid "Finish Time" -msgstr "结束时间" - -msgid "Command line Error" -msgstr "命令行错误" - -msgid "Host Name" -msgstr "主机名称" - -msgid "The hostname to use for the container" -msgstr "容器使用的主机名" - -msgid "File" -msgstr "文件" - -msgid "Upload" -msgstr "上传" - -msgid "Download" -msgstr "下载" - -msgid "Import" -msgstr "导入" - -msgid "Export" -msgstr "导出" - -msgid "Path" -msgstr "路径" - -msgid "Upload Error" -msgstr "上传错误" - -msgid "Upload Success" -msgstr "上传成功" - -msgid "Remote Endpoint" -msgstr "远程节点" - -msgid "Remote Host" -msgstr "远程节点域名" - -msgid "Remote Port" -msgstr "远程节点端口" - -msgid "Import Images" -msgstr "导入镜像" - -msgid "Load" -msgstr "载入" - -msgid "Save" -msgstr "保存" - -msgid "Remove tag" -msgstr "移除镜像标签" - -msgid "New tag" -msgstr "新镜像标签" - -msgid "Container detail" -msgstr "容器详情" - -msgid "Please input new tag" -msgstr "请输入新镜像标签名称" - -msgid "Error" -msgstr "错误" - -msgid "Console" -msgstr "控制台" diff --git a/package/ctcgfw/luci-app-dockerman/root/etc/config/dockerd b/package/ctcgfw/luci-app-dockerman/root/etc/config/dockerd deleted file mode 100644 index d0ae9596d8..0000000000 --- a/package/ctcgfw/luci-app-dockerman/root/etc/config/dockerd +++ /dev/null @@ -1,5 +0,0 @@ -config section 'local' - option ea 'true' - option en_wan 'false' - option data_root '/opt/docker' - option log_level 'warn' diff --git a/package/ctcgfw/luci-app-dockerman/root/etc/config/dockerman b/package/ctcgfw/luci-app-dockerman/root/etc/config/dockerman deleted file mode 100644 index f13c5c205e..0000000000 --- a/package/ctcgfw/luci-app-dockerman/root/etc/config/dockerman +++ /dev/null @@ -1,5 +0,0 @@ -config section 'local' - option socket_path '/var/run/docker.sock' - option status_path '/tmp/.docker_action_status' - option debug_path '/tmp/.docker_debug' - option debug 'false' diff --git a/package/ctcgfw/luci-app-dockerman/root/etc/docker-init b/package/ctcgfw/luci-app-dockerman/root/etc/docker-init deleted file mode 100755 index 45b9769a51..0000000000 --- a/package/ctcgfw/luci-app-dockerman/root/etc/docker-init +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -dtype=`fdisk -l /dev/sda | grep 'Disklabel type' | awk '{print $3}'` -partid="0" - -if [ "$dtype" = "gpt" ] -then - partid=`echo "n - - - -w -" | fdisk /dev/sda | grep 'Created a new partition' | awk '{print $5}'` - -elif [ "$dtype" = "dos" ] -then - partid=`echo "n -p - - - -w -" | fdisk /dev/sda | grep 'Created a new partition' | awk '{print $5}'` -fi - -echo "y" | mkfs.ext4 /dev/sda$partid diff --git a/package/ctcgfw/luci-app-dockerman/root/etc/init.d/dockerd b/package/ctcgfw/luci-app-dockerman/root/etc/init.d/dockerd deleted file mode 100755 index 777f246ec9..0000000000 --- a/package/ctcgfw/luci-app-dockerman/root/etc/init.d/dockerd +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh /etc/rc.common - -USE_PROCD=1 -START=99 -NAME=dockerd_local -DOCKERD_CONF="/etc/docker/daemon.json" - -append_list_item() { - append "$2" "$1" "\",\"" -} - -get_config() { - config_load $1 - config_get ea "local" ea - config_get en_wan "local" en_wan - config_get data_root "local" data_root '/opt/docker' - config_get log_level "local" log_level 'warn' - config_list_foreach "local" registry_mirrors append_list_item registry_mirrors - config_list_foreach "local" hosts append_list_item hosts -} - -gen_config(){ - cat <<-EOF >$DOCKERD_CONF -{ - "data-root": "$data_root", - "log-level": "$log_level", - "registry-mirrors": ["$registry_mirrors"], - "hosts": ["$hosts"] -} -EOF -sed -i 's/\[\"\"\]/\[\]/g' $DOCKERD_CONF -} - -_start() { - local nofile=$(cat /proc/sys/fs/nr_open) - get_config dockerd - gen_config - if [ -n "$en_wan" ]; then - iptables -D DOCKER-USER ! -i br-lan -m conntrack --ctstate NEW,INVALID -o docker0 -j DROP >/dev/null 2>&1 - iptables -D DOCKER-USER ! -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -o docker0 -j RETURN >/dev/null 2>&1 - else - iptables -D DOCKER-USER ! -i br-lan -m conntrack --ctstate NEW,INVALID -o docker0 -j DROP >/dev/null 2>&1 - iptables -D DOCKER-USER ! -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -o docker0 -j RETURN >/dev/null 2>&1 - iptables -I DOCKER-USER ! -i br-lan -m conntrack --ctstate ESTABLISHED,RELATED -o docker0 -j RETURN >/dev/null 2>&1 - iptables -I DOCKER-USER ! -i br-lan -m conntrack --ctstate NEW,INVALID -o docker0 -j DROP >/dev/null 2>&1 - fi - if [ -n "$ea" ]; then - procd_open_instance $NAME - procd_set_param stderr 1 - procd_set_param command /usr/bin/dockerd - procd_set_param limits nofile="${nofile} ${nofile}" - procd_close_instance - fi -} - -start_service() { - _start -} - -service_triggers() { - procd_add_reload_trigger dockerd -} - -reload_service() { - restart -} diff --git a/package/ctcgfw/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman b/package/ctcgfw/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman deleted file mode 100755 index 9ad21a711f..0000000000 --- a/package/ctcgfw/luci-app-dockerman/root/etc/uci-defaults/luci-app-dockerman +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - set uhttpd.main.script_timeout="600" - commit uhttpd - delete ucitrack.@dockerd[-1] - add ucitrack dockerd - set ucitrack.@dockerd[-1].init=dockerd - commit ucitrack -EOF -/etc/init.d/dockerd enable >/dev/null 2>&1 -/etc/init.d/uhttpd restart >/dev/null 2>&1 -rm -fr /tmp/luci-indexcache /tmp/luci-modulecache >/dev/null 2>&1 -exit 0 diff --git a/package/ctcgfw/luci-app-filebrowser/Makefile b/package/ctcgfw/luci-app-filebrowser/Makefile deleted file mode 100644 index 3abe46bba8..0000000000 --- a/package/ctcgfw/luci-app-filebrowser/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2021 ImmortalWrt -# -# -# This is free software, licensed under the GNU General Public License v3. -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for FileBrowser -LUCI_DEPENDS:=+filebrowser -LUCI_PKGARCH:=all - -PKG_NAME:=luci-app-filebrowser -PKG_VERSION:=snapshot -PKG_RELEASE:=118071b - -PKG_LICENSE:=GPLv3 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-filebrowser/luasrc/controller/filebrowser.lua b/package/ctcgfw/luci-app-filebrowser/luasrc/controller/filebrowser.lua deleted file mode 100644 index c6ca9085b1..0000000000 --- a/package/ctcgfw/luci-app-filebrowser/luasrc/controller/filebrowser.lua +++ /dev/null @@ -1,19 +0,0 @@ -module("luci.controller.filebrowser", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/filebrowser") then - return - end - entry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false - local page - page = entry({"admin", "nas", "filebrowser"}, cbi("filebrowser"), _("文件管理器"), 100) - page.dependent = true - entry({"admin","nas","filebrowser","status"},call("act_status")).leaf=true -end - -function act_status() - local e={} - e.running=luci.sys.call("pgrep filebrowser >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-filebrowser/luasrc/model/cbi/filebrowser.lua b/package/ctcgfw/luci-app-filebrowser/luasrc/model/cbi/filebrowser.lua deleted file mode 100644 index 0a12e9cf72..0000000000 --- a/package/ctcgfw/luci-app-filebrowser/luasrc/model/cbi/filebrowser.lua +++ /dev/null @@ -1,42 +0,0 @@ -m = Map("filebrowser", translate("文件管理器"), translate("FileBrowser是一个基于Go的在线文件管理器,助您方便的管理设备上的文件。")) - -m:section(SimpleSection).template = "filebrowser/filebrowser_status" - -s = m:section(TypedSection, "filebrowser") -s.addremove = false -s.anonymous = true - -enable = s:option(Flag, "enabled", translate("启用")) -enable.rmempty = false - -o = s:option(ListValue, "addr_type", translate("监听地址")) -o:value("local", translate("监听本机地址")) -o:value("lan", translate("监听局域网地址")) -o:value("wan", translate("监听全部地址")) -o.default = "lan" -o.rmempty = false - -o = s:option(Value, "port", translate("监听端口")) -o.placeholder = 8989 -o.default = 8989 -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "root_dir", translate("开放目录")) -o.placeholder = "/" -o.default = "/" -o.rmempty = false - -o = s:option(Value, "db_dir", translate("数据库目录")) -o.placeholder = "/etc" -o.default = "/etc" -o.rmempty = false -o.description = translate("普通用户请勿随意更改") - -o = s:option(Value, "db_name", translate("数据库名")) -o.placeholder = "filebrowser.db" -o.default = "filebrowser.db" -o.rmempty = false -o.description = translate("普通用户请勿随意更改") - -return m diff --git a/package/ctcgfw/luci-app-filebrowser/luasrc/view/filebrowser/filebrowser_status.htm b/package/ctcgfw/luci-app-filebrowser/luasrc/view/filebrowser/filebrowser_status.htm deleted file mode 100644 index 7581cc3c52..0000000000 --- a/package/ctcgfw/luci-app-filebrowser/luasrc/view/filebrowser/filebrowser_status.htm +++ /dev/null @@ -1,32 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/package/ctcgfw/luci-app-filebrowser/root/etc/uci-defaults/luci-filebrowser b/package/ctcgfw/luci-app-filebrowser/root/etc/uci-defaults/luci-filebrowser deleted file mode 100755 index 8fece8810e..0000000000 --- a/package/ctcgfw/luci-app-filebrowser/root/etc/uci-defaults/luci-filebrowser +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@filebrowser[-1] - add ucitrack filebrowser - set ucitrack.@filebrowser[-1].init=filebrowser - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 \ No newline at end of file diff --git a/package/ctcgfw/luci-app-frps/Makefile b/package/ctcgfw/luci-app-frps/Makefile deleted file mode 100644 index ff6f0ae7b1..0000000000 --- a/package/ctcgfw/luci-app-frps/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright 2020 lwz322 -# Licensed to the public under the MIT License. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-frps -PKG_VERSION:=0.0.2 -PKG_RELEASE:=3 - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE - -PKG_MAINTAINER:=lwz322 - -LUCI_TITLE:=LuCI support for Frps -LUCI_DEPENDS:=+wget-ssl +frps -LUCI_PKGARCH:=all - -define Package/$(PKG_NAME)/conffiles -/etc/config/frps -endef - -include $(TOPDIR)/feeds/luci/luci.mk - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - ( . /etc/uci-defaults/40_luci-frps ) && rm -f /etc/uci-defaults/40_luci-frps -fi - -chmod 755 "$${IPKG_INSTROOT}/etc/init.d/frps" >/dev/null 2>&1 -ln -sf "../init.d/frps" \ - "$${IPKG_INSTROOT}/etc/rc.d/S99frps" >/dev/null 2>&1 -exit 0 -endef - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-frps/luasrc/controller/frps.lua b/package/ctcgfw/luci-app-frps/luasrc/controller/frps.lua deleted file mode 100644 index e9c15cd776..0000000000 --- a/package/ctcgfw/luci-app-frps/luasrc/controller/frps.lua +++ /dev/null @@ -1,43 +0,0 @@ --- Copyright 2020 lwz322 --- Licensed to the public under the MIT License. - -local http = require "luci.http" -local uci = require "luci.model.uci".cursor() -local sys = require "luci.sys" - -module("luci.controller.frps", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/frps") then - return - end - - entry({"admin", "services", "frps"}, - firstchild(), _("Frps")).dependent = false - - entry({"admin", "services", "frps", "common"}, - cbi("frps/common"), _("Settings"), 1) - - entry({"admin", "services", "frps", "server"}, - cbi("frps/server"), _("Server"), 2).leaf = true - - entry({"admin", "services", "frps", "status"}, call("action_status")) -end - - -function action_status() - local running = false - - local client = uci:get("frps", "main", "client_file") - if client and client ~= "" then - local file_name = client:match(".*/([^/]+)$") or "" - if file_name ~= "" then - running = sys.call("pidof %s >/dev/null" % file_name) == 0 - end - end - - http.prepare_content("application/json") - http.write_json({ - running = running - }) -end diff --git a/package/ctcgfw/luci-app-frps/luasrc/model/cbi/frps/common.lua b/package/ctcgfw/luci-app-frps/luasrc/model/cbi/frps/common.lua deleted file mode 100644 index c5c0d02564..0000000000 --- a/package/ctcgfw/luci-app-frps/luasrc/model/cbi/frps/common.lua +++ /dev/null @@ -1,110 +0,0 @@ --- Copyright 2020 lwz322 --- Licensed to the public under the MIT License. - -local uci = require "luci.model.uci".cursor() -local util = require "luci.util" -local fs = require "nixio.fs" -local sys = require "luci.sys" - -local m, s, o -local server_table = { } - -local function frps_version() - local file = uci:get("frps", "main", "client_file") - - if not file or file == "" or not fs.stat(file) then - return "%s" % translate("Invalid client file") - end - - if not fs.access(file, "rwx", "rx", "rx") then - fs.chmod(file, 755) - end - - local version = util.trim(sys.exec("%s -v 2>/dev/null" % file)) - if version == "" then - return "%s" % translate("Can't get client version") - end - return translatef("Version: %s", version) -end - -m = Map("frps", "%s - %s" % { translate("Frps"), translate("Common Settings") }, -"

%s

%s

" % { - translate("Frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet."), - translatef("For more information, please visit: %s", - "https://github.com/fatedier/frp") -}) - -m:append(Template("frps/status_header")) - -s = m:section(NamedSection, "main", "frps") -s.addremove = false -s.anonymous = true - -s:tab("general", translate("General Options")) -s:tab("advanced", translate("Advanced Options")) -s:tab("dashboard", translate("Dashboard Options")) - -o = s:taboption("general", Flag, "enabled", translate("Enabled")) - -o = s:taboption("general", Value, "client_file", translate("Client file"), frps_version()) -o.datatype = "file" -o.rmempty = false - -o = s:taboption("general", ListValue, "run_user", translate("Run daemon as user")) -o:value("", translate("-- default --")) -local user -for user in util.execi("cat /etc/passwd | cut -d':' -f1") do - o:value(user) -end - -o = s:taboption("general", Flag, "enable_logging", translate("Enable logging")) - -o = s:taboption("general", Value, "log_file", translate("Log file")) -o:depends("enable_logging", "1") -o.placeholder = "/var/log/frps.log" - -o = s:taboption("general", ListValue, "log_level", translate("Log level")) -o:depends("enable_logging", "1") -o:value("trace", translate("Trace")) -o:value("debug", translate("Debug")) -o:value("info", translate("Info")) -o:value("warn", translate("Warn")) -o:value("error", translate("Error")) -o.default = "warn" - -o = s:taboption("general", Value, "log_max_days", translate("Log max days")) -o:depends("enable_logging", "1") -o.datatype = "uinteger" -o.placeholder = '3' - -o = s:taboption("general", Value, "disable_log_color", translate("Disable log color")) -o:depends("enable_logging", "1") -o.enabled = "true" -o.disabled = "false" - -o = s:taboption("advanced", Value, "max_pool_count", translate("Max pool count"), - translate("pool_count in each proxy will change to max_pool_count if they exceed the maximum value")) -o.datatype = "uinteger" - -o = s:taboption("advanced", Value, "max_ports_per_client", translate("Max ports per-client"), - translate("max ports can be used for each client, default value is 0 means no limit")) -o.datatype = "uinteger" -o.defalut = '0' -o.placeholder = '0' - -o = s:taboption("advanced", Value, "subdomain_host", translate("Subdomain host"), - translatef("if subdomain_host is not empty, you can set subdomain when type is http or https in frpc's configure file; when subdomain is test, the host used by routing is test.frps.com")) -o.datatype = "host" - -o = s:taboption("dashboard", Value, "dashboard_addr", translate("Dashboard addr"), translatef("dashboard addr's default value is same with bind_addr")) -o.datatype = "host" - -o = s:taboption("dashboard", Value, "dashboard_port", translate("Dashboard port"), translatef("dashboard is available only if dashboard_port is set")) -o.datatype = "port" - -o = s:taboption("dashboard", Value, "dashboard_user", translate("Dashboard user"), translatef("dashboard user and passwd for basic auth protect, if not set, both default value is admin")) - -o = s:taboption("dashboard", Value, "dashboard_pwd", translate("Dashboard password")) -o.password = true - -return m diff --git a/package/ctcgfw/luci-app-frps/luasrc/model/cbi/frps/server.lua b/package/ctcgfw/luci-app-frps/luasrc/model/cbi/frps/server.lua deleted file mode 100644 index 47073f6848..0000000000 --- a/package/ctcgfw/luci-app-frps/luasrc/model/cbi/frps/server.lua +++ /dev/null @@ -1,54 +0,0 @@ --- Copyright 2020 lwz322 --- Licensed to the public under the MIT License. - -local dsp = require "luci.dispatcher" - -local m, s, o - -m = Map("frps", "%s - %s" % { translate("Frps"), translate("FRPS Server setting") }) - -s = m:section(NamedSection, "main", "frps") -s.anonymous = true -s.addremove = false - -o = s:option(Value, "bind_port", translate("Bind port")) -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "token", translate("Token")) -o.password = true - -o = s:option(Flag, "tcp_mux", translate("TCP mux")) -o.enabled = "true" -o.disabled = "false" -o.defalut = o.enabled -o.rmempty = false - -o = s:option(Flag, "tls_only", translate("Enforce frps only accept TLS connection"), - translatef("Requirements: frpc v0.25.0+, frps v0.32.0+")) -o.enabled = "true" -o.disabled = "false" -o.default = o.disabled -o.rmempty = false - -o = s:option(Value, "bind_udp_port", translate("UDP bind port"), - translatef("Optional: udp port to help make udp hole to penetrate nat")) -o.datatype = "port" - -o = s:option(Value, "kcp_bind_port", translate("KCP bind port"), - translatef("Optional: udp port used for kcp protocol, it can be same with 'bind port'; if not set, kcp is disabled in frps")) -o.datatype = "port" - -o = s:option(Value, "vhost_http_port", translate("vhost http port"), - translatef("Optional: if you want to support virtual host, you must set the http port for listening")) -o.datatype = "port" - -o = s:option(Value, "vhost_https_port", translate("vhost https port"), - translatef("Optional: Note: http port and https port can be same with bind_port")) -o.datatype = "port" - -o = s:option(DynamicList, "extra_setting", translate("Extra Settings"), - translatef("List of extra settings will be added to config file. Format: option=value, eg. detailed_errors_to_client=false.(NO SPACE!)")) -o.placeholder = "option=value" - -return m \ No newline at end of file diff --git a/package/ctcgfw/luci-app-frps/luasrc/view/frps/status_header.htm b/package/ctcgfw/luci-app-frps/luasrc/view/frps/status_header.htm deleted file mode 100644 index a5bd6a0b24..0000000000 --- a/package/ctcgfw/luci-app-frps/luasrc/view/frps/status_header.htm +++ /dev/null @@ -1,29 +0,0 @@ -<%# - Copyright 2020 lwz322 - Licensed to the public under the MIT License. --%> - -<% -local dsp = require "luci.dispatcher" --%> - -
-

- <%:Collecting data...%> -

-
- - diff --git a/package/ctcgfw/luci-app-frps/po/zh-cn/frps.po b/package/ctcgfw/luci-app-frps/po/zh-cn/frps.po deleted file mode 100644 index 0ca602d699..0000000000 --- a/package/ctcgfw/luci-app-frps/po/zh-cn/frps.po +++ /dev/null @@ -1,249 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: luasrc/model/cbi/frps/common.lua:54 -msgid "-- default --" -msgstr "-- 默认 --" - -#: luasrc/model/cbi/frps/common.lua:44 -msgid "Advanced Options" -msgstr "高级选项" - -#: luasrc/model/cbi/frps/server.lua:14 -msgid "Bind port" -msgstr "绑定端口" - -#: luasrc/model/cbi/frps/common.lua:25 -msgid "Can't get client version" -msgstr "无法获取到客户端版本" - -#: luasrc/model/cbi/frps/common.lua:49 -msgid "Client file" -msgstr "客户端文件" - -#: luasrc/view/frps/status_header.htm:12 -msgid "Collecting data..." -msgstr "正在收集数据..." - -#: luasrc/model/cbi/frps/common.lua:30 -msgid "Common Settings" -msgstr "通用设置" - -#: luasrc/model/cbi/frps/common.lua:45 -msgid "Dashboard Options" -msgstr "面板选项" - -#: luasrc/model/cbi/frps/common.lua:99 -msgid "Dashboard addr" -msgstr "面板绑定地址" - -#: luasrc/model/cbi/frps/common.lua:107 -msgid "Dashboard password" -msgstr "面板登录密码" - -#: luasrc/model/cbi/frps/common.lua:102 -msgid "Dashboard port" -msgstr "面板绑定端口" - -#: luasrc/model/cbi/frps/common.lua:105 -msgid "Dashboard user" -msgstr "面板登录用户名" - -#: luasrc/model/cbi/frps/common.lua:69 -msgid "Debug" -msgstr "调试" - -#: luasrc/model/cbi/frps/common.lua:80 -msgid "Disable log color" -msgstr "禁用日志颜色" - -#: luasrc/model/cbi/frps/common.lua:60 -msgid "Enable logging" -msgstr "启用日志" - -#: luasrc/model/cbi/frps/common.lua:47 -msgid "Enabled" -msgstr "已启用" - -#: luasrc/model/cbi/frps/common.lua:72 -msgid "Error" -msgstr "错误" - -#: luasrc/model/cbi/frps/server.lua:8 -msgid "FRPS Server setting" -msgstr "Frps 服务器设定" - -#: luasrc/model/cbi/frps/common.lua:33 -msgid "For more information, please visit: %s" -msgstr "获取更多信息,请访问:%s" - -#: luasrc/model/cbi/frps/common.lua:32 -msgid "" -"Frp is a fast reverse proxy to help you expose a local server behind a NAT " -"or firewall to the internet." -msgstr "Frp 是一个可用于内网穿透的高性能的反向代理应用。" - -#: luasrc/controller/frps.lua:16 luasrc/model/cbi/frps/common.lua:30 -#: luasrc/model/cbi/frps/server.lua:8 -msgid "Frps" -msgstr "Frps" - -#: luasrc/model/cbi/frps/common.lua:43 -msgid "General Options" -msgstr "常规选项" - -#: luasrc/model/cbi/frps/common.lua:70 -msgid "Info" -msgstr "信息" - -#: luasrc/model/cbi/frps/common.lua:16 -msgid "Invalid client file" -msgstr "客户端文件无效" - -#: luasrc/model/cbi/frps/server.lua:31 -msgid "KCP bind port" -msgstr "KCP绑定端口" - -#: luasrc/model/cbi/frps/common.lua:62 -msgid "Log file" -msgstr "日志文件" - -#: luasrc/model/cbi/frps/common.lua:66 -msgid "Log level" -msgstr "日志等级" - -#: luasrc/model/cbi/frps/common.lua:75 -msgid "Log max days" -msgstr "日志保存天数" - -#: luasrc/model/cbi/frps/common.lua:85 -msgid "Max pool count" -msgstr "最大连接数" - -#: luasrc/model/cbi/frps/common.lua:89 -msgid "Max ports per-client" -msgstr "单客户端最大端口映射数" - -#: luasrc/view/frps/status_header.htm:26 -msgid "Not Running" -msgstr "服务未运行" - -#: luasrc/model/cbi/frps/server.lua:40 -msgid "Optional: Note: http port and https port can be same with bind_port" -msgstr "(可选)提示:http/https端口可以和绑定端口设定为一致" - -#: luasrc/model/cbi/frps/server.lua:36 -msgid "" -"Optional: if you want to support virtual host, you must set the http port " -"for listening" -msgstr "(可选)如果您希望支持虚拟主机,则必须设定http端口" - -#: luasrc/model/cbi/frps/server.lua:28 -msgid "Optional: udp port to help make udp hole to penetrate nat" -msgstr "(可选)设定UDP端口以帮助UDP协议穿透NAT" - -#: luasrc/model/cbi/frps/server.lua:32 -msgid "" -"Optional: udp port used for kcp protocol, it can be same with 'bind port'; " -"if not set, kcp is disabled in frps" -msgstr "(可选)UDP端口用于KCP协议,可与绑定端口设定为一致;留空以禁用KCP" - -#: luasrc/model/cbi/frps/common.lua:53 -msgid "Run daemon as user" -msgstr "以用户身份运行" - -#: luasrc/view/frps/status_header.htm:25 -msgid "Running" -msgstr "服务正在运行" - -#: luasrc/controller/frps.lua:22 -msgid "Server" -msgstr "服务端" - -#: luasrc/controller/frps.lua:19 -msgid "Settings" -msgstr "设置" - -#: luasrc/model/cbi/frps/common.lua:95 -msgid "Subdomain host" -msgstr "子域名" - -#: luasrc/model/cbi/frps/server.lua:21 -msgid "TCP mux" -msgstr "TCP 复用" - -#: luasrc/model/cbi/frps/server.lua:27 -msgid "Enforce frps only accept TLS connection" -msgstr "强制frps只接受TLS连接" - -#: luasrc/model/cbi/frps/server.lua:28 -msgid "Requirements: frpc v0.25.0+, frps v0.32.0+" -msgstr "要求:frpc版本0.25.0+, frps版本0.32.0+" - -#: luasrc/model/cbi/frps/server.lua:18 -msgid "Token" -msgstr "令牌" - -#: luasrc/model/cbi/frps/common.lua:68 -msgid "Trace" -msgstr "追踪" - -#: luasrc/model/cbi/frps/server.lua:27 -msgid "UDP bind port" -msgstr "UDP绑定端口" - -#: luasrc/model/cbi/frps/common.lua:27 -msgid "Version: %s" -msgstr "版本:%s" - -#: luasrc/model/cbi/frps/common.lua:71 -msgid "Warn" -msgstr "警告" - -#: luasrc/model/cbi/frps/common.lua:99 -msgid "dashboard addr's default value is same with bind_addr" -msgstr "面板地址默认和绑定地址一致" - -#: luasrc/model/cbi/frps/common.lua:102 -msgid "dashboard is available only if dashboard_port is set" -msgstr "仅在设定面板绑定端口后才可使用面板功能" - -#: luasrc/model/cbi/frps/common.lua:105 -msgid "" -"dashboard user and passwd for basic auth protect, if not set, both default " -"value is admin" -msgstr "面板用户名/密码用于基本安全认证;若留空,则用户名/密码均为admin" - -#: luasrc/model/cbi/frps/common.lua:96 -msgid "" -"if subdomain_host is not empty, you can set subdomain when type is http or " -"https in frpc's configure file; when subdomain is test, the host used by " -"routing is test.frps.com" -msgstr "如果subdomain_host不为空,可以在frpc配置文件中设置类型为http(s)的subdomain;subdomain为test,路由将使用test.frps.com" - -#: luasrc/model/cbi/frps/common.lua:90 -msgid "" -"max ports can be used for each client, default value is 0 means no limit" -msgstr "每个客户端最多可映射端口数,留空则默认为0(不限制)" - -#: luasrc/model/cbi/frps/common.lua:86 -msgid "" -"pool_count in each proxy will change to max_pool_count if they exceed the " -"maximum value" -msgstr "代理连接数(pool_count)超过最大值时将变更为最大连接数(max_pool_count)" - -#: luasrc/model/cbi/frps/server.lua:35 -msgid "vhost http port" -msgstr "虚拟主机http绑定端口" - -#: luasrc/model/cbi/frps/server.lua:39 -msgid "vhost https port" -msgstr "虚拟主机https绑定端口" - -#: luasrc/model/cbi/frps/server.lua:50 -msgid "Extra Settings" -msgstr "额外设置" - -#: luasrc/model/cbi/frps/server.lua:51 -msgid "List of extra settings will be added to config file. Format: option=value, eg. detailed_errors_to_client=false.(NO SPACE!)" -msgstr "额外设置列表将会被添加到config文件中。 格式:option=value,如:detailed_errors_to_client=false.(不含空格!)" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-frps/root/etc/config/frps b/package/ctcgfw/luci-app-frps/root/etc/config/frps deleted file mode 100644 index ab15b33851..0000000000 --- a/package/ctcgfw/luci-app-frps/root/etc/config/frps +++ /dev/null @@ -1,6 +0,0 @@ -config frps 'main' - option enabled '0' - option server 'frps' - option client_file '/usr/bin/frps' - option bind_port '7000' - option tcp_mux 'true' \ No newline at end of file diff --git a/package/ctcgfw/luci-app-frps/root/etc/init.d/frps b/package/ctcgfw/luci-app-frps/root/etc/init.d/frps deleted file mode 100755 index f9876d2658..0000000000 --- a/package/ctcgfw/luci-app-frps/root/etc/init.d/frps +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright 2020 lwz322 -# Licensed to the public under the MIT License. -# - -START=99 -USE_PROCD=1 - -NAME="frps" -CONFIG_FOLDER="/var/etc/$NAME" - -_log() { - local level="$1" ; shift - local msg="$@" - logger -p "daemon.$level" -t "$NAME" "$msg" - - echo "[$level] $msg" >&2 -} - -_info() { - _log "info" $@ -} - -_err() { - _log "err" $@ -} - -append_options() { - local file="$1" ; shift - local o v - for o in "$@" ; do - v="$(eval echo "\$$o")" - if [ -n "$v" ] ; then - # add brackets when ipv6 address - if ( echo "$o" | grep -qE 'addr|ip' ) && - ( echo "$v" | grep -q ':' ) ; then - v="[$v]" - fi - - echo "${o} = $v" >>"$file" - fi - done -} - -append_setting() { - local file="$1" ; shift - local s="$1" - if [ -n "$s" ] ; then - echo "$s" >>"$file" - fi -} - -frps_scetion_validate() { - uci_validate_section "$NAME" "frps" "$1" \ - 'enabled:bool:0' \ - 'client_file:file:/usr/bin/frps' \ - 'run_user:string' \ - 'enable_logging:bool:0' \ - 'log_file:string:/var/log/frps.log' \ - 'log_level:or("trace", "debug", "info", "warn", "error"):warn' \ - 'log_max_days:uinteger:3' \ - 'disable_log_color:or("true", "false")' \ - 'max_pool_count:uinteger' \ - 'max_ports_per_client:uinteger:0' \ - 'subdomain_host:host' \ - 'dashboard_addr:host' \ - 'dashboard_port:port' \ - 'dashboard_user:string' \ - 'dashboard_pwd:string' \ - 'bind_port:port' \ - 'token:string' \ - 'tcp_mux:or("true", "false"):true' \ - 'tls_only:or("true", "false"):false' \ - 'bind_udp_port:port' \ - 'kcp_bind_port:port' \ - 'vhost_http_port:port' \ - 'vhost_https_port:port' -} - -client_file_validate() { - local file="$1" - - test -f "$file" || return 1 - test -x "$file" || chmod 755 "$file" - - eval "$file" -h | grep -q "$NAME" - return $? -} - -add_rule_extra_option() { - append_setting "$2" "$1" -} - -create_config_file() { - local config_file="$1" - local tmp_file="$(mktemp /tmp/frps-XXXXXX)" - - echo "[common]" > "$tmp_file" - - append_options "$tmp_file" \ - "bind_port" "token" "tcp_mux" "tls_only" "bind_udp_port" "kcp_bind_port" "vhost_http_port" "vhost_https_port" - - - if [ "x$enable_logging" = "x1" ] ; then - if [ -z "$log_file" ]; then - log_file="/var/log/frps.log" - fi - - append_options "$tmp_file" \ - "log_file" "log_level" "log_max_days" "disable_log_color" - - if [ -f "$log_file" ] ; then - echo > "$log_file" - else - local log_folder="$(dirname "$log_file")" - - if [ ! -d "$log_folder" ] ; then - mkdir -p "$log_folder" - fi - fi - - if [ -n "$run_user" ] && ( user_exists "$run_user" ) ; then - chmod 644 "$log_file" - chown "$run_user" "$log_file" - else - run_user="" - fi - fi - - append_options "$tmp_file" \ - "max_pool_count" "max_ports_per_client" "subdomain_host" "dashboard_addr" "dashboard_port" "dashboard_user" "dashboard_pwd" - - extra_setting=$(uci get frps.main.extra_setting 2>/dev/null) - if [ -n "$extra_setting" ] ; then - for o in $extra_setting ;do - echo "$o" >> "$tmp_file" - done - fi - - sed '/^$/d' "$tmp_file" >"$config_file" - - if [ "$?" = "0" ] ; then - rm -f "$tmp_file" - fi -} - -start_instance() { - local section="$1" - - if ! frps_scetion_validate "$section" ; then - _err "Config validate failed." - return 1 - fi - - if [ "x$enabled" != "x1" ] ; then - _info "Instance \"$section\" disabled." - return 1 - fi - - if [ -z "$client_file" ] || ( ! client_file_validate "$client_file" ) ; then - _err "Client file not valid." - return 1 - fi - - test -d "$CONFIG_FOLDER" || mkdir -p "$CONFIG_FOLDER" - - local config_file="$CONFIG_FOLDER/frps.$section.ini" - - create_config_file "$config_file" - - if [ ! -f "$config_file" ] ; then - _err "Could not create config file: \"$config_file\"" - return 1 - fi - - procd_open_instance "$NAME.$section" - procd_set_param command "$client_file" - procd_append_param command -c "$config_file" - procd_set_param respawn - procd_set_param file "$config_file" - - if [ -n "$run_user" ] ; then - procd_set_param user "$run_user" - fi - - procd_close_instance -} - -service_triggers() { - procd_add_reload_trigger "$NAME" -} - -start_service() { - config_load "$NAME" - config_foreach start_instance "frps" -} diff --git a/package/ctcgfw/luci-app-frps/root/etc/uci-defaults/40_luci-frps b/package/ctcgfw/luci-app-frps/root/etc/uci-defaults/40_luci-frps deleted file mode 100755 index 6f1b2a18b0..0000000000 --- a/package/ctcgfw/luci-app-frps/root/etc/uci-defaults/40_luci-frps +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@frps[-1] - add ucitrack frps - set ucitrack.@frps[-1].init=frps - commit ucitrack -EOF - -rm -rf /tmp/luci-indexcache /tmp/luci-modulecache -exit 0 diff --git a/package/ctcgfw/luci-app-gost/Makefile b/package/ctcgfw/luci-app-gost/Makefile deleted file mode 100644 index 2c674d816e..0000000000 --- a/package/ctcgfw/luci-app-gost/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2020 Openwrt.org -# -# This is a free software, use it under GNU General Public License v3.0. -# -# Created By ImmortalWrt -# https://github.com/project-openwrt - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-gost -PKG_VERSION:=1.0 -PKG_RELEASE:=1 -LUCI_TITLE:=LuCI support for Gost -LUCI_DEPENDS:=+gost -LUCI_PKGARCH:=all - -PKG_MAINTAINER:=ImmortalWrt - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-gost/luasrc/controller/gost.lua b/package/ctcgfw/luci-app-gost/luasrc/controller/gost.lua deleted file mode 100644 index 1105b08700..0000000000 --- a/package/ctcgfw/luci-app-gost/luasrc/controller/gost.lua +++ /dev/null @@ -1,23 +0,0 @@ --- This is a free software, use it under GNU General Public License v3.0. --- Created By ImmortalWrt --- https://github.com/immortalwrt - -module("luci.controller.gost", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/gost") then - return - end - - local page - page = entry({"admin", "services", "gost"}, cbi("gost"), _("Gost"), 100) - page.dependent = true - entry({"admin", "services", "gost", "status"},call("act_status")).leaf=true -end - -function act_status() - local e={} - e.running=luci.sys.call("pgrep gost >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-gost/luasrc/model/cbi/gost.lua b/package/ctcgfw/luci-app-gost/luasrc/model/cbi/gost.lua deleted file mode 100644 index 116bd0dc9d..0000000000 --- a/package/ctcgfw/luci-app-gost/luasrc/model/cbi/gost.lua +++ /dev/null @@ -1,20 +0,0 @@ --- Created By ImmortalWrt --- https://github.com/immortalwrt - -mp = Map("gost", translate("Gost")) -mp.description = translate("A simple security tunnel written in Golang.") - -mp:section(SimpleSection).template = "gost/gost_status" - -s = mp:section(TypedSection, "gost") -s.anonymous=true -s.addremove=false - -enable = s:option(Flag, "enable", translate("Enable")) -enable.default = 0 -enable.rmempty = false - -run_command = s:option(Value, "run_command", translate("Command")) -run_command.rmempty = false - -return mp diff --git a/package/ctcgfw/luci-app-gost/luasrc/view/gost/gost_status.htm b/package/ctcgfw/luci-app-gost/luasrc/view/gost/gost_status.htm deleted file mode 100644 index 3f279c9ef5..0000000000 --- a/package/ctcgfw/luci-app-gost/luasrc/view/gost/gost_status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/package/ctcgfw/luci-app-gost/po/zh-cn/gost.po b/package/ctcgfw/luci-app-gost/po/zh-cn/gost.po deleted file mode 100644 index 9ccabdeca5..0000000000 --- a/package/ctcgfw/luci-app-gost/po/zh-cn/gost.po +++ /dev/null @@ -1,17 +0,0 @@ -msgid "Gost" -msgstr "Gost" - -msgid "A simple security tunnel written in Golang." -msgstr "GO语言实现的安全隧道。" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Enable" -msgstr "启用" - -msgid "Command" -msgstr "命令" diff --git a/package/ctcgfw/luci-app-gost/root/etc/uci-defaults/gost b/package/ctcgfw/luci-app-gost/root/etc/uci-defaults/gost deleted file mode 100755 index e1ddf16fab..0000000000 --- a/package/ctcgfw/luci-app-gost/root/etc/uci-defaults/gost +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@gost[-1] - add ucitrack gost - set ucitrack.@gost[-1].init=gost - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-gowebdav/Makefile b/package/ctcgfw/luci-app-gowebdav/Makefile deleted file mode 100644 index 1c79b62158..0000000000 --- a/package/ctcgfw/luci-app-gowebdav/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is a free software, use it under GNU General Public License v3.0. -# -# Created By ImmortalWrt -# https://github.com/project-openwrt - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-gowebdav -PKG_VERSION:=1.0 -PKG_RELEASE:=1 - -LUCI_TITLE:=LuCI support for GoWebDav -LUCI_DEPENDS:=+gowebdav -LUCI_PKGARCH:=all - -PKG_MAINTAINER:=CN_SZTL - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-gowebdav/luasrc/controller/gowebdav.lua b/package/ctcgfw/luci-app-gowebdav/luasrc/controller/gowebdav.lua deleted file mode 100644 index 0205164aaf..0000000000 --- a/package/ctcgfw/luci-app-gowebdav/luasrc/controller/gowebdav.lua +++ /dev/null @@ -1,19 +0,0 @@ -module("luci.controller.gowebdav", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/gowebdav") then - return - end - entry({"admin", "nas"}, firstchild(), _("NAS") , 45).dependent = false - local page - page = entry({"admin", "nas", "gowebdav"}, cbi("gowebdav"), _("GoWebDav"), 100) - page.dependent = true - entry({"admin","nas","gowebdav","status"},call("act_status")).leaf=true -end - -function act_status() - local e={} - e.running=luci.sys.call("pgrep gowebdav >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-gowebdav/luasrc/model/cbi/gowebdav.lua b/package/ctcgfw/luci-app-gowebdav/luasrc/model/cbi/gowebdav.lua deleted file mode 100644 index 4a92e784ad..0000000000 --- a/package/ctcgfw/luci-app-gowebdav/luasrc/model/cbi/gowebdav.lua +++ /dev/null @@ -1,59 +0,0 @@ --- Created By ImmortalWrt --- https://github.com/immortalwrt - -m = Map("gowebdav", translate("GoWebDav"), translate("GoWebDav is a tiny, simple, fast WevDav server.")) - -m:section(SimpleSection).template = "gowebdav/gowebdav_status" - -s = m:section(TypedSection, "gowebdav") -s.addremove = false -s.anonymous = true - -enable = s:option(Flag, "enable", translate("Enable")) -enable.rmempty = false - -listen_port = s:option(Value, "listen_port", translate("Listen Port")) -listen_port.placeholder = 6086 -listen_port.default = 6086 -listen_port.datatype = "port" -listen_port.rmempty = false - -username = s:option(Value, "username", translate("Username")) -username.description = translate("Leave blank to disable auth.") -username.placeholder = user -username.default = user -username.datatype = "string" - -password = s:option(Value, "password", translate("Password")) -password.description = translate("Leave blank to disable auth.") -password.placeholder = pass -password.default = pass -password.datatype = "string" -password.password = true - -root_dir = s:option(Value, "root_dir", translate("Root Directory")) -root_dir.placeholder = "/mnt" -root_dir.default = "/mnt" -root_dir.rmempty = false - -read_only = s:option(Flag, "read_only", translate("Read-Only Mode")) -read_only.rmempty = false - -allow_wan = s:option(Flag, "allow_wan", translate("Allow Access From Internet")) -allow_wan.rmempty = false - -use_https = s:option(Flag, "use_https", translate("Use HTTPS instead of HTTP")) -use_https.rmempty = false - -cert_cer = s:option(Value, "cert_cer", translate("Path to Certificate")) -cert_cer.datatype = "file" -cert_cer:depends("use_https", 1) - -cert_key = s:option(Value, "cert_key", translate("Path to Certificate Key")) -cert_key.datatype = "file" -cert_key:depends("use_https", 1) - -download_reg = s:option(DummyValue,"opennewwindow",translate("")) -download_reg.description = translate("Windows doesn't allow HTTP auth by default, you need to import this reg key to enable it (Reboot needed).") - -return m diff --git a/package/ctcgfw/luci-app-gowebdav/luasrc/view/gowebdav/gowebdav_status.htm b/package/ctcgfw/luci-app-gowebdav/luasrc/view/gowebdav/gowebdav_status.htm deleted file mode 100644 index 4e8e50f6ec..0000000000 --- a/package/ctcgfw/luci-app-gowebdav/luasrc/view/gowebdav/gowebdav_status.htm +++ /dev/null @@ -1,27 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/package/ctcgfw/luci-app-gowebdav/po/zh-cn/gowebdav.po b/package/ctcgfw/luci-app-gowebdav/po/zh-cn/gowebdav.po deleted file mode 100644 index f5f1e08e76..0000000000 --- a/package/ctcgfw/luci-app-gowebdav/po/zh-cn/gowebdav.po +++ /dev/null @@ -1,47 +0,0 @@ -msgid "GoWebDav" -msgstr "GoWebDav" - -msgid "GoWebDav is a tiny, simple, fast WevDav server." -msgstr "GoWebDav 是一个轻巧、简单、快速的 WebDav 服务端程序。" - -msgid "Enable" -msgstr "启用" - -msgid "Listen Port" -msgstr "监听端口" - -msgid "Username" -msgstr "用户名" - -msgid "Password" -msgstr "密码" - -msgid "Leave blank to disable auth." -msgstr "留空以禁用身份验证。" - -msgid "Root Directory" -msgstr "开放目录" - -msgid "Read-Only Mode" -msgstr "只读模式" - -msgid "" -msgstr "" - -msgid "Windows doesn't allow HTTP auth by default, you need to import this reg key to enable it (Reboot needed)." -msgstr "Windows 系统默认不允许 HTTP 鉴权,您需要手动导入注册表文件以开启此功能(需重启)。" - -msgid "Allow Access From Internet" -msgstr "允许从外网访问" - -msgid "Use HTTPS instead of HTTP" -msgstr "使用 HTTPS 模式" - -msgid "Path to Certificate" -msgstr "证书位置" - -msgid "Path to Certificate Key" -msgstr "密钥位置" - -msgid "Open Web Interface" -msgstr "打开 Web 界面" diff --git a/package/ctcgfw/luci-app-gowebdav/root/etc/uci-defaults/gowebdav b/package/ctcgfw/luci-app-gowebdav/root/etc/uci-defaults/gowebdav deleted file mode 100755 index 2cb52d3e4f..0000000000 --- a/package/ctcgfw/luci-app-gowebdav/root/etc/uci-defaults/gowebdav +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@gowebdav[-1] - add ucitrack gowebdav - set ucitrack.@gowebdav[-1].init=gowebdav - commit ucitrack - delete firewall.gowebdav - set firewall.gowebdav=include - set firewall.gowebdav.type=script - set firewall.gowebdav.path=/var/etc/gowebdav.include - set firewall.gowebdav.reload=1 - commit firewall -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-https_dns_proxy/Makefile b/package/ctcgfw/luci-app-https_dns_proxy/Makefile deleted file mode 100644 index 62c6c57540..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2017-2018 Stan Grishin (stangri@melmac.net) -# This is free software, licensed under the GNU General Public License v3. - -include $(TOPDIR)/rules.mk - -PKG_LICENSE:=GPL-3.0+ -PKG_MAINTAINER:=Stan Grishin - -LUCI_TITLE:=HTTPS DNS Proxy Web UI -LUCI_DESCRIPTION:=Provides Web UI for HTTPS DNS Proxy -LUCI_DEPENDS:=+luci-mod-admin-full +https-dns-proxy -LUCI_PKGARCH:=all -PKG_RELEASE:=3 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua b/package/ctcgfw/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua deleted file mode 100644 index e1fd8fcb9b..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua +++ /dev/null @@ -1,7 +0,0 @@ -module("luci.controller.https_dns_proxy", package.seeall) -function index() - if not nixio.fs.access("/etc/config/https_dns_proxy") then - return - end - entry({"admin", "services", "https_dns_proxy"}, cbi("https_dns_proxy"), _("HTTPS DNS Proxy")) -end diff --git a/package/ctcgfw/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua b/package/ctcgfw/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua deleted file mode 100644 index 4a1cd778e4..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua +++ /dev/null @@ -1,107 +0,0 @@ -local uci = require("luci.model.uci").cursor() -function uci_del_list(conf, sect, opt, value) - local lval = uci:get(conf, sect, opt) - if lval == nil or lval == "" then - lval = {} - elseif type(lval) ~= "table" then - lval = { lval } - end - - local i - local changed = false - for i = #lval, 1 do - if lval[i] == value then - table.remove(lval, i) - changed = true - end - end - - if changed then - if #lval > 0 then - uci:set(conf, sect, opt, lval) - else - uci:delete(conf, sect, opt) - end - end -end - -function uci_add_list(conf, sect, opt, value) - local lval = uci:get(conf, sect, opt) - if lval == nil or lval == "" then - lval = {} - elseif type(lval) ~= "table" then - lval = { lval } - end - - lval[#lval+1] = value - uci:set(conf, sect, opt, lval) -end - -m = Map("https_dns_proxy", translate("HTTPS DNS Proxy Settings")) -m.template="cbi/map" - -s3 = m:section(TypedSection, "https_dns_proxy", translate("Instances")) -s3.template = "cbi/tblsection" -s3.sortable = false -s3.anonymous = true -s3.addremove = true - -local n = 0 -uci:foreach("https_dns_proxy", "https_dns_proxy", function(s) - if s[".name"] == section then - return false - end - n = n + 1 -end) - -prov = s3:option(ListValue, "url_prefix", translate("Provider")) -prov:value("https://cloudflare-dns.com/dns-query","Cloudflare") -prov:value("https://dns.google/dns-query","Google") -prov.write = function(self, section, value) - local la_val = la:formvalue(section) - local lp_val = lp:formvalue(section) - if not la_val then la_val = "127.0.0.1" end - if not lp_val then lp_val = n + 5053 end - if value and value:match("cloudflare") then - uci:set("https_dns_proxy", section, "bootstrap_dns", "1.1.1.1,1.0.0.1") - uci:set("https_dns_proxy", section, "url_prefix", "https://cloudflare-dns.com/dns-query") - else - uci:set("https_dns_proxy", section, "bootstrap_dns", "8.8.8.8,8.8.4.4") - uci:set("https_dns_proxy", section, "url_prefix", "https://dns.google/dns-query") - end - uci:set("https_dns_proxy", section, "user", "nobody") - uci:set("https_dns_proxy", section, "group", "nogroup") - uci:save("https_dns_proxy") - if n == 0 then - uci:delete("dhcp", "@dnsmasq[0]", "server") - end - uci_del_list("dhcp", "@dnsmasq[0]", "server", tostring(la_val) .. ":" .. tostring(lp_val)) - uci_add_list("dhcp", "@dnsmasq[0]", "server", tostring(la_val) .. ":" .. tostring(lp_val)) - uci:save("dhcp") -end - -la = s3:option(Value, "listen_addr", translate("Listen address")) -la.value = "127.0.0.1" -la.rmempty = true - -lp = s3:option(Value, "listen_port", translate("Listen port")) -lp.datatype = "port" -lp.value = n + 5053 -lp.write = function(self, section, value) - if not value then - uci:set("https_dns_proxy", section, "listen_port", n + 5053) - else - uci:set("https_dns_proxy", section, "listen_port", value) - end - uci:save("https_dns_proxy") -end - -sa = s3:option(Value, "subnet_addr", translate("Subnet address")) -sa.datatype = "ip4prefix" -sa.rmempty = true - -ps = s3:option(Value, "proxy_server", translate("Proxy server")) -ps.datatype = "or(ipaddr,hostname)" -ps.rmempty = true - -return m diff --git a/package/ctcgfw/luci-app-https_dns_proxy/po/es/https_dns_proxy.po b/package/ctcgfw/luci-app-https_dns_proxy/po/es/https_dns_proxy.po deleted file mode 100644 index 265367eae9..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/po/es/https_dns_proxy.po +++ /dev/null @@ -1,51 +0,0 @@ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.1\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: es\n" - -#: applications/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua:6 -msgid "HTTPS DNS Proxy" -msgstr "Proxy DNS HTTPS" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:40 -msgid "HTTPS DNS Proxy Settings" -msgstr "Configuración de proxy HTTPS DNS" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:43 -msgid "Instances" -msgstr "Instancias" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:83 -msgid "Listen address" -msgstr "Escuchar direccion" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:87 -msgid "Listen port" -msgstr "Escuchar puerto" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:57 -msgid "Provider" -msgstr "Proveedor" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:103 -msgid "Proxy server" -msgstr "Servidor proxy" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:99 -msgid "Subnet address" -msgstr "Direccion de subred" - -#~ msgid "Group name" -#~ msgstr "Nombre del grupo" - -#~ msgid "User name" -#~ msgstr "Nombre de usuario" diff --git a/package/ctcgfw/luci-app-https_dns_proxy/po/templates/https_dns_proxy.pot b/package/ctcgfw/luci-app-https_dns_proxy/po/templates/https_dns_proxy.pot deleted file mode 100644 index 8bfa1b923d..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/po/templates/https_dns_proxy.pot +++ /dev/null @@ -1,34 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: applications/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua:6 -msgid "HTTPS DNS Proxy" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:40 -msgid "HTTPS DNS Proxy Settings" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:43 -msgid "Instances" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:83 -msgid "Listen address" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:87 -msgid "Listen port" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:57 -msgid "Provider" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:103 -msgid "Proxy server" -msgstr "" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:99 -msgid "Subnet address" -msgstr "" diff --git a/package/ctcgfw/luci-app-https_dns_proxy/po/zh-cn/https_dns_proxy.po b/package/ctcgfw/luci-app-https_dns_proxy/po/zh-cn/https_dns_proxy.po deleted file mode 100644 index 565c950202..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/po/zh-cn/https_dns_proxy.po +++ /dev/null @@ -1,54 +0,0 @@ -# -# Yangfl , 2019. -# -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2019-01-03 22:46+0800\n" -"Last-Translator: Yangfl \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"X-Generator: Gtranslator 3.30.1\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: applications/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua:6 -msgid "HTTPS DNS Proxy" -msgstr "HTTPS DNS 代理" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:40 -msgid "HTTPS DNS Proxy Settings" -msgstr "HTTPS DNS 代理设置" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:43 -msgid "Instances" -msgstr "实例" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:83 -msgid "Listen address" -msgstr "监听地址" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:87 -msgid "Listen port" -msgstr "监听端口" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:57 -msgid "Provider" -msgstr "提供商" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:103 -msgid "Proxy server" -msgstr "代理服务器" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:99 -msgid "Subnet address" -msgstr "子网地址" - -#~ msgid "Group name" -#~ msgstr "组名称" - -#~ msgid "User name" -#~ msgstr "用户名" diff --git a/package/ctcgfw/luci-app-https_dns_proxy/po/zh-tw/https_dns_proxy.po b/package/ctcgfw/luci-app-https_dns_proxy/po/zh-tw/https_dns_proxy.po deleted file mode 100644 index ad4c56fa31..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/po/zh-tw/https_dns_proxy.po +++ /dev/null @@ -1,54 +0,0 @@ -# -# Yangfl , 2019. -# -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2019-01-03 22:46+0800\n" -"Last-Translator: Yangfl \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_TW\n" -"X-Generator: Gtranslator 3.30.1\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: applications/luci-app-https_dns_proxy/luasrc/controller/https_dns_proxy.lua:6 -msgid "HTTPS DNS Proxy" -msgstr "HTTPS DNS 代理" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:40 -msgid "HTTPS DNS Proxy Settings" -msgstr "HTTPS DNS 代理設定" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:43 -msgid "Instances" -msgstr "例項" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:83 -msgid "Listen address" -msgstr "監聽位址" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:87 -msgid "Listen port" -msgstr "監聽埠" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:57 -msgid "Provider" -msgstr "提供商" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:103 -msgid "Proxy server" -msgstr "代理伺服器" - -#: applications/luci-app-https_dns_proxy/luasrc/model/cbi/https_dns_proxy.lua:99 -msgid "Subnet address" -msgstr "子網位址" - -#~ msgid "Group name" -#~ msgstr "組名稱" - -#~ msgid "User name" -#~ msgstr "使用者名稱" diff --git a/package/ctcgfw/luci-app-https_dns_proxy/root/etc/config/https_dns_proxy b/package/ctcgfw/luci-app-https_dns_proxy/root/etc/config/https_dns_proxy deleted file mode 100644 index 02b562425e..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/root/etc/config/https_dns_proxy +++ /dev/null @@ -1,19 +0,0 @@ -config https_dns_proxy - option listen_addr '127.0.0.1' - option listen_port '5053' - option bootstrap_dns '8.8.8.8,8.8.4.4' - option url_prefix 'https://dns.google/dns-query' - option user 'nobody' - option group 'nogroup' - option subnet_addr '' - option proxy_server '' - -config https_dns_proxy - option listen_addr '127.0.0.1' - option listen_port '5054' - option bootstrap_dns '1.1.1.1,1.0.0.1' - option url_prefix 'https://cloudflare-dns.com/dns-query' - option user 'nobody' - option group 'nogroup' - option subnet_addr '' - option proxy_server '' diff --git a/package/ctcgfw/luci-app-https_dns_proxy/root/etc/init.d/https_dns_proxy b/package/ctcgfw/luci-app-https_dns_proxy/root/etc/init.d/https_dns_proxy deleted file mode 100755 index 645c17aa46..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/root/etc/init.d/https_dns_proxy +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=80 -USE_PROCD=1 - -PROG=/usr/sbin/https_dns_proxy - -xappend() { param="$param $1"; } - -append_parm() { - local section="$1" - local option="$2" - local switch="$3" - local default="$4" - local _loctmp - config_get _loctmp "$section" "$option" "$default" - [ -z "$_loctmp" ] && return 0 - xappend "$switch $_loctmp" -} - -start_instance() { - local cfg="$1" param - - append_parm "$cfg" 'listen_addr' '-a' '127.0.0.1' - append_parm "$cfg" 'listen_port' '-p' '5053' - append_parm "$cfg" 'bootstrap_dns' '-b' - append_parm "$cfg" 'url_prefix' '-r' - append_parm "$cfg" 'user' '-u' 'nobody' - append_parm "$cfg" 'group' '-g' 'nogroup' - append_parm "$cfg" 'subnet_addr' '-e' - append_parm "$cfg" 'proxy_server' '-t' - - procd_open_instance - procd_set_param command ${PROG} ${param} - procd_set_param respawn - procd_close_instance -} - -service_triggers() { - procd_add_reload_trigger "https_dns_proxy" -} - -start_service() { - config_load 'https_dns_proxy' - config_foreach start_instance 'https_dns_proxy' -} diff --git a/package/ctcgfw/luci-app-https_dns_proxy/root/etc/uci-defaults/40_luci-https_dns_proxy b/package/ctcgfw/luci-app-https_dns_proxy/root/etc/uci-defaults/40_luci-https_dns_proxy deleted file mode 100755 index 7800af701e..0000000000 --- a/package/ctcgfw/luci-app-https_dns_proxy/root/etc/uci-defaults/40_luci-https_dns_proxy +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -uci -q batch <<-EOF >/dev/null - delete ucitrack.@https_dns_proxy[-1] - add ucitrack https_dns_proxy - set ucitrack.@template[-1].init=https_dns_proxy - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-iptvhelper/Makefile b/package/ctcgfw/luci-app-iptvhelper/Makefile deleted file mode 100644 index 17ccaf2a55..0000000000 --- a/package/ctcgfw/luci-app-iptvhelper/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2019 Shun Li -# Licensed to the public under the GNU General Public License v3. - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-iptvhelper -PKG_VERSION:=0.1.1 -PKG_RELEASE:=1 - -PKG_MAINTAINER:=Shun Li -PKG_LICENSE:=GPL-3.0 - -LUCI_TITLE:=LuCI support for iptvhelper -LUCI_DEPENDS:=+luci-compat +iptvhelper -LUCI_PKGARCH:=all - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature \ No newline at end of file diff --git a/package/ctcgfw/luci-app-iptvhelper/luasrc/controller/iptvhelper.lua b/package/ctcgfw/luci-app-iptvhelper/luasrc/controller/iptvhelper.lua deleted file mode 100644 index 8290207e41..0000000000 --- a/package/ctcgfw/luci-app-iptvhelper/luasrc/controller/iptvhelper.lua +++ /dev/null @@ -1,14 +0,0 @@ --- Copyright 2019 Shun Li --- Licensed to the public under the GNU General Public License v3. - -module("luci.controller.iptvhelper", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/iptvhelper") then - return - end - - local page = entry({"admin", "services", "iptvhelper"}, cbi("iptvhelper"), _("IPTV Helper")) - page.dependent = true - -end \ No newline at end of file diff --git a/package/ctcgfw/luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua b/package/ctcgfw/luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua deleted file mode 100644 index e4a106b05a..0000000000 --- a/package/ctcgfw/luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua +++ /dev/null @@ -1,34 +0,0 @@ --- Copyright 2019 Shun Li --- Licensed to the public under the GNU General Public License v3. - -local sys = require "luci.sys" - -m = Map("iptvhelper", translate("IPTV Helper"), translate("Help you configure IPTV easily. Github")) - -s = m:section(TypedSection, "tvbox", translate("IPTV topbox parameters")) -s.addremove = true -s.anonymous = false - -enable=s:option(Flag, "disabled", translate("Enabled")) -enable.enabled = "0" -enable.disabled = "1" -enable.default = "1" -enable.rmempty = false -respawn=s:option(Flag, "respawn", translate("Respawn")) -respawn.default = false -ipset=s:option(Flag, "ipset", translate("Create ipset"), - translate("You can use it in mwan3.")) -ipset.default = true -dns_redir=s:option(Flag, "dns_redir", translate("Redirect topbox's DNS"), - translate("You may need it to jailbreak your topbox.")) -dns_redir.default = false - -host = s:option(Value, "mac", translate("Topbox MAC Address"), - translate("It is usually on the bottom side of topbox.")) -host.rmempty = false -host.datatype = "macaddr" -sys.net.mac_hints(function(mac, name) - host:value(mac, "%s (%s)" %{ mac, name }) -end) - -return m \ No newline at end of file diff --git a/package/ctcgfw/luci-app-iptvhelper/po/templates/iptvhelper.pot b/package/ctcgfw/luci-app-iptvhelper/po/templates/iptvhelper.pot deleted file mode 100644 index 808b51ba8b..0000000000 --- a/package/ctcgfw/luci-app-iptvhelper/po/templates/iptvhelper.pot +++ /dev/null @@ -1,49 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:19 -msgid "Create ipset" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:12 -msgid "Enabled" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:6 -msgid "" -"Help you configure IPTV easily. Github" -msgstr "" - -#: luci-app-iptvhelper/luasrc/controller/iptvhelper.lua:11 -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:6 -msgid "IPTV Helper" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:8 -msgid "IPTV topbox parameters" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:27 -msgid "It is usually on the bottom side of topbox." -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:22 -msgid "Redirect topbox's DNS" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:17 -msgid "Respawn" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:26 -msgid "Topbox MAC Address" -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:20 -msgid "You can use it in mwan3." -msgstr "" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:23 -msgid "You may need it to jailbreak your topbox." -msgstr "" diff --git a/package/ctcgfw/luci-app-iptvhelper/po/zh-cn/iptvhelper.po b/package/ctcgfw/luci-app-iptvhelper/po/zh-cn/iptvhelper.po deleted file mode 100644 index 04f74b8fe4..0000000000 --- a/package/ctcgfw/luci-app-iptvhelper/po/zh-cn/iptvhelper.po +++ /dev/null @@ -1,50 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:19 -msgid "Create ipset" -msgstr "创建 ipset" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:12 -msgid "Enabled" -msgstr "启用" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:6 -msgid "" -"Help you configure IPTV easily. Github" -msgstr "帮助你轻松配置IPTV。Github" - -#: luci-app-iptvhelper/luasrc/controller/iptvhelper.lua:11 -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:6 -msgid "IPTV Helper" -msgstr "IPTV 帮手" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:8 -msgid "IPTV topbox parameters" -msgstr "IPTV 机顶盒参数" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:27 -msgid "It is usually on the bottom side of topbox." -msgstr "它通常贴在机顶盒的底部" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:22 -msgid "Redirect topbox's DNS" -msgstr "重定向机顶盒的DNS" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:17 -msgid "Respawn" -msgstr "进程守护" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:26 -msgid "Topbox MAC Address" -msgstr "机顶盒MAC地址" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:20 -msgid "You can use it in mwan3." -msgstr "你可以在mwan3中使用它" - -#: luci-app-iptvhelper/luasrc/model/cbi/iptvhelper.lua:23 -msgid "You may need it to jailbreak your topbox." -msgstr "想要破解机顶盒可能会用到它" diff --git a/package/ctcgfw/luci-app-iptvhelper/root/etc/uci-defaults/40_iptvhelper b/package/ctcgfw/luci-app-iptvhelper/root/etc/uci-defaults/40_iptvhelper deleted file mode 100755 index 8ee6587be0..0000000000 --- a/package/ctcgfw/luci-app-iptvhelper/root/etc/uci-defaults/40_iptvhelper +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -# needed for "Save and Apply" to restart iptvhelper -uci -q batch <<-EOF >/dev/null - delete ucitrack.@iptvhelper[-1] - add ucitrack iptvhelper - set ucitrack.@iptvhelper[-1].init="iptvhelper" - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 \ No newline at end of file diff --git a/package/ctcgfw/luci-app-jd-dailybonus/Makefile b/package/ctcgfw/luci-app-jd-dailybonus/Makefile deleted file mode 100644 index 892065f7dd..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright (C) 2006-2017 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=Luci for JD dailybonus Script -LUCI_DEPENDS:=+curl +libuci-lua +lua +node +node-request +wget-ssl -LUCI_PKGARCH:=all - -PKG_NAME:=luci-app-jd-dailybonus -PKG_VERSION:=1.0.5 -PKG_RELEASE:=20210316 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua deleted file mode 100644 index c8635a5a15..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/controller/jd-dailybonus.lua +++ /dev/null @@ -1,123 +0,0 @@ --- Copyright (C) 2020 jerrykuku --- Licensed to the public under the GNU General Public License v3. -module('luci.controller.jd-dailybonus', package.seeall) -function index() - if not nixio.fs.access('/etc/config/jd-dailybonus') then - return - end - - entry({'admin', 'services', 'jd-dailybonus'}, alias('admin', 'services', 'jd-dailybonus', 'client'), _('京东签到服务'), 10).dependent = true -- 首页 - entry({'admin', 'services', 'jd-dailybonus', 'client'}, cbi('jd-dailybonus/client', {hidesavebtn = true, hideresetbtn = true}), _('客户端'), 10).leaf = true -- 基本设置 - entry({'admin', 'services', 'jd-dailybonus', 'log'}, form('jd-dailybonus/log'), _('日志'), 30).leaf = true -- 日志页面 - entry({'admin', 'services', 'jd-dailybonus', 'script'}, form('jd-dailybonus/script'), _('脚本查看'), 20).leaf = true -- 直接配置脚本 - entry({'admin', 'services', 'jd-dailybonus', 'run'}, call('run')) -- 执行程序 - entry({'admin', 'services', 'jd-dailybonus', 'update'}, call('update')) -- 执行更新 - entry({'admin', 'services', 'jd-dailybonus', 'check_update'}, call('check_update')) -- 检查更新 - entry({'admin', 'services', 'jd-dailybonus', 'qrcode'}, call('qrcode')) -- 获取二维码 - entry({'admin', 'services', 'jd-dailybonus', 'check_login'}, call('check_login')) -- 获取二维码 - entry({'admin', 'services', 'jd-dailybonus', 'realtime_log'}, call('get_log')) -- 获取实时日志 -end - --- 执行程序 -function run() - local running = luci.sys.call("busybox ps -w | grep JD_DailyBonus.js | grep -v grep >/dev/null") == 0 - if not running then - luci.sys.call('sh /usr/share/jd-dailybonus/newapp.sh -r') - end - luci.http.write('') -end - ---检查更新 -function check_update() - local jd = 'jd-dailybonus' - local e = {} - local new_version = luci.sys.exec('sh /usr/share/jd-dailybonus/newapp.sh -n') - e.new_version = new_version - e.error = 0 - luci.http.prepare_content('application/json') - luci.http.write_json(e) -end - ---执行更新 -function update() - local jd = 'jd-dailybonus' - local e = {} - local uci = luci.model.uci.cursor() - local version = luci.http.formvalue('version') - --下载脚本 - local code = luci.sys.exec('sh /usr/share/jd-dailybonus/newapp.sh -u') - e.error = code - luci.http.prepare_content('application/json') - luci.http.write_json(e) -end - -local User_Agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36' -local Host='Host: plogin.m.jd.com' -local Accept='Accept: application/json, text/plain, */*' -local Accept_Language='Accept-Language: zh-cn' -local cookie='/tmp/jd_cookie' - -function get_timestamp() - return os.time()*1000 -end - -function get_s_token() - luci.sys.exec('rm -f ' .. cookie) - local timestamp = get_timestamp() - local url = - 'https://plogin.m.jd.com/cgi-bin/mm/new_login_entrance?lang=chs&appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=' .. - timestamp .. '&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport' - local referer = - 'https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=' .. - timestamp .. '&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport' - local s_token = luci.sys.exec("echo -n $(wget-ssl --header='"..Accept.."' --header='"..Accept_Language.."' --header='"..Host.."' --referer='"..referer.."' --user-agent='"..User_Agent.."' --save-cookies="..cookie.." --keep-session-cookies -q -O - '"..url.."' | sed s/[[:space:]]//g | grep -oE '\"s_token\":\"(.+?)\"' | awk -F \\\" '{print $4}')") - return s_token -end - ---获取二维码 -function qrcode() - local timestamp = get_timestamp() - local s_token = get_s_token() - local url = 'https://plogin.m.jd.com/cgi-bin/m/tmauthreflogurl?s_token='..s_token..'&v='..timestamp..'&remember=true' - local referer = 'https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wq.jd.com/passport/LoginRedirect?state=' .. timestamp .. '&returnurl=https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action&source=wq_passport' - local response = luci.sys.exec("echo -n $(wget-ssl --header='"..Accept.."' --header='"..Accept_Language.."' --header='"..Host.."' --referer='"..referer.."' --user-agent='"..User_Agent.."' --load-cookies="..cookie.." --save-cookies="..cookie.." --keep-session-cookies -q -O - '"..url.."')") - local token = luci.sys.exec("echo -n $(echo \'"..response.."\' | grep -oE '\"token\":\"(.+?)\"' | awk -F \\\" '{print $4}')") - local ou_state = luci.sys.exec("echo -n $(echo \'"..response.."\' | grep -oE '\"ou_state\":(\\d+)' | awk -F : '{print $2}')") - local okl_token = luci.sys.exec("echo -n $(cat "..cookie.." | grep okl_token | awk '{print $7}')") - local return_json = { - qrcode_url = 'https://plogin.m.jd.com/cgi-bin/m/tmauth?appid=300&client_type=m&token=' .. token, - check_url = 'https://plogin.m.jd.com/cgi-bin/m/tmauthchecktoken?&token=' .. token .. '&ou_state=' .. ou_state .. '&okl_token=' .. okl_token, - } - luci.http.prepare_content('application/json') - luci.http.write_json(return_json) -end - ---检测登录 -function check_login() - local uci = luci.model.uci.cursor() - local data = luci.http.formvalue() - local post_data = 'lang=chs&appid=300&source=wq_passport&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=1100399130787&returnurl=//home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&/myJd/home.action' - local referer='https://plogin.m.jd.com/login/login?appid=300&returnurl=https://wqlogin2.jd.com/passport/LoginRedirect?state=' - local response = luci.sys.exec("echo -n $(wget-ssl --post-data='"..post_data.."' --header='"..Accept.."' --header='"..Accept_Language.."' --header='"..Host.."' --referer='"..referer.."' --user-agent='"..User_Agent.."' --load-cookies="..cookie.." --save-cookies="..cookie.." --keep-session-cookies -q -O - '"..data.check_url.."')") - local return_json = { - error = tonumber(luci.sys.exec("echo -n $(echo \'"..response.."\' | grep -oE '\"errcode\":(\\d+)' | awk -F : '{print $2}')")), - msg = luci.sys.exec("echo -n $(echo \'"..response.."\' | grep -oE '\"message\":\"(.+?)\"' | awk -F \\\" '{print $4}')"), - } - if return_json.error == 0 then - local pt_key = luci.sys.exec("echo -n $(cat "..cookie.." | grep pt_key | awk '{print $7}')") - local pt_pin = luci.sys.exec("echo -n $(cat "..cookie.." | grep pt_pin | awk '{print $7}')") - return_json.cookie = 'pt_key=' .. pt_key .. ';pt_pin=' .. pt_pin .. ';' - end - - luci.http.prepare_content('application/json') - luci.http.write_json(return_json) -end - -function get_log() - local fs = require "nixio.fs" - local e = {} - e.running = luci.sys.call("busybox ps -w | grep JD_DailyBonus.js | grep -v grep >/dev/null") == 0 - e.log = fs.readfile("/var/log/jd_dailybonus.log") or "" - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua deleted file mode 100644 index a4b20f0edb..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/client.lua +++ /dev/null @@ -1,106 +0,0 @@ -local jd = 'jd-dailybonus' -local uci = luci.model.uci.cursor() -local sys = require 'luci.sys' - -m = Map(jd) --- [[ 基本设置 ]]-- - -s = m:section(TypedSection, 'global', translate('基本设置')) -s.anonymous = true - -o = s:option(DynamicList, "Cookies", translate("账号 Cookie 列表")) -o.rmempty = false -o.description = translate('双击输入框或点击添加图标即可调出二维码,扫码后自动填入。') - -o = s:option(DummyValue, '', '') -o.rawhtml = true -o.template = 'jd-dailybonus/cookie_tools' - -o = s:option(Value, 'stop', translate('延迟签到')) -o.rmempty = false -o.default = 0 -o.datatype = integer -o.description = translate('自定义延迟签到,单位毫秒. 默认分批并发无延迟. (延迟作用于每个签到接口, 如填入延迟则切换顺序签到. ) ') - -o = s:option(Value, 'out', translate('接口超时')) -o.rmempty = false -o.default = 0 -o.datatype = integer -o.description = translate('接口超时退出,单位毫秒 用于可能发生的网络不稳定, 0则关闭.') - --- server chan -o = s:option(ListValue, 'serverurl', translate('Server酱的推送接口地址')) -o:value('scu', translate('SCU')) -o:value('sct', translate('SCT')) -o.default = 'scu' -o.rmempty = false -o.description = translate('选择Server酱的推送接口') - -o = s:option(Value, 'serverchan', translate('Server酱 SCKEY')) -o.rmempty = true -o.description = translate('微信推送,基于Server酱服务,请自行登录 http://sc.ftqq.com/ 绑定并获取 SCKEY。') - --- Dingding - -o = s:option(Value, 'dd_token', translate('Dingding Bot Token')) -o.rmempty = true -o.description = translate('创建一个群机器人并获取API Token,设置安全关键字为:京东') - --- telegram - -o = s:option(Value, 'tg_token', translate('Telegram Bot Token')) -o.rmempty = true -o.description = translate('首先在Telegram上搜索BotFather机器人,创建一个属于自己的通知机器人,并获取Token。') - -o = s:option(Value, 'tg_userid', translate('Telegram UserID')) -o.rmempty = true -o.description = translate('在Telegram上搜索getuserIDbot机器人,获取UserID。') - ---Auto Run Script Service - -o = s:option(Flag, 'auto_run', translate('自动签到')) -o.rmempty = false - -o = s:option(ListValue, 'auto_run_time_h', translate('每天签到时间(小时)')) -for t = 0, 23 do - o:value(t, t) -end -o.default = 1 -o.rmempty = true -o:depends('auto_run', '1') -o = s:option(ListValue, 'auto_run_time_m', translate('每天签到时间(分钟)')) -for t = 0, 59 do - o:value(t, t) -end -o.default = 1 -o.rmempty = true -o:depends('auto_run', '1') - --- Auto Update Script Service - -o = s:option(Flag, 'auto_update', translate('自动更新')) -o.rmempty = false - -o = s:option(ListValue, 'auto_update_time', translate('每天更新时间')) -for t = 0, 23 do - o:value(t, t .. ':01') -end -o.default = 1 -o.rmempty = true -o:depends('auto_update', '1') - -o = s:option(Value, 'remote_url', translate('更新源地址')) -o:value('https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js', translate('GitHub')) -o:value('https://raw.sevencdn.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js', translate('GitHub CDN 01')) -o:value('https://cdn.jsdelivr.net/gh/NobyDa/Script/JD-DailyBonus/JD_DailyBonus.js', translate('GitHub CDN 02')) -o:value('https://ghproxy.com/https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js', translate('韩国首尔')) -o.default = 'nil' -o.rmempty = false -o.description = translate('当GitHub源无法更新时,可以选择使用国内Gitee源,GitHub CDN可能比原地址更晚更新,但速度快') - -o = s:option(DummyValue, '', '') -o.rawhtml = true -o.version = sys.exec('uci get jd-dailybonus.@global[0].version') -o.template = 'jd-dailybonus/update_service' - -return m diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/log.lua b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/log.lua deleted file mode 100644 index c492942e46..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/log.lua +++ /dev/null @@ -1,9 +0,0 @@ -log = SimpleForm("logview") -log.submit = false -log.reset = false - -t = log:field(DummyValue, '', '') -t.rawhtml = true -t.template = 'jd-dailybonus/log' - -return log \ No newline at end of file diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/script.lua b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/script.lua deleted file mode 100644 index 50162cc5ec..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/model/cbi/jd-dailybonus/script.lua +++ /dev/null @@ -1,22 +0,0 @@ -local fs = require "nixio.fs" - -s = SimpleForm("scriptview") - -view_cfg = s:field(TextValue, "conf") -view_cfg.rmempty = false -view_cfg.rows = 43 - -function sync_value_to_file(value, file) - value = value:gsub("\r\n?", "\n") - local old_value = fs.readfile(file) - if value ~= old_value then fs.writefile(file, value) end -end - -function view_cfg.cfgvalue() - return fs.readfile("/usr/share/jd-dailybonus/JD_DailyBonus.js") or "" -end -function view_cfg.write(self, section, value) - sync_value_to_file(value, "/usr/share/jd-dailybonus/JD_DailyBonus.js") -end - -return s diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm deleted file mode 100644 index fe185edd2a..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/cookie_tools.htm +++ /dev/null @@ -1,165 +0,0 @@ -<%+cbi/valueheader%> - - - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/log.htm b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/log.htm deleted file mode 100644 index 5b142c1d07..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/log.htm +++ /dev/null @@ -1,17 +0,0 @@ -<%+cbi/valueheader%> - - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm b/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm deleted file mode 100644 index 70e7ef6727..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/luasrc/view/jd-dailybonus/update_service.htm +++ /dev/null @@ -1,62 +0,0 @@ -<%+cbi/valueheader%> - -
- -
- - -
- -
- - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus b/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus deleted file mode 100644 index 4635253f6b..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/config/jd-dailybonus +++ /dev/null @@ -1,14 +0,0 @@ -config global - option version '1.96' - option out '0' - option stop '100' - option serverchan '' - option remote_url 'https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js' - option serverurl 'scu' - option auto_update '1' - option auto_update_time '23' - option auto_run '1' - option auto_run_time '0' - option auto_run_time_m '1' - option auto_run_time_h '1' - list Cookies '双击扫码添加 Cookie 数据' diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/init.d/jd-dailybonus b/package/ctcgfw/luci-app-jd-dailybonus/root/etc/init.d/jd-dailybonus deleted file mode 100755 index 46af8dcbcf..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/init.d/jd-dailybonus +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright (C) 2020 Jerryk -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -USE_PROCD=1 -START=25 - -NAME=jd-dailybonus -CRON_FILE=/etc/crontabs/root - - -del_cron() { - sed -i '/jd-dailybonus/d' $CRON_FILE - /etc/init.d/cron restart -} - -start_service(){ - sh /usr/share/jd-dailybonus/newapp.sh -s -} - -stop_service() { - del_cron -} - -service_triggers() { - procd_add_reload_trigger "jd-dailybonus" -} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/uci-defaults/luci-jd-dailybonus b/package/ctcgfw/luci-app-jd-dailybonus/root/etc/uci-defaults/luci-jd-dailybonus deleted file mode 100755 index faf357268f..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/etc/uci-defaults/luci-jd-dailybonus +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@jd-dailybonus[-1] - add ucitrack jd-dailybonus - set ucitrack.@jd-dailybonus[-1].init=jd-dailybonus - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/lib/upgrade/keep.d/jd-dailybonus b/package/ctcgfw/luci-app-jd-dailybonus/root/lib/upgrade/keep.d/jd-dailybonus deleted file mode 100644 index b180f45bef..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/lib/upgrade/keep.d/jd-dailybonus +++ /dev/null @@ -1,2 +0,0 @@ -/usr/share/jd-dailybonus/CookieSet.json -/usr/share/jd-dailybonus/JD_DailyBonus.js diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js deleted file mode 100644 index eebf818b36..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/JD_DailyBonus.js +++ /dev/null @@ -1,2413 +0,0 @@ -/************************* - -京东多合一签到脚本 - -更新时间: 2021.02.28 18:30 v1.96 -有效接口: 35+ -脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js -电报频道: @NobyDa -问题反馈: @NobyDa_bot -如果转载: 请注明出处 - -************************* -【 JSbox, Node.js 说明 】 : -************************* - -开启抓包app后, Safari浏览器登录 https://bean.m.jd.com/bean/signIndex.action 点击签到并且出现签到日历后, 返回抓包app搜索关键字 functionId=signBean 复制请求头Cookie填入以下Key处的单引号内即可 */ - -var Key = ''; //单引号内自行填写您抓取的Cookie - -var DualKey = ''; //如需双账号签到,此处单引号内填写抓取的"账号2"Cookie, 否则请勿填写 - -var OtherKey = ''; //第三账号或以上的Cookie json串数据, 以下样例为第三第四账号:var OtherKey = '[{"cookie":"pt_key=xxxxxx;pt_pin=yyyyyy"},{"cookie":"pt_key=xxxxxx;pt_pin=yyyyyy"}]' - -/* 注1: 以上选项仅针对于JsBox或Node.js, 如果使用QX,Surge,Loon, 请使用脚本获取Cookie. - 注2: 双账号用户抓取"账号1"Cookie后, 请勿点击退出账号(可能会导致Cookie失效), 需清除浏览器资料或更换浏览器登录"账号2"抓取. - 注3: 如果复制的Cookie开头为"Cookie: "请把它删除后填入. - 注4: 如果使用QX,Surge,Loon并获取Cookie后, 再重复填写以上选项, 则签到优先读取以上Cookie. - 注5: 如果使用Node.js, 需自行安装'request'模块. 例: npm install request -g - 注6: Node.js或JSbox环境下已配置数据持久化, 填写Cookie运行一次后, 后续更新脚本无需再次填写, 待Cookie失效后重新抓取填写即可. - -************************* -【 QX, Surge, Loon 说明 】 : -************************* - -初次使用时, app配置文件添加脚本配置,并启用Mitm后, Safari浏览器打开登录 https://bean.m.jd.com/bean/signIndex.action ,点击签到并且出现签到日历后, 如果通知获得cookie成功, 则可以使用此签到脚本。 注: 请勿在京东APP内获取!!! - -由于cookie的有效性(经测试网页Cookie有效周期最长31天),如果脚本后续弹出cookie无效的通知,则需要重复上述步骤。 -签到脚本将在每天的凌晨0:05执行, 您可以修改执行时间。 因部分接口京豆限量领取, 建议调整为凌晨签到。 - -BoxJs或QX Gallery订阅地址: https://raw.githubusercontent.com/NobyDa/Script/master/NobyDa_BoxJs.json - -************************* -【 配置多京东账号签到说明 】 : -************************* - -正确配置QX、Surge、Loon后, 并使用此脚本获取"账号1"Cookie成功后, 请勿点击退出账号(可能会导致Cookie失效), 需清除浏览器资料或更换浏览器登录"账号2"获取即可; 账号3或以上同理. -注: 如需清除所有Cookie, 您可开启脚本内"DeleteCookie"选项 (第96行) - -************************* -【Surge 4.2+ 脚本配置】: -************************* - -[Script] -京东多合一签到 = type=cron,cronexp=5 0 * * *,wake-system=1,timeout=60,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js - -获取京东Cookie = type=http-request,pattern=https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js - -[MITM] -hostname = api.m.jd.com - -************************* -【Loon 2.1+ 脚本配置】: -************************* - -[Script] -cron "5 0 * * *" tag=京东多合一签到, script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js - -http-request https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean tag=获取京东Cookie, script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js - -[MITM] -hostname = api.m.jd.com - -************************* -【 QX 1.0.10+ 脚本配置 】 : -************************* - -[task_local] -# 京东多合一签到 -# 注意此为远程路径, 低版本用户请自行调整为本地路径. -5 0 * * * https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js, tag=京东多合一签到, img-url=https://raw.githubusercontent.com/NobyDa/mini/master/Color/jd.png,enabled=true - -[rewrite_local] -# 获取京东Cookie. -# 注意此为远程路径, 低版本用户请自行调整为本地路径. -https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean url script-request-header https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js - -[mitm] -hostname = api.m.jd.com - -*************************/ - -var LogDetails = false; //是否开启响应日志, true则开启 - -var stop = '0'; //自定义延迟签到, 单位毫秒. 默认分批并发无延迟; 该参数接受随机或指定延迟(例: '2000'则表示延迟2秒; '2000-5000'则表示延迟最小2秒,最大5秒内的随机延迟), 如填入延迟则切换顺序签到(耗时较长), Surge用户请注意在SurgeUI界面调整脚本超时; 注: 该参数Node.js或JSbox环境下已配置数据持久化, 留空(var stop = '')即可清除. - -var DeleteCookie = false; //是否清除所有Cookie, true则开启. - -var boxdis = true; //是否开启自动禁用, false则关闭. 脚本运行崩溃时(如VPN断连), 下次运行时将自动禁用相关崩溃接口(仅部分接口启用), 崩溃时可能会误禁用正常接口. (该选项仅适用于QX,Surge,Loon) - -var ReDis = false; //是否移除所有禁用列表, true则开启. 适用于触发自动禁用后, 需要再次启用接口的情况. (该选项仅适用于QX,Surge,Loon) - -var out = 0; //接口超时退出, 用于可能发生的网络不稳定, 0则关闭. 如QX日志出现大量"JS Context timeout"后脚本中断时, 建议填写6000 - -var $nobyda = nobyda(); - -async function all() { - merge = {}; - switch (stop) { - case 0: - await Promise.all([ - JingDongBean(stop), //京东京豆 - JingDongStore(stop), //京东超市 - JingRongSteel(stop), //金融钢镚 - JingDongTurn(stop), //京东转盘 - JDFlashSale(stop), //京东闪购 - JingDongCash(stop), //京东现金红包 - JDMagicCube(stop, 2), //京东小魔方 - JingDongSubsidy(stop), //京东金贴 - JingDongGetCash(stop), //京东领现金 - JingDongShake(stop), //京东摇一摇 - JDSecKilling(stop), //京东秒杀 - JRLuckyLottery(stop), //金融抽奖顶部签到 - JingDongBuyCar(stop, '31dd4ebdcad341b79e36cb7c29095de9'), //京东汽车 - JingRongDoll(stop, 'JRDoll', '京东金融-签壹', '4D25A6F482'), - JingRongDoll(stop, 'JRTwoDoll', '京东金融-签贰', '3A3E839252'), - JingRongDoll(stop, 'JRThreeDoll', '京东金融-签叁', '69F5EC743C'), - JingRongDoll(stop, 'JRFourDoll', '京东金融-签肆', '30C4F86264'), - JingRongDoll(stop, 'JRFiveDoll', '京东金融-签伍', '1D06AA3B0F') - ]); - await Promise.all([ - JDUserSignPre(stop, 'JDCustomized', '京东商城-定制', 'RPordkuhnM4MzR24fLWgc8YRbXJ'), //京东定制 - JDUserSignPre(stop, 'JDShoes', '京东商城-鞋靴', '4RXyb1W4Y986LJW8ToqMK14BdTD'), //京东鞋靴 - JDUserSignPre(stop, 'JDCalendar', '京东日历-翻牌', '36V2Qw59VPNsuLxY84vCFtxFzrFs'), //京东日历翻牌 - JDUserSignPre(stop, 'JDChild', '京东商城-童装', '3Af6mZNcf5m795T8dtDVfDwWVNhJ'), //京东童装馆 - JDUserSignPre(stop, 'JDBaby', '京东商城-母婴', '3BbAVGQPDd6vTyHYjmAutXrKAos6'), //京东母婴馆 - JDUserSignPre(stop, 'JD3C', '京东商城-数码', '4SWjnZSCTHPYjE5T7j35rxxuMTb6'), //京东数码电器馆 - JDUserSignPre(stop, 'JDWomen', '京东商城-女装', 'DpSh7ma8JV7QAxSE2gJNro8Q2h9'), //京东女装馆 - JDUserSignPre(stop, 'JDBook', '京东商城-图书', '3SC6rw5iBg66qrXPGmZMqFDwcyXi'), //京东图书 - JingRongDoll(stop, 'JTDouble', '京东金贴-双签', '1DF13833F7'), //京东金融 金贴双签 - JingRongDoll(stop, 'XJDouble', '金融现金-双签', 'F68B2C3E71', '', '', '', 'xianjin') //京东金融 现金双签 - ]); - await Promise.all([ - JDUserSignPre(stop, 'JDClothing', '京东商城-服饰', '4RBT3H9jmgYg1k2kBnHF8NAHm7m8'), //京东服饰 - JDUserSignPre(stop, 'JDSuitcase', '京东商城-箱包', 'ZrH7gGAcEkY2gH8wXqyAPoQgk6t'), //京东箱包馆 - JDUserSignPre(stop, 'JDSchool', '京东商城-校园', '2QUxWHx5BSCNtnBDjtt5gZTq7zdZ'), //京东校园 - JDUserSignPre(stop, 'JDHealth', '京东商城-健康', 'w2oeK5yLdHqHvwef7SMMy4PL8LF'), //京东健康 - JDUserSignPre(stop, 'JDShand', '京东拍拍-二手', '3S28janPLYmtFxypu37AYAGgivfp'), //京东拍拍二手 - JDUserSignPre(stop, 'JDClean', '京东商城-清洁', '2Tjm6ay1ZbZ3v7UbriTj6kHy9dn6'), //京东清洁馆 - JDUserSignPre(stop, 'JDCare', '京东商城-个护', '2tZssTgnQsiUqhmg5ooLSHY9XSeN'), //京东个人护理馆 - JDUserSignPre(stop, 'JDJewels', '京东商城-珠宝', 'zHUHpTHNTaztSRfNBFNVZscyFZU'), //京东珠宝馆 - // JDUserSignPre(stop, 'JDClocks', '京东商城-钟表', '2BcJPCVVzMEtMUynXkPscCSsx68W'), //京东钟表馆 - JDUserSignPre(stop, 'JDMakeup', '京东商城-美妆', '2smCxzLNuam5L14zNJHYu43ovbAP'), //京东美妆馆 - JDUserSignPre(stop, 'JDVege', '京东商城-菜场', 'Wcu2LVCFMkBP3HraRvb7pgSpt64') //京东菜场 - ]); - await JingDongSpeedUp(stop); //京东天天加速 - await JingRongDoll(stop, 'JDDouble', '金融京豆-双签', 'F68B2C3E71', '', '', '', 'jingdou'); //京东金融 京豆双签 - break; - default: - await JingDongBean(0); //京东京豆 - await JingDongStore(Wait(stop)); //京东超市 - await JingRongSteel(Wait(stop)); //金融钢镚 - await JingDongTurn(Wait(stop)); //京东转盘 - await JDFlashSale(Wait(stop)); //京东闪购 - await JingDongCash(Wait(stop)); //京东现金红包 - await JDMagicCube(Wait(stop), 2); //京东小魔方 - await JingDongGetCash(Wait(stop)); //京东领现金 - await JingDongSubsidy(Wait(stop)); //京东金贴 - await JingDongShake(Wait(stop)); //京东摇一摇 - await JDSecKilling(Wait(stop)); //京东秒杀 - await JRLuckyLottery(Wait(stop)); //金融抽奖顶部签到 - await JingDongBuyCar(Wait(stop), '31dd4ebdcad341b79e36cb7c29095de9'); //京东汽车 - await JingRongDoll(Wait(stop), 'JRTwoDoll', '京东金融-签贰', '3A3E839252'); - await JingRongDoll(Wait(stop), 'JRThreeDoll', '京东金融-签叁', '69F5EC743C'); - await JingRongDoll(Wait(stop), 'JRFourDoll', '京东金融-签肆', '30C4F86264'); - await JingRongDoll(Wait(stop), 'JRFiveDoll', '京东金融-签伍', '1D06AA3B0F'); - await JingRongDoll(Wait(stop), 'JRDoll', '京东金融-签壹', '4D25A6F482'); - await JingRongDoll(Wait(stop), 'XJDouble', '金融现金-双签', 'F68B2C3E71', '', '', '', 'xianjin'); //京东金融 现金双签 - await JingRongDoll(Wait(stop), 'JTDouble', '京东金贴-双签', '1DF13833F7'); //京东金融 金贴双签 - await JDUserSignPre(Wait(stop), 'JDCustomized', '京东商城-定制', 'RPordkuhnM4MzR24fLWgc8YRbXJ'); //京东定制 - await JDUserSignPre(Wait(stop), 'JDSuitcase', '京东商城-箱包', 'ZrH7gGAcEkY2gH8wXqyAPoQgk6t'); //京东箱包馆 - await JDUserSignPre(Wait(stop), 'JDClothing', '京东商城-服饰', '4RBT3H9jmgYg1k2kBnHF8NAHm7m8'); //京东服饰 - await JDUserSignPre(Wait(stop), 'JDSchool', '京东商城-校园', '2QUxWHx5BSCNtnBDjtt5gZTq7zdZ'); //京东校园 - await JDUserSignPre(Wait(stop), 'JDHealth', '京东商城-健康', 'w2oeK5yLdHqHvwef7SMMy4PL8LF'); //京东健康 - await JDUserSignPre(Wait(stop), 'JDShoes', '京东商城-鞋靴', '4RXyb1W4Y986LJW8ToqMK14BdTD'); //京东鞋靴 - await JDUserSignPre(Wait(stop), 'JDCalendar', '京东日历-翻牌', '36V2Qw59VPNsuLxY84vCFtxFzrFs'); //京东日历翻牌 - await JDUserSignPre(Wait(stop), 'JDChild', '京东商城-童装', '3Af6mZNcf5m795T8dtDVfDwWVNhJ'); //京东童装馆 - await JDUserSignPre(Wait(stop), 'JDBaby', '京东商城-母婴', '3BbAVGQPDd6vTyHYjmAutXrKAos6'); //京东母婴馆 - await JDUserSignPre(Wait(stop), 'JD3C', '京东商城-数码', '4SWjnZSCTHPYjE5T7j35rxxuMTb6'); //京东数码电器馆 - // await JDUserSignPre(Wait(stop), 'JDClocks', '京东商城-钟表', '2BcJPCVVzMEtMUynXkPscCSsx68W'); //京东钟表馆 - await JDUserSignPre(Wait(stop), 'JDWomen', '京东商城-女装', 'DpSh7ma8JV7QAxSE2gJNro8Q2h9'); //京东女装馆 - await JDUserSignPre(Wait(stop), 'JDBook', '京东商城-图书', '3SC6rw5iBg66qrXPGmZMqFDwcyXi'); //京东图书 - await JDUserSignPre(Wait(stop), 'JDShand', '京东拍拍-二手', '3S28janPLYmtFxypu37AYAGgivfp'); //京东拍拍二手 - await JDUserSignPre(Wait(stop), 'JDMakeup', '京东商城-美妆', '2smCxzLNuam5L14zNJHYu43ovbAP'); //京东美妆馆 - await JDUserSignPre(Wait(stop), 'JDVege', '京东商城-菜场', 'Wcu2LVCFMkBP3HraRvb7pgSpt64'); //京东菜场 - await JDUserSignPre(Wait(stop), 'JDClean', '京东商城-清洁', '2Tjm6ay1ZbZ3v7UbriTj6kHy9dn6'); //京东清洁馆 - await JDUserSignPre(Wait(stop), 'JDCare', '京东商城-个护', '2tZssTgnQsiUqhmg5ooLSHY9XSeN'); //京东个人护理馆 - await JDUserSignPre(Wait(stop), 'JDJewels', '京东商城-珠宝', 'zHUHpTHNTaztSRfNBFNVZscyFZU'); //京东珠宝馆 - await JingRongDoll(Wait(stop), 'JDDouble', '金融京豆-双签', 'F68B2C3E71', '', '', '', 'jingdou'); //京东金融 京豆双签 - await JingDongSpeedUp(Wait(stop)); //京东天天加速 - break; - } - await Promise.all([ - TotalSteel(), //总钢镚查询 - TotalCash(), //总红包查询 - TotalBean(), //总京豆查询 - TotalSubsidy(), //总金贴查询 - TotalMoney() //总现金查询 - ]); - await notify(); //通知模块 -} - -function notify() { - return new Promise(resolve => { - try { - var bean = 0; - var steel = 0; - var cash = 0; - var money = 0; - var subsidy = 0; - var success = 0; - var fail = 0; - var err = 0; - var notify = ''; - for (var i in merge) { - bean += merge[i].bean ? Number(merge[i].bean) : 0 - steel += merge[i].steel ? Number(merge[i].steel) : 0 - cash += merge[i].Cash ? Number(merge[i].Cash) : 0 - money += merge[i].Money ? Number(merge[i].Money) : 0 - subsidy += merge[i].subsidy ? Number(merge[i].subsidy) : 0 - success += merge[i].success ? Number(merge[i].success) : 0 - fail += merge[i].fail ? Number(merge[i].fail) : 0 - err += merge[i].error ? Number(merge[i].error) : 0 - notify += merge[i].notify ? "\n" + merge[i].notify : "" - } - var Cash = merge.TotalCash && merge.TotalCash.TCash ? `${merge.TotalCash.TCash}红包` : "" - var Steel = merge.TotalSteel && merge.TotalSteel.TSteel ? `${merge.TotalSteel.TSteel}钢镚` : `` - var beans = merge.TotalBean && merge.TotalBean.Qbear ? `${merge.TotalBean.Qbear}京豆${Steel?`, `:``}` : "" - var Money = merge.TotalMoney && merge.TotalMoney.TMoney ? `${merge.TotalMoney.TMoney}现金${Cash?`, `:``}` : "" - var Subsidy = merge.TotalSubsidy && merge.TotalSubsidy.TSubsidy ? `${merge.TotalSubsidy.TSubsidy}金贴${Money||Cash?", ":""}` : "" - var Tbean = bean ? `${bean.toFixed(0)}京豆${steel?", ":""}` : "" - var TSteel = steel ? `${steel.toFixed(2)}钢镚` : "" - var TCash = cash ? `${cash.toFixed(2)}红包${subsidy||money?", ":""}` : "" - var TSubsidy = subsidy ? `${subsidy.toFixed(2)}金贴${money?", ":""}` : "" - var TMoney = money ? `${money.toFixed(2)}现金` : "" - var Ts = success ? `成功${success}个${fail||err?`, `:``}` : `` - var Tf = fail ? `失败${fail}个${err?`, `:``}` : `` - var Te = err ? `错误${err}个` : `` - var one = `【签到概览】: ${Ts+Tf+Te}${Ts||Tf||Te?`\n`:`获取失败\n`}` - var two = Tbean || TSteel ? `【签到奖励】: ${Tbean+TSteel}\n` : `` - var three = TCash || TSubsidy || TMoney ? `【其他奖励】: ${TCash+TSubsidy+TMoney}\n` : `` - var four = `【账号总计】: ${beans+Steel}${beans||Steel?`\n`:`获取失败\n`}` - var five = `【其他总计】: ${Subsidy+Money+Cash}${Subsidy||Money||Cash?`\n`:`获取失败\n`}` - var DName = merge.TotalBean && merge.TotalBean.nickname ? merge.TotalBean.nickname : "获取失败" - var cnNum = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]; - const numFix = !Key && !DualKey ? DualAccount - 2 : Key && DualKey ? DualAccount : DualAccount - 1 || DualAccount - const Name = DualKey || OtherKey ? `【签到号${cnNum[numFix]||numFix}】: ${DName}\n` : `` - const disables = $nobyda.read("JD_DailyBonusDisables") - const amount = disables ? disables.split(",").length : 0 - const disa = !notify || amount ? `【温馨提示】: 检测到${$nobyda.disable?`上次执行意外崩溃, `:``}已禁用${notify?`${amount}个`:`所有`}接口, 如需开启请前往BoxJs或查看脚本内第100行注释.\n` : `` - $nobyda.notify("", "", Name + one + two + three + four + five + disa + notify, { - 'media-url': $nobyda.headUrl || 'https://cdn.jsdelivr.net/gh/NobyDa/mini@master/Color/jd.png' - }); - $nobyda.headUrl = null; - if ($nobyda.isJSBox) { - Shortcut = (typeof(Shortcut) == 'undefined' ? '' : Shortcut) + Name + one + two + three + four + five + "\n" - } - double(); - } catch (eor) { - $nobyda.notify("通知模块 " + eor.name + "‼️", JSON.stringify(eor), eor.message) - } finally { - resolve() - } - }); -} - -function ReadCookie() { - DualAccount = 1; - const EnvInfo = $nobyda.isJSBox ? "JD_Cookie" : "CookieJD" - const EnvInfo2 = $nobyda.isJSBox ? "JD_Cookie2" : "CookieJD2" - const EnvInfo3 = $nobyda.isJSBox ? "JD_Cookies" : "CookiesJD" - if (DeleteCookie) { - if ($nobyda.read(EnvInfo) || $nobyda.read(EnvInfo2) || ($nobyda.read(EnvInfo3) || '[]') != '[]') { - $nobyda.write("", EnvInfo) - $nobyda.write("", EnvInfo2) - $nobyda.write("", EnvInfo3) - $nobyda.notify("京东Cookie清除成功 !", "", '请手动关闭脚本内"DeleteCookie"选项') - $nobyda.done() - return - } - $nobyda.notify("脚本终止", "", '未关闭脚本内"DeleteCookie"选项 ‼️') - $nobyda.done() - return - } else if ($nobyda.isRequest) { - GetCookie() - return - } - Key = Key || $nobyda.read(EnvInfo) - DualKey = DualKey || $nobyda.read(EnvInfo2) - OtherKey = OtherKey || $nobyda.read(EnvInfo3) - KEY = Key || DualKey - if (KEY || OtherKey) { - if ($nobyda.isJSBox || $nobyda.isNode) { - if (Key) $nobyda.write(Key, EnvInfo); - if (DualKey) $nobyda.write(DualKey, EnvInfo2); - if (OtherKey) $nobyda.write(OtherKey, EnvInfo3); - if (stop !== '0') $nobyda.write(stop, "JD_DailyBonusDelay"); - } - out = parseInt($nobyda.read("JD_DailyBonusTimeOut")) || out - stop = Wait($nobyda.read("JD_DailyBonusDelay"), true) || Wait(stop, true) - boxdis = $nobyda.read("JD_Crash_disable") === "false" || $nobyda.isNode || $nobyda.isJSBox ? false : boxdis - LogDetails = $nobyda.read("JD_DailyBonusLog") === "true" || LogDetails - ReDis = ReDis ? $nobyda.write("", "JD_DailyBonusDisables") : "" - if (KEY) { - all() - } else { - double() - } - } else { - $nobyda.notify("京东签到", "", "脚本终止, 未获取Cookie ‼️") - $nobyda.done() - } -} - -function double() { - KEY = ''; - if (DualAccount == 1) { - DualAccount++; - KEY = Key ? DualKey : '' - } - if (!KEY && OtherKey) { - DualAccount++; - let cks = []; - try { - cks = JSON.parse(OtherKey); - } catch (e) { - cks = []; - console.log(`\n第三及以上账号Cookie读取失败, 请检查Json格式.`) - } - if (cks.length + 2 >= DualAccount) { - KEY = cks[DualAccount - 3].cookie; - } - } - if (KEY) { - all() - } else { - if ($nobyda.isJSBox) { - $intents.finish(Shortcut) - } - $nobyda.time(); - $nobyda.done(); - } -} - -function JingDongBean(s) { - merge.JDBean = {}; - return new Promise(resolve => { - if (disable("JDBean")) return resolve() - setTimeout(() => { - const JDBUrl = { - url: 'https://api.m.jd.com/client.action', - headers: { - Cookie: KEY - }, - body: 'functionId=signBeanIndex&appid=ld' - }; - $nobyda.post(JDBUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.code == 3) { - console.log("\n" + "京东商城-京豆Cookie失效 " + Details) - merge.JDBean.notify = "京东商城-京豆: 失败, 原因: Cookie失效‼️" - merge.JDBean.fail = 1 - } else if (data.match(/跳转至拼图/)) { - merge.JDBean.notify = "京东商城-京豆: 失败, 需要拼图验证 ⚠️" - merge.JDBean.fail = 1 - } else if (data.match(/\"status\":\"?1\"?/)) { - console.log("\n" + "京东商城-京豆签到成功 " + Details) - if (data.match(/dailyAward/)) { - merge.JDBean.notify = "京东商城-京豆: 成功, 明细: " + cc.data.dailyAward.beanAward.beanCount + "京豆 🐶" - merge.JDBean.bean = cc.data.dailyAward.beanAward.beanCount - } else if (data.match(/continuityAward/)) { - merge.JDBean.notify = "京东商城-京豆: 成功, 明细: " + cc.data.continuityAward.beanAward.beanCount + "京豆 🐶" - merge.JDBean.bean = cc.data.continuityAward.beanAward.beanCount - } else if (data.match(/新人签到/)) { - const quantity = data.match(/beanCount\":\"(\d+)\".+今天/) - merge.JDBean.bean = quantity ? quantity[1] : 0 - merge.JDBean.notify = "京东商城-京豆: 成功, 明细: " + (quantity ? quantity[1] : "无") + "京豆 🐶" - } else { - merge.JDBean.notify = "京东商城-京豆: 成功, 明细: 无京豆 🐶" - } - merge.JDBean.success = 1 - } else { - merge.JDBean.fail = 1 - console.log("\n" + "京东商城-京豆签到失败 " + Details) - if (data.match(/(已签到|新人签到)/)) { - merge.JDBean.notify = "京东商城-京豆: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/人数较多|S101/)) { - merge.JDBean.notify = "京东商城-京豆: 失败, 签到人数较多 ⚠️" - } else { - merge.JDBean.notify = "京东商城-京豆: 失败, 原因: 未知 ⚠️" - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-京豆", "JDBean", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingDongTurn(s) { - merge.JDTurn = {}, merge.JDTurn.notify = "", merge.JDTurn.success = 0, merge.JDTurn.bean = 0; - return new Promise((resolve, reject) => { - if (disable("JDTurn")) return reject() - const JDTUrl = { - url: 'https://api.m.jd.com/client.action?functionId=wheelSurfIndex&body=%7B%22actId%22%3A%22jgpqtzjhvaoym%22%2C%22appSource%22%3A%22jdhome%22%7D&appid=ld', - headers: { - Cookie: KEY, - } - }; - $nobyda.get(JDTUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data).data.lotteryCode - const Details = LogDetails ? "response:\n" + data : ''; - if (cc) { - console.log("\n" + "京东商城-转盘查询成功 " + Details) - return resolve(cc) - } else { - merge.JDTurn.notify = "京东商城-转盘: 失败, 原因: 查询错误 ⚠️" - merge.JDTurn.fail = 1 - console.log("\n" + "京东商城-转盘查询失败 " + Details) - } - } - } catch (eor) { - $nobyda.AnError("京东转盘-查询", "JDTurn", eor, response, data) - } finally { - reject() - } - }) - if (out) setTimeout(reject, out + s) - }).then(data => { - return JingDongTurnSign(s, data); - }, () => {}); -} - -function JingDongTurnSign(s, code) { - return new Promise(resolve => { - setTimeout(() => { - const JDTUrl = { - url: `https://api.m.jd.com/client.action?functionId=lotteryDraw&body=%7B%22actId%22%3A%22jgpqtzjhvaoym%22%2C%22appSource%22%3A%22jdhome%22%2C%22lotteryCode%22%3A%22${code}%22%7D&appid=ld`, - headers: { - Cookie: KEY, - } - }; - $nobyda.get(JDTUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - const also = merge.JDTurn.notify ? true : false - if (cc.code == 3) { - console.log("\n" + "京东转盘Cookie失效 " + Details) - merge.JDTurn.notify = "京东商城-转盘: 失败, 原因: Cookie失效‼️" - merge.JDTurn.fail = 1 - } else if (data.match(/(\"T216\"|活动结束)/)) { - merge.JDTurn.notify = "京东商城-转盘: 失败, 原因: 活动结束 ⚠️" - merge.JDTurn.fail = 1 - } else if (data.match(/(京豆|\"910582\")/)) { - console.log("\n" + "京东商城-转盘签到成功 " + Details) - merge.JDTurn.bean += Number(cc.data.prizeSendNumber) || 0 - merge.JDTurn.notify += `${also?`\n`:``}京东商城-转盘: ${also?`多次`:`成功`}, 明细: ${cc.data.prizeSendNumber||`无`}京豆 🐶` - merge.JDTurn.success += 1 - if (cc.data.chances != "0") { - await JingDongTurnSign(2000, code) - } - } else if (data.match(/未中奖/)) { - merge.JDTurn.notify += `${also?`\n`:``}京东商城-转盘: ${also?`多次`:`成功`}, 状态: 未中奖 🐶` - merge.JDTurn.success += 1 - if (cc.data.chances != "0") { - await JingDongTurnSign(2000, code) - } - } else { - console.log("\n" + "京东商城-转盘签到失败 " + Details) - merge.JDTurn.fail = 1 - if (data.match(/(T215|次数为0)/)) { - merge.JDTurn.notify = "京东商城-转盘: 失败, 原因: 已转过 ⚠️" - } else if (data.match(/(T210|密码)/)) { - merge.JDTurn.notify = "京东商城-转盘: 失败, 原因: 无支付密码 ⚠️" - } else { - merge.JDTurn.notify += `${also?`\n`:``}京东商城-转盘: 失败, 原因: 未知 ⚠️${also?` (多次)`:``}` - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-转盘", "JDTurn", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingRongSteel(s) { - merge.JRSteel = {}; - return new Promise(resolve => { - if (disable("JRSteel")) return resolve() - setTimeout(() => { - const JRSUrl = { - url: 'https://ms.jr.jd.com/gw/generic/hy/h5/m/signIn1', - headers: { - Cookie: KEY - }, - body: "reqData=%7B%22channelSource%22%3A%22JRAPP6.0%22%2C%22riskDeviceParam%22%3A%22%7B%7D%22%7D" - }; - $nobyda.post(JRSUrl, function(error, response, data) { - try { - if (error) throw new Error(error) - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (data.match(/\"resBusiCode\":0/)) { - console.log("\n" + "京东金融-钢镚签到成功 " + Details) - const leng = cc.resultData.resBusiData.actualTotalRewardsValue - const spare = cc.resultData.resBusiData.baseReward - merge.JRSteel.steel = leng ? leng > 9 ? `0.${leng}` : `0.0${leng}` : spare ? spare : 0 - merge.JRSteel.notify = `京东金融-钢镚: 成功, 明细: ${merge.JRSteel.steel || `无`}钢镚 💰` - merge.JRSteel.success = 1 - } else { - console.log("\n" + "京东金融-钢镚签到失败 " + Details) - merge.JRSteel.fail = 1 - if (data.match(/已经领取|\"resBusiCode\":15/)) { - merge.JRSteel.notify = "京东金融-钢镚: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/未实名/)) { - merge.JRSteel.notify = "京东金融-钢镚: 失败, 账号未实名 ⚠️" - } else if (data.match(/(\"resultCode\":3|请先登录)/)) { - merge.JRSteel.notify = "京东金融-钢镚: 失败, 原因: Cookie失效‼️" - } else { - merge.JRSteel.notify = "京东金融-钢镚: 失败, 原因: 未知 ⚠️" - } - } - } catch (eor) { - $nobyda.AnError("京东金融-钢镚", "JRSteel", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingDongShake(s) { - if (!merge.JDShake) merge.JDShake = {}, merge.JDShake.success = 0, merge.JDShake.bean = 0, merge.JDShake.notify = ''; - return new Promise(resolve => { - if (disable("JDShake")) return resolve() - setTimeout(() => { - const JDSh = { - url: 'https://api.m.jd.com/client.action?appid=vip_h5&functionId=vvipclub_shaking', - headers: { - Cookie: KEY, - } - }; - $nobyda.get(JDSh, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - const also = merge.JDShake.notify ? true : false - if (data.match(/prize/)) { - console.log("\n" + "京东商城-摇一摇签到成功 " + Details) - merge.JDShake.success += 1 - if (cc.data.prizeBean) { - merge.JDShake.bean += cc.data.prizeBean.count || 0 - merge.JDShake.notify += `${also?`\n`:``}京东商城-摇摇: ${also?`多次`:`成功`}, 明细: ${merge.JDShake.bean || `无`}京豆 🐶` - } else if (cc.data.prizeCoupon) { - merge.JDShake.notify += `${also?`\n`:``}京东商城-摇摇: ${also?`多次, `:``}获得满${cc.data.prizeCoupon.quota}减${cc.data.prizeCoupon.discount}优惠券→ ${cc.data.prizeCoupon.limitStr}` - } else { - merge.JDShake.notify += `${also?`\n`:``}京东商城-摇摇: 成功, 明细: 未知 ⚠️${also?` (多次)`:``}` - } - if (cc.data.luckyBox.freeTimes != 0) { - await JingDongShake(s) - } - } else { - console.log("\n" + "京东商城-摇一摇签到失败 " + Details) - if (data.match(/true/)) { - merge.JDShake.notify += `${also?`\n`:``}京东商城-摇摇: 成功, 明细: 无奖励 🐶${also?` (多次)`:``}` - merge.JDShake.success += 1 - if (cc.data.luckyBox.freeTimes != 0) { - await JingDongShake(s) - } - } else { - merge.JDShake.fail = 1 - if (data.match(/(无免费|8000005|9000005)/)) { - merge.JDShake.notify = "京东商城-摇摇: 失败, 原因: 已摇过 ⚠️" - } else if (data.match(/(未登录|101)/)) { - merge.JDShake.notify = "京东商城-摇摇: 失败, 原因: Cookie失效‼️" - } else { - merge.JDShake.notify += `${also?`\n`:``}京东商城-摇摇: 失败, 原因: 未知 ⚠️${also?` (多次)`:``}` - } - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-摇摇", "JDShake", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JDUserSignPre(s, key, title, ac) { - merge[key] = {}; - if ($nobyda.isJSBox) { - return JDUserSignPre2(s, key, title, ac); - } else { - return JDUserSignPre1(s, key, title, ac); - } -} - -function JDUserSignPre1(s, key, title, acData, ask) { - return new Promise((resolve, reject) => { - if (disable(key, title, 1)) return reject() - const JDUrl = { - url: 'https://api.m.jd.com/?client=wh5&functionId=qryH5BabelFloors', - headers: { - Cookie: KEY - }, - opts: { - 'filter': 'try{var od=JSON.parse(body);var params=(od.floatLayerList||[]).filter(o=>o.params&&o.params.match(/enActK/)).map(o=>o.params).pop()||(od.floorList||[]).filter(o=>o.template=="signIn"&&o.signInfos&&o.signInfos.params&&o.signInfos.params.match(/enActK/)).map(o=>o.signInfos&&o.signInfos.params).pop();var tId=(od.floorList||[]).filter(o=>o.boardParams&&o.boardParams.turnTableId).map(o=>o.boardParams.turnTableId).pop();var page=od.paginationFlrs;return JSON.stringify({qxAct:params||null,qxTid:tId||null,qxPage:page||null})}catch(e){return `=> 过滤器发生错误: ${e.message}`}' - }, - body: `body=${encodeURIComponent(`{"activityId":"${acData}"${ask?`,"paginationParam":"2","paginationFlrs":"${ask}"`:``}}`)}` - }; - $nobyda.post(JDUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const od = JSON.parse(data || '{}'); - const turnTableId = od.qxTid || (od.floorList || []).filter(o => o.boardParams && o.boardParams.turnTableId).map(o => o.boardParams.turnTableId).pop(); - const page = od.qxPage || od.paginationFlrs; - if (data.match(/enActK/)) { // 含有签到活动数据 - let params = od.qxAct || (od.floatLayerList || []).filter(o => o.params && o.params.match(/enActK/)).map(o => o.params).pop() - if (!params) { // 第一处找到签到所需数据 - // floatLayerList未找到签到所需数据,从floorList中查找 - let signInfo = (od.floorList || []).filter(o => o.template == 'signIn' && o.signInfos && o.signInfos.params && o.signInfos.params.match(/enActK/)) - .map(o => o.signInfos).pop(); - if (signInfo) { - if (signInfo.signStat == '1') { - console.log(`\n${title}重复签到`) - merge[key].notify = `${title}: 失败, 原因: 已签过 ⚠️` - merge[key].fail = 1 - } else { - params = signInfo.params; - } - } else { - merge[key].notify = `${title}: 失败, 活动查找异常 ⚠️` - merge[key].fail = 1 - } - } - if (params) { - return resolve({ - params: params - }); // 执行签到处理 - } - } else if (turnTableId) { // 无签到数据, 但含有关注店铺签到 - const boxds = $nobyda.read("JD_Follow_disable") === "false" ? false : true - if (boxds) { - console.log(`\n${title}关注店铺`) - return resolve(parseInt(turnTableId)) - } else { - merge[key].notify = `${title}: 失败, 需要关注店铺 ⚠️` - merge[key].fail = 1 - } - } else if (page && !ask) { // 无签到数据, 尝试带参查询 - const boxds = $nobyda.read("JD_Retry_disable") === "false" ? false : true - if (boxds) { - console.log(`\n${title}二次查询`) - return resolve(page) - } else { - merge[key].notify = `${title}: 失败, 请尝试开启增强 ⚠️` - merge[key].fail = 1 - } - } else { - merge[key].notify = `${title}: 失败, ${!data ? `需要手动执行` : `不含活动数据`} ⚠️` - merge[key].fail = 1 - } - } - reject() - } catch (eor) { - $nobyda.AnError(title, key, eor, response, data) - reject() - } - }) - if (out) setTimeout(reject, out + s) - }).then(data => { - disable(key, title, 2) - if (typeof(data) == "object") return JDUserSign1(s, key, title, encodeURIComponent(JSON.stringify(data))); - if (typeof(data) == "number") return JDUserSign2(s, key, title, data); - if (typeof(data) == "string") return JDUserSignPre1(s, key, title, acData, data); - }, () => disable(key, title, 2)) -} - -function JDUserSignPre2(s, key, title, acData) { - return new Promise((resolve, reject) => { - if (disable(key, title, 1)) return reject() - const JDUrl = { - url: `https://pro.m.jd.com/mall/active/${acData}/index.html`, - headers: { - Cookie: KEY, - } - }; - $nobyda.get(JDUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const act = data.match(/\"params\":\"\{\\\"enActK.+?\\\"\}\"/) - const turnTable = data.match(/\"turnTableId\":\"(\d+)\"/) - const page = data.match(/\"paginationFlrs\":\"(\[\[.+?\]\])\"/) - if (act) { // 含有签到活动数据 - return resolve(act) - } else if (turnTable) { // 无签到数据, 但含有关注店铺签到 - const boxds = $nobyda.read("JD_Follow_disable") === "false" ? false : true - if (boxds) { - console.log(`\n${title}关注店铺`) - return resolve(parseInt(turnTable[1])) - } else { - merge[key].notify = `${title}: 失败, 需要关注店铺 ⚠️` - merge[key].fail = 1 - } - } else if (page) { // 无签到数据, 尝试带参查询 - const boxds = $nobyda.read("JD_Retry_disable") === "false" ? false : true - if (boxds) { - console.log(`\n${title}二次查询`) - return resolve(page[1]) - } else { - merge[key].notify = `${title}: 失败, 请尝试开启增强 ⚠️` - merge[key].fail = 1 - } - } else { - merge[key].notify = `${title}: 失败, ${!data ? `需要手动执行` : `不含活动数据`} ⚠️` - merge[key].fail = 1 - } - } - reject() - } catch (eor) { - $nobyda.AnError(title, key, eor, response, data) - reject() - } - }) - if (out) setTimeout(reject, out + s) - }).then(data => { - disable(key, title, 2) - if (typeof(data) == "object") return JDUserSign1(s, key, title, encodeURIComponent(`{${data}}`)); - if (typeof(data) == "number") return JDUserSign2(s, key, title, data) - if (typeof(data) == "string") return JDUserSignPre1(s, key, title, acData, data) - }, () => disable(key, title, 2)) -} - -function JDUserSign1(s, key, title, body) { - return new Promise(resolve => { - setTimeout(() => { - const JDUrl = { - url: 'https://api.m.jd.com/client.action?functionId=userSign', - headers: { - Cookie: KEY - }, - body: `body=${body}&client=wh5` - }; - $nobyda.post(JDUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? `response:\n${data}` : ''; - if (data.match(/签到成功/)) { - console.log(`\n${title}签到成功(1)${Details}`) - if (data.match(/\"text\":\"\d+京豆\"/)) { - merge[key].bean = data.match(/\"text\":\"(\d+)京豆\"/)[1] - } - merge[key].notify = `${title}: 成功, 明细: ${merge[key].bean || '无'}京豆 🐶` - merge[key].success = 1 - } else { - console.log(`\n${title}签到失败(1)${Details}`) - if (data.match(/(已签到|已领取)/)) { - merge[key].notify = `${title}: 失败, 原因: 已签过 ⚠️` - } else if (data.match(/(不存在|已结束|未开始)/)) { - merge[key].notify = `${title}: 失败, 原因: 活动已结束 ⚠️` - } else if (data.match(/\"code\":\"?3\"?/)) { - merge[key].notify = `${title}: 失败, 原因: Cookie失效‼️` - } else { - const ng = data.match(/\"(errorMessage|subCodeMsg)\":\"(.+?)\"/) - merge[key].notify = `${title}: 失败, ${ng?ng[2]:`原因: 未知`} ⚠️` - } - merge[key].fail = 1 - } - } - } catch (eor) { - $nobyda.AnError(title, key, eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -async function JDUserSign2(s, key, title, tid) { - await new Promise(resolve => { - $nobyda.get({ - url: `https://jdjoy.jd.com/api/turncard/channel/detail?turnTableId=${tid}&invokeKey=yPsq1PHN`, - headers: { - Cookie: KEY - } - }, function(error, response, data) { - resolve() - }) - if (out) setTimeout(resolve, out + s) - }); - return new Promise(resolve => { - setTimeout(() => { - const JDUrl = { - url: 'https://jdjoy.jd.com/api/turncard/channel/sign?invokeKey=yPsq1PHN', - headers: { - Cookie: KEY - }, - body: `turnTableId=${tid}` - }; - $nobyda.post(JDUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? `response:\n${data}` : ''; - if (data.match(/\"success\":true/)) { - console.log(`\n${title}签到成功(2)${Details}`) - if (data.match(/\"jdBeanQuantity\":\d+/)) { - merge[key].bean = data.match(/\"jdBeanQuantity\":(\d+)/)[1] - } - merge[key].notify = `${title}: 成功, 明细: ${merge[key].bean || '无'}京豆 🐶` - merge[key].success = 1 - } else { - console.log(`\n${title}签到失败(2)${Details}`) - if (data.match(/(已经签到|已经领取)/)) { - merge[key].notify = `${title}: 失败, 原因: 已签过 ⚠️` - } else if (data.match(/(不存在|已结束|未开始)/)) { - merge[key].notify = `${title}: 失败, 原因: 活动已结束 ⚠️` - } else if (data.match(/(没有登录|B0001)/)) { - merge[key].notify = `${title}: 失败, 原因: Cookie失效‼️` - } else { - const ng = data.match(/\"(errorMessage|subCodeMsg)\":\"(.+?)\"/) - merge[key].notify = `${title}: 失败, ${ng?ng[2]:`原因: 未知`} ⚠️` - } - merge[key].fail = 1 - } - } - } catch (eor) { - $nobyda.AnError(title, key, eor, response, data) - } finally { - resolve() - } - }) - }, 200 + s) - if (out) setTimeout(resolve, out + s + 200) - }); -} - -function JDFlashSale(s) { - merge.JDFSale = {}; - return new Promise(resolve => { - if (disable("JDFSale")) return resolve() - setTimeout(() => { - const JDPETUrl = { - url: 'https://api.m.jd.com/client.action?functionId=partitionJdSgin', - headers: { - Cookie: KEY - }, - body: "body=%7B%22version%22%3A%22v2%22%7D&client=apple&clientVersion=9.0.8&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&sign=6768e2cf625427615dd89649dd367d41&st=1597248593305&sv=121" - }; - $nobyda.post(JDPETUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - if (cc.result && cc.result.code == 0) { - console.log("\n" + "京东商城-闪购签到成功 " + Details) - merge.JDFSale.bean = cc.result.jdBeanNum || 0 - merge.JDFSale.notify = "京东商城-闪购: 成功, 明细: " + (merge.JDFSale.bean || "无") + "京豆 🐶" - merge.JDFSale.success = 1 - } else { - console.log("\n" + "京东商城-闪购签到失败 " + Details) - if (data.match(/(已签到|已领取|\"2005\")/)) { - merge.JDFSale.notify = "京东商城-闪购: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/不存在|已结束|\"2008\"|\"3001\"/)) { - await FlashSaleDivide(s); //瓜分京豆 - return - } else if (data.match(/(\"code\":\"3\"|\"1003\")/)) { - merge.JDFSale.notify = "京东商城-闪购: 失败, 原因: Cookie失效‼️" - } else { - const msg = data.match(/\"msg\":\"([\u4e00-\u9fa5].+?)\"/) - merge.JDFSale.notify = `京东商城-闪购: 失败, ${msg ? msg[1] : `原因: 未知`} ⚠️` - } - merge.JDFSale.fail = 1 - } - } - } catch (eor) { - $nobyda.AnError("京东商城-闪购", "JDFSale", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function FlashSaleDivide(s) { - return new Promise(resolve => { - setTimeout(() => { - const Url = { - url: 'https://api.m.jd.com/client.action?functionId=partitionJdShare', - headers: { - Cookie: KEY - }, - body: "body=%7B%22version%22%3A%22v2%22%7D&client=apple&clientVersion=9.0.8&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&sign=49baa3b3899b02bbf06cdf41fe191986&st=1597682588351&sv=111" - }; - $nobyda.post(Url, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - if (cc.result.code == 0) { - merge.JDFSale.success = 1 - merge.JDFSale.bean = cc.result.jdBeanNum || 0 - merge.JDFSale.notify = "京东闪购-瓜分: 成功, 明细: " + (merge.JDFSale.bean || "无") + "京豆 🐶" - console.log("\n" + "京东闪购-瓜分签到成功 " + Details) - } else { - merge.JDFSale.fail = 1 - console.log("\n" + "京东闪购-瓜分签到失败 " + Details) - if (data.match(/已参与|已领取|\"2006\"/)) { - merge.JDFSale.notify = "京东闪购-瓜分: 失败, 原因: 已瓜分 ⚠️" - } else if (data.match(/不存在|已结束|未开始|\"2008\"|\"2012\"/)) { - merge.JDFSale.notify = "京东闪购-瓜分: 失败, 原因: 活动已结束 ⚠️" - } else if (data.match(/\"code\":\"1003\"|未获取/)) { - merge.JDFSale.notify = "京东闪购-瓜分: 失败, 原因: Cookie失效‼️" - } else { - const msg = data.match(/\"msg\":\"([\u4e00-\u9fa5].+?)\"/) - merge.JDFSale.notify = `京东闪购-瓜分: 失败, ${msg ? msg[1] : `原因: 未知`} ⚠️` - } - } - } - } catch (eor) { - $nobyda.AnError("京东闪购-瓜分", "JDFSale", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingDongCash(s) { - merge.JDCash = {}; - return new Promise(resolve => { - if (disable("JDCash")) return resolve() - setTimeout(() => { - const JDCAUrl = { - url: 'https://api.m.jd.com/client.action?functionId=ccSignInNew', - headers: { - Cookie: KEY - }, - body: "body=%7B%22pageClickKey%22%3A%22CouponCenter%22%2C%22eid%22%3A%22O5X6JYMZTXIEX4VBCBWEM5PTIZV6HXH7M3AI75EABM5GBZYVQKRGQJ5A2PPO5PSELSRMI72SYF4KTCB4NIU6AZQ3O6C3J7ZVEP3RVDFEBKVN2RER2GTQ%22%2C%22shshshfpb%22%3A%22v1%5C%2FzMYRjEWKgYe%2BUiNwEvaVlrHBQGVwqLx4CsS9PH1s0s0Vs9AWk%2B7vr9KSHh3BQd5NTukznDTZnd75xHzonHnw%3D%3D%22%2C%22childActivityUrl%22%3A%22openapp.jdmobile%253a%252f%252fvirtual%253fparams%253d%257b%255c%2522category%255c%2522%253a%255c%2522jump%255c%2522%252c%255c%2522des%255c%2522%253a%255c%2522couponCenter%255c%2522%257d%22%2C%22monitorSource%22%3A%22cc_sign_ios_index_config%22%7D&client=apple&clientVersion=8.5.0&d_brand=apple&d_model=iPhone8%2C2&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&scope=11&screen=1242%2A2208&sign=1cce8f76d53fc6093b45a466e93044da&st=1581084035269&sv=102" - }; - $nobyda.post(JDCAUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - if (cc.busiCode == "0") { - console.log("\n" + "京东现金-红包签到成功 " + Details) - merge.JDCash.success = 1 - merge.JDCash.Cash = cc.result.signResult.signData.amount || 0 - merge.JDCash.notify = `京东现金-红包: 成功, 明细: ${merge.JDCash.Cash || `无`}红包 🧧` - } else { - console.log("\n" + "京东现金-红包签到失败 " + Details) - merge.JDCash.fail = 1 - if (data.match(/(\"busiCode\":\"1002\"|完成签到)/)) { - merge.JDCash.notify = "京东现金-红包: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/(不存在|已结束)/)) { - merge.JDCash.notify = "京东现金-红包: 失败, 原因: 活动已结束 ⚠️" - } else if (data.match(/(\"busiCode\":\"3\"|未登录)/)) { - merge.JDCash.notify = "京东现金-红包: 失败, 原因: Cookie失效‼️" - } else { - merge.JDCash.notify = "京东现金-红包: 失败, 原因: 未知 ⚠️" - } - } - } - } catch (eor) { - $nobyda.AnError("京东现金-红包", "JDCash", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JDMagicCube(s, sign) { - merge.JDCube = {}; - return new Promise((resolve, reject) => { - if (disable("JDCube")) return reject() - const JDUrl = { - url: `https://api.m.jd.com/client.action?functionId=getNewsInteractionInfo&appid=smfe${sign?`&body=${encodeURIComponent(`{"sign":${sign}}`)}`:``}`, - headers: { - Cookie: KEY, - } - }; - $nobyda.get(JDUrl, async (error, response, data) => { - try { - if (error) throw new Error(error) - const Details = LogDetails ? "response:\n" + data : ''; - console.log(`\n京东魔方-尝试查询活动(${sign}) ${Details}`) - if (data.match(/\"interactionId\":\d+/)) { - resolve({ - id: data.match(/\"interactionId\":(\d+)/)[1], - sign: sign || null - }) - } else if (data.match(/配置异常/) && sign) { - await JDMagicCube(s, sign == 2 ? 1 : null) - reject() - } else { - resolve(null) - } - } catch (eor) { - $nobyda.AnError("京东魔方-查询", "JDCube", eor, response, data) - reject() - } - }) - if (out) setTimeout(reject, out + s) - }).then(data => { - return JDMagicCubeSign(s, data) - }, () => {}); -} - -function JDMagicCubeSign(s, id) { - return new Promise(resolve => { - setTimeout(() => { - const JDMCUrl = { - url: `https://api.m.jd.com/client.action?functionId=getNewsInteractionLotteryInfo&appid=smfe${id?`&body=${encodeURIComponent(`{${id.sign?`"sign":${id.sign},`:``}"interactionId":${id.id}}`)}`:``}`, - headers: { - Cookie: KEY, - } - }; - $nobyda.get(JDMCUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - if (data.match(/(\"name\":)/)) { - console.log("\n" + "京东商城-魔方签到成功 " + Details) - merge.JDCube.success = 1 - if (data.match(/(\"name\":\"京豆\")/)) { - merge.JDCube.bean = cc.result.lotteryInfo.quantity || 0 - merge.JDCube.notify = `京东商城-魔方: 成功, 明细: ${merge.JDCube.bean || `无`}京豆 🐶` - } else { - merge.JDCube.notify = `京东商城-魔方: 成功, 明细: ${cc.result.lotteryInfo.name || `未知`} 🎉` - } - } else { - console.log("\n" + "京东商城-魔方签到失败 " + Details) - merge.JDCube.fail = 1 - if (data.match(/(一闪而过|已签到|已领取)/)) { - merge.JDCube.notify = "京东商城-魔方: 失败, 原因: 无机会 ⚠️" - } else if (data.match(/(不存在|已结束)/)) { - merge.JDCube.notify = "京东商城-魔方: 失败, 原因: 活动已结束 ⚠️" - } else if (data.match(/(\"code\":3)/)) { - merge.JDCube.notify = "京东商城-魔方: 失败, 原因: Cookie失效‼️" - } else { - merge.JDCube.notify = "京东商城-魔方: 失败, 原因: 未知 ⚠️" - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-魔方", "JDCube", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingDongSpeedUp(s, id) { - if (!merge.SpeedUp) merge.SpeedUp = {}, merge.SpeedUp.bean = 0; - return new Promise(resolve => { - if (disable("SpeedUp")) return resolve() - setTimeout(() => { - const GameUrl = { - url: `https://api.m.jd.com/?appid=memberTaskCenter&functionId=flyTask_${id?`start&body=%7B%22source%22%3A%22game%22%2C%22source_id%22%3A${id}%7D`:`state&body=%7B%22source%22%3A%22game%22%7D`}`, - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }; - $nobyda.get(GameUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - var cc = JSON.parse(data) - if (!id) { - var status = $nobyda.ItemIsUsed ? "再次检查" : merge.SpeedUp.notify ? "查询本次" : "查询上次" - console.log(`\n天天加速-${status}任务 ${Details}`) - } else { - console.log(`\n天天加速-开始${$nobyda.ItemIsUsed?`下轮`:`本次`}任务 ${Details}`) - } - if (cc.message == "not login") { - merge.SpeedUp.fail = 1 - merge.SpeedUp.notify = "京东天天-加速: 失败, 原因: Cookie失效‼️" - console.log("\n天天加速-Cookie失效") - } else if (cc.message == "success") { - if (cc.data.task_status == 0 && cc.data.source_id) { - if ($nobyda.ItemIsUsed) { //如果使用道具后再次开始任务, 则收到奖励 - console.log("\n天天加速-领取本次奖励成功") - merge.SpeedUp.bean += cc.data.beans_num || 0 - merge.SpeedUp.success = 1 - merge.SpeedUp.notify = `京东天天-加速: 成功, 明细: ${merge.SpeedUp.bean || `无`}京豆 🐶` - } - await JingDongSpeedUp(s, cc.data.source_id) - } else if (cc.data.task_status == 1) { - const percent = Math.round((cc.data.done_distance / cc.data.distance) * 100) - console.log(`\n天天加速-目前结束时间: \n${cc.data.end_time} [${percent}%]`) - $nobyda.ItemIsUsed = false - if (!$nobyda.isAllEvents) await JDSpaceEvent(s); //处理太空事件 - if (!$nobyda.isAlltasks) await JDQueryTask(s); //处理太空任务 - var step3 = await JDQueryTaskID(s); //查询道具ID - var step4 = await JDUseProps(1000 + s, step3); //使用道具 - if (step4 && $nobyda.ItemIsUsed) { //如果使用了道具, 则再次检查任务 - await JingDongSpeedUp(s) - } else { - $nobyda.isAllEvents = false; //避免多账号问题 - $nobyda.isAlltasks = false; - $nobyda.tryAgain = false; - if (!merge.SpeedUp.notify) { - merge.SpeedUp.fail = 1 - merge.SpeedUp.notify = `京东天天-加速: 失败, 加速中${percent<10?` `:``}[${percent}%] ⚠️` - } - } - } else if (cc.data.task_status == 2) { - merge.SpeedUp.bean = cc.data.beans_num || 0 - merge.SpeedUp.notify = `京东天天-加速: 成功, 明细: ${merge.SpeedUp.bean || `无`}京豆 🐶` - merge.SpeedUp.success = 1 - console.log("\n天天加速-领取上次奖励成功") - await JingDongSpeedUp(s, null) - } else { - merge.SpeedUp.fail = 1 - merge.SpeedUp.notify = "京东天天-加速: 失败, 原因: 未知 ⚠️" - console.log("\n" + "天天加速-判断状态码失败") - } - } else { - if (data.match(/领过此任务/)) { //处理任务频繁问题 - if (!$nobyda.tryAgain || $nobyda.tryAgain < 3) { //避免死循环 - $nobyda.tryAgain ? $nobyda.tryAgain += 1 : $nobyda.tryAgain = 1 - console.log(`\n天天加速-延迟一秒查询 (${$nobyda.tryAgain})`); - await JingDongSpeedUp(1000); - } else { - $nobyda.tryAgain = false; - console.log(`\n天天加速-放弃查询任务`); - } - return - } - if (!merge.SpeedUp.notify) { - merge.SpeedUp.fail = 1 - merge.SpeedUp.notify = "京东天天-加速: 失败, 原因: 无任务 ⚠️" - } - console.log("\n天天加速-判断状态失败") - } - } - } catch (eor) { - $nobyda.AnError("京东天天-加速", "SpeedUp", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JDSpaceEvent(s) { - return new Promise(resolve => { - var spaceEvents = []; - $nobyda.get({ - url: `https://api.m.jd.com/?appid=memberTaskCenter&functionId=spaceEvent_list&body=%7B%22source%22%3A%22game%22%7D`, - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }, (error, response, data) => { - try { - if (error) throw new Error(error) - const cc = JSON.parse(data); - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.message === "success" && cc.data.length > 0) { - for (var item of cc.data) { - if (item.status === 1) { - for (var j of item.options) { - if (j.type === 1) { - spaceEvents.push({ - "id": item.id, - "value": j.value - }) - } - } - } - } - if (spaceEvents && spaceEvents.length > 0) { - console.log(`\n天天加速-查询到${spaceEvents.length}个有效事件 ${Details}`) - } else { - console.log(`\n天天加速-暂无太空事件 ${Details}`) - } - } else { - console.log(`\n天天加速-太空事件为空 ${Details}`) - } - } catch (eor) { - $nobyda.AnError("太空事件-查询", "SpeedUp", eor, response, data) - } finally { - resolve(spaceEvents) - } - }) - if (out) setTimeout(resolve, out + s) - }).then(async (list) => { - await new Promise(resolve => { - if (list && list.length > 0) { - var spaceEventCount = 0; - var spaceNumTask = 0; - for (var item of list) { - $nobyda.get({ - url: `https://api.m.jd.com/?appid=memberTaskCenter&functionId=spaceEvent_handleEvent&body=%7B%22source%22%3A%22game%22%2C%22eventId%22%3A${item.id}%2C%22option%22%3A%22${item.value}%22%7D`, - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }, (error, response, data) => { - try { - spaceEventCount++ - if (error) throw new Error(error) - const cc = JSON.parse(data); - const Details = LogDetails ? "response:\n" + data : ''; - console.log(`\n天天加速-尝试领取第${spaceEventCount}个事件 ${Details}`) - if (cc.message == "success" && cc.success) { - spaceNumTask += 1; - } - } catch (eor) { - $nobyda.AnError("太空事件-领取", "SpeedUp", eor, response, data) - } finally { - if (list.length == spaceEventCount) { - if (list.length == spaceNumTask) $nobyda.isAllEvents = true; //避免重复查询 - console.log(`\n天天加速-已成功领取${spaceNumTask}个事件`) - resolve() - } - } - }) - } - if (out) setTimeout(resolve, out + s) - } else { - $nobyda.isAllEvents = true; //避免重复查询 - resolve() - } - }) - }) -} - -function JDQueryTask(s) { - return new Promise(resolve => { - setTimeout(() => { - var TaskID = ""; - const QueryUrl = { - url: 'https://api.m.jd.com/?appid=memberTaskCenter&functionId=energyProp_list&body=%7B%22source%22%3A%22game%22%7D', - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }; - $nobyda.get(QueryUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.message == "success" && cc.data.length > 0) { - for (var i = 0; i < cc.data.length; i++) { - if (cc.data[i].thaw_time == 0) { - TaskID += cc.data[i].id + ","; - } - } - if (TaskID.length > 0) { - TaskID = TaskID.substr(0, TaskID.length - 1).split(",") - console.log("\n天天加速-查询到" + TaskID.length + "个有效道具 " + Details) - } else { - console.log("\n天天加速-暂无有效道具 " + Details) - } - } else { - console.log("\n天天加速-查询无道具 " + Details) - } - } - } catch (eor) { - $nobyda.AnError("查询道具-加速", "SpeedUp", eor, response, data) - } finally { - resolve(TaskID) - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }).then(async (CID) => { - await new Promise(resolve => { - var NumTask = 0 - if (CID) { - var count = 0 - for (var i = 0; i < CID.length; i++) { - const TUrl = { - url: 'https://api.m.jd.com/?appid=memberTaskCenter&functionId=energyProp_gain&body=%7B%22source%22%3A%22game%22%2C%22energy_id%22%3A' + CID[i] + '%7D', - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }; - $nobyda.get(TUrl, function(error, response, data) { - try { - count++ - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - console.log("\n天天加速-尝试领取第" + count + "个道具 " + Details) - if (cc.message == 'success') { - NumTask += 1 - } - } - } catch (eor) { - $nobyda.AnError("领取道具-加速", "SpeedUp", eor, response, data) - } finally { - if (CID.length == count) { - if (CID.length == NumTask) $nobyda.isAlltasks = true; //避免重复查询 - console.log("\n天天加速-已成功领取" + NumTask + "个道具") - resolve(NumTask) - } - } - }) - } - if (out) setTimeout(resolve, out + s) - } else { - $nobyda.isAlltasks = true; //避免重复查询 - resolve(NumTask) - } - }) - }) -} - -function JDQueryTaskID(s) { - return new Promise(resolve => { - var TaskCID = "" - setTimeout(() => { - const EUrl = { - url: 'https://api.m.jd.com/?appid=memberTaskCenter&functionId=energyProp_usalbeList&body=%7B%22source%22%3A%22game%22%7D', - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }; - $nobyda.get(EUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.data.length > 0) { - for (var i = 0; i < cc.data.length; i++) { - if (cc.data[i].id) { - TaskCID += cc.data[i].id + ","; - } - } - if (TaskCID.length > 0) { - TaskCID = TaskCID.substr(0, TaskCID.length - 1).split(",") - console.log(`\n天天加速-查询成功${TaskCID.length}个道具ID ${Details}`) - } else { - console.log(`\n天天加速-暂无有效道具ID ${Details}`) - } - } else { - console.log(`\n天天加速-查询无道具ID ${Details}`) - } - } - } catch (eor) { - $nobyda.AnError("查询号码-加速", "SpeedUp", eor, response, data) - } finally { - resolve(TaskCID) - } - }) - }, s + 200) - if (out) setTimeout(resolve, out + s) - }); -} - -function JDUseProps(s, PropID) { - return new Promise(async (resolve) => { - $nobyda.PropCount = 0 - $nobyda.PropNumTask = 0 - if (!PropID) return resolve() - for (var i = 0; i < PropID.length; i++) { - const sep = await new Promise(resolve => { - $nobyda.get({ - url: `https://api.m.jd.com/?appid=memberTaskCenter&functionId=energyProp_use&body=%7B%22source%22%3A%22game%22%2C%22energy_id%22%3A%22${PropID[i]}%22%7D`, - headers: { - Referer: 'https://h5.m.jd.com/babelDiy/Zeus/6yCQo2eDJPbyPXrC3eMCtMWZ9ey/index.html', - Cookie: KEY - } - }, (error, response, data) => { - try { - $nobyda.PropCount++ - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - console.log(`\n天天加速-尝试使用第${$nobyda.PropCount}个道具 (${s/1000}s)${Details}`) - if (cc.message == 'success' && cc.success == true) { - $nobyda.PropNumTask += 1 - } - } - } catch (eor) { - $nobyda.AnError("使用道具-加速", "SpeedUp", eor, response, data) - } finally { - if (PropID.length == $nobyda.PropCount) { - if ($nobyda.PropNumTask) $nobyda.ItemIsUsed = true; - console.log(`\n天天加速-已成功使用${$nobyda.PropNumTask}个道具`) - resolve(true) - } else { - setTimeout(resolve, s) - } - } - }) - }) - if (sep) resolve($nobyda.PropNumTask); - } - }); -} - -function JingDongSubsidy(s) { - merge.subsidy = {}; - return new Promise(resolve => { - if (disable("subsidy")) return resolve() - setTimeout(() => { - const subsidyUrl = { - url: 'https://ms.jr.jd.com/gw/generic/uc/h5/m/signIn7', - headers: { - Referer: "https://active.jd.com/forever/cashback/index", - Cookie: KEY - } - }; - $nobyda.get(subsidyUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - if (cc.resultCode == 0 && cc.resultData.data.thisAmount) { - console.log("\n" + "京东商城-金贴签到成功 " + Details) - merge.subsidy.subsidy = cc.resultData.data.thisAmountStr - merge.subsidy.notify = `京东商城-金贴: 成功, 明细: ${merge.subsidy.subsidy||`无`}金贴 💰` - merge.subsidy.success = 1 - } else { - console.log("\n" + "京东商城-金贴签到失败 " + Details) - merge.subsidy.fail = 1 - if (data.match(/已存在|"thisAmount":0/)) { - merge.subsidy.notify = "京东商城-金贴: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/请先登录/)) { - merge.subsidy.notify = "京东商城-金贴: 失败, 原因: Cookie失效‼️" - } else { - merge.subsidy.notify = "京东商城-金贴: 失败, 原因: 未知 ⚠️" - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-金贴", "subsidy", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingRongDoll(s, key, title, code, type, num, award, belong) { - merge[key] = {}; - return new Promise(resolve => { - if (disable(key)) return resolve() - setTimeout(() => { - const DollUrl = { - url: "https://nu.jr.jd.com/gw/generic/jrm/h5/m/process", - headers: { - Cookie: KEY - }, - body: `reqData=${encodeURIComponent(`{"actCode":"${code}","type":${type?type:`3`}${code=='F68B2C3E71'?`,"frontParam":{"belong":"${belong}"}`:code==`1DF13833F7`?`,"frontParam":{"channel":"JR","belong":4}`:``}}`)}` - }; - $nobyda.post(DollUrl, async function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - var cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.resultCode == 0) { - if (cc.resultData.data.businessData != null) { - console.log(`\n${title}查询成功 ${Details}`) - if (cc.resultData.data.businessData.pickStatus == 2) { - if (data.match(/\"rewardPrice\":\"\d.*?\"/)) { - const JRDoll_bean = data.match(/\"rewardPrice\":\"(\d.*?)\"/)[1] - const JRDoll_type = data.match(/\"rewardName\":\"金贴奖励\"/) ? true : false - await JingRongDoll(s, key, title, code, '4', JRDoll_bean, JRDoll_type) - } else { - merge[key].success = 1 - merge[key].notify = `${title}: 成功, 明细: 无奖励 🐶` - } - } else if (code == 'F68B2C3E71' || code == '1DF13833F7') { - if (!data.match(/"businessCode":"30\dss?q"/)) { - merge[key].success = 1 - const ct = data.match(/\"count\":\"?(\d.*?)\"?,/) - if (code == 'F68B2C3E71' && belong == 'xianjin') { - merge[key].Money = ct ? ct[1] > 9 ? `0.${ct[1]}` : `0.0${ct[1]}` : 0 - merge[key].notify = `${title}: 成功, 明细: ${merge[key].Money||`无`}现金 💰` - } else if (code == 'F68B2C3E71' && belong == 'jingdou') { - merge[key].bean = ct ? ct[1] : 0; - merge[key].notify = `${title}: 成功, 明细: ${merge[key].bean||`无`}京豆 🐶` - } else if (code == '1DF13833F7') { - merge[key].subsidy = ct ? ct[1] : 0; - merge[key].notify = `${title}: 成功, 明细: ${merge[key].subsidy||`无`}金贴 💰` - } - } else { - const es = cc.resultData.data.businessMsg - const ep = cc.resultData.data.businessData.businessMsg - const tp = data.match(/已领取|300ss?q/) ? `已签过` : `${ep||es||cc.resultMsg||`未知`}` - merge[key].notify = `${title}: 失败, 原因: ${tp} ⚠️` - merge[key].fail = 1 - } - } else { - merge[key].notify = `${title}: 失败, 原因: 已签过 ⚠️`; - merge[key].fail = 1 - } - } else if (cc.resultData.data.businessCode == 200) { - console.log(`\n${title}签到成功 ${Details}`) - if (!award) { - merge[key].bean = num ? num.match(/\d+/)[0] : 0 - } else { - merge[key].subsidy = num || 0 - } - merge[key].success = 1 - merge[key].notify = `${title}: 成功, 明细: ${(award?num:merge[key].bean)||`无`}${award?`金贴 💰`:`京豆 🐶`}` - } else { - console.log(`\n${title}领取异常 ${Details}`) - if (num) console.log(`\n${title} 请尝试手动领取, 预计可得${num}${award?`金贴`:`京豆`}: \nhttps://uf1.jr.jd.com/up/redEnvelopes/index.html?actCode=${code}\n`); - merge[key].fail = 1; - merge[key].notify = `${title}: 失败, 原因: 领取异常 ⚠️`; - } - } else { - console.log(`\n${title}签到失败 ${Details}`) - const redata = typeof(cc.resultData) == 'string' ? cc.resultData : '' - merge[key].notify = `${title}: 失败, ${cc.resultCode==3?`原因: Cookie失效‼️`:`${redata||'原因: 未知 ⚠️'}`}` - merge[key].fail = 1; - } - } - } catch (eor) { - $nobyda.AnError(title, key, eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingDongGetCash(s) { - merge.JDGetCash = {}; - return new Promise(resolve => { - if (disable("JDGetCash")) return resolve() - setTimeout(() => { - const GetCashUrl = { - url: 'https://api.m.jd.com/client.action?functionId=cash_sign&body=%7B%22remind%22%3A0%2C%22inviteCode%22%3A%22%22%2C%22type%22%3A0%2C%22breakReward%22%3A0%7D&client=apple&clientVersion=9.0.8&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&sign=7e2f8bcec13978a691567257af4fdce9&st=1596954745073&sv=111', - headers: { - Cookie: KEY, - } - }; - $nobyda.get(GetCashUrl, function(error, response, data) { - try { - if (error) { - throw new Error(error) - } else { - const cc = JSON.parse(data); - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.data.success && cc.data.result) { - console.log("\n" + "京东商城-现金签到成功 " + Details) - merge.JDGetCash.success = 1 - merge.JDGetCash.Money = cc.data.result.signCash || 0 - merge.JDGetCash.notify = `京东商城-现金: 成功, 明细: ${cc.data.result.signCash||`无`}现金 💰` - } else { - console.log("\n" + "京东商城-现金签到失败 " + Details) - merge.JDGetCash.fail = 1 - if (data.match(/\"bizCode\":201|已经签过/)) { - merge.JDGetCash.notify = "京东商城-现金: 失败, 原因: 已签过 ⚠️" - } else if (data.match(/\"code\":300|退出登录/)) { - merge.JDGetCash.notify = "京东商城-现金: 失败, 原因: Cookie失效‼️" - } else { - merge.JDGetCash.notify = "京东商城-现金: 失败, 原因: 未知 ⚠️" - } - } - } - } catch (eor) { - $nobyda.AnError("京东商城-现金", "JDGetCash", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JingDongStore(s) { - merge.JDGStore = {}; - return new Promise(resolve => { - if (disable("JDGStore")) return resolve() - setTimeout(() => { - $nobyda.get({ - url: 'https://api.m.jd.com/api?appid=jdsupermarket&functionId=smtg_sign&clientVersion=8.0.0&client=m&body=%7B%7D', - headers: { - Cookie: KEY, - Origin: `https://jdsupermarket.jd.com` - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const cc = JSON.parse(data); - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.data && cc.data.success === true && cc.data.bizCode === 0) { - console.log(`\n京东商城-超市签到成功 ${Details}`) - merge.JDGStore.success = 1 - merge.JDGStore.bean = cc.data.result.jdBeanCount || 0 - merge.JDGStore.notify = `京东商城-超市: 成功, 明细: ${merge.JDGStore.bean||`无`}京豆 🐶` - } else { - if (!cc.data) cc.data = {} - console.log(`\n京东商城-超市签到失败 ${Details}`) - const tp = cc.data.bizCode == 811 ? `已签过` : cc.data.bizCode == 300 ? `Cookie失效` : `${cc.data.bizMsg||`未知`}` - merge.JDGStore.notify = `京东商城-超市: 失败, 原因: ${tp}${cc.data.bizCode==300?`‼️`:` ⚠️`}` - merge.JDGStore.fail = 1 - } - } catch (eor) { - $nobyda.AnError("京东商城-超市", "JDGStore", eor, response, data) - } finally { - resolve() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }); -} - -function JDSecKilling(s) { - merge.JDSecKill = {}; - return new Promise((resolve, reject) => { - if (disable("JDSecKill")) return reject(); - setTimeout(() => { - $nobyda.post({ - url: 'https://api.m.jd.com/client.action', - headers: { - Cookie: KEY, - Origin: 'https://h5.m.jd.com' - }, - body: 'functionId=freshManHomePage&body=%7B%7D&client=wh5&appid=SecKill2020' - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data); - if (cc.code == 203 || cc.code == 3 || cc.code == 101) { - merge.JDSecKill.notify = `京东秒杀-红包: 失败, 原因: Cookie失效‼️`; - } else if (cc.result && cc.result.projectId && cc.result.taskId) { - console.log(`\n京东秒杀-红包查询成功 ${Details}`) - return resolve({ - projectId: cc.result.projectId, - taskId: cc.result.taskId - }) - } else { - merge.JDSecKill.notify = `京东秒杀-红包: 失败, 暂无有效活动 ⚠️`; - } - merge.JDSecKill.fail = 1; - console.log(`\n京东秒杀-红包查询失败 ${Details}`) - reject() - } catch (eor) { - $nobyda.AnError("京东秒杀-查询", "JDSecKill", eor, response, data) - reject() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }).then(async (id) => { - await new Promise(resolve => { - $nobyda.post({ - url: 'https://api.m.jd.com/client.action', - headers: { - Cookie: KEY, - Origin: 'https://h5.m.jd.com' - }, - body: `functionId=doInteractiveAssignment&body=%7B%22encryptProjectId%22%3A%22${id.projectId}%22%2C%22encryptAssignmentId%22%3A%22${id.taskId}%22%2C%22completionFlag%22%3Atrue%7D&client=wh5&appid=SecKill2020` - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data); - if (cc.msg == 'success' && cc.subCode == 0) { - console.log(`\n京东秒杀-红包签到成功 ${Details}`); - const qt = data.match(/"discount":(\d.*?),/); - merge.JDSecKill.success = 1; - merge.JDSecKill.Cash = qt ? qt[1] : 0; - merge.JDSecKill.notify = `京东秒杀-红包: 成功, 明细: ${merge.JDSecKill.Cash||`无`}红包 🧧`; - } else { - console.log(`\n京东秒杀-红包签到失败 ${Details}`); - merge.JDSecKill.fail = 1; - merge.JDSecKill.notify = `京东秒杀-红包: 失败, ${cc.subCode==103?`原因: 已领取`:cc.msg?cc.msg:`原因: 未知`} ⚠️`; - } - } catch (eor) { - $nobyda.AnError("京东秒杀-领取", "JDSecKill", eor, response, data); - } finally { - resolve(); - } - }) - }) - }, () => {}); -} - -function JRLuckyLottery(s) { //https://jdda.jd.com/app/hd/#/turntable - merge.JRLottery = {}; - return new Promise(resolve => { - if (disable("JRLottery")) return resolve() - setTimeout(() => { - $nobyda.post({ - url: 'https://ms.jr.jd.com/gw/generic/syh_yxmx/h5/m/handleSign', - headers: { - Cookie: KEY - }, - body: `reqData=${encodeURIComponent(`{"activityNo":"e2d1b240d5674def8178be6b4faac5b6","signType":"1","encryptSign":""}`)}` - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const cc = JSON.parse(data); - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.resultCode == 0 && cc.resultData && cc.resultData.resultCode == 0) { - console.log(`\n京东金融-抽奖签到成功 ${Details}`); - merge.JRLottery.success = 1; - merge.JRLottery.bean = cc.resultData.data.rewardList[0].rewardCount || 0 - merge.JRLottery.notify = `京东金融-抽奖: 成功, 明细: ${merge.JRLottery.bean||`无`}京豆 🐶`; - } else { - console.log(`\n京东金融-抽奖签到失败 ${Details}`); - const tp = data.match(/重复签到/) ? `已签过` : cc.resultCode == 3 ? `Cookie失效` : `${cc.resultMsg||`未知`}`; - merge.JRLottery.notify = `京东金融-抽奖: 失败, 原因: ${tp}${cc.resultCode==3?`‼️`:` ⚠️`}`; - merge.JRLottery.fail = 1; - } - } catch (eor) { - $nobyda.AnError("京东金融-抽奖", "JRLottery", eor, response, data); - } finally { - resolve(); - } - }) - }, s) - if (out) setTimeout(resolve, out + s); - }); -} - -function JingDongBuyCar(s, ActId) { - merge.JDBuyCar = {}; - return new Promise((resolve, reject) => { - if (disable("JDBuyCar")) return reject(); - setTimeout(() => { - $nobyda.get({ - url: 'https://cgame-stadium.jd.com/api/v1/first/login', - headers: { - Cookie: KEY, - ActivityId: ActId - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - console.log(`\n京东汽车-检查签到状态 ${Details}`) - const cc = JSON.parse(data); - if (cc.status && cc.data && cc.data.firstLoginStatus) { - resolve() - } else { - const qt = cc.status && cc.data && cc.data.firstLoginStatus === false ? `已签过` : cc.error && cc.error.code == 2000 ? `Cookie失效` : cc.error && cc.error.msg ? cc.error.msg : `未知` - merge.JDBuyCar.notify = `京东商城-汽车: 失败, 原因: ${qt}${cc.error&&cc.error.code==2000?`‼️`:` ⚠️`}` - merge.JDBuyCar.fail = 1; - reject() - } - } catch (eor) { - $nobyda.AnError("京东汽车-状态", "JDBuyCar", eor, response, data) - reject() - } - }) - }, s) - if (out) setTimeout(resolve, out + s) - }).then(async () => { - await new Promise(resolve => { - $nobyda.post({ - url: 'https://cgame-stadium.jd.com/api/v1/sign', - headers: { - Cookie: KEY, - ActivityId: ActId - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data); - if (cc.status === true) { - console.log(`\n京东商城-汽车签到成功 ${Details}`); - merge.JDBuyCar.success = 1; - merge.JDBuyCar.bean = cc.data && cc.data.beanNum ? cc.data.beanNum : 0 - merge.JDBuyCar.notify = `京东商城-汽车: 成功, 明细: ${merge.JDBuyCar.bean||`无`}京豆 🐶`; - } else { - console.log(`\n京东商城-汽车签到失败 ${Details}`); - merge.JDBuyCar.fail = 1; - merge.JDBuyCar.notify = `京东商城-汽车: 失败, ${cc.error&&cc.error.msg?cc.error.msg:`原因: 未知`} ⚠️`; - } - } catch (eor) { - $nobyda.AnError("京东汽车-签到", "JDBuyCar", eor, response, data); - } finally { - resolve(); - } - }) - }) - }, () => {}); -} - -function TotalSteel() { - merge.TotalSteel = {}; - return new Promise(resolve => { - if (disable("TSteel")) return resolve() - $nobyda.get({ - url: 'https://coin.jd.com/m/gb/getBaseInfo.html', - headers: { - Cookie: KEY - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - if (data.match(/(\"gbBalance\":\d+)/)) { - console.log("\n" + "京东-总钢镚查询成功 " + Details) - const cc = JSON.parse(data) - merge.TotalSteel.TSteel = cc.gbBalance - } else { - console.log("\n" + "京东-总钢镚查询失败 " + Details) - } - } catch (eor) { - $nobyda.AnError("账户钢镚-查询", "TotalSteel", eor, response, data) - } finally { - resolve() - } - }) - if (out) setTimeout(resolve, out) - }); -} - -function TotalBean() { - merge.TotalBean = {}; - return new Promise(resolve => { - if (disable("Qbear")) return resolve() - $nobyda.post({ - url: 'https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2', - headers: { - Cookie: KEY, - Referer: "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2" - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - const cc = JSON.parse(data) - $nobyda.headUrl = cc.base.headImageUrl - if (cc.base.jdNum != 0) { - console.log("\n" + "京东-总京豆查询成功 " + Details) - merge.TotalBean.Qbear = cc.base.jdNum - } else { - console.log("\n" + "京东-总京豆查询失败 " + Details) - } - if (data.match(/\"nickname\" ?: ?\"(.+?)\",/)) { - merge.TotalBean.nickname = cc.base.nickname - } else if (data.match(/\"no ?login\.?\"/)) { - merge.TotalBean.nickname = "Cookie失效 ‼️" - } else { - merge.TotalBean.nickname = ''; - } - } catch (eor) { - $nobyda.AnError("账户京豆-查询", "TotalBean", eor, response, data) - } finally { - resolve() - } - }) - if (out) setTimeout(resolve, out) - }); -} - -function TotalCash() { - merge.TotalCash = {}; - return new Promise(resolve => { - if (disable("TCash")) return resolve() - $nobyda.post({ - url: 'https://api.m.jd.com/client.action?functionId=myhongbao_balance', - headers: { - Cookie: KEY - }, - body: "body=%7B%22fp%22%3A%22-1%22%2C%22appToken%22%3A%22apphongbao_token%22%2C%22childActivityUrl%22%3A%22-1%22%2C%22country%22%3A%22cn%22%2C%22openId%22%3A%22-1%22%2C%22childActivityId%22%3A%22-1%22%2C%22applicantErp%22%3A%22-1%22%2C%22platformId%22%3A%22appHongBao%22%2C%22isRvc%22%3A%22-1%22%2C%22orgType%22%3A%222%22%2C%22activityType%22%3A%221%22%2C%22shshshfpb%22%3A%22-1%22%2C%22platformToken%22%3A%22apphongbao_token%22%2C%22organization%22%3A%22JD%22%2C%22pageClickKey%22%3A%22-1%22%2C%22platform%22%3A%221%22%2C%22eid%22%3A%22-1%22%2C%22appId%22%3A%22appHongBao%22%2C%22childActiveName%22%3A%22-1%22%2C%22shshshfp%22%3A%22-1%22%2C%22jda%22%3A%22-1%22%2C%22extend%22%3A%22-1%22%2C%22shshshfpa%22%3A%22-1%22%2C%22activityArea%22%3A%22-1%22%2C%22childActivityTime%22%3A%22-1%22%7D&client=apple&clientVersion=8.5.0&d_brand=apple&networklibtype=JDNetworkBaseAF&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&sign=fdc04c3ab0ee9148f947d24fb087b55d&st=1581245397648&sv=120" - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const Details = LogDetails ? "response:\n" + data : ''; - if (data.match(/(\"totalBalance\":\d+)/)) { - console.log("\n" + "京东-总红包查询成功 " + Details) - const cc = JSON.parse(data) - merge.TotalCash.TCash = cc.totalBalance - } else { - console.log("\n" + "京东-总红包查询失败 " + Details) - } - } catch (eor) { - $nobyda.AnError("账户红包-查询", "TotalCash", eor, response, data) - } finally { - resolve() - } - }) - if (out) setTimeout(resolve, out) - }); -} - -function TotalSubsidy() { - merge.TotalSubsidy = {}; - return new Promise(resolve => { - if (disable("TotalSubsidy")) return resolve() - $nobyda.get({ - url: 'https://ms.jr.jd.com/gw/generic/uc/h5/m/mySubsidyBalance', - headers: { - Cookie: KEY, - Referer: 'https://active.jd.com/forever/cashback/index?channellv=wojingqb' - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.resultCode == 0 && cc.resultData && cc.resultData.data) { - console.log("\n京东-总金贴查询成功 " + Details) - merge.TotalSubsidy.TSubsidy = cc.resultData.data.balance || 0 - } else { - console.log("\n京东-总金贴查询失败 " + Details) - } - } catch (eor) { - $nobyda.AnError("账户金贴-查询", "TotalSubsidy", eor, response, data) - } finally { - resolve() - } - }) - if (out) setTimeout(resolve, out) - }); -} - -function TotalMoney() { - merge.TotalMoney = {}; - return new Promise(resolve => { - if (disable("TotalMoney")) return resolve() - $nobyda.get({ - url: 'https://api.m.jd.com/client.action?functionId=cash_exchangePage&body=%7B%7D&build=167398&client=apple&clientVersion=9.1.9&openudid=1fce88cd05c42fe2b054e846f11bdf33f016d676&sign=762a8e894dea8cbfd91cce4dd5714bc5&st=1602179446935&sv=102', - headers: { - Cookie: KEY - } - }, (error, response, data) => { - try { - if (error) throw new Error(error); - const cc = JSON.parse(data) - const Details = LogDetails ? "response:\n" + data : ''; - if (cc.code == 0 && cc.data && cc.data.bizCode == 0 && cc.data.result) { - console.log("\n京东-总现金查询成功 " + Details) - merge.TotalMoney.TMoney = cc.data.result.totalMoney || 0 - } else { - console.log("\n京东-总现金查询失败 " + Details) - } - } catch (eor) { - $nobyda.AnError("账户现金-查询", "TotalMoney", eor, response, data) - } finally { - resolve() - } - }) - if (out) setTimeout(resolve, out) - }); -} - -function disable(Val, name, way) { - const read = $nobyda.read("JD_DailyBonusDisables") - const annal = $nobyda.read("JD_Crash_" + Val) - if (annal && way == 1 && boxdis) { - var Crash = $nobyda.write("", "JD_Crash_" + Val) - if (read) { - if (read.indexOf(Val) == -1) { - var Crash = $nobyda.write(`${read},${Val}`, "JD_DailyBonusDisables") - console.log(`\n${name}-触发自动禁用 ‼️`) - merge[Val].notify = `${name}: 崩溃, 触发自动禁用 ‼️` - merge[Val].error = 1 - $nobyda.disable = 1 - } - } else { - var Crash = $nobyda.write(Val, "JD_DailyBonusDisables") - console.log(`\n${name}-触发自动禁用 ‼️`) - merge[Val].notify = `${name}: 崩溃, 触发自动禁用 ‼️` - merge[Val].error = 1 - $nobyda.disable = 1 - } - return true - } else if (way == 1 && boxdis) { - var Crash = $nobyda.write(name, "JD_Crash_" + Val) - } else if (way == 2 && annal) { - var Crash = $nobyda.write("", "JD_Crash_" + Val) - } - if (read && read.indexOf(Val) != -1) { - return true - } else { - return false - } -} - -function Wait(readDelay, ini) { - if (!readDelay || readDelay === '0') return 0 - if (typeof(readDelay) == 'string') { - var readDelay = readDelay.replace(/"|"|'|'/g, ''); //prevent novice - if (readDelay.indexOf('-') == -1) return parseInt(readDelay) || 0; - const raw = readDelay.split("-").map(Number); - const plan = parseInt(Math.random() * (raw[1] - raw[0] + 1) + raw[0], 10); - if (ini) console.log(`\n初始化随机延迟: 最小${raw[0]/1000}秒, 最大${raw[1]/1000}秒`); - // else console.log(`\n预计等待: ${(plan / 1000).toFixed(2)}秒`); - return ini ? readDelay : plan - } else if (typeof(readDelay) == 'number') { - return readDelay > 0 ? readDelay : 0 - } else return 0 -} - -function GetCookie() { - try { - if ($request.method != 'OPTIONS' && $request.headers && $request.url !== 'http://www.apple.com/') { - let acObj = {}; - // 提取ck数据 - let CV = ($request.headers['Cookie'] || $request.headers['cookie'] || '').replace(/ /g, ''); - let ckItems = CV.split(';').filter(s => /^(pt_key|pt_pin)=.+/.test(s)).sort(); - if (ckItems.length == 2) { - acObj.cookie = ckItems.join(';') + ';'; - acObj.userName = decodeURIComponent(acObj.cookie.match(/pt_pin=(.+?);/)[1]); - } - // 无cookie数据进行提示,有ck数据,找到账号位进行存储 - if (!acObj.cookie) { - $nobyda.notify("写入京东Cookie失败", "", "请查看脚本内说明, 登录网页获取 ‼️") - return - } else { - const allCk = [$nobyda.read('CookieJD'), $nobyda.read('CookieJD2')]; - const ocks = $nobyda.read('CookiesJD'); - let oldCks = []; - try { - oldCks = (ocks && JSON.parse(ocks)) || []; - } catch (e) { - console.log(`写入京东Cookie时转换京东扩展账号数据CookiesJD异常,扩展账号信息:\n${ocks}`) - oldCks = []; - } - oldCks.forEach(item => allCk.push(item.cookie)); - let [status, seatNo] = chooseSeatNo(acObj.cookie, allCk, /pt_pin=(.+?);/); - if (status) { - if (status > 0) { - let WT = ''; - if (seatNo < 2) { - WT = $nobyda.write(acObj.cookie, `CookieJD${seatNo?seatNo+1:''}`); - } else { - if (oldCks.length <= seatNo - 2) { - oldCks.push(acObj); - } else { - oldCks[seatNo - 2] = acObj; - } - WT = $nobyda.write(JSON.stringify(oldCks, null, 2), 'CookiesJD'); - } - $nobyda.notify(`用户名: ${acObj.userName}`, ``, `${status==2?`更新`:`写入`}京东 [账号${seatNo+1}] Cookie${WT?`成功 🎉`:`失败 ‼️`}`) - } else { - console.log(`\n用户名: ${acObj.userName}\n与历史京东 [账号${seatNo+1}] Cookie相同, 跳过写入 ⚠️`) - } - } - } - } else if ($request.url === 'http://www.apple.com/') { - $nobyda.notify("京东签到", "", "类型错误, 手动运行请选择上下文环境为Cron ⚠️"); - } else { - $nobyda.notify("京东签到", "写入Cookie失败", "请检查匹配URL或配置内脚本类型 ⚠️"); - } - } catch (eor) { - $nobyda.write("", "CookieJD") - $nobyda.write("", "CookieJD2") - $nobyda.write("", "CookiesJD") - $nobyda.notify("写入京东Cookie失败", "", '已尝试清空历史Cookie, 请重试 ⚠️') - console.log(`\n写入京东Cookie出现错误 ‼️\n${JSON.stringify(eor)}\n\n${eor}\n\n${JSON.stringify($request.headers)}\n`) - } finally { - $nobyda.done() - } -} -// 获取新ck存放位置 -function chooseSeatNo(newCk, allCk, reg) { - // status-获取操作状态-0:异常、1-新增、2-更新、-1-相同 seatNo-存储位置,默认添加到最后面 - let [status, seatNo] = [1, allCk.length]; - try { - let newId = ((newCk || '').match(reg) || ['', ''])[1]; - for (let i = 0, len = allCk.length; i < len; i++) { - let oldId = ((allCk[i] || '').match(reg) || ['', ''])[1]; - if (oldId) { - // 账号位数据存在,判断是否为当前账号的数据,不是则跳过,否则设置数据并跳出循环 - if (oldId == newId) { - seatNo = i; - status = newCk == allCk[i] ? -1 : 2; - break; - } - } else if (seatNo == len) { - // 旧cookie无效且在初始账号位,先标记新cookie数据存储于此位置 - seatNo = i; - status = 1; - } - } - } catch (e) { - // 异常时,不操作cookie - status = 0; - console.log(`\n查询账号存储位置异常 ‼️\n${JSON.stringify(e)}\n\n${e}\n`) - } - return [status, seatNo]; -} - -// Modified from yichahucha -function nobyda() { - const start = Date.now() - const isRequest = typeof $request != "undefined" - const isSurge = typeof $httpClient != "undefined" - const isQuanX = typeof $task != "undefined" - const isLoon = typeof $loon != "undefined" - const isJSBox = typeof $app != "undefined" && typeof $http != "undefined" - const isNode = typeof require == "function" && !isJSBox; - const NodeSet = 'CookieSet.json' - const node = (() => { - if (isNode) { - const request = require('request'); - const fs = require("fs"); - return ({ - request, - fs - }) - } else { - return (null) - } - })() - const notify = (title, subtitle, message, rawopts) => { - const Opts = (rawopts) => { //Modified from https://github.com/chavyleung/scripts/blob/master/Env.js - if (!rawopts) return rawopts - if (typeof rawopts === 'string') { - if (isLoon) return rawopts - else if (isQuanX) return { - 'open-url': rawopts - } - else if (isSurge) return { - url: rawopts - } - else return undefined - } else if (typeof rawopts === 'object') { - if (isLoon) { - let openUrl = rawopts.openUrl || rawopts.url || rawopts['open-url'] - let mediaUrl = rawopts.mediaUrl || rawopts['media-url'] - return { - openUrl, - mediaUrl - } - } else if (isQuanX) { - let openUrl = rawopts['open-url'] || rawopts.url || rawopts.openUrl - let mediaUrl = rawopts['media-url'] || rawopts.mediaUrl - return { - 'open-url': openUrl, - 'media-url': mediaUrl - } - } else if (isSurge) { - let openUrl = rawopts.url || rawopts.openUrl || rawopts['open-url'] - return { - url: openUrl - } - } - } else { - return undefined - } - } - console.log(`${title}\n${subtitle}\n${message}`) - if (isQuanX) $notify(title, subtitle, message, Opts(rawopts)) - if (isSurge) $notification.post(title, subtitle, message, Opts(rawopts)) - if (isJSBox) $push.schedule({ - title: title, - body: subtitle ? subtitle + "\n" + message : message - }) - } - const write = (value, key) => { - if (isQuanX) return $prefs.setValueForKey(value, key) - if (isSurge) return $persistentStore.write(value, key) - if (isNode) { - try { - if (!node.fs.existsSync(NodeSet)) node.fs.writeFileSync(NodeSet, JSON.stringify({})); - const dataValue = JSON.parse(node.fs.readFileSync(NodeSet)); - if (value) dataValue[key] = value; - if (!value) delete dataValue[key]; - return node.fs.writeFileSync(NodeSet, JSON.stringify(dataValue)); - } catch (er) { - return AnError('Node.js持久化写入', null, er); - } - } - if (isJSBox) { - if (!value) return $file.delete(`shared://${key}.txt`); - return $file.write({ - data: $data({ - string: value - }), - path: `shared://${key}.txt` - }) - } - } - const read = (key) => { - if (isQuanX) return $prefs.valueForKey(key) - if (isSurge) return $persistentStore.read(key) - if (isNode) { - try { - if (!node.fs.existsSync(NodeSet)) return null; - const dataValue = JSON.parse(node.fs.readFileSync(NodeSet)) - return dataValue[key] - } catch (er) { - return AnError('Node.js持久化读取', null, er) - } - } - if (isJSBox) { - if (!$file.exists(`shared://${key}.txt`)) return null; - return $file.read(`shared://${key}.txt`).string - } - } - const adapterStatus = (response) => { - if (response) { - if (response.status) { - response["statusCode"] = response.status - } else if (response.statusCode) { - response["status"] = response.statusCode - } - } - return response - } - const get = (options, callback) => { - options.headers['User-Agent'] = 'JD4iPhone/167169 (iPhone; iOS 13.4.1; Scale/3.00)' - if (isQuanX) { - if (typeof options == "string") options = { - url: options - } - options["method"] = "GET" - //options["opts"] = { - // "hints": false - //} - $task.fetch(options).then(response => { - callback(null, adapterStatus(response), response.body) - }, reason => callback(reason.error, null, null)) - } - if (isSurge) { - options.headers['X-Surge-Skip-Scripting'] = false - $httpClient.get(options, (error, response, body) => { - callback(error, adapterStatus(response), body) - }) - } - if (isNode) { - node.request(options, (error, response, body) => { - callback(error, adapterStatus(response), body) - }) - } - if (isJSBox) { - if (typeof options == "string") options = { - url: options - } - options["header"] = options["headers"] - options["handler"] = function(resp) { - let error = resp.error; - if (error) error = JSON.stringify(resp.error) - let body = resp.data; - if (typeof body == "object") body = JSON.stringify(resp.data); - callback(error, adapterStatus(resp.response), body) - }; - $http.get(options); - } - } - const post = (options, callback) => { - options.headers['User-Agent'] = 'JD4iPhone/167169 (iPhone; iOS 13.4.1; Scale/3.00)' - if (options.body) options.headers['Content-Type'] = 'application/x-www-form-urlencoded' - if (isQuanX) { - if (typeof options == "string") options = { - url: options - } - options["method"] = "POST" - //options["opts"] = { - // "hints": false - //} - $task.fetch(options).then(response => { - callback(null, adapterStatus(response), response.body) - }, reason => callback(reason.error, null, null)) - } - if (isSurge) { - options.headers['X-Surge-Skip-Scripting'] = false - $httpClient.post(options, (error, response, body) => { - callback(error, adapterStatus(response), body) - }) - } - if (isNode) { - node.request.post(options, (error, response, body) => { - callback(error, adapterStatus(response), body) - }) - } - if (isJSBox) { - if (typeof options == "string") options = { - url: options - } - options["header"] = options["headers"] - options["handler"] = function(resp) { - let error = resp.error; - if (error) error = JSON.stringify(resp.error) - let body = resp.data; - if (typeof body == "object") body = JSON.stringify(resp.data) - callback(error, adapterStatus(resp.response), body) - } - $http.post(options); - } - } - const AnError = (name, keyname, er, resp, body) => { - if (typeof(merge) != "undefined" && keyname) { - if (!merge[keyname].notify) { - merge[keyname].notify = `${name}: 异常, 已输出日志 ‼️` - } else { - merge[keyname].notify += `\n${name}: 异常, 已输出日志 ‼️ (2)` - } - merge[keyname].error = 1 - } - return console.log(`\n‼️${name}发生错误\n‼️名称: ${er.name}\n‼️描述: ${er.message}${JSON.stringify(er).match(/\"line\"/)?`\n‼️行列: ${JSON.stringify(er)}`:``}${resp&&resp.status?`\n‼️状态: ${resp.status}`:``}${body?`\n‼️响应: ${resp&&resp.status!=503?body:`Omit.`}`:``}`) - } - const time = () => { - const end = ((Date.now() - start) / 1000).toFixed(2) - return console.log('\n签到用时: ' + end + ' 秒') - } - const done = (value = {}) => { - if (isQuanX) return $done(value) - if (isSurge) isRequest ? $done(value) : $done() - } - return { - AnError, - isRequest, - isJSBox, - isSurge, - isQuanX, - isLoon, - isNode, - notify, - write, - read, - get, - post, - time, - done - } -}; -ReadCookie(); diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/gen_cookieset.lua b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/gen_cookieset.lua deleted file mode 100644 index 9809ba3752..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/gen_cookieset.lua +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/lua -local uci = require "luci.model.uci".cursor() -local json = require 'luci.jsonc' - -function write_json(file, content) - local f = assert(io.open(file, 'w')) - f:write(json.stringify(content, 1)) - f:close() -end - - -local data = { - CookiesJD = {}, - JD_DailyBonusDelay = uci:get('jd-dailybonus', '@global[0]', 'stop'), - JD_DailyBonusTimeOut = uci:get('jd-dailybonus', '@global[0]', 'out') -} - -for i, v in pairs( uci:get('jd-dailybonus', '@global[0]', 'Cookies') or {} ) do - table.insert(data.CookiesJD, {["cookie"]=v}) -end - -data.CookiesJD = json.stringify( data.CookiesJD ) - -write_json('/usr/share/jd-dailybonus/CookieSet.json', data) diff --git a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh b/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh deleted file mode 100755 index 1141d77b93..0000000000 --- a/package/ctcgfw/luci-app-jd-dailybonus/root/usr/share/jd-dailybonus/newapp.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2020 luci-app-jd-dailybonus -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# -# 501 下载脚本出错 -# 101 没有新版本无需更新 -# 0 更新成功 - -NAME=jd-dailybonus -TEMP_SCRIPT=/tmp/JD_DailyBonus.js -JD_SCRIPT=/usr/share/jd-dailybonus/JD_DailyBonus.js -LOG_FILE=/var/log/jd_dailybonus.log -CRON_FILE=/etc/crontabs/root -usage() { - cat <<-EOF - Usage: app.sh [options] - Valid options are: - - -a Add Cron - -n Check - -r Run Script - -u Update Script From Server - -s Save Cookie And Add Cron - -w Background Run With Wechat Message - -h Help -EOF - exit $1 -} - -# Common functions - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -cancel() { - if [ $# -gt 0 ]; then - echo "$1" - fi - exit 1 -} - -add_cron() { - sed -i '/jd-dailybonus/d' $CRON_FILE - [ $(uci_get_by_type global auto_run 0) -eq 1 ] && echo $(uci_get_by_type global auto_run_time_m)' '$(uci_get_by_type global auto_run_time_h)' * * * sh /usr/share/jd-dailybonus/newapp.sh -w' >>$CRON_FILE - [ $(uci_get_by_type global auto_update 0) -eq 1 ] && echo '1 '$(uci_get_by_type global auto_update_time)' * * * sh /usr/share/jd-dailybonus/newapp.sh -u' >>$CRON_FILE - crontab $CRON_FILE - /etc/init.d/cron restart -} - -# Run Script - -notify() { - grep "】: Cookie失效" ${LOG_FILE} >/dev/null - if [ $? -eq 0 ]; then - title="$(date '+%Y年%m月%d日') 京东签到 Cookie 失效" - else - title="$(date '+%Y年%m月%d日') 京东签到" - fi - desc=$(cat ${LOG_FILE} | grep -E '签到号|签到概览|签到奖励|其他奖励|账号总计|其他总计' | sed 's/$/&\n/g') - #serverchan - sckey=$(uci_get_by_type global serverchan) - if [ ! -z $sckey ]; then - serverurlflag=$(uci_get_by_type global serverurl) - serverurl=https://sc.ftqq.com/ - if [ "$serverurlflag" = "sct" ]; then - serverurl=https://sctapi.ftqq.com/ - fi - wget-ssl -q --output-document=/dev/null --post-data="text=$title~&desp=$desc" $serverurl$sckey.send - fi - - #Dingding - dtoken=$(uci_get_by_type global dd_token) - if [ ! -z $dtoken ]; then - DTJ_FILE=/tmp/jd-djson.json - echo "{\"msgtype\": \"markdown\",\"markdown\": {\"title\":\"${title}\",\"text\":\"${title}
${desc}\"}}" > ${DTJ_FILE} - wget-ssl -q --output-document=/dev/null --header="Content-Type: application/json" --post-file=/tmp/jd-djson.json "https://oapi.dingtalk.com/robot/send?access_token=${dtoken}" - fi - - #telegram - TG_BOT_TOKEN=$(uci_get_by_type global tg_token) - TG_USER_ID=$(uci_get_by_type global tg_userid) - API_URL="https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage" - if [ ! -z $TG_BOT_TOKEN ] && [ ! -z $TG_USER_ID ]; then - text="*$title* - -\`\`\` -"$desc" -=============================== -本消息来自京东签到插件 jd-dailybonus -\`\`\`" - wget-ssl -q --output-document=/dev/null --post-data="chat_id=$TG_USER_ID&text=$text&parse_mode=markdownv2" $API_URL - fi -} - -run() { - echo -e $(date '+%Y-%m-%d %H:%M:%S %A') >$LOG_FILE 2>/dev/null - [ ! -f "/usr/bin/node" ] && echo -e "未安装node.js,请安装后再试!\nNode.js is not installed, please try again after installation!" >>$LOG_FILE && exit 1 - (cd /usr/share/jd-dailybonus/ && node $JD_SCRIPT >>$LOG_FILE 2>/dev/null && notify &) -} - -save() { - lua /usr/share/jd-dailybonus/gen_cookieset.lua - add_cron -} - -# Update Script From Server -download() { - REMOTE_SCRIPT=$(uci_get_by_type global remote_url) - wget-ssl --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" --no-check-certificate -t 3 -T 10 -q $REMOTE_SCRIPT -O $TEMP_SCRIPT - return $? -} - -get_ver() { - echo $(cat $1 | sed -n '/更新时间/p' | awk '{for (i=1;i<=NF;i++){if ($i ~/v/) {print $i}}}' | sed 's/v//') -} - -check_ver() { - download - if [ $? -ne 0 ]; then - cancel "501" - else - echo $(get_ver $TEMP_SCRIPT) - fi -} - -update() { - download - if [ $? -ne 0 ]; then - cancel "501" - fi - if [ -e $JD_SCRIPT ]; then - local_ver=$(get_ver $JD_SCRIPT) - else - local_ver=0 - fi - remote_ver=$(get_ver $TEMP_SCRIPT) - cp -r $TEMP_SCRIPT $JD_SCRIPT - uci set jd-dailybonus.@global[0].version=$remote_ver - uci commit jd-dailybonus - cancel "0" -} - -while getopts ":alnruswh" arg; do - case "$arg" in - a) - add_cron - exit 0 - ;; - l) - notify - exit 0 - ;; - n) - check_ver - exit 0 - ;; - r) - run - exit 0 - ;; - u) - update - exit 0 - ;; - s) - save - exit 0 - ;; - w) - run - exit 0 - ;; - h) - usage 0 - ;; - esac -done diff --git a/package/ctcgfw/luci-app-k3screenctrl/Makefile b/package/ctcgfw/luci-app-k3screenctrl/Makefile deleted file mode 100644 index 9724f251f4..0000000000 --- a/package/ctcgfw/luci-app-k3screenctrl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2018 XiaoShan mivm.cn - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for k3screenctrl -LUCI_DESCRIPTION:=LuCI Support for k3screenctrl. -LUCI_DEPENDS:=+phicomm-k3screenctrl -LUCI_PKGARCH:=all - -PKG_NAME:=luci-app-k3screenctrl -PKG_VERSION:=1.1.0 -PKG_RELEASE:=2 - -PKG_LICENSE:=GPLv3 -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Hill - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-k3screenctrl/luasrc/controller/k3screenctrl.lua b/package/ctcgfw/luci-app-k3screenctrl/luasrc/controller/k3screenctrl.lua deleted file mode 100644 index e241c60cb7..0000000000 --- a/package/ctcgfw/luci-app-k3screenctrl/luasrc/controller/k3screenctrl.lua +++ /dev/null @@ -1,10 +0,0 @@ --- Copyright (C) 2018 XiaoShan mivm.cn - -module("luci.controller.k3screenctrl", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/k3screenctrl") then - return - end - entry({"admin","system","k3screenctrl"}, cbi("k3screenctrl"), _("Screen"),60) -end diff --git a/package/ctcgfw/luci-app-k3screenctrl/luasrc/model/cbi/k3screenctrl.lua b/package/ctcgfw/luci-app-k3screenctrl/luasrc/model/cbi/k3screenctrl.lua deleted file mode 100644 index ad7557fe4c..0000000000 --- a/package/ctcgfw/luci-app-k3screenctrl/luasrc/model/cbi/k3screenctrl.lua +++ /dev/null @@ -1,120 +0,0 @@ --- Copyright (C) 2018 XiaoShan mivm.cn - -local m, s ,o - -m = Map("k3screenctrl", translate("Screen"), translate("Customize your device screen")) - -s = m:section(TypedSection, "general", translate("General Setting") ) -s.anonymous = true - -o = s:option(ListValue, "screen_time", translate("Screen time :"), translate("This time no action, the screen will close.")) -o:value("10",translate("10 s")) -o:value("30",translate("30 s")) -o:value("60",translate("60 s")) -o:value("300",translate("5 m")) -o:value("600",translate("10 m")) -o:value("900",translate("15 m")) -o:value("1800",translate("30 m")) -o:value("3600",translate("60 m")) -o.default = 10 -o.rmempty = false - -o = s:option(ListValue, "refresh_time", translate("Refresh interval :"), translate("Screen data refresh interval.")) -o:value("1",translate("1 s")) -o:value("2",translate("2 s")) -o:value("5",translate("5 s")) -o:value("10",translate("10 s")) -o.default = 2 -o.rmempty = false - -o = s:option(ListValue, "update_time", translate("Weather update interval :")) -o:value("0",translate("off")) -o:value("3600",translate("1h")) -o:value("14400",translate("4h")) -o:value("43200",translate("12h")) -o.default = 0 -o.rmempty = false - -o = s:option(Value, "key", translate("Private Key :"), -translate("Input private key, visit: https://docs.seniverse.com/api/start/key.html")) - -o = s:option(Flag, "city_checkip", translate("Check city from ip"), translate("Check city from local ip.")) -o.default = 0 - -o = s:option(Value, "city", translate("City :"), -translate("For more information, visit: https://docs.seniverse.com/api/start/common.html#地点-location")) ---o.rmempty = false - -o = s:option(Flag, "psk_hide", translate("Hide Wireless password")) -o.default = 0 - -o = s:option(Flag, "showmore", translate("Display More Info"), translate("The first page shows more information including: CPU temprature, Load, RAM useage, uptime, etc.")) -o.default = 0 - -o = s:option(Button,"test_print",translate("Test"),translate("Execute k3screenctrl -t and return the result")) -o.inputtitle = translate("Print info") -o.write = function() - luci.sys.call("k3screenctrl -t > /tmp/k3screenctrl/test") - luci.http.redirect(luci.dispatcher.build_url("admin","system","k3screenctrl")) -end - -s = m:section(TypedSection, "device_custom", translate("Device customization") ,translate("Customize the fifth page of device information")) -s.template = "cbi/tblsection" -s.addremove = true -s.anonymous = true - -o = s:option(Value,"mac",translate("Device")) -o.datatype = "macaddr" -o.rmempty = false -luci.sys.net.mac_hints(function(t,a) - o:value(t,"%s (%s)"%{a,t}) -end) - -o = s:option(Value,"name",translate("Hostname")) -o.rmempty = false - -o = s:option(ListValue,"icon",translate("Icon")) -o.rmempty = false -o:value("0",translate("Auto")) -o:value("1",translate("OnePlus")) -o:value("2","360") -o:value("3",translate("Asus")) -o:value("4",translate("Coolpad")) -o:value("5",translate("Dell")) -o:value("6",translate("Haier")) -o:value("7",translate("Hasee")) -o:value("8",translate("Honor")) -o:value("9",translate("HP")) -o:value("10","HTC") -o:value("11",translate("Huawei")) -o:value("12",translate("Apple")) -o:value("13",translate("Lenovo")) -o:value("14",translate("LeEco")) -o:value("15","LG") -o:value("16",translate("Meitu")) -o:value("17",translate("Meizu")) -o:value("18","OPPO") -o:value("19",translate("Phicomm")) -o:value("20",translate("Samsung")) -o:value("21",translate("Smartisan")) -o:value("22",translate("Sony")) -o:value("23","TCL") -o:value("24","ThinkPad") -o:value("25",translate("TongfangPC")) -o:value("26","VIVO") -o:value("27",translate("Microsoft")) -o:value("28",translate("XiaoMi")) -o:value("29",translate("ZTE")) - -if nixio.fs.access("/tmp/k3screenctrl/test") then - s = m:section(TypedSection, "general", translate("Output results")) - s.anonymous = true - o = s:option(TextValue,"test_output_results") - o.readonly = true - o.rows = 30 - o.cfgvalue = function() - return luci.sys.exec("cat /tmp/k3screenctrl/test && rm -f /tmp/k3screenctrl/test") - end -end - -return m diff --git a/package/ctcgfw/luci-app-k3screenctrl/po/zh-cn/k3screenctrl.po b/package/ctcgfw/luci-app-k3screenctrl/po/zh-cn/k3screenctrl.po deleted file mode 100644 index 9474b56ffd..0000000000 --- a/package/ctcgfw/luci-app-k3screenctrl/po/zh-cn/k3screenctrl.po +++ /dev/null @@ -1,185 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "Screen" -msgstr "屏幕" - -msgid "Customize your device screen" -msgstr "自定义你的设备屏幕" - -msgid "General Setting" -msgstr "基本设置" - -msgid "Screen time :" -msgstr "亮屏时间:" - -msgid "This time no action, the screen will close." -msgstr "这段时间没有操作,屏幕将关闭。" - -msgid "Refresh interval :" -msgstr "刷新间隔:" - -msgid "Screen data refresh interval." -msgstr "屏幕数据刷新间隔。" - -msgid "Check city from ip" -msgstr "IP定位" - -msgid "Check city from local ip." -msgstr "通过IP得到城市信息。" - -msgid "City :" -msgstr "城市:" - -msgid "Weather update interval :" -msgstr "天气更新时间间隔:" - -msgid "Private Key :" -msgstr "私钥:" - -msgid "Hide Wireless password" -msgstr "隐藏无线密码" - -msgid "Display More Info" -msgstr "显示更多信息" - -msgid "The first page shows more information including: CPU temprature, Load, RAM useage, uptime, etc." -msgstr "第一页显示更多信息,包括:CPU温度、负载,内存用量,运行时间等。" - -msgid "Test" -msgstr "测试" - -msgid "Print info" -msgstr "输出信息" - -msgid "Execute k3screenctrl -t and return the result" -msgstr "执行 k3screenctrl -t 并返回结果" - -msgid "Output results" -msgstr "输出结果" - -msgid "Device customization" -msgstr "设备自定义" - -msgid "Customize the fifth page of device information" -msgstr "自定义第五页设备信息" - -msgid "Device" -msgstr "设备" - -msgid "Icon" -msgstr "图标" - -msgid "1 s" -msgstr "1 秒" - -msgid "2 s" -msgstr "2 秒" - -msgid "5 s" -msgstr "5 秒" - -msgid "10 s" -msgstr "10 秒" - -msgid "30 s" -msgstr "30 秒" - -msgid "60 s" -msgstr "60 秒" - -msgid "5 m" -msgstr "5 分" - -msgid "10 m" -msgstr "10 分" - -msgid "15 m" -msgstr "15 分" - -msgid "30 m" -msgstr "30 分" - -msgid "60 m" -msgid "60 分" - -msgid "off" -msgid "关闭" - -msgid "1 h" -msgid "1 小时" - -msgid "4 h" -msgid "4 小时" - -msgid "12 h" -msgid "12 小时" - -msgid "Auto" -msgstr "自动" - -msgid "OnePlus" -msgstr "一加" - -msgid "Asus" -msgstr "华硕" - -msgid "Coolpad" -msgstr "酷派" - -msgid "Dell" -msgstr "戴尔" - -msgid "Haier" -msgstr "海尔" - -msgid "Hasee" -msgstr "神舟" - -msgid "Honor" -msgid "荣耀" - -msgid "HP" -msgstr "惠普" - -msgid "Huawei" -msgstr "华为" - -msgid "Apple" -msgstr "苹果" - -msgid "Lenovo" -msgid "联想" - -msgid "LeEco" -msgstr "乐视" - -msgid "Meitu" -msgstr "美图" - -msgid "Meizu" -msgstr "魅族" - -msgid "Phicomm" -msgstr "斐讯" - -msgid "Samsung" -msgstr "三星" - -msgid "Smartisan" -msgstr "锤子" - -msgid "Sony" -msgstr "索尼" - -msgid "TongfangPC" -msgstr "清华同方" - -msgid "Microsoft" -msgstr "微软" - -msgid "XiaoMi" -msgstr "小米" - -msgid "ZTE" -msgstr "中兴" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-k3screenctrl/root/etc/uci-defaults/k3screenctrl b/package/ctcgfw/luci-app-k3screenctrl/root/etc/uci-defaults/k3screenctrl deleted file mode 100755 index 73da7aadcc..0000000000 --- a/package/ctcgfw/luci-app-k3screenctrl/root/etc/uci-defaults/k3screenctrl +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -uci -q batch <<-EOF >/dev/null - delete ucitrack.@k3screenctrl[-1] - add ucitrack k3screenctrl - set ucitrack.@k3screenctrl[-1].init=k3screenctrl - commit ucitrack -EOF -exit 0 diff --git a/package/ctcgfw/luci-app-k3usb/Makefile b/package/ctcgfw/luci-app-k3usb/Makefile deleted file mode 100644 index e94a35aab1..0000000000 --- a/package/ctcgfw/luci-app-k3usb/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2018 XiaoShan mivm.cn - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for k3usb3.0 on or off -LUCI_DESCRIPTION:=LuCI Support for k3usb3.0 on or off. -LUCI_DEPENDS:=@TARGET_bcm53xx_DEVICE_phicomm-k3 -LUCI_PKGARCH:=all - -PKG_NAME:=luci-app-k3usb -PKG_VERSION:=1.1.0 -PKG_RELEASE:=2 - -PKG_LICENSE:=GPLv3 -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Shenzt - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-k3usb/luasrc/controller/k3usb.lua b/package/ctcgfw/luci-app-k3usb/luasrc/controller/k3usb.lua deleted file mode 100644 index 31bcb6d3a7..0000000000 --- a/package/ctcgfw/luci-app-k3usb/luasrc/controller/k3usb.lua +++ /dev/null @@ -1,10 +0,0 @@ --- Copyright (C) 2018 XiaoShan mivm.cn - -module("luci.controller.k3usb", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/k3usb") then - return - end - entry({"admin","system","k3usb"}, cbi("k3usb"), _("k3usb"),60) -end diff --git a/package/ctcgfw/luci-app-k3usb/luasrc/model/cbi/k3usb.lua b/package/ctcgfw/luci-app-k3usb/luasrc/model/cbi/k3usb.lua deleted file mode 100644 index 5a1aa4bea8..0000000000 --- a/package/ctcgfw/luci-app-k3usb/luasrc/model/cbi/k3usb.lua +++ /dev/null @@ -1,13 +0,0 @@ --- Copyright (C) 2018 XiaoShan mivm.cn - -local m, s ,o - -m = Map("k3usb", translate("k3usb"), translate("k3 usb mode")) - -s = m:section(TypedSection, "config", translate("usb mode") ) -s.anonymous = true - -o = s:option(Flag, "usb3_enable", translate("usb3 enable :"), translate("usb3 mode enable")) -o.default = 1 - -return m diff --git a/package/ctcgfw/luci-app-k3usb/po/zh-cn/k3usb.po b/package/ctcgfw/luci-app-k3usb/po/zh-cn/k3usb.po deleted file mode 100644 index 3cf42eba12..0000000000 --- a/package/ctcgfw/luci-app-k3usb/po/zh-cn/k3usb.po +++ /dev/null @@ -1,19 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "usb3 enable :" -msgstr "USB3 开启:" - -msgid "usb3 mode enable" -msgstr "是否开启USB3模式,修改此选项设备将会自动重启" - -msgid "k3usb" -msgstr "K3USB管理" - -msgid "k3 usb mode" -msgstr "开启或禁用USB3" - -msgid "usb mode" -msgstr "USB3管理模式" - - diff --git a/package/ctcgfw/luci-app-k3usb/root/etc/config/k3usb b/package/ctcgfw/luci-app-k3usb/root/etc/config/k3usb deleted file mode 100644 index c71dd937b8..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/etc/config/k3usb +++ /dev/null @@ -1,3 +0,0 @@ -config config usb - option usb3_enable '0' - diff --git a/package/ctcgfw/luci-app-k3usb/root/etc/init.d/k3usb b/package/ctcgfw/luci-app-k3usb/root/etc/init.d/k3usb deleted file mode 100755 index cb506b63d1..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/etc/init.d/k3usb +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=55 -STOP=55 - -usb3_enable=$(uci get k3usb.usb.usb3_enable 2>/dev/null) - -kernel=$(uname -a | awk '{print $3}') - -boot(){ - if [ "$usb3_enable" == "1" ]; then - #usb3 - kmodloader /usr/k3usb/45-phy-bcm-ns-usb3 - kmodloader /usr/k3usb/54-usb3 - - #usb2 - kmodloader /usr/k3usb/35-usb-ehci - kmodloader /usr/k3usb/40-usb2 - kmodloader /usr/k3usb/45-phy-bcm-ns-usb2 - kmodloader /usr/k3usb/50-usb-ohci - - echo "usb switch to usb3 mode!" - else - #usb2 - kmodloader /usr/k3usb/35-usb-ehci - kmodloader /usr/k3usb/40-usb2 - kmodloader /usr/k3usb/45-phy-bcm-ns-usb2 - kmodloader /usr/k3usb/50-usb-ohci - echo "usb switch to usb2 mode!" - fi - - kmodloader /usr/k3usb/usb-storage - kmodloader /usr/k3usb/usb-storage-extras - -} - - -start(){ - if [ "$usb3_enable" == "1" ]; then - if [ -z "$(lsmod | grep usb3)" ]; then - echo "usb change to usb3 mode, will reboot!" - reboot - else - echo "usb mode is usb3 , nothing to do" - fi - else - if [ -n "$(lsmod | grep usb3)" ]; then - echo "usb change usb2 mode, will reboot!" - reboot - else - echo "usb mode is usb2 , nothing to do" - fi - fi -} - -stop(){ - echo "nothing do" -} - -restart(){ - start -} diff --git a/package/ctcgfw/luci-app-k3usb/root/etc/uci-defaults/k3usb b/package/ctcgfw/luci-app-k3usb/root/etc/uci-defaults/k3usb deleted file mode 100755 index 087c903cb8..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/etc/uci-defaults/k3usb +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@k3usb[-1] - add ucitrack k3usb - set ucitrack.@k3usb[-1].init=k3usb - commit ucitrack -EOF - -exit 0 diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/35-usb-ehci b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/35-usb-ehci deleted file mode 100644 index 52ae03a9ab..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/35-usb-ehci +++ /dev/null @@ -1 +0,0 @@ -ehci-hcd diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/40-usb2 b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/40-usb2 deleted file mode 100644 index d9ec9836de..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/40-usb2 +++ /dev/null @@ -1,4 +0,0 @@ -ehci-hcd -ehci-platform -ehci-orion -ehci-atmel diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/45-phy-bcm-ns-usb2 b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/45-phy-bcm-ns-usb2 deleted file mode 100644 index d7364c5eb1..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/45-phy-bcm-ns-usb2 +++ /dev/null @@ -1 +0,0 @@ -phy-bcm-ns-usb2 diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/45-phy-bcm-ns-usb3 b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/45-phy-bcm-ns-usb3 deleted file mode 100644 index e5730da89d..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/45-phy-bcm-ns-usb3 +++ /dev/null @@ -1 +0,0 @@ -phy-bcm-ns-usb3 diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/50-usb-ohci b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/50-usb-ohci deleted file mode 100644 index cb1ed678ac..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/50-usb-ohci +++ /dev/null @@ -1,3 +0,0 @@ -ohci-hcd -ohci-platform -ohci-at91 diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/54-usb3 b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/54-usb3 deleted file mode 100644 index 5ba5d86524..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/54-usb3 +++ /dev/null @@ -1,3 +0,0 @@ -xhci-hcd -xhci-pci -xhci-plat-hcd diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/test b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/test deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/usb-storage b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/usb-storage deleted file mode 100644 index 6b30c92459..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/usb-storage +++ /dev/null @@ -1 +0,0 @@ -usb-storage diff --git a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/usb-storage-extras b/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/usb-storage-extras deleted file mode 100644 index 446fa69780..0000000000 --- a/package/ctcgfw/luci-app-k3usb/root/usr/k3usb/usb-storage-extras +++ /dev/null @@ -1,10 +0,0 @@ -ums-alauda -ums-cypress -ums-datafab -ums-freecom -ums-isd200 -ums-jumpshot -ums-karma -ums-sddr09 -ums-sddr55 -ums-usbat diff --git a/package/ctcgfw/luci-app-mentohust/Makefile b/package/ctcgfw/luci-app-mentohust/Makefile deleted file mode 100644 index 633cd057b4..0000000000 --- a/package/ctcgfw/luci-app-mentohust/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-mentohust -PKG_VERSION:=1.1.1 -PKG_RELEASE:=0 - -LUCI_TITLE:=MentoHUST 802.1X Client for LuCI -LUCI_DESCRIPTION:=This package contains LuCI configuration pages for 8021xclient. -LUCI_DEPENDS:=+mentohust - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-mentohust/luasrc/controller/mentohust.lua b/package/ctcgfw/luci-app-mentohust/luasrc/controller/mentohust.lua deleted file mode 100644 index 207d097e8c..0000000000 --- a/package/ctcgfw/luci-app-mentohust/luasrc/controller/mentohust.lua +++ /dev/null @@ -1,16 +0,0 @@ -module("luci.controller.mentohust", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/mentohust") then - return - end - if luci.sys.call("command -v mentohust >/dev/null") ~= 0 then - return - end - entry({"admin", "services", "mentohust"}, - alias("admin", "services", "mentohust", "general"), - _("MentoHUST"), 10).dependent = true - - entry({"admin", "services", "mentohust", "general"}, cbi("mentohust/general"), _("MentoHUST Settings"), 10).leaf = true - entry({"admin", "services", "mentohust", "log"}, cbi("mentohust/log"), _("MentoHUST LOG"), 20).leaf = true -end diff --git a/package/ctcgfw/luci-app-mentohust/luasrc/model/cbi/mentohust/general.lua b/package/ctcgfw/luci-app-mentohust/luasrc/model/cbi/mentohust/general.lua deleted file mode 100644 index dc4e9803f0..0000000000 --- a/package/ctcgfw/luci-app-mentohust/luasrc/model/cbi/mentohust/general.lua +++ /dev/null @@ -1,111 +0,0 @@ -local function is_running(name) - if luci.sys.call("pidof %s >/dev/null" %{name}) == 0 then - return translate("RUNNING") - else - return translate("NOT RUNNING") - end -end - -local function is_online(ipaddr) - if ipaddr == "0.0.0.0" then - return translate("Pinghost not set") - end - if luci.sys.call("ping -c1 -w1 %s >/dev/null 2>&1" %{ipaddr}) == 0 then - return translate("ONLINE") - else - return translate("NOT ONLINE") - end -end - -require("luci.sys") - -m = Map("mentohust", translate("MentoHUST"), translate("Configure MentoHUST 802.11x.")) - -s = m:section(TypedSection, "mentohust", translate("Status")) -s.anonymous = true -status = s:option(DummyValue,"_mentohust_status", "MentoHUST") -status.value = "%s" %{is_running("mentohust")} -status.rawhtml = true -t = io.popen('uci get mentohust.@mentohust[0].pinghost') -netstat=is_online(tostring(t:read("*line"))) -t:close() -if netstat ~= "" then -netstatus = s:option(DummyValue,"_network_status", translate("Network Status")) -netstatus.value = "%s" %{netstat} -netstatus.rawhtml = true -end - -o = m:section(TypedSection, "mentohust", translate("Settings")) -o.addremove = false -o.anonymous = true - -o:tab("base", translate("Normal Settings")) -o:tab("advanced", translate("Advanced Settings")) - -enable = o:taboption("base", Flag, "enable", translate("Enable")) -name = o:taboption("base", Value, "username", translate("Username"),translate("The username given to you by your network administrator")) -pass = o:taboption("base", Value, "password", translate("Password"), translate("The password you set or given to you by your network administrator")) -pass.password = true - -ifname = o:taboption("base", ListValue, "ifname", translate("Interfaces"), translate("Physical interface of WAN")) -for k, v in ipairs(luci.sys.net.devices()) do - if v ~= "lo" then - ifname:value(v) - end -end - -pinghost = o:taboption("base", Value, "pinghost", translate("PingHost"), translate("Ping host for drop detection, 0.0.0.0 to turn off this feature")) -pinghost.default = "0.0.0.0" - -ipaddr = o:taboption("advanced", Value, "ipaddr", translate("IP Address"), translate("Your IPv4 Address. (DHCP users can set to 0.0.0.0)")) -ipaddr.default = "0.0.0.0" - -mask = o:taboption("advanced", Value, "mask", translate("NetMask"), translate("NetMask, it doesn't matter")) -mask.default = "0.0.0.0" - -gateway = o:taboption("advanced", Value, "gateway", translate("Gateway"), translate("Gateway, if specified, will monitor gateway ARP information")) -gateway.default = "0.0.0.0" - -dnsserver = o:taboption("advanced", Value, "dns", translate("DNS server"), translate("DNS server, it doesn't matter")) -dnsserver.default = "0.0.0.0" - -timeout = o:taboption("advanced", Value, "timeout", translate("Timeout"), translate("Each timeout of the package (seconds)")) -timeout.default = "8" - -echointerval = o:taboption("advanced", Value, "echointerval", translate("EchoInterval"), translate("Interval for sending Echo packets (seconds)")) -echointerval.default = "30" - -restartwait = o:taboption("advanced", Value, "restartwait", translate("RestartWait"), translate("Failed Wait (seconds) Wait for seconds after authentication failed or restart authentication after server request")) -restartwait.default = "15" - -startmode = o:taboption("advanced", ListValue, "startmode", translate("StartMode"), translate("Multicast address type when searching for servers")) -startmode:value(0, translate("Standard")) -startmode:value(1, translate("Ruijie")) -startmode:value(2, translate("Uses MentoHUST for Xaar certification")) -startmode.default = "0" - -dhcpmode = o:taboption("advanced", ListValue, "dhcpmode", translate("DhcpMode"), translate("DHCP method")) -dhcpmode:value(0, translate("None")) -dhcpmode:value(1, translate("secondary authentication")) -dhcpmode:value(2, translate("after certification")) -dhcpmode:value(3, translate("before certification")) -dhcpmode.default = "2" - -shownotify = o:taboption("advanced", Value, "shownotify", translate("ShowNotify"), translate("Whether to display notifications 0 (no) 1 to 20 (yes)")) -shownotify.default = "5" - -version = o:taboption("advanced", Value, "version", translate("Client Version"), translate("Client version number. If client verification is not enabled but the version number is required, it can be specified here. The format is 3.30.")) -version.default = "0.00" - -datafile = o:taboption("advanced", Value, "datafile", translate("DataFile"), translate("Authentication data file, if you need to verify the client, you need to set correctly")) -datafile.default = "/etc/mentohust/" - -dhcpscript = o:taboption("advanced", Value, "dhcpscript", translate("DhcpScript"), translate("DHCP script")) -dhcpscript.default = "udhcpc -i" - -local apply = luci.http.formvalue("cbi.apply") -if apply then - io.popen("/etc/init.d/mentohust restart") -end - -return m diff --git a/package/ctcgfw/luci-app-mentohust/luasrc/model/cbi/mentohust/log.lua b/package/ctcgfw/luci-app-mentohust/luasrc/model/cbi/mentohust/log.lua deleted file mode 100644 index d4b899a668..0000000000 --- a/package/ctcgfw/luci-app-mentohust/luasrc/model/cbi/mentohust/log.lua +++ /dev/null @@ -1,23 +0,0 @@ -local fs = require "nixio.fs" - -local f = SimpleForm("mentohust", - translate("MentoHUST LOG"), - translate("Log file:/tmp/mentohust.log")) - -local o = f:field(Value, "mentohust_log") - -o.template = "cbi/tvalue" -o.rows = 32 - -function o.cfgvalue(self, section) - return fs.readfile("/tmp/mentohust.log") -end - -function o.write(self, section, value) - require("luci.sys").call('cat /dev/null > /tmp/mentohust.log 2>/dev/null') -end - -f.submit = translate("Clear log") -f.reset = false - -return f diff --git a/package/ctcgfw/luci-app-mentohust/po/zh-cn/mentohust.po b/package/ctcgfw/luci-app-mentohust/po/zh-cn/mentohust.po deleted file mode 100644 index 4e8b4bc101..0000000000 --- a/package/ctcgfw/luci-app-mentohust/po/zh-cn/mentohust.po +++ /dev/null @@ -1,152 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "MentoHUST Settings" -msgstr "MentoHUST 设置" - -msgid "MentoHUST LOG" -msgstr "MentoHUST 日志" - -msgid "Log file:/tmp/mentohust.log" -msgstr "日志文件:/tmp/mentohust.log" - -msgid "Configure MentoHUST 802.11x." -msgstr "配置MentoHUST 802.11x验证。" - -msgid "Normal Settings" -msgstr "常规设置" - -msgid "The username given to you by your network administrator" -msgstr "您的用户名(或管理员分配的用户名)" - -msgid "The password you set or given to you by your network administrator" -msgstr "您的密码(或管理员分配的密码)" - -msgid "Physical interface of WAN" -msgstr "WAN口的物理接口" - -msgid "PingHost" -msgstr "Ping主机" - -msgid "Ping host for drop detection, 0.0.0.0 to turn off this feature" -msgstr "Ping主机,用于掉线检测,0.0.0.0表示关闭该功能" - -msgid "IP Address" -msgstr "IP地址" - -msgid "Your IPv4 Address. (DHCP users can set to 0.0.0.0)" -msgstr "你的IPV4地址,DHCP用户可设为0.0.0.0" - -msgid "NetMask" -msgstr "子网掩码" - -msgid "NetMask, it doesn't matter" -msgstr "掩码,无关紧要" - -msgid "Gateway, if specified, will monitor gateway ARP information" -msgstr "网关,如果指定了就会监视网关ARP信息" - -msgid "DNS server" -msgstr "DNS服务器" - -msgid "DNS server, it doesn't matter" -msgstr "DNS服务器,无关紧要" - -msgid "Timeout" -msgstr "验证超时" - -msgid "Each timeout of the package (seconds)" -msgstr "每次发包超时时间(秒)" - -msgid "EchoInterval" -msgstr "Echo包间隔" - -msgid "Interval for sending Echo packets (seconds)" -msgstr "发送Echo包的间隔(秒)" - -msgid "RestartWait" -msgstr "验证失败等待时间" - -msgid "Failed Wait (seconds) Wait for seconds after authentication failed or restart authentication after server request" -msgstr "失败等待(秒)认证失败后等待多少秒或者服务器请求后重启认证" - -msgid "StartMode" -msgstr "组播地址类型" - -msgid "Multicast address type when searching for servers" -msgstr "寻找服务器时的组播地址类型(某些交换机可能会丢弃标准包)" - -msgid "Standard" -msgstr "标准" - -msgid "Ruijie" -msgstr "锐捷" - -msgid "Uses MentoHUST for Xaar certification" -msgstr "将MentoHUST用于赛尔认证" - -msgid "DhcpMode" -msgstr "DHCP设置" - -msgid "DHCP method" -msgstr "DHCP方式" - -msgid "None" -msgstr "无" - -msgid "secondary authentication" -msgstr "二次认证" - -msgid "after certification" -msgstr "认证后" - -msgid "before certification" -msgstr "认证前" - -msgid "ShowNotify" -msgstr "通知级别" - -msgid "Whether to display notifications 0 (no) 1 to 20 (yes)" -msgstr "是否显示通知: 0(否) 1~20(是)" - -msgid "Client Version" -msgstr "客户端版本号" - -msgid "Client version number. If client verification is not enabled but the version number is required, it can be specified here. The format is 3.30." -msgstr "客户端版本号,如果未开启客户端校验但对版本号有要求,可以在此指定,形如3.30" - -msgid "DataFile" -msgstr "数据文件" - -msgid "Authentication data file, if you need to verify the client, you need to set correctly" -msgstr "认证数据文件,如果需要校验客户端,就需要正确设置" - -msgid "DhcpScript" -msgstr "DHCP的脚本" - -msgid "DHCP script" -msgstr "进行DHCP的脚本" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "ONLINE" -msgstr "能访问互联网" - -msgid "NOT ONLINE" -msgstr "不能访问互联网" - -msgid "Settings" -msgstr "设置" - -msgid "Network Status" -msgstr "网络状态" - -msgid "Pinghost not set" -msgstr "没有设置Ping主机" - -msgid "Clear log" -msgstr "清除日志" diff --git a/package/ctcgfw/luci-app-mentohust/root/etc/config/mentohust b/package/ctcgfw/luci-app-mentohust/root/etc/config/mentohust deleted file mode 100644 index 67b3da62ed..0000000000 --- a/package/ctcgfw/luci-app-mentohust/root/etc/config/mentohust +++ /dev/null @@ -1 +0,0 @@ -config mentohust diff --git a/package/ctcgfw/luci-app-mentohust/root/etc/init.d/mentohust b/package/ctcgfw/luci-app-mentohust/root/etc/init.d/mentohust deleted file mode 100755 index cdf7e5d264..0000000000 --- a/package/ctcgfw/luci-app-mentohust/root/etc/init.d/mentohust +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh /etc/rc.common -START=90 - -run_mentohust() -{ - local enable - local username - local password - local ifname - local cmd - config_get_bool enable $1 enable - config_get username $1 username - config_get password $1 password - config_get ifname $1 ifname - - if [ $enable ] && [ $username ] && [ $password ] && [ $ifname ]; then - local pinghost - local startmode - local dhcpmode - local ipaddr - local mask - local gateway - local dns - local timeout - local echointerval - local restartwait - local shownotify - local version - local datafile - local dhcpscript - - config_get pinghost $1 pinghost - config_get startmode $1 startmode - config_get dhcpmode $1 dhcpmode - config_get ipaddr $1 ipaddr - config_get mask $1 mask - config_get gateway $1 gateway - config_get dns $1 dns - config_get timeout $1 timeout - config_get echointerval $1 echointerval - config_get restartwait $1 restartwait - config_get shownotify $1 shownotify - config_get version $1 version - config_get datafile $1 datafile - config_get dhcpscript $1 dhcpscript - - if [ "$ipaddr" != "" ]; then cmd=$cmd" -i"$ipaddr;fi - if [ "$mask" != "" ]; then cmd=$cmd" -m"$mask;fi - if [ "$pinghost" != "0.0.0.0" ] && [ "$pinghost" != "" ]; then cmd=$cmd" -o"$pinghost;fi - if [ "$startmode" != "0" ] && [ "$startmode" != "" ]; then cmd=$cmd" -a"$startmode;fi - if [ "$dhcpmode" != "0" ] && [ "$dhcpmode" != "" ]; then cmd=$cmd" -d"$dhcpmode;fi - if [ "$gateway" != "0.0.0.0" ] && [ "$gateway" != "" ]; then cmd=$cmd" -g"$gateway;fi - if [ "$dns" != "0.0.0.0" ] && [ "$dns" != "" ]; then cmd=$cmd" -s"$dns;fi - if [ "$timeout" != "8" ] && [ "$timeout" != "" ]; then cmd=$cmd" -t"$timeout;fi - if [ "$echointerval" != "30" ] && [ "$echointerval" != "" ]; then cmd=$cmd" -e"$echointerval;fi - if [ "$restartwait" != "15" ] && [ "$restartwait" != "" ]; then cmd=$cmd" -r"$restartwait;fi - if [ "$shownotify" != "5" ] && [ "$shownotify" != "" ]; then cmd=$cmd" -y"$shownotify;fi - if [ "$version" != "0.00" ] && [ "$version" != "" ]; then cmd=$cmd" -v"$version;fi - if [ "$datafile" != "/etc/mentohust/" ] && [ "$datafile" != "" ]; then cmd=$cmd" -f"$datafile;fi - if [ "$dhcpscript" != "udhcpc -i" ] && [ "$dhcpscript" != "" ]; then cmd=$cmd" -c'"$dhcpscript"'";fi - - /bin/ash -c "mentohust -u$username -p$password -n$ifname -b3 -w $cmd" - else - /bin/ash -c "mentohust -k" - fi -} - -start() -{ - config_load mentohust - config_foreach run_mentohust mentohust -} - -stop() -{ - killall mentohust -} - -restart() -{ - mentohust -k - sleep 1 - config_load mentohust - config_foreach run_mentohust mentohust -} diff --git a/package/ctcgfw/luci-app-minieap/Makefile b/package/ctcgfw/luci-app-minieap/Makefile deleted file mode 100644 index b34cfe877d..0000000000 --- a/package/ctcgfw/luci-app-minieap/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-minieap -PKG_VERSION=1.0.2 -PKG_RELEASE:=0 - -LUCI_TITLE:=minieap 802.1X Client for LuCI -LUCI_DESCRIPTION:=This package contains LuCI configuration pages for 8021xclient. -LUCI_DEPENDS:=+minieap - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-minieap/luasrc/controller/minieap.lua b/package/ctcgfw/luci-app-minieap/luasrc/controller/minieap.lua deleted file mode 100644 index 16c11bd23e..0000000000 --- a/package/ctcgfw/luci-app-minieap/luasrc/controller/minieap.lua +++ /dev/null @@ -1,17 +0,0 @@ -module("luci.controller.minieap", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/minieap") then - return - end - if luci.sys.call("command -v minieap >/dev/null") ~= 0 then - return - end - entry({"admin", "services", "minieap"}, - alias("admin", "services", "minieap", "general"), - _("minieap"), 10).dependent = true - - entry({"admin", "services", "minieap", "general"}, cbi("minieap/general"), _("minieap Settings"), 10).leaf = true - -- entry({"admin", "services", "minieap", "customfile"}, cbi("minieap/customfile"), _("custom configfiles"), 20).leaf = true - entry({"admin", "services", "minieap", "log"}, cbi("minieap/log"), _("minieap LOG"), 30).leaf = true -end diff --git a/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/customfile.lua b/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/customfile.lua deleted file mode 100644 index 13484b1de2..0000000000 --- a/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/customfile.lua +++ /dev/null @@ -1,8 +0,0 @@ - -require("luci.sys") - -local f = SimpleForm("minieap", - translate("minieap LOG"), - translate("Log file:/var/log/minieap.log")) - -return f diff --git a/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/general.lua b/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/general.lua deleted file mode 100644 index b238411d30..0000000000 --- a/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/general.lua +++ /dev/null @@ -1,150 +0,0 @@ -local function is_running(name) - if luci.sys.call("pidof %s >/dev/null" %{name}) == 0 then - return translate("RUNNING") - else - return translate("NOT RUNNING") - end -end - -local function is_online(ipaddr) - if ipaddr == "0.0.0.0" or ipaddr == "nil" then - return translate("Pinghost not set") - end - if luci.sys.call("ping -c1 -w1 %s >/dev/null 2>&1" %{ipaddr}) == 0 then - return translate("ONLINE") - else - return translate("NOT ONLINE") - end -end - -require("luci.sys") - -m = Map("minieap", translate("minieap"), translate("Configure minieap 802.11x.")) - -s = m:section(TypedSection, "minieap", translate("Status")) -s.anonymous = true -status = s:option(DummyValue,"_minieap_status", "minieap") -status.value = "%s" %{is_running("minieap")} -status.rawhtml = true -t = io.popen('uci get minieap.@minieap[0].pinghost') -netstat=is_online(tostring(t:read("*line"))) -t:close() -if netstat ~= "" then -netstatus = s:option(DummyValue,"_network_status", translate("Network Status")) -netstatus.value = "%s" %{netstat} -netstatus.rawhtml = true -end - -o = m:section(TypedSection, "minieap", translate("Settings")) -o.addremove = false -o.anonymous = true - -o:tab("base", translate("Normal Settings")) -o:tab("advanced", translate("Advanced Settings")) -o:tab("plugins", translate("Plugins List")) -o:tab("ruijie", translate("Ruijie EAP Settings")) - -enable = o:taboption("base", Flag, "enable", translate("Enable")) -name = o:taboption("base", Value, "username", translate("Username"),translate("The username given to you by your network administrator")) -pass = o:taboption("base", Value, "password", translate("Password"), translate("The password you set or given to you by your network administrator")) -pass.password = true - -ifname = o:taboption("base", ListValue, "nic", translate("Interfaces"), translate("Physical interface of WAN")) -for k, v in ipairs(luci.sys.net.devices()) do - if v ~= "lo" then - ifname:value(v) - end -end - -pinghost = o:taboption("base", Value, "pinghost", translate("PingHost"), translate("Ping host for drop detection, 0.0.0.0 to turn off this feature.")) -pinghost.default = "0.0.0.0" - -pingintval = o:taboption("base", Value, "pingintval", translate("Ping intval"), translate("Interval of each ping. (in second) [default: 30]")) -pingintval.default = "30" - -pingcommand = o:taboption("base", Value, "pingcommand", translate("Offline command"), translate("Run Command when ping failed. [default: minieap -k 1]")) -pingcommand:value("minieap -k 1") -pingcommand.default = "minieap -k 1" - -stage_timeout = o:taboption("advanced", Value, "stage_timeout", translate("Auth Timeout"), translate("802.11X auth timeout (in second). [default: 5]")) -stage_timeout.default = "5" - -wait_after_fail = o:taboption("advanced", Value, "wait_after_fail", translate("Wait after failed"), translate("Wait time between failed and next time (in second). [default: 30]")) -wait_after_fail.default = "30" - -max_fail = o:taboption("advanced", Value, "max_fail", translate("Max fail"), translate("Maximum allowed number of failures. [default: 3]")) -max_fail.default = "3" - -no_auto_reauth = o:taboption("advanced", ListValue, "no_auto_reauth", translate("Disable auto reauth"), translate("Disable auto reauth after offline. [default: True]")) -no_auto_reauth:value(0, translate("False")) -no_auto_reauth:value(1, translate("True")) -no_auto_reauth.default = 1 - -proxy_lan_iface = o:taboption("advanced", Value, "proxy_lan_iface", translate("Proxy LAN's name"), translate("Name of LAN interface when use proxy auth. [default: None]")) -proxy_lan_iface.default = "" - -auth_round = o:taboption("advanced", Value, "auth_round", translate("Auth times"), translate("Number of times required for auth. [default: 1]")) -auth_round.default = "1" - -max_retries = o:taboption("advanced", Value, "max_retries", translate("Max timeout"), translate("Maximum retry time after timeout. [default: 3]")) -max_retries.default = "3" - -pid_file = o:taboption("advanced", Value, "pid_file", translate("PID file"), translate("Path of PID file. (Set 'None' to disable) [default: /var/run/minieap.pid]")) -pid_file:value("/var/run/minieap.pid") -pid_file.default = "/var/run/minieap.pid" - -if_impl = o:taboption("advanced", ListValue, "if_impl", translate("Network Module"), translate("Network module for send and recv packages (openwrt support sockraw only)")) -if_impl:value("sockraw") -if_impl.default = "sockraw" - -plugins = o:taboption("plugins", DynamicList, "module", translate("Plugins list"), translate("Packets flow through these plug-ins in sequence. Pay attention to the order in the environment where the package plug-in is modified")) -plugins:value("printer", translate("printer: Print length of packets")) -plugins:value("rjv3", translate('rjv3: Ruijie 802.11X. Support V3 verification algorithm')) - -heartbeat = o:taboption("ruijie", Value, "heartbeat", translate("Heartbeat interval"), translate("Interval for sending Heartbeat packets (seconds) [Default: 60]")) -heartbeat.default = "60" - -eap_bcast_addr = o:taboption("ruijie", ListValue, "eap_bcast_addr", translate("Broadcast address"), translate("Broadcast address type when searching for servers [Default: Standard]")) -eap_bcast_addr:value(0, translate("Standard")) -eap_bcast_addr:value(1, translate("Ruijie private")) -eap_bcast_addr.default = 0 - -dhcp_type = o:taboption("ruijie", ListValue, "dhcp_type", translate("DhcpMode"), translate("DHCP method [Default: After certification]")) -dhcp_type:value(0, translate("None")) -dhcp_type:value(1, translate("Secondary authentication")) -dhcp_type:value(2, translate("Before certification")) -dhcp_type:value(3, translate("After certification")) -dhcp_type.default = 3 - -dhcp_script = o:taboption("ruijie", Value, "dhcp_script", translate("DhcpScript"), translate("DHCP script [Default: None]")) -dhcp_script.default = "" - -service = o:taboption("ruijie", Value, "service", translate("Service"), translate("Service From Ruijie Server [Default: internet]")) -service.default = "internet" - -version_str = o:taboption("ruijie", Value, "version_str", translate("Version String"), translate("Custom version [Default: RG-SU For Linux V1.0]")) -version_str:value("RG-SU For Linux V1.0") -version_str.default = "RG-SU For Linux V1.0" - -fake_dns1 = o:taboption("ruijie", Value, "fake_dns1", translate("Main DNS server"), translate("Custom main DNS server [Default: FromSystem]")) - -fake_dns2 = o:taboption("ruijie", Value, "fake_dns2", translate("Second DNS server"), translate("Custom second DNS server [Default: FromSystem]")) - -fake_serial = o:taboption("ruijie", Value, "fake_serial", translate("Disk serial"), translate("Custom disk serial [Default: From /etc/mtab]")) - -max_dhcp_count = o:taboption("ruijie", Value, "max_dhcp_count", translate("DHCP try times"), translate("DHCP try times [Default: 3]")) -max_dhcp_count.default = "3" - -rj_option = o:taboption("ruijie", DynamicList, "rj_option", translate("Custom EAP Options"), translate("Format <type>:<value>[:r]. Add a option type: <type>, value: <value>. :r for replace")) - -if nixio.fs.mkdir("/etc/minieap.conf.d") == true then - nixio.fs.symlink("/etc/minieap.conf.d/minieap.conf.utf8", "/etc/minieap.conf") -end - -local apply = luci.http.formvalue("cbi.apply") -if apply then - luci.sys.call("minieap-conver | sort > /etc/minieap.conf.d/minieap.conf.utf8") - io.popen("/etc/init.d/minieap restart") -end - -return m diff --git a/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/log.lua b/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/log.lua deleted file mode 100644 index c45c1d81af..0000000000 --- a/package/ctcgfw/luci-app-minieap/luasrc/model/cbi/minieap/log.lua +++ /dev/null @@ -1,23 +0,0 @@ -local fs = require "nixio.fs" - -local f = SimpleForm("minieap", - translate("minieap LOG"), - translate("Log file:/var/log/minieap.log")) - -local o = f:field(Value, "minieap_log") - -o.template = "cbi/tvalue" -o.rows = 32 - -function o.cfgvalue(self, section) - return fs.readfile("/var/log/minieap.log") -end - -function o.write(self, section, value) - require("luci.sys").call('cat /dev/null > /var/log/minieap.log 2>/dev/null') -end - -f.submit = translate("Clear log") -f.reset = false - -return f diff --git a/package/ctcgfw/luci-app-minieap/po/zh-cn/minieap.po b/package/ctcgfw/luci-app-minieap/po/zh-cn/minieap.po deleted file mode 100644 index e365eade64..0000000000 --- a/package/ctcgfw/luci-app-minieap/po/zh-cn/minieap.po +++ /dev/null @@ -1,227 +0,0 @@ -msgid "minieap Settings" -msgstr "minieap 设置" - -msgid "minieap LOG" -msgstr "minieap 日志" - -msgid "Log file:/var/log/minieap.log" -msgstr "日志文件: /var/log/minieap.log" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Pinghost not set" -msgstr "没有设置Ping主机" - -msgid "ONLINE" -msgstr "能访问互联网" - -msgid "NOT ONLINE" -msgstr "不能访问互联网" - -msgid "Configure minieap 802.11x." -msgstr "配置minieap 802.11x验证。" - -msgid "Network Status" -msgstr "网络状态" - -msgid "Settings" -msgstr "设置" - -msgid "Normal Settings" -msgstr "常规设置" - -msgid "Plugins List" -msgstr "插件列表" - -msgid "Ruijie EAP Settings" -msgstr "锐捷认证设置" - -msgid "The username given to you by your network administrator" -msgstr "您的用户名(或管理员分配的用户名)" - -msgid "The password you set or given to you by your network administrator" -msgstr "您的密码(或管理员分配的密码)" - -msgid "Physical interface of WAN" -msgstr "WAN口的物理接口" - -msgid "PingHost" -msgstr "Ping主机" - -msgid "Ping host for drop detection, 0.0.0.0 to turn off this feature." -msgstr "Ping主机,用于掉线检测,0.0.0.0表示关闭该功能" - -msgid "Packets flow through these plug-ins in sequence. Pay attention to the order in the environment where the package plug-in is modified" -msgstr "数据包会按顺序流经这些插件。在有修改数据包插件的环境中请注意顺序" - -msgid "printer: Print length of packets" -msgstr "printer:打印流入流出数据包的大小" - -msgid "rjv3: Ruijie 802.11X. Support V3 verification algorithm" -msgstr "rjv3:锐捷认证,支持V3算法" - -msgid "Heartbeat interval" -msgstr "心跳间隔" - -msgid "Interval for sending Heartbeat packets (seconds) [Default: 60]" -msgstr "发送心跳包的间隔(秒)[默认:60]" - -msgid "Broadcast address" -msgstr "广播地址类型" - -msgid "Broadcast address type when searching for servers [Default: Standard]" -msgstr "寻找服务器时的广播地址类型 [默认:标准]" - -msgid "Standard" -msgstr "标准" - -msgid "Ruijie private" -msgstr "锐捷私有" - -msgid "DhcpMode" -msgstr "DHCP方式" - -msgid "DHCP method [Default: After certification]" -msgstr "DHCP方式 [默认:认证后]" - -msgid "None" -msgstr "无" - -msgid "Secondary authentication" -msgstr "二次认证" - -msgid "Before certification" -msgstr "认证前" - -msgid "After certification" -msgstr "认证后" - -msgid "DhcpScript" -msgstr "DHCP脚本" - -msgid "DHCP script [Default: None]" -msgstr "DHCP脚本 [默认:无]" - -msgid "Service" -msgstr "服务" - -msgid "Service From Ruijie Server [Default: internet]" -msgstr "锐捷认证服务器上配置的用户服务" - -msgid "Version String" -msgstr "版本信息" - -msgid "Custom version [Default: RG-SU For Linux V1.0]" -msgstr "自定义版本信息 [默认:RG-SU For Linux V1.0]" - -msgid "Main DNS server" -msgstr "主DNS服务器" - -msgid "Custom main DNS server [Default: FromSystem]" -msgstr "自定义主DNS服务器 [默认:自动获取]" - -msgid "Second DNS server" -msgstr "从DNS服务器" - -msgid "Custom second DNS server [Default: FromSystem]" -msgstr "自定义从DNS服务器 [默认:自动获取]" - -msgid "Disk serial" -msgstr "磁盘序列号" - -msgid "Custom disk serial [Default: From /etc/mtab]" -msgstr "自定义磁盘序列号 [默认:自动获取]" - -msgid "DHCP try times" -msgstr "DHCP尝试次数" - -msgid "DHCP try times [Default: 3]" -msgstr "二次认证的DHCP尝试次数 [默认:3]" - -msgid "Custom EAP Options" -msgstr "自定义EAP字段" - -msgid "Format <type>:<value>[:r]. Add a option type: <type>, value: <value>. :r for replace" -msgstr "格式: <type>:<value>[:r]。 不带r为增加字段,带r为替换字段" - -msgid "Configfile encoding" -msgstr "配置文件编码" - -msgid "Auth Timeout" -msgstr "认证超时" - -msgid "802.11X auth timeout (in second). [default: 5]" -msgstr "单个认证阶段的超时时间 [默认:5]" - -msgid "Wait after failed" -msgstr "认证失败等待" - -msgid "Wait time between failed and next time (in second). [default: 30]" -msgstr "认证失败后重新认证前的等待时间[默认:30]" - -msgid "Max fail" -msgstr "最大失败次数" - -msgid "Maximum allowed number of failures. [default: 3]" -msgstr "最大允许认证失败次数 [默认:3]" - -msgid "Disable auto reauth" -msgstr "禁止自动重连" - -msgid "Disable auto reauth after offline. [default: True]" -msgstr "认证掉线后不允许自动重连 [默认:是]" - -msgid "False" -msgstr "否" - -msgid "True" -msgstr "是" - -msgid "Daemon mode" -msgstr "运行模式" - -msgid "Proxy LAN's name" -msgstr "代理LAN口名称" - -msgid "Name of LAN interface when use proxy auth. [default: None]" -msgstr "代理认证时的 LAN 网络界面名 [默认:无]" - -msgid "Auth times" -msgstr "认证次数" - -msgid "Number of times required for auth. [default: 1]" -msgstr "需要认证的次数 [默认:1]" - -msgid "Max timeout" -msgstr "最大超时重试" - -msgid "Maximum retry time after timeout. [default: 3]" -msgstr "最大超时重试的次数 [默认:3]" - -msgid "PID file" -msgstr "PID文件" - -msgid "Path of PID file. (Set 'None' to disable) [default: /var/run/minieap.pid]" -msgstr "PID 文件路径,设为none可禁用 [默认:/var/run/minieap.pid]" - -msgid "Network Module" -msgstr "网络操作模块" - -msgid "Network module for send and recv packages (openwrt support sockraw only)" -msgstr "选择此网络操作模块(openwrt只支持sockraw)" - -msgid "Ping intval" -msgstr "Ping间隔" - -msgid "Interval of each ping. (in second) [default: 30]" -msgstr "Ping Ping主机的间隔(秒) [默认:30]" - -msgid "Offline command" -msgstr "掉线执行命令" - -msgid "Run Command when ping failed. [default: minieap -k 1]" -msgstr "Ping 检测到掉线后执行的命令 [默认: minieap -k 1]" diff --git a/package/ctcgfw/luci-app-minieap/root/etc/config/minieap b/package/ctcgfw/luci-app-minieap/root/etc/config/minieap deleted file mode 100644 index cf4cdbadba..0000000000 --- a/package/ctcgfw/luci-app-minieap/root/etc/config/minieap +++ /dev/null @@ -1,18 +0,0 @@ -config minieap - option pinghost '0.0.0.0' - option pingintval '30' - option pingcommand 'minieap -k 1' - option stage_timeout '5' - option wait_after_fail '30' - option max_fail '3' - option no_auto_reauth '1' - option auth_round '1' - option max_retries '3' - option pid_file '/var/run/minieap.pid' - option if_impl 'sockraw' - option heartbeat '60' - option eap_bcast_addr '0' - option dhcp_type '3' - option service 'internet' - option version_str 'RG-SU For Linux V1.0' - option max_dhcp_count '3' diff --git a/package/ctcgfw/luci-app-minieap/root/etc/init.d/minieap b/package/ctcgfw/luci-app-minieap/root/etc/init.d/minieap deleted file mode 100755 index 9e2f5ec97e..0000000000 --- a/package/ctcgfw/luci-app-minieap/root/etc/init.d/minieap +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh /etc/rc.common -START=90 - -run_minieap() -{ - kill $(cat /var/log/minieap-ping.pid 2>/dev/null) 2>/dev/null - local enable - local username - local password - local nic - local pinghost - config_get_bool enable $1 enable - config_get username $1 username - config_get password $1 password - config_get nic $1 nic - config_get pinghost $1 pinghost - - if [ $enable ] && [ $username ] && [ $password ] && [ $nic ]; then - if [ $pinghost ]; then - /bin/ash -c "/usr/sbin/minieap-ping &" - fi - /bin/ash -c "minieap -b3" - else - /bin/ash -c "minieap -k" - fi -} - -restart_minieap() -{ - kill $(cat /var/log/minieap-ping.pid 2>/dev/null) 2>/dev/null - local enable - local username - local password - local nic - local pinghost - config_get_bool enable $1 enable - config_get username $1 username - config_get password $1 password - config_get nic $1 nic - config_get pinghost $1 pinghost - if [ $enable ] && [ $username ] && [ $password ] && [ $nic ]; then - if [ $pinghost ]; then - /bin/ash -c "/usr/sbin/minieap-ping &" - fi - /bin/ash -c "minieap -k 1" - else - /bin/ash -c "minieap -k" - fi -} - -start() -{ - config_load minieap - config_foreach run_minieap minieap -} - -stop() -{ - kill $(cat /var/log/minieap-ping.pid 2>/dev/null) 2>/dev/null - /bin/ash -c "minieap -k" -} - -restart() -{ - config_load minieap - config_foreach restart_minieap minieap -} diff --git a/package/ctcgfw/luci-app-minieap/root/usr/sbin/minieap-conver b/package/ctcgfw/luci-app-minieap/root/usr/sbin/minieap-conver deleted file mode 100755 index 2b2cc35c10..0000000000 --- a/package/ctcgfw/luci-app-minieap/root/usr/sbin/minieap-conver +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -default_config='''daemonize=3 -''' - -echo $default_config -config_keys=$(uci show minieap | cut -d "." -f3- | awk -F "=" '{if ($0 != "") print $1}') -for key in $config_keys -do - if [[ "$key" != "pinghost" ]] && [[ "$key" != "pingintval" ]]; then - echo ${key//_/-}=$(uci get minieap.@minieap[0].$key) - fi -done diff --git a/package/ctcgfw/luci-app-minieap/root/usr/sbin/minieap-ping b/package/ctcgfw/luci-app-minieap/root/usr/sbin/minieap-ping deleted file mode 100755 index fb56f2902e..0000000000 --- a/package/ctcgfw/luci-app-minieap/root/usr/sbin/minieap-ping +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -kill $(cat /var/log/minieap-ping.pid 2>/dev/null) 2>/dev/null - -echo $$ > /var/log/minieap-ping.pid - -ping_host=$(uci get minieap.@minieap[0].pinghost) -ping_intval=$(uci get minieap.@minieap[0].pingintval) -ping_command=$(uci get minieap.@minieap[0].pingcommand) -ipint=$(echo $ping_host | awk -F "." '{print $1*2**8**3 + $2*2**8**2 + $3*2**8 + $4}') -if [[ $ipint -le 0 ]] || [[ $ipint -ge 4294967295 ]]; then - exit -fi - -if [ ! -z $ping_host ]; then - while true - do - ping -c1 -w1 $ping_host > /dev/null 2>&1 - if [ $? -ne 0 ]; then - $ping_command - fi - sleep $ping_intval - done -fi diff --git a/package/ctcgfw/luci-app-mwol/Makefile b/package/ctcgfw/luci-app-mwol/Makefile deleted file mode 100644 index 5f62201ee9..0000000000 --- a/package/ctcgfw/luci-app-mwol/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# -# Copyright (C) 2019 mleaf -# 微信公众号【WiFi物联网】 -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for Mwol -LUCI_DEPENDS:=+mwol -LUCI_PKGARCH:=all -PKG_VERSION:=1.0 -PKG_RELEASE:=2 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-mwol/luasrc/controller/mwol.lua b/package/ctcgfw/luci-app-mwol/luasrc/controller/mwol.lua deleted file mode 100644 index 3b2d79ee3f..0000000000 --- a/package/ctcgfw/luci-app-mwol/luasrc/controller/mwol.lua +++ /dev/null @@ -1,11 +0,0 @@ ---Copyright (C) 2019 mleaf ---微信公众号【WiFi物联网】 -module("luci.controller.mwol",package.seeall) - -function index() - if not nixio.fs.access("/etc/config/mwol") then - return - end - local page = entry({"admin", "services", "mwol"}, cbi("mwol"), _("Mwol")) - page.dependent = true -end diff --git a/package/ctcgfw/luci-app-mwol/luasrc/model/cbi/mwol.lua b/package/ctcgfw/luci-app-mwol/luasrc/model/cbi/mwol.lua deleted file mode 100644 index 8ea1a5bd41..0000000000 --- a/package/ctcgfw/luci-app-mwol/luasrc/model/cbi/mwol.lua +++ /dev/null @@ -1,139 +0,0 @@ ---Copyright (C) 2019 mleaf ---微信公众号【WiFi物联网】 -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local Status,subTopic,pubTopic -local m,s -local e,mwol -local encryption -local sys = require "luci.sys" - -local mac=luci.sys.exec("uci -q get mwol.mwol_conf.id") - -m=Map("mwol",translate("Mqtt wake on lan"),translate("请关注微信公众号【WiFi物联网】获取更多信息: \ -【WiFi物联网】")) - -if SYS.call("pidof mwol >/dev/null") == 0 then - Status = translate("Mwol正在运行...") -else - Status = translate("Mwol未运行...") -end - -subTopic=string.format("Mwol订阅消息主题: /mwol/%s", mac) -pubTopic=string.format("Mwol发布消息主题: /mwol/%s", mac) - --- --- LoRa Gateway config for gateway_conf --- -mwol=m:section(TypedSection,"mwol","") ---mwol.addremove=false -mwol.anonymous=true -mwol.description = translate(string.format("%s

%s

%s", Status, subTopic, pubTopic)) - -mwol:tab("general", translate("General Settings")) -mwol:tab("encryptionSettings", translate("Encryption Settings")) -mwol:tab("ssl", translate("SSL Settings")) - --- --- MQTT general --- -e = mwol:taboption("general", Flag, "enable") -e.title = translate("Enable") -e.default = 0 -e.rmempty = false - -e = mwol:taboption("general", Value, "hostname") -e.title = translate("MQTT Server") -e = mwol:taboption("general", Value, "port") -e.title = translate("MQTT Port") - -host = mwol:taboption("general", Value, "presetmac", translate("Host to wake up"), - translate("Choose the host to wake up or enter a custom MAC address to use")) -host.title = translate("Preset Mac") -sys.net.mac_hints(function(mac, name) - host:value(mac, "%s (%s)" %{ mac, name }) -end) - -e = mwol:taboption("general", Value, "id") -e.default = mac -e.rmempty = false; -e.title = translate("MQTT Topic Id") - --- --- MQTT Using encryption --- -encryption_enable = mwol:taboption("encryptionSettings", ListValue,"encryptionenable",translate("Enable")) -encryption_enable.optional = false; -encryption_enable.rmempty = false; -encryption_enable.default = 0 -encryption_enable.datatype = "uinteger" -encryption_enable:value(1, translate("True")) -encryption_enable:value(0, translate("False")) - --- --- MQTT username --- -encryption_username = mwol:taboption("encryptionSettings", Value,"username",translate("MQTT UserName")) -encryption_username.optional = true; -encryption_username.rmempty = true; -encryption_username.default = "mleaf" -encryption_username.datatype = "string" -encryption_username:depends("encryptionenable", "1") - --- --- MQTT password --- -encryption_password = mwol:taboption("encryptionSettings", Value,"password",translate("MQTT Password")) -encryption_password.optional = true; -encryption_password.rmempty = true; -encryption_password.default = "www.mleaf.org" -encryption_password.datatype = "string" -encryption_password:depends("encryptionenable", "1") - --- --- MQTT Using SSL --- -ssl_enable = mwol:taboption("ssl", ListValue,"sslenable",translate("Enable")) -ssl_enable.optional = false; -ssl_enable.rmempty = false; -ssl_enable.default = 0 -ssl_enable.datatype = "uinteger" -ssl_enable:value(1, translate("True")) -ssl_enable:value(0, translate("False")) - --- --- MQTT cafile --- -cafile = mwol:taboption("ssl", Value,"cafile",translate("ca"), - translate("Edit the ca file path.")) -cafile.optional = true; -cafile.rmempty = true; -cafile.default = false -cafile.datatype = "string" -cafile:depends("sslenable", "1") - --- --- MQTT crtfile --- -crtfile = mwol:taboption("ssl", Value,"crtfile",translate("crt"), - translate("Edit the crt file path.")) -crtfile.optional = true; -crtfile.rmempty = true; -crtfile.default = false -crtfile.datatype = "string" -crtfile:depends("sslenable", "1") - --- --- MQTT keyfile --- -keyfile = mwol:taboption("ssl", Value,"keyfile",translate("key"), - translate("Edit the key file path.")) -keyfile.optional = true; -keyfile.rmempty = true; -keyfile.default = false -keyfile.datatype = "string" -keyfile:depends("sslenable", "1") - -return m diff --git a/package/ctcgfw/luci-app-mwol/po/zh-cn/mwol.po b/package/ctcgfw/luci-app-mwol/po/zh-cn/mwol.po deleted file mode 100644 index 820eea7b66..0000000000 --- a/package/ctcgfw/luci-app-mwol/po/zh-cn/mwol.po +++ /dev/null @@ -1,54 +0,0 @@ - -msgid "Mwol Plus is Running" -msgstr "Mwol正在运行" - -msgid "Mwol Plus is Not Running" -msgstr "Mwol未运行" - -msgid "Mwol Sub Topic:" -msgstr "Mwol订阅消息主题:" - -msgid "Mwol Pub Topic:" -msgstr "Mwol发布消息主题:" - -msgid "General Settings" -msgstr "通用设置" - -msgid "Encryption Settings" -msgstr "加密设定" - -msgid "SSL Settings" -msgstr "SSL证书设置" - -msgid "Enable" -msgstr "开启" - -msgid "MQTT Server" -msgstr "MQTT服务器" - -msgid "MQTT Port" -msgstr "MQTT端口" - -msgid "Preset Mac" -msgstr "预设MAC地址" - -msgid "Choose the host to wake up or enter a custom MAC address to use" -msgstr "选择一个需要唤醒的主机或自定义唤醒主机的mac地址" - -msgid "MQTT Topic Id" -msgstr "MQTT主题ID" - -msgid "MQTT UserName" -msgstr "MQTT用户名" - -msgid "MQTT Password" -msgstr "MQTT密码" - -msgid "Edit the ca file path." -msgstr "编辑CA路径。" - -msgid "Edit the crt file path." -msgstr "编辑CRT路径。" - -msgid "Edit the key file path." -msgstr "编辑KEY路径。" diff --git a/package/ctcgfw/luci-app-mwol/root/etc/uci-defaults/40_luci-mwol b/package/ctcgfw/luci-app-mwol/root/etc/uci-defaults/40_luci-mwol deleted file mode 100755 index 8ceb530396..0000000000 --- a/package/ctcgfw/luci-app-mwol/root/etc/uci-defaults/40_luci-mwol +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@mwol[-1] - add ucitrack mwol - set ucitrack.@mwol[-1].init=mwol - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-naiveproxy/Makefile b/package/ctcgfw/luci-app-naiveproxy/Makefile deleted file mode 100644 index d7fe0754cc..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2020 Openwrt.org -# -# This is a free software, use it under GNU General Public License v3.0. -# -# Created By ImmortalWrt -# https://github.com/project-openwrt - -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-naiveproxy -PKG_VERSION:=1.0 -PKG_RELEASE:=1 -LUCI_TITLE:=LuCI support for NaiveProxy -LUCI_DEPENDS:=+naiveproxy -LUCI_PKGARCH:=all - -PKG_MAINTAINER:=CN_SZTL - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature \ No newline at end of file diff --git a/package/ctcgfw/luci-app-naiveproxy/luasrc/controller/naiveproxy.lua b/package/ctcgfw/luci-app-naiveproxy/luasrc/controller/naiveproxy.lua deleted file mode 100644 index b6897a8cbd..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/luasrc/controller/naiveproxy.lua +++ /dev/null @@ -1,23 +0,0 @@ --- This is a free software, use it under GNU General Public License v3.0. --- Created By ImmortalWrt --- https://github.com/immortalwrt - -module("luci.controller.naiveproxy", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/naiveproxy") then - return - end - - local page - page = entry({"admin", "services", "naiveproxy"}, cbi("naiveproxy"), _("NaiveProxy"), 100) - page.dependent = true - entry({"admin", "services", "naiveproxy", "status"},call("act_status")).leaf=true -end - -function act_status() - local e={} - e.running=luci.sys.call("pgrep naive >/dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-naiveproxy/luasrc/model/cbi/naiveproxy.lua b/package/ctcgfw/luci-app-naiveproxy/luasrc/model/cbi/naiveproxy.lua deleted file mode 100644 index 619b5bbb3e..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/luasrc/model/cbi/naiveproxy.lua +++ /dev/null @@ -1,28 +0,0 @@ --- Created By ImmortalWrt --- https://github.com/immortalwrt - -mp = Map("naiveproxy", translate("NaiveProxy")) -mp.description = translate("NaïveProxy uses Chrome's network stack to camouflage traffic with strong censorship resistance and low detectability. Reusing Chrome's stack also ensures best practices in performance and security.") - -mp:section(SimpleSection).template = "naiveproxy/naiveproxy_status" - -s = mp:section(TypedSection, "naiveproxy") -s.anonymous=true -s.addremove=false - -enable = s:option(Flag, "enable", translate("Enable")) -enable.default = 0 -enable.rmempty = false - -listen_addr = s:option(Value, "listen_addr", translate("Listen Address")) -listen_addr.description = translate("proto://[addr][:port]") -listen_addr.rmempty = false - -server_addr = s:option(Value, "server_addr", translate("Server Address")) -server_addr.description = translate("proto://user:pass@hostname[:port]") -server_addr.rmempty = false - -extra_argument = s:option(Value, "extra_argument", translate("Extra Argument")) -extra_argument.description = translate("Appends extra argument to NaiveProxy") - -return mp diff --git a/package/ctcgfw/luci-app-naiveproxy/luasrc/view/naiveproxy/naiveproxy_status.htm b/package/ctcgfw/luci-app-naiveproxy/luasrc/view/naiveproxy/naiveproxy_status.htm deleted file mode 100644 index 2ebbdc86d6..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/luasrc/view/naiveproxy/naiveproxy_status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
\ No newline at end of file diff --git a/package/ctcgfw/luci-app-naiveproxy/po/en/naiveproxy.po b/package/ctcgfw/luci-app-naiveproxy/po/en/naiveproxy.po deleted file mode 100644 index 5c04430518..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/po/en/naiveproxy.po +++ /dev/null @@ -1,26 +0,0 @@ -msgid "NaiveProxy" -msgstr "" - -msgid "NaïveProxy uses Chrome's network stack to camouflage traffic with strong censorship resistance and low detectability. Reusing Chrome's stack also ensures best practices in performance and security." -msgstr "" - -msgid "RUNNING" -msgstr "" - -msgid "NOT RUNNING" -msgstr "" - -msgid "Enable" -msgstr "" - -msgid "Listen Address" -msgstr "" - -msgid "Server Address" -msgstr "" - -msgid "Extra Argument" -msgstr "" - -msgid "Appends extra argument to NaiveProxy" -msgstr "" diff --git a/package/ctcgfw/luci-app-naiveproxy/po/zh-cn/naiveproxy.po b/package/ctcgfw/luci-app-naiveproxy/po/zh-cn/naiveproxy.po deleted file mode 100644 index c5db92aacd..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/po/zh-cn/naiveproxy.po +++ /dev/null @@ -1,26 +0,0 @@ -msgid "NaiveProxy" -msgstr "NaiveProxy" - -msgid "NaïveProxy uses Chrome's network stack to camouflage traffic with strong censorship resistance and low detectability. Reusing Chrome's stack also ensures best practices in performance and security." -msgstr "NaïveProxy 使用 Chrome 网络堆栈强大的反审查功能和低可检测性来伪装流量,同时确保在性能和安全方面达到最佳。" - -msgid "RUNNING" -msgstr "运行中" - -msgid "NOT RUNNING" -msgstr "未运行" - -msgid "Enable" -msgstr "启用" - -msgid "Listen Address" -msgstr "监听地址" - -msgid "Server Address" -msgstr "服务器地址" - -msgid "Extra Argument" -msgstr "额外参数" - -msgid "Appends extra argument to NaiveProxy" -msgstr "追加额外参数到 NaiveProxy" diff --git a/package/ctcgfw/luci-app-naiveproxy/root/etc/uci-defaults/naiveproxy b/package/ctcgfw/luci-app-naiveproxy/root/etc/uci-defaults/naiveproxy deleted file mode 100644 index 96db99b1c7..0000000000 --- a/package/ctcgfw/luci-app-naiveproxy/root/etc/uci-defaults/naiveproxy +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@naiveproxy[-1] - add ucitrack naiveproxy - set ucitrack.@naiveproxy[-1].init=naiveproxy - commit ucitrack -EOF - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-oled/Makefile b/package/ctcgfw/luci-app-oled/Makefile deleted file mode 100644 index 316a36a0e3..0000000000 --- a/package/ctcgfw/luci-app-oled/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2020 Nate Ding -# -# This is free software, licensed under the GUN General Public License v3. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk -PKG_NAME:=luci-app-oled -LUCI_Title:=LuCI support for ssd1306 0.91\' 138x32 display -LUCI_PKGARCH:=all -LUCI_DEPENDS:=+i2c-tools +coreutils-nohup +libuci -PKG_VERSION:=1.0 -PKG_RELEASE:=1.0 - -PKG_LICENSE:=GPLv3 -PKG_LINCESE_FILES:=LICENSE -PKF_MAINTAINER:=natelol - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-oled/luasrc/controller/oled.lua b/package/ctcgfw/luci-app-oled/luasrc/controller/oled.lua deleted file mode 100644 index 835b054c10..0000000000 --- a/package/ctcgfw/luci-app-oled/luasrc/controller/oled.lua +++ /dev/null @@ -1,17 +0,0 @@ -module("luci.controller.oled", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/oled") then - return - end - entry({"admin", "services", "oled"}, alias("admin", "services", "oled", "setting"),_("OLED"), 10).dependent = true - entry({"admin", "services", "oled", "status"}, call("act_status")) - entry({"admin", "services", "oled", "setting"}, cbi("oled/setting"),_("Setting"),30).leaf = true -end - -function act_status() - local e={} - e.running = luci.sys.call("pgrep -f /usr/bin/oled > /dev/null")==0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end diff --git a/package/ctcgfw/luci-app-oled/luasrc/model/cbi/oled/setting.lua b/package/ctcgfw/luci-app-oled/luasrc/model/cbi/oled/setting.lua deleted file mode 100644 index 7bc8fbf05f..0000000000 --- a/package/ctcgfw/luci-app-oled/luasrc/model/cbi/oled/setting.lua +++ /dev/null @@ -1,100 +0,0 @@ -m = Map("oled", translate("OLED"), translate("A LuCI app that helps you config your oled display (SSD1306, 0.91', 128X32) with screensavers!

Any issues, please go to: ")..[[luci-app-oled]]) - ---m.chain("luci") - -m:section(SimpleSection).template="oled/status" - -s = m:section(TypedSection, "oled", translate("")) -s.anonymous=true -s.addremove=false - ---OPTIONS -s:tab("info", translate("Info Display")) -s:tab("screensaver", translate("screensaver")) - -o = s:taboption("info", Flag, "enable", translate("Enable")) -o.default=0 -o = s:taboption("info", Flag, "autoswitch", translate("Enable Auto switch")) -o.default=0 -from = s:taboption("info", ListValue, "from", translate("From")) -to = s:taboption("info", ListValue, "to", translate("To")) -for i=0,23 do - for j=0,30,30 do - from:value(i*60+j,string.format("%02d:%02d",i,j)) - to:value(i*60+j,string.format("%02d:%02d",i,j)) - end -end -from:value(1440,"24:00") -to:value(1440,"24:00") -from:depends("autoswitch",'1') -to:depends("autoswitch",'1') -from.default=0 -to.default=1440 - ---informtion options---- -o = s:taboption("info", Flag, "date", translate("Date"), translate('Format YYYY-MM-DD HH:MM:SS')) -o.default=0 -o = s:taboption("info", Flag, "lanip", translate("IP"), translate("LAN IP address")) -o.default=0 -o = s:taboption("info", Flag, "cputemp", translate("CPU temperature")) -o.default=0 -o = s:taboption("info", Flag, "cpufreq", translate("CPU frequency")) -o.default=0 -o = s:taboption("info", Flag, "netspeed", translate("Network speed"), translate("1Mbps(m/s)=1,000Kbps(k/s)=1,000,000bps(b/s)")) -o.default=0 -o = s:taboption("info", ListValue, "netsource", translate("which eth to monitor")) -o:value("eth0","eth0") -o:value("eth1","eth1") -o:depends("netspeed",'1') -o.default='eth0' -o = s:taboption("info", Value, "time", translate("Display interval(s)"), translate('Screensaver will activate in set seconds')) -o.default=0 - ---screensaver options-- -o = s:taboption("screensaver", Flag, "scroll", translate("Scroll Text")) -o.default=1 -o = s:taboption("screensaver", Value, "text", translate("Text you want to scroll")) -o:depends("scroll",'1') -o.default='OPENWRT' -o = s:taboption("screensaver", Flag, "drawline", translate("Draw Many Lines")) -o.default=0 -o = s:taboption("screensaver", Flag, "drawrect", translate("Draw Rectangles")) -o.default=0 -o = s:taboption("screensaver", Flag, "fillrect", translate("Draw Multiple Rectangles")) -o.default=0 -o = s:taboption("screensaver", Flag, "drawcircle", translate("Draw Multiple Circles")) -o.default=0 -o = s:taboption("screensaver", Flag, "drawroundrect", translate("Draw a white circle, 10 pixel radius")) -o.default=0 -o = s:taboption("screensaver", Flag, "fillroundrect", translate("Fill the Round Rectangles")) -o.default=0 -o = s:taboption("screensaver", Flag, "drawtriangle", translate("Draw Triangles")) -o.default=0 -o = s:taboption("screensaver", Flag, "filltriangle", translate("Fill Triangles")) -o.default=0 -o = s:taboption("screensaver", Flag, "displaybitmap", translate("Display miniature bitmap")) -o.default=0 -o = s:taboption("screensaver", Flag, "displayinvertnormal", translate("Invert Display Normalize it")) -o.default=0 -o = s:taboption("screensaver", Flag, "drawbitmapeg", translate("Draw a bitmap and animate")) -o.default=0 - -return m - - - - - - - - - - - - - - - - - ---- diff --git a/package/ctcgfw/luci-app-oled/luasrc/view/oled/status.htm b/package/ctcgfw/luci-app-oled/luasrc/view/oled/status.htm deleted file mode 100644 index 0da0c6426f..0000000000 --- a/package/ctcgfw/luci-app-oled/luasrc/view/oled/status.htm +++ /dev/null @@ -1,22 +0,0 @@ - - -
-

- <%:Collecting data...%> -

-
diff --git a/package/ctcgfw/luci-app-oled/po/zh-cn/oled.po b/package/ctcgfw/luci-app-oled/po/zh-cn/oled.po deleted file mode 100644 index bc3f8b056a..0000000000 --- a/package/ctcgfw/luci-app-oled/po/zh-cn/oled.po +++ /dev/null @@ -1,143 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:1 -msgid "" -"A LuCI app that helps you config your oled display (SSD1306, 0.91', 128X32) " -"with screensavers!

Any issues, please go to:" -msgstr "这是一款支持在ssd1306,0.91寸,128x32像素的oled显示屏上显示你要的信息,包含屏保的程序。

任何问题请到:" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:24 -msgid "CPU frequency" -msgstr "CPU频率" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:22 -msgid "CPU temperature" -msgstr "CPU温度" - -msgid "Scroll Text" -msgstr "文字滚动" - -msgid "Enable Auto switch" -msgstr "启用定时开关" - -msgid "From" -msgstr "起始时间" - -msgid "To" -msgstr "结束时间" - -msgid "Text you want to scroll" -msgstr "你想要显示的文字" - -msgid "which eth to monitor" -msgstr "选择监控哪个网口" - -#: ../../package/new/luci-app-oled/luasrc/view/oled/status.htm:20 -msgid "Collecting data..." -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:18 -msgid "Date" -msgstr "时间" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:48 -msgid "Display miniature bitmap" -msgstr "小图案" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:28 -msgid "Display interval(s)" -msgstr "信息显示间隔(秒)" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:28 -msgid "Screensaver will activate in set seconds" -msgstr "屏保每间隔设置的时间运行一次" -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:32 -msgid "Draw Many Lines" -msgstr "直线" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:38 -msgid "Draw Multiple Circles" -msgstr "多圆" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:36 -msgid "Draw Multiple Rectangles" -msgstr "多方块" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:34 -msgid "Draw Rectangles" -msgstr "方块" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:44 -msgid "Draw Triangles" -msgstr "三角形" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:54 -msgid "Draw a bitmap and animate" -msgstr "动图" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:52 -msgid "Draw a bitmap and animate movement" -msgstr "变化图" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:40 -msgid "Draw a white circle, 10 pixel radius" -msgstr "实心圆" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:15 -msgid "Enable" -msgstr "启用" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:46 -msgid "Fill Triangles" -msgstr "三角填充" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:42 -msgid "Fill the Round Rectangles" -msgstr "方形填充" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:18 -msgid "Format YYYY-MM-DD HH:MM:SS" -msgstr "日期格式 YYYY-MM-DD HH:MM:SS" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:20 -msgid "IP" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:12 -msgid "Info Display" -msgstr "显示信息" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:50 -msgid "Invert Display Normalize it" -msgstr "反转" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:20 -msgid "LAN IP address" -msgstr "LAN地址" - -#: ../../package/new/luci-app-oled/luasrc/view/oled/status.htm:10 -msgid "NOT RUNNING" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:26 -msgid "Network speed" -msgstr "网速" - -#: ../../package/new/luci-app-oled/luasrc/controller/oled.lua:7 -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:1 -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:7 -msgid "OLED" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/view/oled/status.htm:7 -msgid "RUNNING" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/controller/oled.lua:9 -msgid "Setting" -msgstr "设置" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:13 -msgid "screensaver" -msgstr "屏保" diff --git a/package/ctcgfw/luci-app-oled/po/zh-tw/oled.po b/package/ctcgfw/luci-app-oled/po/zh-tw/oled.po deleted file mode 100644 index 4a24e35fb0..0000000000 --- a/package/ctcgfw/luci-app-oled/po/zh-tw/oled.po +++ /dev/null @@ -1,135 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:1 -msgid "" -"A LuCI app that helps you config your oled display (SSD1306, 0.91', 128X32) " -"with screensavers!

Any issues, please go to:" -msgstr "這是壹款支持在ssd1306,0.91寸,128x32像素的oled顯示屏上顯示妳要的信息,包含屏保的程序。

任何問題請到:" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:24 -msgid "CPU frequency" -msgstr "CPU頻率" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:22 -msgid "CPU temperature" -msgstr "CPU溫度" - -msgid "Scroll Text" -msgstr "文字滾動" - -msgid "Text you want to scroll" -msgstr "妳想要顯示的文字" - -msgid "which eth to monitor" -msgstr "選擇監控哪個網口" - -#: ../../package/new/luci-app-oled/luasrc/view/oled/status.htm:20 -msgid "Collecting data..." -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:18 -msgid "Date" -msgstr "時間" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:48 -msgid "Display miniature bitmap" -msgstr "小圖案" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:28 -msgid "Display interval(s)" -msgstr "信息顯示間隔(秒)" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:28 -msgid "Screensaver will activate in set seconds" -msgstr "屏保每間隔設置的時間運行壹次" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:32 -msgid "Draw Many Lines" -msgstr "直線" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:38 -msgid "Draw Multiple Circles" -msgstr "多圓" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:36 -msgid "Draw Multiple Rectangles" -msgstr "多方塊" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:34 -msgid "Draw Rectangles" -msgstr "方塊" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:44 -msgid "Draw Triangles" -msgstr "三角形" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:54 -msgid "Draw a bitmap and animate" -msgstr "動圖" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:52 -msgid "Draw a bitmap and animate movement" -msgstr "變化圖" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:40 -msgid "Draw a white circle, 10 pixel radius" -msgstr "實心圓" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:15 -msgid "Enable" -msgstr "啟用" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:46 -msgid "Fill Triangles" -msgstr "三角填充" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:42 -msgid "Fill the Round Rectangles" -msgstr "方形填充" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:18 -msgid "Format YYYY-MM-DD HH:MM:SS" -msgstr "日期格式 YYYY-MM-DD HH:MM:SS" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:20 -msgid "IP" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:12 -msgid "Info Display" -msgstr "顯示信息" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:50 -msgid "Invert Display Normalize it" -msgstr "反轉" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:20 -msgid "LAN IP address" -msgstr "LAN地址" - -#: ../../package/new/luci-app-oled/luasrc/view/oled/status.htm:10 -msgid "NOT RUNNING" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:26 -msgid "Network speed" -msgstr "網速" - -#: ../../package/new/luci-app-oled/luasrc/controller/oled.lua:7 -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:1 -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:7 -msgid "OLED" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/view/oled/status.htm:7 -msgid "RUNNING" -msgstr "" - -#: ../../package/new/luci-app-oled/luasrc/controller/oled.lua:9 -msgid "Setting" -msgstr "設置" - -#: ../../package/new/luci-app-oled/luasrc/model/cbi/oled/setting.lua:13 -msgid "screensaver" -msgstr "屏保" diff --git a/package/ctcgfw/luci-app-oled/root/etc/config/oled b/package/ctcgfw/luci-app-oled/root/etc/config/oled deleted file mode 100644 index fd5b0daa68..0000000000 --- a/package/ctcgfw/luci-app-oled/root/etc/config/oled +++ /dev/null @@ -1,22 +0,0 @@ -config oled - option drawline '0' - option drawrect '0' - option fillrect '0' - option drawcircle '0' - option drawroundrect '0' - option fillroundrect '0' - option drawtriangle '0' - option filltriangle '0' - option displaybitmap '0' - option displayinvertnormal '0' - option drawbitmapeg '0' - option date '1' - option netspeed '0' - option lanip '1' - option cpufreq '1' - option cputemp '1' - option time '60' - option enable '0' - option from '0' - option to '1440' - option autoswitch '0' diff --git a/package/ctcgfw/luci-app-oled/root/etc/init.d/oled b/package/ctcgfw/luci-app-oled/root/etc/init.d/oled deleted file mode 100755 index 018962edaf..0000000000 --- a/package/ctcgfw/luci-app-oled/root/etc/init.d/oled +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/sh /etc/rc.common -START=1OO - -PROG=/usr/bin/oled - -stop() { - kill -2 $(pgrep /usr/bin/oled) - kill -9 $(pgrep -f /usr/sbin/netspeed) - echo "oled exit..." -} - -start() { - enabled=$(uci get oled.@oled[0].enable) - if [ $enabled -eq 0 ]; then - exit 0 - fi - - autoswitch=$(uci get oled.@oled[0].autoswitch) - from=$(uci get oled.@oled[0].from) - to=$(uci get oled.@oled[0].to) - - if [ ${autoswitch} -eq 1 ]; then - hour=$(date +"%H") - min=$(date +"%M") - ihour=`expr $hour + 0` - imin=`expr $min + 0` - now=$(($ihour*60+$imin)) - if [[ $now -lt $from || $now -gt $to ]]; then - stop - exit 0 - fi - fi - - #crontab daemon - if ! grep "/etc/init.d/oled \+restart" /etc/crontabs/root >/dev/null 2>&1; then - echo "*/5 * * * * /etc/init.d/oled restart >/dev/null 2>&1" >> /etc/crontabs/root - fi - - date=$(uci get oled.@oled[0].date) - lanip=$(uci get oled.@oled[0].lanip) - cputemp=$(uci get oled.@oled[0].cputemp) - cpufreq=$(uci get oled.@oled[0].cpufreq) - netspeed=$(uci get oled.@oled[0].netspeed) - time=$(uci get oled.@oled[0].time) - drawline=$(uci get oled.@oled[0].drawline) - drawrect=$(uci get oled.@oled[0].drawrect) - fillrect=$(uci get oled.@oled[0].fillrect) - drawcircle=$(uci get oled.@oled[0].drawcircle) - drawroundrect=$(uci get oled.@oled[0].drawroundrect) - fillroundrect=$(uci get oled.@oled[0].fillroundrect) - drawtriangle=$(uci get oled.@oled[0].drawtriangle) - filltriangle=$(uci get oled.@oled[0].filltriangle) - displaybitmap=$(uci get oled.@oled[0].displaybitmap) - displayinvertnormal=$(uci get oled.@oled[0].displayinvertnormal) - drawbitmapeg=$(uci get oled.@oled[0].drawbitmapeg) - scroll=$(uci get oled.@oled[0].scroll) - text=$(uci get oled.@oled[0].text) - netsource=$(uci get oled.@oled[0].netsource) - - - if [ ${netspeed} -eq 1 ]; then - nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 & - else - kill -9 $(pgrep -f /usr/sbin/netspeed) - rm -f /tmp/netspeed - fi - nohup ${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} "${text}" "${netsource}" 1 > /dev/null 2>&1 & -} - - - - -restart(){ - enabled=$(uci get oled.@oled[0].enable) - pgrep -f ${PROG} >/dev/null - if [ $? -eq 0 ]; then - if [ $enabled -eq 1 ]; then - autoswitch=$(uci get oled.@oled[0].autoswitch) - from=$(uci get oled.@oled[0].from) - to=$(uci get oled.@oled[0].to) - if [ ${autoswitch} -eq 1 ]; then - hour=$(date +"%H") - min=$(date +"%M") - ihour=`expr $hour + 0` - imin=`expr $min + 0` - now=$(($ihour*60+$imin)) - if [[ $now -lt $from || $now -gt $to ]]; then - stop - exit 0 - fi - fi - - date=$(uci get oled.@oled[0].date) - lanip=$(uci get oled.@oled[0].lanip) - cputemp=$(uci get oled.@oled[0].cputemp) - cpufreq=$(uci get oled.@oled[0].cpufreq) - netspeed=$(uci get oled.@oled[0].netspeed) - time=$(uci get oled.@oled[0].time) - drawline=$(uci get oled.@oled[0].drawline) - drawrect=$(uci get oled.@oled[0].drawrect) - fillrect=$(uci get oled.@oled[0].fillrect) - drawcircle=$(uci get oled.@oled[0].drawcircle) - drawroundrect=$(uci get oled.@oled[0].drawroundrect) - fillroundrect=$(uci get oled.@oled[0].fillroundrect) - drawtriangle=$(uci get oled.@oled[0].drawtriangle) - filltriangle=$(uci get oled.@oled[0].filltriangle) - displaybitmap=$(uci get oled.@oled[0].displaybitmap) - displayinvertnormal=$(uci get oled.@oled[0].displayinvertnormal) - drawbitmapeg=$(uci get oled.@oled[0].drawbitmapeg) - scroll=$(uci get oled.@oled[0].scroll) - text=$(uci get oled.@oled[0].text) - netsource=$(uci get oled.@oled[0].netsource) - - - kill -9 $(pgrep /usr/bin/oled) - kill -9 $(pgrep -f /usr/sbin/netspeed) - - if [ ${netspeed} -eq 1 ]; then - nohup /usr/sbin/netspeed ${netsource} >/dev/null 2>&1 & - else - kill -9 $(pgrep -f /usr/sbin/netspeed) - rm -f /tmp/netspeed - fi - nohup ${PROG} ${date} ${lanip} ${cputemp} ${cpufreq} ${netspeed} ${time} ${drawline} ${drawrect} ${fillrect} ${drawcircle} ${drawroundrect} ${fillroundrect} ${drawtriangle} ${filltriangle} ${displaybitmap} ${displayinvertnormal} ${drawbitmapeg} ${scroll} "${text}" "${netsource}" 0 > /dev/null 2>&1 & - else - stop - fi - - else - if [ $enabled -eq 1 ]; then - start - else - exit 0 - fi - fi -} diff --git a/package/ctcgfw/luci-app-oled/root/etc/uci-defaults/oled b/package/ctcgfw/luci-app-oled/root/etc/uci-defaults/oled deleted file mode 100644 index 81bc0a23f5..0000000000 --- a/package/ctcgfw/luci-app-oled/root/etc/uci-defaults/oled +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@oled[-1] - add ucitrack oled - set ucitrack.@oled[-1].init=oled - commit ucitrack -EOF - -rm -rf /tmp/luci-* -exit 0 diff --git a/package/ctcgfw/luci-app-oled/root/usr/sbin/netspeed b/package/ctcgfw/luci-app-oled/root/usr/sbin/netspeed deleted file mode 100755 index 6be8ca48d5..0000000000 --- a/package/ctcgfw/luci-app-oled/root/usr/sbin/netspeed +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/ash -IF=$1 -if [ -z "$IF" ]; then - IF=`ls -1 /sys/class/net/ | head -1` -fi -RXPREV=-1 -TXPREV=-1 -echo "Listening $IF..." -while [ 1 == 1 ] ; do - RX=`cat /sys/class/net/${IF}/statistics/rx_bytes` - TX=`cat /sys/class/net/${IF}/statistics/tx_bytes` - if [ $RXPREV -ne -1 ] ; then - let BWRX=$RX-$RXPREV - let BWTX=$TX-$TXPREV - echo "$BWRX $BWTX">/tmp/netspeed - fi - RXPREV=$RX - TXPREV=$TX - sleep 1 -done diff --git a/package/ctcgfw/luci-app-oled/src/Example_Code/Main.c b/package/ctcgfw/luci-app-oled/src/Example_Code/Main.c deleted file mode 100644 index 9bf87e697e..0000000000 --- a/package/ctcgfw/luci-app-oled/src/Example_Code/Main.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Main.c - * - * Created on : Sep 6, 2017 - * Author : Vinay Divakar - * Description : Example usage of the SSD1306 Driver API's - * Website : www.deeplyembedded.org - */ - -/* Lib Includes */ -#include -#include -#include -#include -#include - -/* Header Files */ -#include "I2C.h" -#include "SSD1306_OLED.h" -#include "example_app.h" - -/* Oh Compiler-Please leave me as is */ -volatile unsigned char flag = 0; - -/* Alarm Signal Handler */ -void ALARMhandler(int sig) -{ - /* Set flag */ - flag = 5; -} - -void BreakDeal(int sig) -{ - clearDisplay(); - usleep(1000000); - Display(); - exit(0); -} - - -int main(int argc, char* argv[]) -{ - int date=atoi(argv[1]); - int lanip=atoi(argv[2]); - int cputemp=atoi(argv[3]); - int cpufreq=atoi(argv[4]); - int netspeed=atoi(argv[5]); - int time=atoi(argv[6]); - int drawline=atoi(argv[7]); - int drawrect=atoi(argv[8]); - int fillrect=atoi(argv[9]); - int drawcircle=atoi(argv[10]); - int drawroundcircle=atoi(argv[11]); - int fillroundcircle=atoi(argv[12]); - int drawtriangle=atoi(argv[13]); - int filltriangle=atoi(argv[14]); - int displaybitmap=atoi(argv[15]); - int displayinvertnormal=atoi(argv[16]); - int drawbitmapeg=atoi(argv[17]); - int scroll=atoi(argv[18]); - char *text=argv[19]; - char *eth = argv[20]; - int needinit=atoi(argv[21]); - - - /* Initialize I2C bus and connect to the I2C Device */ - if(init_i2c_dev(I2C_DEV0_PATH, SSD1306_OLED_ADDR) == 0) - { - printf("(Main)i2c-2: Bus Connected to SSD1306\r\n"); - } - else - { - printf("(Main)i2c-2: OOPS! Something Went Wrong\r\n"); - exit(1); - } - - /* Register the Alarm Handler */ - signal(SIGALRM, ALARMhandler); - signal(SIGINT, BreakDeal); - //signal(SIGTERM, BreakDeal); -/* Run SDD1306 Initialization Sequence */ - if (needinit==1) {display_Init_seq();} - - /* Clear display */ - clearDisplay(); - - // draw a single pixel -// drawPixel(0, 1, WHITE); -// Display(); -// usleep(1000000); -// clearDisplay(); - - // draw many lines - while(1){ - - if(scroll){ - testscrolltext(text); - usleep(1000000); - clearDisplay(); - } - - if(drawline){ - testdrawline(); - usleep(1000000); - clearDisplay(); - } - - - // draw rectangles - if(drawrect){ - testdrawrect(); - usleep(1000000); - clearDisplay(); - } - - // draw multiple rectangles - if(fillrect){ - testfillrect(); - usleep(1000000); - clearDisplay(); - } - - // draw mulitple circles - if(drawcircle){ - testdrawcircle(); - usleep(1000000); - clearDisplay(); - } - - - // draw a white circle, 10 pixel radius - if(drawroundcircle){ - testdrawroundrect(); - usleep(1000000); - clearDisplay(); - } - - - // Fill the round rectangle - if(fillroundcircle){ - testfillroundrect(); - usleep(1000000); - clearDisplay(); - } - - // Draw triangles - if(drawtriangle){ - testdrawtriangle(); - usleep(1000000); - clearDisplay(); - } - // Fill triangles - if(filltriangle){ - testfilltriangle(); - usleep(1000000); - clearDisplay(); - } - - // Display miniature bitmap - if(displaybitmap){ - display_bitmap(); - Display(); - usleep(1000000); - }; - // Display Inverted image and normalize it back - if(displayinvertnormal){ - display_invert_normal(); - clearDisplay(); - usleep(1000000); - Display(); - - } - - // Generate Signal after 20 Seconds - - // draw a bitmap icon and 'animate' movement - if(drawbitmapeg){ - alarm(10); - flag=0; - testdrawbitmap_eg(); - clearDisplay(); - usleep(1000000); - Display(); - } - - - //setCursor(0,0); - setTextColor(WHITE); - // info display - int sum = date+lanip+cpufreq+cputemp+netspeed; - if (sum == 0) {clearDisplay(); return 0;} - for(int i = 1; i < time; i++){ - if (sum == 1){//only one item for display - if (date) testdate(CENTER, 8); - if (lanip) testlanip(CENTER, 8); - if (cpufreq) testcpufreq(CENTER, 8); - if (cputemp) testcputemp(CENTER, 8); - if (netspeed) testnetspeed(SPLIT,0); - Display(); - usleep(1000000); - clearDisplay(); - }else if (sum == 2){//two items for display - if(date) {testdate(CENTER, 16*(date-1));} - if(lanip) {testlanip(CENTER, 16*(date+lanip-1));} - if(cpufreq) {testcpufreq(CENTER, 16*(date+lanip+cpufreq-1));} - if(cputemp) {testcputemp(CENTER, 16*(date+lanip+cpufreq+cputemp-1));} - if(netspeed) {testnetspeed(MERGE, 16*(date+lanip+cpufreq+cputemp+netspeed-1));} - Display(); - usleep(1000000); - clearDisplay(); - } - else{//more than two items for display - if(date) {testdate(FULL, 8*(date-1));} - if(lanip) {testlanip(FULL, 8*(date+lanip-1));} - if(cpufreq && cputemp) { - testcpu(8*(date+lanip)); - if(netspeed) {testnetspeed(FULL, 8*(date+lanip+1+netspeed-1));} - } - else{ - if(cpufreq) {testcpufreq(FULL, 8*(date+lanip+cpufreq-1));} - if(cputemp) {testcputemp(FULL, 8*(date+lanip+cpufreq+cputemp-1));} - if(netspeed) {testnetspeed(FULL, 8*(date+lanip+cpufreq+cputemp+netspeed-1));} - } - - Display(); - usleep(1000000); - clearDisplay(); - } - } - } - -} diff --git a/package/ctcgfw/luci-app-oled/src/Example_Code/example_app.c b/package/ctcgfw/luci-app-oled/src/Example_Code/example_app.c deleted file mode 100644 index 9ce62d0251..0000000000 --- a/package/ctcgfw/luci-app-oled/src/Example_Code/example_app.c +++ /dev/null @@ -1,650 +0,0 @@ -/* - * MIT License - -Copyright (c) 2017 DeeplyEmbedded - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - * example_app.c - * - * Created on : Sep 6, 2017 - * Author : Vinay Divakar - * Website : www.deeplyembedded.org - */ - -/* Lib Includes */ -#include -#include -#include -#include -#include -#include -#include -#include "SSD1306_OLED.h" -#include "example_app.h" - -#define BUFMAX SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT - -/* MACRO's */ -#define LOGO16_GLCD_HEIGHT 16 -#define LOGO16_GLCD_WIDTH 16 -#define NUMFLAKES 10 -#define XPOS 0 -#define YPOS 1 -#define DELTAY 2 - - - -#define TIMESIZE 64 -//temperature -#define TEMPPATH "/sys/class/thermal/thermal_zone0/temp" -#define TEMPSIZE 5 -//cpu -#define FREQSIZE 8 -#define FREQPATH "cat /sys/devices/system/cpu/cpu[04]/cpufreq/cpuinfo_cur_freq" -//ip -#define IPPATH "ifconfig br-lan|grep 'inet addr:'|cut -d: -f2|awk '{print $1}'" -#define IPSIZE 20 -//netspeed -#define NETPATH "cat /tmp/netspeed" - -/* Extern volatile */ -extern volatile unsigned char flag; - -/* Bit Map - Taken from Adafruit SSD1306 OLED Library */ -static const unsigned char logo16_glcd_bmp[] = -{ - 0b00000000, 0b11000000, - 0b00000001, 0b11000000, - 0b00000001, 0b11000000, - 0b00000011, 0b11100000, - 0b11110011, 0b11100000, - 0b11111110, 0b11111000, - 0b01111110, 0b11111111, - 0b00110011, 0b10011111, - 0b00011111, 0b11111100, - 0b00001101, 0b01110000, - 0b00011011, 0b10100000, - 0b00111111, 0b11100000, - 0b00111111, 0b11110000, - 0b01111100, 0b11110000, - 0b01110000, 0b01110000, - 0b00000000, 0b00110000 -}; - -FILE *fp; -char content_buff[BUFMAX]; -char buf[BUFMAX]; -int display_offset =7; -/* draw many lines */ -void testdrawline() -{ - short i = 0; - for (i=0; i=0; i-=4) - { - drawLine(0, SSD1306_LCDHEIGHT-1, SSD1306_LCDWIDTH-1, i, WHITE); - Display(); - usleep(1000); - } - usleep(250000); - - clearDisplay(); - for (i=SSD1306_LCDWIDTH-1; i>=0; i-=4) - { - drawLine(SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, i, 0, WHITE); - Display(); - usleep(1000); - } - for (i=SSD1306_LCDHEIGHT-1; i>=0; i-=4) - { - drawLine(SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, 0, i, WHITE); - Display(); - usleep(1000); - } - usleep(250000); - - clearDisplay(); - for (i=0; i0; i-=5) - { - fillTriangle(SSD1306_LCDWIDTH/2, SSD1306_LCDHEIGHT/2-i, - SSD1306_LCDWIDTH/2-i, SSD1306_LCDHEIGHT/2+i, - SSD1306_LCDWIDTH/2+i, SSD1306_LCDHEIGHT/2+i, WHITE); - if (color == WHITE) - color = BLACK; - else - color = WHITE; - Display(); - usleep(1000); - } -} - -/* Display a bunch of characters and emoticons */ -void testdrawchar() -{ - unsigned char i = 0; - setTextSize(1); - setTextColor(WHITE); - setCursor(0,0); - - for (i=0; i < 168; i++) - { - if (i == '\n') - continue; - oled_write(i); - if ((i > 0) && (i % 21 == 0)) - println(); - } - Display(); - usleep(1000); -} - -/* Display "scroll" and scroll around */ -void testscrolltext(char* str) -{ - setTextSize(2); - setTextColor(WHITE); - setCursor(10,8); - sprintf(buf,"%s",str); - print_strln(buf); - Display(); - usleep(1000); - startscrollright(0x00, 0x0F); - usleep(5000000); - stopscroll(); - usleep(1000000); - startscrollleft(0x00, 0x0F); - usleep(5000000); - stopscroll(); - usleep(1000000); - startscrolldiagright(0x00, 0x07); - usleep(5000000); - startscrolldiagleft(0x00, 0x07); - usleep(5000000); - stopscroll(); -} - - - -/* Display Texts */ -void display_texts() -{ - setTextSize(1); - setTextColor(WHITE); - setCursor(10,0); - print_str("HELLO FELLAS!"); - println(); - printFloat_ln(3.141592, 4); //Print 4 No's after the decimal Pt. - printNumber_L_ln(-1234, DEC); - printNumber_UC_ln(170, BIN); - setTextSize(2); - setTextColor(WHITE); - print_str("0x"); - printNumber_UL_ln(0xDEADBEEF, HEX); -} - -/* Display miniature bitmap */ -void display_bitmap() -{ - drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1); -} - -/* Invert Display and Normalize it */ -void display_invert_normal() -{ - invertDisplay(SSD1306_INVERT_DISPLAY); - usleep(1000000); - invertDisplay(SSD1306_NORMALIZE_DISPLAY); - usleep(1000000); -} - -/* Draw a bitmap and 'animate' movement */ -void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char h) -{ - unsigned char icons[NUMFLAKES][3], f = 0; - - // initialize - for (f=0; f< NUMFLAKES; f++) - { - icons[f][XPOS] = rand() % SSD1306_LCDWIDTH; - icons[f][YPOS] = 0; - icons[f][DELTAY] = (rand() % 5) + 1; - - /* Looks kinna ugly to me - Un-Comment if you need it */ - //print_str("x: "); - //printNumber_UC(icons[f][XPOS], DEC); - //print_str("y: "); - //printNumber_UC(icons[f][YPOS], DEC); - //print_str("dy: "); - //printNumber_UC(icons[f][DELTAY], DEC); - } - - while (flag != 5) - { - // draw each icon - for (f=0; f< NUMFLAKES; f++) - { - drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE); - } - Display(); - usleep(200000); - - // then erase it + move it - for (f=0; f< NUMFLAKES; f++) - { - drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK); - - // move it - icons[f][YPOS] += icons[f][DELTAY]; - - // if its gone, reinit - if (icons[f][YPOS] > SSD1306_LCDHEIGHT) - { - icons[f][XPOS] = rand() % SSD1306_LCDWIDTH; - icons[f][YPOS] = 0; - icons[f][DELTAY] = (rand() % 5) + 1; - } - } - } -} - -/* Draw bitmap and animate */ -void testdrawbitmap_eg() -{ - setTextSize(1); - setTextColor(WHITE); - setCursor(10,0); - testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); -} - -/* Intro */ -void deeplyembedded_credits() -{ - setTextSize(1); - setTextColor(WHITE); - setCursor(1,0); - print_strln("deeplyembedded.org"); - println(); - print_strln("Author:Vinay Divakar"); - println(); - println(); - print_strln("THANK YOU"); -} - - -void testdate(int mode, int y) -{ - time_t rawtime; - time_t curtime; - uint8_t timebuff[TIMESIZE]; - curtime = time(NULL); - time(&rawtime); - switch (mode) - { - case CENTER: - setTextSize(2); - strftime(timebuff,80,"%H:%M",localtime(&rawtime)); - sprintf(buf,"%s",timebuff); - setCursor((127-strlen(buf)*11)/2-4, y); - break; - case FULL: - setTextSize(1); - strftime(timebuff,80,"%Y-%m-%d %H:%M:%S",localtime(&rawtime)); - sprintf(buf,"%s",timebuff); - setCursor(display_offset, y); - } - print_strln(buf); -} - - -void testlanip(int mode, int y) -{ - setTextSize(1); - if((fp=popen(IPPATH,"r"))!=NULL) - { - fscanf(fp,"%s",content_buff); - fclose(fp); - //ipbuff[strlen(ipbuff)-1]=32; - switch(mode) - { - case CENTER: - setTextSize(1); - sprintf(buf,"%s",content_buff); - setCursor((127-strlen(buf)*6)/2, y+4); - break; - - case FULL: - setTextSize(1); - sprintf(buf,"IP:%s",content_buff); - setCursor(display_offset, y); - } - print_strln(buf); - } - -} - - -void testcputemp(int mode, int y) -{ - if((fp=fopen(TEMPPATH,"r"))!=NULL) - { - fgets(content_buff,TEMPSIZE,fp); - fclose(fp); - switch (mode) - { - case CENTER: - setTextSize(2); - sprintf(buf, "%.2f",atoi(content_buff)/100.0); - setCursor((127-(strlen(buf)+2)*11)/2-4, y); - print_str(buf); - oled_write(0); - oled_write(67); - drawCircle(getCursorX()-16, getCursorY()+3, 2, WHITE); - break; - case FULL: - setTextSize(1); - sprintf(buf,"CPU TEMP:%.2f",atoi(content_buff)/100.0); - setCursor(display_offset, y); - print_str(buf); - oled_write(0); - oled_write(67); - drawCircle(getCursorX()-8, getCursorY()+1, 1, WHITE); - } - - } - -} - - -void testcpufreq(int mode, int y) -{ - if((fp=popen(FREQPATH,"r")) != NULL) - { - fgets(content_buff,FREQSIZE,fp); - fclose(fp); - switch(mode) - { - case CENTER: - setTextSize(2); - sprintf(buf,"%4dMHz",atoi(content_buff)/1000); - setCursor((127-strlen(buf)*11)/2-4, y); - break; - case FULL: - setTextSize(1); - sprintf(buf,"CPU FREQ:%4dMHz",atoi(content_buff)/1000); - setCursor(display_offset, y); - } - print_strln(buf); - } - -} - -void testnetspeed(int mode, int y) -{ - int rx,tx; - if((fp=popen(NETPATH,"r")) != NULL) - { - fscanf(fp,"%d %d", &rx, &tx); - fclose(fp); - rx = rx; - tx = tx; - switch(mode) - { - case SPLIT: - setTextSize(2); - if (tx < 1000) sprintf(buf, "%03dB", tx); - else if (tx > 1000000) sprintf(buf, "%03dM", tx/1000000); - else sprintf(buf, "%03dK", tx/1000); - setCursor((127-(strlen(buf)+1)*11)/2,0); - oled_write(24); - print_str(buf); - - if (rx < 1000) sprintf(buf, "%03dB", rx); - else if (rx > 1000000) sprintf(buf, "%03dM", rx/1000000); - else sprintf(buf, "%03dK", rx/1000); - setCursor((127-(strlen(buf)+1)*11)/2,16); - oled_write(25); - print_str(buf); - break; - case MERGE: - setTextSize(1); - if (tx < 1000) sprintf(buf, "%03dB ", tx); - else if (tx > 1000000) sprintf(buf, "%03dM", tx/1000000); - else sprintf(buf, "%03dK ", tx/1000); - setCursor((127-(2*strlen(buf)-1)*6)/2-4, y+4); - oled_write(24); - print_str(buf); - - if (rx < 1000) sprintf(buf, "%03dB", rx); - else if (rx > 1000000) sprintf(buf, "%03dM", rx/1000000); - else sprintf(buf, "%03dK", rx/1000); - oled_write(25); - print_str(buf); - break; - case FULL: - setTextSize(1); - setCursor(display_offset, y); - oled_write(24); - if (tx < 1000) sprintf(buf, "%03dB ", tx); - else if (tx > 1000000) sprintf(buf, "%03dM", tx/1000000); - else sprintf(buf, "%03dK ", tx/1000); - print_str(buf); - - oled_write(25); - if (rx < 1000) sprintf(buf, "%03dB", rx); - else if (rx > 1000000) sprintf(buf, "%03dM", rx/1000000); - else sprintf(buf, "%03dK", rx/1000); - print_str(buf); - } - } -} -void testcpu(int y) -{ -//freq - setTextSize(1); - setCursor(display_offset, y); - if((fp=popen(FREQPATH,"r")) != NULL) - { - fgets(content_buff,FREQSIZE,fp); - fclose(fp); - sprintf(buf,"CPU:%4dMHz ", atoi(content_buff)/1000); - print_str(buf); - } - - -//temp - if((fp=fopen(TEMPPATH,"r"))!=NULL) - { - fgets(content_buff,TEMPSIZE,fp); - fclose(fp); - sprintf(buf, "%.2f",atoi(content_buff)/100.0); - print_str(buf); - oled_write(0); - oled_write(67); - drawCircle(getCursorX()-8, getCursorY()+1, 1, WHITE); - } -} - -void testprintinfo() -{ - setTextSize(1); - setTextColor(WHITE); - setCursor(0,0); -//DATE - - time_t rawtime; - time_t curtime; - uint8_t timebuff[TIMESIZE]; - curtime = time(NULL); - time(&rawtime); - strftime(timebuff,80,"%Y-%m-%d_%w %H:%M:%S",localtime(&rawtime)); - sprintf(buf,"%s",timebuff); - print_strln(buf); - - //br-lan ip - if((fp=popen(IPPATH,"r"))!=NULL) - { - fscanf(fp,"%s",content_buff); - fclose(fp); - //ipbuff[strlen(ipbuff)-1]=32; - sprintf(buf,"IP:%s",content_buff); - print_strln(buf); - } - - //CPU temp - if((fp=popen(FREQPATH,"r")) != NULL) - { - fgets(content_buff,FREQSIZE,fp); - fclose(fp); - sprintf(buf,"CPU freq:%d MHz ",atoi(content_buff)/1000); - print_strln(buf); - } - - //cpu freq - if((fp=fopen(TEMPPATH,"r"))!=NULL) - { - fgets(content_buff,TEMPSIZE,fp); - fclose(fp); - sprintf(buf,"CPU temp:%.2f C",atoi(content_buff)/100.0); - print_strln(buf); - } - - - -} - diff --git a/package/ctcgfw/luci-app-oled/src/Example_Code/example_app.h b/package/ctcgfw/luci-app-oled/src/Example_Code/example_app.h deleted file mode 100644 index eb0435826f..0000000000 --- a/package/ctcgfw/luci-app-oled/src/Example_Code/example_app.h +++ /dev/null @@ -1,30 +0,0 @@ -#define CENTER 0 //single item display -#define SPLIT 1 //two items -#define MERGE 2 -#define FULL 3 - -void testdrawline(); -void testdrawrect(); -void testfillrect(); -void testdrawcircle(); -void testdrawroundrect(); -void testfillroundrect(); -void testdrawtriangle(); -void testfilltriangle(); -void testdrawchar(); -void testscrolltext(char *str); -void display_texts(); -void display_bitmap(); -void display_invert_normal(); -void testdrawbitmap(const unsigned char *bitmap, unsigned char w, unsigned char h); -void testdrawbitmap_eg(); -void deeplyembedded_credits(); -void testprintinfo(); -void testdate(int mode, int y); -void testlanip(int mode, int y); -void testcpufreq(int mode, int y); -void testcputemp(int mode, int y); -void testnetspeed(int mode, int y); -void testcpu(int y); - - diff --git a/package/ctcgfw/luci-app-oled/src/I2C_Library/I2C.c b/package/ctcgfw/luci-app-oled/src/I2C_Library/I2C.c deleted file mode 100644 index 7177f84242..0000000000 --- a/package/ctcgfw/luci-app-oled/src/I2C_Library/I2C.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * MIT License - -Copyright (c) 2017 DeeplyEmbedded - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - * I2C.c - * - * Created on : September 19, 2017 - * Author : Vinay Divakar - * Description : This is an I2C Library for the BeagleBone that consists of the API's to support the standard - * I2C operations. - * Website : www.deeplyembedded.org - */ - -/*Libs Includes*/ -#include -#include -#include -#include -#include -// heuristic to guess what version of i2c-dev.h we have: -// the one installed with `apt-get install libi2c-dev` -// would conflict with linux/i2c.h, while the stock -// one requires linus/i2c.h -#ifndef I2C_SMBUS_BLOCK_MAX -// If this is not defined, we have the "stock" i2c-dev.h -// so we include linux/i2c.h -#include -typedef unsigned char i2c_char_t; -#else -typedef char i2c_char_t; -#endif - -/* Header Files */ -#include "I2C.h" - - -/* Exposed objects for i2c-x */ -I2C_DeviceT I2C_DEV_2; - -/**************************************************************** - * Function Name : Open_device - * Description : Opens the I2C device to use - * Returns : 0 on success, -1 on failure - * Params @i2c_dev_path: Path to the I2C device - * @fd: Variable to store the file handler - ****************************************************************/ -int Open_device(char *i2c_dev_path, int *fd) -{ - if((*fd = open(i2c_dev_path, O_RDWR))<0) - return -1; - else - return 0; -} - - -/**************************************************************** - * Function Name : Close_device - * Description : Closes the I2C device in use - * Returns : 0 on success, -1 on failure - * Params : @fd: file descriptor - ****************************************************************/ -int Close_device(int fd) -{ - if(close(fd) == -1) - return -1; - else - return 0; -} - - -/**************************************************************** - * Function Name : Set_slave_addr - * Description : Connect to the Slave device - * Returns : 0 on success, -1 on failure - * Params @fd: File descriptor - * @slave_addr: Address of the slave device to - * talk to. - ****************************************************************/ -int Set_slave_addr(int fd, unsigned char slave_addr) -{ - if(ioctl(fd, I2C_SLAVE, slave_addr) < 0) - return -1; - else - return 0; -} - - -/**************************************************************** - * Function Name : i2c_write - * Description : Write a byte on SDA - * Returns : No. of bytes written on success, -1 on failure - * Params @fd: File descriptor - * @data: data to write on SDA - ****************************************************************/ -int i2c_write(int fd, unsigned char data) -{ - int ret = 0; - ret = write(fd, &data, I2C_ONE_BYTE); - if((ret == -1) || (ret != 1)) - return -1; - else - return(ret); -} - - -/**************************************************************** - * Function Name : i2c_read - * Description : Read a byte on SDA - * Returns : No. of bytes read on success, -1 on failure - * Params @fd: File descriptor - * @read_data: Points to the variable that stores - * the read data byte - ****************************************************************/ -int i2c_read(int fd, unsigned char *read_data) -{ - int ret = 0; - ret = read(fd, &read_data, I2C_ONE_BYTE); - if(ret == -1) - perror("I2C: Failed to read |"); - if(ret == 0) - perror("I2C: End of FILE |"); - return(ret); -} - - -/**************************************************************** - * Function Name : i2c_read_register - * Description : Read a single register of the slave device - * Returns : No. of bytes read on success, -1 on failure - * Params @fd: File descriptor - * @read_addr: Register address to be read - * @read_data: Points to the variable that stores - * the read data byte - ****************************************************************/ -int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data) -{ - int ret = 0; - if(i2c_write(fd, read_addr) == -1) - { - perror("I2C: Failed to write |"); - return -1; - } - ret = read(fd, &read_data, I2C_ONE_BYTE); - if(ret == -1) - perror("I2C: Failed to read |"); - if(ret == 0) - perror("I2C: End of FILE |"); - return(ret); -} - - -/**************************************************************** - * Function Name : i2c_read_registers - * Description : Read a multiple registers on the slave device - * from starting address - * Returns : No. of bytes read on success, -1 on failure - * Params @fd: File descriptor - * @num: Number of registers/bytes to read from. - * @starting_addr: Starting address to read from - * @buff_Ptr: Buffer to store the read bytes - ****************************************************************/ -int i2c_read_registers(int fd, int num, unsigned char starting_addr, - unsigned char *buff_Ptr) -{ - int ret = 0; - if(i2c_write(fd, starting_addr) == -1) - { - perror("I2C: Failed to write |"); - return -1; - } - ret = read(fd, buff_Ptr, num); - if(ret == -1) - perror("I2C: Failed to read |"); - if(ret == 0) - perror("I2C: End of FILE |"); - return(ret); -} - - -/**************************************************************** - * Function Name : i2c_multiple_writes - * Description : Write multiple bytes on SDA - * Returns : No. of bytes written on success, -1 on failure - * Params @fd: file descriptor - * @num: No. of bytes to write - * @Ptr_buff: Pointer to the buffer containing the - * bytes to be written on the SDA - ****************************************************************/ -int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff) -{ - int ret = 0; - ret = write(fd, Ptr_buff, num); - if((ret == -1) || (ret != num)) - return -1; - else - return(ret); -} - - -/**************************************************************** - * Function Name : i2c_write_register - * Description : Write a control byte or byte to a register - * Returns : No. of bytes written on success, -1 on failure - * Params @fd: file descriptor - * @reg_addr_or_cntrl: Control byte or Register - * address to be written - * @val: Command or value to be written in the - * addressed register - ****************************************************************/ -int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char val) -{ - unsigned char buff[2]; - int ret = 0; - buff[0] = reg_addr_or_cntrl; - buff[1] = val; - ret = write(fd, buff, I2C_TWO_BYTES); - if((ret == -1) || (ret != I2C_TWO_BYTES)) - return -1; - else - return(ret); -} - - -/**************************************************************** - * Function Name : config_i2c_struct - * Description : Initialize the I2C device structure - * Returns : NONE - * Params @i2c_dev_path: Device path - * @slave_addr: Slave device address - * @i2c_dev: Pointer to the device structure - ****************************************************************/ -void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev) -{ - i2c_dev->i2c_dev_path = i2c_dev_path; - i2c_dev->fd_i2c = 0; - i2c_dev->i2c_slave_addr = slave_addr; -} - - -/**************************************************************** - * Function Name : init_i2c_dev - * Description : Connect the i2c bus to the slave device - * Returns : 0 on success, -1 on failure - * Params @i2c_path: the path to the device - * @slave_addr: Slave device address - ****************************************************************/ -int init_i2c_dev(const char* i2c_path, unsigned char slave_address) -{ - config_i2c_struct((char*)i2c_path, slave_address, &I2C_DEV_2); - if(Open_device(I2C_DEV_2.i2c_dev_path, &I2C_DEV_2.fd_i2c) == -1) - { - perror("I2C: Failed to open device |"); - return -1; - } - if(Set_slave_addr(I2C_DEV_2.fd_i2c, I2C_DEV_2.i2c_slave_addr) == -1) - { - perror("I2C: Failed to connect to slave device |"); - return -1; - } - - return 0; -} diff --git a/package/ctcgfw/luci-app-oled/src/I2C_Library/I2C.h b/package/ctcgfw/luci-app-oled/src/I2C_Library/I2C.h deleted file mode 100644 index ffcc459339..0000000000 --- a/package/ctcgfw/luci-app-oled/src/I2C_Library/I2C.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * MIT License - -Copyright (c) 2017 DeeplyEmbedded - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - * I2C.h - * - * Created on : Sep 4, 2017 - * Author : Vinay Divakar - * Website : www.deeplyembedded.org - */ - -#ifndef I2C_H_ -#define I2C_H_ - -#include - -/* No. of bytes per transaction */ -#define I2C_ONE_BYTE 1 -#define I2C_TWO_BYTES 2 -#define I2C_THREE_BYTES 3 - -/*Definitions specific to i2c-x */ -#define I2C_DEV0_PATH "/dev/i2c-0" -#define I2C_DEV1_PATH "/dev/i2c-1" -#define I2C_DEV2_PATH "/dev/i2c-2" - -/*I2C device configuration structure*/ -typedef struct{ - char* i2c_dev_path; - int fd_i2c; - unsigned char i2c_slave_addr; -}I2C_DeviceT, *I2C_DevicePtr; - -/* Exposed Generic I2C Functions */ -extern int Open_device(char *i2c_dev_path, int *fd); -extern int Close_device(int fd); -extern int Set_slave_addr(int fd, unsigned char slave_addr); -extern int i2c_write(int fd, unsigned char data); -extern int i2c_read(int fd, unsigned char *read_data); -extern int i2c_read_register(int fd, unsigned char read_addr, unsigned char *read_data); -extern int i2c_read_registers(int fd, int num, unsigned char starting_addr, - unsigned char *buff_Ptr); -extern void config_i2c_struct(char *i2c_dev_path, unsigned char slave_addr, I2C_DevicePtr i2c_dev); -extern int i2c_multiple_writes(int fd, int num, unsigned char *Ptr_buff); -extern int i2c_write_register(int fd, unsigned char reg_addr_or_cntrl, unsigned char val); - -/* Exposed I2C-x Specific Functions */ -extern int init_i2c_dev(const char* i2c_path, unsigned char slave_address); - -#endif /* I2C_H_ */ diff --git a/package/ctcgfw/luci-app-oled/src/LICENSE b/package/ctcgfw/luci-app-oled/src/LICENSE deleted file mode 100644 index e99e91b40f..0000000000 --- a/package/ctcgfw/luci-app-oled/src/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 DeeplyEmbedded - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/package/ctcgfw/luci-app-oled/src/Makefile b/package/ctcgfw/luci-app-oled/src/Makefile deleted file mode 100644 index 0f1b25559b..0000000000 --- a/package/ctcgfw/luci-app-oled/src/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -CC = gcc -LD = gcc - -SOURCES = SSD1306_OLED_Library/SSD1306_OLED.c Example_Code/Main.c Example_Code/example_app.c I2C_Library/I2C.c -OBJS := $(SOURCES:.c=.o) -CPPFLAGS := -I SSD1306_OLED_Library -I I2C_Library -CFLAGS := -g - -oled: $(OBJS) - $(CC) $^ -o $@ - -clean: - rm -rf oled $(OBJS) - -compile: oled - -install: compile - mkdir -p $(DESTDIR)/usr/bin - cp oled $(DESTDIR)/usr/bin/oled diff --git a/package/ctcgfw/luci-app-oled/src/README.md b/package/ctcgfw/luci-app-oled/src/README.md deleted file mode 100644 index 080474f064..0000000000 --- a/package/ctcgfw/luci-app-oled/src/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# SSD1306-OLED-display-driver-for-BeagleBone -This is a SSD1306 OLED Display Library fully compatible with the BeagleBone. - -The Library has 3 components: -1. I2C component for enabling communication between the BeagleBone and display. -2. Control component for sending I2C commands to configure and control the display. -3. Graphics component for drawing geometrical figures, bitmaps, texts, characters, emoticons and numbers. - -Author: Vinay Divakar - -References: -1. https://github.com/adafruit/Adafruit_SSD1306 -2. https://github.com/adafruit/Adafruit-GFX-Library - -Youtube demo: https://youtu.be/sDKf6zW6Pyg - -MIT license, check LICENSE file for more information - -This Library is written in C. To use it, just include the I2C and SSD1306 Libraries in your project. - -Enjoy :) diff --git a/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/SSD1306_OLED.c b/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/SSD1306_OLED.c deleted file mode 100644 index 0cbd92bf22..0000000000 --- a/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/SSD1306_OLED.c +++ /dev/null @@ -1,2713 +0,0 @@ -/* - * MIT License - -Copyright (c) 2017 DeeplyEmbedded - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - * SSD1306_OLED.c - * - * Created on : Sep 26, 2017 - * Author : Vinay Divakar - * Description : SSD1306 OLED Driver, Graphics API's. - * Website : www.deeplyembedded.org - */ - -/* Lib Includes */ -#include -#include -#include -#include -#include -#include "I2C.h" -#include "SSD1306_OLED.h" -#include "gfxfont.h" - -/* Enable or Disable DEBUG Prints */ -//#define SSD1306_DBG - -/* MACROS */ -#define SWAP(x,y) {short temp; temp = x; x = y; y = temp;} -#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) -#define pgm_read_word(addr) (*(const unsigned long *)(addr)) -#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) -#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr)) - -/* static Variables */ -static unsigned char _rotation = 0,textsize = 0; -static short _width = SSD1306_LCDWIDTH; -static short _height = SSD1306_LCDHEIGHT; -static short cursor_x = 0, cursor_y = 0, textcolor = 0, textbgcolor = 0; -static bool _cp437 = false, wrap = true; - -/* static struct objects */ -static GFXfontPtr gfxFont; - -/* Externs - I2C.c */ -extern I2C_DeviceT I2C_DEV_2; - -/* Chunk Buffer */ -static unsigned char chunk[17] = {0}; - -/* Memory buffer for displaying data on LCD - This is an Apple - Fruit */ -static unsigned char screen[DISPLAY_BUFF_SIZE] ={0}; - -/* Static Functions */ -static void transfer(); -static void drawFastVLine(short x, short y,short h, short color); -static void writeFastVLine(short x, short y, short h, short color); -static void drawFastHLine(short x, short y,short w, short color); -static void writeFastHLine(short x, short y, short w, short color); -static short print(const unsigned char *buffer, short size); - -// Standard ASCII 5x7 font -static const unsigned char ssd1306_font5x7[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, //space - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, - 0x00, 0x18, 0x3C, 0x18, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, - 0x00, 0x18, 0x24, 0x18, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, - 0x30, 0x48, 0x3A, 0x06, 0x0E, - 0x26, 0x29, 0x79, 0x29, 0x26, - 0x40, 0x7F, 0x05, 0x05, 0x07, - 0x40, 0x7F, 0x05, 0x25, 0x3F, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, - 0x14, 0x22, 0x7F, 0x22, 0x14, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, - 0x06, 0x09, 0x7F, 0x01, 0x7F, - 0x00, 0x66, 0x89, 0x95, 0x6A, - 0x60, 0x60, 0x60, 0x60, 0x60, - 0x94, 0xA2, 0xFF, 0xA2, 0x94, - 0x08, 0x04, 0x7E, 0x04, 0x08,//up INDEX 24 - 0x10, 0x20, 0x7E, 0x20, 0x10,//down INDEX 25 - 0x08, 0x08, 0x2A, 0x1C, 0x08, - 0x08, 0x1C, 0x2A, 0x08, 0x08, - 0x1E, 0x10, 0x10, 0x10, 0x10, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, - 0x30, 0x38, 0x3E, 0x38, 0x30, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, - 0x14, 0x7F, 0x14, 0x7F, 0x14, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, - 0x23, 0x13, 0x08, 0x64, 0x62, - 0x36, 0x49, 0x56, 0x20, 0x50, - 0x00, 0x08, 0x07, 0x03, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, - 0x08, 0x08, 0x3E, 0x08, 0x08, - 0x00, 0x80, 0x70, 0x30, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x60, 0x60, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, - 0x3E, 0x51, 0x49, 0x45, 0x3E, - 0x00, 0x42, 0x7F, 0x40, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, - 0x21, 0x41, 0x49, 0x4D, 0x33, - 0x18, 0x14, 0x12, 0x7F, 0x10, - 0x27, 0x45, 0x45, 0x45, 0x39, - 0x3C, 0x4A, 0x49, 0x49, 0x31, - 0x41, 0x21, 0x11, 0x09, 0x07, - 0x36, 0x49, 0x49, 0x49, 0x36, - 0x46, 0x49, 0x49, 0x29, 0x1E, - 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, - 0x14, 0x14, 0x14, 0x14, 0x14, - 0x00, 0x41, 0x22, 0x14, 0x08, - 0x02, 0x01, 0x59, 0x09, 0x06, - 0x3E, 0x41, 0x5D, 0x59, 0x4E, - 0x7C, 0x12, 0x11, 0x12, 0x7C, - 0x7F, 0x49, 0x49, 0x49, 0x36, - 0x3E, 0x41, 0x41, 0x41, 0x22,//C - 0x7F, 0x41, 0x41, 0x41, 0x3E,//D - 0x7F, 0x49, 0x49, 0x49, 0x41,//E - 0x7F, 0x09, 0x09, 0x09, 0x01,//F - 0x3E, 0x41, 0x41, 0x51, 0x73, - 0x7F, 0x08, 0x08, 0x08, 0x7F, - 0x00, 0x41, 0x7F, 0x41, 0x00, - 0x20, 0x40, 0x41, 0x3F, 0x01, - 0x7F, 0x08, 0x14, 0x22, 0x41, - 0x7F, 0x40, 0x40, 0x40, 0x40, - 0x7F, 0x02, 0x1C, 0x02, 0x7F, - 0x7F, 0x04, 0x08, 0x10, 0x7F, - 0x3E, 0x41, 0x41, 0x41, 0x3E, - 0x7F, 0x09, 0x09, 0x09, 0x06, - 0x3E, 0x41, 0x51, 0x21, 0x5E, - 0x7F, 0x09, 0x19, 0x29, 0x46, - 0x26, 0x49, 0x49, 0x49, 0x32, - 0x03, 0x01, 0x7F, 0x01, 0x03, - 0x3F, 0x40, 0x40, 0x40, 0x3F, - 0x1F, 0x20, 0x40, 0x20, 0x1F, - 0x3F, 0x40, 0x38, 0x40, 0x3F, - 0x63, 0x14, 0x08, 0x14, 0x63, - 0x03, 0x04, 0x78, 0x04, 0x03, - 0x61, 0x59, 0x49, 0x4D, 0x43, - 0x00, 0x7F, 0x41, 0x41, 0x41, - 0x02, 0x04, 0x08, 0x10, 0x20, - 0x00, 0x41, 0x41, 0x41, 0x7F, - 0x04, 0x02, 0x01, 0x02, 0x04, - 0x40, 0x40, 0x40, 0x40, 0x40, - 0x00, 0x03, 0x07, 0x08, 0x00, - 0x20, 0x54, 0x54, 0x78, 0x40, - 0x7F, 0x28, 0x44, 0x44, 0x38, - 0x38, 0x44, 0x44, 0x44, 0x28, - 0x38, 0x44, 0x44, 0x28, 0x7F, - 0x38, 0x54, 0x54, 0x54, 0x18, - 0x00, 0x08, 0x7E, 0x09, 0x02, - 0x18, 0xA4, 0xA4, 0x9C, 0x78, - 0x7F, 0x08, 0x04, 0x04, 0x78, - 0x00, 0x44, 0x7D, 0x40, 0x00, - 0x20, 0x40, 0x40, 0x3D, 0x00, - 0x7F, 0x10, 0x28, 0x44, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, - 0x7C, 0x04, 0x78, 0x04, 0x78, - 0x7C, 0x08, 0x04, 0x04, 0x78, - 0x38, 0x44, 0x44, 0x44, 0x38, - 0xFC, 0x18, 0x24, 0x24, 0x18, - 0x18, 0x24, 0x24, 0x18, 0xFC, - 0x7C, 0x08, 0x04, 0x04, 0x08, - 0x48, 0x54, 0x54, 0x54, 0x24, - 0x04, 0x04, 0x3F, 0x44, 0x24, - 0x3C, 0x40, 0x40, 0x20, 0x7C, - 0x1C, 0x20, 0x40, 0x20, 0x1C, - 0x3C, 0x40, 0x30, 0x40, 0x3C, - 0x44, 0x28, 0x10, 0x28, 0x44, - 0x4C, 0x90, 0x90, 0x90, 0x7C, - 0x44, 0x64, 0x54, 0x4C, 0x44, - 0x00, 0x08, 0x36, 0x41, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, - 0x3C, 0x26, 0x23, 0x26, 0x3C, - 0x1E, 0xA1, 0xA1, 0x61, 0x12, - 0x3A, 0x40, 0x40, 0x20, 0x7A, - 0x38, 0x54, 0x54, 0x55, 0x59, - 0x21, 0x55, 0x55, 0x79, 0x41, - 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut - 0x21, 0x55, 0x54, 0x78, 0x40, - 0x20, 0x54, 0x55, 0x79, 0x40, - 0x0C, 0x1E, 0x52, 0x72, 0x12, - 0x39, 0x55, 0x55, 0x55, 0x59, - 0x39, 0x54, 0x54, 0x54, 0x59, - 0x39, 0x55, 0x54, 0x54, 0x58, - 0x00, 0x00, 0x45, 0x7C, 0x41, - 0x00, 0x02, 0x45, 0x7D, 0x42, - 0x00, 0x01, 0x45, 0x7C, 0x40, - 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut - 0xF0, 0x28, 0x25, 0x28, 0xF0, - 0x7C, 0x54, 0x55, 0x45, 0x00, - 0x20, 0x54, 0x54, 0x7C, 0x54, - 0x7C, 0x0A, 0x09, 0x7F, 0x49, - 0x32, 0x49, 0x49, 0x49, 0x32, - 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut - 0x32, 0x4A, 0x48, 0x48, 0x30, - 0x3A, 0x41, 0x41, 0x21, 0x7A, - 0x3A, 0x42, 0x40, 0x20, 0x78, - 0x00, 0x9D, 0xA0, 0xA0, 0x7D, - 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut - 0x3D, 0x40, 0x40, 0x40, 0x3D, - 0x3C, 0x24, 0xFF, 0x24, 0x24, - 0x48, 0x7E, 0x49, 0x43, 0x66, - 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, - 0xFF, 0x09, 0x29, 0xF6, 0x20, - 0xC0, 0x88, 0x7E, 0x09, 0x03, - 0x20, 0x54, 0x54, 0x79, 0x41, - 0x00, 0x00, 0x44, 0x7D, 0x41, - 0x30, 0x48, 0x48, 0x4A, 0x32, - 0x38, 0x40, 0x40, 0x22, 0x7A, - 0x00, 0x7A, 0x0A, 0x0A, 0x72, - 0x7D, 0x0D, 0x19, 0x31, 0x7D, - 0x26, 0x29, 0x29, 0x2F, 0x28, - 0x26, 0x29, 0x29, 0x29, 0x26, - 0x30, 0x48, 0x4D, 0x40, 0x20, - 0x38, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x38, - 0x2F, 0x10, 0xC8, 0xAC, 0xBA, - 0x2F, 0x10, 0x28, 0x34, 0xFA, - 0x00, 0x00, 0x7B, 0x00, 0x00, - 0x08, 0x14, 0x2A, 0x14, 0x22, - 0x22, 0x14, 0x2A, 0x14, 0x08, - 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code - 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block - 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block - 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x10, 0x10, 0x10, 0xFF, 0x00, - 0x14, 0x14, 0x14, 0xFF, 0x00, - 0x10, 0x10, 0xFF, 0x00, 0xFF, - 0x10, 0x10, 0xF0, 0x10, 0xF0, - 0x14, 0x14, 0x14, 0xFC, 0x00, - 0x14, 0x14, 0xF7, 0x00, 0xFF, - 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x14, 0x14, 0xF4, 0x04, 0xFC, - 0x14, 0x14, 0x17, 0x10, 0x1F, - 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0x1F, 0x00, - 0x10, 0x10, 0x10, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x10, - 0x10, 0x10, 0x10, 0x1F, 0x10, - 0x10, 0x10, 0x10, 0xF0, 0x10, - 0x00, 0x00, 0x00, 0xFF, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0xFF, 0x10, - 0x00, 0x00, 0x00, 0xFF, 0x14, - 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0x00, 0x1F, 0x10, 0x17, - 0x00, 0x00, 0xFC, 0x04, 0xF4, - 0x14, 0x14, 0x17, 0x10, 0x17, - 0x14, 0x14, 0xF4, 0x04, 0xF4, - 0x00, 0x00, 0xFF, 0x00, 0xF7, - 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0xF7, 0x00, 0xF7, - 0x14, 0x14, 0x14, 0x17, 0x14, - 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0xF4, 0x14, - 0x10, 0x10, 0xF0, 0x10, 0xF0, - 0x00, 0x00, 0x1F, 0x10, 0x1F, - 0x00, 0x00, 0x00, 0x1F, 0x14, - 0x00, 0x00, 0x00, 0xFC, 0x14, - 0x00, 0x00, 0xF0, 0x10, 0xF0, - 0x10, 0x10, 0xFF, 0x10, 0xFF, - 0x14, 0x14, 0x14, 0xFF, 0x14, - 0x10, 0x10, 0x10, 0x1F, 0x00, - 0x00, 0x00, 0x00, 0xF0, 0x10, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x38, 0x44, 0x44, 0x38, 0x44, - 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta - 0x7E, 0x02, 0x02, 0x06, 0x06, - 0x02, 0x7E, 0x02, 0x7E, 0x02, - 0x63, 0x55, 0x49, 0x41, 0x63, - 0x38, 0x44, 0x44, 0x3C, 0x04, - 0x40, 0x7E, 0x20, 0x1E, 0x20, - 0x06, 0x02, 0x7E, 0x02, 0x02, - 0x99, 0xA5, 0xE7, 0xA5, 0x99, - 0x1C, 0x2A, 0x49, 0x2A, 0x1C, - 0x4C, 0x72, 0x01, 0x72, 0x4C, - 0x30, 0x4A, 0x4D, 0x4D, 0x30, - 0x30, 0x48, 0x78, 0x48, 0x30, - 0xBC, 0x62, 0x5A, 0x46, 0x3D, - 0x3E, 0x49, 0x49, 0x49, 0x00, - 0x7E, 0x01, 0x01, 0x01, 0x7E, - 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, - 0x44, 0x44, 0x5F, 0x44, 0x44, - 0x40, 0x51, 0x4A, 0x44, 0x40, - 0x40, 0x44, 0x4A, 0x51, 0x40, - 0x00, 0x00, 0xFF, 0x01, 0x03, - 0xE0, 0x80, 0xFF, 0x00, 0x00, - 0x08, 0x08, 0x6B, 0x6B, 0x08, - 0x36, 0x12, 0x36, 0x24, 0x36, - 0x06, 0x0F, 0x09, 0x0F, 0x06, - 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x00, - 0x30, 0x40, 0xFF, 0x01, 0x01, - 0x00, 0x1F, 0x01, 0x01, 0x1E, - 0x00, 0x19, 0x1D, 0x17, 0x12, - 0x00, 0x3C, 0x3C, 0x3C, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP -}; - -/**************************************************************** - * Function Name : clearDisplay - * Description : Clear the display memory buffer - * Returns : NONE. - * Params : NONE. - ****************************************************************/ -void clearDisplay() -{ - memset(screen, 0x00, DISPLAY_BUFF_SIZE); -} - -/**************************************************************** - * Function Name : display_Init_seq - * Description : Performs SSD1306 OLED Initialization Sequence - * Returns : NONE. - * Params : NONE. - ****************************************************************/ -void display_Init_seq() -{ - /* Add the reset code, If needed */ - - /* Send display OFF command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DISPLAY_OFF) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display OFF Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display OFF Command Failed\r\n"); -#endif - exit(1); - } - - /* Set display clock frequency */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_DISP_CLK) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display CLK Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display CLK Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display CLK command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DISPCLK_DIV) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display CLK Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display CLK Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display multiplex */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_MULTIPLEX) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display MULT Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display MULT Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display MULT command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_MULT_DAT) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display MULT Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display MULT Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display OFFSET */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_DISP_OFFSET) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display OFFSET Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display OFFSET Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display OFFSET command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DISP_OFFSET_VAL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display OFFSET Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display OFFSET Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display START LINE - Check this command if something weird happens */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_DISP_START_LINE) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display START LINE Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display START LINE Command Failed\r\n"); -#endif - exit(1); - } - - /* Enable CHARGEPUMP*/ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_CONFIG_CHARGE_PUMP) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display CHARGEPUMP Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display CHARGEPUMP Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display CHARGEPUMP command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_CHARGE_PUMP_EN) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display CHARGEPUMP Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display CHARGEPUMP Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display MEMORYMODE */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_MEM_ADDR_MODE) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display MEMORYMODE Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display MEMORYMODE Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display HORIZONTAL MEMORY ADDR MODE command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_HOR_MM) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display HORIZONTAL MEMORY ADDR MODE Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display HORIZONTAL MEMORY ADDR MODE Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display SEG_REMAP */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SEG_REMAP) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display SEG_REMAP Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display SEG_REMAP Command Failed\r\n"); -#endif - exit(1); - } - - /* Set display DIR */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_COMSCANDEC) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display DIR Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display DIR Command Failed\r\n"); -#endif - exit(1); - } - - /* Set display COM */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_COMPINS) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display COM Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display COM Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display COM command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_CONFIG_COM_PINS) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display COM Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display COM Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display CONTRAST */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_CONTRAST) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display CONTRAST Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display CONTRAST Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display CONTRAST command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_CONTRAST_VAL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display CONTRAST Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display CONTRAST Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display PRECHARGE */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_PRECHARGE) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display PRECHARGE Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display PRECHARGE Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display PRECHARGE command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_PRECHARGE_VAL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display PRECHARGE Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display PRECHARGE Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display VCOMH */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_VCOMDETECT) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display VCOMH Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display VCOMH Command Failed\r\n"); -#endif - exit(1); - } - - /* Send display VCOMH command parameter */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_VCOMH_VAL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display VCOMH Command Parameter Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display VCOMH Command Parameter Failed\r\n"); -#endif - exit(1); - } - - /* Set display ALL-ON */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DISPLAYALLON_RESUME) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display ALL-ON Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display ALL-ON Command Failed\r\n"); -#endif - exit(1); - } - - /* Set display to NORMAL-DISPLAY */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_NORMAL_DISPLAY) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display NORMAL-DISPLAY Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display NORMAL-DISPLAY Command Failed\r\n"); -#endif - exit(1); - } - - /* Set display to DEACTIVATE_SCROLL */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DEACTIVATE_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display DEACTIVATE_SCROLL Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display DEACTIVATE_SCROLL Command Failed\r\n"); -#endif - exit(1); - } - - /* Set display to TURN-ON */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DISPLAYON) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display TURN-ON Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display TURN-ON Command Failed\r\n"); -#endif - exit(1); - } -} - -/**************************************************************** - * Function Name : transfer - * Description : Transfer the frame buffer onto the display - * Returns : NONE. - * Params : NONE. - ****************************************************************/ -void transfer() -{ - short loop_1 = 0, loop_2 = 0; - short index = 0x00; - for (loop_1 = 0; loop_1 < 1024; loop_1++) - { - chunk[0] = 0x40; - for(loop_2 = 1; loop_2 < 17; loop_2++) - chunk[loop_2] = screen[index++]; - if(i2c_multiple_writes(I2C_DEV_2.fd_i2c, 17, chunk) == 17) - { -#ifdef SSD1306_DBG - printf("Chunk written to RAM - Completed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Chunk written to RAM - Failed\r\n"); -#endif - exit(1); - } - - memset(chunk,0x00,17); - if(index == 1024) - break; - } -} - - -/**************************************************************** - * Function Name : Display - * Description : 1. Resets the column and page addresses. - * 2. Displays the contents of the memory buffer. - * Returns : NONE. - * Params : NONE. - * Note : Each new form can be preceded by a clearDisplay. - ****************************************************************/ -void Display() -{ - Init_Col_PG_addrs(SSD1306_COL_START_ADDR,SSD1306_COL_END_ADDR, - SSD1306_PG_START_ADDR,SSD1306_PG_END_ADDR); - transfer(); -} - -/**************************************************************** - * Function Name : Init_Col_PG_addrs - * Description : Sets the column and page, start and - * end addresses. - * Returns : NONE. - * Params : @col_start_addr: Column start address - * @col_end_addr: Column end address - * @pg_start_addr: Page start address - * @pg_end_addr: Page end address - ****************************************************************/ -void Init_Col_PG_addrs(unsigned char col_start_addr, unsigned char col_end_addr, - unsigned char pg_start_addr, unsigned char pg_end_addr) -{ - /* Send COLMN address setting command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_COL_ADDR) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display COLMN Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display COLMN Command Failed\r\n"); -#endif - exit(1); - } - - /* Set COLMN start address */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, col_start_addr) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display COLMN Start Address param Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display COLMN Start Address param Failed\r\n"); -#endif - exit(1); - } - - /* Set COLMN end address */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, col_end_addr) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display COLMN End Address param Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display COLMN End Address param Failed\r\n"); -#endif - exit(1); - } - - /* Send PAGE address setting command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_PAGEADDR) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display PAGE Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display PAGE Command Failed\r\n"); -#endif - exit(1); - } - - /* Set PAGE start address */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, pg_start_addr) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display PAGE Start Address param Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display PAGE Start Address param Failed\r\n"); -#endif - exit(1); - } - - /* Set PAGE end address */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, pg_end_addr) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display PAGE End Address param Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display PAGE End Address param Failed\r\n"); -#endif - exit(1); - } -} - -/**************************************************************** - * Function Name : setRotation - * Description : Set the display rotation - * Returns : NONE. - * Params : @x: Display rotation parameter - ****************************************************************/ -void setRotation(unsigned char x) -{ - _rotation = x & 3; - switch(_rotation) - { - case 0: - case 2: - _width = SSD1306_LCDWIDTH; - _height = SSD1306_LCDHEIGHT; - break; - case 1: - case 3: - _width = SSD1306_LCDHEIGHT; - _height = SSD1306_LCDWIDTH; - break; - } -} - -/**************************************************************** - * Function Name : startscrollright - * Description : Activate a right handed scroll for rows start - * through stop - * Returns : NONE. - * Params : @start: Start location - * @stop: Stop location - * HINT. : the display is 16 rows tall. To scroll the whole - * display, run: display.scrollright(0x00, 0x0F) - ****************************************************************/ -void startscrollright(unsigned char start, unsigned char stop) -{ - /* Send SCROLL horizontal right command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_RIGHT_HORIZONTAL_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display HORIZONTAL SCROLL RIGHT Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display HORIZONTAL SCROLL RIGHT Command Failed\r\n"); -#endif - exit(1); - } - - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_1 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_1 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, start) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_2 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_2 Passed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_3 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_3 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, stop) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_4 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_4 Passed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_5 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_5 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0xFF) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_6 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_6 Passed\r\n"); -#endif - exit(1); - } - /* Send SCROLL Activate command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_ACTIVATE_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Failed\r\n"); -#endif - exit(1); - } -} - -/**************************************************************** - * Function Name : startscrollleft - * Description : Activate a left handed scroll for rows start - * through stop - * Returns : NONE. - * Params : @start: Start location - * @stop: Stop location - * HINT. : the display is 16 rows tall. To scroll the whole - * display, run: display.scrollright(0x00, 0x0F) - ****************************************************************/ -void startscrollleft(unsigned char start, unsigned char stop) -{ - /* Send SCROLL horizontal left command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_LEFT_HORIZONTAL_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display HORIZONTAL SCROLL LEFT Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display HORIZONTAL SCROLL LEFT Command Failed\r\n"); -#endif - exit(1); - } - - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_1 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_1 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, start) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_2 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_2 Passed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_3 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_3 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, stop) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_4 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_4 Passed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_5 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_5 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0xFF) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_6 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("HORI_SR Param_6 Passed\r\n"); -#endif - exit(1); - } - /* Send SCROLL Activate command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_ACTIVATE_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Failed\r\n"); -#endif - exit(1); - } -} - -/**************************************************************** - * Function Name : startscrolldiagright - * Description : Activate a diagonal scroll for rows start - * through stop - * Returns : NONE. - * Params : @start: Start location - * @stop: Stop location - * HINT. : the display is 16 rows tall. To scroll the whole - * display, run: display.scrollright(0x00, 0x0F) - ****************************************************************/ -void startscrolldiagright(unsigned char start, unsigned char stop) -{ - /* Send SCROLL diagonal right command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_VERTICAL_SCROLL_AREA) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display DIAGONAL SCROLL RIGHT Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display DIAGONAL SCROLL RIGHT Command Failed\r\n"); -#endif - exit(1); - } - - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_1 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_1 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_LCDHEIGHT) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_2 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_2 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Cmd Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Cmd Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_3 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_3 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, start) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_4 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_4 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, stop) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_6 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_6 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x01) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Failed\r\n"); -#endif - exit(1); - } - - /* Send SCROLL Activate command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_ACTIVATE_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Failed\r\n"); -#endif - exit(1); - } -} - -/**************************************************************** - * Function Name : startscrolldiagleft - * Description : Activate a diagonal scroll for rows start - * through stop - * Returns : NONE. - * Params : @start: Start location - * @stop: Stop location - * HINT. : the display is 16 rows tall. To scroll the whole - * display, run: display.scrollright(0x00, 0x0F) - ****************************************************************/ -void startscrolldiagleft(unsigned char start, unsigned char stop) -{ - /* Send SCROLL diagonal right command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_SET_VERTICAL_SCROLL_AREA) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Display DIAGONAL SCROLL RIGHT Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Display DIAGONAL SCROLL RIGHT Command Failed\r\n"); -#endif - exit(1); - } - - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_1 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_1 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_LCDHEIGHT) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_2 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_2 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("Cmd Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("Cmd Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_3 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_3 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, start) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_4 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_4 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x00) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, stop) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_6 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_6 Failed\r\n"); -#endif - exit(1); - } - - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, 0x01) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("DIAG_SR Param_5 Failed\r\n"); -#endif - exit(1); - } - - /* Send SCROLL Activate command */ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_ACTIVATE_SCROLL) == I2C_TWO_BYTES) - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Passed\r\n"); -#endif - } - else - { -#ifdef SSD1306_DBG - printf("SCROLL Activate Command Failed\r\n"); -#endif - exit(1); - } -} - -/**************************************************************** - * Function Name : stopscroll - * Description : Stop scrolling - * Returns : NONE. - * Params : NONE. - ****************************************************************/ -void stopscroll() -{ - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_DEACTIVATE_SCROLL) == I2C_TWO_BYTES) - { - printf("De-activate SCROLL Command Passed\r\n"); - } - else - { - printf("De-activate SCROLL Command Passed Failed\r\n"); - exit(1); - } -} - -/**************************************************************** - * Function Name : invertDisplay - * Description : Invert or Normalize the display - * Returns : NONE. - * Params : @i: 0x00 to Normal and 0x01 for Inverting - ****************************************************************/ -void invertDisplay(unsigned char i) -{ - if (i) - { - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_INVERTDISPLAY) == I2C_TWO_BYTES) - { - printf("Display Inverted - Passed\r\n"); - } - else - { - printf("Display Inverted - Failed\r\n"); - exit(1); - } - } - else - { - if(i2c_write_register(I2C_DEV_2.fd_i2c, SSD1306_CNTRL_CMD, SSD1306_NORMAL_DISPLAY) == I2C_TWO_BYTES) - { - printf("Display Normal - Passed\r\n"); - } - else - { - printf("Display Normal - Failed\r\n"); - exit(1); - } - } -} - -/**************************************************************** - * Function Name : drawPixel - * Description : Draw a pixel - * Returns : -1 on error and 0 on success - * Params : @x: X - Co-ordinate - * @y: Y - Co-ordinate - * @color: Color - ****************************************************************/ -signed char drawPixel(short x, short y, short color) -{ - /* Return if co-ordinates are out of display dimension's range */ - if ((x < 0) || (x >= _width) || (y < 0) || (y >= _height)) - return -1; - switch(_rotation) - { - case 1: - SWAP(x,y); - x = _width - x - 1; - break; - case 2: - x = _width - x - 1; - y = _height - y - 1; - break; - case 3: - SWAP(x,y); - y = _height - y - 1; - break; - } - - /* x is the column */ - switch(color) - { - case WHITE: screen[x+ (y/8)*SSD1306_LCDWIDTH] |= (1 << (y&7)); break; - case BLACK: screen[x+ (y/8)*SSD1306_LCDWIDTH] &= ~(1 << (y&7)); break; - case INVERSE: screen[x+ (y/8)*SSD1306_LCDWIDTH] ^= (1 << (y&7)); break; - } - return 0; -} - -/**************************************************************** - * Function Name : writeLine - * Description : Bresenham's algorithm - * Returns : NONE - * Params : @x0: X0 Co-ordinate - * @y0: Y0 Co-ordinate - * @x1: X1 Co-ordinate - * @y1: Y1 Co-ordinate - * @color: Pixel color - ****************************************************************/ -void writeLine(short x0, short y0, short x1, short y1, short color) -{ - short steep = 0, dx = 0, dy = 0, err = 0, ystep = 0; - steep = abs(y1 - y0) > abs(x1 - x0); - if (steep) - { - SWAP(x0, y0); - SWAP(x1, y1); - } - - if (x0 > x1) - { - SWAP(x0, x1); - SWAP(y0, y1); - } - dx = x1 - x0; - dy = abs(y1 - y0); - - err = dx / 2; - - if (y0 < y1) - { - ystep = 1; - } else - { - ystep = -1; - } - - for (; x0<=x1; x0++) - { - if (steep) - { - drawPixel(y0, x0, color); - } else - { - drawPixel(x0, y0, color); - } - err -= dy; - if (err < 0) - { - y0 += ystep; - err += dx; - } - } -} - -/* (x,y) is topmost point; if unsure, calling function -should sort endpoints or call writeLine() instead */ -void drawFastVLine(short x, short y,short h, short color) -{ - //startWrite(); - writeLine(x, y, x, y+h-1, color); - //endWrite(); -} - -/* (x,y) is topmost point; if unsure, calling function -should sort endpoints or call writeLine() instead */ -void writeFastVLine(short x, short y, short h, short color) -{ - drawFastVLine(x, y, h, color); -} - -/* (x,y) is leftmost point; if unsure, calling function - should sort endpoints or call writeLine() instead */ -void drawFastHLine(short x, short y,short w, short color) -{ - //startWrite(); - writeLine(x, y, x+w-1, y, color); - //endWrite(); -} - -// (x,y) is leftmost point; if unsure, calling function -// should sort endpoints or call writeLine() instead -void writeFastHLine(short x, short y, short w, short color) -{ - drawFastHLine(x, y, w, color); -} - -/**************************************************************** - * Function Name : drawCircleHelper - * Description : Draw a.... - * Returns : NONE - * Params : @x: X Co-ordinate - * @y: Y Co-ordinate - * @w: Width - * @h: height - * @r: Corner radius - * @color: Pixel color - ****************************************************************/ -void drawCircleHelper( short x0, short y0, short r, unsigned char cornername, short color) -{ - short f = 1 - r; - short ddF_x = 1; - short ddF_y = -2 * r; - short x = 0; - short y = r; - - while (x= 0) - { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - if (cornername & 0x4) - { - drawPixel(x0 + x, y0 + y, color); - drawPixel(x0 + y, y0 + x, color); - } - if (cornername & 0x2) - { - drawPixel(x0 + x, y0 - y, color); - drawPixel(x0 + y, y0 - x, color); - } - if (cornername & 0x8) - { - drawPixel(x0 - y, y0 + x, color); - drawPixel(x0 - x, y0 + y, color); - } - if (cornername & 0x1) - { - drawPixel(x0 - y, y0 - x, color); - drawPixel(x0 - x, y0 - y, color); - } - } -} - -/**************************************************************** - * Function Name : drawLine - * Description : Draw line between two points - * Returns : NONE - * Params : @x0: X0 Starting X Co-ordinate - * @y0: Y0 Starting Y Co-ordinate - * @x1: X1 Ending X Co-ordinate - * @y1: Y1 Ending Y Co-ordinate - * @color: Pixel color - ****************************************************************/ -void drawLine(short x0, short y0, short x1, short y1, short color) -{ - if(x0 == x1) - { - if(y0 > y1) - SWAP(y0, y1); - drawFastVLine(x0, y0, y1 - y0 + 1, color); - } - else if(y0 == y1) - { - if(x0 > x1) SWAP(x0, x1); - drawFastHLine(x0, y0, x1 - x0 + 1, color); - } - else - { - //startWrite(); - writeLine(x0, y0, x1, y1, color); - //endWrite(); - } -} - -/**************************************************************** - * Function Name : drawRect - * Description : Draw a rectangle - * Returns : NONE - * Params : @x: Corner X Co-ordinate - * @y: Corner Y Co-ordinate - * @w: Width in pixels - * @h: Height in pixels - * @color: Pixel color - ****************************************************************/ -void drawRect(short x, short y, short w, short h, short color) -{ - //startWrite(); - writeFastHLine(x, y, w, color); - writeFastHLine(x, y+h-1, w, color); - writeFastVLine(x, y, h, color); - writeFastVLine(x+w-1, y, h, color); - //endWrite(); -} - -/**************************************************************** - * Function Name : fillRect - * Description : Fill the rectangle - * Returns : NONE - * Params : @x: Starting X Co-ordinate - * @y: Starting Y Co-ordinate - * @w: Width in pixels - * @h: Height in pixels - * @color: Pixel color - ****************************************************************/ -void fillRect(short x, short y, short w, short h, short color) -{ - short i = 0; - //startWrite(); - for (i=x; i= 0) - { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - drawPixel(x0 + x, y0 + y, color); - drawPixel(x0 - x, y0 + y, color); - drawPixel(x0 + x, y0 - y, color); - drawPixel(x0 - x, y0 - y, color); - drawPixel(x0 + y, y0 + x, color); - drawPixel(x0 - y, y0 + x, color); - drawPixel(x0 + y, y0 - x, color); - drawPixel(x0 - y, y0 - x, color); - } - //endWrite(); -} - -/**************************************************************** - * Function Name : fillCircleHelper - * Description : Used to do circles and roundrects - * Returns : NONE - * Params : @x: Center X Co-ordinate - * @y: Center Y Co-ordinate - * @r: Radius in pixels - * @cornername: Corner radius in pixels - * @color: Pixel color - ****************************************************************/ -void fillCircleHelper(short x0, short y0, short r, unsigned char cornername, short delta, short color) -{ - - short f = 1 - r; - short ddF_x = 1; - short ddF_y = -2 * r; - short x = 0; - short y = r; - - while (x= 0) - { - y--; - ddF_y += 2; - f += ddF_y; - } - x++; - ddF_x += 2; - f += ddF_x; - - if (cornername & 0x1) - { - writeFastVLine(x0+x, y0-y, 2*y+1+delta, color); - writeFastVLine(x0+y, y0-x, 2*x+1+delta, color); - } - if (cornername & 0x2) - { - writeFastVLine(x0-x, y0-y, 2*y+1+delta, color); - writeFastVLine(x0-y, y0-x, 2*x+1+delta, color); - } - } -} - -/**************************************************************** - * Function Name : fillCircle - * Description : Fill the circle - * Returns : NONE - * Params : @x0: Center X Co-ordinate - * @y0: Center Y Co-ordinate - * @r: Radius in pixels - * @color: Pixel color - ****************************************************************/ -void fillCircle(short x0, short y0, short r, short color) -{ - //startWrite(); - writeFastVLine(x0, y0-r, 2*r+1, color); - fillCircleHelper(x0, y0, r, 3, 0, color); - //endWrite(); -} - -/**************************************************************** - * Function Name : drawTriangle - * Description : Draw a triangle - * Returns : NONE - * Params : @x0: Corner-1 X Co-ordinate - * @y0: Corner-1 Y Co-ordinate - * @x1: Corner-2 X Co-ordinate - * @y1: Corner-2 Y Co-ordinate - * @x2: Corner-3 X Co-ordinate - * @y2: Corner-3 Y Co-ordinate - * @color: Pixel color - ****************************************************************/ -void drawTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color) -{ - drawLine(x0, y0, x1, y1, color); - drawLine(x1, y1, x2, y2, color); - drawLine(x2, y2, x0, y0, color); -} - -/**************************************************************** - * Function Name : fillTriangle - * Description : Fill a triangle - * Returns : NONE - * Params : @x0: Corner-1 X Co-ordinate - * @y0: Corner-1 Y Co-ordinate - * @x1: Corner-2 X Co-ordinate - * @y1: Corner-2 Y Co-ordinate - * @x2: Corner-3 X Co-ordinate - * @y2: Corner-3 Y Co-ordinate - * @color: Pixel color - ****************************************************************/ -void fillTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color) -{ - short a, b, y, last, dx01, dy01, dx02, dy02, dx12, dy12; - int sa, sb; - - // Sort coordinates by Y order (y2 >= y1 >= y0) - if (y0 > y1) - { - SWAP(y0, y1); - SWAP(x0, x1); - } - if (y1 > y2) - { - SWAP(y2, y1); - SWAP(x2, x1); - } - if (y0 > y1) - { - SWAP(y0, y1); - SWAP(x0, x1); - } - - //startWrite(); - if(y0 == y2) - { // Handle awkward all-on-same-line case as its own thing - a = b = x0; - if(x1 < a) - a = x1; - else if(x1 > b) - b = x1; - if(x2 < a) - a = x2; - else if(x2 > b) - b = x2; - writeFastHLine(a, y0, b-a+1, color); - // endWrite(); - return; - } - - dx01 = x1 - x0; - dy01 = y1 - y0; - dx02 = x2 - x0; - dy02 = y2 - y0; - dx12 = x2 - x1; - dy12 = y2 - y1; - sa = 0; - sb = 0; - - // For upper part of triangle, find scanline crossings for segments - // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 - // is included here (and second loop will be skipped, avoiding a /0 - // error there), otherwise scanline y1 is skipped here and handled - // in the second loop...which also avoids a /0 error here if y0=y1 - // (flat-topped triangle). - if(y1 == y2) - last = y1; // Include y1 scanline - else - last = y1-1; // Skip it - - for(y=y0; y<=last; y++) - { - a = x0 + sa / dy01; - b = x0 + sb / dy02; - sa += dx01; - sb += dx02; - /* longhand: - a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if(a > b) - SWAP(a,b); - writeFastHLine(a, y, b-a+1, color); - } - - // For lower part of triangle, find scanline crossings for segments - // 0-2 and 1-2. This loop is skipped if y1=y2. - sa = dx12 * (y - y1); - sb = dx02 * (y - y0); - for(; y<=y2; y++) - { - a = x1 + sa / dy12; - b = x0 + sb / dy02; - sa += dx12; - sb += dx02; - /* longhand: - a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if(a > b) - SWAP(a,b); - writeFastHLine(a, y, b-a+1, color); - } - //endWrite(); -} - -/**************************************************************** - * Function Name : drawRoundRect - * Description : Draw a rounded rectangle - * Returns : NONE - * Params : @x: X Co-ordinate - * @y: Y Co-ordinate - * @w: Width - * @h: height - * @r: Corner radius - * @color: Pixel color - ****************************************************************/ -void drawRoundRect(short x, short y, short w, short h, short r, short color) -{ - // smarter version - //startWrite(); - writeFastHLine(x+r , y , w-2*r, color); // Top - writeFastHLine(x+r , y+h-1, w-2*r, color); // Bottom - writeFastVLine(x , y+r , h-2*r, color); // Left - writeFastVLine(x+w-1, y+r , h-2*r, color); // Right - // draw four corners - drawCircleHelper(x+r , y+r , r, 1, color); - drawCircleHelper(x+w-r-1, y+r , r, 2, color); - drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color); - drawCircleHelper(x+r , y+h-r-1, r, 8, color); - //endWrite(); -} - -/**************************************************************** - * Function Name : fillRoundRect - * Description : Fill a rounded rectangle - * Returns : NONE - * Params : @x: X Co-ordinate - * @y: Y Co-ordinate - * @w: Width - * @h: height - * @r: Corner radius - * @color: Pixel color - ****************************************************************/ -void fillRoundRect(short x, short y, short w, short h, short r, short color) -{ - // smarter version - //startWrite(); - fillRect(x+r, y, w-2*r, h, color); - - // draw four corners - fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color); - fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color); - //endWrite(); -} - -/*---------------------------------------------------------------------------- - * BITMAP API's - ----------------------------------------------------------------------------*/ - -/**************************************************************** - * Function Name : drawBitmap - * Description : Draw a bitmap - * Returns : NONE - * Params : @x: X Co-ordinate - * @y: Y Co-ordinate - * @bitmap: bitmap to display - * @w: Width - * @h: height - * @color: Pixel color - ****************************************************************/ -void drawBitmap(short x, short y, const unsigned char bitmap[], short w, short h, short color) -{ - short byteWidth = 0, j = 0, i = 0; - unsigned char byte = 0; - byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte - - for(j=0; j 0) ? s : 1; -} - -/**************************************************************** - * Function Name : setTextColor - * Description : Set text color - * Returns : @c - Color - ****************************************************************/ -void setTextColor(short c) -{ - // For 'transparent' background, we'll set the bg - // to the same as fg instead of using a flag - textcolor = textbgcolor = c; -} - -/**************************************************************** - * Function Name : setTextWrap - * Description : Wraps the text - * Returns : @w - enable or disbale wrap - ****************************************************************/ -void setTextWrap(bool w) -{ - wrap = w; -} - -/**************************************************************** - * Function Name : getRotation - * Description : Get the rotation value - * Returns : NONE. - ****************************************************************/ -unsigned char getRotation() -{ - return _rotation; -} - -/**************************************************************** - * Function Name : drawBitmap - * Description : Draw a character - * Returns : NONE - * Params : @x: X Co-ordinate - * @y: Y Co-ordinate - * @c: Character - * @size: Scaling factor - * @bg: Background color - * @color: Pixel color - ****************************************************************/ -void drawChar(short x, short y, unsigned char c, short color, short bg, unsigned char size) -{ - unsigned char line = 0, *bitmap = NULL, w = 0, h = 0, xx = 0, yy = 0, bits = 0, bit = 0; - char i = 0, j = 0, xo = 0, yo = 0; - short bo = 0, xo16 = 0, yo16 = 0; - GFXglyphPtr glyph; - if(!gfxFont) - { - // 'Classic' built-in font - if((x >= _width) || (y >= _height) || ((x + 6 * size - 1) < 0) || ((y + 8 * size - 1) < 0)) - return; - - // Handle 'classic' charset behavior - if(!_cp437 && (c >= 176)) - c++; - - // Char bitmap = 5 columns - for(i=0; i<5; i++ ) - { - line = pgm_read_byte(&ssd1306_font5x7[c * 5 + i]); - for(j=0; j<8; j++, line >>= 1) - { - if(line & 1) - { - if(size == 1) - drawPixel(x+i, y+j, color); - else - fillRect(x+i*size, y+j*size, size, size, color); - } - else if(bg != color) - { - if(size == 1) - drawPixel(x+i, y+j, bg); - else - fillRect(x+i*size, y+j*size, size, size, bg); - } - } - } - - // If opaque, draw vertical line for last column - if(bg != color) - { - if(size == 1) - writeFastVLine(x+5, y, 8, bg); - else - fillRect(x+5*size, y, size, 8*size, bg); - } - - } - // Custom font - else - { - // Character is assumed previously filtered by write() to eliminate - // newlines, returns, non-printable characters, etc. Calling - // drawChar() directly with 'bad' characters of font may cause mayhem! - - c -= (unsigned char)pgm_read_byte(&gfxFont->first); - glyph = &(((GFXglyphT *)pgm_read_pointer(&gfxFont->glyph))[c]); - bitmap = (unsigned char *)pgm_read_pointer(&gfxFont->bitmap); - bo = pgm_read_word(&glyph->bitmapOffset); - w = pgm_read_byte(&glyph->width); - h = pgm_read_byte(&glyph->height); - xo = pgm_read_byte(&glyph->xOffset); - yo = pgm_read_byte(&glyph->yOffset); - - if(size > 1) - { - xo16 = xo; - yo16 = yo; - } - - // Todo: Add character clipping here - - // NOTE: THERE IS NO 'BACKGROUND' COLOR OPTION ON CUSTOM FONTS. - // THIS IS ON PURPOSE AND BY DESIGN. The background color feature - // has typically been used with the 'classic' font to overwrite old - // screen contents with new data. This ONLY works because the - // characters are a uniform size; it's not a sensible thing to do with - // proportionally-spaced fonts with glyphs of varying sizes (and that - // may overlap). To replace previously-drawn text when using a custom - // font, use the getTextBounds() function to determine the smallest - // rectangle encompassing a string, erase the area with fillRect(), - // then draw new text. This WILL unfortunately 'blink' the text, but - // is unavoidable. Drawing 'background' pixels will NOT fix this, - // only creates a new set of problems. Have an idea to work around - // this (a canvas object type for MCUs that can afford the RAM and - // displays supporting setAddrWindow() and pushColors()), but haven't - // implemented this yet. - for(yy=0; yy _width)) - { - // Off right? - cursor_x = 0; // Reset x to zero, - cursor_y += textsize * 8; // advance y one line - } - drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize); - cursor_x += textsize * 6; // Advance x one char - } - - } - else - { - // Custom font - if(c == '\n') - { - cursor_x = 0; - cursor_y += (short)textsize *(unsigned char)pgm_read_byte(&gfxFont->yAdvance); - } - else if(c != '\r') - { - first = pgm_read_byte(&gfxFont->first); - if((c >= first) && (c <= (unsigned char)pgm_read_byte(&gfxFont->last))) - { - glyph = &(((GFXglyphT*)pgm_read_pointer(&gfxFont->glyph))[c - first]); - w = pgm_read_byte(&glyph->width); - h = pgm_read_byte(&glyph->height); - if((w > 0) && (h > 0)) - { - // Is there an associated bitmap? - xo = (char)pgm_read_byte(&glyph->xOffset); // sic - if(wrap && ((cursor_x + textsize * (xo + w)) > _width)) - { - cursor_x = 0; - cursor_y += (short)textsize *(unsigned char)pgm_read_byte(&gfxFont->yAdvance); - } - drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize); - } - cursor_x += (unsigned char)pgm_read_byte(&glyph->xAdvance) * (short)textsize; - } - } - } - return 1; -} - -/**************************************************************** - * Function Name : print - * Description : Base function for printing strings - * Returns : No. of characters printed - * Params : @buffer: Ptr to buffer containing the string - * @size: Length of the string. - ****************************************************************/ -short print(const unsigned char *buffer, short size) -{ - short n = 0; - while(size--) - { - if(oled_write(*buffer++)) - n++; - else - break; - } - return (n); -} - -/**************************************************************** - * Function Name : print_str - * Description : Print strings - * Returns : No. of characters printed - * Params : @strPtr: Ptr to buffer containing the string - ****************************************************************/ -short print_str(const unsigned char *strPtr) -{ - return print(strPtr, strlen(strPtr)); -} - -/**************************************************************** - * Function Name : println - * Description : Move to next line - * Returns : No. of characters printed - * Params : NONE. - ****************************************************************/ -short println() -{ - return print_str("\r\n"); -} - -/**************************************************************** - * Function Name : print_strln - * Description : Print strings and move to next line - * Returns : No. of characters printed - * Params : @strPtr: Ptr to buffer containing the string - ****************************************************************/ -short print_strln(const unsigned char *strPtr) -{ - short n = 0; - n = print(strPtr, strlen(strPtr)); - n += print_str("\r\n"); - return (n); -} - -/*---------------------------------------------------------------------------- - * NUMBERS HANDLING API's - ----------------------------------------------------------------------------*/ - -/**************************************************************** - * Function Name : printNumber - * Description : Base function to print unsigned numbers - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber(unsigned long n, unsigned char base) -{ - unsigned long m = 0; - char c = 0; - char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. - char *str = &buf[sizeof(buf) - 1]; - - *str = '\0'; - - // prevent crash if called with base == 1 - if(base < 2) - base = 10; - do - { - m = n; - n /= base; - c = m - base * n; - *--str = c < 10 ? c + '0' : c + 'A' - 10; - } - while(n); - //return oled_write((unsigned char)str); - return print_str(str); -} - -/**************************************************************** - * Function Name : printNumber_UL - * Description : Print unsigned long data types - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_UL(unsigned long n, int base) -{ - if(base == 0) - return oled_write(n); - else - return printNumber(n, base); -} - -/**************************************************************** - * Function Name : printNumber_UL_ln - * Description : Print unsigned long & advance to next line - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_UL_ln(unsigned long num, int base) -{ - short n = 0; - n = printNumber(num, base); - n += println(); - return (n); -} - -/**************************************************************** - * Function Name : printNumber_UI - * Description : Print unsigned int data types - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_UI(unsigned int n, int base) -{ - return printNumber((unsigned long) n, base); -} - -/**************************************************************** - * Function Name : printNumber_UI_ln - * Description : Print unsigned int & advance to next line - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_UI_ln(unsigned int n, int base) -{ - short a = 0; - a = printNumber((unsigned long) n, base); - a += println(); - return (a); -} - -/**************************************************************** - * Function Name : printNumber_UC - * Description : Print unsigned char data types - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_UC(unsigned char b, int base) -{ - return printNumber((unsigned long) b, base); -} - -/**************************************************************** - * Function Name : printNumber_UC_ln - * Description : Print unsigned char & advance to next line - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_UC_ln(unsigned char b, int base) -{ - short n = 0; - n = printNumber((unsigned long) b, base); - n += println(); - return (n); -} - -/**************************************************************** - * Function Name : printNumber_L - * Description : Print Long data types - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_L(long n, int base) -{ - int t = 0; - if(base == 0) - { - return oled_write(n); - } - else if(base == 10) - { - if(n < 0) - { - t = oled_write('-'); - n = -n; - return printNumber(n, 10) + t; - } - return printNumber(n, 10); - } - else - { - return printNumber(n, base); - } -} - -/**************************************************************** - * Function Name : printNumber_UC_ln - * Description : Print long & advance to next line - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_L_ln(long num, int base) -{ - short n = 0; - n = printNumber_L(num, base); - n += println(); - return n; -} - -/**************************************************************** - * Function Name : printNumber_I - * Description : Print int data types - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_I(int n, int base) -{ - return printNumber_L((long) n, base); -} - -/**************************************************************** - * Function Name : printNumber_I_ln - * Description : Print int & advance to next line - * Returns : No. of characters printed - * Params : @n: Number - * @base: Base e.g. HEX, BIN... - ****************************************************************/ -short printNumber_I_ln(int n, int base) -{ - short a = 0; - a = printNumber_L((long) n, base); - a += println(); - return a; -} - -/**************************************************************** - * Function Name : printFloat - * Description : Print floating Pt. No's. - * Returns : No. of characters printed - * Params : @n: Number - * @digits: Resolution - ****************************************************************/ -short printFloat(double number, unsigned char digits) -{ - unsigned char i = 0; - short n = 0; - unsigned long int_part = 0; - double remainder = 0.0; - int toPrint = 0; - - // Round correctly so that print(1.999, 2) prints as "2.00" - double rounding = 0.5; - - if(isnan(number)) - return print_str("nan"); - if(isinf(number)) - return print_str("inf"); - if(number > 4294967040.0) - return print_str("ovf"); // constant determined empirically - if(number < -4294967040.0) - return print_str("ovf"); // constant determined empirically - - // Handle negative numbers - if(number < 0.0) - { - n += oled_write('-'); - number = -number; - } - - - for(i = 0; i < digits; ++i) - rounding /= 10.0; - - number += rounding; - - // Extract the integer part of the number and print it - int_part = (unsigned long) number; - remainder = number - (double) int_part; - n += printNumber_UL(int_part,DEC); - - // Print the decimal point, but only if there are digits beyond - if(digits > 0) - { - n += print_str("."); - } - - // Extract digits from the remainder one at a time - while(digits-- > 0) - { - remainder *= 10.0; - toPrint = (int)remainder; - n += printNumber_I(toPrint,DEC); - remainder -= toPrint; - } - return n; -} - -/**************************************************************** - * Function Name : printFloat_ln - * Description : Print floating Pt. No and advance to next line - * Returns : No. of characters printed - * Params : @n: Number - * @digits: Resolution - ****************************************************************/ -short printFloat_ln(double num, int digits) -{ - short n = 0; - n = printFloat(num, digits); - n += println(); - return n; -} diff --git a/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/SSD1306_OLED.h b/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/SSD1306_OLED.h deleted file mode 100644 index 9becaf4a0b..0000000000 --- a/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/SSD1306_OLED.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * MIT License - -Copyright (c) 2017 DeeplyEmbedded - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - * SSD1306_OLED.h - * - * Created on : Sep 21, 2017 - * Author : Vinay Divakar - * Website : www.deeplyembedded.org - */ - -#ifndef SSD1306_OLED_H_ -#define SSD1306_OLED_H_ - -/* Lib's */ -#include - -/* Find Min and Max - MACROS */ -#define MIN(a,b) (((a)<(b))?(a):(b)) -#define MAX(a,b) (((a)>(b))?(a):(b)) - -/* I2C Address of SSD1306 */ -#define SSD1306_OLED_ADDR 0x3C -#define DISPLAY_BUFF_SIZE (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8) - -/* COLOR MACROS */ -#define WHITE 1 -#define BLACK 0 -#define INVERSE 2 - -/* Number output format */ -#define DEC 10 -#define HEX 16 -#define OCT 8 -#define BIN 2 -#define DEFAULT 0 - -/*D/C# bit is '0' indicating that following - * byte is a command. '1' is for data - */ -#define SSD1306_CNTRL_CMD 0x00 -#define SSD1306_CNTRL_DATA 0x40 - - -/*-----------------------Enable the WxL of the Display ---------------------------*/ -//#define SSD1306_128_64 -#define SSD1306_128_32 -//#define SSD1306_96_16 -/*--------------------------------------------------------------------------------*/ - -/* LCD HxW i.e. 64x128 || WxL i.e. 128x64 */ -#if defined SSD1306_128_64 -#define SSD1306_LCDWIDTH 128 -#define SSD1306_LCDHEIGHT 64 -#endif -#if defined SSD1306_128_32 - #define SSD1306_LCDWIDTH 128 - #define SSD1306_LCDHEIGHT 32 -#endif -#if defined SSD1306_96_16 - #define SSD1306_LCDWIDTH 96 - #define SSD1306_LCDHEIGHT 16 -#endif - -/* SSD1306 Commands */ -#define SSD1306_DISPLAY_OFF 0xAE -#define SSD1306_SET_DISP_CLK 0xD5 -#define SSD1306_SET_MULTIPLEX 0xA8 -#define SSD1306_SET_DISP_OFFSET 0xD3 -#define SSD1306_SET_DISP_START_LINE 0x40// | 0x00) -#define SSD1306_CONFIG_CHARGE_PUMP 0x8D -#define SSD1306_SET_MEM_ADDR_MODE 0x20 -#define SSD1306_SEG_REMAP (0xA0 | 0x01) //Rotate 180 Degrees -#define SSD1306_SET_COMSCANDEC 0xC8 -#define SSD1306_SET_COMPINS 0xDA -#define SSD1306_SET_CONTRAST 0x81 -#define SSD1306_SET_PRECHARGE 0xD9 -#define SSD1306_SET_VCOMDETECT 0xDB -#define SSD1306_DISPLAYALLON_RESUME 0xA4 -#define SSD1306_NORMAL_DISPLAY 0xA6 -#define SSD1306_DISPLAYON 0xAF -#define SSD1306_SET_COL_ADDR 0x21 -#define SSD1306_PAGEADDR 0x22 -#define SSD1306_INVERT_DISPLAY 0x01 -#define SSD1306_NORMALIZE_DISPLAY 0x00 - -/* SDD1306 Scroll Commands */ -#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 -#define SSD1306_ACTIVATE_SCROLL 0x2F -#define SSD1306_DEACTIVATE_SCROLL 0x2E -#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 -#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 -#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 -#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A -#define SSD1306_INVERTDISPLAY 0xA7 - -/* SSD1306 Configuration Commands */ -#define SSD1306_DISPCLK_DIV 0x80 -#if defined SSD1306_128_64 -#define SSD1306_MULT_64 0x3F -#endif -#if defined SSD1306_128_32 - #define SSD1306_MULT_64 0x1F -#endif -#define SSD1306_MULT_64 0x1F -#define SSD1306_DISP_OFFSET_VAL 0x00 -#define SSD1306_COL_START_ADDR 0x00 //Reset to = 0 -#define SSD1306_COL_END_ADDR (SSD1306_LCDWIDTH - 1) //Reset to = 127 -#define SSD1306_PG_START_ADDR 0x00 -#define SSD1306_PG_END_ADDR 7 -#define SSD1306_CHARGE_PUMP_EN 0x14 -#if defined SSD1306_128_64 -#define SSD1306_CONFIG_COM_PINS 0x12 -#endif -#if defined SSD1306_128_32 - #define SSD1306_CONFIG_COM_PINS 0x02 -#endif -#define SSD1306_CONTRAST_VAL 0xCF //207 -#define SSD1306_PRECHARGE_VAL 0xF1 -#define SSD1306_VCOMH_VAL 0x40 -#define SSD1306_MULT_DAT (SSD1306_LCDHEIGHT - 1) -#define SSD1306_HOR_MM 0x00 - -/*SSD1306 Display API's */ -extern void clearDisplay(); -extern void display_Init_seq(); -extern void Display(); -extern void Init_Col_PG_addrs(unsigned char col_start_addr, unsigned char col_end_addr, - unsigned char pg_start_addr, unsigned char pg_end_addr); -extern void setRotation(unsigned char x); -extern void startscrollright(unsigned char start, unsigned char stop); -extern void startscrollleft(unsigned char start, unsigned char stop); -extern void startscrolldiagright(unsigned char start, unsigned char stop); -extern void startscrolldiagleft(unsigned char start, unsigned char stop); -extern void stopscroll(); -extern void setCursor(short x, short y); -extern short getCursorX(); -extern short getCursorY(); -extern unsigned char getRotation(); -extern void invertDisplay(unsigned char i); - -/*SSD1306 Graphics Handling API's */ -extern signed char drawPixel(short x, short y, short color); -extern void writeLine(short x0, short y0, short x1, short y1, short color); -extern void drawCircleHelper( short x0, short y0, short r, unsigned char cornername, short color); -extern void drawLine(short x0, short y0, short x1, short y1, short color); -extern void drawRect(short x, short y, short w, short h, short color); -extern void fillRect(short x, short y, short w, short h, short color); -extern void drawCircle(short x0, short y0, short r, short color); -extern void fillCircleHelper(short x0, short y0, short r, unsigned char cornername, short delta, short color); -extern void fillCircle(short x0, short y0, short r, short color); -extern void drawTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color); -extern void fillTriangle(short x0, short y0, short x1, short y1, short x2, short y2, short color); -extern void drawRoundRect(short x, short y, short w, short h, short r, short color); -extern void fillRoundRect(short x, short y, short w, short h, short r, short color); -extern void drawBitmap(short x, short y, const unsigned char bitmap[], short w, short h, short color); -extern short oled_write(unsigned char c); - -/*SSD1306 Text and Character Handling API's */ -extern void setTextSize(unsigned char s); -extern void setTextColor(short c); -extern void setTextWrap(bool w); -extern void drawChar(short x, short y, unsigned char c, short color, short bg, unsigned char size); -extern short print_str(const unsigned char *strPtr); -extern short println(); -extern short print_strln(const unsigned char *strPtr); - -/*SSD1306 Number Handling API's */ -extern short printNumber(unsigned long n, unsigned char base); -extern short printNumber_UL(unsigned long n, int base); -extern short printNumber_UL_ln(unsigned long num, int base); -extern short printNumber_UI(unsigned int n, int base); -extern short printNumber_UI_ln(unsigned int n, int base); -extern short printNumber_UC(unsigned char b, int base); -extern short printNumber_UC_ln(unsigned char b, int base); -extern short printNumber_L(long n, int base); -extern short printNumber_L_ln(long num, int base); -extern short printNumber_I(int n, int base); -extern short printNumber_I_ln(int n, int base); -extern short printFloat(double number, unsigned char digits); -extern short printFloat_ln(double num, int digits); -#endif /* SSD1306_OLED_H_ */ - diff --git a/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/gfxfont.h b/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/gfxfont.h deleted file mode 100644 index e66128a884..0000000000 --- a/package/ctcgfw/luci-app-oled/src/SSD1306_OLED_Library/gfxfont.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _GFXFONT_H_ -#define _GFXFONT_H_ - -typedef struct { // Data stored PER GLYPH - unsigned short bitmapOffset; // Pointer into GFXfont->bitmap - unsigned char width, height; // Bitmap dimensions in pixels - unsigned char xAdvance; // Distance to advance cursor (x axis) - char xOffset, yOffset; // Dist from cursor pos to UL corner -} GFXglyphT, *GFXglyphPtr; - -typedef struct { // Data stored for FONT AS A WHOLE: - unsigned char *bitmap; // Glyph bitmaps, concatenated - GFXglyphPtr glyph; // Glyph array - unsigned char first, last; // ASCII extents - unsigned char yAdvance; // Newline distance (y axis) -} GFXfontT, *GFXfontPtr; - -#endif // _GFXFONT_H_ diff --git a/package/ctcgfw/luci-app-onliner/Makefile b/package/ctcgfw/luci-app-onliner/Makefile deleted file mode 100644 index 11a9647e04..0000000000 --- a/package/ctcgfw/luci-app-onliner/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2016 Openwrt.org -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI support arp online -LUCI_DEPENDS:=+luci-app-wrtbwmon -LUCI_PKGARCH:=all -PKG_NAME:=luci-app-onliner -PKG_VERSION:=1.1 -PKG_RELEASE:=5 - -define Package/luci-app-onliner/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci - cp -pR ./luasrc/* $(1)/usr/lib/lua/luci - $(INSTALL_DIR) $(1)/ - cp -pR ./root/* $(1)/ -endef - -define Package/luci-app-onliner/postinst -#!/bin/sh - rm -f /tmp/luci-indexcache - rm -f /tmp/luci-modulecache/* - chmod -R 755 /usr/share/onliner/* -exit 0 -endef -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature - diff --git a/package/ctcgfw/luci-app-onliner/luasrc/controller/onliner.lua b/package/ctcgfw/luci-app-onliner/luasrc/controller/onliner.lua deleted file mode 100644 index 79f5f6f50f..0000000000 --- a/package/ctcgfw/luci-app-onliner/luasrc/controller/onliner.lua +++ /dev/null @@ -1,17 +0,0 @@ -module("luci.controller.onliner",package.seeall) -nixio=require"nixio" -function index() -entry({"admin","status","onliner"},alias("admin","status","onliner","onliner"),_("Connection info")) -entry({"admin","status","onliner","onliner"},template("onliner/onliner"),_("Online User"),1) -entry({"admin", "status","onliner","speed"}, template("onliner/display"), _("Speed monitor"), 2) -entry({"admin", "status","onliner","setnlbw"}, call("set_nlbw")) -end -function set_nlbw() - if nixio.fs.access("/var/run/onsetnlbw") then - nixio.fs.writefile("/var/run/onsetnlbw","1"); - else - io.popen("/usr/share/onliner/setnlbw.sh &") - end - luci.http.prepare_content("application/json") - luci.http.write('') -end diff --git a/package/ctcgfw/luci-app-onliner/luasrc/view/onliner/display.htm b/package/ctcgfw/luci-app-onliner/luasrc/view/onliner/display.htm deleted file mode 100644 index 29b738e845..0000000000 --- a/package/ctcgfw/luci-app-onliner/luasrc/view/onliner/display.htm +++ /dev/null @@ -1,921 +0,0 @@ -<%# - Copyright 2017 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% css = [[ - - #chartjs-tooltip { - opacity: 0; - position: absolute; - background: rgba(0, 0, 0, .7); - color: white; - padding: 3px; - border-radius: 3px; - -webkit-transition: all .1s ease; - transition: all .1s ease; - pointer-events: none; - -webkit-transform: translate(-50%, 0); - transform: translate(-50%, 0); - z-index: 200; - } - - #chartjs-tooltip.above { - -webkit-transform: translate(-50%, -100%); - transform: translate(-50%, -100%); - } - - #chartjs-tooltip.above:before { - border: solid; - border-color: #111 transparent; - border-color: rgba(0, 0, 0, .8) transparent; - border-width: 8px 8px 0 8px; - bottom: 1em; - content: ""; - display: block; - left: 50%; - top: 100%; - position: absolute; - z-index: 99; - -webkit-transform: translate(-50%, 0); - transform: translate(-50%, 0); - } - - table { - border: 1px solid #999; - border-collapse: collapse; - margin: 0 0 2px !important; - } - - th, td, table table td { - border: 1px solid #999; - text-align: right; - padding: 1px 3px !important; - white-space: nowrap; - } - - tbody td { - border-bottom-color: #ccc; - } - tbody td:nth-last-child(4) { - width: 10%; - } - tbody td:nth-last-child(3) { - width: 10%; - } - tbody td:nth-last-child(2) { - width: 10%; - } - tbody td:nth-last-child(1) { - width: 10%; - } - tbody td[rowspan] { - border-bottom-color: #999; - } - - tbody tr:last-child td { - border-bottom-color: #999; - } - - .kpi { - display: inline-block; - vertical-align: top; - } - - .kpi ul { - list-style: none; - } - - .kpi li { - margin: 10px; - display: none; - } - - .kpi big { - font-weight: bold; - } - - #detail-bubble { - position: absolute; - opacity: 0; - visibility: hidden; - } - - #detail-bubble.in { - opacity: 1; - visibility: visible; - transition: opacity 0.5s; - } - - #detail-bubble > div { - border: 1px solid #ccc; - border-radius: 2px; - padding: 5px; - background: #fcfcfc; - } - - #detail-bubble .head { - text-align: center; - white-space: nowrap; - position: relative; - } - - #detail-bubble .head .dismiss { - top: 0; - right: 0; - width: 20px; - line-height: 20px; - text-align: center; - text-decoration: none; - font-weight: bold; - color: #000; - position: absolute; - font-size: 20px; - } - #detail-bubble .kpi { - margin: 40px 5px 5px; - font-size: smaller; - text-align: left; - } - - #detail-bubble .kpi ul { - margin: 0; - } - - #bubble-arrow { - border: 1px solid #ccc; - border-width: 1px 0 0 1px; - background: #fcfcfc; - width: 15px; - height: 15px; - position: absolute; - left: 0; - top: -8px; - transform: rotate(45deg); - margin: 0 0 0 -8px; - } - - tr.active > td { - border-bottom: 2px solid red; - } - - tr.active > td.active { - border: 2px solid red; - border-bottom: none; - } - - td.detail { - border: 2px solid red; - border-top: none; - opacity: 0; - transition: opacity 0.5s; - } - - td.detail.in { - opacity: 1; - } - - th.hostname, - td.hostname { - text-align: left; - } - -]] -%> - -<%+header%> - - - - - -

<%:Netlink Bandwidth Monitor%>

- -
- -
-
- × -
-
    -
  • <%_Hostname: example.org%>
  • -
  • <%_Vendor: Example Corp.%>
  • -
-
-
-
-
-
- - - -
-
-
-
    -
  • <%_0 hosts%>
  • -
  • <%_0 download%>
  • -
  • <%_0 upload%>
  • -
  • <%_0 connections%>
  • -
-
-
- - - - - - - - -
<%:Host%><%:MAC%><%:Connections%><%:Download (Bytes / Packets)%><%:Upload (Bytes / Packets)%>
-
- - - - - - - -<%+footer%> diff --git a/package/ctcgfw/luci-app-onliner/luasrc/view/onliner/onliner.htm b/package/ctcgfw/luci-app-onliner/luasrc/view/onliner/onliner.htm deleted file mode 100644 index b6d9f3d9ff..0000000000 --- a/package/ctcgfw/luci-app-onliner/luasrc/view/onliner/onliner.htm +++ /dev/null @@ -1,99 +0,0 @@ -<%# - Copyright 2008 Steven Barth - Copyright 2008-2011 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% -local util = require "luci.util" -local function online_data() - local rv = { } - local fd = util.execi('/usr/bin/awk \'BEGIN{while ((getline < "/tmp/dhcp.leases") > 0){a[$2]=$4;}while ((getline < "/proc/net/arp") > 0){if (!a[$4]){a[$4]="\?";}if (match($3,"0x[26]")){"ping -q -c 1 "$1" &";if (b[$4]){b[$4]=b[$4]"/"$1;}else{b[$4]=$1;}c[$4]=$6;}}while (("ip -6 neighbor show | grep -v fe80" | getline) > 0){if (b[$5]) {"ping -q -c 1 "$1" &";b[$5]=b[$5]"/"$1;}}for (mac in b){print(a[mac],b[mac],mac,c[mac]);}}\' ') - while true do - local ln = fd() - if ln == nil then break end - local name,ip,mac,dev = ln:match("^(%S+) (%S+) (%S+) (%S+)") - if mac and ip and name and dev then - rv[#rv+1] = { - hostname = name, - device = dev, - macaddr = mac, - ipaddr = ip - } - end - end - return rv -end - - -if luci.http.formvalue("status") == "1" then - local rv = { - onlines = online_data() - } - luci.http.prepare_content("application/json") - luci.http.write_json(rv) - return -end --%> - -<%+header%> - - - - -

<%:Status%>

- -
- <%:Online User%> - - - - - - - - - - - -
<%:Hostname%><%:IPv4-Address%><%:MAC-Address%><%:Interface%>

<%:Collecting data...%>
-
- -<%+footer%> diff --git a/package/ctcgfw/luci-app-onliner/po/zh-cn/onliner.po b/package/ctcgfw/luci-app-onliner/po/zh-cn/onliner.po deleted file mode 100644 index 2c858f6539..0000000000 --- a/package/ctcgfw/luci-app-onliner/po/zh-cn/onliner.po +++ /dev/null @@ -1,14 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "Connection info" -msgstr "连接信息" - -msgid "Online User" -msgstr "在线用户" - -msgid "Speed monitor" -msgstr "宽带监视" - -msgid "There is no one online now." -msgstr "当前无任何设备在线。" diff --git a/package/ctcgfw/luci-app-onliner/root/usr/share/onliner/setnlbw.sh b/package/ctcgfw/luci-app-onliner/root/usr/share/onliner/setnlbw.sh deleted file mode 100755 index cd49e40b48..0000000000 --- a/package/ctcgfw/luci-app-onliner/root/usr/share/onliner/setnlbw.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -PATH="/usr/sbin:/usr/bin:/sbin:/bin" -echo "1">/var/run/onsetnlbw -interval=$(uci get nlbwmon.@nlbwmon[0].refresh_interval) -uci set nlbwmon.@nlbwmon[0].refresh_interval="2s" -/etc/init.d/nlbwmon reload -while true -do - sleep 12 - watchdog=$(cat /var/run/onsetnlbw) - if [ "$watchdog"x == "0"x ]; then - uci set nlbwmon.@nlbwmon[0].refresh_interval=$interval - uci commit nlbwmon - /etc/init.d/nlbwmon reload - rm -f /var/run/onsetnlbw - exit 0 - else - echo "0">/var/run/onsetnlbw - fi -done diff --git a/package/ctcgfw/luci-app-openclash/Makefile b/package/ctcgfw/luci-app-openclash/Makefile deleted file mode 100644 index 4378a26bdf..0000000000 --- a/package/ctcgfw/luci-app-openclash/Makefile +++ /dev/null @@ -1,104 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.42.03 -PKG_RELEASE:=beta -PKG_MAINTAINER:=vernesong - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME)/config - select PACKAGE_libcap-bin -endef - -define Package/$(PKG_NAME) - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI support for clash - PKGARCH:=all - DEPENDS:=+iptables +dnsmasq-full +coreutils +coreutils-nohup +bash +curl +jsonfilter +ca-certificates +ipset +ip-full +iptables-mod-tproxy +iptables-mod-extra +libcap +ruby +ruby-yaml - MAINTAINER:=vernesong -endef - -define Package/$(PKG_NAME)/description - A LuCI support for clash -endef - -define Build/Prepare - $(CP) $(CURDIR)/root $(PKG_BUILD_DIR) - $(CP) $(CURDIR)/luasrc $(PKG_BUILD_DIR) - $(foreach po,$(wildcard ${CURDIR}/po/zh-cn/*.po), \ - po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) - chmod 0755 $(PKG_BUILD_DIR)/root/etc/init.d/openclash - chmod -R 0755 $(PKG_BUILD_DIR)/root/usr/share/openclash/ - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/config - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/rule_provider - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/backup - mkdir -p $(PKG_BUILD_DIR)/root/etc/openclash/core - mkdir -p $(PKG_BUILD_DIR)/root/usr/share/openclash/backup - cp -f "$(PKG_BUILD_DIR)/root/etc/config/openclash" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_rules.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_rules.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_rules_2.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_rules_2.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_hosts.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_hosts.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_fake_filter.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_fake_filter.list" >/dev/null 2>&1 - cp -f "$(PKG_BUILD_DIR)/root/etc/openclash/custom/openclash_custom_domain_dns.list" "$(PKG_BUILD_DIR)/root/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1 -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/conffiles -endef - -define Package/$(PKG_NAME)/preinst -#!/bin/sh -if [ -f "/etc/config/openclash" ]; then - cp -f "/etc/config/openclash" "/tmp/openclash.bak" >/dev/null 2>&1 - cp -rf "/etc/openclash" "/tmp/openclash" >/dev/null 2>&1 -fi -endef - -define Package/$(PKG_NAME)/postinst -endef - -define Package/$(PKG_NAME)/prerm -#!/bin/sh - uci -q set openclash.config.enable=0 - uci -q commit openclash - cp -f "/etc/config/openclash" "/tmp/openclash.bak" >/dev/null 2>&1 - cp -rf "/etc/openclash" "/tmp/openclash" >/dev/null 2>&1 -endef - -define Package/$(PKG_NAME)/postrm -#!/bin/sh - rm -rf /etc/openclash - rm -rf /tmp/openclash.log - rm -rf /tmp/openclash_start.log - rm -rf /tmp/openclash_last_version - rm -rf /tmp/Proxy_Group - rm -rf /tmp/rules_name - rm -rf /tmp/rule_providers_name - rm -rf /tmp/clash_last_version - rm -rf /usr/share/openclash/backup - rm -rf /tmp/openclash_fake_filter.list - rm -rf /tmp/openclash_servers_fake_filter.conf - uci -q delete firewall.openclash - uci -q commit firewall - uci -q delete ucitrack.@openclash[-1] - uci -q commit ucitrack - rm -rf /tmp/luci-* -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DATA) $(PKG_BUILD_DIR)/*.*.lmo $(1)/usr/lib/lua/luci/i18n/ - $(CP) $(PKG_BUILD_DIR)/root/* $(1)/ - $(CP) $(PKG_BUILD_DIR)/luasrc/* $(1)/usr/lib/lua/luci/ -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/ctcgfw/luci-app-openclash/luasrc/controller/openclash.lua b/package/ctcgfw/luci-app-openclash/luasrc/controller/openclash.lua deleted file mode 100644 index 9c625fe284..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/controller/openclash.lua +++ /dev/null @@ -1,467 +0,0 @@ -module("luci.controller.openclash", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/openclash") then - return - end - - local page - - page = entry({"admin", "services", "openclash"}, alias("admin", "services", "openclash", "client"), _("OpenClash"), 50) - page.dependent = true - page.acl_depends = { "luci-app-openclash" } - entry({"admin", "services", "openclash", "client"},cbi("openclash/client"),_("Overviews"), 20).leaf = true - entry({"admin", "services", "openclash", "status"},call("action_status")).leaf=true - entry({"admin", "services", "openclash", "state"},call("action_state")).leaf=true - entry({"admin", "services", "openclash", "startlog"},call("action_start")).leaf=true - entry({"admin", "services", "openclash", "refresh_log"},call("action_refresh_log")) - entry({"admin", "services", "openclash", "del_log"},call("action_del_log")) - entry({"admin", "services", "openclash", "close_all_connection"},call("action_close_all_connection")) - entry({"admin", "services", "openclash", "restore_history"},call("action_restore_history")) - entry({"admin", "services", "openclash", "get_history"},call("action_get_history")) - entry({"admin", "services", "openclash", "reload_firewall"},call("action_reload_firewall")) - entry({"admin", "services", "openclash", "update_subscribe"},call("action_update_subscribe")) - entry({"admin", "services", "openclash", "update_other_rules"},call("action_update_other_rules")) - entry({"admin", "services", "openclash", "update_geoip"},call("action_update_geoip")) - entry({"admin", "services", "openclash", "currentversion"},call("action_currentversion")) - entry({"admin", "services", "openclash", "lastversion"},call("action_lastversion")) - entry({"admin", "services", "openclash", "update"},call("action_update")) - entry({"admin", "services", "openclash", "update_ma"},call("action_update_ma")) - entry({"admin", "services", "openclash", "opupdate"},call("action_opupdate")) - entry({"admin", "services", "openclash", "coreupdate"},call("action_coreupdate")) - entry({"admin", "services", "openclash", "coretunupdate"},call("action_core_tun_update")) - entry({"admin", "services", "openclash", "coregameupdate"},call("action_core_game_update")) - entry({"admin", "services", "openclash", "ping"}, call("act_ping")) - entry({"admin", "services", "openclash", "download_rule"}, call("action_download_rule")) - entry({"admin", "services", "openclash", "restore"}, call("action_restore_config")) - entry({"admin", "services", "openclash", "one_key_update"}, call("action_one_key_update")) - entry({"admin", "services", "openclash", "one_key_update_check"}, call("action_one_key_update_check")) - entry({"admin", "services", "openclash", "switch_mode"}, call("action_switch_mode")) - entry({"admin", "services", "openclash", "op_mode"}, call("action_op_mode")) - entry({"admin", "services", "openclash", "settings"},cbi("openclash/settings"),_("Global Settings"), 30).leaf = true - entry({"admin", "services", "openclash", "servers"},cbi("openclash/servers"),_("Servers and Groups"), 40).leaf = true - entry({"admin", "services", "openclash", "other-rules-edit"},cbi("openclash/other-rules-edit"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-settings"},cbi("openclash/rule-providers-settings"),_("Rule Providers and Groups"), 50).leaf = true - entry({"admin", "services", "openclash", "game-rules-manage"},form("openclash/game-rules-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-manage"},form("openclash/rule-providers-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "proxy-provider-file-manage"},form("openclash/proxy-provider-file-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-file-manage"},form("openclash/rule-providers-file-manage"), nil).leaf = true - entry({"admin", "services", "openclash", "config-subscribe"},cbi("openclash/config-subscribe"),_("Config Update"), 60).leaf = true - entry({"admin", "services", "openclash", "config-subscribe-edit"},cbi("openclash/config-subscribe-edit"), nil).leaf = true - entry({"admin", "services", "openclash", "servers-config"},cbi("openclash/servers-config"), nil).leaf = true - entry({"admin", "services", "openclash", "groups-config"},cbi("openclash/groups-config"), nil).leaf = true - entry({"admin", "services", "openclash", "proxy-provider-config"},cbi("openclash/proxy-provider-config"), nil).leaf = true - entry({"admin", "services", "openclash", "rule-providers-config"},cbi("openclash/rule-providers-config"), nil).leaf = true - entry({"admin", "services", "openclash", "config"},form("openclash/config"),_("Config Manage"), 70).leaf = true - entry({"admin", "services", "openclash", "log"},cbi("openclash/log"),_("Server Logs"), 80).leaf = true - -end -local fs = require "luci.openclash" - -local core_path_mode = luci.sys.exec("uci get openclash.config.small_flash_memory 2>/dev/null |tr -d '\n'") -if core_path_mode ~= "1" then - dev_core_path="/etc/openclash/core/clash" - tun_core_path="/etc/openclash/core/clash_tun" - game_core_path="/etc/openclash/core/clash_game" -else - dev_core_path="/tmp/etc/openclash/core/clash" - tun_core_path="/tmp/etc/openclash/core/clash_tun" - game_core_path="/tmp/etc/openclash/core/clash_game" -end - -local function is_running() - return luci.sys.call("pidof clash >/dev/null") == 0 -end - -local function is_web() - return luci.sys.call("pidof clash >/dev/null") == 0 -end - -local function restricted_mode() - return luci.sys.exec("uci get openclash.config.restricted_mode 2>/dev/null |tr -d '\n'") -end - -local function is_watchdog() - local ps_version = luci.sys.exec("ps --version 2>&1 |grep -c procps-ng |tr -d '\n'") - if ps_version == "0" then - return luci.sys.call("ps |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0 - else - return luci.sys.call("ps -ef |grep openclash_watchdog.sh |grep -v grep >/dev/null") == 0 - end -end - -local function cn_port() - return luci.sys.exec("uci get openclash.config.cn_port 2>/dev/null |tr -d '\n'") -end - -local function mode() - return luci.sys.exec("uci get openclash.config.en_mode 2>/dev/null") -end - -local function ipdb() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/etc/openclash/Country.mmdb")) -end - -local function lhie1() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/lhie1.yaml")) -end - -local function ConnersHua() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/ConnersHua.yaml")) -end - -local function ConnersHua_return() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/usr/share/openclash/res/ConnersHua_return.yaml")) -end - -local function chnroute() - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/etc/openclash/rule_provider/ChinaIP.yaml")) -end - -local function daip() - local daip = luci.sys.exec("ifstatus lan 2>/dev/null |jsonfilter -e '@[\"ipv4-address\"][0].address' 2>/dev/null") - if not daip or daip == "" then - local daip = luci.sys.exec("uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") - end - return daip -end - -local function uh_port() - local uh_port = luci.sys.exec("uci get uhttpd.main.listen_http |awk -F ':' '{print $NF}'") - if uh_port ~= "80" then - return ":" .. uh_port - end -end - -local function dase() - return luci.sys.exec("uci get openclash.config.dashboard_password 2>/dev/null") -end - -local function check_lastversion() - luci.sys.exec("sh /usr/share/openclash/openclash_version.sh 2>/dev/null") - return luci.sys.exec("sed -n '/^https:/,$p' /tmp/openclash_last_version 2>/dev/null") -end - -local function check_currentversion() - return luci.sys.exec("sed -n '/^data:image/,$p' /usr/share/openclash/res/openclash_version 2>/dev/null") -end - -local function startlog() - return luci.sys.exec("sed -n '$p' /tmp/openclash_start.log 2>/dev/null") -end - -local function coremodel() - local coremodel = luci.sys.exec("cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_ARCH 2>/dev/null |awk -F '\"' '{print $2}' 2>/dev/null") - local coremodel2 = luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") - if not coremodel or coremodel == "" then - return coremodel2 .. "," .. coremodel2 - else - return coremodel .. "," .. coremodel2 - end -end - -local function corecv() -if not nixio.fs.access(dev_core_path) then - return "0" -else - return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'",dev_core_path)) -end -end - -local function coretuncv() -if not nixio.fs.access(tun_core_path) then - return "0" -else - return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'",tun_core_path)) -end -end - -local function coregamecv() -if not nixio.fs.access(game_core_path) then - return "0" -else - return luci.sys.exec(string.format("%s -v 2>/dev/null |awk -F ' ' '{print $2}'",game_core_path)) -end -end - -local function corelv() - luci.sys.call("sh /usr/share/openclash/clash_version.sh") - local core_lv = luci.sys.exec("sed -n 1p /tmp/clash_last_version 2>/dev/null") - local core_tun_lv = luci.sys.exec("sed -n 2p /tmp/clash_last_version 2>/dev/null") - local core_game_lv = luci.sys.exec("sed -n 3p /tmp/clash_last_version 2>/dev/null") - return core_lv .. "," .. core_tun_lv .. "," .. core_game_lv -end - -local function opcv() - return luci.sys.exec("sed -n 1p /usr/share/openclash/res/openclash_version 2>/dev/null") -end - -local function oplv() - local new = luci.sys.call(string.format("sh /usr/share/openclash/openclash_version.sh")) - local oplv = luci.sys.exec("sed -n 1p /tmp/openclash_last_version 2>/dev/null") - return oplv .. "," .. new -end - -local function opup() - luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/openclash_version.sh >/dev/null 2>&1") - return luci.sys.call("sh /usr/share/openclash/openclash_update.sh >/dev/null 2>&1 &") -end - -local function coreup() - luci.sys.call("uci set openclash.config.enable=1 && uci commit openclash && rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh >/dev/null 2>&1") - return luci.sys.call("/usr/share/openclash/openclash_core.sh >/dev/null 2>&1 &") -end - -local function coretunup() - luci.sys.call("uci set openclash.config.enable=1 && uci commit openclash && rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh >/dev/null 2>&1") - return luci.sys.call("/usr/share/openclash/openclash_core.sh 'Tun' >/dev/null 2>&1 &") -end - -local function coregameup() - luci.sys.call("uci set openclash.config.enable=1 && uci commit openclash && rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh >/dev/null 2>&1") - return luci.sys.call("/usr/share/openclash/openclash_core.sh 'Game' >/dev/null 2>&1 &") -end - -local function corever() - return luci.sys.exec("uci get openclash.config.core_version 2>/dev/null") -end - -local function upchecktime() - local corecheck = os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/tmp/clash_last_version")) - local opcheck - if not corecheck or corecheck == "" then - opcheck = os.date("%Y-%m-%d %H:%M:%S",fs.mtime("/tmp/openclash_last_version")) - if not opcheck or opcheck == "" then - return "1" - else - return opcheck - end - else - return corecheck - end -end - -local function historychecktime() - local CONFIG_FILE = string.sub(luci.sys.exec("uci get openclash.config.config_path 2>/dev/null"), 1, -2) - local CONFIG_NAME = fs.basename(CONFIG_FILE) - local HISTORY_PATH = "/etc/openclash/history/" .. CONFIG_NAME - if not nixio.fs.access(HISTORY_PATH) then - return "0" - else - return os.date("%Y-%m-%d %H:%M:%S",fs.mtime(HISTORY_PATH)) - end -end - -function download_rule() - local filename = luci.http.formvalue("filename") - local state = luci.sys.call(string.format('/usr/share/openclash/openclash_download_rule_list.sh "%s" >/dev/null 2>&1',filename)) - return state -end - -function action_restore_config() - luci.sys.call("/etc/init.d/openclash stop >/dev/null 2>&1") - luci.sys.call("cp '/usr/share/openclash/backup/openclash' '/etc/config/openclash' >/dev/null 2>&1 &") - luci.sys.call("cp '/usr/share/openclash/backup/openclash_custom_rules.list' '/etc/openclash/custom/openclash_custom_rules.list' >/dev/null 2>&1 &") - luci.sys.call("cp '/usr/share/openclash/backup/openclash_custom_rules_2.list' '/etc/openclash/custom/openclash_custom_rules_2.list' >/dev/null 2>&1 &") - luci.sys.call("cp '/usr/share/openclash/backup/openclash_custom_fake_black.conf' '/etc/openclash/custom/openclash_custom_fake_black.conf' >/dev/null 2>&1 &") - luci.sys.call("cp '/usr/share/openclash/backup/openclash_custom_hosts.list' '/etc/openclash/custom/openclash_custom_hosts.list' >/dev/null 2>&1 &") - luci.sys.call("cp '/usr/share/openclash/backup/openclash_custom_domain_dns.list' '/etc/openclash/custom/openclash_custom_domain_dns.list' >/dev/null 2>&1 &") -end - -function action_one_key_update() - return luci.sys.call("sh /usr/share/openclash/openclash_update.sh 'one_key_update' >/dev/null 2>&1 &") -end - -function action_one_key_update_check() - luci.sys.call("rm -rf /tmp/*_last_version 2>/dev/null") - luci.http.prepare_content("application/json") - luci.http.write_json({ - corever = corever(), - corelv = corelv(), - oplv = oplv(); - }) -end - -function action_op_mode() - local op_mode = luci.sys.exec("uci get openclash.config.operation_mode 2>/dev/null |tr -d '\n'") - luci.http.prepare_content("application/json") - luci.http.write_json({ - op_mode = op_mode; - }) -end - -function action_switch_mode() - local switch_mode = luci.sys.exec("uci get openclash.config.operation_mode 2>/dev/null |tr -d '\n'") - if switch_mode == "redir-host" then - luci.sys.call("uci set openclash.config.operation_mode=fake-ip >/dev/null 2>&1 && uci commit openclash") - else - luci.sys.call("uci set openclash.config.operation_mode=redir-host >/dev/null 2>&1 && uci commit openclash") - end - luci.http.prepare_content("application/json") - luci.http.write_json({ - switch_mode = switch_mode; - }) -end - -function action_status() - luci.http.prepare_content("application/json") - luci.http.write_json({ - clash = is_running(), - watchdog = is_watchdog(), - daip = daip(), - dase = dase(), - uh_port = uh_port(), - web = is_web(), - cn_port = cn_port(), - restricted_mode = restricted_mode(), - mode = mode(); - }) -end - -function action_state() - luci.http.prepare_content("application/json") - luci.http.write_json({ - lhie1 = lhie1(), - ConnersHua = ConnersHua(), - ConnersHua_return = ConnersHua_return(), - ipdb = ipdb(), - historychecktime = historychecktime(), - chnroute = chnroute(); - }) -end - -function action_lastversion() - luci.http.prepare_content("application/json") - luci.http.write_json({ - lastversion = check_lastversion(); - }) -end - -function action_currentversion() - luci.http.prepare_content("application/json") - luci.http.write_json({ - currentversion = check_currentversion(); - }) -end - -function action_start() - luci.http.prepare_content("application/json") - luci.http.write_json({ - startlog = startlog(); - }) -end - -function action_update() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coremodel = coremodel(), - corecv = corecv(), - coretuncv = coretuncv(), - coregamecv = coregamecv(), - opcv = opcv(), - corever = corever(), - upchecktime = upchecktime(), - corelv = corelv(), - oplv = oplv(); - }) -end - -function action_update_ma() - luci.http.prepare_content("application/json") - luci.http.write_json({ - oplv = oplv(), - corelv = corelv(), - corever = corever(); - }) -end - -function action_opupdate() - luci.http.prepare_content("application/json") - luci.http.write_json({ - opup = opup(); - }) -end - -function action_coreupdate() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coreup = coreup(); - }) -end - -function action_core_tun_update() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coretunup = coretunup(); - }) -end - -function action_core_game_update() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coregameup = coregameup(); - }) -end - -function action_close_all_connection() - return luci.sys.call("sh /usr/share/openclash/openclash_history_set.sh close_all_conection") -end - -function action_restore_history() - return luci.sys.call("sh /usr/share/openclash/openclash_history_set.sh") -end - -function action_get_history() - return luci.sys.call("sh /usr/share/openclash/openclash_history_get.sh") -end - -function action_reload_firewall() - return luci.sys.call("/etc/init.d/openclash reload") -end - -function action_update_subscribe() - fs.unlink("/tmp/Proxy_Group") - return luci.sys.call("/usr/share/openclash/openclash.sh >/dev/null 2>&1") -end - -function action_update_other_rules() - return luci.sys.call("/usr/share/openclash/openclash_rule.sh >/dev/null 2>&1") -end - -function action_update_geoip() - return luci.sys.call("/usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1") -end - -function act_ping() - local e={} - e.index=luci.http.formvalue("index") - e.ping=luci.sys.exec("ping -c 1 -W 1 %q 2>&1 | grep -o 'time=[0-9]*.[0-9]' | awk -F '=' '{print$2}'"%luci.http.formvalue("domain")) - luci.http.prepare_content("application/json") - luci.http.write_json(e) -end - -function action_download_rule() - luci.http.prepare_content("application/json") - luci.http.write_json({ - rule_download_status = download_rule(); - }) -end - -function action_refresh_log() - local logfile="/tmp/openclash.log" - if not fs.access(logfile) then - luci.http.write("") - return - end - luci.http.prepare_content("text/plain; charset=utf-8") - local f=io.open(logfile, "r+") - f:seek("set") - local a=f:read(2048000) or "" - f:close() - luci.http.write(a) -end - -function action_del_log() - luci.sys.exec(": > /tmp/openclash.log") - return -end \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/client.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/client.lua deleted file mode 100644 index f03014c7f2..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/client.lua +++ /dev/null @@ -1,132 +0,0 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require("luci.model.uci").cursor() - -m = Map("openclash") -m.title = translate("OpenClash") -m.description = translate("A Clash Client For OpenWrt") -m.pageaction = false - -m:section(SimpleSection).template = "openclash/status" - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -function config_check(CONFIG_FILE) - local yaml = fs.isfile(CONFIG_FILE) - if yaml then - yaml = SYS.exec(string.format('ruby -ryaml -E UTF-8 -e "puts YAML.load_file(\'%s\')" 2>/dev/null',CONFIG_FILE)) - if yaml ~= "false\n" and yaml ~= "" then - return "Config Normal" - else - return "Config Abnormal" - end - elseif (yaml ~= 0) then - return "File Not Exist" - end -end - -local e,a={} -for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do -a=fs.stat(o) -if a then -e[t]={} -e[t].num=string.format(t) -e[t].name=fs.basename(o) -BACKUP_FILE="/etc/openclash/backup/".. e[t].name -CONFIG_FILE="/etc/openclash/config/".. e[t].name -if fs.mtime(BACKUP_FILE) then - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE)) -else - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",a.mtime) -end -if string.sub(SYS.exec("uci get openclash.config.config_path 2>/dev/null"), 23, -2) == e[t].name then - e[t].state=translate("Enable") -else - e[t].state=translate("Disable") -end -e[t].check=translate(config_check(CONFIG_FILE)) -end -end - -form = Map("openclash") -form.pageaction = false -tb=form:section(Table,e) -st=tb:option(DummyValue,"state",translate("State")) -st.template="openclash/cfg_check" -nm=tb:option(DummyValue,"name",translate("Config Alias")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) -ck=tb:option(DummyValue,"check",translate("Grammar Check")) -ck.template="openclash/cfg_check" - -btnis=tb:option(Button,"switch",translate("Switch Config")) -btnis.template="openclash/other_button" -btnis.render=function(o,t,a) -if not e[t] then return false end -if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then -a.display="" -else -a.display="none" -end -o.inputstyle="apply" -Button.render(o,t,a) -end -btnis.write=function(a,t) -fs.unlink("/tmp/Proxy_Group") -SYS.exec(string.format('uci set openclash.config.config_path="/etc/openclash/config/%s"',e[t].name)) -uci:set("openclash", "config", "enable", 1) -uci:commit("openclash") -SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") -HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "client")) -end - -s = Map("openclash") -s.pageaction = false -s:section(SimpleSection).template = "openclash/myip" - -local t = { - {enable, disable} -} - -ap = Map("openclash") -ap.pageaction = false - -ss = ap:section(Table, t) - -o = ss:option(Button, "enable") -o.inputtitle = translate("Enable Clash") -o.inputstyle = "apply" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") -end - -o = ss:option(Button, "disable") -o.inputtitle = translate("Disable Clash") -o.inputstyle = "reset" -o.write = function() - uci:set("openclash", "config", "enable", 0) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash stop >/dev/null 2>&1 &") -end - -d = Map("openclash") -d.title = translate("Technical Support") -d.pageaction = false -d:section(SimpleSection).template = "openclash/developer" - -return m, form, s, ap, d diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua deleted file mode 100644 index 921d64f655..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe-edit.lua +++ /dev/null @@ -1,145 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - - -m = Map(openclash, translate("Config Subscribe Edit")) -m.pageaction = false -m.description=translate("Convert Subscribe function of Online is Supported By subconverter Written By tindy X") .. translate("
\ -
API By tindy X & lhie1 \ -
\ -
subconverter 外部配置(订阅转换模板)说明:https://github.com/tindy2013/subconverter#external-configuration-file \ -
\ -
如需自定义外部配置文件(订阅转换模板),请按照说明编写后上传至外部网络可访问的位置,并在使用时正确填写地址 \ -
\ -
如您有值得推荐的外部配置文件(订阅转换模板),可以按照 /usr/share/openclash/res/sub_ini.list 的文件格式修改后提交PR") -m.redirect = luci.dispatcher.build_url("admin/services/openclash/config-subscribe") -if m.uci:get(openclash, sid) ~= "config_subscribe" then - luci.http.redirect(m.redirect) - return -end - --- [[ Config Subscribe Setting ]]-- -s = m:section(NamedSection, sid, "config_subscribe") -s.anonymous = true -s.addremove = false - ----- name -o = s:option(Value, "name", translate("Config Alias")) -o.description = font_red..bold_on..translate("(Name For Distinguishing)")..bold_off..font_off -o.placeholder = translate("config") -o.rmempty = true - ----- address -o = s:option(Value, "address", translate("Subscribe Address")) -o.description = font_red..bold_on..translate("(Not Null)")..bold_off..font_off -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o.rmempty = false - ----- subconverter -o = s:option(Flag, "sub_convert", translate("Subscribe Convert Online")) -o.description = translate("Convert Subscribe Online With Template, Mix Proxies and Keep Settings options Will Not Effect") -o.default=0 - ----- Template -o = s:option(ListValue, "template", translate("Template Name")) -o.rmempty = true -o:depends("sub_convert", "1") -file = io.open("/usr/share/openclash/res/sub_ini.list", "r"); -for l in file:lines() do - if l ~= "" and l ~= nil then - o:value(string.sub(luci.sys.exec(string.format("echo '%s' |awk -F ',' '{print $1}' 2>/dev/null",l)),1,-2)) - end -end -file:close() -o:value("0", translate("Custom Template")) - ----- Custom Template -o = s:option(Value, "custom_template_url", translate("Custom Template URL")) -o.rmempty = true -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o:depends("template", "0") - ----- emoji -o = s:option(ListValue, "emoji", translate("Emoji")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- udp -o = s:option(ListValue, "udp", translate("UDP Enable")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- skip-cert-verify -o = s:option(ListValue, "skip_cert_verify", translate("skip-cert-verify")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- sort -o = s:option(ListValue, "sort", translate("Sort")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- node type -o = s:option(ListValue, "node_type", translate("Append Node Type")) -o.rmempty = false -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=0 -o:depends("sub_convert", "1") - ----- key -o = s:option(DynamicList, "keyword", font_red..bold_on..translate("Keyword Match")..bold_off..font_off) -o.description = font_red..bold_on..translate("(eg: hk or tw&bgp)")..bold_off..font_off -o.rmempty = true - ----- exkey -o = s:option(DynamicList, "ex_keyword", font_red..bold_on..translate("Exclude Keyword Match")..bold_off..font_off) -o.description = font_red..bold_on..translate("(eg: hk or tw&bgp)")..bold_off..font_off -o.rmempty = true - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash) - luci.http.redirect(m.redirect) -end - -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua deleted file mode 100644 index 0d446d4e08..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config-subscribe.lua +++ /dev/null @@ -1,141 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -m = Map(openclash, translate("Config Update")) -m.pageaction = false - -s = m:section(TypedSection, "openclash") -s.anonymous = true - ----- update Settings -o = s:option(Flag, "auto_update", translate("Auto Update")) -o.description = translate("Auto Update Server subscription") -o.default=0 - -o = s:option(ListValue, "config_auto_update_mode", translate("Update Mode")) -o:depends("auto_update", "1") -o:value("0", translate("Appointment Mode")) -o:value("1", translate("Loop Mode")) -o.default=0 -o.rmempty = true - -o = s:option(ListValue, "config_update_week_time", translate("Update Time (Every Week)")) -o:depends("config_auto_update_mode", "0") -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 -o.rmempty = true - -o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) -o:depends("config_auto_update_mode", "0") -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 -o.rmempty = true - -o = s:option(Value, "config_update_interval", translate("Update Interval(min)")) -o.default="60" -o.datatype = "integer" -o:depends("config_auto_update_mode", "1") -o.rmempty = true - --- [[ Edit Server ]] -- -s = m:section(TypedSection, "config_subscribe", translate("Config Subscribe Edit")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/config-subscribe-edit/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- name -o = s:option(DummyValue, "name", translate("Config Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("config") -end - ----- address -o = s:option(Value, "address", translate("Subscribe Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - ----- template -o = s:option(DummyValue, "template", translate("Template Name")) -function o.cfgvalue(...) - if Value.cfgvalue(...) ~= "0" then - return Value.cfgvalue(...) or translate("None") - else - return translate("Custom Template") - end -end - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:commit("openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - uci:foreach("openclash", "config_subscribe", - function(s) - if s.name ~= "" and s.name ~= nil and s.enabled == "1" then - local back_cfg_path_yaml="/etc/openclash/backup/" .. s.name .. ".yaml" - local back_cfg_path_yml="/etc/openclash/backup/" .. s.name .. ".yml" - fs.unlink(back_cfg_path_yaml) - fs.unlink(back_cfg_path_yml) - end - end) - SYS.call("/usr/share/openclash/openclash.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config.lua deleted file mode 100644 index 81b2432cbd..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/config.lua +++ /dev/null @@ -1,398 +0,0 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require("luci.model.uci").cursor() -local CHIF = "0" - -font_green = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] -align_mid = [[

]] -align_mid_off = [[

]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -function default_config_set(f) - local cf=string.sub(SYS.exec("uci get openclash.config.config_path 2>/dev/null"), 1, -2) - if cf == "/etc/openclash/config/"..f or not cf or cf == "" or not fs.isfile(cf) then - if CHIF == "1" and cf == "/etc/openclash/config/"..f then - return - end - local fis = fs.glob("/etc/openclash/config/*")[1] - if fis ~= nil then - fcf = fs.basename(fis) - if fcf then - SYS.exec(string.format('uci set openclash.config.config_path="/etc/openclash/config/%s"',fcf)) - uci:commit("openclash") - end - else - SYS.exec("uci set openclash.config.config_path=/etc/openclash/config/config.yaml") - uci:commit("openclash") - end - end -end - -function config_check(CONFIG_FILE) - local yaml = fs.isfile(CONFIG_FILE) - if yaml then - yaml = SYS.exec(string.format('ruby -ryaml -E UTF-8 -e "puts YAML.load_file(\'%s\')" 2>/dev/null',CONFIG_FILE)) - if yaml ~= "false\n" and yaml ~= "" then - return "Config Normal" - else - return "Config Abnormal" - end - elseif (yaml ~= 0) then - return "File Not Exist" - end -end - -ful = SimpleForm("upload", translate("Config Manage"), nil) -ful.reset = false -ful.submit = false - -sul =ful:section(SimpleSection, "") -o = sul:option(FileUpload, "") -o.template = "openclash/upload" -um = sul:option(DummyValue, "", nil) -um.template = "openclash/dvalue" - -local dir, fd, clash -clash = "/etc/openclash/clash" -dir = "/etc/openclash/config/" -bakck_dir="/etc/openclash/backup" -proxy_pro_dir="/etc/openclash/proxy_provider/" -rule_pro_dir="/etc/openclash/rule_provider/" -create_bakck_dir=fs.mkdir(bakck_dir) -create_proxy_pro_dir=fs.mkdir(proxy_pro_dir) -create_rule_pro_dir=fs.mkdir(rule_pro_dir) - - -HTTP.setfilehandler( - function(meta, chunk, eof) - local fp = HTTP.formvalue("file_type") - if not fd then - if not meta then return end - - if fp == "config" then - if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end - elseif fp == "proxy-provider" then - if meta and chunk then fd = nixio.open(proxy_pro_dir .. meta.file, "w") end - elseif fp == "rule-provider" then - if meta and chunk then fd = nixio.open(rule_pro_dir .. meta.file, "w") end - end - - if not fd then - um.value = translate("upload file error.") - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - fd = nil - if fp == "config" then - CHIF = "1" - if IsYamlFile(meta.file) then - local yamlbackup="/etc/openclash/backup/" .. meta.file - local c=fs.copy(dir .. meta.file,yamlbackup) - default_config_set(meta.file) - end - if IsYmlFile(meta.file) then - local ymlname=string.lower(string.sub(meta.file,0,-5)) - local ymlbackup="/etc/openclash/backup/".. ymlname .. ".yaml" - local c=fs.rename(dir .. meta.file,"/etc/openclash/config/".. ymlname .. ".yaml") - local c=fs.copy("/etc/openclash/config/".. ymlname .. ".yaml",ymlbackup) - local yamlname=ymlname .. ".yaml" - default_config_set(yamlname) - end - um.value = translate("File saved to") .. ' "/etc/openclash/config/"' - elseif fp == "proxy-provider" then - um.value = translate("File saved to") .. ' "/etc/openclash/proxy_provider/"' - elseif fp == "rule-provider" then - um.value = translate("File saved to") .. ' "/etc/openclash/rule_provider/"' - end - fs.unlink("/tmp/Proxy_Group") - end - end -) - -if HTTP.formvalue("upload") then - local f = HTTP.formvalue("ulfile") - if #f <= 0 then - um.value = translate("No specify upload file.") - end -end - -local function i(e) -local t=0 -local a={' KB',' MB',' GB',' TB'} -repeat -e=e/1024 -t=t+1 -until(e<=1024) -return string.format("%.1f",e)..a[t] -end - -local e,a={} -for t,o in ipairs(fs.glob("/etc/openclash/config/*"))do -a=fs.stat(o) -if a then -e[t]={} -e[t].name=fs.basename(o) -BACKUP_FILE="/etc/openclash/backup/".. e[t].name -CONFIG_FILE="/etc/openclash/config/".. e[t].name -if fs.mtime(BACKUP_FILE) then - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(BACKUP_FILE)) -else - e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",a.mtime) -end -if string.sub(SYS.exec("uci get openclash.config.config_path 2>/dev/null"), 23, -2) == e[t].name then - e[t].state=translate("Enable") -else - e[t].state=translate("Disable") -end -e[t].size=i(a.size) -e[t].check=translate(config_check(CONFIG_FILE)) -e[t].remove=0 -end -end - -form=SimpleForm("config_file_list",translate("Config File List")) -form.reset=false -form.submit=false -tb=form:section(Table,e) -st=tb:option(DummyValue,"state",translate("State")) -st.template="openclash/cfg_check" -nm=tb:option(DummyValue,"name",translate("Config Alias")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) -sz=tb:option(DummyValue,"size",translate("Size")) -ck=tb:option(DummyValue,"check",translate("Grammar Check")) -ck.template="openclash/cfg_check" - -btnis=tb:option(Button,"switch",translate("Switch Config")) -btnis.template="openclash/other_button" -btnis.render=function(o,t,a) -if not e[t] then return false end -if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then -a.display="" -else -a.display="none" -end -o.inputstyle="apply" -Button.render(o,t,a) -end -btnis.write=function(a,t) -fs.unlink("/tmp/Proxy_Group") -SYS.exec(string.format('uci set openclash.config.config_path="/etc/openclash/config/%s"',e[t].name)) -uci:commit("openclash") -HTTP.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "config")) -end - -btndl = tb:option(Button,"download",translate("Download Config")) -btndl.template="openclash/other_button" -btndl.render=function(e,t,a) -e.inputstyle="remove" -Button.render(e,t,a) -end -btndl.write = function (a,t) - local sPath, sFile, fd, block - sPath = "/etc/openclash/config/"..e[t].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btndlr = tb:option(Button,"download_run",translate("Download Running Config")) -btndlr.template="openclash/other_button" -btndlr.render=function(c,t,a) - if string.sub(SYS.exec("uci get openclash.config.config_path 2>/dev/null"), 23, -2) == e[t].name then - a.display="" - else - a.display="none" - end -c.inputstyle="remove" -Button.render(c,t,a) -end -btndlr.write = function (a,t) - local sPath, sFile, fd, block - sPath = "/etc/openclash/"..e[t].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm=tb:option(Button,"remove",translate("Remove")) -btnrm.render=function(e,t,a) -e.inputstyle="reset" -Button.render(e,t,a) -end -btnrm.write=function(a,t) - fs.unlink("/tmp/Proxy_Group") - fs.unlink("/etc/openclash/backup/"..fs.basename(e[t].name)) - fs.unlink("/etc/openclash/history/"..fs.basename(e[t].name)) - fs.unlink("/etc/openclash/"..fs.basename(e[t].name)) - local a=fs.unlink("/etc/openclash/config/"..fs.basename(e[t].name)) - default_config_set(fs.basename(e[t].name)) - if a then table.remove(e,t)end - HTTP.redirect(DISP.build_url("admin", "services", "openclash","config")) -end - -p = SimpleForm("provider_file_manage",translate("Provider File Manage")) -p.reset = false -p.submit = false - -local provider_manage = { - {proxy_mg, rule_mg} -} - -promg = p:section(Table, provider_manage) - -o = promg:option(Button, "proxy_mg") -o.inputtitle = translate("Proxy Provider File List") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "proxy-provider-file-manage")) -end - -o = promg:option(Button, "rule_mg") -o.inputtitle = translate("Rule Providers File List") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-file-manage")) -end - -m = SimpleForm("openclash",translate("Config File Edit")) -m.reset = false -m.submit = false - -local tab = { - {user, default} -} - -s = m:section(Table, tab) -s.description = align_mid..translate("Support syntax check, press").." "..font_green..bold_on.."F11"..bold_off..font_off.." "..translate("to enter full screen editing mode")..align_mid_off -s.anonymous = true -s.addremove = false - -local conf = string.sub(SYS.exec("uci get openclash.config.config_path 2>/dev/null"), 1, -2) -local dconf = "/usr/share/openclash/res/default.yaml" -local conf_name = fs.basename(conf) -if not conf_name or conf == "" then conf_name = "config.yaml" conf = "/etc/openclash/config/config.yaml" end -local sconf = "/etc/openclash/"..conf_name - -sev = s:option(TextValue, "user") -sev.description = translate("Modify Your Config file:").." "..font_green..bold_on..conf_name..bold_off..font_off.." "..translate("Here, Except The Settings That Were Taken Over") -sev.rows = 40 -sev.wrap = "off" -sev.cfgvalue = function(self, section) - return NXFS.readfile(conf) or NXFS.readfile(dconf) or "" -end -sev.write = function(self, section, value) -if (CHIF == "0") then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile(conf) - if value ~= old_value then - NXFS.writefile(conf, value) - end -end -end - -def = s:option(TextValue, "default") -if fs.isfile(sconf) then - def.description = translate("Config File Edited By OpenClash For Running") -else - def.description = translate("Default Config File With Correct Template") -end -def.rows = 40 -def.wrap = "off" -def.readonly = true -def.cfgvalue = function(self, section) - return NXFS.readfile(sconf) or NXFS.readfile(dconf) or "" -end -def.write = function(self, section, value) -end - -o = s:option(DummyValue, "") -o.anonymous=true -o.template = "openclash/config_editor" - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - uci:commit("openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -return ful , form , p , m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-manage.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-manage.lua deleted file mode 100644 index 061aea51c1..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/game-rules-manage.lua +++ /dev/null @@ -1,96 +0,0 @@ - -local form, m -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -m = SimpleForm("openclash", translate("Game Rules List")) -m.description=translate("规则项目: SSTap-Rule ( https://github.com/FQrabbit/SSTap-Rule )
") -m.reset = false -m.submit = false - -local t = { - {Refresh, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Refresh") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage")) -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-settings")) -end - -if not NXFS.access("/tmp/rules_name") then - SYS.call("awk -F ',' '{print $1}' /usr/share/openclash/res/game_rules.list > /tmp/rules_name 2>/dev/null") -end -file = io.open("/tmp/rules_name", "r"); - ----- Rules List -local e={},o,t -if NXFS.access("/tmp/rules_name") then -for o in file:lines() do -table.insert(e,o) -end -for t,o in ipairs(e) do -e[t]={} -e[t].num=string.format(t) -e[t].name=o -e[t].filename=string.sub(luci.sys.exec(string.format("grep -F '%s,' /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null",e[t].name)),1,-2) -if e[t].filename == "" then -e[t].filename=string.sub(luci.sys.exec(string.format("grep -F '%s,' /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null",e[t].name)),1,-2) -end -RULE_FILE="/etc/openclash/game_rules/".. e[t].filename -if fs.mtime(RULE_FILE) then -e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE)) -else -e[t].mtime="/" -end -if fs.isfile(RULE_FILE) then - e[t].exist=translate("Exist") -else - e[t].exist=translate("Not Exist") -end -e[t].remove=0 -end -end -file:close() - -form=SimpleForm("filelist") -form.reset=false -form.submit=false -tb=form:section(Table,e) -nu=tb:option(DummyValue,"num",translate("Order Number")) -st=tb:option(DummyValue,"exist",translate("State")) -st.template="openclash/cfg_check" -nm=tb:option(DummyValue,"name",translate("Rule Name")) -fm=tb:option(DummyValue,"filename",translate("File Name")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) - -btnis=tb:option(DummyValue,"filename",translate("Download Rule")) -btnis.template="openclash/download_rule" - -btnrm=tb:option(Button,"remove",translate("Remove")) -btnrm.render=function(e,t,a) -e.inputstyle="reset" -Button.render(e,t,a) -end -btnrm.write=function(a,t) -fs.unlink("/etc/openclash/game_rules/"..e[t].filename) -HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage")) -end - -return m, form diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua deleted file mode 100644 index 164f875475..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/groups-config.lua +++ /dev/null @@ -1,131 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Edit Group")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") -if m.uci:get(openclash, sid) ~= "groups" then - luci.http.redirect(m.redirect) - return -end - --- [[ Groups Setting ]]-- -s = m:section(NamedSection, sid, "groups") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(ListValue, "type", translate("Group Type")) -o.rmempty = true -o.description = translate("Choose The Operation Mode") -o:value("select", translate("Manual-Select")) -o:value("url-test", translate("URL-Test")) -o:value("fallback", translate("Fallback")) -o:value("load-balance", translate("Load-Balance")) -o:value("relay", translate("Relay-Traffic")) - -o = s:option(ListValue, "strategy", translate("Strategy Type")) -o.rmempty = true -o.description = translate("Choose The Load-Balance's Strategy Type") -o:value("consistent-hashing", translate("Consistent-hashing")) -o:value("round-robin", translate("Round-robin")) -o:depends("type", "load-balance") - -o = s:option(Value, "name", translate("Group Name")) -o.rmempty = false - -o = s:option(ListValue, "disable_udp", translate("Disable UDP")) -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default = "false" -o.rmempty = false - -o = s:option(Value, "test_url", translate("Test URL")) -o:value("http://www.gstatic.com/generate_204") -o:value("https://cp.cloudflare.com/generate_204") -o.rmempty = false -o:depends("type", "url-test") -o:depends("type", "fallback") -o:depends("type", "load-balance") - -o = s:option(Value, "test_interval", translate("Test Interval(s)")) -o.default = "300" -o.rmempty = false -o:depends("type", "url-test") -o:depends("type", "fallback") -o:depends("type", "load-balance") - -o = s:option(Value, "tolerance", translate("Tolerance(ms)")) -o.default = "150" -o.rmempty = true -o:depends("type", "url-test") - -o = s:option(DynamicList, "other_group", translate("Other Group")) -o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(openclash, sid, "name") then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o.rmempty = true - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - sys.call("/usr/share/openclash/yml_groups_name_ch.sh") - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash) - luci.http.redirect(m.redirect) -end - -return m \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/log.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/log.lua deleted file mode 100644 index adcd73dd21..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/log.lua +++ /dev/null @@ -1,19 +0,0 @@ --- -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" - -m = Map("openclash", translate("Server Logs")) -s = m:section(TypedSection, "openclash") -m.pageaction = false -s.anonymous = true -s.addremove=false - -log = s:option(TextValue, "clog") -log.readonly=true -log.pollcheck=true -log.template="openclash/log" -log.description = translate("") -log.rows = 29 - -return m \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua deleted file mode 100644 index 1ffbed74f1..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua +++ /dev/null @@ -1,296 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_green = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Other Rules Edit")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/settings") -if m.uci:get(openclash, sid) ~= "other_rules" then - luci.http.redirect(m.redirect) - return -end - --- [[ Other Rules Setting ]]-- -s = m:section(NamedSection, sid, "other_rules") -s.anonymous = true -s.addremove = false - -o = s:option(Value, "Note", translate("Note")) -o.default = "default" -o.rmempty = false - -o = s:option(ListValue, "config", translate("Config File")) -local e,a={} -local groupnames,filename -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - if e[t].name == m.uci:get(openclash, sid, "config") then - filename = e[t].name - groupnames = sys.exec(string.format('ruby -ryaml -E UTF-8 -e "YAML.load_file(\'%s\')[\'proxy-groups\'].each do |i| puts i[\'name\']+\'##\' end" 2>/dev/null',f)) - end - end -end - -o = s:option(Button, translate("Get Group Names")) -o.title = translate("Get Group Names") -o.inputtitle = translate("Get Group Names") -o.description = translate("Get Group Names After Select Config File") -o.inputstyle = "reload" -o.write = function() - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin/services/openclash/other-rules-edit/%s") % sid) -end - -if groupnames ~= nil and filename ~= nil then -o = s:option(ListValue, "rule_name", translate("Other Rules Name")) -o.rmempty = true -o:value("lhie1", translate("lhie1 Rules")) -o:value("ConnersHua", translate("ConnersHua(Provider-type) Rules")) -o:value("ConnersHua_return", translate("ConnersHua Return Rules")) - -o = s:option(ListValue, "GlobalTV", translate("GlobalTV")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "AsianTV", translate("AsianTV")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Proxy", translate("Proxy")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o:depends("rule_name", "ConnersHua_return") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Youtube", translate("Youtube")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Apple", translate("Apple")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Scholar", translate("Scholar")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Microsoft", translate("Microsoft")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Netflix", translate("Netflix")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Disney", translate("Disney")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Spotify", translate("Spotify")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Steam", translate("Steam")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Speedtest", translate("Speedtest")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Telegram", translate("Telegram")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "PayPal", translate("PayPal")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "AdBlock", translate("AdBlock")) -o:depends("rule_name", "lhie1") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Domestic", translate("Domestic")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o.rmempty = true -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -o = s:option(ListValue, "Others", translate("Others")) -o:depends("rule_name", "lhie1") -o:depends("rule_name", "ConnersHua") -o:depends("rule_name", "ConnersHua_return") -o.rmempty = true -o.description = translate("Choose Proxy Groups, Base On Your Config File").." ( "..font_green..bold_on..filename..bold_off..font_off.." )" -for groupname in string.gmatch(groupnames, "([^'##\n']+)##") do - if groupname ~= nil and groupname ~= "" then - o:value(groupname) - end -end -o:value("DIRECT") -o:value("REJECT") - -end - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - --luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash) - luci.http.redirect(m.redirect) -end - -return m \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua deleted file mode 100644 index a51d0486c6..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-config.lua +++ /dev/null @@ -1,131 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local sys = require "luci.sys" -local sid = arg[1] -local fs = require "luci.openclash" - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Edit Proxy-Provider")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") -if m.uci:get(openclash, sid) ~= "proxy-provider" then - luci.http.redirect(m.redirect) - return -end - --- [[ Provider Setting ]]-- -s = m:section(NamedSection, sid, "proxy-provider") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(ListValue, "type", translate("Provider Type")) -o.rmempty = true -o.description = translate("Choose The Provider Type") -o:value("http") -o:value("file") - -o = s:option(Value, "name", translate("Provider Name")) -o.rmempty = false - -o = s:option(ListValue, "path", translate("Provider Path")) -o.description = translate("Update Your Proxy Provider File From Config Luci Page") -local p,h={} -for t,f in ipairs(fs.glob("/etc/openclash/proxy_provider/*"))do - h=fs.stat(f) - if h then - p[t]={} - p[t].name=fs.basename(f) - if IsYamlFile(p[t].name) or IsYmlFile(p[t].name) then - o:value("./proxy_provider/"..p[t].name) - end - end -end -o.rmempty = false -o:depends("type", "file") - -o = s:option(Value, "provider_url", translate("Provider URL")) -o.rmempty = false -o:depends("type", "http") - -o = s:option(Value, "provider_interval", translate("Provider Interval(s)")) -o.default = "3600" -o.rmempty = false -o:depends("type", "http") - -o = s:option(ListValue, "health_check", translate("Provider Health Check")) -o:value("false", translate("Disable")) -o:value("true", translate("Enable")) -o.default=true - -o = s:option(Value, "health_check_url", translate("Health Check URL")) -o:value("http://www.gstatic.com/generate_204") -o:value("https://cp.cloudflare.com/generate_204") -o.rmempty = false - -o = s:option(Value, "health_check_interval", translate("Health Check Interval(s)")) -o.default = "300" -o.rmempty = false - -o = s:option(DynamicList, "groups", translate("Proxy Group")) -o.description = font_red..bold_on..translate("No Need Set when Config Create, The added Proxy Groups Must Exist")..bold_off..font_off -o.rmempty = true -m.uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash) - luci.http.redirect(m.redirect) -end - -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-file-manage.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-file-manage.lua deleted file mode 100644 index 0f3ac40220..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/proxy-provider-file-manage.lua +++ /dev/null @@ -1,115 +0,0 @@ - -local proxy_form -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -local function i(e) -local t=0 -local a={' KB',' MB',' GB',' TB'} -repeat -e=e/1024 -t=t+1 -until(e<=1024) -return string.format("%.1f",e)..a[t] -end - -local p,r={} -for x,y in ipairs(fs.glob("/etc/openclash/proxy_provider/*"))do -r=fs.stat(y) -if r then -p[x]={} -p[x].name=fs.basename(y) -p[x].mtime=os.date("%Y-%m-%d %H:%M:%S",r.mtime) -p[x].size=i(r.size) -p[x].remove=0 -p[x].enable=false -end -end - -proxy_form=SimpleForm("proxy_provider_file_list",translate("Proxy Provider File List")) -proxy_form.reset=false -proxy_form.submit=false -tb1=proxy_form:section(Table,p) -nm1=tb1:option(DummyValue,"name",translate("File Name")) -mt1=tb1:option(DummyValue,"mtime",translate("Update Time")) -sz1=tb1:option(DummyValue,"size",translate("Size")) - -btndl1 = tb1:option(Button,"download1",translate("Download Config")) -btndl1.template="openclash/other_button" -btndl1.render=function(y,x,r) -y.inputstyle="remove" -Button.render(y,x,r) -end -btndl1.write = function (r,x) - local sPath, sFile, fd, block - sPath = "/etc/openclash/proxy_provider/"..p[x].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm1=tb1:option(Button,"remove1",translate("Remove")) -btnrm1.render=function(p,x,r) -p.inputstyle="reset" -Button.render(p,x,r) -end -btnrm1.write=function(r,x) -local r=fs.unlink("/etc/openclash/proxy_provider/"..luci.openclash.basename(p[x].name)) -if r then table.remove(p,x)end -return r -end - -local t = { - {Refresh, Delete_all, Apply} -} - -a = proxy_form:section(Table, t) - -o = a:option(Button, "Refresh") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "proxy-provider-file-manage")) -end - -o = a:option(Button, "Delete_all") -o.inputtitle = translate("Delete All File") -o.inputstyle = "remove" -o.write = function() - luci.sys.call("rm -rf /etc/openclash/proxy_provider/* >/dev/null 2>&1") - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "proxy-provider-file-manage")) -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "config")) -end - -return proxy_form diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua deleted file mode 100644 index b4095ee84a..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-config.lua +++ /dev/null @@ -1,128 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -m = Map(openclash, translate("Edit Rule Providers")) -m.pageaction = false -m.description=translate("规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider") -m.redirect = luci.dispatcher.build_url("admin/services/openclash/rule-providers-settings") -if m.uci:get(openclash, sid) ~= "rule_providers" then - luci.http.redirect(m.redirect) - return -end - --- [[ Rule Providers Setting ]]-- -s = m:section(NamedSection, sid, "rule_providers") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(Value, "name", translate("Rule Providers Name")) -o.rmempty = false - -o = s:option(ListValue, "type", translate("Rule Providers Type")) -o.rmempty = true -o.description = translate("Choose The Rule Providers Type") -o:value("http", translate("http")) -o:value("file", translate("file")) - -o = s:option(ListValue, "behavior", translate("Rule Behavior")) -o.rmempty = true -o.description = translate("Choose The Rule Behavior") -o:value("domain") -o:value("ipcidr") -o:value("classical") - -o = s:option(ListValue, "path", translate("Rule Providers Path")) -o.description = translate("Update Your Rule Providers File From Config Luci Page") -local p,h={} -for t,f in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do - h=fs.stat(f) - if h then - p[t]={} - p[t].name=fs.basename(f) - if IsYamlFile(p[t].name) or IsYmlFile(p[t].name) then - o:value("./rule_provider/"..p[t].name) - end - end -end -o.rmempty = false -o:depends("type", "file") - -o = s:option(Value, "url", translate("Rule Providers URL")) -o.rmempty = false -o:depends("type", "http") - -o = s:option(Value, "interval", translate("Rule Providers Interval(s)")) -o.default = "86400" -o.rmempty = false -o:depends("type", "http") - -o = s:option(ListValue, "group", translate("Set Proxy Group")) -o.description = font_red..bold_on..translate("The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'")..bold_off..font_off -o.rmempty = true -m.uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - sys.call("/usr/share/openclash/yml_groups_name_ch.sh") - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash) - luci.http.redirect(m.redirect) -end - -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-file-manage.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-file-manage.lua deleted file mode 100644 index 6dfc8bbcd7..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-file-manage.lua +++ /dev/null @@ -1,115 +0,0 @@ - -local rule_form -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -local function i(e) -local t=0 -local a={' KB',' MB',' GB',' TB'} -repeat -e=e/1024 -t=t+1 -until(e<=1024) -return string.format("%.1f",e)..a[t] -end - -local g,h={} -for n,m in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do -h=fs.stat(m) -if h then -g[n]={} -g[n].name=fs.basename(m) -g[n].mtime=os.date("%Y-%m-%d %H:%M:%S",h.mtime) -g[n].size=i(h.size) -g[n].remove=0 -g[n].enable=false -end -end - -rule_form=SimpleForm("rule_provider_file_list",translate("Rule Providers File List")) -rule_form.reset=false -rule_form.submit=false -tb2=rule_form:section(Table,g) -nm2=tb2:option(DummyValue,"name",translate("File Name")) -mt2=tb2:option(DummyValue,"mtime",translate("Update Time")) -sz2=tb2:option(DummyValue,"size",translate("Size")) - -btndl2 = tb2:option(Button,"download2",translate("Download Config")) -btndl2.template="openclash/other_button" -btndl2.render=function(m,n,h) -m.inputstyle="remove" -Button.render(m,n,h) -end -btndl2.write = function (h,n) - local sPath, sFile, fd, block - sPath = "/etc/openclash/rule_provider/"..g[n].name - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -btnrm2=tb2:option(Button,"remove2",translate("Remove")) -btnrm2.render=function(g,n,h) -g.inputstyle="reset" -Button.render(g,n,h) -end -btnrm2.write=function(h,n) -local h=fs.unlink("/etc/openclash/rule_provider/"..luci.openclash.basename(g[n].name)) -if h then table.remove(g,n)end -return h -end - -local t = { - {Refresh, Delete_all, Apply} -} - -a = rule_form:section(Table, t) - -o = a:option(Button, "Refresh") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-file-manage")) -end - -o = a:option(Button, "Delete_all") -o.inputtitle = translate("Delete All File") -o.inputstyle = "remove" -o.write = function() - luci.sys.call("rm -rf /etc/openclash/rule_provider/* >/dev/null 2>&1") - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-file-manage")) -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "config")) -end - -return rule_form diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-manage.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-manage.lua deleted file mode 100644 index 0858ddcf2d..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-manage.lua +++ /dev/null @@ -1,115 +0,0 @@ - -local form, m -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -m = SimpleForm("openclash", translate("Other Rule Providers List")) -m.description=translate("规则项目: ConnersHua ( https://github.com/DivineEngine/Profiles ) \ -
规则项目: lhie1 ( https://github.com/lhie1/Rules )") -m.reset = false -m.submit = false - -local t = { - {Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Refresh") -o.inputtitle = translate("Refresh Page") -o.inputstyle = "apply" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage")) -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-settings")) -end - -if not NXFS.access("/tmp/rule_providers_name") then - SYS.call("awk -v d=',' -F ',' '{print $4d$5}' /usr/share/openclash/res/rule_providers.list > /tmp/rule_providers_name 2>/dev/null") -end -file = io.open("/tmp/rule_providers_name", "r"); - -local function i(e) -local t=0 -local a={' KB',' MB',' GB',' TB'} -repeat -e=e/1024 -t=t+1 -until(e<=1024) -return string.format("%.1f",e)..a[t] -end - ----- Rules List -local e={},o,t -if NXFS.access("/tmp/rule_providers_name") then -for o in file:lines() do -table.insert(e,o) -end -for t,o in ipairs(e) do -e[t]={} -e[t].num=string.format(t) -e[t].name=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $1}' 2>/dev/null",o)),1,-2) -e[t].lfilename=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $6}' 2>/dev/null",o)),1,-2) -if e[t].lfilename == "" then -e[t].lfilename=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $5}' 2>/dev/null",o)),1,-2) -end -e[t].filename=o -e[t].author=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $2}' 2>/dev/null",o)),1,-2) -e[t].rule_type=string.sub(luci.sys.exec(string.format("grep -F '%s' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null",o)),1,-2) -RULE_FILE="/etc/openclash/rule_provider/".. e[t].lfilename -if fs.mtime(RULE_FILE) then -e[t].size=i(fs.stat(RULE_FILE).size) -e[t].mtime=os.date("%Y-%m-%d %H:%M:%S",fs.mtime(RULE_FILE)) -else -e[t].size="/" -e[t].mtime="/" -end -if fs.isfile(RULE_FILE) then - e[t].exist=translate("Exist") -else - e[t].exist=translate("Not Exist") -end -e[t].remove=0 -end -end -file:close() - -form=SimpleForm("filelist") -form.reset=false -form.submit=false -tb=form:section(Table,e) -nu=tb:option(DummyValue,"num",translate("Order Number")) -st=tb:option(DummyValue,"exist",translate("State")) -st.template="openclash/cfg_check" -tp=tb:option(DummyValue,"rule_type",translate("Rule Type")) -nm=tb:option(DummyValue,"name",translate("Rule Name")) -au=tb:option(DummyValue,"author",translate("Rule Author")) -fm=tb:option(DummyValue,"lfilename",translate("File Name")) -sz=tb:option(DummyValue,"size",translate("Size")) -mt=tb:option(DummyValue,"mtime",translate("Update Time")) - -btnis=tb:option(DummyValue,"filename",translate("Download Rule")) -btnis.template="openclash/download_rule" - -btnrm=tb:option(Button,"remove",translate("Remove")) -btnrm.render=function(e,t,a) -e.inputstyle="reset" -Button.render(e,t,a) -end -btnrm.write=function(a,t) -fs.unlink("/etc/openclash/rule_provider/"..e[t].lfilename) -HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage")) -end - -return m, form diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-settings.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-settings.lua deleted file mode 100644 index 7d5937777f..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/rule-providers-settings.lua +++ /dev/null @@ -1,265 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -m = Map(openclash, translate("Rule Providers and Groups")) -m.pageaction = false -m.description=translate("注意事项:
游戏代理为测试功能,不保证规则可用性 \ -
准备步骤:\ -
1、在《服务器与策略组管理》页面创建您准备使用的策略组和节点,并应用配置(节点添加时必须选择要加入的策略组),策略组类型建议:FallBack,游戏节点必须支持UDP \ -
2、点击《管理第三方游戏规则》或者《管理第三方规则集》按钮进入规则列表下载您要使用的规则 \ -
3、在此页面设置您已下载的规则的对应配置文件、策略组并保存设置 \ -
\ -
在普通模式下使用(仅游戏规则): \ -
1、在《全局设置》-《模式设置》-《运行模式》中选择普通模式并启用UDP流量代理,然后重新启动 \ -
\ -
在TUN模式下使用: \ -
1、在全局设置-版本更新标签先下载、安装对应模式内核 \ -
2、在《全局设置》-《模式设置》-《运行模式》中选择混合模式、TUN模式或者游戏模式并重新启动 \ -
\ -
本页设置时如策略组为空,请先到《服务器与策略组管理》页面进行添加 \ -
\ -
规则集使用介绍:https://lancellc.gitbook.io/clash/clash-config-file/rule-provider") - - -function IsRuleFile(e) -e=e or"" -local e=string.lower(string.sub(e,-6,-1)) -return e==".rules" -end - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end - -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - --- [[ Edit Game Rule ]] -- -s = m:section(TypedSection, "game_config", translate("Game Rules and Groups")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- config -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - ----- rule name -o = s:option(DynamicList, "rule_name", translate("Game Rule's Name")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/game_rules/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].filename=fs.basename(f) - if IsRuleFile(e[t].filename) then - e[t].name=string.gsub(luci.sys.exec(string.format("grep ',%s$' /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $1}' 2>/dev/null",e[t].filename)), "[\r\n]", "") - if e[t].name ~= "" and e[t].name ~= nil then - o:value(e[t].name) - end - end - end -end - -o.rmempty = true - ----- Proxy Group -o = s:option(ListValue, "group", translate("Select Proxy Group")) -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o.rmempty = true - --- [[ Edit Other Rule Provider ]] -- -s = m:section(TypedSection, "rule_provider_config", translate("Other Rule Providers and Groups")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- config -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - ----- rule name -o = s:option(DynamicList, "rule_name", translate("Rule Provider's Name")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/rule_provider/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].filename=fs.basename(f) - if IsYamlFile(e[t].filename) or IsYmlFile(e[t].filename) then - e[t].name=string.gsub(luci.sys.exec(string.format("grep ',%s$' /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $1}' 2>/dev/null",e[t].filename)), "[\r\n]", "") - if e[t].name ~= "" and e[t].name ~= nil then - o:value(e[t].name) - end - end - end -end - -o.rmempty = true - ----- Proxy Group -o = s:option(ListValue, "group", translate("Select Proxy Group")) -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o.rmempty = true - -o = s:option(Value, "interval", translate("Rule Providers Interval(s)")) -o.default = "86400" -o.rmempty = false - ----- position -o = s:option(ListValue, "position", translate("Append Position")) -o.rmempty = false -o:value("0", translate("Priority Match")) -o:value("1", translate("Extended Match")) - --- [[ Edit Custom Rule Provider ]] -- -s = m:section(TypedSection, "rule_providers", translate("Custom Rule Providers and Groups")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/rule-providers-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "name", translate("Rule Providers Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(ListValue, "position", translate("Append Position")) -o.rmempty = false -o:value("0", translate("Priority Match")) -o:value("1", translate("Extended Match")) - -local rm = { - {rule_mg, pro_mg} -} - -rmg = m:section(Table, rm) - -o = rmg:option(Button, "rule_mg") -o.inputtitle = translate("Game Rules Manage") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "game-rules-manage")) -end - -o = rmg:option(Button, "pro_mg") -o.inputtitle = translate("Other Rule Provider Manage") -o.inputstyle = "reload" -o.write = function() - HTTP.redirect(DISP.build_url("admin", "services", "openclash", "rule-providers-manage")) -end - -local t = { - {Commit, Apply} -} - -ss = m:section(Table, t) - -o = ss:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit("openclash") -end - -o = ss:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua deleted file mode 100644 index 8949ec6136..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/servers-config.lua +++ /dev/null @@ -1,367 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" -local sys = require "luci.sys" -local sid = arg[1] -local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -function IsYamlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-5,-1)) - return e == ".yaml" -end -function IsYmlFile(e) - e=e or"" - local e=string.lower(string.sub(e,-4,-1)) - return e == ".yml" -end - -local encrypt_methods_ss = { - - -- stream - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf", - "xchacha20", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305", -} - -local encrypt_methods_ssr = { - - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "chacha20-ietf", - "xchacha20", -} - -local securitys = { - "auto", - "none", - "aes-128-gcm", - "chacha20-poly1305" -} - -local protocols = { - "origin", - "auth_sha1_v4", - "auth_aes128_md5", - "auth_aes128_sha1", - "auth_chain_a", - "auth_chain_b", -} - -local obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", - "tls1.2_ticket_fastauth", -} - -m = Map(openclash, translate("Edit Server")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") - -if m.uci:get(openclash, sid) ~= "servers" then - luci.http.redirect(m.redirect) - return -end - --- [[ Servers Setting ]] -- -s = m:section(NamedSection, sid, "servers") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "config", translate("Config File")) -o:value("all", translate("Use For All Config File")) -local e,a={} -for t,f in ipairs(fs.glob("/etc/openclash/config/*"))do - a=fs.stat(f) - if a then - e[t]={} - e[t].name=fs.basename(f) - if IsYamlFile(e[t].name) or IsYmlFile(e[t].name) then - o:value(e[t].name) - end - end -end - -o = s:option(ListValue, "type", translate("Server Node Type")) -o:value("ss", translate("Shadowsocks")) -o:value("ssr", translate("ShadowsocksR")) -o:value("vmess", translate("Vmess")) -o:value("trojan", translate("trojan")) -o:value("snell", translate("Snell")) -o:value("socks5", translate("Socks5")) -o:value("http", translate("HTTP(S)")) -o.description = translate("Using incorrect encryption mothod may causes service fail to start") - -o = s:option(Value, "name", translate("Server Alias")) -o.rmempty = false - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "host" -o.rmempty = false - -o = s:option(Value, "port", translate("Server Port")) -o.datatype = "port" -o.rmempty = false -o.default = 443 - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = false -o:depends("type", "ss") -o:depends("type", "ssr") -o:depends("type", "trojan") - -o = s:option(Value, "psk", translate("Psk")) -o.rmempty = false -o:depends("type", "snell") - -o = s:option(ListValue, "cipher", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss) do o:value(v) end -o.rmempty = true -o:depends("type", "ss") - -o = s:option(ListValue, "cipher_ssr", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ssr) do o:value(v) end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(ListValue, "protocol", translate("Protocol")) -for _, v in ipairs(protocols) do o:value(v) end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(Value, "protocol_param", translate("Protocol param(optional)")) -o:depends("type", "ssr") - -o = s:option(ListValue, "securitys", translate("Encrypt Method")) -for _, v in ipairs(securitys) do o:value(v) end -o.rmempty = true -o:depends("type", "vmess") - -o = s:option(ListValue, "obfs_ssr", translate("Obfs")) -for _, v in ipairs(obfs) do o:value(v) end -o.rmempty = true -o:depends("type", "ssr") - -o = s:option(Value, "obfs_param", translate("Obfs param(optional)")) -o:depends("type", "ssr") - --- AlterId -o = s:option(Value, "alterId", translate("AlterId")) -o.datatype = "port" -o.default = 32 -o.rmempty = true -o:depends("type", "vmess") - --- VmessId -o = s:option(Value, "uuid", translate("VmessId (UUID)")) -o.rmempty = true -o.default = uuid -o:depends("type", "vmess") - -o = s:option(ListValue, "udp", translate("UDP Enable")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("type", "ss") -o:depends("type", "ssr") -o:depends("type", "vmess") -o:depends("type", "socks5") -o:depends("type", "trojan") - -o = s:option(ListValue, "obfs", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("tls") -o:value("http") -o:value("websocket", translate("websocket (ws)")) -o:depends("type", "ss") - -o = s:option(ListValue, "obfs_snell", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("tls") -o:value("http") -o:depends("type", "snell") - -o = s:option(ListValue, "obfs_vmess", translate("obfs-mode")) -o.rmempty = true -o.default = "none" -o:value("none") -o:value("websocket", translate("websocket (ws)")) -o:value("http", translate("http")) -o:value("h2", translate("h2")) -o:depends("type", "vmess") - -o = s:option(Value, "host", translate("obfs-hosts")) -o.datatype = "host" -o.rmempty = true -o:depends("obfs", "tls") -o:depends("obfs", "http") -o:depends("obfs", "websocket") -o:depends("obfs_snell", "tls") -o:depends("obfs_snell", "http") - --- vmess路径 -o = s:option(Value, "path", translate("path")) -o.rmempty = true -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "websocket") - -o = s:option(DynamicList, "h2_host", translate("host")) -o.rmempty = true -o.datatype = "host" -o:depends("obfs_vmess", "h2") - -o = s:option(Value, "h2_path", translate("path")) -o.rmempty = true -o.default = "/" -o:depends("obfs_vmess", "h2") - -o = s:option(DynamicList, "http_path", translate("path")) -o.rmempty = true -o:value("/") -o:value("/video") -o:depends("obfs_vmess", "http") - -o = s:option(Value, "custom", translate("headers")) -o.rmempty = true -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "websocket") - --- [[ skip-cert-verify ]]-- -o = s:option(ListValue, "skip_cert_verify", translate("skip-cert-verify")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "none") -o:depends("obfs_vmess", "websocket") -o:depends("type", "socks5") -o:depends("type", "http") -o:depends("type", "trojan") - --- [[ TLS ]]-- -o = s:option(ListValue, "tls", translate("tls")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "none") -o:depends("obfs_vmess", "websocket") -o:depends("obfs_vmess", "http") -o:depends("type", "socks5") -o:depends("type", "http") - -o = s:option(Value, "servername", translate("sni")) -o.rmempty = true -o.datatype = "host" -o.placeholder = translate("example.com") -o:depends("obfs_vmess", "websocket") - -o = s:option(Value, "keep_alive", translate("keep-alive")) -o.rmempty = true -o.default = "true" -o:value("true") -o:value("false") -o:depends("obfs_vmess", "http") - --- [[ MUX ]]-- -o = s:option(ListValue, "mux", translate("mux")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") - --- [[ sni ]]-- -o = s:option(Value, "sni", translate("sni")) -o.datatype = "host" -o.placeholder = translate("example.com") -o.rmempty = true -o:depends("type", "trojan") -o:depends("type", "http") - --- 验证用户名 -o = s:option(Value, "auth_name", translate("Auth Username")) -o:depends("type", "socks5") -o:depends("type", "http") -o.rmempty = true - --- 验证密码 -o = s:option(Value, "auth_pass", translate("Auth Password")) -o:depends("type", "socks5") -o:depends("type", "http") -o.rmempty = true - --- [[ alpn ]]-- -o = s:option(DynamicList, "alpn", translate("alpn")) -o.rmempty = true -o:value("h2") -o:value("http/1.1") -o:depends("type", "trojan") - -o = s:option(DynamicList, "groups", translate("Proxy Group")) -o.description = font_red..bold_on..translate("No Need Set when Config Create, The added Proxy Groups Must Exist")..bold_off..font_off -o.rmempty = true -m.uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil then - o:value(s.name) - end - end) - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit(openclash) - sys.call("/usr/share/openclash/cfg_servers_address_fake_filter.sh &") - luci.http.redirect(m.redirect) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - m.uci:revert(openclash) - luci.http.redirect(m.redirect) -end - -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/servers.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/servers.lua deleted file mode 100644 index fd99dbc83e..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/servers.lua +++ /dev/null @@ -1,260 +0,0 @@ - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "luci.openclash" - -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -m = Map(openclash, translate("Servers manage and Config create")) -m.pageaction = false - -s = m:section(TypedSection, "openclash") -s.anonymous = true - -o = s:option(Flag, "create_config", translate("Create Config")) -o.description = font_red .. bold_on .. translate("Create Config By One-Click Only Need Proxys") .. bold_off .. font_off -o.default=0 - -o = s:option(ListValue, "rule_sources", translate("Choose Template For Create Config")) -o.description = translate("Use Other Rules To Create Config") -o:depends("create_config", 1) -o:value("lhie1", translate("lhie1 Rules")) -o:value("ConnersHua", translate("ConnersHua(Provider-type) Rules")) -o:value("ConnersHua_return", translate("ConnersHua Return Rules")) - -o = s:option(Flag, "mix_proxies", translate("Mix Proxies")) -o.description = font_red .. bold_on .. translate("Mix This Page's Proxies") .. bold_off .. font_off -o:depends("create_config", 1) -o.default=0 - -o = s:option(Flag, "servers_update", translate("Keep Settings")) -o.description = font_red .. bold_on .. translate("Only Update Servers Below When Subscription") .. bold_off .. font_off -o.default=0 - -o = s:option(DynamicList, "new_servers_group", translate("New Servers Group")) -o.description = translate("Set The New Subscribe Server's Default Proxy Groups") -o.rmempty = true -o:depends("servers_update", 1) -m.uci:foreach("openclash", "groups", - function(s) - o:value(s.name) - end) - --- [[ Groups Manage ]]-- -s = m:section(TypedSection, "groups", translate("Proxy Groups(No Need Set when Config Create)")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/groups-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "type", translate("Group Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Group Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Proxy-Provider Manage ]]-- -s = m:section(TypedSection, "proxy-provider", translate("Proxy-Provider")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/proxy-provider-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "type", translate("Provider Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Provider Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Servers Manage ]]-- -s = m:section(TypedSection, "servers", translate("Proxys")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/servers-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = s:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("all") -end - -o = s:option(DummyValue, "type", translate("Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Server Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "server", translate("Server Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "udp", translate("UDP Support")) -function o.cfgvalue(...) - if Value.cfgvalue(...) == "true" then - return translate("支持") - elseif Value.cfgvalue(...) == "false" then - return translate("不支持") - else - return translate("None") - end -end - -o = s:option(DummyValue,"server",translate("Ping Latency")) -o.template="openclash/ping" -o.width="10%" - -local tt = { - {Delete_Unused_Servers, Delete_Servers, Delete_Proxy_Provider, Delete_Groups} -} - -b = m:section(Table, tt) - -o = b:option(Button,"Delete_Unused_Servers") -o.inputtitle = translate("Delete Unused Servers") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") - luci.sys.call("sh /usr/share/openclash/cfg_unused_servers_del.sh 2>/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Servers") -o.inputtitle = translate("Delete Servers") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:delete_all("openclash", "servers", function(s) return true end) - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Proxy_Provider") -o.inputtitle = translate("Delete Proxy Provider") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:delete_all("openclash", "proxy-provider", function(s) return true end) - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Groups") -o.inputtitle = translate("Delete Groups") -o.inputstyle = "reset" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:delete_all("openclash", "groups", function(s) return true end) - m.uci:commit("openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -local t = { - {Load_Config, Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button,"Load_Config") -o.inputtitle = translate("Load Config") -o.inputstyle = "apply" -o.write = function() - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") - luci.sys.call("/usr/share/openclash/yml_groups_get.sh 2>/dev/null &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash")) -end - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - fs.unlink("/tmp/Proxy_Group") - m.uci:set("openclash", "config", "enable", 0) - m.uci:commit("openclash") - luci.sys.call("/usr/share/openclash/yml_groups_set.sh >/dev/null 2>&1 &") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash")) -end - -m:append(Template("openclash/server_list")) -return m diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua deleted file mode 100644 index da17f7f20e..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ /dev/null @@ -1,708 +0,0 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local uci = require "luci.model.uci".cursor() - -font_green = [[]] -font_red = [[]] -font_off = [[]] -bold_on = [[]] -bold_off = [[]] - -local op_mode = string.sub(luci.sys.exec('uci get openclash.config.operation_mode 2>/dev/null'),0,-2) -if not op_mode then op_mode = "redir-host" end - -m = Map("openclash", translate("Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)")) -m.pageaction = false -s = m:section(TypedSection, "openclash") -s.anonymous = true - -s:tab("op_mode", translate("Operation Mode")) -s:tab("settings", translate("General Settings")) -s:tab("dns", translate("DNS Setting")) -s:tab("lan_ac", translate("Access Control")) -if op_mode == "fake-ip" then -s:tab("rules", translate("Rules Setting(Access Control)")) -else -s:tab("rules", translate("Rules Setting")) -end -s:tab("dashboard", translate("Dashboard Settings")) -s:tab("rules_update", translate("Rules Update")) -s:tab("geo_update", translate("GEOIP Update")) -s:tab("chnr_update", translate("Chnroute Update")) -s:tab("auto_restart", translate("Auto Restart")) -s:tab("version_update", translate("Version Update")) -s:tab("debug", translate("Debug Logs")) - -o = s:taboption("op_mode", ListValue, "en_mode", font_red..bold_on..translate("Select Mode")..bold_off..font_off) -o.description = translate("Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error") -if op_mode == "redir-host" then -o:value("redir-host", translate("redir-host")) -o:value("redir-host-tun", translate("redir-host(tun mode)")) -o:value("redir-host-vpn", translate("redir-host-vpn(game mode)")) -o:value("redir-host-mix", translate("redir-host-mix(tun mix mode)")) -o.default = "redir-host" -else -o:value("fake-ip", translate("fake-ip")) -o:value("fake-ip-tun", translate("fake-ip(tun mode)")) -o:value("fake-ip-vpn", translate("fake-ip-vpn(game mode)")) -o:value("fake-ip-mix", translate("fake-ip-mix(tun mix mode)")) -o.default = "fake-ip" -end - -o = s:taboption("op_mode", Flag, "enable_udp_proxy", font_red..bold_on..translate("Proxy UDP Traffics")..bold_off..font_off) -o.description = translate("Select Mode For UDP Traffics, The Servers Must Support UDP while Choose Proxy") -o:depends("en_mode", "redir-host") -o:depends("en_mode", "fake-ip") -o.default=1 - -o = s:taboption("op_mode", ListValue, "stack_type", translate("Select Stack Type")) -o.description = translate("Select Stack Type For Tun Mode, According To The Running Speed on Your Machine") -o:depends("en_mode", "redir-host-tun") -o:depends("en_mode", "fake-ip-tun") -o:depends("en_mode", "redir-host-mix") -o:depends("en_mode", "fake-ip-mix") -o:value("system", translate("System ")) -o:value("gvisor", translate("Gvisor")) -o.default = "system" - -o = s:taboption("op_mode", ListValue, "proxy_mode", font_red..bold_on..translate("Proxy Mode")..bold_off..font_off) -o.description = translate("Select Proxy Mode, Use Script Mode Could Prevent Proxy BT traffics If Rules Support, eg.lhie1's") -o:value("rule", translate("Rule Proxy Mode")) -o:value("global", translate("Global Proxy Mode")) -o:value("direct", translate("Direct Proxy Mode")) -o:value("script", translate("Script Proxy Mode (Tun Core Only)")) -o.default = "rule" - -o = s:taboption("op_mode", Flag, "enable_rule_proxy", font_red..bold_on..translate("Rule Match Proxy Mode")..bold_off..font_off) -o.description = translate("Only Proxy Rules Match, Prevent BT/P2P Passing") -o.default=0 - -o = s:taboption("op_mode", Flag, "common_ports", font_red..bold_on..translate("Common Ports Proxy Mode")..bold_off..font_off) -o.description = translate("Only Common Ports, Prevent BT/P2P Passing") -o.default=0 -o:depends("en_mode", "redir-host") -o:depends("en_mode", "redir-host-tun") -o:depends("en_mode", "redir-host-vpn") -o:depends("en_mode", "redir-host-mix") - -o = s:taboption("op_mode", Flag, "china_ip_route", translate("China IP Route")) -o.description = translate("Bypass The China Network Flows, Improve Performance") -o.default=0 -o:depends("en_mode", "redir-host") -o:depends("en_mode", "redir-host-tun") -o:depends("en_mode", "redir-host-vpn") -o:depends("en_mode", "redir-host-mix") - -o = s:taboption("op_mode", Flag, "small_flash_memory", translate("Small Flash Memory")) -o.description = translate("Move Core And GEOIP Data File To /tmp/etc/openclash For Small Flash Memory Device") -o.default=0 - ----- Operation Mode -switch_mode = s:taboption("op_mode", DummyValue, "", nil) -switch_mode.template = "openclash/switch_mode" - ----- General Settings -local cpu_model=SYS.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") -o = s:taboption("settings", ListValue, "core_version", font_red..bold_on..translate("Chose to Download")..bold_off..font_off) -o.description = translate("CPU Model")..': '..font_green..bold_on..cpu_model..bold_off..font_off..', '..translate("Select Based On Your CPU Model For Core Update, Wrong Version Will Not Work") -o:value("linux-386") -o:value("linux-amd64", translate("linux-amd64(x86-64)")) -o:value("linux-armv5") -o:value("linux-armv6") -o:value("linux-armv7") -o:value("linux-armv8") -o:value("linux-mips-hardfloat") -o:value("linux-mips-softfloat") -o:value("linux-mips64") -o:value("linux-mips64le") -o:value("linux-mipsle-softfloat") -o:value("linux-mipsle-hardfloat") -o:value("0", translate("Not Set")) -o.default=0 - -o = s:taboption("settings", ListValue, "interface_name", font_red..bold_on..translate("Bind Network Interface")..bold_off..font_off) -local de_int = SYS.exec("ip route |grep 'default' |awk '{print $5}' 2>/dev/null") -o.description = translate("Default Interface Name:").." "..font_green..bold_on..de_int..bold_off..font_off..translate(",Try Enable If Network Loopback") -local interfaces = SYS.exec("ls -l /sys/class/net/ 2>/dev/null |awk '{print $9}' 2>/dev/null") -for interface in string.gmatch(interfaces, "%S+") do - o:value(interface) -end -o:value("0", translate("Disable")) -o.default=0 - -o = s:taboption("settings", ListValue, "log_level", translate("Log Level")) -o.description = translate("Select Core's Log Level") -o:value("info", translate("Info Mode")) -o:value("warning", translate("Warning Mode")) -o:value("error", translate("Error Mode")) -o:value("debug", translate("Debug Mode")) -o:value("silent", translate("Silent Mode")) -o.default = "silent" - -o = s:taboption("settings", Value, "log_size", translate("Log Size (KB)")) -o.description = translate("Set Log File Size (KB)") -o.default=1024 - -o = s:taboption("settings", Flag, "intranet_allowed", translate("Only intranet allowed")) -o.description = translate("When Enabled, The Control Panel And The Connection Broker Port Will Not Be Accessible From The Public Network") -o.default=0 - -o = s:taboption("settings", Value, "dns_port") -o.title = translate("DNS Port") -o.default = 7874 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "proxy_port") -o.title = translate("Redir Port") -o.default = 7892 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "http_port") -o.title = translate("HTTP(S) Port") -o.default = 7890 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "socks_port") -o.title = translate("SOCKS5 Port") -o.default = 7891 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "mixed_port") -o.title = translate("Mixed Port") -o.default = 7893 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - ----- DNS Settings -o = s:taboption("dns", Flag, "enable_redirect_dns", font_red..bold_on..translate("Redirect Local DNS Setting")..bold_off..font_off) -o.description = translate("Set Local DNS Redirect") -o.default=1 - -o = s:taboption("dns", Flag, "enable_custom_dns", font_red..bold_on..translate("Custom DNS Setting")..bold_off..font_off) -o.description = font_red..bold_on..translate("Set OpenClash Upstream DNS Resolve Server")..bold_off..font_off -o.default=0 - -o = s:taboption("dns", Flag, "ipv6_enable", translate("Enable ipv6 Resolve")) -o.description = font_red..bold_on..translate("Enable Clash to Resolve ipv6 DNS Requests")..bold_off..font_off -o.default=0 - -o = s:taboption("dns", Flag, "disable_masq_cache", translate("Disable Dnsmasq's DNS Cache")) -o.description = translate("Recommended Enabled For Avoiding Some Connection Errors")..font_red..bold_on..translate("(Maybe Incompatible For Your Firmware)")..bold_off..font_off -o.default=0 - -o = s:taboption("dns", Flag, "dns_advanced_setting", translate("Advanced Setting")) -o.description = translate("DNS Advanced Settings")..font_red..bold_on..translate("(Please Don't Modify it at Will)")..bold_off..font_off -o.default=0 - -if op_mode == "fake-ip" then -o = s:taboption("dns", Button, translate("Fake-IP-Filter List Update")) -o.title = translate("Fake-IP-Filter List Update") -o:depends("dns_advanced_setting", "1") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("rm -rf /tmp/openclash_fake_filter.list >/dev/null 2>&1 && /etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -custom_fake_black = s:taboption("dns", Value, "custom_fake_filter") -custom_fake_black.template = "cbi/tvalue" -custom_fake_black.description = translate("Domain Names In The List Do Not Return Fake-IP, One rule per line") -custom_fake_black.rows = 20 -custom_fake_black.wrap = "off" -custom_fake_black:depends("dns_advanced_setting", "1") - -function custom_fake_black.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_fake_filter.list") or "" -end -function custom_fake_black.write(self, section, value) - - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_fake_filter.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_fake_filter.list", value) - end - end -end -end - -o = s:taboption("dns", Value, "custom_domain_dns_server", translate("Specify DNS Server")) -o.description = translate("Specify DNS Server For List and Server Nodes With Fake-IP Mode, Only One IP Server Address Support") -o.default="114.114.114.114" -o.placeholder = translate("114.114.114.114 or 127.0.0.1#5300") -o:depends("dns_advanced_setting", "1") - -custom_domain_dns = s:taboption("dns", Value, "custom_domain_dns") -custom_domain_dns.template = "cbi/tvalue" -custom_domain_dns.description = translate("Domain Names In The List Use The Custom DNS Server, One rule per line") -custom_domain_dns.rows = 20 -custom_domain_dns.wrap = "off" -custom_domain_dns:depends("dns_advanced_setting", "1") - -function custom_domain_dns.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_domain_dns.list") or "" -end -function custom_domain_dns.write(self, section, value) - - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_domain_dns.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_domain_dns.list", value) - end - end -end - ----- Access Control -if op_mode == "redir-host" then -o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("LAN Access Control Mode")) -o:value("0", translate("Black List Mode")) -o:value("1", translate("White List Mode")) -o.default=0 - -ip_b = s:taboption("lan_ac", DynamicList, "lan_ac_black_ips", translate("LAN Bypassed Host List")) -ip_b:depends("lan_ac_mode", "0") -ip_b.datatype = "ipaddr" - -mac_b = s:taboption("lan_ac", DynamicList, "lan_ac_black_macs", translate("LAN Bypassed Mac List")) -mac_b.datatype = "list(macaddr)" -mac_b.rmempty = true -mac_b:depends("lan_ac_mode", "0") - -ip_w = s:taboption("lan_ac", DynamicList, "lan_ac_white_ips", translate("LAN Proxied Host List")) -ip_w:depends("lan_ac_mode", "1") -ip_w.datatype = "ipaddr" - -mac_w = s:taboption("lan_ac", DynamicList, "lan_ac_white_macs", translate("LAN Proxied Mac List")) -mac_w.datatype = "list(macaddr)" -mac_w.rmempty = true -mac_w:depends("lan_ac_mode", "1") - -luci.ip.neighbors({ family = 4 }, function(n) - if n.mac and n.dest then - ip_b:value(n.dest:string()) - ip_w:value(n.dest:string()) - mac_b:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) - mac_w:value(n.mac, "%s (%s)" %{ n.mac, n.dest:string() }) - end -end) -end - -o = s:taboption("lan_ac", DynamicList, "wan_ac_black_ips", translate("WAN Bypassed Host List")) -o.datatype = "ipaddr" -o.description = translate("In The Fake-IP Mode, Only Pure IP Requests Are Supported") - ----- Rules Settings -o = s:taboption("rules", Flag, "rule_source", translate("Enable Other Rules")) -o.description = translate("Use Other Rules") -o.default=0 - -if op_mode == "fake-ip" then -o = s:taboption("rules", Flag, "enable_custom_clash_rules", font_red..bold_on..translate("Custom Clash Rules(Access Control)")..bold_off..font_off) -else -o = s:taboption("rules", Flag, "enable_custom_clash_rules", font_red..bold_on..translate("Custom Clash Rules")..bold_off..font_off) -end -o.description = translate("Use Custom Rules") -o.default=0 - -custom_rules = s:taboption("rules", Value, "custom_rules") -custom_rules:depends("enable_custom_clash_rules", 1) -custom_rules.template = "cbi/tvalue" -custom_rules.description = translate("Custom Rules Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com") -custom_rules.rows = 20 -custom_rules.wrap = "off" - -function custom_rules.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_rules.list") or "" -end -function custom_rules.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_rules.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_rules.list", value) - end - end -end - -custom_rules_2 = s:taboption("rules", Value, "custom_rules_2") -custom_rules_2:depends("enable_custom_clash_rules", 1) -custom_rules_2.template = "cbi/tvalue" -custom_rules_2.description = translate("Custom Rules 2 Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com") -custom_rules_2.rows = 20 -custom_rules_2.wrap = "off" - -function custom_rules_2.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_rules_2.list") or "" -end -function custom_rules_2.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_rules_2.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_rules_2.list", value) - end - end -end - ----- update Settings -o = s:taboption("rules_update", Flag, "other_rule_auto_update", translate("Auto Update")) -o.description = font_red..bold_on..translate("Auto Update Other Rules")..bold_off..font_off -o.default=0 - -o = s:taboption("rules_update", ListValue, "other_rule_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("rules_update", ListValue, "other_rule_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("rules_update", Button, translate("Other Rules Update")) -o.title = translate("Update Other Rules") -o.inputtitle = translate("Check And Update") -o.description = translate("Other Rules Update(Only in Use)") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/usr/share/openclash/openclash_rule.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = s:taboption("geo_update", Flag, "geo_auto_update", translate("Auto Update")) -o.description = translate("Auto Update GEOIP Database") -o.default=0 - -o = s:taboption("geo_update", ListValue, "geo_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("geo_update", ListValue, "geo_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("geo_update", Value, "geo_custom_url") -o.title = translate("Custom GEOIP URL") -o.rmempty = false -o.description = translate("Custom GEOIP Data URL, Click Button Below To Refresh After Edit") -o:value("http://www.ideame.top/mmdb/Country.mmdb", translate("Alecthw-Version")..translate("(Default)")) -o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb", translate("Hackl0us-Version")..translate("(Only CN)")) -o:value("https://static.clash.to/GeoIP2/GeoIP2-Country.mmdb", translate("Static.clash.to")) -o:value("https://geolite.clash.dev/Country.mmdb", translate("Geolite.clash.dev")) -o.default = "http://www.ideame.top/mmdb/Country.mmdb" - -o = s:taboption("geo_update", Button, translate("GEOIP Update")) -o.title = translate("Update GEOIP Database") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -if op_mode == "redir-host" then -o = s:taboption("chnr_update", Flag, "chnr_auto_update", translate("Auto Update")) -o.description = translate("Auto Update Chnroute Lists") -o.default=0 - -o = s:taboption("chnr_update", ListValue, "chnr_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("chnr_update", ListValue, "chnr_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("chnr_update", Value, "chnr_custom_url") -o.title = translate("Custom Chnroute Lists URL") -o.rmempty = false -o.description = translate("Custom Chnroute Lists URL, Click Button Below To Refresh After Edit") -o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang-CN")..translate("(Default)")) -o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang-CN-CIDR")) -o:value("https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us-CN-CIDR")..translate("(Large Size)")) -o.default = "https://ispip.clang.cn/all_cn.txt" - -o = s:taboption("chnr_update", Button, translate("Chnroute Lists Update")) -o.title = translate("Update Chnroute Lists") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/usr/share/openclash/openclash_chnroute.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end -end - -o = s:taboption("auto_restart", Flag, "auto_restart", translate("Auto Restart")) -o.description = translate("Auto Restart OpenClash") -o.default=0 - -o = s:taboption("auto_restart", ListValue, "auto_restart_week_time", translate("Restart Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("auto_restart", ListValue, "auto_restart_day_time", translate("Restart time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - ----- Dashboard Settings -local lan_ip=SYS.exec("uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") -local cn_port=SYS.exec("uci get openclash.config.cn_port 2>/dev/null |tr -d '\n'") -o = s:taboption("dashboard", Value, "cn_port") -o.title = translate("Dashboard Port") -o.default = 9090 -o.datatype = "port" -o.rmempty = false -o.description = translate("Dashboard Address Example:").." "..font_green..bold_on..lan_ip.."/luci-static/openclash、"..lan_ip..':'..cn_port..'/ui'..bold_off..font_off - -o = s:taboption("dashboard", Value, "dashboard_password") -o.title = translate("Dashboard Secret") -o.rmempty = true -o.description = translate("Set Dashboard Secret") - ----- version update -core_update = s:taboption("version_update", DummyValue, "", nil) -core_update.template = "openclash/update" - ----- debug -debug_log = s:taboption("debug", Value, "debug_log") -debug_log.template = "cbi/tvalue" -debug_log.readonly=true -debug_log.rows = 30 -debug_log.wrap = "off" -function debug_log.cfgvalue(self, section) - return NXFS.readfile("/tmp/openclash_debug.log") or "" -end - -o = s:taboption("debug", Button, translate("Generate Logs")) -o.title = translate("Generate Logs") -o.inputtitle = translate("Click to Generate") -o.inputstyle = "reload" -o.write = function() - SYS.call("/usr/share/openclash/openclash_debug.sh") -end - --- [[ Edit Server ]] -- -s = m:section(TypedSection, "dns_servers", translate("Add Custom DNS Servers")..translate("(Take Effect After Choose Above)")) -s.anonymous = true -s.addremove = true -s.sortable = false -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable"), font_red..bold_on..translate("(Enable or Disable)")..bold_off..font_off) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- group -o = s:option(ListValue, "group", translate("DNS Server Group")) -o.description = font_red..bold_on..translate("(NameServer Group Must Be Set)")..bold_off..font_off -o:value("nameserver", translate("NameServer")) -o:value("fallback", translate("FallBack")) -o.default = "nameserver" -o.rempty = false - ----- IP address -o = s:option(Value, "ip", translate("DNS Server Address")) -o.description = font_red..bold_on..translate("(Do Not Add Type Ahead)")..bold_off..font_off -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o.rmempty = true - ----- port -o = s:option(Value, "port", translate("DNS Server Port")) -o.description = font_red..bold_on..translate("(Require When Use Non-Standard Port)")..bold_off..font_off -o.datatype = "port" -o.rempty = true - ----- type -o = s:option(ListValue, "type", translate("DNS Server Type")) -o.description = font_red..bold_on..translate("(Communication protocol)")..bold_off..font_off -o:value("udp", translate("UDP")) -o:value("tcp", translate("TCP")) -o:value("tls", translate("TLS")) -o:value("https", translate("HTTPS")) -o.default = "udp" -o.rempty = false - --- [[ Other Rules Manage ]]-- -ss = m:section(TypedSection, "other_rules", translate("Other Rules Edit")..translate("(Take Effect After Choose Above)")) -ss.anonymous = true -ss.addremove = true -ss.sortable = true -ss.template = "cbi/tblsection" -ss.extedit = luci.dispatcher.build_url("admin/services/openclash/other-rules-edit/%s") -function ss.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(ss.extedit % sid) - return - end -end - -o = ss:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - -o = ss:option(DummyValue, "config", translate("Config File")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = ss:option(DummyValue, "rule_name", translate("Other Rules Name")) -function o.cfgvalue(...) - if Value.cfgvalue(...) == "lhie1" then - return translate("lhie1 Rules") - elseif Value.cfgvalue(...) == "ConnersHua" then - return translate("ConnersHua(Provider-type) Rules") - elseif Value.cfgvalue(...) == "ConnersHua_return" then - return translate("ConnersHua Return Rules") - else - return translate("None") - end -end - -o = ss:option(DummyValue, "Note", translate("Note")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Edit Authentication ]] -- -s = m:section(TypedSection, "authentication", translate("Set Authentication of SOCKS5/HTTP(S)")) -s.anonymous = true -s.addremove = true -s.sortable = false -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- username -o = s:option(Value, "username", translate("Username")) -o.placeholder = translate("Not Null") -o.rempty = true - ----- password -o = s:option(Value, "password", translate("Password")) -o.placeholder = translate("Not Null") -o.rmempty = true - -if op_mode == "redir-host" then -s = m:section(TypedSection, "openclash", translate("Set Custom Hosts, Only Work with Redir-Host Mode")) -s.anonymous = true - -custom_hosts = s:option(Value, "custom_hosts") -custom_hosts.template = "cbi/tvalue" -custom_hosts.description = translate("Custom Hosts Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md") -custom_hosts.rows = 20 -custom_hosts.wrap = "off" - -function custom_hosts.cfgvalue(self, section) - return NXFS.readfile("/etc/openclash/custom/openclash_custom_hosts.list") or "" -end -function custom_hosts.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - local old_value = NXFS.readfile("/etc/openclash/custom/openclash_custom_hosts.list") - if value ~= old_value then - NXFS.writefile("/etc/openclash/custom/openclash_custom_hosts.list", value) - end - end -end -end - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:commit("openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - m.uci:set("openclash", "config", "enable", 1) - m.uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end -return m - - diff --git a/package/ctcgfw/luci-app-openclash/luasrc/openclash.lua b/package/ctcgfw/luci-app-openclash/luasrc/openclash.lua deleted file mode 100644 index c9bd2c4c4e..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/openclash.lua +++ /dev/null @@ -1,244 +0,0 @@ ---[[ -LuCI - Filesystem tools - -Description: -A module offering often needed filesystem manipulation functions - -FileId: -$Id$ - -License: -Copyright 2008 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -]]-- - -local io = require "io" -local os = require "os" -local ltn12 = require "luci.ltn12" -local fs = require "nixio.fs" -local nutil = require "nixio.util" - -local type = type - ---- LuCI filesystem library. -module "luci.openclash" - ---- Test for file access permission on given path. --- @class function --- @name access --- @param str String value containing the path --- @return Number containing the return code, 0 on sucess or nil on error --- @return String containing the error description (if any) --- @return Number containing the os specific errno (if any) -access = fs.access - ---- Evaluate given shell glob pattern and return a table containing all matching --- file and directory entries. --- @class function --- @name glob --- @param filename String containing the path of the file to read --- @return Table containing file and directory entries or nil if no matches --- @return String containing the error description (if no matches) --- @return Number containing the os specific errno (if no matches) -function glob(...) - local iter, code, msg = fs.glob(...) - if iter then - return nutil.consume(iter) - else - return nil, code, msg - end -end - ---- Checks wheather the given path exists and points to a regular file. --- @param filename String containing the path of the file to test --- @return Boolean indicating wheather given path points to regular file -function isfile(filename) - return fs.stat(filename, "type") == "reg" -end - ---- Checks wheather the given path exists and points to a directory. --- @param dirname String containing the path of the directory to test --- @return Boolean indicating wheather given path points to directory -function isdirectory(dirname) - return fs.stat(dirname, "type") == "dir" -end - ---- Read the whole content of the given file into memory. --- @param filename String containing the path of the file to read --- @return String containing the file contents or nil on error --- @return String containing the error message on error -readfile = fs.readfile - ---- Write the contents of given string to given file. --- @param filename String containing the path of the file to read --- @param data String containing the data to write --- @return Boolean containing true on success or nil on error --- @return String containing the error message on error -writefile = fs.writefile - ---- Copies a file. --- @param source Source file --- @param dest Destination --- @return Boolean containing true on success or nil on error -copy = fs.datacopy - ---- Renames a file. --- @param source Source file --- @param dest Destination --- @return Boolean containing true on success or nil on error -rename = fs.move - ---- Get the last modification time of given file path in Unix epoch format. --- @param path String containing the path of the file or directory to read --- @return Number containing the epoch time or nil on error --- @return String containing the error description (if any) --- @return Number containing the os specific errno (if any) -function mtime(path) - return fs.stat(path, "mtime") -end - ---- Set the last modification time of given file path in Unix epoch format. --- @param path String containing the path of the file or directory to read --- @param mtime Last modification timestamp --- @param atime Last accessed timestamp --- @return 0 in case of success nil on error --- @return String containing the error description (if any) --- @return Number containing the os specific errno (if any) -function utime(path, mtime, atime) - return fs.utimes(path, atime, mtime) -end - ---- Return the last element - usually the filename - from the given path with --- the directory component stripped. --- @class function --- @name basename --- @param path String containing the path to strip --- @return String containing the base name of given path --- @see dirname -basename = fs.basename - ---- Return the directory component of the given path with the last element --- stripped of. --- @class function --- @name dirname --- @param path String containing the path to strip --- @return String containing the directory component of given path --- @see basename -dirname = fs.dirname - ---- Return a table containing all entries of the specified directory. --- @class function --- @name dir --- @param path String containing the path of the directory to scan --- @return Table containing file and directory entries or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function dir(...) - local iter, code, msg = fs.dir(...) - if iter then - local t = nutil.consume(iter) - t[#t+1] = "." - t[#t+1] = ".." - return t - else - return nil, code, msg - end -end - ---- Create a new directory, recursively on demand. --- @param path String with the name or path of the directory to create --- @param recursive Create multiple directory levels (optional, default is true) --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function mkdir(path, recursive) - return recursive and fs.mkdirr(path) or fs.mkdir(path) -end - ---- Remove the given empty directory. --- @class function --- @name rmdir --- @param path String containing the path of the directory to remove --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -rmdir = fs.rmdir - -local stat_tr = { - reg = "regular", - dir = "directory", - lnk = "link", - chr = "character device", - blk = "block device", - fifo = "fifo", - sock = "socket" -} ---- Get information about given file or directory. --- @class function --- @name stat --- @param path String containing the path of the directory to query --- @return Table containing file or directory properties or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function stat(path, key) - local data, code, msg = fs.stat(path) - if data then - data.mode = data.modestr - data.type = stat_tr[data.type] or "?" - end - return key and data and data[key] or data, code, msg -end - ---- Set permissions on given file or directory. --- @class function --- @name chmod --- @param path String containing the path of the directory --- @param perm String containing the permissions to set ([ugoa][+-][rwx]) --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -chmod = fs.chmod - ---- Create a hard- or symlink from given file (or directory) to specified target --- file (or directory) path. --- @class function --- @name link --- @param path1 String containing the source path to link --- @param path2 String containing the destination path for the link --- @param symlink Boolean indicating wheather to create a symlink (optional) --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -function link(src, dest, sym) - return sym and fs.symlink(src, dest) or fs.link(src, dest) -end - ---- Remove the given file. --- @class function --- @name unlink --- @param path String containing the path of the file to remove --- @return Number with the return code, 0 on sucess or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -unlink = fs.unlink - ---- Retrieve target of given symlink. --- @class function --- @name readlink --- @param path String containing the path of the symlink to read --- @return String containing the link target or nil on error --- @return String containing the error description on error --- @return Number containing the os specific errno on error -readlink = fs.readlink diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/cfg_check.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/cfg_check.htm deleted file mode 100644 index 504f125d4b..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/cfg_check.htm +++ /dev/null @@ -1,18 +0,0 @@ -<%+cbi/valueheader%> -
-<% - local val = self:cfgvalue(section) - if val == "启用" or val == "Enable" or val == "检查通过" or val == "Config Normal" or val == "Exist" or val == "已下载" then -%> -
-<% - else -%> -
-<% - end - write(pcdata(val)) -%> -
-
-<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/config_editor.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/config_editor.htm deleted file mode 100644 index 6608147391..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/config_editor.htm +++ /dev/null @@ -1,67 +0,0 @@ -<%+cbi/valueheader%> - - - - - - - - - - - - - - - - - - - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/developer.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/developer.htm deleted file mode 100644 index a56778b5b3..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/developer.htm +++ /dev/null @@ -1,114 +0,0 @@ -
- - - - - - - - - - - - - - - -
<%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%>
-
- - \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/download_rule.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/download_rule.htm deleted file mode 100644 index ccad4d2c1d..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/download_rule.htm +++ /dev/null @@ -1,41 +0,0 @@ -<%+cbi/valueheader%> - - - - - - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/dvalue.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/dvalue.htm deleted file mode 100644 index 44b1cd6e13..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/dvalue.htm +++ /dev/null @@ -1,13 +0,0 @@ -<%+cbi/valueheader%> -
-
-<%:Only Support yaml what would be save to /etc/openclash/%> -
-
-<% - local val = self:cfgvalue(section) or self.default or "" - write(pcdata(val)) -%> -
-
-<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm deleted file mode 100644 index e7bf865f8e..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/log.htm +++ /dev/null @@ -1,123 +0,0 @@ -<%+cbi/valueheader%> - -
- - - - - - - -
- - - - - - - -
-
- - - - -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/myip.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/myip.htm deleted file mode 100644 index 2bd1d6a4b9..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/myip.htm +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - IP 地址查询 - - -
- - -
- -
-
-

<%:IP Address%>

-

- IPIP      <%:Mainland%>: -

-

- IP.PC    <%:Mainland%>: -

-

- IP.SB    <%:Abroad%>: -

-

- IPIFY    <%:Abroad%>: -

-
-
-

<%:Website Access Check%>

-

- <%:Baidu Search%>: -

-

- <%:NetEase Music%>: -

-

- GitHub: -

-

- YouTube: -

-
-
-
-

Powered by ip.skk.moe

-
-
-
- - - - - - diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/other_button.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/other_button.htm deleted file mode 100644 index 1c391ad984..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/other_button.htm +++ /dev/null @@ -1,7 +0,0 @@ -<%+cbi/valueheader%> - <% if self:cfgvalue(section) ~= false then %> - " style="display: <%= display %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> /> - <% else %> - - - <% end %> -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/ping.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/ping.htm deleted file mode 100644 index 8c86aee74a..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/ping.htm +++ /dev/null @@ -1,3 +0,0 @@ -<%+cbi/valueheader%> --- ms -<%+cbi/valuefooter%> \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/server_list.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/server_list.htm deleted file mode 100644 index c5430f044c..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/server_list.htm +++ /dev/null @@ -1,32 +0,0 @@ -<%# - Copyright 2018-2019 Lienol - Licensed to the public under the Apache License 2.0. --%> - -<% -local dsp = require "luci.dispatcher" --%> - - \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/status.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/status.htm deleted file mode 100644 index bad80f1ddb..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/status.htm +++ /dev/null @@ -1,544 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - -
-

- -

-

- <%:Collecting data...%> -

-
-

- Wiki -     - star -     - Telegram -     - -

-
-

- <%:Tip: after started, please wait patiently until the connection is normal%> -

-
<%:Main Program%><%:Collecting data...%><%:Control Panel Login IP%><%:Collecting data...%>
<%:Core Daemons%><%:Collecting data...%><%:Control Panel Login Port%><%:Collecting data...%>
<%:Core Running Mode%><%:Collecting data...%><%:Control Panel Login Secret%><%:Collecting data...%>
<%:Yacd Control Panel%><%:Collecting data...%><%:Dashboard Control Panel%><%:Collecting data...%>

Show More

<%:Quick Operation%>

<%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%>
<%:Collecting data...%><%:Collecting data...%><%:Collecting data...%><%:Collecting data...%>
-
-
- - - - - -
-

- <%:Please ensure that all items are displayed normally before running. If you need to update, please go to the global settings page%> -

-
<%:Node Select Backup%><%:Collecting data...%><%:lhie1 Rule Update%><%:Collecting data...%>
<%:ConnersHua Rule Update%><%:Collecting data...%><%:ConnersHua Return Rule Update%><%:Collecting data...%>
<%:Mainland IP Update%><%:Collecting data...%><%:GEOIP(By MaxMind)Data Update%><%:Collecting data...%>
-
- - diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/switch_mode.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/switch_mode.htm deleted file mode 100644 index 2b42439230..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/switch_mode.htm +++ /dev/null @@ -1,45 +0,0 @@ - -
- - -
-

- <%:Collecting data...%> -

-
-
- - - \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/update.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/update.htm deleted file mode 100644 index 3854d05f85..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/update.htm +++ /dev/null @@ -1,394 +0,0 @@ - -
- - - - - - - - - - - - - -
-

- <%:Note: if the update fails, you can manually download and upload%> -

-
<%:Compiled Version Selected%><%:Collecting data...%><%:Last Check Update%><%:Collecting data...%>
<%:CPU Architecture (OS)%><%:Collecting data...%><%:CPU Architecture (OPKG)%><%:Collecting data...%>
-

- <%:Core path:%> /etc/openclash/core/clash -

-
[dev] <%:Current Core%><%:Collecting data...%>[dev] <%:Latest Core%><%:Collecting data...%>
<%:Update Core%><%:Collecting data...%><%:Download Latest Core%><%:Collecting data...%>
-

- <%:Core path:%>/etc/openclash/core/clash_tun -

-
[TUN] <%:Current Core%><%:Collecting data...%>[TUN] <%:Latest Core%><%:Collecting data...%>
<%:Update Core%><%:Collecting data...%><%:Download Latest Core%><%:Collecting data...%>
-

- <%:Core path:%>/etc/openclash/core/clash_game -

-
[Game] <%:Current Core%> <%:Collecting data...%>[Game] <%:Latest Core%><%:Collecting data...%>
<%:Update Core%><%:Collecting data...%><%:Download Latest Core%><%:Collecting data...%>
-
-
- - - - -
-

- <%:Client Update%> -

-
<%:Current Client%><%:Collecting data...%><%:Latest Client%><%:Collecting data...%>
<%:Update Client%><%:Collecting data...%><%:Download Latest Client%><%:Collecting data...%>
-
-
- - - -
-

- <%:Collecting data...%> -

-
-

- <%:Collecting data...%> -

-
-
- - - \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/upload.htm b/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/upload.htm deleted file mode 100644 index b26dc442a7..0000000000 --- a/package/ctcgfw/luci-app-openclash/luasrc/view/openclash/upload.htm +++ /dev/null @@ -1,12 +0,0 @@ -<%+cbi/valueheader%> -
-
-<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po deleted file mode 100644 index 243c7c923c..0000000000 --- a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ /dev/null @@ -1,1459 +0,0 @@ -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" - -msgid "OpenClash" -msgstr "OpenClash" - -msgid "A Clash Client For OpenWrt" -msgstr "一个运行在OpenWrt上的Clash客户端,兼容Shadowsocks、ShadowsocksR、Vmess、Trojan、Snell等协议,根据灵活的规则配置实现策略代理" - -msgid "Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)" -msgstr "全局设置(将按照本页设置自动修改配置文件和获取订阅)" - -msgid "Technical Support" -msgstr "技术支持" - -msgid "Overviews" -msgstr "运行状态" - -msgid "Global Settings" -msgstr "全局设置" - -msgid "Rule Providers and Groups" -msgstr "规则集与策略组管理" - -msgid "Game Rules and Groups" -msgstr "游戏规则与策略组管理" - -msgid "Other Rule Providers and Groups" -msgstr "第三方规则集与策略组管理" - -msgid "Custom Rule Providers and Groups" -msgstr "自定义规则集与策略组管理" - -msgid "General Settings" -msgstr "常规设置" - -msgid "DNS Setting" -msgstr "DNS设置" - -msgid "Config Update" -msgstr "配置文件订阅" - -msgid "Config Subscribe Edit" -msgstr "编辑配置文件订阅信息" - -msgid "Rules Update" -msgstr "第三方规则订阅" - -msgid "Dashboard Settings" -msgstr "外部控制" - -msgid "GEOIP数据库订阅" -msgstr "外部控制" - -msgid "Enable" -msgstr "启用" - -msgid "Disable" -msgstr "停用" - -msgid "Running" -msgstr "运行中" - -msgid "Not Running" -msgstr "未运行" - -msgid "(Enable or Disable)" -msgstr "(仅添加选中的设置)" - -msgid "Config Normal" -msgstr "检查通过" - -msgid "Config Abnormal" -msgstr "检查失败" - -msgid "File Not Exist" -msgstr "文件不存在" - -msgid "Not Set" -msgstr "未设置" - -msgid "Server Logs" -msgstr "运行日志" - -msgid "Debug Logs" -msgstr "调试日志" - -msgid "Generate Logs" -msgstr "生成日志" - -msgid "Click to Generate" -msgstr "点击生成" - -msgid "Enable Clash" -msgstr "启动 OpenClash" - -msgid "Disable Clash" -msgstr "关闭 OpenClash" - -msgid "Commit Configurations" -msgstr "保存配置" - -msgid "Apply Configurations" -msgstr "应用配置" - -msgid "Download Config" -msgstr "下载配置" - -msgid "Download Running Config" -msgstr "下载运行配置" - -msgid "Select Mode" -msgstr "*运行模式" - -msgid "redir-host" -msgstr "Redir-Host(兼容)模式" - -msgid "fake-ip" -msgstr "Fake-IP(增强)模式" - -msgid "redir-host(tun mode)" -msgstr "Redir-Host(TUN)模式【依赖kmod-tun】" - -msgid "fake-ip(tun mode)" -msgstr "Fake-IP(TUN)模式【依赖kmod-tun】" - -msgid "redir-host-vpn(game mode)" -msgstr "Redir-Host(游戏)模式【依赖kmod-tun】" - -msgid "fake-ip-vpn(game mode)" -msgstr "Fake-IP(游戏)模式【依赖kmod-tun】" - -msgid "redir-host-mix(tun mix mode)" -msgstr "Redir-Host(TUN-混合)模式【依赖kmod-tun】【UDP-TUN,TCP-转发】" - -msgid "fake-ip-mix(tun mix mode)" -msgstr "Fake-IP(TUN-混合)模式【依赖kmod-tun】【UDP-TUN,TCP-转发】" - -msgid "Select Mode For OpenClash Work, Try Flush DNS Cache If Network Error" -msgstr "选择运行模式,如客户端的网络异常请尝试清除DNS缓存" - -msgid "Proxy Mode" -msgstr "*代理模式" - -msgid "Select Proxy Mode, Use Script Mode Could Prevent Proxy BT traffics If Rules Support, eg.lhie1's" -msgstr "选择默认代理模式,如果规则支持,使用脚本模式可以阻止代理BT流量,比如lhie1规则" - -msgid "Rule Proxy Mode" -msgstr "Rule【策略代理】" - -msgid "Global Proxy Mode" -msgstr "Global【全局代理(需前往控制面板手动指定节点)】" - -msgid "Direct Proxy Mode" -msgstr "Direct【全局直连】" - -msgid "Script Proxy Mode (Tun Core Only)" -msgstr "Script【脚本模式 - 仅Tun内核】" - -msgid "Select Stack Type" -msgstr "网络栈类型" - -msgid "Select Stack Type For Tun Mode, According To The Running Speed on Your Machine" -msgstr "请自行根据运行速度为Tun模式选择合适的网络栈" - -msgid "China IP Route" -msgstr "实验性:绕过中国大陆IP" - -msgid "Bypass The China Network Flows, Improve Performance" -msgstr "启用后中国大陆流量将不再经过内核,提升系统性能" - -msgid "Log Level" -msgstr "日志等级" - -msgid "Info Mode" -msgstr "Info【信息】" - -msgid "Warning Mode" -msgstr "Warning【警告】" - -msgid "Error Mode" -msgstr "Error【错误】" - -msgid "Debug Mode" -msgstr "Debug【调试】" - -msgid "Silent Mode" -msgstr "Silent【静默】" - -msgid "Select Core's Log Level" -msgstr "选择内核日志的默认输出模式" - -msgid "Only intranet allowed" -msgstr "仅允许内网" - -msgid "When Enabled, The Control Panel And The Connection Broker Port Will Not Be Accessible From The Public Network" -msgstr "启用后将禁止从公网访问控制面板和连接代理端口" - -msgid "Redirect Local DNS Setting" -msgstr "*本地DNS劫持" - -msgid "Set Local DNS Redirect" -msgstr "默认启用,将自动设置Dnsmasq的上游服务器,如和其他插件冲突可停用,但须将OpenClash作为冲突插件的唯一上游服务器" - -msgid "Disable Dnsmasq's DNS Cache" -msgstr "禁止Dnsmasq缓存DNS" - -msgid "Recommended Enabled For Avoiding Some Connection Errors" -msgstr "推荐启用,防止因缓存造成连接错误" - -msgid "(Maybe Incompatible For Your Firmware)" -msgstr "(部分固件可能不兼容)" - -msgid "Custom DNS Setting" -msgstr "自定义上游DNS服务器" - -msgid "Use Custom Rules" -msgstr "启用后将把自定义规则增加到配置文件,规则请到下方文本框编辑" - -msgid "Add Custom DNS Servers" -msgstr "设置自定义上游DNS服务器" - -msgid "(Take Effect After Choose Above)" -msgstr "(在上方设置中启用本功能后生效)" - -msgid "Advanced Setting" -msgstr "高级设置" - -msgid "DNS Advanced Settings" -msgstr "DNS高级设置" - -msgid "(Please Don't Modify it at Will)" -msgstr "(如您不知道选项有何用,请不要随意修改)" - -msgid "Specify DNS Server" -msgstr "指定(第二)DNS服务器" - -msgid "Specify DNS Server For List and Server Nodes With Fake-IP Mode, Only One IP Server Address Support" -msgstr "指定下方列表中域名和Fake-IP模式下非代理集内节点的DNS服务器,只支持填写一个IP地址" - -msgid "Domain Names In The List Do Not Return Fake-IP, One rule per line" -msgstr "每行请只填写一个域名,列表中的域名在(Fake-IP模式)下查询DNS时将返回真实IP地址,更改后点击上方按钮生效" - -msgid "Domain Names In The List Use The Custom DNS Server, One rule per line" -msgstr "每行请只填写一个域名,列表中的域名将使用上方指定的DNS进行查询" - -msgid "Fake-IP-Filter List Update" -msgstr "更新Fake-IP域名黑名单" - -msgid "Set OpenClash Upstream DNS Resolve Server" -msgstr "启用将覆盖配置文件内的设置,请先在下方配置好服务器" - -msgid "DNS Server Group" -msgstr "服务器分组" - -msgid "(NameServer Group Must Be Set)" -msgstr "(NameServer 组必须设置)" - -msgid "DNS Server Address" -msgstr "服务器地址" - -msgid "(Do Not Add Type Ahead)" -msgstr "(请勿添加类型前缀)" - -msgid "DNS Server Port" -msgstr "服务器端口" - -msgid "(Require When Use Non-Standard Port)" -msgstr "(使用非标准端口时必须填写)" - -msgid "DNS Server Type" -msgstr "服务器类型" - -msgid "(Communication protocol)" -msgstr "(通讯协议)" - -msgid "Enable ipv6 Resolve" -msgstr "允许IPV6类型DNS解析" - -msgid "Enable Clash to Resolve ipv6 DNS Requests" -msgstr "" -"固件须配置好IPV6的NAT,如你不使用IPV6请关闭固件的相关服务,避免客户端连接出现异常" - -msgid "Rules Setting" -msgstr "规则设置" - -msgid "Rules Setting(Access Control)" -msgstr "规则设置(访问控制)" - -msgid "Config Manage" -msgstr "配置文件管理" - -msgid "Upload File Type" -msgstr "上传文件类型" - -msgid "Proxy Provider File" -msgstr "代理集文件" - -msgid "Rule Provider File" -msgstr "规则集文件" - -msgid "Upload" -msgstr "上传" - -msgid "File saved to" -msgstr "文件已成功上传到" - -msgid "upload file error." -msgstr "文件上传失败" - -msgid "No specify upload file." -msgstr "未指定上传文件" - -msgid "" -"Only Support yaml what would be save to /etc/openclash/" -msgstr "注意:只支持【yaml】后缀的文件,文件将被保存到 /etc/openclash/" - -msgid "Proxy Provider File List" -msgstr "代理集文件列表" - -msgid "Rule Providers File List" -msgstr "规则集文件列表" - -msgid "Please Make Sure Ports Available" -msgstr "请确保端口可用" - -msgid "Update Subcription" -msgstr "更新订阅配置" - -msgid "Update time (every day)" -msgstr "更新时间(每天)" - -msgid "Update Interval(min)" -msgstr "更新间隔(分钟)" - -msgid "Update Mode" -msgstr "更新模式" - -msgid "Appointment Mode" -msgstr "预约" - -msgid "Loop Mode" -msgstr "循环" - -msgid "Auto Update" -msgstr "自动更新" - -msgid "Check And Update" -msgstr "检查并更新" - -msgid "After clash start running, wait a moment for servers to resolve,enjoy" -msgstr "运行后,请等待服务器上线" - -msgid "Redir Port" -msgstr "流量转发端口" - -msgid "SOCKS5 Port" -msgstr "SOCKS5 代理端口" - -msgid "HTTP(S) Port" -msgstr "HTTP(S) 代理端口" - -msgid "Mixed Port" -msgstr "HTTP(S)&SOCKS5 混合代理端口" - -msgid "Set Authentication of SOCKS5/HTTP(S)" -msgstr "设置SOCKS5/HTTP(S)认证信息" - -msgid "Not Null" -msgstr "空值无效" - -msgid "Server Subscription Address" -msgstr "配置文件订阅地址" - -msgid "Auto Update Server subscription" -msgstr "自动更新配置文件" - -msgid "Modify Your Config file:" -msgstr "您可以在下方直接修改配置文件:" - -msgid "Here, Except The Settings That Were Taken Over" -msgstr ",仅支持未被接管的设置" - -msgid "Default Config File With Correct Template" -msgstr "参考配置文件,方便您查询各项参数注释和正确的设置、顺序" - -msgid "Config File Edited By OpenClash For Running" -msgstr "OpenClash修改后用于启动的配置文件" - -msgid "Dashboard Secret" -msgstr "管理页面登录密钥" - -msgid "Set Dashboard Secret" -msgstr "设置您的管理页面登录密钥" - -msgid "Dashboard Address Example:" -msgstr "管理页面地址示例:" - -msgid "Dashboard Port" -msgstr "管理页面端口" - -msgid "GEOIP Update" -msgstr "GEOIP数据库订阅" - -msgid "Auto Update GEOIP Database" -msgstr "自动更新GEOIP数据库" - -msgid "Update GEOIP Database" -msgstr "更新GEOIP数据库" - -msgid "Auto Update Chnroute Lists" -msgstr "自动更新大陆白名单" - -msgid "Update Chnroute Lists" -msgstr "更新大陆白名单" - -msgid "Chnroute Update" -msgstr "大陆白名单订阅" - -msgid "Other Rules Update(Only in Use)" -msgstr "正在使用第三方规则时才能更新" - -msgid "Enable Other Rules" -msgstr "第三方规则" - -msgid "Use Other Rules" -msgstr "将覆盖配置文件内的所有规则 (不包括自定义规则),启用前请先在此页面下方创建配置" - -msgid "lhie1 Rules" -msgstr "lhie1 规则" - -msgid "ConnersHua Rules" -msgstr "ConnersHua 规则" - -msgid "ConnersHua(Provider-type) Rules" -msgstr "ConnersHua(规则集) 规则" - -msgid "ConnersHua Return Rules" -msgstr "ConnersHua 回国规则" - -msgid "Auto Update Other Rules" -msgstr "正在使用第三方规则时更新设置才会生效" - -msgid "Update Time (Every Week)" -msgstr "更新时间(每周)" - -msgid "Every Day" -msgstr "每天" - -msgid "Every Monday" -msgstr "每周一" - -msgid "Every Tuesday" -msgstr "每周二" - -msgid "Every Wednesday" -msgstr "每周三" - -msgid "Every Thursday" -msgstr "每周四" - -msgid "Every Friday" -msgstr "每周五" - -msgid "Every Saturday" -msgstr "每周六" - -msgid "Every Sunday" -msgstr "每周日" - -msgid "Update Other Rules" -msgstr "更新第三方规则" - -msgid "GlobalTV" -msgstr "国际流媒体流量" - -msgid "AsianTV" -msgstr "亚洲流媒体流量" - -msgid "Proxy" -msgstr "必须代理的流量" - -msgid "Youtube" -msgstr "Youtube流量" - -msgid "Apple" -msgstr "苹果服务流量" - -msgid "Scholar" -msgstr "学术网站流量" - -msgid "Microsoft" -msgstr "微软服务流量" - -msgid "Netflix" -msgstr "Netflix流量" - -msgid "Disney" -msgstr "Disney流量" - -msgid "Spotify" -msgstr "Spotify流量" - -msgid "Steam" -msgstr "Steam流量(非下载流量)" - -msgid "Netease Music" -msgstr "网易云音乐流量" - -msgid "Speedtest" -msgstr "测速流量" - -msgid "Telegram" -msgstr "Telegram流量" - -msgid "PayPal" -msgstr "PayPal流量" - -msgid "AdBlock" -msgstr "广告流量" - -msgid "Domestic" -msgstr "国内流量" - -msgid "Others" -msgstr "未匹配到规则的流量" - -msgid "Choose Proxy Groups, Base On Your Config File" -msgstr "指定流量(策略)的代理方式,只支持选择(策略组),信息来源于您的配置文件" - -msgid "Custom Clash Rules" -msgstr "自定义规则" - -msgid "Custom Clash Rules(Access Control)" -msgstr "自定义规则(访问控制)" - -msgid "Custom Rules Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com" -msgstr "设置自定义规则(顶部),详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询,在线IP段转CIDR地址:http://ip2cidr.com" - -msgid "Custom Rules 2 Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com" -msgstr "设置自定义规则(底部),详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询,在线IP段转CIDR地址:http://ip2cidr.com" - -msgid "Custom Hosts Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md" -msgstr "设置自定义Hosts,详细信息请前往Github( https://github.com/Dreamacro/clash/blob/master/README.md )查询" - -msgid "Set Custom Rules" -msgstr "设置自定义规则(在上方规则设置中启用本功能后生效)" - -msgid "Set Custom Hosts, Only Work with Redir-Host Mode" -msgstr "设置自定义Hosts,仅在Redir-Host模式下生效(不会覆盖配置文件设置)" - -msgid "Version Update" -msgstr "版本更新" - -msgid "CPU Model" -msgstr "处理器架构" - -msgid "Model Not Found" -msgstr "处理器架构识别失败" - -msgid "Current Core Version" -msgstr "当前内核版本" - -msgid "Last Core Version" -msgstr "最新内核版本" - -msgid "Unknown" -msgstr "查询失败" - -msgid "Check Failed" -msgstr "查询更新失败" - -msgid "" -msgstr "<可更新>" - -msgid "Chose to Download" -msgstr "*选择内核编译版本" - -msgid "Select Based On Your CPU Model For Core Update, Wrong Version Will Not Work" -msgstr "请根据处理器架构选择以便下载、更新对应内核,错误的版本将不能正常运行" - -msgid "Update Core File" -msgstr "更新内核" - -msgid "Download Form https://github.com/vernesong/OpenClash/releases/tag/Clash If Fail" -msgstr "" -"如下载失败可前往 https://github.com/vernesong/OpenClash/releases/tag/Clash 手动下载并上传" - -msgid "Last OpenClash Version" -msgstr "最新客户端版本" - -msgid "Current OpenClash Version" -msgstr "当前客户端版本" - -msgid "Update OpenClash" -msgstr "更新客户端" - -msgid "Only For IPK Install Type Or Not Release Memory" -msgstr "" -"只支持通过IPK安装的版本进行更新,因为随系统编译的版本更新后不会释放旧版本的闪存空间" - -msgid "Servers and Groups" -msgstr "服务器与策略组管理" - -msgid "Load Config" -msgstr "读取配置" - -msgid "Delete Unused Servers" -msgstr "删除未启用节点" - -msgid "Delete Servers" -msgstr "清空服务器配置" - -msgid "Delete Proxy Provider" -msgstr "清空代理集配置" - -msgid "Delete Groups" -msgstr "清空策略组配置" - -msgid "Back Configurations" -msgstr "返回概览" - -msgid "Refresh Page" -msgstr "刷新页面" - -msgid "Servers manage and Config create" -msgstr "服务器&策略组管理(支持配置文件一键生成)" - -msgid "Keep Settings" -msgstr "保留配置" - -msgid "Only Update Servers Below When Subscription" -msgstr "订阅时仅更新节点和代理集,保留下方策略组设置,不修改顺序" - -msgid "New Servers Group" -msgstr "新节点默认策略组" - -msgid "Set The New Subscribe Server's Default Proxy Groups" -msgstr "选择符合订阅要求的新节点的默认策略组(请勿重复添加)" - -msgid "Choose Template For Create Config" -msgstr "选择配置文件模板" - -msgid "Use Other Rules To Create Config" -msgstr "使用第三方规则快速创建配置文件(创建后可在全局设置页面调整参数)" - -msgid "Disable Create Config" -msgstr "只更新配置文件服务器节点信息" - -msgid "Mix Proxies" -msgstr "混合节点" - -msgid "Mix This Page's Proxies" -msgstr "一键生成配置文件时合并本页下方的所有代理服务器信息(不区分配置文件)" - -msgid "Type" -msgstr "节点类型" - -msgid "Server Alias" -msgstr "别名(请勿重名)" - -msgid "Server Address" -msgstr "服务器地址" - -msgid "Server Port" -msgstr "服务器端口" - -msgid "UDP Support" -msgstr "UDP支持" - -msgid "Ping Latency" -msgstr "服务器延迟" - -msgid "Edit Server" -msgstr "编辑服务器配置" - -msgid "Server Node Type" -msgstr "服务器节点类型" - -msgid "Using incorrect encryption mothod may causes service fail to start" -msgstr "输入不正确的参数组合可能会导致服务无法启动" - -msgid "Password" -msgstr "密码" - -msgid "Encrypt Method" -msgstr "加密方式" - -msgid "Protocol" -msgstr "协议" - -msgid "Protocol param(optional)" -msgstr "传输协议参数(可选)" - -msgid "Obfs" -msgstr "混淆插件" - -msgid "Obfs param(optional)" -msgstr "混淆参数(可选)" - -msgid "UDP Enable" -msgstr "UDP支持" - -msgid "obfs-mode" -msgstr "传输协议" - -msgid "obfs-hosts" -msgstr "混淆参数(HOST)" - -msgid "Auth Username" -msgstr "登录用户名" - -msgid "Auth Password" -msgstr "登录密码" - -msgid "None" -msgstr "未配置" - -msgid "Create Config" -msgstr "一键生成配置文件" - -msgid "Create Config By One-Click Only Need Proxys" -msgstr "一键生成配置文件功能只需要配置服务器节点信息或代理集信息" - -msgid "Proxy Groups(No Need Set when Config Create)" -msgstr "策略组配置(使用一键生成配置文件功能时无需设置)" - -msgid "Proxys" -msgstr "服务器节点配置" - -msgid "Edit Rule Providers" -msgstr "编辑规则集配置" - -msgid "Rule Providers Type" -msgstr "规则集类型" - -msgid "Choose The Rule Providers Type" -msgstr "选择规则集类型" - -msgid "Append Position" -msgstr "规则集匹配顺序" - -msgid "Priority Match" -msgstr "优先(覆盖)" - -msgid "Extended Match" -msgstr "扩展(补充)" - -msgid "Rule Providers Name" -msgstr "别名(请勿重名)" - -msgid "Rule Behavior" -msgstr "规则类型" - -msgid "Choose The Rule Behavior" -msgstr "选择规则类型" - -msgid "Rule Providers Path" -msgstr "规则集路径" - -msgid "Update Your Rule Providers File From Config Luci Page" -msgstr "请先在配置文件管理页面上传您的规则集文件" - -msgid "Rule Providers URL" -msgstr "规则集地址" - -msgid "Rule Providers Interval(s)" -msgstr "规则集更新时间(秒)" - -msgid "Edit Group" -msgstr "编辑策略组配置" - -msgid "Group Type" -msgstr "策略组类型" - -msgid "Choose The Operation Mode" -msgstr "设置策略组挑选服务器节点的工作方式" - -msgid "Group Name" -msgstr "别名(请勿重名)" - -msgid "Disable UDP" -msgstr "禁用UDP连接" - -msgid "Test URL" -msgstr "检测地址(URL)" - -msgid "Test Interval(s)" -msgstr "检测频率(秒)" - -msgid "Tolerance(ms)" -msgstr "节点切换容忍值(毫秒)" - -msgid "Manual-Select" -msgstr "Select【手动选择】" - -msgid "URL-Test" -msgstr "URL-Test【最低延迟】" - -msgid "Fallback" -msgstr "Fallback【故障切换】" - -msgid "Load-Balance" -msgstr "Load-Balance【负载均衡】" - -msgid "Relay-Traffic" -msgstr "Relay【嵌套中转】" - -msgid "Other Group" -msgstr "包含其他策略组(请勿重复添加)" - -msgid "The Added Proxy Groups Must Exist Except 'DIRECT' & 'REJECT'" -msgstr "注意:除'DIRECT'和'REJECT'外,修改配置文件前添加的其他策略组必须已创建" - -msgid "The Added Proxy Provider Must Exist" -msgstr "修改配置文件前添加的代理集必须已创建" - -msgid "Proxy Group" -msgstr "添加到策略组(请勿重复添加)" - -msgid "Set Proxy Group" -msgstr "指定策略组" - -msgid "No Need Set when Config Create, The added Proxy Groups Must Exist" -msgstr "注意:使用一键生成配置文件功能时无需设置此项,修改配置文件前添加的策略组必须已创建" - -msgid "Clean Log" -msgstr "清理日志" - -msgid "Stop Refresh Log" -msgstr "停止刷新" - -msgid "Start Refresh Log" -msgstr "开始刷新" - -msgid "Config File" -msgstr "配置文件" - -msgid "State" -msgstr "状态" - -msgid "Update Time" -msgstr "更新时间" - -msgid "File Name" -msgstr "文件名" - -msgid "Grammar Check" -msgstr "语法检查" - -msgid "Switch Config" -msgstr "切换" - -msgid "Size" -msgstr "文件大小" - -msgid "Remove" -msgstr "移除" - -msgid "(Enable or Disable Subscribe)" -msgstr "(启用或禁用更新)" - -msgid "Config Alias" -msgstr "配置文件名" - -msgid "(Name For Distinguishing)" -msgstr "(用于区分,请勿重名)" - -msgid "Subscribe Address" -msgstr "订阅地址" - -msgid "(Not Null)" -msgstr "(空值无效)" - -msgid "Keyword Match" -msgstr "筛选节点" - -msgid "Exclude Keyword Match" -msgstr "排除节点" - -msgid "(eg: hk or tw&bgp)" -msgstr "(格式示例:香港 或 台湾&bgp 或 新加坡&bgp&奈飞)" - -msgid "Config File List" -msgstr "配置文件列表" - -msgid "Use For All Config File" -msgstr "添加到所有配置文件" - -msgid "Proxy-Provider" -msgstr "代理集配置" - -msgid "Edit Proxy-Provider" -msgstr "编辑代理集配置" - -msgid "Provider Type" -msgstr "代理集类型" - -msgid "Choose The Provider Type" -msgstr "选择代理集的类型" - -msgid "Provider Name" -msgstr "代理集别名(请勿重名)" - -msgid "Provider Path" -msgstr "代理集路径(Path)" - -msgid "Update Your Proxy Provider File From Config Luci Page" -msgstr "请先在配置文件管理页面上传您的代理集文件" - -msgid "Provider URL" -msgstr "代理集URL" - -msgid "Provider Interval(s)" -msgstr "代理集更新间隔(s)" - -msgid "Provider Health Check" -msgstr "代理集状态检查" - -msgid "Health Check URL" -msgstr "状态检查URL" - -msgid "Health Check Interval(s)" -msgstr "状态检查间隔(s)" - -msgid "Game Rule's Name" -msgstr "选择游戏规则" - -msgid "Rule Provider's Name" -msgstr "选择规则集(请勿重复添加)" - -msgid "Select Proxy Group" -msgstr "选择策略组" - -msgid "Game Rules List" -msgstr "游戏规则列表" - -msgid "Rule Name" -msgstr "规则名称" - -msgid "Rule Type" -msgstr "规则类型" - -msgid "Rule Author" -msgstr "规则作者" - -msgid "Download Rule" -msgstr "下载规则" - -msgid "Exist" -msgstr "已下载" - -msgid "Not Exist" -msgstr "未下载" - -msgid "Order Number" -msgstr "序号" - -msgid "Game Rules Manage" -msgstr "管理第三方游戏规则" - -msgid "Other Rule Provider Manage" -msgstr "管理第三方规则集" - -msgid "Other Rule Providers List" -msgstr "第三方规则集列表" - -msgid "Proxy UDP Traffics" -msgstr "*UDP流量转发" - -msgid "Select Mode For UDP Traffics, The Servers Must Support UDP while Choose Proxy" -msgstr "启用时服务器必须支持UDP转发" - -msgid "Operation Mode" -msgstr "模式设置" - -msgid "Select Operation Mode" -msgstr "*页面操作模式" - -msgid "Select Mode For Page Settings, Switch By Click the Button Bellow" -msgstr "选择全局设置的操作模式,单击下面的按钮进行切换" - -msgid "redir-host mode" -msgstr "Redir-Host 模式" - -msgid "fake-ip mode" -msgstr "Fake-IP 模式" - -msgid "Switch Operation Mode" -msgstr "切换操作模式" - -msgid "Switch Mode" -msgstr "切换" - -msgid "Access Control" -msgstr "访问控制" - -msgid "LAN Access Control Mode" -msgstr "局域网访问控制模式" - -msgid "Black List Mode" -msgstr "黑名单模式" - -msgid "White List Mode" -msgstr "白名单模式" - -msgid "LAN Bypassed Host List" -msgstr "不走代理的局域网设备 IP" - -msgid "LAN Proxied Host List" -msgstr "走代理的局域网设备 IP" - -msgid "WAN Bypassed Host List" -msgstr "不走代理的WAN IP" - -msgid "LAN Bypassed Mac List" -msgstr "不走代理的局域网设备 Mac" - -msgid "LAN Proxied Mac List" -msgstr "走代理的局域网设备 Mac" - -msgid "In The Fake-IP Mode, Only Pure IP Requests Are Supported" -msgstr "在Fake-IP模式下,只支持过滤纯IP类型的请求" - -msgid "Rule Match Proxy Mode" -msgstr "*仅代理命中规则流量" - -msgid "Only Proxy Rules Match, Prevent BT/P2P Passing" -msgstr "仅允许代理命中规则的流量,防止BT、P2P下载流量经过代理" - -msgid "Common Ports Proxy Mode" -msgstr "*仅允许常用端口流量" - -msgid "Only Common Ports, Prevent BT/P2P Passing" -msgstr "仅允许常用端口的流量经过Clash,防止BT、P2P下载流量经过代理" - -msgid "Provider File Manage" -msgstr "代理(规则)集文件管理" - -msgid "Config File Edit" -msgstr "配置文件编辑" - -msgid "Delete All File" -msgstr "删除所有文件" - -msgid "Template Name" -msgstr "订阅转换模板" - -msgid "Subscribe Convert Online" -msgstr "在线订阅转换" - -msgid "Custom Template URL" -msgstr "自定义模板地址" - -msgid "Custom Template" -msgstr "自定义模板" - -msgid "Emoji" -msgstr "添加Emoji" - -msgid "skip-cert-verify" -msgstr "跳过证书验证" - -msgid "Sort" -msgstr "排序" - -msgid "Append Node Type" -msgstr "插入节点类型" - -msgid "Convert Subscribe Online With Template, Mix Proxies and Keep Settings options Will Not Effect" -msgstr "根据模板在线转换配置文件,混合节点和保留配置功能将不可用" - -msgid "Convert Subscribe function of Online is Supported By subconverter Written By tindy X" -msgstr "在线订阅转换功能由tindy X通过subconverter提供支持" - -msgid "Small Flash Memory" -msgstr "小闪存模式" - -msgid "Move Core And GEOIP Data File To /tmp/etc/openclash For Small Flash Memory Device" -msgstr "针对闪存空间不够的设备,移动内核和GEOIP数据库文件到 /tmp/etc/openclash 文件夹" - -msgid "Round-robin" -msgstr "轮询(轮流使用全部代理)" - -msgid "Consistent-hashing" -msgstr "哈希匹配(访问相同网站时使用同一个代理)" - -msgid "Strategy Type" -msgstr "策略类型" - -msgid "Choose The Load-Balance's Strategy Type" -msgstr "选择负载均衡的策略类型" - -msgid "Main Program" -msgstr "OpenClash 主程序" - -msgid "Core Daemons" -msgstr "OpenClash 守护程序" - -msgid "Core Running Mode" -msgstr "OpenClash 运行模式" - -msgid "Yacd Control Panel" -msgstr "Yacd 控制面板" - -msgid "Dashboard Control Panel" -msgstr "Dashboard 控制面板" - -msgid "Control Panel Login IP" -msgstr "控制面板登录IP" - -msgid "Control Panel Login Port" -msgstr "控制面板登录端口" - -msgid "Control Panel Login Secret" -msgstr "控制面板登录密钥" - -msgid "Dashboard Control Panel" -msgstr "Dashboard 控制面板" - -msgid "Quick Operation" -msgstr "常用操作快捷按钮" - -msgid "Please ensure that all items are displayed normally before running. If you need to update, please go to the global settings page" -msgstr "组件的状态显示,运行前请确保各项目显示正常,需要更新请到全局设置页面操作" - -msgid "Node Select Backup" -msgstr "策略组节点选择 备份日期" - -msgid "ConnersHua Rule Update" -msgstr "ConnersHua 规则更新日期" - -msgid "Mainland IP Update" -msgstr "大陆IP白名单 更新日期" - -msgid "lhie1 Rule Update" -msgstr "lhie1 规则更新日期" - -msgid "ConnersHua Return Rule Update" -msgstr "ConnersHua 回国规则更新日期" - -msgid "GEOIP(By MaxMind)Data Update" -msgstr "GEOIP(By MaxMind)数据库日期" - -msgid "No Backup" -msgstr "暂未备份" - -msgid "" -msgstr "<功能受限状态>" - -msgid "Fake-IP (Enhance)" -msgstr "Fake-IP(增强)模式" - -msgid "Redir-Host (Compatible)" -msgstr "Redir-Host(兼容)模式" - -msgid "Redir-Host (TUN)" -msgstr "Redir-Host(TUN)模式" - -msgid "Fake-IP (TUN)" -msgstr "Fake-IP(TUN)模式" - -msgid "Redir-Host (Game)" -msgstr "Redir-Host(游戏)模式" - -msgid "Fake-IP (Game)" -msgstr "Fake-IP(游戏)模式" - -msgid "Fake-IP (TUN-Mix)" -msgstr "Fake-IP(TUN-混合)模式" - -msgid "Redir-Host (TUN-Mix)" -msgstr "Redir-Host(TUN-混合)模式" - -msgid "Open Panel" -msgstr "打开控制面板" - -msgid "Close All Connections" -msgstr "重置所有链接" - -msgid "Restore Nodes Selection" -msgstr "还原策略组节点选择" - -msgid "Save Nodes Selection" -msgstr "保存策略组节点选择" - -msgid "Reload Firewall Rules" -msgstr "重置防火墙规则" - -msgid "Check All Components Update" -msgstr "插件和内核检查更新" - -msgid "Check Config Update" -msgstr "配置文件检查更新" - -msgid "Check Third Party Rules Update" -msgstr "第三方规则检查更新" - -msgid "Check GEOIP Data Update" -msgstr "GEOIP数据库检查更新" - -msgid "Check and update all Cores and plug-ins?" -msgstr "确定要一键检查并更新所有内核及插件吗?" - -msgid "Check failed, Please try again later!" -msgstr "一键检查更新失败,请稍后再试!" - -msgid "No compiled version is selected. Please configure it in the General Settings tab!" -msgstr "未选择编译版本,请到常规设置标签中配置!" - -msgid "Checking..." -msgstr "正在检查更新..." - -msgid "Reloading..." -msgstr "正在重置..." - -msgid "Restoring..." -msgstr "正在还原..." - -msgid "Saving..." -msgstr "正在保存..." - -msgid "Firewall Rules Reset Failed" -msgstr "防火墙规则重置失败" - -msgid "Close All Connections Railed" -msgstr "重置所有链接失败" - -msgid "Restore Nodes Selection Railed" -msgstr "还原失败" - -msgid "Save Nodes Selection Failed" -msgstr "备份失败" - -msgid "Tip: after started, please wait patiently until the connection is normal" -msgstr "Tip: OpenClash 成功启动后请耐心等待下方网站访问检查连接正常后再使用" - -msgid "Tip: You can modify the profile on the profile page (for content that is not taken over)" -msgstr "Tip: 您可以在配置文件页面直接修改配置文件(适用于没被接管的内容)" - -msgid "Tip: click the version icon above to jump to the client publishing page" -msgstr "Tip: 点击上方版本图标可跳转到客户端发布页面" - -msgid "Tip: do not write configuration files? Try to create one click on the server page" -msgstr "Tip: 不会编写配置文件?试试在【服务器与策略组管理】页面一键创建" - -msgid "Tip: some website are abnormal? Try switching modes or using third-party rules" -msgstr "Tip: 某些网站链接出现异常? 试试切换模式或者使用第三方规则" - -msgid "Tip: using the fake IP mode can get a faster access experience" -msgstr "Tip: 使用 Fake-IP 模式可以获得更加快速的访问体验" - -msgid "Tip: query DNS by TLS & TCP & HTTPS can get better anti pollution effect" -msgstr "Tip: 使用 TLS & TCP & HTTPS 方式查询DNS可以获得更好的抗污染效果" - -msgid "Tip: openlash will check the configuration file parameters to ensure that it works properly" -msgstr "Tip: OpenClash 启动时会检查配置文件参数【服务器(策略)组、规则、DNS设置】以确保能够正常工作" - -msgid "Tip: the nameserver group must have at least one server set when using custom DNS" -msgstr "Tip: 使用自定义DNS上游服务器时NameServer组必须设置至少一个服务器" - -msgid "Tip: the website access check shows the connection of the device currently logged in to the Luci page" -msgstr "Tip: 网站访问检查展示的是当前登录LUCI页面设备的连接情况" - -msgid "Tip: if you don not use IPv6, please turn off the DHCP service of IPv6, otherwise the connection will be abnormal" -msgstr "Tip: 如果不使用IPV6,请关闭IPV6的DHCP服务,否则会造成连接异常" - -msgid "Tip: you can update the version in the global settings page" -msgstr "Tip: 您可以在全局设置页面进行版本更新操作" - -msgid "Note: if the update fails, you can manually download and upload" -msgstr "注意:如更新失败可手动下载并上传" - -msgid "Note: the client may not support update, because the firmware with squashfs format will not release flash space after updating" -msgstr "注意:客户端可能无法更新,因为squashfs格式的固件更新后不会释放闪存空间" - -msgid "Compiled Version Selected" -msgstr "已选择编译版本" - -msgid "CPU Architecture (OS)" -msgstr "处理器架构(OS)" - -msgid "Last Check Update" -msgstr "上次检查更新时间" - -msgid "CPU Architecture (OPKG)" -msgstr "处理器架构(OPKG)" - -msgid "Current Core" -msgstr "当前内核版本" - -msgid "Latest Core" -msgstr "最新内核版本" - -msgid "Core path:" -msgstr "内核路径:" - -msgid "Update Core" -msgstr "更新内核" - -msgid "Download Latest Core" -msgstr "下载最新版本内核" - -msgid "Client Update" -msgstr "客户端版本更新" - -msgid "Current Client" -msgstr "当前客户端版本" - -msgid "Update Client" -msgstr "更新客户端" - -msgid "Latest Client" -msgstr "最新客户端版本" - -msgid "Download Latest Client" -msgstr "下载最新版本客户端" - -msgid "Download" -msgstr "下载到本地" - -msgid "Restore Default Configuration" -msgstr "还原默认配置" - -msgid "One Click Check Update" -msgstr "一键检查更新" - -msgid "Failed to get the latest version. Please try again later!" -msgstr "最新版本获取失败,请稍后再试!" - -msgid "Are you sure want to restore the default configuration?" -msgstr "确定要还原默认配置吗?" - -msgid "Restore succeeded!" -msgstr "还原默认配置成功!" - -msgid "Restore failed!" -msgstr "还原默认配置失败!" - -msgid "Support syntax check, press" -msgstr "支持语法检查,按下" - -msgid "to enter full screen editing mode" -msgstr "进入全屏编辑模式" - -msgid "Switch page to Fake-IP mode" -msgstr "切换页面到 Fake-IP 模式" - -msgid "Switch page to Redir-Host mode" -msgstr "切换页面到 Redir-Host 模式" - -msgid "Page has been switched to Fake-IP mode!" -msgstr "页面已切换为Fake-IP模式!" - -msgid "Page has been switched to Redir-Host mode!" -msgstr "页面已切换为Redir-Host模式!" - -msgid "IP Address" -msgstr "IP 地址" - -msgid "Mainland" -msgstr "国内" - -msgid "Abroad" -msgstr "国外" - -msgid "Website Access Check" -msgstr "网站访问检查" - -msgid "Baidu Search" -msgstr "百度搜索" - -msgid "NetEase Music" -msgstr "网易云音乐" - -msgid "Querying..." -msgstr "查询中..." - -msgid "Testing..." -msgstr "检测中..." - -msgid "Access Timed Out" -msgstr "连接超时" - -msgid "Access Normal" -msgstr "连接正常" - -msgid "Access Denied" -msgstr "无法访问" - -msgid "Bind Network Interface" -msgstr "绑定网络接口" - -msgid "Default Interface Name:" -msgstr "当前系统默认接口:" - -msgid ",Try Enable If Network Loopback" -msgstr ", 如发生回环死机请尝试启用" - -msgid "Custom GEOIP URL" -msgstr "GEOIP数据库更新URL" - -msgid "Custom Chnroute Lists URL" -msgstr "大陆IP段更新URL" - -msgid "Custom GEOIP Data URL, Click Button Below To Refresh After Edit" -msgstr "自定义GEOIP数据库的更新来源,编辑后点击下方按钮生效" - -msgid "Custom Chnroute Lists URL, Click Button Below To Refresh After Edit" -msgstr "自定义大陆IP段的更新来源,编辑后点击下方按钮生效" - -msgid "(Default)" -msgstr "(默认)" - -msgid "(Only CN)" -msgstr "(仅中国数据)" - -msgid "(Large Size)" -msgstr "(18MB大文件,请确保足够的剩余空间)" - -msgid "Other Rules Edit" -msgstr "设置第三方规则" - -msgid "Get Group Names" -msgstr "获取策略组" - -msgid "Get Group Names After Select Config File" -msgstr "选择配置文件后请点击以获取对应的策略组" - -msgid "Other Rules Name" -msgstr "第三方规则" - -msgid "Note" -msgstr "备注" - -msgid "Auto Restart" -msgstr "定时重启" - -msgid "Auto Restart OpenClash" -msgstr "定时重启插件" - -msgid "Restart Time (Every Week)" -msgstr "重启时间(每周)" - -msgid "Restart time (every day)" -msgstr "重启时间(每天)" - -msgid "DNS Port" -msgstr "DNS监听端口" - -msgid "Log Size (KB)" -msgstr "日志大小(KB)" - -msgid "Set Log File Size (KB)" -msgstr "设置日志文件大小(KB)" - -msgid "Download Log" -msgstr "下载日志" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/config/openclash b/package/ctcgfw/luci-app-openclash/root/etc/config/openclash deleted file mode 100644 index caae603116..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/config/openclash +++ /dev/null @@ -1,103 +0,0 @@ - -config openclash 'config' - option proxy_port '7892' - option mixed_port '7893' - option socks_port '7891' - option http_port '7890' - option dns_port '7874' - option enable '0' - option update '0' - option en_mode '0' - option auto_update '0' - option auto_update_time '0' - option cn_port '9090' - option dashboard_password '123456' - option rule_source '0' - option enable_custom_dns '0' - option ipv6_enable '0' - option enable_custom_clash_rules '0' - option other_rule_auto_update '0' - option core_version '0' - option en_mode 'redir-host' - option enable_redirect_dns '1' - option dns_advanced_setting '0' - option servers_if_update '0' - option disable_masq_cache '0' - option servers_update '0' - option log_level 'silent' - option proxy_mode 'rule' - option intranet_allowed '0' - option enable_udp_proxy '1' - option lan_ac_mode '0' - option operation_mode 'redir-host' - option enable_rule_proxy '0' - option redirect_dns '0' - option small_flash_memory '0' - option interface_name '0' - option common_ports '0' - option log_size '1024' - option geo_custom_url 'http://www.ideame.top/mmdb/Country.mmdb' - option chnr_custom_url 'https://ispip.clang.cn/all_cn.txt' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '114.114.114.114' - option enabled '1' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '119.29.29.29' - option enabled '1' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '119.28.28.28' - option enabled '0' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '223.5.5.5' - option enabled '0' - -config dns_servers - option type 'https' - option group 'fallback' - option enabled '1' - option ip 'cloudflare-dns.com/dns-query' - -config dns_servers - option group 'fallback' - option enabled '1' - option ip 'dns.google/dns-query' - option type 'https' - -config dns_servers - option enabled '0' - option group 'fallback' - option ip 'dns.google' - option port '853' - option type 'tls' - -config dns_servers - option enabled '1' - option group 'fallback' - option type 'https' - option ip '1.1.1.1/dns-query' - -config dns_servers - option enabled '0' - option group 'fallback' - option ip '1.1.1.1' - option port '853' - option type 'tls' - -config dns_servers - option enabled '1' - option group 'fallback' - option ip '8.8.8.8' - option port '853' - option type 'tls' diff --git a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash deleted file mode 100755 index 4a14a33d92..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash +++ /dev/null @@ -1,1790 +0,0 @@ -#!/bin/sh /etc/rc.common -# Copyright (c) 2019 vernesong -. /usr/share/openclash/openclash_ps.sh -. /usr/share/openclash/ruby.sh - -START=99 -STOP=15 - -LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") -CLASH="/etc/openclash/clash" -CLASH_CONFIG="/etc/openclash" -CRON_FILE="/etc/crontabs/root" -RAW_CONFIG_FILE=$(uci -q get openclash.config.config_path) -BACKUP_FILE="/etc/openclash/backup/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)" -LOG_FILE="/tmp/openclash.log" -START_LOG="/tmp/openclash_start.log" -CONFIG_FILE="/etc/openclash/$(uci -q get openclash.config.config_path |awk -F '/' '{print $5}' 2>/dev/null)" -RULE_PROVIDER_FILE="/tmp/yaml_rule_provider.yaml" -DNS_FILE="/tmp/yaml_dns.yaml" -GAME_RULE_FILE="/tmp/yaml_game_rule.yaml" -FALLBACK_FILTER_FILE="/tmp/yaml_fallback_filter_file.yaml" -LOCK_FILE=/tmp/lock/openclash.lock -PROXY_FWMARK="0x162" -PROXY_ROUTE_TABLE="0x162" - -set_lock() { - exec 888>"$LOCK_FILE" 2>/dev/null - flock -x 888 2>/dev/null -} - -del_lock() { - flock -u 888 2>/dev/null - rm -rf "$LOCK_FILE" -} - -add_cron() -{ - [ "$(tail -n1 /etc/crontabs/root | wc -l)" -eq 0 ] && [ -n "$(cat /etc/crontabs/root 2>/dev/null)" ] && echo >> /etc/crontabs/root - [ -z "$(grep "openclash.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.auto_update)" -eq 1 ] && [ "$(uci -q get openclash.config.config_auto_update_mode)" -ne 1 ] && echo "0 $(uci -q get openclash.config.auto_update_time) * * $(uci -q get openclash.config.config_update_week_time) /usr/share/openclash/openclash.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_rule.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.other_rule_auto_update)" -eq 1 ] && echo "0 $(uci -q get openclash.config.other_rule_update_day_time) * * $(uci -q get openclash.config.other_rule_update_week_time) /usr/share/openclash/openclash_rule.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_ipdb.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.geo_auto_update)" -eq 1 ] && echo "0 $(uci -q get openclash.config.geo_update_day_time) * * $(uci -q get openclash.config.geo_update_week_time) /usr/share/openclash/openclash_ipdb.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_chnroute.sh" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.chnr_auto_update)" -eq 1 ] && echo "0 $(uci -q get openclash.config.chnr_update_day_time) * * $(uci -q get openclash.config.chnr_update_week_time) /usr/share/openclash/openclash_chnroute.sh" >> $CRON_FILE - } - [ -z "$(grep "/etc/init.d/openclash" "$CRON_FILE" 2>/dev/null)" ] && { - [ "$(uci -q get openclash.config.auto_restart)" -eq 1 ] && echo "0 $(uci -q get openclash.config.auto_restart_day_time) * * $(uci -q get openclash.config.auto_restart_week_time) /etc/init.d/openclash restart 2>/dev/null" >> $CRON_FILE - } - crontab $CRON_FILE - nohup /usr/share/openclash/openclash_watchdog.sh & -} - -del_cron() -{ - sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_rule.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_ipdb.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_chnroute.sh/d' $CRON_FILE 2>/dev/null - /etc/init.d/cron restart -} - -change_dns() { - if [ "$1" -eq 1 ]; then - uci -q del dhcp.@dnsmasq[-1].server - uci -q add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" - uci -q delete dhcp.@dnsmasq[0].resolvfile - uci -q set dhcp.@dnsmasq[0].noresolv=1 - uci -q set openclash.config.redirect_dns=1 - else - uci -q set openclash.config.redirect_dns=0 - fi - if [ "$2" -eq 1 ]; then - uci -q set dhcp.@dnsmasq[0].cachesize=0 - fi - - uci -q commit dhcp - uci -q commit openclash - - /usr/share/openclash/openclash_custom_domain_dns.sh >/dev/null 2>&1 -} - -revert_dns() { - - [ "$1" -eq 1 ] && { - uci -q del_list dhcp.@dnsmasq[0].server=127.0.0.1#"$3" - } - - [ "$1" -eq 1 ] && [ "$4" -eq 0 ] && { - uci -q set openclash.config.redirect_dns=0 - } - - [ "$(uci -q get dhcp.@dnsmasq[0].cachesize)" = "0" ] && { - uci -q delete dhcp.@dnsmasq[0].cachesize - } - - [ "$1" -eq 1 ] && { - if [ -s "/tmp/resolv.conf.d/resolv.conf.auto" ] && [ -n "$(grep "nameserver" /tmp/resolv.conf.d/resolv.conf.auto)" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.d/resolv.conf.auto - elif [ -s "/tmp/resolv.conf.auto" ] && [ -n "$(grep "nameserver" /tmp/resolv.conf.auto)" ]; then - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - else - rm -rf /tmp/resolv.conf.auto - touch /tmp/resolv.conf.auto 2>/dev/null - cat >> "/tmp/resolv.conf.auto" <<-EOF -# Interface lan -nameserver 114.114.114.114 -nameserver 119.29.29.29 -EOF - uci -q set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - fi - uci -q set dhcp.@dnsmasq[0].noresolv=0 - } - - uci -q commit dhcp - uci -q commit openclash - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash_custom_domain.conf -} - -kill_clash() -{ - clash_pids=$(pidof clash |sed 's/$//g') - for clash_pid in $clash_pids; do - kill -9 "$clash_pid" 2>/dev/null - done >/dev/null 2>&1 - sleep 1 -} - -start_fail() -{ - kill_clash - stop - del_lock - exit 0 -} - -yml_dns_check() -{ - #检查DNS服务 - if [ -z "$(ruby_read "$1" "['dns']['nameserver']")" ]; then - echo "检测到DNS选项下的Nameserver未设置服务器,开始补全..." >$START_LOG - echo " nameserver:" > "$DNS_FILE" 2>/dev/null - cat >> "$DNS_FILE" <<-EOF - - 114.114.114.114 - - 119.29.29.29 - fallback: - - https://cloudflare-dns.com/dns-query - - https://dns.google/dns-query - - https://1.1.1.1/dns-query - - tls://8.8.8.8:853 -EOF - if [ -z "$(ruby_read "$1" "['dns']")" ]; then - ruby_cover "$1" "['dns']" "$DNS_FILE" - else - ruby_merge "$1" "['dns']" "$DNS_FILE" - fi - fi - - #fallback-filter - if [ -n "$(ruby_read "$CONFIG_FILE" "['dns']['fallback']")" ] && [ -z "$(ruby_read "$CONFIG_FILE" "['dns']['fallback-filter']")" ]; then -cat >> "$2" <<-EOF - fallback-filter: - geoip: false - ipcidr: - - 0.0.0.0/8 - - 10.0.0.0/8 - - 100.64.0.0/10 - - 127.0.0.0/8 - - 169.254.0.0/16 - - 172.16.0.0/12 - - 192.0.0.0/24 - - 192.0.2.0/24 - - 192.88.99.0/24 - - 192.168.0.0/16 - - 198.18.0.0/15 - - 198.51.100.0/24 - - 203.0.113.0/24 - - 224.0.0.0/4 - - 240.0.0.0/4 - - 255.255.255.255/32 - domain: - - '+.google.com' - - '+.facebook.com' - - '+.youtube.com' - - '+.githubusercontent.com' -EOF - ruby_merge "$CONFIG_FILE" "['dns']" "$2" - fi -} - -#修改集路径 -yml_provider_path() -{ - - #provider_num=$(ruby_read "$1" "['$2'].count") - #local i=0 - #while [ $i -le "$provider_num" ] - #do - # provider_path=$(ruby_read "$1" "['$2'].values[$i]['path']") - # if [ "$(echo "$provider_path" |awk -F '/' '{print $(NF-1)}')" != "$3" ]; then - # provider_name=$(echo "$provider_path" |awk -F '/' '{print $NF}') - # ruby_edit "$1" "['$2'].values[$i]['path']='./${3}/${provider_name}'" - # uci set openclash.config.config_reload=0 2>/dev/null - # uci commit openclash - # fi - # let i++ - #done - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$1'); - if Value.key?('$2') then - Value_1 = Marshal.load(Marshal.dump(Value['$2'])); - Value['$2'].values.each{ - |x,v| - unless x['path'].include? '$3' then - v=File.basename(x['path']) - x['path']='./$3/'+v - end - }; - if not Value_1.eql?(Value['$2']) then - File.open('$1','w') {|f| YAML.dump(Value, f)} - end - end; - rescue Exception => e - puts '${LOGTIME} Edit Provider Path Error: ' + e.message - end - " 2>/dev/null >> $LOG_FILE -} - -#检查集文件防止启动失败 -yml_provider_check() -{ -provider_path_line=$(ruby_read "$CONFIG_FILE" ".key?('$2')") -local provider_path_check provider_path_check_num=0 -if "$provider_path_line"; then - while ( [ -n "$(pidof clash)" ] && [ "$provider_path_check_num" -le 5 ] ) - do - provider_path_check=$(ruby -ryaml -E UTF-8 -e " - Value = YAML.load_file('$CONFIG_FILE'); - Value['$2'].values.each{|x,v| - if not x['path'].empty? then - if x['path'].split('/')[0] == '.' then - v = '/etc/openclash/'+x['path'].split('./')[1] - else - v = x['path'] - end - end; - if File::exist?(v) then - if not YAML.load_file(v).key?('$3') then - puts false - break - end - else - puts false - break - end - } - " 2>/dev/null) - if [ "$provider_path_check" = "false" ]; then - let provider_path_check_num++ - sleep 2 - else - break - fi - done -fi - -if [ -z "$(pidof clash)" ] && [ -n "$provider_path_check" ]; then - if [ "$2" = "proxy-providers" ]; then - echo "错误: 代理集文件下载失败,请到日志页面查看详细错误信息!" >$START_LOG - echo "${LOGTIME} Error: Faild to Download Proxy-Provider File, Please Check The Error Info And Try Again" >> $LOG_FILE - else - echo "错误: 规则集文件下载失败,请到日志页面查看详细错误信息!" >$START_LOG - echo "${LOGTIME} Error: Faild to Download Rule-Provider File, Please Check The Error Info And Try Again" >> $LOG_FILE - fi - sleep 5 - start_fail -elif [ "$provider_path_check_num" -gt 5 ]; then - echo "警告: 代理集文件检查超时,如启动失败请到日志页面查看详细信息!" >$START_LOG - sleep 3 -fi - -} - -#获取自定义DNS设置 -yml_dns_get() -{ - - local section="$1" - local enabled port type ip group dns_type dns_address - config_get_bool "enabled" "$section" "enabled" "1" - config_get "port" "$section" "port" "" - config_get "type" "$section" "type" "" - config_get "ip" "$section" "ip" "" - config_get "group" "$section" "group" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$ip" ]; then - return - fi - - if [ "$type" = "tcp" ]; then - dns_type="- tcp://" - elif [ "$type" = "tls" ]; then - dns_type="- tls://" - elif [ "$type" = "udp" ]; then - dns_type="- " - elif [ "$type" = "https" ]; then - dns_type="- https://" - fi - - if [ -n "$port" ] && [ -n "$ip" ]; then - dns_address="$ip:$port" - elif [ -z "$port" ] && [ -n "$ip" ]; then - dns_address="$ip" - else - return - fi - - if [ -n "$group" ]; then - if [ "$group" = "nameserver" ]; then - if [ -z "$(grep "^ \{0,\}nameserver:$" /tmp/yaml_config.namedns.yaml 2>/dev/null)" ]; then - echo " nameserver:" >/tmp/yaml_config.namedns.yaml - fi - echo " $dns_type$dns_address" >>/tmp/yaml_config.namedns.yaml - else - if [ -z "$(grep "^ \{0,\}fallback:$" /tmp/yaml_config.falldns.yaml 2>/dev/null)" ]; then - echo " fallback:" >/tmp/yaml_config.falldns.yaml - fi - echo " $dns_type$dns_address" >>/tmp/yaml_config.falldns.yaml - fi - else - return - fi -} - -#添加自定义DNS设置 -yml_dns_custom() -{ - if [ "$1" = 1 ]; then - config_load "openclash" - config_foreach yml_dns_get "dns_servers" - if [ -f "/tmp/yaml_config.namedns.yaml" ]; then - if [ -z "$(ruby_read "$CONFIG_FILE" "['dns']")" ]; then - ruby_cover "$CONFIG_FILE" "['dns']" "/tmp/yaml_config.namedns.yaml" - ruby_merge "$CONFIG_FILE" "['dns']" "/tmp/yaml_config.falldns.yaml" - else - ruby_edit "$CONFIG_FILE" "['dns']['nameserver'].clear" - ruby_edit "$CONFIG_FILE" "['dns']['fallback'].clear" - ruby_merge "$CONFIG_FILE" "['dns']" "/tmp/yaml_config.namedns.yaml" - ruby_merge "$CONFIG_FILE" "['dns']" "/tmp/yaml_config.falldns.yaml" - fi - else - echo "错误: 配置文件DNS选项下的Nameserver必须设置服务器,已停止设置自定义DNS服务器!" >$START_LOG - echo "${LOGTIME} Error: Nameserver Option Must Be Setted, Stop Customing DNS Servers" >>$LOG_FILE - sleep 2 - fi - fi -} - -#获取认证信息 -yml_auth_get() -{ - local section="$1" - local enabled username password - config_get_bool "enabled" "$section" "enabled" "1" - config_get "username" "$section" "username" "" - config_get "password" "$section" "password" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$username" ] || [ -z "$password" ]; then - return - else - echo " - $username:$password" >>/tmp/config.auth - fi -} - -#添加认证信息 -yml_auth_custom() -{ - if [ -n "$(ruby_read "$1" "['authentication']")" ]; then - ruby_edit "$1" "['authentication'].clear" - fi - if [ -f /tmp/config.auth ]; then - sed -i '/^dns:/i\authentication:' "$1" 2>/dev/null - ruby_cover "$1" "['authentication']" "/tmp/config.auth" - rm -rf /tmp/config.auth 2>/dev/null - fi -} - -get_rule_file() -{ - if [ -z "$1" ]; then - return - fi - - GAME_RULE_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $3}' 2>/dev/null) - - if [ -z "$GAME_RULE_FILE_NAME" ]; then - GAME_RULE_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/game_rules.list |awk -F ',' '{print $2}' 2>/dev/null) - fi - - GAME_RULE_PATH="/etc/openclash/game_rules/$GAME_RULE_FILE_NAME" - - sed '/^#/d' "$GAME_RULE_PATH" 2>/dev/null |sed '/^ *$/d' |awk '{print "- IP-CIDR,"$0}' |awk -v tag="$2" '{print $0","'tag'""}' >> $GAME_RULE_FILE 2>/dev/null -} - -yml_game_rule_get() -{ - local section="$1" - local enabled group config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "group" "$section" "group" "" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$group" ]; then - return - fi - - config_list_foreach "$section" "rule_name" get_rule_file "$group" -} - -yml_rule_group_get() -{ - local section="$1" - local enabled group config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "group" "$section" "group" "" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$group" ] || [ "$group" = "DIRECT" ] || [ "$group" = "REJECT" ]; then - return - fi - - /usr/share/openclash/yml_groups_set.sh >/dev/null 2>&1 "$group" -} - -yml_game_custom() -{ -#处理游戏规则 -config_load "openclash" -config_foreach yml_game_rule_get "game_config" -[ -f "$GAME_RULE_FILE" ] && { -ruby -ryaml -E UTF-8 -e " -begin -Value = YAML.load_file('$CONFIG_FILE'); -Value_1 = YAML.load_file('$GAME_RULE_FILE'); -if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(GEOIP|MATCH|FINAL)/).first) - ruby_add_index ||= -1 - Value_2 = Value_1.reverse! - Value_2.each{|x| Value['rules'].insert(ruby_add_index,x)} - Value['rules']=Value['rules'].uniq; -else - Value['rules'] = Value_1 -end; -File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} -rescue Exception => e -puts '${LOGTIME} Game Rule Merge Error: ' + e.message -end -" 2>/dev/null >> $LOG_FILE -} - -#处理游戏节点与策略组 -config_load "openclash" -config_foreach yml_rule_group_get "rule_provider_config" -config_foreach yml_rule_group_get "game_config" -if [ -f "/tmp/yaml_groups.yaml" ] || [ -f "/tmp/yaml_servers.yaml" ] || [ -f "/tmp/yaml_provider.yaml" ]; then -ruby -ryaml -E UTF-8 -e " -begin -Value = YAML.load_file('$CONFIG_FILE'); -if File::exist?('/tmp/yaml_groups.yaml') then - Value_1 = YAML.load_file('/tmp/yaml_groups.yaml'); - if Value.has_key?('proxy-groups') and not Value['proxy-groups'].to_a.empty? then - Value['proxy-groups'] = Value['proxy-groups']+Value_1 - Value['proxy-groups'].uniq - else - Value['proxy-groups']=Value_1 - end -end; -if File::exist?('/tmp/yaml_servers.yaml') then - Value_2 = YAML.load_file('/tmp/yaml_servers.yaml'); - if Value.has_key?('proxies') and not Value['proxies'].to_a.empty? then - Value['proxies'] = Value['proxies']+Value_2['proxies'] - Value['proxies'].uniq - else - Value['proxies']=Value_2['proxies'] - end -end; -if File::exist?('/tmp/yaml_provider.yaml') then - Value_3 = YAML.load_file('/tmp/yaml_provider.yaml'); - if Value.has_key?('proxy-providers') and not Value['proxy-providers'].to_a.empty? then - Value['proxy-providers'].merge!(Value_3['proxy-providers']) - Value['proxy-providers'].uniq - else - Value['proxy-providers']=Value_3['proxy-providers'] - end -end; -File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} -rescue Exception => e -puts '${LOGTIME} Game Proxy Merge Error: ' + e.message -end" 2>/dev/null >> $LOG_FILE -fi -} - -yml_rule_set_add() -{ -ruby -ryaml -E UTF-8 -e " -begin -Value = YAML.load_file('$CONFIG_FILE'); -if Value.has_key?('rules') and not Value['rules'].to_a.empty? then - if $3 == 1 then - ruby_add_index = Value['rules'].index(Value['rules'].grep(/(GEOIP|MATCH|FINAL)/).first) - ruby_add_index ||= -1 - Value['rules'].insert(ruby_add_index,'RULE-SET,$1,$2') - else - Value['rules'].insert(0,'RULE-SET,$1,$2') - end -else - Value_1 = {'rules'=>['RULE-SET,$1,$2']} - Value.merge!(Value_1); -end; -File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} -rescue Exception => e -puts '${LOGTIME} Rule Set Add Error: ' + e.message -end -" 2>/dev/null >> $LOG_FILE -} - -yml_gen_rule_provider_file() -{ - if [ -z "$1" ]; then - return - fi - - RULE_PROVIDER_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $6}' 2>/dev/null) - if [ -z "$RULE_PROVIDER_FILE_NAME" ]; then - RULE_PROVIDER_FILE_NAME=$(grep "^$1," /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $5}' 2>/dev/null) - fi - RULE_PROVIDER_FILE_BEHAVIOR=$(grep ",$RULE_PROVIDER_FILE_NAME$" /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $3}' 2>/dev/null) - RULE_PROVIDER_FILE_PATH="/etc/openclash/rule_provider/$RULE_PROVIDER_FILE_NAME" - RULE_PROVIDER_FILE_URL_PATH="$(grep ",$RULE_PROVIDER_FILE_NAME$" /usr/share/openclash/res/rule_providers.list |awk -F ',' '{print $4$5}' 2>/dev/null)" - RULE_PROVIDER_FILE_URL="https://cdn.jsdelivr.net/gh/"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F '/master' '{print $1}' 2>/dev/null)"@master"$(echo "$RULE_PROVIDER_FILE_URL_PATH" |awk -F 'master' '{print $2}')"" - if [ -n "$(grep "$RULE_PROVIDER_FILE_URL" $RULE_PROVIDER_FILE 2>/dev/null)" ]; then - return - fi - -cat >> "$RULE_PROVIDER_FILE" <<-EOF - $1: - type: http - behavior: $RULE_PROVIDER_FILE_BEHAVIOR - path: $RULE_PROVIDER_FILE_PATH - url: $RULE_PROVIDER_FILE_URL -EOF - if [ -z "$3" ]; then -cat >> "$RULE_PROVIDER_FILE" <<-EOF - interval=86400 -EOF - else -cat >> "$RULE_PROVIDER_FILE" <<-EOF - interval: $3 -EOF - fi - yml_rule_set_add "$1" "$2" "$4" -} - -yml_get_rule_provider() -{ - local section="$1" - local enabled group config interval position - config_get_bool "enabled" "$section" "enabled" "1" - config_get "group" "$section" "group" "" - config_get "config" "$section" "config" "" - config_get "interval" "$section" "interval" "" - config_get "position" "$section" "position" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$group" ]; then - return - fi - - config_list_foreach "$section" "rule_name" yml_gen_rule_provider_file "$group" "$interval" "$position" -} - -#处理自定义规则集 -yml_set_custom_rule_provider() -{ - local section="$1" - local enabled name config type behavior path url interval group position - config_get_bool "enabled" "$section" "enabled" "1" - config_get "name" "$section" "name" "" - config_get "config" "$section" "config" "" - config_get "type" "$section" "type" "" - config_get "behavior" "$section" "behavior" "" - config_get "path" "$section" "path" "" - config_get "url" "$section" "url" "" - config_get "interval" "$section" "interval" "" - config_get "group" "$section" "group" "" - config_get "position" "$section" "position" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -n "$(grep "$url" "$RULE_PROVIDER_FILE" 2>/dev/null)" ] && [ -n "$url" ]; then - return - fi - - if [ -n "$config" ] && [ "$config" != "$CONFIG_NAME" ] && [ "$config" != "all" ]; then - return - fi - - if [ -z "$name" ] || [ -z "$type" ] || [ -z "$behavior" ]; then - return - fi - - if [ "$type" = "http" ] && [ -z "$url" ]; then - return - fi - - if [ "$path" != "./rule_provider/$name.yaml" ] && [ "$type" = "http" ]; then - path="./rule_provider/$name.yaml" - elif [ -z "$path" ]; then - return - fi - - if [ -n "$(grep "$path" "$RULE_PROVIDER_FILE" 2>/dev/null)" ]; then - return - fi - - if [ -z "$interval" ] && [ "$type" = "http" ]; then - interval=86400 - fi - -cat >> "$RULE_PROVIDER_FILE" <<-EOF - $name: - type: $type - behavior: $behavior - path: $path -EOF - if [ "$type" = "http" ]; then -cat >> "$RULE_PROVIDER_FILE" <<-EOF - url: $url - interval: $interval -EOF - fi - - yml_rule_set_add "$name" "$group" "$position" -} - -#处理规则集 -yml_custom_rule_provider() -{ - config_load "openclash" - config_foreach yml_get_rule_provider "rule_provider_config" - config_foreach yml_set_custom_rule_provider "rule_providers" - if [ -f "$RULE_PROVIDER_FILE" ]; then - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$CONFIG_FILE'); - Value_1 = YAML.load_file('$RULE_PROVIDER_FILE'); - if Value.has_key?('rule-providers') and not Value['rule-providers'].to_a.empty? then - Value['rule-providers'].merge!(Value_1) - else - Value['rule-providers']=Value_1 - end; - File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)} - rescue Exception => e - puts '${LOGTIME} Custom Rule Provider Merge Error: ' + e.message - end - " 2>/dev/null >> $LOG_FILE - fi -} - -#获取订阅配置 -sub_info_get() -{ - local section="$1" address enabled name - config_get_bool "enabled" "$section" "enabled" "1" - config_get "address" "$section" "address" "" - config_get "name" "$section" "name" "" - - if [ "$subscribe_enable" = "1" ]; then - return - fi - - if [ "$enabled" -eq 0 ]; then - return - fi - - if [ -z "$address" ]; then - return - fi - - if [ -z "$name" ]; then - CONFIG_NAME="config" - RAW_CONFIG_FILE="/etc/openclash/config/config.yaml" - CONFIG_FILE="/etc/openclash/config.yaml" - else - CONFIG_NAME="$name" - RAW_CONFIG_FILE="/etc/openclash/config/$name.yaml" - CONFIG_FILE="/etc/openclash/$name.yaml" - fi - - uci -q set openclash.config.config_path="$RAW_CONFIG_FILE" - uci -q commit openclash - subscribe_enable=1 -} - -#配置文件选择 -config_choose() -{ -if [ -z "$RAW_CONFIG_FILE" ] || [ ! -f "$RAW_CONFIG_FILE" ]; then - CONFIG_NAME=$(ls -lt /etc/openclash/config/ | grep -E '.yaml|.yml' | head -n 1 |awk '{print $9}') - if [ -n "$CONFIG_NAME" ]; then - uci -q set openclash.config.config_path="/etc/openclash/config/$CONFIG_NAME" - uci -q commit openclash - RAW_CONFIG_FILE="/etc/openclash/config/$CONFIG_NAME" - CONFIG_FILE="/etc/openclash/$CONFIG_NAME" - fi -fi 2>/dev/null -CONFIG_NAME=$(echo "$RAW_CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null) - -if [ ! -f "$RAW_CONFIG_FILE" ]; then - config_load "openclash" - config_foreach sub_info_get "config_subscribe" - subscribe_auto_update=$(uci get openclash.config.auto_update 2>/dev/null) - if [ "$subscribe_enable" = "1" ] && [ "$subscribe_auto_update" -eq 1 ]; then - echo "配置文件不存在,您已设置订阅信息,准备开始下载..." >$START_LOG - sleep 3 - nohup /usr/share/openclash/openclash.sh & - del_lock - exit 0 - else - echo "错误: 缺少配置文件,请上传或更新配置文件!" >$START_LOG - echo "${LOGTIME} Error: Config Not Found" >> $LOG_FILE - sleep 5 - del_lock - exit 0 - fi -fi - -#创建启动配置 -#rm -rf "/etc/openclash/*.y*" 2>/dev/null -cp "$RAW_CONFIG_FILE" "$CONFIG_FILE" -ruby -ryaml -E UTF-8 -e " -begin -YAML.load_file('$RAW_CONFIG_FILE'); -rescue Exception => e -puts '${LOGTIME} Error: Unable To Parse Config File ' + e.message -system 'rm -rf ${CONFIG_FILE}' -end -" 2>/dev/null >> $LOG_FILE -if [ $? -ne 0 ]; then - echo "${LOGTIME} Error: Ruby Works Abnormally, Please Check The Ruby Library Depends And Try Again!" >> $LOG_FILE - echo "Ruby依赖异常,请确认ruby依赖工作正常后重试!" > $START_LOG - sleep 3 - start_fail -elif [ ! -f "$CONFIG_FILE" ] || [ ! -s "$CONFIG_FILE" ]; then - echo "配置文件校验失败,请检查配置文件后重试!" > $START_LOG - sleep 3 - start_fail -fi -} - -yml_other_rules_get() -{ - local section="$1" - local enabled config - config_get_bool "enabled" "$section" "enabled" "1" - config_get "config" "$section" "config" "" - - if [ "$enabled" = "0" ] || [ "$config" != "$2" ]; then - return - fi - - if [ -n "$rule_name" ]; then - return - fi - - config_get "rule_name" "$section" "rule_name" "" -} - -#运行模式处理 -do_run_mode() -{ - en_mode=$(uci -q get openclash.config.en_mode) - - if [ "$en_mode" = "fake-ip-tun" ]; then - en_mode_tun="1" - en_mode="fake-ip" - fi - - if [ "$en_mode" = "redir-host-tun" ]; then - en_mode_tun="1" - en_mode="redir-host" - fi - - if [ "$en_mode" = "redir-host-mix" ]; then - en_mode_tun="3" - en_mode="redir-host" - fi - - if [ "$en_mode" = "redir-host-vpn" ]; then - en_mode_tun="2" - en_mode="redir-host" - fi - - if [ "$en_mode" = "fake-ip-vpn" ]; then - en_mode_tun="2" - en_mode="fake-ip" - fi - - if [ "$en_mode" = "fake-ip-mix" ]; then - en_mode_tun="3" - en_mode="fake-ip" - fi -} - -do_run_file() -{ - - if [ "$small_flash_memory" != "1" ]; then - dev_core_path="/etc/openclash/core/clash" - tun_core_path="/etc/openclash/core/clash_tun" - game_core_path="/etc/openclash/core/clash_game" - geoip_path="/etc/openclash/Country.mmdb" - chnr_path="/etc/openclash/china_ip_route.ipset" - rm -rf "/tmp/etc/openclash" - else - dev_core_path="/tmp/etc/openclash/core/clash" - tun_core_path="/tmp/etc/openclash/core/clash_tun" - game_core_path="/tmp/etc/openclash/core/clash_game" - geoip_path="/tmp/etc/openclash/Country.mmdb" - chnr_path="/tmp/etc/openclash/china_ip_route.ipset" - rm -rf "/etc/openclash/Country.mmdb" - rm -rf "/etc/openclash/china_ip_route.ipset" - rm -rf "/etc/openclash/core" - fi - - rm -rf "/etc/openclash/clash" 2>/dev/null - - if [ "$en_mode_tun" = "1" ] || [ "$en_mode_tun" = "3" ]; then - ln -s "$tun_core_path" /etc/openclash/clash 2>/dev/null - core_type="Tun" - core_start_log="检测到配置了【Tun】内核专属功能,调用【Tun】内核启动..." - fi - - if [ "$en_mode_tun" = "2" ]; then - ln -s "$game_core_path" /etc/openclash/clash 2>/dev/null - core_type="Game" - core_start_log="检测到配置了【Game】内核专属功能,调用【Game】内核启动..." - fi - - if [ "$rule_source" != "0" ]; then - config_load "openclash" - config_foreach yml_other_rules_get "other_rules" "$CONFIG_NAME" - fi - - if [ "$proxy_mode" = "script" ] || [ "$rule_name" = "ConnersHua" ] || [ "$rule_name" = "lhie1" ] || [ -n "$(ruby_read "$CONFIG_FILE" "['rules'].grep(/^RULE-SET,/)")" ]; then - if [ "$en_mode_tun" != "2" ]; then - rm -rf "/etc/openclash/clash" - ln -s "$tun_core_path" /etc/openclash/clash 2>/dev/null - core_type="Tun" - core_start_log="检测到配置了【Tun】内核专属功能,调用【Tun】内核启动..." - fi - fi - - if [ ! -f "/etc/openclash/clash" ] && [ -f "$dev_core_path" ] && [ -z "$core_type" ]; then - ln -s "$dev_core_path" /etc/openclash/clash 2>/dev/null - core_start_log="未检测到特殊配置,调用【Dev】内核启动..." - fi - - if [ ! -f "/etc/openclash/clash" ] && [ -f "$tun_core_path" ] && [ "$core_type" != "Game" ]; then - ln -s "$tun_core_path" /etc/openclash/clash 2>/dev/null - core_type="Tun" - core_start_log="检测到【Dev】内核未安装,调用【Tun】内核启动..." - fi - - if [ ! -f "/etc/openclash/clash" ] && [ -f "$game_core_path" ] && [ "$core_type" != "Tun" ]; then - ln -s "$game_core_path" /etc/openclash/clash 2>/dev/null - core_type="Game" - core_start_log="检测到【Dev】内核未安装,调用【Game】内核启动..." - fi - -#权限检查 - [ ! -x "$tun_core_path" ] && chmod 4755 "$tun_core_path" 2>/dev/null - [ ! -x "$game_core_path" ] && chmod 4755 "$game_core_path" 2>/dev/null - [ ! -x "$dev_core_path" ] && chmod 4755 "$dev_core_path" 2>/dev/null - -#文件检查 - [ -f "$geoip_path" ] && [ "$small_flash_memory" = "1" ] && { - ln -s "$geoip_path" /etc/openclash/Country.mmdb 2>/dev/null - } - - [ -f "$chnr_path" ] && [ "$small_flash_memory" = "1" ] && { - ln -s "$chnr_path" /etc/openclash/china_ip_route.ipset 2>/dev/null - } - - [ ! -f "$geoip_path" ] && { - echo "检测到GEOIP数据库文件不存在,准备开始下载..." >$START_LOG - nofile=1 - nohup /usr/share/openclash/openclash_ipdb.sh & - } - - [ ! -f "$CLASH" ] && { - echo "检测到内核文件不存在,准备开始下载..." >$START_LOG - nofile=1 - rm -rf "/tmp/clash_last_version" - nohup /usr/share/openclash/openclash_core.sh "$core_type" & - } - - if [ "$china_ip_route" = "1" ] && [ ! -f "$chnr_path" ]; then - echo "检测到大陆白名单列表不存在,准备开始下载..." >$START_LOG - nofile=1 - nohup /usr/share/openclash/openclash_chnroute.sh & - fi - - if [ "$nofile" = "1" ]; then - del_lock - exit 0 - fi - - if ! capsh --is-uid=0 >/dev/null || ! capsh --has-ambient >/dev/null; then - echo "错误:Capsh异常,请尝试重新安装依赖【libcap】和相应的Capsh库,终止启动..." >$START_LOG - echo "${LOGTIME} Error: Could Not Load The Capsh Library, Please Verify The Capsh Shell Library Work Well" >> $LOG_FILE - echo "${LOGTIME} Tip: You Could Download And Re-Install The libcap & libcap-bin Library From The Address Below:" >> $LOG_FILE - echo "" >> $LOG_FILE - echo "---------- https://mirrors.cloud.tencent.com/lede/snapshots/packages/ ----------" >> $LOG_FILE - echo "" >> $LOG_FILE - sleep 5 - start_fail - fi - - #创建原始备份 - if [ ! -f "$2" ]; then - cp "$1" "$2" - fi - -} - -#绑定interface防止回环 -check_interface_name() -{ - if [ -n "$interface_name" ] && [ "$interface_name" != "0" ]; then - ruby_edit "$CONFIG_FILE" "['interface-name']='$interface_name'" - else - sed -i "/^interface-name:/d" "$CONFIG_FILE" 2>/dev/null - fi -} - -start_run_core() -{ - echo "$core_start_log" >$START_LOG - sleep 2 - ulimit -SHn 65535 2>/dev/null - ulimit -v unlimited 2>/dev/null - modprobe tun >/dev/null 2>&1 - check_interface_name - config_reload=$(uci get openclash.config.config_reload 2>/dev/null) - if [ -n "$(pidof clash)" ] && [ "$core_type" != "Tun" ] && [ "$config_reload" != "0" ]; then - curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null - else - kill_clash - #防止赋权失败 - touch /tmp/openclash.log 2>/dev/null - chmod o+w /etc/openclash/proxy_provider/* 2>/dev/null - chmod o+w /etc/openclash/rule_provider/* 2>/dev/null - chmod o+w /tmp/openclash.log 2>/dev/null - chown nobody:nogroup /etc/openclash/core/* 2>/dev/null - #使用nobody启动内核方便代理路由自身流量 - capabilties="cap_sys_resource,cap_dac_override,cap_net_raw,cap_net_bind_service,cap_net_admin" - capsh --caps="${capabilties}+eip" -- -c "capsh --user=nobody --addamb='${capabilties}' -- -c 'nohup $CLASH -d $CLASH_CONFIG -f \"$CONFIG_FILE\" >> $LOG_FILE 2>&1 &'" >> $LOG_FILE 2>&1 - fi - uci -q set openclash.config.config_reload=1 - uci -q commit openclash -} - -check_core_status() -{ - check_time=1 - while ( [ "$check_time" -le 3 ] && [ -n "$(pidof clash)" ] ) - do - sleep 1 - let check_time++ - done -} - -#不修改配置文件启动 -raw_config_start() -{ - cp "$RAW_CONFIG_FILE" "$CONFIG_FILE" - dns_port=$(ruby_read "$CONFIG_FILE" "['dns']['listen'].split(':')[1]") - en_mode=$(ruby_read "$CONFIG_FILE" "['dns']['enhanced-mode']") - proxy_port=$(ruby_read "$CONFIG_FILE" "['redir-port']") - - if [ -z "$dns_port" ] || [ -z "$en_mode" ] || [ -z "$proxy_port" ]; then - if [ -z "$dns_port" ]; then - echo "错误: 无法获取DNS部分的监听端口设置, OpenClash 使用原始配置文件启动失败" >$START_LOG - echo "${LOGTIME} Error: Get DNS 'listen' Option Error, OpenClash Can Not Start With Raw Config File" >> $LOG_FILE - sleep 3 - fi - if [ -z "$en_mode" ]; then - echo "错误: 无法获取DNS部分的运行模式设置, OpenClash 使用原始配置文件启动失败" >$START_LOG - echo "${LOGTIME} Error: Get DNS 'enhanced-mode' Option Error, OpenClash Can Not Start With Raw Config File" >> $LOG_FILE - sleep 3 - fi - if [ -z "$proxy_port" ]; then - echo "错误: 无法获取General部分的转发端口设置, OpenClash 使用原始配置文件启动失败" >$START_LOG - echo "${LOGTIME} Error: Get General 'redir-port' Option Error, OpenClash Can Not Start With Raw Config File" >> $LOG_FILE - sleep 3 - fi - start_fail - fi - - start_run_core - check_core_status - - if ! pidof clash >/dev/null; then - echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG - echo "${LOGTIME} Error: OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE - sleep 5 - start_fail - fi - - if [ "$en_mode" = "redir-host" ]; then - case $en_mode_tun in - "1") - uci -q set openclash.config.en_mode=redir-host-tun - ;; - "2") - uci -q set openclash.config.en_mode=redir-host-vpn - ;; - "3") - uci -q set openclash.config.en_mode=redir-host-mix - ;; - *) - uci -q set openclash.config.en_mode=redir-host - esac - elif [ "$en_mode" = "fake-ip" ]; then - case $en_mode_tun in - "1") - uci -q set openclash.config.en_mode=fake-ip-tun - ;; - "2") - uci -q set openclash.config.en_mode=fake-ip-vpn - ;; - "3") - uci -q set openclash.config.en_mode=fake-ip-mix - ;; - *) - uci -q set openclash.config.en_mode=fake-ip - esac - fi - - dase=$(ruby_read "$CONFIG_FILE" "['secret']") - uci -q set openclash.config.dashboard_password="$dase" - - cn_port=$(ruby_read "$CONFIG_FILE" "['external-controller'].split(':')[1]") - uci -q set openclash.config.cn_port="$cn_port" - - uci -q set openclash.config.proxy_port="$proxy_port" - uci -q set openclash.config.restricted_mode=1 - - uci commit openclash -} - -try_restore_start() -{ - if [ -z "$(pidof clash)" ]; then - if [ "$rule_source" = 0 ] && [ "$enable_custom_clash_rules" = 0 ]; then - echo "错误: OpenClash 启动失败,尝试使用原始配置文件启动..." >$START_LOG - echo "${LOGTIME} Error: OpenClash Can Not Start, Try Use Raw Config Restart Again" >> $LOG_FILE - sleep 3 - raw_config_start - else - echo "错误: OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序..." >$START_LOG - echo "${LOGTIME} Error: OpenClash Can Not Start, Try Use Backup Rules Start Again" >> $LOG_FILE - ruby -ryaml -E UTF-8 -e " - begin - Value = YAML.load_file('$RAW_CONFIG_FILE'); - Value_1 = YAML.load_file('$CONFIG_FILE'); - if Value.has_key?('rule-providers') then - Value_1['rule-providers'] = Value.select {|x| 'rule-providers' == x}['rule-providers'] - end; - if Value.has_key?('script') then - Value_1['script'] = Value.select {|x| 'script' == x}['script'] - end; - if Value.has_key?('rules') then - Value_1['rules'] = Value.select {|x| 'rules' == x}['rules'] - end; - File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value_1, f)} - rescue Exception => e - puts '${LOGTIME} Restore Backup Rules Error: ' + e.message - end - " 2>/dev/null >> $LOG_FILE - start_run_core - check_core_status - if ! pidof clash >/dev/null; then - echo "错误: OpenClash 启动失败,尝试使用原始配置文件启动..." >$START_LOG - echo "${LOGTIME} Error: OpenClash Can Not Start, Try Use Raw Config Restart Again" >> $LOG_FILE - sleep 3 - raw_config_start - fi - fi - fi -} - -#防火墙设置部分 -ac_add() -{ - if [ -z "$1" ]; then - return - fi - - ipset add "$2" "$1" 2>/dev/null -} - -firewall_rule_exclude() -{ - local section="$1" - local name src src_port dest dest_port proto target enabled - - config_get "name" "$section" "name" "" - config_get "src" "$section" "src" "" - config_get "src_port" "$section" "src_port" "" - config_get "dest" "$section" "dest" "" - config_get "dest_port" "$section" "dest_port" "" - config_get "proto" "$section" "proto" "" - config_get "target" "$section" "target" "" - config_get "enabled" "$section" "enabled" "" - - if [ a"$target" != aACCEPT ] || [ a"$enabled" == a0 ]; then - return - fi - - local e_udp=false - local e_tcp=false - for p in $proto; do - if [ $p == tcp ]; then e_tcp=true; fi - if [ $p == udp ]; then e_udp=true; fi - done - - if ! $e_udp && ! $e_tcp ; then - return - fi - - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then - if $e_tcp ; then - iptables -t nat -I openclash_output -p tcp --sport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp --sport "$dest_port" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp --dport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - elif [ "$en_mode_tun" -ne 3 ]; then - if $e_tcp ; then - iptables -t mangle -I openclash_output -p tcp --sport "$dest_port" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p tcp --dport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - if $e_udp ; then - iptables -t mangle -I openclash_output -p udp --sport "$dest_port" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp --dport "$dest_port" -j RETURN >/dev/null 2>&1 - fi - fi -} - -firewall_redirect_exclude() -{ - local section="$1" - local src_dport - config_get "src_dport" "$section" "src_dport" "" - - if [ -z "$src_dport" ]; then - return - fi - - if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then - iptables -t nat -I openclash_output -p tcp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash_output -p udp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - elif [ "$en_mode_tun" -ne 3 ]; then - iptables -t mangle -I openclash_output -p tcp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash_output -p udp --sport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p tcp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - iptables -t mangle -I openclash -p udp --dport "$src_dport" -j RETURN >/dev/null 2>&1 - fi - -} - -set_firewall() -{ - -DNSPORT="$(uci get dhcp.@dnsmasq[0].port 2>/dev/null || echo 53)" -if [ "$enable_redirect_dns" -eq 1 ] && [ -z "$(iptables -t nat -nL PREROUTING --line-number |grep 'dns_hijack')"]; then - iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment dns_hijack - iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports "$DNSPORT" -m comment --comment dns_hijack -fi - -if [ "$(iptables -t nat -nL PREROUTING --line-number | grep "redir port $DNSPORT" | wc -l)" -gt 2 ] && [ "$enable_redirect_dns" -eq 1 ]; then - echo "发现53端口被劫持,清理防火墙规则..." >$START_LOG - pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d | sed -n "/redir port $DNSPORT/=" 2>/dev/null |sort -rn) - for pre_line in $pre_lines; do - iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1 - done -fi - -if [ -z "$(uci -q get firewall.openclash)" ] || [ -z "$(uci -q get ucitrack.@openclash[-1].init)" ]; then - uci -q delete ucitrack.@openclash[-1] - uci -q add ucitrack openclash - uci -q set ucitrack.@openclash[-1].init=openclash - uci -q commit ucitrack - uci -q delete firewall.openclash - uci -q set firewall.openclash=include - uci -q set firewall.openclash.type=script - uci -q set firewall.openclash.path=/var/etc/openclash.include - uci -q set firewall.openclash.reload=1 -fi - -if [ "$(uci -q get firewall.@defaults[0].forward)" != "ACCEPT" ]; then - uci -q set firewall.@defaults[0].forward=ACCEPT - uci -q commit firewall - /etc/init.d/firewall reload >/dev/null 2>&1 -fi - -mkdir -p /var/etc -cat > "/var/etc/openclash.include" <<-EOF -/etc/init.d/openclash reload >/dev/null 2>&1 -EOF - -if [ "$china_ip_route" = "1" ] && [ -f "/etc/openclash/china_ip_route.ipset" ]; then - ipset -! flush china_ip_route 2>/dev/null - ipset -! restore /dev/null -fi - -#lan_ac -if [ "$operation_mode" = "redir-host" ] && [ "$en_mode" = "redir-host" ]; then - if [ "$lan_ac_mode" = "0" ]; then - if [ -n "$(uci -q get openclash.config.lan_ac_black_ips)" ]; then - ipset create lan_ac_black_ips hash:net - config_load "openclash" - config_list_foreach "config" "lan_ac_black_ips" ac_add "lan_ac_black_ips" - fi - if [ -n "$(uci -q get openclash.config.lan_ac_black_macs)" ]; then - ipset create lan_ac_black_macs hash:mac - config_load "openclash" - config_list_foreach "config" "lan_ac_black_macs" ac_add "lan_ac_black_macs" - fi - elif [ "$lan_ac_mode" = "1" ]; then - if [ -n "$(uci -q get openclash.config.lan_ac_white_ips)" ]; then - ipset create lan_ac_white_ips hash:net - config_load "openclash" - config_list_foreach "config" "lan_ac_white_ips" ac_add "lan_ac_white_ips" - fi - if [ -n "$(uci -q get openclash.config.lan_ac_white_macs)" ]; then - ipset create lan_ac_white_macs hash:mac - config_load "openclash" - config_list_foreach "config" "lan_ac_white_macs" ac_add "lan_ac_white_macs" - fi - fi -fi - -#wan ac -if [ -n "$(uci -q get openclash.config.wan_ac_black_ips)" ]; then - ipset create wan_ac_black_ips hash:net - config_load "openclash" - config_list_foreach "config" "wan_ac_black_ips" ac_add "wan_ac_black_ips" -fi - -#local - ipset create localnetwork hash:net - ipset add localnetwork 0.0.0.0/8 - ipset add localnetwork 127.0.0.0/8 - ipset add localnetwork 10.0.0.0/8 - ipset add localnetwork 169.254.0.0/16 - ipset add localnetwork 192.168.0.0/16 - ipset add localnetwork 224.0.0.0/4 - ipset add localnetwork 240.0.0.0/4 - ipset add localnetwork 172.16.0.0/12 - - if [ -n "$wan_ip4" ]; then - for wan_ip4s in $wan_ip4; do - ipset add localnetwork "$wan_ip4s" 2>/dev/null - done - fi - -#common ports -if [ "$common_ports" = "1" ]; then - common_port="21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889" - ipset create common_ports bitmap:port range 0-65535 - for i in $common_port; do - ipset add common_ports $i - done -fi - -if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then - #tcp - iptables -t nat -N openclash - iptables -t nat -F openclash - iptables -t nat -A openclash -m set --match-set localnetwork dst -j RETURN - iptables -t nat -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - iptables -t nat -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" - iptables -t nat -A PREROUTING -p tcp -j openclash - if [ -z "$en_mode_tun" ]; then - #Google dns - iptables -t nat -I PREROUTING -p tcp -d 8.8.8.8 --dport 53 -j REDIRECT --to-ports "$proxy_port" - iptables -t nat -I PREROUTING -p tcp -d 8.8.4.4 --dport 53 -j REDIRECT --to-ports "$proxy_port" - #udp - if [ "$enable_udp_proxy" -eq 1 ]; then - modprobe xt_TPROXY >/dev/null 2>&1 - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" - ip route add local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" - iptables -t mangle -N openclash - iptables -t mangle -F openclash - iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN - iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - iptables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK" - iptables -t mangle -A PREROUTING -p udp -j openclash - fi - fi - - iptables -t nat -N openclash_output - iptables -t nat -F openclash_output - iptables -t nat -A openclash_output -m set --match-set localnetwork dst -j RETURN - if [ "$en_mode" = "fake-ip" ]; then - if [ "$intranet_allowed" -eq 1 ]; then - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -d 198.18.0.0/16 -j DNAT --to-destination "$lan_ip:$proxy_port" - else - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port" - fi - fi - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t nat -A openclash_output -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - if [ "$intranet_allowed" -eq 1 ]; then - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j DNAT --to-destination "$lan_ip:$proxy_port" - else - iptables -t nat -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j REDIRECT --to-ports "$proxy_port" - fi - iptables -t nat -I OUTPUT -j openclash_output - - #if [ "$ipv6_enable" -eq 1 ]; then - # #tcp - # ip6tables -t nat -N openclash - # if [ -n "$lan_ip6" ]; then - # for lan_ip6s in $lan_ip6; do - # ip6tables -t nat -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null - # done - # fi - # ip6tables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" - # ip6tables -t nat -A PREROUTING -p tcp -j openclash - - #udp - #if [ "$enable_udp_proxy" -eq 1 ]; then - # ip6tables -t mangle -N openclash - # if [ -n "$lan_ip6" ]; then - # for lan_ip6s in $lan_ip6; do - # if [ "$enable_udp_proxy" -eq 1 ]; then - # ip6tables -t mangle -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null - # fi - # done - # fi - # ip6tables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK" - # ip6tables -t mangle -A PREROUTING -p udp -j openclash - #fi - #fi 2>/dev/null -fi -if [ -n "$en_mode_tun" ]; then - #TUN模式 - #启动TUN - if [ "$en_mode_tun" -eq 2 ]; then - ip tuntap add user root mode tun clash0 - ip link set clash0 up - ip route replace default dev clash0 table "$PROXY_ROUTE_TABLE" - elif [ "$en_mode_tun" -eq 1 ] || [ "$en_mode_tun" -eq 3 ]; then - TUN_WAIT=0 - while ( [ -n "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] ) - do - let TUN_WAIT++ - sleep 2 - done - ip route replace default dev utun table "$PROXY_ROUTE_TABLE" - fi - ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" - - #设置防火墙 - if [ "$en_mode" = "fake-ip" ]; then - iptables -t mangle -N openclash_output - iptables -t mangle -F openclash_output - iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN - if [ "$en_mode_tun" -ne 3 ]; then - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK" - else - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK" - fi - iptables -t mangle -I OUTPUT -j openclash_output - elif [ "$en_mode" = "redir-host" ] && [ "$en_mode_tun" -ne 3 ]; then - iptables -t mangle -N openclash_output - iptables -t mangle -F openclash_output - iptables -t mangle -A openclash_output -m set --match-set localnetwork dst -j RETURN - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash_output -m owner ! --uid-owner 65534 -p tcp -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -I OUTPUT -j openclash_output - fi - - iptables -t mangle -N openclash - iptables -t mangle -F openclash - iptables -t mangle -N openclash_dns_hijack - iptables -t mangle -F openclash_dns_hijack - #其他流量 - iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set wan_ac_black_ips dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set lan_ac_black_macs src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 - if [ "$en_mode" = "redir-host" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 - fi - iptables -t mangle -A openclash -j MARK --set-mark "$PROXY_FWMARK" - - if [ "$en_mode_tun" -ne 3 ]; then - iptables -t mangle -I PREROUTING -j openclash - iptables -t nat -I PREROUTING -p tcp --dport 53 -j ACCEPT - else - iptables -t mangle -I PREROUTING -p tcp --dport 53 -j openclash_dns_hijack - iptables -t mangle -A openclash_dns_hijack -d 8.8.8.8 -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -A openclash_dns_hijack -d 8.8.4.4 -j MARK --set-mark "$PROXY_FWMARK" - iptables -t mangle -I PREROUTING -p udp -j openclash - iptables -t nat -I PREROUTING -p tcp --dport 53 -d 8.8.8.8 -j ACCEPT - iptables -t nat -I PREROUTING -p tcp --dport 53 -d 8.8.4.4 -j ACCEPT - fi - - #ipv6 - # if [ "$ipv6_enable" -eq 1 ]; then - # ip6tables -t mangle -I PREROUTING -j MARK --set-mark "$PROXY_FWMARK" - # fi - - #snat routerself for tun while bindaddress enable - if [ "$en_mode_tun" -ne 3 ] && [ "$intranet_allowed" -eq 1 ]; then - iptables -t nat -N openclash_post - iptables -t nat -F openclash_post - iptables -t nat -A openclash_post -m owner ! --uid-owner 65534 -i lo -d 127.0.0.1 -j SNAT --to-source "$lan_ip" - iptables -t nat -A POSTROUTING -j openclash_post - fi -fi - -#端口转发 -config_load "firewall" -config_foreach firewall_redirect_exclude "redirect" -config_foreach firewall_rule_exclude "rule" -} - -revert_firewall() -{ - rm -rf /var/etc/openclash.include - - #ipv4 - - ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip route del local 0.0.0.0/0 dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - - iptables -t nat -D PREROUTING -p tcp --dport 53 -j ACCEPT >/dev/null 2>&1 - - out_lines=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn) - for out_line in $out_lines; do - iptables -t nat -D OUTPUT "$out_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - iptables -t nat -D OUTPUT -j openclash_output >/dev/null 2>&1 - - out_lines=$(iptables -nvL OUTPUT -t mangle |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn) - for out_line in $out_lines; do - iptables -t mangle -D OUTPUT "$out_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - iptables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1 - - pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/8\.8\./=' 2>/dev/null |sort -rn) - for pre_line in $pre_lines; do - iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - - pre_lines=$(iptables -nvL PREROUTING -t mangle |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn) - for pre_line in $pre_lines; do - iptables -t mangle -D PREROUTING "$pre_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - - pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/openclash/=' 2>/dev/null |sort -rn) - for pre_line in $pre_lines; do - iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - iptables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1 - - pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/dns_hijack/=' 2>/dev/null |sort -rn) - for pre_line in $pre_lines; do - iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1 - done >/dev/null 2>&1 - - #ipv6 - #ip6tables -t mangle -F openclash >/dev/null 2>&1 - #ip6tables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1 - #ip6tables -t mangle -X openclash >/dev/null 2>&1 - - iptables -t nat -F openclash >/dev/null 2>&1 - iptables -t nat -X openclash >/dev/null 2>&1 - - iptables -t nat -F openclash_output >/dev/null 2>&1 - iptables -t nat -X openclash_output >/dev/null 2>&1 - - iptables -t nat -F openclash_post >/dev/null 2>&1 - iptables -t nat -X openclash_post >/dev/null 2>&1 - iptables -t nat -D POSTROUTING -j openclash_post >/dev/null 2>&1 - - ip6tables -t nat -F openclash >/dev/null 2>&1 - ip6tables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1 - ip6tables -t nat -X openclash >/dev/null 2>&1 - - #TUN - ip route del default dev clash0 table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip route del default dev utun table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1 - ip link set dev clash0 down >/dev/null 2>&1 - ip tuntap del clash0 mode tun >/dev/null 2>&1 - - iptables -t mangle -D OUTPUT -j openclash_output >/dev/null 2>&1 - iptables -t mangle -D PREROUTING -j openclash >/dev/null 2>&1 - iptables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1 - iptables -t mangle -D PREROUTING -p tcp --dport 53 -j openclash_dns_hijack >/dev/null 2>&1 - iptables -t mangle -F openclash >/dev/null 2>&1 - iptables -t mangle -X openclash >/dev/null 2>&1 - iptables -t mangle -F openclash_dns_hijack >/dev/null 2>&1 - iptables -t mangle -X openclash_dns_hijack >/dev/null 2>&1 - iptables -t mangle -F openclash_output >/dev/null 2>&1 - iptables -t mangle -X openclash_output >/dev/null 2>&1 - - #ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1 - - ipset destroy localnetwork >/dev/null 2>&1 - ipset destroy china_ip_route >/dev/null 2>&1 - ipset destroy lan_ac_white_ips >/dev/null 2>&1 - ipset destroy lan_ac_black_ips >/dev/null 2>&1 - ipset destroy lan_ac_white_macs >/dev/null 2>&1 - ipset destroy lan_ac_black_macs >/dev/null 2>&1 - ipset destroy wan_ac_black_ips >/dev/null 2>&1 - ipset destroy common_ports >/dev/null 2>&1 -} - -get_config() -{ - rule_source=$(uci -q get openclash.config.rule_source) - enable_custom_dns=$(uci -q get openclash.config.enable_custom_dns) - enable_custom_clash_rules=$(uci -q get openclash.config.enable_custom_clash_rules) - da_password=$(uci -q get openclash.config.dashboard_password) - cn_port=$(uci -q get openclash.config.cn_port) - proxy_port=$(uci -q get openclash.config.proxy_port) - proxy_mode=$(uci -q get openclash.config.proxy_mode) - ipv6_enable=$(uci -q get openclash.config.ipv6_enable) - http_port=$(uci -q get openclash.config.http_port) - socks_port=$(uci -q get openclash.config.socks_port) - enable_redirect_dns=$(uci -q get openclash.config.enable_redirect_dns) - lan_ip=$(uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null) - wan_ip4=$(ifconfig | grep 'inet addr' | awk '{print $2}' | cut -d: -f2 2>/dev/null) - lan_ip6=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null) - disable_masq_cache=$(uci -q get openclash.config.disable_masq_cache) - log_level=$(uci -q get openclash.config.log_level) - intranet_allowed=$(uci -q get openclash.config.intranet_allowed) - enable_udp_proxy=$(uci -q get openclash.config.enable_udp_proxy) - operation_mode=$(uci -q get openclash.config.operation_mode) - lan_ac_mode=$(uci -q get openclash.config.lan_ac_mode) - enable_rule_proxy=$(uci -q get openclash.config.enable_rule_proxy) - stack_type=$(uci -q get openclash.config.stack_type) - china_ip_route=$(uci -q get openclash.config.china_ip_route) - small_flash_memory=$(uci -q get openclash.config.small_flash_memory) - mixed_port=$(uci -q get openclash.config.mixed_port) - interface_name=$(uci -q get openclash.config.interface_name) - common_ports=$(uci -q get openclash.config.common_ports) - dns_port=$(uci -q get openclash.config.dns_port) - [ -z "$dns_port" ] && dns_port=7874 && uci -q set openclash.config.dns_port=7874 - uci -q set openclash.config.restricted_mode=0 && uci -q commit openclash -} - -start() -{ - - enable=$(uci -q get openclash.config.enable) - [ "$enable" != "1" ] && echo "${LOGTIME} Warning: OpenClash Now Disabled, Need Start From Luci Page, Exit..." >> $LOG_FILE && del_lock && exit 0 - - config_choose - - echo "OpenClash 开始启动..." >$START_LOG - do_run_mode - - echo "第一步: 获取配置..." >$START_LOG - get_config - - echo "第二步: 组件运行前检查..." >$START_LOG - #检查文件是否存在 - do_run_file "$CONFIG_FILE" "$BACKUP_FILE" - - echo "第三步: 修改配置文件..." >$START_LOG - config_load "openclash" - config_foreach yml_auth_get "authentication" - yml_auth_custom "$CONFIG_FILE" - yml_dns_custom "$enable_custom_dns" "$CONFIG_FILE" - /usr/share/openclash/yml_change.sh 2>/dev/null "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CONFIG_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" "$log_level" "$proxy_mode" "$intranet_allowed" "$en_mode_tun" "$stack_type" "$dns_port" "$core_type" "$mixed_port" - /usr/share/openclash/yml_rules_change.sh 2>/dev/null "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$CONFIG_FILE" "$enable_rule_proxy" "$CONFIG_NAME" - yml_custom_rule_provider - yml_game_custom - yml_provider_path "$CONFIG_FILE" "proxy-providers" "proxy_provider" - yml_provider_path "$CONFIG_FILE" "rule-providers" "rule_provider" - yml_dns_check "$CONFIG_FILE" "$FALLBACK_FILTER_FILE" - - echo "第四步: 启动主程序..." >$START_LOG - start_run_core - - echo "第五步: 检查内核启动状态..." >$START_LOG - check_core_status - - #检测proxy_provider配置文件状态 - echo "第六步: 等待主程序下载外部文件..." >$START_LOG - yml_provider_check "$CONFIG_FILE" "proxy-providers" "proxies" - yml_provider_check "$CONFIG_FILE" "rule-providers" "payload" - try_restore_start - - echo "第七步: 设置控制面板..." >$START_LOG - ln -s /usr/share/openclash/yacd /www/luci-static/openclash 2>/dev/null - - echo "第八步: 设置防火墙规则..." >$START_LOG - set_firewall - - echo "第九步: 重启 Dnsmasq 程序..." >$START_LOG - change_dns "$enable_redirect_dns" "$disable_masq_cache" - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - - echo "第十步: 还原策略组节点状态..." >$START_LOG - /usr/share/openclash/openclash_history_set.sh - - echo "第十一步: 添加计划任务,启动进程守护程序..." >$START_LOG - add_cron - if [ -z "$(uci -q get dhcp.lan.dhcpv6)" ] && [ "$(uci -q get openclash.config.restricted_mode)" != "1" ]; then - echo "OpenClash 启动成功,请等待服务器上线!" >$START_LOG - echo "${LOGTIME} OpenClash Start Successful" >> $LOG_FILE - sleep 5 - elif [ -n "$(uci -q get dhcp.lan.dhcpv6)" ]; then - echo "OpenClash 启动成功,检测到您启用了IPV6的DHCP服务,可能会造成连接异常!" >$START_LOG - echo "${LOGTIME} Warning: OpenClash Start Successful, Please Note That Network May Abnormal With IPV6's DHCP Server" >> $LOG_FILE - sleep 5 - fi - if [ "$(uci -q get openclash.config.restricted_mode)" = "1" ]; then - echo "OpenClash 使用原始配置文件启动成功,部分设置可能未生效!" >$START_LOG - echo "${LOGTIME} Warning: OpenClash Start Successful With Raw Config File, Please Note That It's Restricted Mode Now" >> $LOG_FILE - sleep 5 - fi - echo "OpenClash Already Start" - echo "" >$START_LOG - rm -rf /tmp/yaml_* -} - -stop() -{ - - enable=$(uci -q get openclash.config.enable) - - echo "OpenClash 开始关闭..." >$START_LOG - echo "第一步: 备份当前节点状态..." >$START_LOG - /usr/share/openclash/openclash_history_get.sh 2>/dev/null - - echo "第二步: 删除 OpenClash 防火墙规则..." >$START_LOG - revert_firewall - - echo "第三步: 关闭 OpenClash 守护程序..." >$START_LOG - watchdog_pids=$(unify_ps_pids "openclash_watchdog.sh") - for watchdog_pid in $watchdog_pids; do - kill -9 "$watchdog_pid" >/dev/null 2>&1 - done >/dev/null 2>&1 - - echo "第四步: 关闭 Clash 主程序..." >$START_LOG - if [ "$enable" != "1" ]; then - kill_clash - fi - - echo "第五步: 重启 Dnsmasq 程序..." >$START_LOG - dns_port=$(uci -q get openclash.config.dns_port) - redirect_dns=$(uci -q get openclash.config.redirect_dns) - masq_cache=$(uci -q get openclash.config.masq_cache) - revert_dns "$redirect_dns" "$masq_cache" "$dns_port" "$enable" - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - - echo "第六步:删除 OpenClash 残留文件..." >$START_LOG - if [ "$enable" != "1" ]; then - rm -rf $LOG_FILE - rm -rf /tmp/openclash_debug.log - rm -rf /www/luci-static/openclash - rm -rf /tmp/openclash_last_version - rm -rf /tmp/clash_last_version - rm -rf /tmp/Proxy_Group - rm -rf /tmp/rules_name - rm -rf /tmp/rule_providers_name - rm -rf /tmp/openclash_fake_filter.list - rm -rf /tmp/openclash_servers_fake_filter.conf - del_lock - echo "OpenClash 关闭成功!" >$START_LOG - sleep 5 - fi - - del_cron - rm -rf /tmp/yaml_* - rm -rf $START_LOG - echo "OpenClash Already Stop" -} - - -restart() -{ - [ -f "$LOCK_FILE" ] && echo "${LOGTIME} Warning: Multiple Restart Scripts Running, Exit..." >> $LOG_FILE && exit 0 - mkdir -p /tmp/lock - touch $LOCK_FILE - set_lock - stop - start - del_lock -} - -reload() -{ - if pidof clash >/dev/null; then - revert_firewall 2>/dev/null - do_run_mode 2>/dev/null - get_config 2>/dev/null - set_firewall 2>/dev/null - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - echo "${LOGTIME} Reload OpenClash Firewall Rules" >> $LOG_FILE - echo "" >$START_LOG - fi -} diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/Country.mmdb b/package/ctcgfw/luci-app-openclash/root/etc/openclash/Country.mmdb deleted file mode 100644 index b3776bfc78..0000000000 Binary files a/package/ctcgfw/luci-app-openclash/root/etc/openclash/Country.mmdb and /dev/null differ diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/china_ip_route.ipset b/package/ctcgfw/luci-app-openclash/root/etc/openclash/china_ip_route.ipset deleted file mode 100644 index 3f713bad66..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/china_ip_route.ipset +++ /dev/null @@ -1,8579 +0,0 @@ -create china_ip_route hash:net family inet hashsize 1024 maxelem 65536 -add china_ip_route 1.0.1.0/24 -add china_ip_route 1.0.2.0/23 -add china_ip_route 1.0.8.0/21 -add china_ip_route 1.0.32.0/19 -add china_ip_route 1.1.0.0/24 -add china_ip_route 1.1.2.0/23 -add china_ip_route 1.1.4.0/22 -add china_ip_route 1.1.8.0/24 -add china_ip_route 1.1.9.0/24 -add china_ip_route 1.1.10.0/23 -add china_ip_route 1.1.12.0/22 -add china_ip_route 1.1.16.0/20 -add china_ip_route 1.1.32.0/19 -add china_ip_route 1.2.0.0/23 -add china_ip_route 1.2.2.0/24 -add china_ip_route 1.2.4.0/24 -add china_ip_route 1.2.5.0/24 -add china_ip_route 1.2.6.0/23 -add china_ip_route 1.2.8.0/24 -add china_ip_route 1.2.9.0/24 -add china_ip_route 1.2.10.0/23 -add china_ip_route 1.2.12.0/22 -add china_ip_route 1.2.16.0/20 -add china_ip_route 1.2.32.0/19 -add china_ip_route 1.2.64.0/18 -add china_ip_route 1.3.0.0/16 -add china_ip_route 1.4.1.0/24 -add china_ip_route 1.4.2.0/23 -add china_ip_route 1.4.4.0/24 -add china_ip_route 1.4.5.0/24 -add china_ip_route 1.4.6.0/23 -add china_ip_route 1.4.8.0/21 -add china_ip_route 1.4.16.0/20 -add china_ip_route 1.4.32.0/19 -add china_ip_route 1.4.64.0/18 -add china_ip_route 1.8.0.0/16 -add china_ip_route 1.10.0.0/21 -add china_ip_route 1.10.8.0/23 -add china_ip_route 1.10.11.0/24 -add china_ip_route 1.10.12.0/22 -add china_ip_route 1.10.16.0/20 -add china_ip_route 1.10.32.0/19 -add china_ip_route 1.10.64.0/18 -add china_ip_route 1.12.0.0/14 -add china_ip_route 1.24.0.0/13 -add china_ip_route 1.45.0.0/16 -add china_ip_route 1.48.0.0/15 -add china_ip_route 1.50.0.0/16 -add china_ip_route 1.51.0.0/16 -add china_ip_route 1.56.0.0/13 -add china_ip_route 1.68.0.0/14 -add china_ip_route 1.80.0.0/13 -add china_ip_route 1.88.0.0/14 -add china_ip_route 1.92.0.0/15 -add china_ip_route 1.94.0.0/15 -add china_ip_route 1.116.0.0/15 -add china_ip_route 1.118.0.0/16 -add china_ip_route 1.119.0.0/17 -add china_ip_route 1.119.128.0/17 -add china_ip_route 1.180.0.0/14 -add china_ip_route 1.184.0.0/15 -add china_ip_route 1.188.0.0/14 -add china_ip_route 1.192.0.0/13 -add china_ip_route 1.202.0.0/15 -add china_ip_route 1.204.0.0/14 -add china_ip_route 14.0.0.0/21 -add china_ip_route 14.0.12.0/22 -add china_ip_route 14.1.0.0/22 -add china_ip_route 14.1.24.0/22 -add china_ip_route 14.1.96.0/22 -add china_ip_route 14.1.108.0/22 -add china_ip_route 14.16.0.0/12 -add china_ip_route 14.102.128.0/22 -add china_ip_route 14.102.156.0/22 -add china_ip_route 14.102.180.0/22 -add china_ip_route 14.103.0.0/16 -add china_ip_route 14.104.0.0/13 -add china_ip_route 14.112.0.0/12 -add china_ip_route 14.130.0.0/15 -add china_ip_route 14.134.0.0/15 -add china_ip_route 14.144.0.0/12 -add china_ip_route 14.192.60.0/22 -add china_ip_route 14.192.76.0/22 -add china_ip_route 14.196.0.0/15 -add china_ip_route 14.204.0.0/15 -add china_ip_route 14.208.0.0/12 -add china_ip_route 27.0.128.0/22 -add china_ip_route 27.0.132.0/22 -add china_ip_route 27.0.160.0/22 -add china_ip_route 27.0.164.0/22 -add china_ip_route 27.0.188.0/22 -add china_ip_route 27.0.204.0/22 -add china_ip_route 27.0.208.0/22 -add china_ip_route 27.0.212.0/22 -add china_ip_route 27.8.0.0/13 -add china_ip_route 27.16.0.0/12 -add china_ip_route 27.34.232.0/21 -add china_ip_route 27.36.0.0/14 -add china_ip_route 27.40.0.0/13 -add china_ip_route 27.50.40.0/21 -add china_ip_route 27.50.128.0/17 -add china_ip_route 27.54.72.0/21 -add china_ip_route 27.54.152.0/21 -add china_ip_route 27.54.192.0/18 -add china_ip_route 27.98.208.0/20 -add china_ip_route 27.98.224.0/19 -add china_ip_route 27.99.128.0/17 -add china_ip_route 27.103.0.0/16 -add china_ip_route 27.106.128.0/18 -add china_ip_route 27.106.204.0/22 -add china_ip_route 27.109.32.0/19 -add china_ip_route 27.109.124.0/22 -add china_ip_route 27.112.0.0/18 -add china_ip_route 27.112.80.0/20 -add china_ip_route 27.112.112.0/22 -add china_ip_route 27.112.116.0/22 -add china_ip_route 27.113.128.0/18 -add china_ip_route 27.115.0.0/17 -add china_ip_route 27.116.44.0/22 -add china_ip_route 27.121.72.0/21 -add china_ip_route 27.121.120.0/21 -add china_ip_route 27.128.0.0/15 -add china_ip_route 27.131.220.0/22 -add china_ip_route 27.144.0.0/16 -add china_ip_route 27.148.0.0/14 -add china_ip_route 27.152.0.0/13 -add china_ip_route 27.184.0.0/13 -add china_ip_route 27.192.0.0/11 -add china_ip_route 27.224.0.0/14 -add china_ip_route 36.0.0.0/22 -add china_ip_route 36.0.8.0/21 -add china_ip_route 36.0.16.0/20 -add china_ip_route 36.0.32.0/19 -add china_ip_route 36.0.64.0/18 -add china_ip_route 36.0.128.0/17 -add china_ip_route 36.1.0.0/16 -add china_ip_route 36.4.0.0/14 -add china_ip_route 36.16.0.0/12 -add china_ip_route 36.32.0.0/14 -add china_ip_route 36.36.0.0/16 -add china_ip_route 36.37.0.0/19 -add china_ip_route 36.37.36.0/23 -add china_ip_route 36.37.39.0/24 -add china_ip_route 36.37.40.0/21 -add china_ip_route 36.37.48.0/20 -add china_ip_route 36.40.0.0/13 -add china_ip_route 36.48.0.0/15 -add china_ip_route 36.51.0.0/16 -add china_ip_route 36.56.0.0/13 -add china_ip_route 36.96.0.0/11 -add china_ip_route 36.128.0.0/10 -add china_ip_route 36.192.0.0/11 -add china_ip_route 36.248.0.0/14 -add china_ip_route 36.254.0.0/16 -add china_ip_route 36.255.116.0/22 -add china_ip_route 36.255.128.0/22 -add china_ip_route 36.255.164.0/22 -add china_ip_route 36.255.172.0/22 -add china_ip_route 36.255.176.0/22 -add china_ip_route 39.0.0.0/24 -add china_ip_route 39.0.2.0/23 -add china_ip_route 39.0.4.0/22 -add china_ip_route 39.0.8.0/21 -add china_ip_route 39.0.16.0/20 -add china_ip_route 39.0.32.0/19 -add china_ip_route 39.0.64.0/18 -add china_ip_route 39.0.128.0/17 -add china_ip_route 39.64.0.0/11 -add china_ip_route 39.96.0.0/13 -add china_ip_route 39.104.0.0/14 -add china_ip_route 39.108.0.0/16 -add china_ip_route 39.128.0.0/10 -add china_ip_route 40.72.0.0/15 -add china_ip_route 40.125.128.0/17 -add china_ip_route 40.126.64.0/18 -add china_ip_route 42.0.0.0/22 -add china_ip_route 42.0.8.0/21 -add china_ip_route 42.0.16.0/21 -add china_ip_route 42.0.24.0/22 -add china_ip_route 42.0.32.0/19 -add china_ip_route 42.0.128.0/17 -add china_ip_route 42.1.0.0/19 -add china_ip_route 42.1.32.0/20 -add china_ip_route 42.1.48.0/21 -add china_ip_route 42.1.56.0/22 -add china_ip_route 42.1.128.0/17 -add china_ip_route 42.4.0.0/14 -add china_ip_route 42.48.0.0/15 -add china_ip_route 42.50.0.0/16 -add china_ip_route 42.51.0.0/16 -add china_ip_route 42.52.0.0/14 -add china_ip_route 42.56.0.0/14 -add china_ip_route 42.62.0.0/17 -add china_ip_route 42.62.128.0/19 -add china_ip_route 42.62.160.0/20 -add china_ip_route 42.62.180.0/22 -add china_ip_route 42.62.184.0/21 -add china_ip_route 42.63.0.0/16 -add china_ip_route 42.80.0.0/15 -add china_ip_route 42.83.64.0/20 -add china_ip_route 42.83.80.0/22 -add china_ip_route 42.83.88.0/21 -add china_ip_route 42.83.96.0/19 -add china_ip_route 42.83.128.0/17 -add china_ip_route 42.84.0.0/14 -add china_ip_route 42.88.0.0/13 -add china_ip_route 42.96.64.0/19 -add china_ip_route 42.96.96.0/21 -add china_ip_route 42.96.108.0/22 -add china_ip_route 42.96.112.0/20 -add china_ip_route 42.96.128.0/17 -add china_ip_route 42.97.0.0/16 -add china_ip_route 42.99.0.0/18 -add china_ip_route 42.99.64.0/19 -add china_ip_route 42.99.96.0/20 -add china_ip_route 42.99.112.0/22 -add china_ip_route 42.99.120.0/21 -add china_ip_route 42.100.0.0/14 -add china_ip_route 42.120.0.0/15 -add china_ip_route 42.122.0.0/16 -add china_ip_route 42.123.0.0/19 -add china_ip_route 42.123.36.0/22 -add china_ip_route 42.123.40.0/21 -add china_ip_route 42.123.48.0/20 -add china_ip_route 42.123.64.0/18 -add china_ip_route 42.123.128.0/17 -add china_ip_route 42.128.0.0/12 -add china_ip_route 42.156.0.0/19 -add china_ip_route 42.156.36.0/22 -add china_ip_route 42.156.40.0/21 -add china_ip_route 42.156.48.0/20 -add china_ip_route 42.156.64.0/18 -add china_ip_route 42.156.128.0/17 -add china_ip_route 42.157.0.0/16 -add china_ip_route 42.158.0.0/16 -add china_ip_route 42.159.0.0/16 -add china_ip_route 42.160.0.0/12 -add china_ip_route 42.176.0.0/13 -add china_ip_route 42.184.0.0/15 -add china_ip_route 42.186.0.0/16 -add china_ip_route 42.187.0.0/18 -add china_ip_route 42.187.64.0/19 -add china_ip_route 42.187.96.0/20 -add china_ip_route 42.187.112.0/21 -add china_ip_route 42.187.120.0/22 -add china_ip_route 42.187.128.0/17 -add china_ip_route 42.192.0.0/15 -add china_ip_route 42.194.0.0/21 -add china_ip_route 42.194.8.0/22 -add china_ip_route 42.194.12.0/22 -add china_ip_route 42.194.16.0/20 -add china_ip_route 42.194.32.0/19 -add china_ip_route 42.194.64.0/18 -add china_ip_route 42.194.128.0/17 -add china_ip_route 42.195.0.0/16 -add china_ip_route 42.196.0.0/14 -add china_ip_route 42.201.0.0/17 -add china_ip_route 42.202.0.0/15 -add china_ip_route 42.204.0.0/14 -add china_ip_route 42.208.0.0/12 -add china_ip_route 42.224.0.0/12 -add china_ip_route 42.240.0.0/17 -add china_ip_route 42.240.128.0/17 -add china_ip_route 42.242.0.0/15 -add china_ip_route 42.244.0.0/14 -add china_ip_route 42.248.0.0/13 -add china_ip_route 43.136.0.0/13 -add china_ip_route 43.144.0.0/12 -add china_ip_route 43.160.0.0/11 -add china_ip_route 43.224.12.0/22 -add china_ip_route 43.224.24.0/22 -add china_ip_route 43.224.44.0/22 -add china_ip_route 43.224.52.0/22 -add china_ip_route 43.224.56.0/22 -add china_ip_route 43.224.64.0/22 -add china_ip_route 43.224.68.0/22 -add china_ip_route 43.224.72.0/22 -add china_ip_route 43.224.80.0/22 -add china_ip_route 43.224.100.0/22 -add china_ip_route 43.224.144.0/22 -add china_ip_route 43.224.160.0/22 -add china_ip_route 43.224.176.0/22 -add china_ip_route 43.224.184.0/22 -add china_ip_route 43.224.200.0/22 -add china_ip_route 43.224.204.0/22 -add china_ip_route 43.224.208.0/22 -add china_ip_route 43.224.212.0/22 -add china_ip_route 43.224.216.0/22 -add china_ip_route 43.224.240.0/22 -add china_ip_route 43.225.76.0/22 -add china_ip_route 43.225.84.0/22 -add china_ip_route 43.225.120.0/22 -add china_ip_route 43.225.124.0/22 -add china_ip_route 43.225.140.0/22 -add china_ip_route 43.225.172.0/22 -add china_ip_route 43.225.180.0/22 -add china_ip_route 43.225.208.0/22 -add china_ip_route 43.225.216.0/22 -add china_ip_route 43.225.220.0/22 -add china_ip_route 43.225.224.0/22 -add china_ip_route 43.225.228.0/22 -add china_ip_route 43.225.232.0/22 -add china_ip_route 43.225.236.0/22 -add china_ip_route 43.225.240.0/22 -add china_ip_route 43.225.244.0/22 -add china_ip_route 43.225.252.0/22 -add china_ip_route 43.226.32.0/22 -add china_ip_route 43.226.36.0/22 -add china_ip_route 43.226.40.0/22 -add china_ip_route 43.226.44.0/22 -add china_ip_route 43.226.48.0/22 -add china_ip_route 43.226.52.0/22 -add china_ip_route 43.226.56.0/22 -add china_ip_route 43.226.60.0/22 -add china_ip_route 43.226.64.0/22 -add china_ip_route 43.226.68.0/22 -add china_ip_route 43.226.72.0/22 -add china_ip_route 43.226.76.0/22 -add china_ip_route 43.226.80.0/22 -add china_ip_route 43.226.84.0/22 -add china_ip_route 43.226.88.0/22 -add china_ip_route 43.226.92.0/22 -add china_ip_route 43.226.96.0/22 -add china_ip_route 43.226.100.0/22 -add china_ip_route 43.226.104.0/22 -add china_ip_route 43.226.108.0/22 -add china_ip_route 43.226.112.0/22 -add china_ip_route 43.226.116.0/22 -add china_ip_route 43.226.120.0/22 -add china_ip_route 43.226.128.0/22 -add china_ip_route 43.226.132.0/22 -add china_ip_route 43.226.136.0/22 -add china_ip_route 43.226.140.0/22 -add china_ip_route 43.226.144.0/22 -add china_ip_route 43.226.148.0/22 -add china_ip_route 43.226.152.0/22 -add china_ip_route 43.226.156.0/22 -add china_ip_route 43.226.160.0/22 -add china_ip_route 43.226.164.0/22 -add china_ip_route 43.226.168.0/22 -add china_ip_route 43.226.172.0/22 -add china_ip_route 43.226.176.0/22 -add china_ip_route 43.226.180.0/22 -add china_ip_route 43.226.184.0/22 -add china_ip_route 43.226.188.0/22 -add china_ip_route 43.226.192.0/22 -add china_ip_route 43.226.196.0/22 -add china_ip_route 43.226.200.0/22 -add china_ip_route 43.226.204.0/22 -add china_ip_route 43.226.208.0/22 -add china_ip_route 43.226.212.0/22 -add china_ip_route 43.226.236.0/22 -add china_ip_route 43.226.240.0/22 -add china_ip_route 43.226.244.0/22 -add china_ip_route 43.226.248.0/22 -add china_ip_route 43.226.252.0/22 -add china_ip_route 43.227.0.0/22 -add china_ip_route 43.227.4.0/22 -add china_ip_route 43.227.8.0/22 -add china_ip_route 43.227.32.0/22 -add china_ip_route 43.227.36.0/22 -add china_ip_route 43.227.40.0/22 -add china_ip_route 43.227.44.0/22 -add china_ip_route 43.227.48.0/22 -add china_ip_route 43.227.52.0/22 -add china_ip_route 43.227.56.0/22 -add china_ip_route 43.227.60.0/22 -add china_ip_route 43.227.64.0/22 -add china_ip_route 43.227.68.0/22 -add china_ip_route 43.227.72.0/22 -add china_ip_route 43.227.76.0/22 -add china_ip_route 43.227.80.0/22 -add china_ip_route 43.227.84.0/22 -add china_ip_route 43.227.88.0/22 -add china_ip_route 43.227.92.0/22 -add china_ip_route 43.227.96.0/22 -add china_ip_route 43.227.100.0/22 -add china_ip_route 43.227.104.0/22 -add china_ip_route 43.227.136.0/22 -add china_ip_route 43.227.140.0/22 -add china_ip_route 43.227.144.0/22 -add china_ip_route 43.227.152.0/22 -add china_ip_route 43.227.156.0/22 -add china_ip_route 43.227.160.0/22 -add china_ip_route 43.227.164.0/22 -add china_ip_route 43.227.168.0/22 -add china_ip_route 43.227.172.0/22 -add china_ip_route 43.227.176.0/22 -add china_ip_route 43.227.180.0/22 -add china_ip_route 43.227.188.0/22 -add china_ip_route 43.227.192.0/22 -add china_ip_route 43.227.196.0/22 -add china_ip_route 43.227.200.0/22 -add china_ip_route 43.227.204.0/22 -add china_ip_route 43.227.208.0/22 -add china_ip_route 43.227.212.0/22 -add china_ip_route 43.227.216.0/22 -add china_ip_route 43.227.220.0/22 -add china_ip_route 43.227.232.0/22 -add china_ip_route 43.227.248.0/22 -add china_ip_route 43.227.252.0/22 -add china_ip_route 43.228.0.0/22 -add china_ip_route 43.228.4.0/22 -add china_ip_route 43.228.8.0/22 -add china_ip_route 43.228.12.0/22 -add china_ip_route 43.228.16.0/22 -add china_ip_route 43.228.20.0/22 -add china_ip_route 43.228.24.0/22 -add china_ip_route 43.228.28.0/22 -add china_ip_route 43.228.32.0/22 -add china_ip_route 43.228.36.0/22 -add china_ip_route 43.228.40.0/22 -add china_ip_route 43.228.44.0/22 -add china_ip_route 43.228.48.0/22 -add china_ip_route 43.228.52.0/22 -add china_ip_route 43.228.56.0/22 -add china_ip_route 43.228.60.0/22 -add china_ip_route 43.228.64.0/22 -add china_ip_route 43.228.68.0/22 -add china_ip_route 43.228.76.0/22 -add china_ip_route 43.228.100.0/22 -add china_ip_route 43.228.116.0/22 -add china_ip_route 43.228.120.0/22 -add china_ip_route 43.228.132.0/22 -add china_ip_route 43.228.136.0/22 -add china_ip_route 43.228.148.0/22 -add china_ip_route 43.228.152.0/22 -add china_ip_route 43.228.188.0/22 -add china_ip_route 43.229.40.0/22 -add china_ip_route 43.229.48.0/22 -add china_ip_route 43.229.56.0/22 -add china_ip_route 43.229.96.0/22 -add china_ip_route 43.229.120.0/22 -add china_ip_route 43.229.136.0/22 -add china_ip_route 43.229.140.0/22 -add china_ip_route 43.229.144.0/22 -add china_ip_route 43.229.168.0/22 -add china_ip_route 43.229.172.0/22 -add china_ip_route 43.229.176.0/22 -add china_ip_route 43.229.180.0/22 -add china_ip_route 43.229.184.0/22 -add china_ip_route 43.229.188.0/22 -add china_ip_route 43.229.192.0/22 -add china_ip_route 43.229.196.0/22 -add china_ip_route 43.229.216.0/22 -add china_ip_route 43.229.220.0/22 -add china_ip_route 43.229.232.0/22 -add china_ip_route 43.229.236.0/22 -add china_ip_route 43.230.20.0/22 -add china_ip_route 43.230.32.0/22 -add china_ip_route 43.230.68.0/22 -add china_ip_route 43.230.72.0/22 -add china_ip_route 43.230.84.0/22 -add china_ip_route 43.230.124.0/22 -add china_ip_route 43.230.136.0/22 -add china_ip_route 43.230.220.0/22 -add china_ip_route 43.230.224.0/22 -add china_ip_route 43.230.228.0/22 -add china_ip_route 43.230.232.0/22 -add china_ip_route 43.230.236.0/22 -add china_ip_route 43.230.240.0/22 -add china_ip_route 43.230.244.0/22 -add china_ip_route 43.230.248.0/22 -add china_ip_route 43.230.252.0/22 -add china_ip_route 43.231.32.0/22 -add china_ip_route 43.231.36.0/22 -add china_ip_route 43.231.40.0/22 -add china_ip_route 43.231.44.0/22 -add china_ip_route 43.231.80.0/22 -add china_ip_route 43.231.84.0/22 -add china_ip_route 43.231.88.0/22 -add china_ip_route 43.231.92.0/22 -add china_ip_route 43.231.96.0/22 -add china_ip_route 43.231.100.0/22 -add china_ip_route 43.231.104.0/22 -add china_ip_route 43.231.108.0/22 -add china_ip_route 43.231.136.0/22 -add china_ip_route 43.231.140.0/22 -add china_ip_route 43.231.144.0/22 -add china_ip_route 43.231.148.0/22 -add china_ip_route 43.231.152.0/22 -add china_ip_route 43.231.156.0/22 -add china_ip_route 43.231.160.0/22 -add china_ip_route 43.231.164.0/22 -add china_ip_route 43.231.168.0/22 -add china_ip_route 43.231.172.0/22 -add china_ip_route 43.231.176.0/22 -add china_ip_route 43.231.180.0/22 -add china_ip_route 43.236.0.0/22 -add china_ip_route 43.236.4.0/22 -add china_ip_route 43.236.8.0/22 -add china_ip_route 43.236.12.0/22 -add china_ip_route 43.236.16.0/22 -add china_ip_route 43.236.20.0/22 -add china_ip_route 43.236.24.0/22 -add china_ip_route 43.236.28.0/22 -add china_ip_route 43.236.32.0/22 -add china_ip_route 43.236.36.0/22 -add china_ip_route 43.236.40.0/22 -add china_ip_route 43.236.44.0/22 -add china_ip_route 43.236.48.0/22 -add china_ip_route 43.236.52.0/22 -add china_ip_route 43.236.56.0/22 -add china_ip_route 43.236.60.0/22 -add china_ip_route 43.236.64.0/22 -add china_ip_route 43.236.68.0/22 -add china_ip_route 43.236.72.0/22 -add china_ip_route 43.236.76.0/22 -add china_ip_route 43.236.80.0/22 -add china_ip_route 43.236.84.0/22 -add china_ip_route 43.236.88.0/22 -add china_ip_route 43.236.92.0/22 -add china_ip_route 43.236.96.0/22 -add china_ip_route 43.236.100.0/22 -add china_ip_route 43.236.104.0/22 -add china_ip_route 43.236.108.0/22 -add china_ip_route 43.236.112.0/22 -add china_ip_route 43.236.116.0/22 -add china_ip_route 43.236.120.0/22 -add china_ip_route 43.236.124.0/22 -add china_ip_route 43.236.128.0/22 -add china_ip_route 43.236.132.0/22 -add china_ip_route 43.236.136.0/22 -add china_ip_route 43.236.140.0/22 -add china_ip_route 43.236.144.0/22 -add china_ip_route 43.236.148.0/22 -add china_ip_route 43.236.152.0/22 -add china_ip_route 43.236.156.0/22 -add china_ip_route 43.236.160.0/22 -add china_ip_route 43.236.164.0/22 -add china_ip_route 43.236.168.0/22 -add china_ip_route 43.236.172.0/22 -add china_ip_route 43.236.176.0/22 -add china_ip_route 43.236.180.0/22 -add china_ip_route 43.236.184.0/22 -add china_ip_route 43.236.188.0/22 -add china_ip_route 43.236.192.0/22 -add china_ip_route 43.236.196.0/22 -add china_ip_route 43.236.200.0/22 -add china_ip_route 43.236.204.0/22 -add china_ip_route 43.236.208.0/22 -add china_ip_route 43.236.212.0/22 -add china_ip_route 43.236.216.0/22 -add china_ip_route 43.236.220.0/22 -add china_ip_route 43.236.224.0/22 -add china_ip_route 43.236.228.0/22 -add china_ip_route 43.236.232.0/22 -add china_ip_route 43.236.236.0/22 -add china_ip_route 43.236.240.0/22 -add china_ip_route 43.236.244.0/22 -add china_ip_route 43.236.248.0/22 -add china_ip_route 43.236.252.0/22 -add china_ip_route 43.237.0.0/22 -add china_ip_route 43.237.4.0/22 -add china_ip_route 43.237.8.0/22 -add china_ip_route 43.237.12.0/22 -add china_ip_route 43.237.16.0/22 -add china_ip_route 43.237.20.0/22 -add china_ip_route 43.237.24.0/22 -add china_ip_route 43.237.28.0/22 -add china_ip_route 43.237.32.0/22 -add china_ip_route 43.237.36.0/22 -add china_ip_route 43.237.40.0/22 -add china_ip_route 43.237.44.0/22 -add china_ip_route 43.237.48.0/22 -add china_ip_route 43.237.52.0/22 -add china_ip_route 43.237.56.0/22 -add china_ip_route 43.237.60.0/22 -add china_ip_route 43.237.64.0/22 -add china_ip_route 43.237.68.0/22 -add china_ip_route 43.237.72.0/22 -add china_ip_route 43.237.76.0/22 -add china_ip_route 43.237.80.0/22 -add china_ip_route 43.237.84.0/22 -add china_ip_route 43.237.88.0/22 -add china_ip_route 43.237.92.0/22 -add china_ip_route 43.237.96.0/22 -add china_ip_route 43.237.100.0/22 -add china_ip_route 43.237.104.0/22 -add china_ip_route 43.237.108.0/22 -add china_ip_route 43.237.112.0/22 -add china_ip_route 43.237.116.0/22 -add china_ip_route 43.237.120.0/22 -add china_ip_route 43.237.124.0/22 -add china_ip_route 43.237.128.0/22 -add china_ip_route 43.237.132.0/22 -add china_ip_route 43.237.136.0/22 -add china_ip_route 43.237.140.0/22 -add china_ip_route 43.237.144.0/22 -add china_ip_route 43.237.148.0/22 -add china_ip_route 43.237.152.0/22 -add china_ip_route 43.237.156.0/22 -add china_ip_route 43.237.160.0/22 -add china_ip_route 43.237.164.0/22 -add china_ip_route 43.237.168.0/22 -add china_ip_route 43.237.172.0/22 -add china_ip_route 43.237.176.0/22 -add china_ip_route 43.237.180.0/22 -add china_ip_route 43.237.184.0/22 -add china_ip_route 43.237.188.0/22 -add china_ip_route 43.237.192.0/22 -add china_ip_route 43.237.196.0/22 -add china_ip_route 43.237.200.0/22 -add china_ip_route 43.237.204.0/22 -add china_ip_route 43.237.208.0/22 -add china_ip_route 43.237.212.0/22 -add china_ip_route 43.237.216.0/22 -add china_ip_route 43.237.220.0/22 -add china_ip_route 43.237.224.0/22 -add china_ip_route 43.237.228.0/22 -add china_ip_route 43.237.232.0/22 -add china_ip_route 43.237.236.0/22 -add china_ip_route 43.237.240.0/22 -add china_ip_route 43.237.244.0/22 -add china_ip_route 43.237.248.0/22 -add china_ip_route 43.237.252.0/22 -add china_ip_route 43.238.0.0/22 -add china_ip_route 43.238.4.0/22 -add china_ip_route 43.238.8.0/22 -add china_ip_route 43.238.12.0/22 -add china_ip_route 43.238.16.0/22 -add china_ip_route 43.238.20.0/22 -add china_ip_route 43.238.24.0/22 -add china_ip_route 43.238.28.0/22 -add china_ip_route 43.238.32.0/22 -add china_ip_route 43.238.36.0/22 -add china_ip_route 43.238.40.0/22 -add china_ip_route 43.238.44.0/22 -add china_ip_route 43.238.48.0/22 -add china_ip_route 43.238.52.0/22 -add china_ip_route 43.238.56.0/22 -add china_ip_route 43.238.60.0/22 -add china_ip_route 43.238.64.0/22 -add china_ip_route 43.238.68.0/22 -add china_ip_route 43.238.72.0/22 -add china_ip_route 43.238.76.0/22 -add china_ip_route 43.238.80.0/22 -add china_ip_route 43.238.84.0/22 -add china_ip_route 43.238.88.0/22 -add china_ip_route 43.238.92.0/22 -add china_ip_route 43.238.96.0/22 -add china_ip_route 43.238.100.0/22 -add china_ip_route 43.238.104.0/22 -add china_ip_route 43.238.108.0/22 -add china_ip_route 43.238.112.0/22 -add china_ip_route 43.238.116.0/22 -add china_ip_route 43.238.120.0/22 -add china_ip_route 43.238.124.0/22 -add china_ip_route 43.238.128.0/22 -add china_ip_route 43.238.132.0/22 -add china_ip_route 43.238.136.0/22 -add china_ip_route 43.238.140.0/22 -add china_ip_route 43.238.144.0/22 -add china_ip_route 43.238.148.0/22 -add china_ip_route 43.238.152.0/22 -add china_ip_route 43.238.156.0/22 -add china_ip_route 43.238.160.0/22 -add china_ip_route 43.238.164.0/22 -add china_ip_route 43.238.168.0/22 -add china_ip_route 43.238.172.0/22 -add china_ip_route 43.238.176.0/22 -add china_ip_route 43.238.180.0/22 -add china_ip_route 43.238.184.0/22 -add china_ip_route 43.238.188.0/22 -add china_ip_route 43.238.192.0/22 -add china_ip_route 43.238.196.0/22 -add china_ip_route 43.238.200.0/22 -add china_ip_route 43.238.204.0/22 -add china_ip_route 43.238.208.0/22 -add china_ip_route 43.238.212.0/22 -add china_ip_route 43.238.216.0/22 -add china_ip_route 43.238.220.0/22 -add china_ip_route 43.238.224.0/22 -add china_ip_route 43.238.228.0/22 -add china_ip_route 43.238.232.0/22 -add china_ip_route 43.238.236.0/22 -add china_ip_route 43.238.240.0/22 -add china_ip_route 43.238.244.0/22 -add china_ip_route 43.238.248.0/22 -add china_ip_route 43.238.252.0/22 -add china_ip_route 43.239.0.0/22 -add china_ip_route 43.239.4.0/22 -add china_ip_route 43.239.8.0/21 -add china_ip_route 43.239.16.0/22 -add china_ip_route 43.239.20.0/22 -add china_ip_route 43.239.24.0/22 -add china_ip_route 43.239.28.0/22 -add china_ip_route 43.239.32.0/22 -add china_ip_route 43.239.36.0/22 -add china_ip_route 43.239.40.0/22 -add china_ip_route 43.239.44.0/22 -add china_ip_route 43.239.48.0/22 -add china_ip_route 43.239.116.0/22 -add china_ip_route 43.239.120.0/22 -add china_ip_route 43.239.172.0/22 -add china_ip_route 43.239.176.0/22 -add china_ip_route 43.240.0.0/22 -add china_ip_route 43.240.56.0/22 -add china_ip_route 43.240.60.0/22 -add china_ip_route 43.240.68.0/22 -add china_ip_route 43.240.72.0/22 -add china_ip_route 43.240.76.0/22 -add china_ip_route 43.240.84.0/22 -add china_ip_route 43.240.124.0/22 -add china_ip_route 43.240.128.0/22 -add china_ip_route 43.240.132.0/22 -add china_ip_route 43.240.136.0/22 -add china_ip_route 43.240.144.0/22 -add china_ip_route 43.240.156.0/22 -add china_ip_route 43.240.160.0/22 -add china_ip_route 43.240.164.0/22 -add china_ip_route 43.240.168.0/22 -add china_ip_route 43.240.172.0/22 -add china_ip_route 43.240.176.0/22 -add china_ip_route 43.240.180.0/22 -add china_ip_route 43.240.184.0/22 -add china_ip_route 43.240.188.0/22 -add china_ip_route 43.240.192.0/22 -add china_ip_route 43.240.196.0/22 -add china_ip_route 43.240.200.0/22 -add china_ip_route 43.240.204.0/22 -add china_ip_route 43.240.208.0/22 -add china_ip_route 43.240.212.0/22 -add china_ip_route 43.240.216.0/22 -add china_ip_route 43.240.220.0/22 -add china_ip_route 43.240.236.0/22 -add china_ip_route 43.240.240.0/22 -add china_ip_route 43.240.244.0/22 -add china_ip_route 43.240.248.0/22 -add china_ip_route 43.240.252.0/22 -add china_ip_route 43.241.0.0/22 -add china_ip_route 43.241.4.0/22 -add china_ip_route 43.241.8.0/22 -add china_ip_route 43.241.12.0/22 -add china_ip_route 43.241.16.0/22 -add china_ip_route 43.241.20.0/22 -add china_ip_route 43.241.48.0/22 -add china_ip_route 43.241.76.0/22 -add china_ip_route 43.241.80.0/22 -add china_ip_route 43.241.84.0/22 -add china_ip_route 43.241.88.0/22 -add china_ip_route 43.241.92.0/22 -add china_ip_route 43.241.112.0/22 -add china_ip_route 43.241.168.0/22 -add china_ip_route 43.241.172.0/22 -add china_ip_route 43.241.176.0/22 -add china_ip_route 43.241.180.0/22 -add china_ip_route 43.241.184.0/22 -add china_ip_route 43.241.196.0/22 -add china_ip_route 43.241.208.0/22 -add china_ip_route 43.241.212.0/22 -add china_ip_route 43.241.216.0/22 -add china_ip_route 43.241.220.0/22 -add china_ip_route 43.241.224.0/22 -add china_ip_route 43.241.228.0/22 -add china_ip_route 43.241.232.0/22 -add china_ip_route 43.241.236.0/22 -add china_ip_route 43.241.240.0/22 -add china_ip_route 43.241.248.0/22 -add china_ip_route 43.241.252.0/22 -add china_ip_route 43.242.8.0/22 -add china_ip_route 43.242.12.0/22 -add china_ip_route 43.242.16.0/22 -add china_ip_route 43.242.20.0/22 -add china_ip_route 43.242.24.0/22 -add china_ip_route 43.242.28.0/22 -add china_ip_route 43.242.44.0/22 -add china_ip_route 43.242.48.0/22 -add china_ip_route 43.242.52.0/22 -add china_ip_route 43.242.56.0/22 -add china_ip_route 43.242.60.0/22 -add china_ip_route 43.242.64.0/22 -add china_ip_route 43.242.72.0/22 -add china_ip_route 43.242.76.0/22 -add china_ip_route 43.242.80.0/22 -add china_ip_route 43.242.84.0/22 -add china_ip_route 43.242.88.0/22 -add china_ip_route 43.242.92.0/22 -add china_ip_route 43.242.96.0/22 -add china_ip_route 43.242.144.0/22 -add china_ip_route 43.242.148.0/22 -add china_ip_route 43.242.152.0/22 -add china_ip_route 43.242.156.0/22 -add china_ip_route 43.242.160.0/22 -add china_ip_route 43.242.164.0/22 -add china_ip_route 43.242.168.0/22 -add china_ip_route 43.242.180.0/22 -add china_ip_route 43.242.188.0/22 -add china_ip_route 43.242.192.0/22 -add china_ip_route 43.242.196.0/22 -add china_ip_route 43.242.204.0/22 -add china_ip_route 43.242.216.0/22 -add china_ip_route 43.242.220.0/22 -add china_ip_route 43.242.252.0/22 -add china_ip_route 43.243.4.0/22 -add china_ip_route 43.243.8.0/22 -add china_ip_route 43.243.12.0/22 -add china_ip_route 43.243.16.0/22 -add china_ip_route 43.243.24.0/22 -add china_ip_route 43.243.88.0/22 -add china_ip_route 43.243.128.0/22 -add china_ip_route 43.243.136.0/22 -add china_ip_route 43.243.144.0/22 -add china_ip_route 43.243.148.0/22 -add china_ip_route 43.243.156.0/22 -add china_ip_route 43.243.180.0/22 -add china_ip_route 43.243.188.0/22 -add china_ip_route 43.243.228.0/22 -add china_ip_route 43.243.232.0/22 -add china_ip_route 43.243.244.0/22 -add china_ip_route 43.246.0.0/22 -add china_ip_route 43.246.4.0/22 -add china_ip_route 43.246.8.0/22 -add china_ip_route 43.246.12.0/22 -add china_ip_route 43.246.16.0/22 -add china_ip_route 43.246.20.0/22 -add china_ip_route 43.246.24.0/22 -add china_ip_route 43.246.28.0/22 -add china_ip_route 43.246.32.0/22 -add china_ip_route 43.246.36.0/22 -add china_ip_route 43.246.40.0/22 -add china_ip_route 43.246.44.0/22 -add china_ip_route 43.246.48.0/22 -add china_ip_route 43.246.52.0/22 -add china_ip_route 43.246.56.0/22 -add china_ip_route 43.246.60.0/22 -add china_ip_route 43.246.64.0/22 -add china_ip_route 43.246.68.0/22 -add china_ip_route 43.246.72.0/22 -add china_ip_route 43.246.76.0/22 -add china_ip_route 43.246.80.0/22 -add china_ip_route 43.246.84.0/22 -add china_ip_route 43.246.88.0/22 -add china_ip_route 43.246.92.0/22 -add china_ip_route 43.246.96.0/22 -add china_ip_route 43.246.112.0/22 -add china_ip_route 43.246.212.0/22 -add china_ip_route 43.246.228.0/22 -add china_ip_route 43.247.4.0/22 -add china_ip_route 43.247.8.0/22 -add china_ip_route 43.247.44.0/22 -add china_ip_route 43.247.48.0/22 -add china_ip_route 43.247.68.0/22 -add china_ip_route 43.247.76.0/22 -add china_ip_route 43.247.84.0/22 -add china_ip_route 43.247.88.0/22 -add china_ip_route 43.247.92.0/22 -add china_ip_route 43.247.96.0/22 -add china_ip_route 43.247.100.0/22 -add china_ip_route 43.247.108.0/22 -add china_ip_route 43.247.112.0/22 -add china_ip_route 43.247.148.0/22 -add china_ip_route 43.247.152.0/22 -add china_ip_route 43.247.176.0/22 -add china_ip_route 43.247.180.0/22 -add china_ip_route 43.247.184.0/22 -add china_ip_route 43.247.188.0/22 -add china_ip_route 43.247.196.0/22 -add china_ip_route 43.247.200.0/22 -add china_ip_route 43.247.204.0/22 -add china_ip_route 43.247.208.0/22 -add china_ip_route 43.247.212.0/22 -add china_ip_route 43.247.216.0/22 -add china_ip_route 43.247.220.0/22 -add china_ip_route 43.247.224.0/22 -add china_ip_route 43.247.228.0/22 -add china_ip_route 43.247.232.0/22 -add china_ip_route 43.247.236.0/22 -add china_ip_route 43.247.240.0/22 -add china_ip_route 43.247.244.0/22 -add china_ip_route 43.247.248.0/22 -add china_ip_route 43.247.252.0/22 -add china_ip_route 43.248.0.0/22 -add china_ip_route 43.248.4.0/22 -add china_ip_route 43.248.20.0/22 -add china_ip_route 43.248.28.0/22 -add china_ip_route 43.248.48.0/22 -add china_ip_route 43.248.76.0/22 -add china_ip_route 43.248.80.0/22 -add china_ip_route 43.248.84.0/22 -add china_ip_route 43.248.88.0/22 -add china_ip_route 43.248.92.0/22 -add china_ip_route 43.248.96.0/22 -add china_ip_route 43.248.100.0/22 -add china_ip_route 43.248.104.0/22 -add china_ip_route 43.248.108.0/22 -add china_ip_route 43.248.112.0/22 -add china_ip_route 43.248.116.0/22 -add china_ip_route 43.248.120.0/22 -add china_ip_route 43.248.124.0/22 -add china_ip_route 43.248.128.0/22 -add china_ip_route 43.248.132.0/22 -add china_ip_route 43.248.136.0/22 -add china_ip_route 43.248.140.0/22 -add china_ip_route 43.248.144.0/22 -add china_ip_route 43.248.148.0/22 -add china_ip_route 43.248.176.0/22 -add china_ip_route 43.248.180.0/22 -add china_ip_route 43.248.184.0/22 -add china_ip_route 43.248.188.0/22 -add china_ip_route 43.248.192.0/22 -add china_ip_route 43.248.196.0/22 -add china_ip_route 43.248.200.0/22 -add china_ip_route 43.248.204.0/22 -add china_ip_route 43.248.208.0/22 -add china_ip_route 43.248.228.0/22 -add china_ip_route 43.248.232.0/22 -add china_ip_route 43.248.244.0/22 -add china_ip_route 43.249.4.0/22 -add china_ip_route 43.249.8.0/22 -add china_ip_route 43.249.120.0/22 -add china_ip_route 43.249.132.0/22 -add china_ip_route 43.249.136.0/22 -add china_ip_route 43.249.144.0/22 -add china_ip_route 43.249.148.0/22 -add china_ip_route 43.249.152.0/22 -add china_ip_route 43.249.156.0/22 -add china_ip_route 43.249.160.0/22 -add china_ip_route 43.249.164.0/22 -add china_ip_route 43.249.168.0/22 -add china_ip_route 43.249.192.0/22 -add china_ip_route 43.249.236.0/22 -add china_ip_route 43.250.4.0/22 -add china_ip_route 43.250.12.0/22 -add china_ip_route 43.250.16.0/22 -add china_ip_route 43.250.20.0/22 -add china_ip_route 43.250.28.0/22 -add china_ip_route 43.250.32.0/22 -add china_ip_route 43.250.36.0/22 -add china_ip_route 43.250.72.0/22 -add china_ip_route 43.250.96.0/22 -add china_ip_route 43.250.100.0/22 -add china_ip_route 43.250.104.0/22 -add china_ip_route 43.250.108.0/22 -add china_ip_route 43.250.112.0/22 -add china_ip_route 43.250.116.0/22 -add china_ip_route 43.250.128.0/22 -add china_ip_route 43.250.144.0/22 -add china_ip_route 43.250.148.0/22 -add china_ip_route 43.250.160.0/22 -add china_ip_route 43.250.168.0/22 -add china_ip_route 43.250.172.0/22 -add china_ip_route 43.250.176.0/22 -add china_ip_route 43.250.200.0/22 -add china_ip_route 43.250.212.0/22 -add china_ip_route 43.250.216.0/22 -add china_ip_route 43.250.220.0/22 -add china_ip_route 43.250.236.0/22 -add china_ip_route 43.250.244.0/22 -add china_ip_route 43.251.4.0/22 -add china_ip_route 43.251.8.0/22 -add china_ip_route 43.251.36.0/22 -add china_ip_route 43.251.100.0/22 -add china_ip_route 43.251.116.0/22 -add china_ip_route 43.251.192.0/22 -add china_ip_route 43.251.232.0/22 -add china_ip_route 43.251.236.0/22 -add china_ip_route 43.251.244.0/22 -add china_ip_route 43.252.48.0/22 -add china_ip_route 43.252.56.0/22 -add china_ip_route 43.252.224.0/22 -add china_ip_route 43.254.0.0/22 -add china_ip_route 43.254.4.0/22 -add china_ip_route 43.254.8.0/22 -add china_ip_route 43.254.24.0/22 -add china_ip_route 43.254.36.0/22 -add china_ip_route 43.254.44.0/22 -add china_ip_route 43.254.52.0/22 -add china_ip_route 43.254.64.0/22 -add china_ip_route 43.254.72.0/22 -add china_ip_route 43.254.84.0/22 -add china_ip_route 43.254.88.0/22 -add china_ip_route 43.254.92.0/22 -add china_ip_route 43.254.100.0/22 -add china_ip_route 43.254.104.0/22 -add china_ip_route 43.254.112.0/22 -add china_ip_route 43.254.116.0/22 -add china_ip_route 43.254.128.0/22 -add china_ip_route 43.254.136.0/22 -add china_ip_route 43.254.140.0/22 -add china_ip_route 43.254.144.0/22 -add china_ip_route 43.254.148.0/22 -add china_ip_route 43.254.152.0/22 -add china_ip_route 43.254.156.0/22 -add china_ip_route 43.254.168.0/22 -add china_ip_route 43.254.172.0/22 -add china_ip_route 43.254.180.0/22 -add china_ip_route 43.254.184.0/22 -add china_ip_route 43.254.188.0/22 -add china_ip_route 43.254.192.0/22 -add china_ip_route 43.254.196.0/22 -add china_ip_route 43.254.200.0/22 -add china_ip_route 43.254.208.0/22 -add china_ip_route 43.254.220.0/22 -add china_ip_route 43.254.224.0/22 -add china_ip_route 43.254.228.0/22 -add china_ip_route 43.254.232.0/22 -add china_ip_route 43.254.236.0/22 -add china_ip_route 43.254.240.0/22 -add china_ip_route 43.254.248.0/22 -add china_ip_route 43.254.252.0/22 -add china_ip_route 43.255.0.0/22 -add china_ip_route 43.255.4.0/22 -add china_ip_route 43.255.8.0/22 -add china_ip_route 43.255.16.0/22 -add china_ip_route 43.255.48.0/22 -add china_ip_route 43.255.64.0/22 -add china_ip_route 43.255.68.0/22 -add china_ip_route 43.255.72.0/22 -add china_ip_route 43.255.76.0/22 -add china_ip_route 43.255.84.0/22 -add china_ip_route 43.255.96.0/22 -add china_ip_route 43.255.108.0/22 -add china_ip_route 43.255.144.0/22 -add china_ip_route 43.255.168.0/22 -add china_ip_route 43.255.176.0/22 -add china_ip_route 43.255.184.0/22 -add china_ip_route 43.255.192.0/22 -add china_ip_route 43.255.200.0/22 -add china_ip_route 43.255.204.0/22 -add china_ip_route 43.255.208.0/22 -add china_ip_route 43.255.212.0/22 -add china_ip_route 43.255.224.0/22 -add china_ip_route 43.255.228.0/22 -add china_ip_route 43.255.232.0/22 -add china_ip_route 43.255.244.0/22 -add china_ip_route 45.40.192.0/18 -add china_ip_route 45.65.16.0/22 -add china_ip_route 45.65.20.0/22 -add china_ip_route 45.65.24.0/22 -add china_ip_route 45.65.28.0/22 -add china_ip_route 45.112.132.0/22 -add china_ip_route 45.112.188.0/22 -add china_ip_route 45.112.208.0/22 -add china_ip_route 45.112.212.0/22 -add china_ip_route 45.112.216.0/22 -add china_ip_route 45.112.220.0/22 -add china_ip_route 45.112.228.0/22 -add china_ip_route 45.112.232.0/22 -add china_ip_route 45.112.236.0/22 -add china_ip_route 45.113.12.0/22 -add china_ip_route 45.113.16.0/22 -add china_ip_route 45.113.20.0/22 -add china_ip_route 45.113.24.0/22 -add china_ip_route 45.113.28.0/22 -add china_ip_route 45.113.40.0/22 -add china_ip_route 45.113.52.0/22 -add china_ip_route 45.113.56.0/22 -add china_ip_route 45.113.72.0/22 -add china_ip_route 45.113.144.0/22 -add china_ip_route 45.113.148.0/22 -add china_ip_route 45.113.168.0/22 -add china_ip_route 45.113.176.0/22 -add china_ip_route 45.113.184.0/22 -add china_ip_route 45.113.200.0/22 -add china_ip_route 45.113.204.0/22 -add china_ip_route 45.113.208.0/22 -add china_ip_route 45.113.212.0/22 -add china_ip_route 45.113.216.0/22 -add china_ip_route 45.113.220.0/22 -add china_ip_route 45.113.240.0/22 -add china_ip_route 45.113.252.0/22 -add china_ip_route 45.114.0.0/22 -add china_ip_route 45.114.12.0/22 -add china_ip_route 45.114.32.0/22 -add china_ip_route 45.114.40.0/22 -add china_ip_route 45.114.52.0/22 -add china_ip_route 45.114.96.0/22 -add china_ip_route 45.114.104.0/22 -add china_ip_route 45.114.124.0/22 -add china_ip_route 45.114.136.0/22 -add china_ip_route 45.114.196.0/22 -add china_ip_route 45.114.200.0/22 -add china_ip_route 45.114.228.0/22 -add china_ip_route 45.114.252.0/22 -add china_ip_route 45.115.44.0/22 -add china_ip_route 45.115.100.0/22 -add china_ip_route 45.115.120.0/22 -add china_ip_route 45.115.132.0/22 -add china_ip_route 45.115.144.0/22 -add china_ip_route 45.115.156.0/22 -add china_ip_route 45.115.164.0/22 -add china_ip_route 45.115.200.0/22 -add china_ip_route 45.115.212.0/22 -add china_ip_route 45.115.228.0/22 -add china_ip_route 45.115.236.0/22 -add china_ip_route 45.115.244.0/22 -add china_ip_route 45.115.248.0/22 -add china_ip_route 45.116.16.0/22 -add china_ip_route 45.116.24.0/22 -add china_ip_route 45.116.32.0/22 -add china_ip_route 45.116.36.0/22 -add china_ip_route 45.116.52.0/22 -add china_ip_route 45.116.96.0/22 -add china_ip_route 45.116.100.0/22 -add china_ip_route 45.116.140.0/22 -add china_ip_route 45.116.152.0/22 -add china_ip_route 45.116.208.0/22 -add china_ip_route 45.117.8.0/22 -add china_ip_route 45.117.20.0/22 -add china_ip_route 45.117.68.0/22 -add china_ip_route 45.117.124.0/22 -add china_ip_route 45.117.252.0/22 -add china_ip_route 45.119.52.0/22 -add china_ip_route 45.119.60.0/22 -add china_ip_route 45.119.64.0/22 -add china_ip_route 45.119.68.0/22 -add china_ip_route 45.119.72.0/22 -add china_ip_route 45.119.104.0/22 -add china_ip_route 45.119.116.0/22 -add china_ip_route 45.119.232.0/22 -add china_ip_route 45.120.100.0/22 -add china_ip_route 45.120.140.0/22 -add china_ip_route 45.120.164.0/22 -add china_ip_route 45.120.220.0/22 -add china_ip_route 45.120.240.0/22 -add china_ip_route 45.121.52.0/22 -add china_ip_route 45.121.64.0/22 -add china_ip_route 45.121.68.0/22 -add china_ip_route 45.121.72.0/22 -add china_ip_route 45.121.92.0/22 -add china_ip_route 45.121.96.0/22 -add china_ip_route 45.121.172.0/22 -add china_ip_route 45.121.176.0/22 -add china_ip_route 45.121.212.0/22 -add china_ip_route 45.121.240.0/22 -add china_ip_route 45.121.244.0/22 -add china_ip_route 45.121.248.0/22 -add china_ip_route 45.121.252.0/22 -add china_ip_route 45.122.0.0/22 -add china_ip_route 45.122.4.0/22 -add china_ip_route 45.122.8.0/22 -add china_ip_route 45.122.12.0/22 -add china_ip_route 45.122.16.0/22 -add china_ip_route 45.122.20.0/22 -add china_ip_route 45.122.24.0/22 -add china_ip_route 45.122.28.0/22 -add china_ip_route 45.122.32.0/22 -add china_ip_route 45.122.36.0/22 -add china_ip_route 45.122.40.0/22 -add china_ip_route 45.122.60.0/22 -add china_ip_route 45.122.64.0/22 -add china_ip_route 45.122.68.0/22 -add china_ip_route 45.122.72.0/22 -add china_ip_route 45.122.76.0/22 -add china_ip_route 45.122.80.0/22 -add china_ip_route 45.122.84.0/22 -add china_ip_route 45.122.88.0/22 -add china_ip_route 45.122.92.0/22 -add china_ip_route 45.122.96.0/21 -add china_ip_route 45.122.104.0/22 -add china_ip_route 45.122.108.0/22 -add china_ip_route 45.122.112.0/22 -add china_ip_route 45.122.116.0/22 -add china_ip_route 45.122.160.0/22 -add china_ip_route 45.122.164.0/22 -add china_ip_route 45.122.168.0/22 -add china_ip_route 45.122.172.0/22 -add china_ip_route 45.122.176.0/22 -add china_ip_route 45.122.180.0/22 -add china_ip_route 45.122.184.0/22 -add china_ip_route 45.122.188.0/22 -add china_ip_route 45.122.192.0/22 -add china_ip_route 45.122.196.0/22 -add china_ip_route 45.122.200.0/22 -add china_ip_route 45.122.204.0/22 -add china_ip_route 45.122.208.0/22 -add china_ip_route 45.122.212.0/22 -add china_ip_route 45.122.216.0/22 -add china_ip_route 45.123.28.0/22 -add china_ip_route 45.123.32.0/22 -add china_ip_route 45.123.36.0/22 -add china_ip_route 45.123.44.0/22 -add china_ip_route 45.123.48.0/22 -add china_ip_route 45.123.52.0/22 -add china_ip_route 45.123.56.0/22 -add china_ip_route 45.123.60.0/22 -add china_ip_route 45.123.64.0/22 -add china_ip_route 45.123.68.0/22 -add china_ip_route 45.123.72.0/22 -add china_ip_route 45.123.76.0/22 -add china_ip_route 45.123.80.0/22 -add china_ip_route 45.123.84.0/22 -add china_ip_route 45.123.88.0/22 -add china_ip_route 45.123.120.0/22 -add china_ip_route 45.123.128.0/22 -add china_ip_route 45.123.132.0/22 -add china_ip_route 45.123.136.0/22 -add china_ip_route 45.123.148.0/22 -add china_ip_route 45.123.152.0/22 -add china_ip_route 45.123.156.0/22 -add china_ip_route 45.123.164.0/22 -add china_ip_route 45.123.168.0/22 -add china_ip_route 45.123.172.0/22 -add china_ip_route 45.123.176.0/22 -add china_ip_route 45.123.180.0/22 -add china_ip_route 45.123.184.0/22 -add china_ip_route 45.123.204.0/22 -add china_ip_route 45.123.212.0/22 -add china_ip_route 45.123.224.0/22 -add china_ip_route 45.123.228.0/22 -add china_ip_route 45.123.232.0/22 -add china_ip_route 45.123.236.0/22 -add china_ip_route 45.123.240.0/22 -add china_ip_route 45.123.244.0/22 -add china_ip_route 45.123.248.0/22 -add china_ip_route 45.123.252.0/22 -add china_ip_route 45.124.0.0/22 -add china_ip_route 45.124.20.0/22 -add china_ip_route 45.124.28.0/22 -add china_ip_route 45.124.32.0/22 -add china_ip_route 45.124.36.0/22 -add china_ip_route 45.124.44.0/22 -add china_ip_route 45.124.68.0/22 -add china_ip_route 45.124.76.0/22 -add china_ip_route 45.124.80.0/22 -add china_ip_route 45.124.100.0/22 -add china_ip_route 45.124.124.0/22 -add china_ip_route 45.124.172.0/22 -add china_ip_route 45.124.176.0/22 -add china_ip_route 45.124.208.0/22 -add china_ip_route 45.124.248.0/22 -add china_ip_route 45.125.12.0/22 -add china_ip_route 45.125.16.0/22 -add china_ip_route 45.125.24.0/22 -add china_ip_route 45.125.28.0/22 -add china_ip_route 45.125.44.0/22 -add china_ip_route 45.125.52.0/22 -add china_ip_route 45.125.56.0/22 -add china_ip_route 45.125.76.0/22 -add china_ip_route 45.125.80.0/22 -add china_ip_route 45.125.84.0/22 -add china_ip_route 45.125.88.0/22 -add china_ip_route 45.125.92.0/22 -add china_ip_route 45.125.96.0/22 -add china_ip_route 45.125.100.0/22 -add china_ip_route 45.125.104.0/22 -add china_ip_route 45.125.136.0/22 -add china_ip_route 45.126.48.0/22 -add china_ip_route 45.126.52.0/22 -add china_ip_route 45.126.100.0/22 -add china_ip_route 45.126.108.0/22 -add china_ip_route 45.126.112.0/22 -add china_ip_route 45.126.116.0/22 -add china_ip_route 45.126.120.0/22 -add china_ip_route 45.126.212.0/22 -add china_ip_route 45.126.220.0/22 -add china_ip_route 45.127.8.0/22 -add china_ip_route 45.127.12.0/22 -add china_ip_route 45.127.96.0/22 -add china_ip_route 45.127.116.0/22 -add china_ip_route 45.127.128.0/22 -add china_ip_route 45.127.144.0/22 -add china_ip_route 45.127.148.0/22 -add china_ip_route 45.127.156.0/22 -add china_ip_route 45.127.216.0/22 -add china_ip_route 45.248.8.0/22 -add china_ip_route 45.248.80.0/22 -add china_ip_route 45.248.84.0/22 -add china_ip_route 45.248.88.0/22 -add china_ip_route 45.248.96.0/22 -add china_ip_route 45.248.100.0/22 -add china_ip_route 45.248.104.0/22 -add china_ip_route 45.248.108.0/22 -add china_ip_route 45.248.128.0/22 -add china_ip_route 45.248.132.0/22 -add china_ip_route 45.248.204.0/22 -add china_ip_route 45.248.208.0/22 -add china_ip_route 45.248.212.0/22 -add china_ip_route 45.248.216.0/22 -add china_ip_route 45.248.220.0/22 -add china_ip_route 45.248.224.0/22 -add china_ip_route 45.248.228.0/22 -add china_ip_route 45.248.232.0/22 -add china_ip_route 45.248.236.0/22 -add china_ip_route 45.248.240.0/22 -add china_ip_route 45.248.244.0/22 -add china_ip_route 45.248.248.0/22 -add china_ip_route 45.248.252.0/22 -add china_ip_route 45.249.0.0/22 -add china_ip_route 45.249.4.0/22 -add china_ip_route 45.249.12.0/22 -add china_ip_route 45.249.16.0/22 -add china_ip_route 45.249.20.0/22 -add china_ip_route 45.249.24.0/22 -add china_ip_route 45.249.28.0/22 -add china_ip_route 45.249.32.0/22 -add china_ip_route 45.249.36.0/22 -add china_ip_route 45.249.92.0/22 -add china_ip_route 45.249.112.0/22 -add china_ip_route 45.249.188.0/22 -add china_ip_route 45.249.192.0/22 -add china_ip_route 45.249.196.0/22 -add china_ip_route 45.249.200.0/22 -add china_ip_route 45.249.204.0/22 -add china_ip_route 45.249.208.0/22 -add china_ip_route 45.249.212.0/22 -add china_ip_route 45.250.12.0/22 -add china_ip_route 45.250.16.0/22 -add china_ip_route 45.250.28.0/22 -add china_ip_route 45.250.32.0/22 -add china_ip_route 45.250.36.0/22 -add china_ip_route 45.250.40.0/22 -add china_ip_route 45.250.76.0/22 -add china_ip_route 45.250.80.0/22 -add china_ip_route 45.250.84.0/22 -add china_ip_route 45.250.88.0/22 -add china_ip_route 45.250.92.0/22 -add china_ip_route 45.250.96.0/22 -add china_ip_route 45.250.104.0/22 -add china_ip_route 45.250.108.0/22 -add china_ip_route 45.250.112.0/22 -add china_ip_route 45.250.116.0/22 -add china_ip_route 45.250.120.0/22 -add china_ip_route 45.250.124.0/22 -add china_ip_route 45.250.128.0/22 -add china_ip_route 45.250.132.0/22 -add china_ip_route 45.250.136.0/22 -add china_ip_route 45.250.140.0/22 -add china_ip_route 45.250.144.0/22 -add china_ip_route 45.250.148.0/22 -add china_ip_route 45.250.152.0/22 -add china_ip_route 45.250.164.0/22 -add china_ip_route 45.250.180.0/22 -add china_ip_route 45.250.184.0/22 -add china_ip_route 45.250.188.0/22 -add china_ip_route 45.250.192.0/22 -add china_ip_route 45.251.0.0/22 -add china_ip_route 45.251.8.0/22 -add china_ip_route 45.251.16.0/22 -add china_ip_route 45.251.20.0/22 -add china_ip_route 45.251.52.0/22 -add china_ip_route 45.251.84.0/22 -add china_ip_route 45.251.88.0/22 -add china_ip_route 45.251.92.0/22 -add china_ip_route 45.251.96.0/22 -add china_ip_route 45.251.100.0/22 -add china_ip_route 45.251.120.0/22 -add china_ip_route 45.251.124.0/22 -add china_ip_route 45.251.136.0/22 -add china_ip_route 45.251.140.0/22 -add china_ip_route 45.251.144.0/22 -add china_ip_route 45.251.148.0/22 -add china_ip_route 45.251.152.0/22 -add china_ip_route 45.251.156.0/22 -add china_ip_route 45.251.160.0/22 -add china_ip_route 45.251.164.0/22 -add china_ip_route 45.251.168.0/22 -add china_ip_route 45.251.172.0/22 -add china_ip_route 45.251.176.0/22 -add china_ip_route 45.251.180.0/22 -add china_ip_route 45.251.184.0/22 -add china_ip_route 45.251.188.0/22 -add china_ip_route 45.251.192.0/22 -add china_ip_route 45.251.196.0/22 -add china_ip_route 45.251.200.0/22 -add china_ip_route 45.251.204.0/22 -add china_ip_route 45.251.208.0/22 -add china_ip_route 45.251.212.0/22 -add china_ip_route 45.251.216.0/22 -add china_ip_route 45.251.220.0/22 -add china_ip_route 45.251.224.0/22 -add china_ip_route 45.251.240.0/22 -add china_ip_route 45.252.0.0/22 -add china_ip_route 45.252.4.0/22 -add china_ip_route 45.252.8.0/22 -add china_ip_route 45.252.12.0/22 -add china_ip_route 45.252.16.0/22 -add china_ip_route 45.252.20.0/22 -add china_ip_route 45.252.24.0/22 -add china_ip_route 45.252.28.0/22 -add china_ip_route 45.252.32.0/22 -add china_ip_route 45.252.36.0/22 -add china_ip_route 45.252.40.0/22 -add china_ip_route 45.252.44.0/22 -add china_ip_route 45.252.48.0/22 -add china_ip_route 45.252.60.0/22 -add china_ip_route 45.252.84.0/22 -add china_ip_route 45.252.88.0/22 -add china_ip_route 45.252.92.0/22 -add china_ip_route 45.252.96.0/22 -add china_ip_route 45.252.100.0/22 -add china_ip_route 45.252.104.0/22 -add china_ip_route 45.252.108.0/22 -add china_ip_route 45.252.112.0/22 -add china_ip_route 45.252.116.0/22 -add china_ip_route 45.252.120.0/22 -add china_ip_route 45.252.124.0/22 -add china_ip_route 45.252.128.0/22 -add china_ip_route 45.252.132.0/22 -add china_ip_route 45.252.136.0/22 -add china_ip_route 45.252.140.0/22 -add china_ip_route 45.252.144.0/22 -add china_ip_route 45.252.148.0/22 -add china_ip_route 45.252.152.0/22 -add china_ip_route 45.252.156.0/22 -add china_ip_route 45.252.160.0/22 -add china_ip_route 45.252.164.0/22 -add china_ip_route 45.252.168.0/22 -add china_ip_route 45.252.172.0/22 -add china_ip_route 45.252.176.0/22 -add china_ip_route 45.252.192.0/22 -add china_ip_route 45.252.196.0/22 -add china_ip_route 45.252.200.0/22 -add china_ip_route 45.252.204.0/22 -add china_ip_route 45.252.208.0/22 -add china_ip_route 45.252.212.0/22 -add china_ip_route 45.252.216.0/22 -add china_ip_route 45.252.220.0/22 -add china_ip_route 45.252.224.0/22 -add china_ip_route 45.252.228.0/22 -add china_ip_route 45.252.232.0/22 -add china_ip_route 45.253.0.0/22 -add china_ip_route 45.253.4.0/22 -add china_ip_route 45.253.8.0/22 -add china_ip_route 45.253.12.0/22 -add china_ip_route 45.253.16.0/22 -add china_ip_route 45.253.20.0/22 -add china_ip_route 45.253.24.0/22 -add china_ip_route 45.253.28.0/22 -add china_ip_route 45.253.32.0/22 -add china_ip_route 45.253.36.0/22 -add china_ip_route 45.253.40.0/22 -add china_ip_route 45.253.44.0/22 -add china_ip_route 45.253.48.0/22 -add china_ip_route 45.253.52.0/22 -add china_ip_route 45.253.56.0/22 -add china_ip_route 45.253.60.0/22 -add china_ip_route 45.253.64.0/22 -add china_ip_route 45.253.68.0/22 -add china_ip_route 45.253.72.0/22 -add china_ip_route 45.253.76.0/22 -add china_ip_route 45.253.80.0/22 -add china_ip_route 45.253.84.0/22 -add china_ip_route 45.253.92.0/22 -add china_ip_route 45.253.96.0/22 -add china_ip_route 45.253.100.0/22 -add china_ip_route 45.253.104.0/22 -add china_ip_route 45.253.108.0/22 -add china_ip_route 45.253.112.0/22 -add china_ip_route 45.253.116.0/22 -add china_ip_route 45.253.120.0/22 -add china_ip_route 45.253.132.0/22 -add china_ip_route 45.253.136.0/22 -add china_ip_route 45.253.140.0/22 -add china_ip_route 45.253.144.0/22 -add china_ip_route 45.253.148.0/22 -add china_ip_route 45.253.152.0/22 -add china_ip_route 45.253.156.0/22 -add china_ip_route 45.253.160.0/22 -add china_ip_route 45.253.164.0/22 -add china_ip_route 45.253.168.0/22 -add china_ip_route 45.253.172.0/22 -add china_ip_route 45.253.176.0/22 -add china_ip_route 45.253.180.0/22 -add china_ip_route 45.253.184.0/22 -add china_ip_route 45.253.188.0/22 -add china_ip_route 45.253.192.0/22 -add china_ip_route 45.253.196.0/22 -add china_ip_route 45.253.200.0/22 -add china_ip_route 45.253.204.0/22 -add china_ip_route 45.253.208.0/22 -add china_ip_route 45.253.212.0/22 -add china_ip_route 45.253.216.0/22 -add china_ip_route 45.253.220.0/22 -add china_ip_route 45.253.224.0/22 -add china_ip_route 45.253.228.0/22 -add china_ip_route 45.253.232.0/22 -add china_ip_route 45.253.236.0/22 -add china_ip_route 45.253.240.0/22 -add china_ip_route 45.253.244.0/22 -add china_ip_route 45.254.0.0/22 -add china_ip_route 45.254.4.0/22 -add china_ip_route 45.254.8.0/22 -add china_ip_route 45.254.12.0/22 -add china_ip_route 45.254.16.0/22 -add china_ip_route 45.254.20.0/22 -add china_ip_route 45.254.24.0/22 -add china_ip_route 45.254.28.0/22 -add china_ip_route 45.254.40.0/22 -add china_ip_route 45.254.48.0/22 -add china_ip_route 45.254.52.0/22 -add china_ip_route 45.254.56.0/22 -add china_ip_route 45.254.60.0/22 -add china_ip_route 45.254.64.0/22 -add china_ip_route 45.254.68.0/22 -add china_ip_route 45.254.72.0/22 -add china_ip_route 45.254.76.0/22 -add china_ip_route 45.254.80.0/22 -add china_ip_route 45.254.84.0/22 -add china_ip_route 45.254.88.0/22 -add china_ip_route 45.254.92.0/22 -add china_ip_route 45.254.96.0/22 -add china_ip_route 45.254.100.0/22 -add china_ip_route 45.254.104.0/22 -add china_ip_route 45.254.108.0/22 -add china_ip_route 45.254.112.0/22 -add china_ip_route 45.254.116.0/22 -add china_ip_route 45.254.120.0/22 -add china_ip_route 45.254.124.0/22 -add china_ip_route 45.254.128.0/22 -add china_ip_route 45.254.132.0/22 -add china_ip_route 45.254.136.0/22 -add china_ip_route 45.254.140.0/22 -add china_ip_route 45.254.144.0/22 -add china_ip_route 45.254.148.0/22 -add china_ip_route 45.254.152.0/22 -add china_ip_route 45.254.156.0/22 -add china_ip_route 45.254.160.0/22 -add china_ip_route 45.254.164.0/22 -add china_ip_route 45.254.168.0/22 -add china_ip_route 45.254.172.0/22 -add china_ip_route 45.254.176.0/22 -add china_ip_route 45.254.180.0/22 -add china_ip_route 45.254.184.0/22 -add china_ip_route 45.254.188.0/22 -add china_ip_route 45.254.192.0/22 -add china_ip_route 45.254.196.0/22 -add china_ip_route 45.254.200.0/22 -add china_ip_route 45.254.204.0/22 -add china_ip_route 45.254.208.0/22 -add china_ip_route 45.254.212.0/22 -add china_ip_route 45.254.216.0/22 -add china_ip_route 45.254.220.0/22 -add china_ip_route 45.254.224.0/22 -add china_ip_route 45.254.228.0/22 -add china_ip_route 45.254.236.0/22 -add china_ip_route 45.254.240.0/22 -add china_ip_route 45.254.248.0/22 -add china_ip_route 45.255.0.0/22 -add china_ip_route 45.255.4.0/22 -add china_ip_route 45.255.8.0/22 -add china_ip_route 45.255.12.0/22 -add china_ip_route 45.255.16.0/22 -add china_ip_route 45.255.20.0/22 -add china_ip_route 45.255.24.0/22 -add china_ip_route 45.255.28.0/22 -add china_ip_route 45.255.32.0/22 -add china_ip_route 45.255.36.0/22 -add china_ip_route 45.255.40.0/22 -add china_ip_route 45.255.44.0/22 -add china_ip_route 45.255.48.0/22 -add china_ip_route 45.255.52.0/22 -add china_ip_route 45.255.56.0/22 -add china_ip_route 45.255.60.0/22 -add china_ip_route 45.255.64.0/22 -add china_ip_route 45.255.68.0/22 -add china_ip_route 45.255.72.0/22 -add china_ip_route 45.255.76.0/22 -add china_ip_route 45.255.80.0/22 -add china_ip_route 45.255.84.0/22 -add china_ip_route 45.255.88.0/22 -add china_ip_route 45.255.92.0/22 -add china_ip_route 45.255.96.0/22 -add china_ip_route 45.255.100.0/22 -add china_ip_route 45.255.104.0/22 -add china_ip_route 45.255.108.0/22 -add china_ip_route 45.255.112.0/22 -add china_ip_route 45.255.116.0/22 -add china_ip_route 45.255.120.0/22 -add china_ip_route 45.255.124.0/22 -add china_ip_route 45.255.132.0/22 -add china_ip_route 45.255.136.0/22 -add china_ip_route 45.255.140.0/22 -add china_ip_route 45.255.144.0/22 -add china_ip_route 45.255.148.0/22 -add china_ip_route 45.255.152.0/22 -add china_ip_route 45.255.156.0/22 -add china_ip_route 45.255.160.0/22 -add china_ip_route 45.255.164.0/22 -add china_ip_route 45.255.168.0/22 -add china_ip_route 45.255.172.0/22 -add china_ip_route 45.255.176.0/22 -add china_ip_route 45.255.180.0/22 -add china_ip_route 45.255.184.0/22 -add china_ip_route 45.255.188.0/22 -add china_ip_route 45.255.192.0/22 -add china_ip_route 45.255.196.0/22 -add china_ip_route 45.255.200.0/22 -add china_ip_route 45.255.204.0/22 -add china_ip_route 45.255.208.0/22 -add china_ip_route 45.255.212.0/22 -add china_ip_route 45.255.216.0/22 -add china_ip_route 45.255.220.0/22 -add china_ip_route 45.255.224.0/22 -add china_ip_route 45.255.228.0/22 -add china_ip_route 45.255.232.0/22 -add china_ip_route 45.255.236.0/22 -add china_ip_route 45.255.240.0/22 -add china_ip_route 45.255.244.0/22 -add china_ip_route 45.255.248.0/22 -add china_ip_route 47.92.0.0/14 -add china_ip_route 47.96.0.0/11 -add china_ip_route 49.4.0.0/14 -add china_ip_route 49.51.0.0/16 -add china_ip_route 49.52.0.0/14 -add china_ip_route 49.64.0.0/11 -add china_ip_route 49.112.0.0/13 -add china_ip_route 49.120.0.0/14 -add china_ip_route 49.128.0.0/24 -add china_ip_route 49.128.2.0/23 -add china_ip_route 49.128.4.0/22 -add china_ip_route 49.140.0.0/15 -add china_ip_route 49.152.0.0/14 -add china_ip_route 49.208.0.0/15 -add china_ip_route 49.210.0.0/15 -add china_ip_route 49.220.0.0/14 -add china_ip_route 49.232.0.0/14 -add china_ip_route 49.239.0.0/18 -add china_ip_route 49.239.192.0/18 -add china_ip_route 49.246.224.0/19 -add china_ip_route 52.80.0.0/15 -add china_ip_route 52.82.0.0/15 -add china_ip_route 52.130.0.0/15 -add china_ip_route 54.222.0.0/15 -add china_ip_route 58.14.0.0/15 -add china_ip_route 58.16.0.0/16 -add china_ip_route 58.17.0.0/17 -add china_ip_route 58.17.128.0/17 -add china_ip_route 58.18.0.0/16 -add china_ip_route 58.19.0.0/16 -add china_ip_route 58.20.0.0/16 -add china_ip_route 58.21.0.0/16 -add china_ip_route 58.22.0.0/15 -add china_ip_route 58.24.0.0/15 -add china_ip_route 58.30.0.0/15 -add china_ip_route 58.32.0.0/13 -add china_ip_route 58.40.0.0/15 -add china_ip_route 58.42.0.0/16 -add china_ip_route 58.43.0.0/16 -add china_ip_route 58.44.0.0/14 -add china_ip_route 58.48.0.0/13 -add china_ip_route 58.56.0.0/15 -add china_ip_route 58.58.0.0/16 -add china_ip_route 58.59.0.0/17 -add china_ip_route 58.59.128.0/17 -add china_ip_route 58.60.0.0/14 -add china_ip_route 58.65.232.0/21 -add china_ip_route 58.66.0.0/15 -add china_ip_route 58.68.128.0/17 -add china_ip_route 58.82.0.0/17 -add china_ip_route 58.83.0.0/17 -add china_ip_route 58.83.128.0/17 -add china_ip_route 58.87.64.0/18 -add china_ip_route 58.99.128.0/17 -add china_ip_route 58.100.0.0/15 -add china_ip_route 58.116.0.0/14 -add china_ip_route 58.128.0.0/13 -add china_ip_route 58.144.0.0/16 -add china_ip_route 58.154.0.0/15 -add china_ip_route 58.192.0.0/15 -add china_ip_route 58.194.0.0/15 -add china_ip_route 58.196.0.0/15 -add china_ip_route 58.198.0.0/15 -add china_ip_route 58.200.0.0/13 -add china_ip_route 58.208.0.0/12 -add china_ip_route 58.240.0.0/15 -add china_ip_route 58.242.0.0/15 -add china_ip_route 58.244.0.0/15 -add china_ip_route 58.246.0.0/15 -add china_ip_route 58.248.0.0/13 -add china_ip_route 59.32.0.0/13 -add china_ip_route 59.40.0.0/15 -add china_ip_route 59.42.0.0/16 -add china_ip_route 59.43.0.0/16 -add china_ip_route 59.44.0.0/14 -add china_ip_route 59.48.0.0/16 -add china_ip_route 59.49.0.0/17 -add china_ip_route 59.49.128.0/17 -add china_ip_route 59.50.0.0/16 -add china_ip_route 59.51.0.0/17 -add china_ip_route 59.51.128.0/17 -add china_ip_route 59.52.0.0/14 -add china_ip_route 59.56.0.0/14 -add china_ip_route 59.60.0.0/15 -add china_ip_route 59.62.0.0/15 -add china_ip_route 59.64.0.0/14 -add china_ip_route 59.68.0.0/14 -add china_ip_route 59.72.0.0/15 -add china_ip_route 59.74.0.0/15 -add china_ip_route 59.76.0.0/16 -add china_ip_route 59.77.0.0/16 -add china_ip_route 59.78.0.0/15 -add china_ip_route 59.80.0.0/15 -add china_ip_route 59.82.0.0/15 -add china_ip_route 59.107.0.0/17 -add china_ip_route 59.107.128.0/17 -add china_ip_route 59.108.0.0/15 -add china_ip_route 59.110.0.0/15 -add china_ip_route 59.151.0.0/17 -add china_ip_route 59.152.16.0/22 -add china_ip_route 59.152.20.0/22 -add china_ip_route 59.152.24.0/22 -add china_ip_route 59.152.28.0/22 -add china_ip_route 59.152.32.0/22 -add china_ip_route 59.152.36.0/22 -add china_ip_route 59.152.64.0/22 -add china_ip_route 59.152.68.0/22 -add china_ip_route 59.152.72.0/22 -add china_ip_route 59.152.76.0/22 -add china_ip_route 59.152.112.0/22 -add china_ip_route 59.152.116.0/22 -add china_ip_route 59.153.4.0/22 -add china_ip_route 59.153.32.0/22 -add china_ip_route 59.153.60.0/22 -add china_ip_route 59.153.64.0/22 -add china_ip_route 59.153.68.0/22 -add china_ip_route 59.153.72.0/22 -add china_ip_route 59.153.92.0/22 -add china_ip_route 59.153.116.0/22 -add china_ip_route 59.153.136.0/22 -add china_ip_route 59.153.152.0/22 -add china_ip_route 59.153.156.0/22 -add china_ip_route 59.153.164.0/22 -add china_ip_route 59.153.168.0/22 -add china_ip_route 59.153.172.0/22 -add china_ip_route 59.153.176.0/22 -add china_ip_route 59.153.180.0/22 -add china_ip_route 59.153.184.0/22 -add china_ip_route 59.153.188.0/22 -add china_ip_route 59.153.192.0/22 -add china_ip_route 59.155.0.0/16 -add china_ip_route 59.172.0.0/15 -add china_ip_route 59.174.0.0/15 -add china_ip_route 59.191.0.0/17 -add china_ip_route 59.191.240.0/20 -add china_ip_route 59.192.0.0/10 -add china_ip_route 60.0.0.0/13 -add china_ip_route 60.8.0.0/15 -add china_ip_route 60.10.0.0/16 -add china_ip_route 60.11.0.0/16 -add china_ip_route 60.12.0.0/16 -add china_ip_route 60.13.0.0/18 -add china_ip_route 60.13.64.0/18 -add china_ip_route 60.13.128.0/17 -add china_ip_route 60.14.0.0/15 -add china_ip_route 60.16.0.0/13 -add china_ip_route 60.24.0.0/14 -add china_ip_route 60.28.0.0/15 -add china_ip_route 60.30.0.0/16 -add china_ip_route 60.31.0.0/16 -add china_ip_route 60.55.0.0/16 -add china_ip_route 60.63.0.0/16 -add china_ip_route 60.160.0.0/15 -add china_ip_route 60.162.0.0/15 -add china_ip_route 60.164.0.0/15 -add china_ip_route 60.166.0.0/15 -add china_ip_route 60.168.0.0/13 -add china_ip_route 60.176.0.0/12 -add china_ip_route 60.194.0.0/15 -add china_ip_route 60.200.0.0/14 -add china_ip_route 60.204.0.0/16 -add china_ip_route 60.205.0.0/16 -add china_ip_route 60.206.0.0/15 -add china_ip_route 60.208.0.0/13 -add china_ip_route 60.216.0.0/15 -add china_ip_route 60.218.0.0/15 -add china_ip_route 60.220.0.0/14 -add china_ip_route 60.232.0.0/15 -add china_ip_route 60.235.0.0/16 -add china_ip_route 60.245.128.0/17 -add china_ip_route 60.247.0.0/16 -add china_ip_route 60.252.0.0/16 -add china_ip_route 60.253.128.0/17 -add china_ip_route 60.255.0.0/16 -add china_ip_route 61.4.80.0/22 -add china_ip_route 61.4.84.0/22 -add china_ip_route 61.4.88.0/21 -add china_ip_route 61.4.176.0/20 -add china_ip_route 61.8.160.0/20 -add china_ip_route 61.14.212.0/22 -add china_ip_route 61.14.216.0/22 -add china_ip_route 61.14.220.0/22 -add china_ip_route 61.14.240.0/22 -add china_ip_route 61.14.244.0/22 -add china_ip_route 61.28.0.0/20 -add china_ip_route 61.28.16.0/20 -add china_ip_route 61.28.32.0/19 -add china_ip_route 61.28.64.0/18 -add china_ip_route 61.29.128.0/18 -add china_ip_route 61.29.192.0/19 -add china_ip_route 61.29.224.0/20 -add china_ip_route 61.29.240.0/21 -add china_ip_route 61.29.248.0/22 -add china_ip_route 61.29.254.0/23 -add china_ip_route 61.45.128.0/18 -add china_ip_route 61.45.224.0/20 -add china_ip_route 61.47.128.0/18 -add china_ip_route 61.48.0.0/14 -add china_ip_route 61.52.0.0/15 -add china_ip_route 61.54.0.0/16 -add china_ip_route 61.55.0.0/16 -add china_ip_route 61.87.192.0/18 -add china_ip_route 61.128.0.0/15 -add china_ip_route 61.130.0.0/15 -add china_ip_route 61.132.0.0/16 -add china_ip_route 61.133.0.0/17 -add china_ip_route 61.133.128.0/17 -add china_ip_route 61.134.0.0/18 -add china_ip_route 61.134.64.0/19 -add china_ip_route 61.134.96.0/19 -add china_ip_route 61.134.128.0/18 -add china_ip_route 61.134.192.0/18 -add china_ip_route 61.135.0.0/16 -add china_ip_route 61.136.0.0/18 -add china_ip_route 61.136.64.0/18 -add china_ip_route 61.136.128.0/17 -add china_ip_route 61.137.0.0/17 -add china_ip_route 61.137.128.0/17 -add china_ip_route 61.138.0.0/18 -add china_ip_route 61.138.64.0/18 -add china_ip_route 61.138.128.0/18 -add china_ip_route 61.138.192.0/18 -add china_ip_route 61.139.0.0/17 -add china_ip_route 61.139.128.0/18 -add china_ip_route 61.139.192.0/18 -add china_ip_route 61.140.0.0/14 -add china_ip_route 61.144.0.0/14 -add china_ip_route 61.148.0.0/15 -add china_ip_route 61.150.0.0/15 -add china_ip_route 61.152.0.0/16 -add china_ip_route 61.153.0.0/16 -add china_ip_route 61.154.0.0/15 -add china_ip_route 61.156.0.0/16 -add china_ip_route 61.157.0.0/16 -add china_ip_route 61.158.0.0/17 -add china_ip_route 61.158.128.0/17 -add china_ip_route 61.159.0.0/18 -add china_ip_route 61.159.64.0/18 -add china_ip_route 61.159.128.0/17 -add china_ip_route 61.160.0.0/16 -add china_ip_route 61.161.0.0/18 -add china_ip_route 61.161.64.0/18 -add china_ip_route 61.161.128.0/17 -add china_ip_route 61.162.0.0/16 -add china_ip_route 61.163.0.0/16 -add china_ip_route 61.164.0.0/16 -add china_ip_route 61.165.0.0/16 -add china_ip_route 61.166.0.0/16 -add china_ip_route 61.167.0.0/16 -add china_ip_route 61.168.0.0/16 -add china_ip_route 61.169.0.0/16 -add china_ip_route 61.170.0.0/15 -add china_ip_route 61.172.0.0/14 -add china_ip_route 61.176.0.0/16 -add china_ip_route 61.177.0.0/16 -add china_ip_route 61.178.0.0/16 -add china_ip_route 61.179.0.0/16 -add china_ip_route 61.180.0.0/17 -add china_ip_route 61.180.128.0/17 -add china_ip_route 61.181.0.0/16 -add china_ip_route 61.182.0.0/16 -add china_ip_route 61.183.0.0/16 -add china_ip_route 61.184.0.0/14 -add china_ip_route 61.188.0.0/16 -add china_ip_route 61.189.0.0/17 -add china_ip_route 61.189.128.0/17 -add china_ip_route 61.190.0.0/15 -add china_ip_route 61.232.0.0/14 -add china_ip_route 61.236.0.0/15 -add china_ip_route 61.240.0.0/14 -add china_ip_route 62.234.0.0/16 -add china_ip_route 68.79.0.0/18 -add china_ip_route 69.230.192.0/18 -add china_ip_route 69.231.128.0/18 -add china_ip_route 69.234.192.0/18 -add china_ip_route 69.235.128.0/18 -add china_ip_route 71.131.192.0/18 -add china_ip_route 71.132.0.0/18 -add china_ip_route 71.136.64.0/18 -add china_ip_route 71.137.0.0/18 -add china_ip_route 81.68.0.0/14 -add china_ip_route 82.156.0.0/15 -add china_ip_route 94.191.0.0/17 -add china_ip_route 101.0.0.0/22 -add china_ip_route 101.1.0.0/22 -add china_ip_route 101.2.172.0/22 -add china_ip_route 101.4.0.0/14 -add china_ip_route 101.16.0.0/12 -add china_ip_route 101.33.128.0/17 -add china_ip_route 101.34.0.0/15 -add china_ip_route 101.36.0.0/18 -add china_ip_route 101.36.64.0/19 -add china_ip_route 101.36.128.0/17 -add china_ip_route 101.37.0.0/16 -add china_ip_route 101.38.0.0/15 -add china_ip_route 101.40.0.0/15 -add china_ip_route 101.42.0.0/15 -add china_ip_route 101.44.0.0/14 -add china_ip_route 101.48.0.0/15 -add china_ip_route 101.50.8.0/22 -add china_ip_route 101.50.12.0/22 -add china_ip_route 101.50.56.0/22 -add china_ip_route 101.52.0.0/16 -add china_ip_route 101.53.100.0/22 -add china_ip_route 101.54.0.0/16 -add china_ip_route 101.55.224.0/21 -add china_ip_route 101.64.0.0/13 -add china_ip_route 101.72.0.0/14 -add china_ip_route 101.76.0.0/15 -add china_ip_route 101.78.0.0/22 -add china_ip_route 101.78.32.0/19 -add china_ip_route 101.80.0.0/12 -add china_ip_route 101.96.0.0/21 -add china_ip_route 101.96.8.0/22 -add china_ip_route 101.96.16.0/20 -add china_ip_route 101.96.128.0/17 -add china_ip_route 101.99.96.0/19 -add china_ip_route 101.101.64.0/19 -add china_ip_route 101.101.100.0/24 -add china_ip_route 101.101.102.0/23 -add china_ip_route 101.101.104.0/21 -add china_ip_route 101.101.112.0/20 -add china_ip_route 101.102.64.0/19 -add china_ip_route 101.102.100.0/23 -add china_ip_route 101.102.102.0/24 -add china_ip_route 101.102.104.0/21 -add china_ip_route 101.102.112.0/20 -add china_ip_route 101.104.0.0/14 -add china_ip_route 101.110.64.0/19 -add china_ip_route 101.110.96.0/20 -add china_ip_route 101.110.116.0/22 -add china_ip_route 101.110.120.0/21 -add china_ip_route 101.120.0.0/14 -add china_ip_route 101.124.0.0/15 -add china_ip_route 101.126.0.0/16 -add china_ip_route 101.128.0.0/22 -add china_ip_route 101.128.8.0/21 -add china_ip_route 101.128.16.0/20 -add china_ip_route 101.128.32.0/19 -add china_ip_route 101.129.0.0/16 -add china_ip_route 101.130.0.0/15 -add china_ip_route 101.132.0.0/14 -add china_ip_route 101.144.0.0/12 -add china_ip_route 101.192.0.0/14 -add china_ip_route 101.196.0.0/16 -add china_ip_route 101.197.0.0/16 -add china_ip_route 101.198.0.0/15 -add china_ip_route 101.200.0.0/15 -add china_ip_route 101.203.128.0/19 -add china_ip_route 101.203.160.0/21 -add china_ip_route 101.203.172.0/22 -add china_ip_route 101.203.176.0/20 -add china_ip_route 101.204.0.0/14 -add china_ip_route 101.224.0.0/13 -add china_ip_route 101.232.0.0/15 -add china_ip_route 101.234.64.0/21 -add china_ip_route 101.234.76.0/22 -add china_ip_route 101.234.80.0/20 -add china_ip_route 101.234.96.0/19 -add china_ip_route 101.236.0.0/14 -add china_ip_route 101.240.0.0/14 -add china_ip_route 101.244.0.0/14 -add china_ip_route 101.248.0.0/15 -add china_ip_route 101.251.0.0/22 -add china_ip_route 101.251.8.0/21 -add china_ip_route 101.251.16.0/20 -add china_ip_route 101.251.32.0/19 -add china_ip_route 101.251.64.0/18 -add china_ip_route 101.251.128.0/17 -add china_ip_route 101.252.0.0/15 -add china_ip_route 101.254.0.0/16 -add china_ip_route 103.1.8.0/22 -add china_ip_route 103.1.20.0/22 -add china_ip_route 103.1.24.0/22 -add china_ip_route 103.1.72.0/22 -add china_ip_route 103.1.88.0/22 -add china_ip_route 103.1.168.0/22 -add china_ip_route 103.2.108.0/22 -add china_ip_route 103.2.156.0/22 -add china_ip_route 103.2.164.0/22 -add china_ip_route 103.2.200.0/22 -add china_ip_route 103.2.204.0/22 -add china_ip_route 103.2.208.0/22 -add china_ip_route 103.2.212.0/22 -add china_ip_route 103.3.84.0/22 -add china_ip_route 103.3.88.0/22 -add china_ip_route 103.3.92.0/22 -add china_ip_route 103.3.96.0/22 -add china_ip_route 103.3.100.0/22 -add china_ip_route 103.3.104.0/22 -add china_ip_route 103.3.108.0/22 -add china_ip_route 103.3.112.0/22 -add china_ip_route 103.3.116.0/22 -add china_ip_route 103.3.120.0/22 -add china_ip_route 103.3.124.0/22 -add china_ip_route 103.3.128.0/22 -add china_ip_route 103.3.132.0/22 -add china_ip_route 103.3.136.0/22 -add china_ip_route 103.3.140.0/22 -add china_ip_route 103.3.148.0/22 -add china_ip_route 103.3.152.0/22 -add china_ip_route 103.3.156.0/22 -add china_ip_route 103.4.56.0/22 -add china_ip_route 103.4.168.0/22 -add china_ip_route 103.4.184.0/22 -add china_ip_route 103.4.224.0/22 -add china_ip_route 103.5.36.0/22 -add china_ip_route 103.5.52.0/22 -add china_ip_route 103.5.56.0/22 -add china_ip_route 103.5.152.0/22 -add china_ip_route 103.5.168.0/22 -add china_ip_route 103.5.192.0/22 -add china_ip_route 103.5.252.0/22 -add china_ip_route 103.6.76.0/22 -add china_ip_route 103.6.108.0/22 -add china_ip_route 103.6.220.0/22 -add china_ip_route 103.6.228.0/22 -add china_ip_route 103.7.4.0/22 -add china_ip_route 103.7.28.0/22 -add china_ip_route 103.7.140.0/22 -add china_ip_route 103.7.212.0/22 -add china_ip_route 103.7.216.0/22 -add china_ip_route 103.7.220.0/22 -add china_ip_route 103.8.0.0/22 -add china_ip_route 103.8.4.0/22 -add china_ip_route 103.8.8.0/22 -add china_ip_route 103.8.32.0/22 -add china_ip_route 103.8.52.0/22 -add china_ip_route 103.8.68.0/22 -add china_ip_route 103.8.108.0/22 -add china_ip_route 103.8.156.0/22 -add china_ip_route 103.8.200.0/22 -add china_ip_route 103.8.204.0/22 -add china_ip_route 103.8.220.0/22 -add china_ip_route 103.9.8.0/22 -add china_ip_route 103.9.24.0/22 -add china_ip_route 103.9.108.0/22 -add china_ip_route 103.9.152.0/22 -add china_ip_route 103.9.192.0/22 -add china_ip_route 103.9.248.0/22 -add china_ip_route 103.9.252.0/22 -add china_ip_route 103.10.0.0/22 -add china_ip_route 103.10.16.0/22 -add china_ip_route 103.10.84.0/22 -add china_ip_route 103.10.140.0/22 -add china_ip_route 103.11.16.0/22 -add china_ip_route 103.11.168.0/22 -add china_ip_route 103.11.180.0/22 -add china_ip_route 103.12.32.0/22 -add china_ip_route 103.12.68.0/22 -add china_ip_route 103.12.92.0/22 -add china_ip_route 103.12.136.0/22 -add china_ip_route 103.12.184.0/22 -add china_ip_route 103.12.232.0/22 -add china_ip_route 103.13.12.0/22 -add china_ip_route 103.13.124.0/22 -add china_ip_route 103.13.144.0/22 -add china_ip_route 103.13.196.0/22 -add china_ip_route 103.13.220.0/22 -add china_ip_route 103.13.244.0/22 -add china_ip_route 103.14.32.0/22 -add china_ip_route 103.14.84.0/22 -add china_ip_route 103.14.100.0/22 -add china_ip_route 103.14.132.0/22 -add china_ip_route 103.14.136.0/22 -add china_ip_route 103.14.156.0/22 -add china_ip_route 103.14.240.0/22 -add china_ip_route 103.15.4.0/22 -add china_ip_route 103.15.8.0/22 -add china_ip_route 103.15.16.0/22 -add china_ip_route 103.15.96.0/22 -add china_ip_route 103.15.200.0/22 -add china_ip_route 103.16.52.0/22 -add china_ip_route 103.16.80.0/22 -add china_ip_route 103.16.84.0/22 -add china_ip_route 103.16.88.0/22 -add china_ip_route 103.16.108.0/22 -add china_ip_route 103.16.124.0/22 -add china_ip_route 103.17.40.0/22 -add china_ip_route 103.17.64.0/22 -add china_ip_route 103.17.120.0/22 -add china_ip_route 103.17.136.0/22 -add china_ip_route 103.17.160.0/22 -add china_ip_route 103.17.204.0/22 -add china_ip_route 103.17.228.0/22 -add china_ip_route 103.18.192.0/22 -add china_ip_route 103.18.208.0/22 -add china_ip_route 103.18.212.0/22 -add china_ip_route 103.18.224.0/22 -add china_ip_route 103.19.12.0/22 -add china_ip_route 103.19.40.0/22 -add china_ip_route 103.19.44.0/22 -add china_ip_route 103.19.64.0/22 -add china_ip_route 103.19.68.0/22 -add china_ip_route 103.19.72.0/22 -add china_ip_route 103.19.232.0/22 -add china_ip_route 103.20.12.0/22 -add china_ip_route 103.20.32.0/22 -add china_ip_route 103.20.44.0/22 -add china_ip_route 103.20.68.0/22 -add china_ip_route 103.20.112.0/22 -add china_ip_route 103.20.128.0/22 -add china_ip_route 103.20.160.0/22 -add china_ip_route 103.20.248.0/22 -add china_ip_route 103.21.112.0/22 -add china_ip_route 103.21.116.0/22 -add china_ip_route 103.21.136.0/22 -add china_ip_route 103.21.140.0/22 -add china_ip_route 103.21.176.0/22 -add china_ip_route 103.21.208.0/22 -add china_ip_route 103.21.240.0/22 -add china_ip_route 103.22.0.0/22 -add china_ip_route 103.22.4.0/22 -add china_ip_route 103.22.8.0/22 -add china_ip_route 103.22.12.0/22 -add china_ip_route 103.22.16.0/22 -add china_ip_route 103.22.20.0/22 -add china_ip_route 103.22.24.0/22 -add china_ip_route 103.22.28.0/22 -add china_ip_route 103.22.32.0/22 -add china_ip_route 103.22.36.0/22 -add china_ip_route 103.22.40.0/22 -add china_ip_route 103.22.44.0/22 -add china_ip_route 103.22.48.0/22 -add china_ip_route 103.22.52.0/22 -add china_ip_route 103.22.56.0/22 -add china_ip_route 103.22.60.0/22 -add china_ip_route 103.22.64.0/22 -add china_ip_route 103.22.68.0/22 -add china_ip_route 103.22.72.0/22 -add china_ip_route 103.22.76.0/22 -add china_ip_route 103.22.80.0/22 -add china_ip_route 103.22.84.0/22 -add china_ip_route 103.22.88.0/22 -add china_ip_route 103.22.92.0/22 -add china_ip_route 103.22.100.0/22 -add china_ip_route 103.22.104.0/22 -add china_ip_route 103.22.108.0/22 -add china_ip_route 103.22.112.0/22 -add china_ip_route 103.22.116.0/22 -add china_ip_route 103.22.120.0/22 -add china_ip_route 103.22.124.0/22 -add china_ip_route 103.22.188.0/22 -add china_ip_route 103.22.228.0/22 -add china_ip_route 103.22.252.0/22 -add china_ip_route 103.23.8.0/22 -add china_ip_route 103.23.56.0/22 -add china_ip_route 103.23.160.0/22 -add china_ip_route 103.23.164.0/22 -add china_ip_route 103.23.176.0/22 -add china_ip_route 103.23.228.0/22 -add china_ip_route 103.24.24.0/22 -add china_ip_route 103.24.116.0/22 -add china_ip_route 103.24.128.0/22 -add china_ip_route 103.24.144.0/22 -add china_ip_route 103.24.176.0/22 -add china_ip_route 103.24.184.0/22 -add china_ip_route 103.24.220.0/22 -add china_ip_route 103.24.228.0/22 -add china_ip_route 103.24.248.0/22 -add china_ip_route 103.24.252.0/22 -add china_ip_route 103.25.8.0/23 -add china_ip_route 103.25.20.0/22 -add china_ip_route 103.25.24.0/22 -add china_ip_route 103.25.28.0/22 -add china_ip_route 103.25.32.0/22 -add china_ip_route 103.25.36.0/22 -add china_ip_route 103.25.40.0/22 -add china_ip_route 103.25.48.0/22 -add china_ip_route 103.25.64.0/22 -add china_ip_route 103.25.68.0/22 -add china_ip_route 103.25.148.0/22 -add china_ip_route 103.25.156.0/22 -add china_ip_route 103.25.216.0/22 -add china_ip_route 103.26.0.0/22 -add china_ip_route 103.26.64.0/22 -add china_ip_route 103.26.76.0/22 -add china_ip_route 103.26.132.0/22 -add china_ip_route 103.26.156.0/22 -add china_ip_route 103.26.160.0/22 -add china_ip_route 103.26.228.0/22 -add china_ip_route 103.26.240.0/22 -add china_ip_route 103.27.4.0/22 -add china_ip_route 103.27.12.0/22 -add china_ip_route 103.27.24.0/22 -add china_ip_route 103.27.56.0/22 -add china_ip_route 103.27.96.0/22 -add china_ip_route 103.27.184.0/22 -add china_ip_route 103.27.208.0/22 -add china_ip_route 103.27.212.0/22 -add china_ip_route 103.27.240.0/22 -add china_ip_route 103.28.4.0/22 -add china_ip_route 103.28.8.0/22 -add china_ip_route 103.28.184.0/22 -add china_ip_route 103.28.204.0/22 -add china_ip_route 103.28.212.0/22 -add china_ip_route 103.29.16.0/22 -add china_ip_route 103.29.128.0/22 -add china_ip_route 103.29.132.0/22 -add china_ip_route 103.29.136.0/22 -add china_ip_route 103.30.20.0/22 -add china_ip_route 103.30.96.0/22 -add china_ip_route 103.30.148.0/22 -add china_ip_route 103.30.200.0/22 -add china_ip_route 103.30.228.0/22 -add china_ip_route 103.30.236.0/22 -add china_ip_route 103.31.0.0/22 -add china_ip_route 103.31.48.0/22 -add china_ip_route 103.31.52.0/22 -add china_ip_route 103.31.56.0/22 -add china_ip_route 103.31.60.0/22 -add china_ip_route 103.31.64.0/22 -add china_ip_route 103.31.68.0/22 -add china_ip_route 103.31.148.0/22 -add china_ip_route 103.31.160.0/22 -add china_ip_route 103.31.168.0/22 -add china_ip_route 103.31.200.0/22 -add china_ip_route 103.31.236.0/22 -add china_ip_route 103.32.0.0/22 -add china_ip_route 103.32.4.0/22 -add china_ip_route 103.32.8.0/22 -add china_ip_route 103.32.12.0/22 -add china_ip_route 103.32.16.0/22 -add china_ip_route 103.32.20.0/22 -add china_ip_route 103.32.24.0/22 -add china_ip_route 103.32.28.0/22 -add china_ip_route 103.32.32.0/22 -add china_ip_route 103.32.36.0/22 -add china_ip_route 103.32.40.0/22 -add china_ip_route 103.32.44.0/22 -add china_ip_route 103.32.48.0/22 -add china_ip_route 103.32.52.0/22 -add china_ip_route 103.32.56.0/22 -add china_ip_route 103.32.60.0/22 -add china_ip_route 103.32.64.0/22 -add china_ip_route 103.32.68.0/22 -add china_ip_route 103.32.72.0/22 -add china_ip_route 103.32.76.0/22 -add china_ip_route 103.32.80.0/22 -add china_ip_route 103.32.84.0/22 -add china_ip_route 103.32.88.0/22 -add china_ip_route 103.32.92.0/22 -add china_ip_route 103.32.96.0/22 -add china_ip_route 103.32.100.0/22 -add china_ip_route 103.32.104.0/22 -add china_ip_route 103.32.108.0/22 -add china_ip_route 103.32.112.0/22 -add china_ip_route 103.32.116.0/22 -add china_ip_route 103.32.120.0/22 -add china_ip_route 103.32.124.0/22 -add china_ip_route 103.32.128.0/22 -add china_ip_route 103.32.132.0/22 -add china_ip_route 103.32.136.0/22 -add china_ip_route 103.32.140.0/22 -add china_ip_route 103.32.144.0/22 -add china_ip_route 103.32.148.0/22 -add china_ip_route 103.32.152.0/22 -add china_ip_route 103.32.156.0/22 -add china_ip_route 103.32.160.0/22 -add china_ip_route 103.32.164.0/22 -add china_ip_route 103.32.168.0/22 -add china_ip_route 103.32.172.0/22 -add china_ip_route 103.32.176.0/22 -add china_ip_route 103.32.180.0/22 -add china_ip_route 103.32.184.0/22 -add china_ip_route 103.32.188.0/22 -add china_ip_route 103.32.192.0/22 -add china_ip_route 103.32.196.0/22 -add china_ip_route 103.32.200.0/22 -add china_ip_route 103.32.204.0/22 -add china_ip_route 103.32.208.0/22 -add china_ip_route 103.32.212.0/22 -add china_ip_route 103.32.216.0/22 -add china_ip_route 103.32.220.0/22 -add china_ip_route 103.32.224.0/22 -add china_ip_route 103.32.228.0/22 -add china_ip_route 103.32.232.0/22 -add china_ip_route 103.32.236.0/22 -add china_ip_route 103.32.240.0/22 -add china_ip_route 103.32.244.0/22 -add china_ip_route 103.32.248.0/22 -add china_ip_route 103.32.252.0/22 -add china_ip_route 103.33.0.0/22 -add china_ip_route 103.33.4.0/22 -add china_ip_route 103.33.8.0/22 -add china_ip_route 103.33.12.0/22 -add china_ip_route 103.33.16.0/22 -add china_ip_route 103.33.20.0/22 -add china_ip_route 103.33.24.0/22 -add china_ip_route 103.33.28.0/22 -add china_ip_route 103.33.32.0/22 -add china_ip_route 103.33.36.0/22 -add china_ip_route 103.33.40.0/22 -add china_ip_route 103.33.44.0/22 -add china_ip_route 103.33.48.0/22 -add china_ip_route 103.33.52.0/22 -add china_ip_route 103.33.56.0/22 -add china_ip_route 103.33.60.0/22 -add china_ip_route 103.33.64.0/22 -add china_ip_route 103.33.68.0/22 -add china_ip_route 103.33.72.0/22 -add china_ip_route 103.33.76.0/22 -add china_ip_route 103.33.80.0/22 -add china_ip_route 103.33.84.0/22 -add china_ip_route 103.33.88.0/22 -add china_ip_route 103.33.92.0/22 -add china_ip_route 103.33.96.0/22 -add china_ip_route 103.33.100.0/22 -add china_ip_route 103.33.104.0/22 -add china_ip_route 103.33.108.0/22 -add china_ip_route 103.33.112.0/22 -add china_ip_route 103.33.116.0/22 -add china_ip_route 103.33.120.0/22 -add china_ip_route 103.33.124.0/22 -add china_ip_route 103.33.128.0/22 -add china_ip_route 103.33.132.0/22 -add china_ip_route 103.33.136.0/22 -add china_ip_route 103.33.140.0/22 -add china_ip_route 103.33.144.0/22 -add china_ip_route 103.33.148.0/22 -add china_ip_route 103.33.152.0/22 -add china_ip_route 103.33.156.0/22 -add china_ip_route 103.33.160.0/22 -add china_ip_route 103.33.164.0/22 -add china_ip_route 103.33.168.0/22 -add china_ip_route 103.33.172.0/22 -add china_ip_route 103.33.176.0/22 -add china_ip_route 103.33.180.0/22 -add china_ip_route 103.33.184.0/22 -add china_ip_route 103.33.188.0/22 -add china_ip_route 103.33.192.0/22 -add china_ip_route 103.33.196.0/22 -add china_ip_route 103.33.200.0/22 -add china_ip_route 103.33.204.0/22 -add china_ip_route 103.33.208.0/22 -add china_ip_route 103.33.212.0/22 -add china_ip_route 103.33.216.0/22 -add china_ip_route 103.33.220.0/22 -add china_ip_route 103.33.224.0/22 -add china_ip_route 103.33.228.0/22 -add china_ip_route 103.33.232.0/22 -add china_ip_route 103.33.236.0/22 -add china_ip_route 103.33.240.0/22 -add china_ip_route 103.33.244.0/22 -add china_ip_route 103.33.248.0/22 -add china_ip_route 103.33.252.0/22 -add china_ip_route 103.34.0.0/22 -add china_ip_route 103.34.4.0/22 -add china_ip_route 103.34.8.0/22 -add china_ip_route 103.34.12.0/22 -add china_ip_route 103.34.16.0/22 -add china_ip_route 103.34.20.0/22 -add china_ip_route 103.34.24.0/22 -add china_ip_route 103.34.28.0/22 -add china_ip_route 103.34.32.0/22 -add china_ip_route 103.34.36.0/22 -add china_ip_route 103.34.40.0/22 -add china_ip_route 103.34.44.0/22 -add china_ip_route 103.34.48.0/22 -add china_ip_route 103.34.52.0/22 -add china_ip_route 103.34.56.0/22 -add china_ip_route 103.34.60.0/22 -add china_ip_route 103.34.64.0/22 -add china_ip_route 103.34.68.0/22 -add china_ip_route 103.34.72.0/22 -add china_ip_route 103.34.76.0/22 -add china_ip_route 103.34.80.0/22 -add china_ip_route 103.34.84.0/22 -add china_ip_route 103.34.88.0/22 -add china_ip_route 103.34.92.0/22 -add china_ip_route 103.34.96.0/22 -add china_ip_route 103.34.100.0/22 -add china_ip_route 103.34.104.0/22 -add china_ip_route 103.34.108.0/22 -add china_ip_route 103.34.112.0/22 -add china_ip_route 103.34.116.0/22 -add china_ip_route 103.34.120.0/22 -add china_ip_route 103.34.124.0/22 -add china_ip_route 103.34.128.0/22 -add china_ip_route 103.34.132.0/22 -add china_ip_route 103.34.136.0/22 -add china_ip_route 103.34.140.0/22 -add china_ip_route 103.34.144.0/22 -add china_ip_route 103.34.148.0/22 -add china_ip_route 103.34.152.0/22 -add china_ip_route 103.34.156.0/22 -add china_ip_route 103.34.160.0/22 -add china_ip_route 103.34.164.0/22 -add china_ip_route 103.34.168.0/22 -add china_ip_route 103.34.172.0/22 -add china_ip_route 103.34.176.0/22 -add china_ip_route 103.34.180.0/22 -add china_ip_route 103.34.184.0/22 -add china_ip_route 103.34.188.0/22 -add china_ip_route 103.34.192.0/22 -add china_ip_route 103.34.196.0/22 -add china_ip_route 103.34.200.0/22 -add china_ip_route 103.34.204.0/22 -add china_ip_route 103.34.208.0/22 -add china_ip_route 103.34.212.0/22 -add china_ip_route 103.34.216.0/22 -add china_ip_route 103.34.220.0/22 -add china_ip_route 103.34.224.0/22 -add china_ip_route 103.34.228.0/22 -add china_ip_route 103.34.232.0/22 -add china_ip_route 103.34.236.0/22 -add china_ip_route 103.34.240.0/22 -add china_ip_route 103.34.244.0/22 -add china_ip_route 103.34.248.0/22 -add china_ip_route 103.34.252.0/22 -add china_ip_route 103.35.0.0/22 -add china_ip_route 103.35.4.0/22 -add china_ip_route 103.35.8.0/22 -add china_ip_route 103.35.12.0/22 -add china_ip_route 103.35.16.0/22 -add china_ip_route 103.35.20.0/22 -add china_ip_route 103.35.24.0/22 -add china_ip_route 103.35.28.0/22 -add china_ip_route 103.35.32.0/22 -add china_ip_route 103.35.36.0/22 -add china_ip_route 103.35.40.0/22 -add china_ip_route 103.35.44.0/22 -add china_ip_route 103.35.48.0/22 -add china_ip_route 103.35.104.0/22 -add china_ip_route 103.35.116.0/22 -add china_ip_route 103.35.180.0/22 -add china_ip_route 103.35.200.0/22 -add china_ip_route 103.35.220.0/22 -add china_ip_route 103.36.28.0/22 -add china_ip_route 103.36.36.0/22 -add china_ip_route 103.36.56.0/22 -add china_ip_route 103.36.60.0/22 -add china_ip_route 103.36.64.0/22 -add china_ip_route 103.36.72.0/22 -add china_ip_route 103.36.96.0/22 -add china_ip_route 103.36.132.0/22 -add china_ip_route 103.36.136.0/22 -add china_ip_route 103.36.160.0/22 -add china_ip_route 103.36.164.0/22 -add china_ip_route 103.36.168.0/22 -add china_ip_route 103.36.172.0/22 -add china_ip_route 103.36.176.0/22 -add china_ip_route 103.36.180.0/22 -add china_ip_route 103.36.184.0/22 -add china_ip_route 103.36.188.0/22 -add china_ip_route 103.36.192.0/22 -add china_ip_route 103.36.196.0/22 -add china_ip_route 103.36.200.0/22 -add china_ip_route 103.36.204.0/22 -add china_ip_route 103.36.208.0/22 -add china_ip_route 103.36.212.0/22 -add china_ip_route 103.36.216.0/22 -add china_ip_route 103.36.220.0/22 -add china_ip_route 103.36.224.0/22 -add china_ip_route 103.36.228.0/22 -add china_ip_route 103.36.232.0/22 -add china_ip_route 103.36.236.0/22 -add china_ip_route 103.36.240.0/22 -add china_ip_route 103.36.244.0/22 -add china_ip_route 103.37.0.0/22 -add china_ip_route 103.37.12.0/22 -add china_ip_route 103.37.16.0/22 -add china_ip_route 103.37.24.0/22 -add china_ip_route 103.37.44.0/22 -add china_ip_route 103.37.52.0/22 -add china_ip_route 103.37.56.0/22 -add china_ip_route 103.37.72.0/22 -add china_ip_route 103.37.100.0/22 -add china_ip_route 103.37.104.0/22 -add china_ip_route 103.37.124.0/22 -add china_ip_route 103.37.136.0/22 -add china_ip_route 103.37.140.0/22 -add china_ip_route 103.37.144.0/22 -add china_ip_route 103.37.148.0/22 -add china_ip_route 103.37.152.0/22 -add china_ip_route 103.37.156.0/22 -add china_ip_route 103.37.160.0/22 -add china_ip_route 103.37.164.0/22 -add china_ip_route 103.37.172.0/22 -add china_ip_route 103.37.176.0/22 -add china_ip_route 103.37.188.0/22 -add china_ip_route 103.37.208.0/22 -add china_ip_route 103.37.212.0/22 -add china_ip_route 103.37.216.0/22 -add china_ip_route 103.37.220.0/22 -add china_ip_route 103.37.248.0/22 -add china_ip_route 103.37.252.0/22 -add china_ip_route 103.38.0.0/22 -add china_ip_route 103.38.32.0/22 -add china_ip_route 103.38.40.0/22 -add china_ip_route 103.38.44.0/22 -add china_ip_route 103.38.56.0/22 -add china_ip_route 103.38.76.0/22 -add china_ip_route 103.38.84.0/22 -add china_ip_route 103.38.92.0/22 -add china_ip_route 103.38.96.0/22 -add china_ip_route 103.38.116.0/22 -add china_ip_route 103.38.132.0/22 -add china_ip_route 103.38.140.0/22 -add china_ip_route 103.38.224.0/22 -add china_ip_route 103.38.228.0/22 -add china_ip_route 103.38.232.0/22 -add china_ip_route 103.39.16.0/22 -add china_ip_route 103.39.64.0/22 -add china_ip_route 103.39.88.0/22 -add china_ip_route 103.39.100.0/22 -add china_ip_route 103.39.104.0/22 -add china_ip_route 103.39.108.0/22 -add china_ip_route 103.39.160.0/22 -add china_ip_route 103.39.164.0/22 -add china_ip_route 103.39.168.0/22 -add china_ip_route 103.39.172.0/22 -add china_ip_route 103.39.176.0/22 -add china_ip_route 103.39.180.0/22 -add china_ip_route 103.39.184.0/22 -add china_ip_route 103.39.188.0/22 -add china_ip_route 103.39.200.0/22 -add china_ip_route 103.39.204.0/22 -add china_ip_route 103.39.208.0/22 -add china_ip_route 103.39.212.0/22 -add china_ip_route 103.39.216.0/22 -add china_ip_route 103.39.220.0/22 -add china_ip_route 103.39.224.0/22 -add china_ip_route 103.39.228.0/22 -add china_ip_route 103.39.232.0/22 -add china_ip_route 103.40.12.0/22 -add china_ip_route 103.40.16.0/22 -add china_ip_route 103.40.20.0/22 -add china_ip_route 103.40.24.0/22 -add china_ip_route 103.40.28.0/22 -add china_ip_route 103.40.32.0/22 -add china_ip_route 103.40.36.0/22 -add china_ip_route 103.40.40.0/22 -add china_ip_route 103.40.44.0/22 -add china_ip_route 103.40.88.0/22 -add china_ip_route 103.40.100.0/22 -add china_ip_route 103.40.192.0/22 -add china_ip_route 103.40.212.0/22 -add china_ip_route 103.40.220.0/22 -add china_ip_route 103.40.228.0/22 -add china_ip_route 103.40.232.0/22 -add china_ip_route 103.40.236.0/22 -add china_ip_route 103.40.240.0/22 -add china_ip_route 103.40.244.0/22 -add china_ip_route 103.40.248.0/22 -add china_ip_route 103.40.252.0/22 -add china_ip_route 103.41.0.0/22 -add china_ip_route 103.41.16.0/22 -add china_ip_route 103.41.52.0/22 -add china_ip_route 103.41.140.0/22 -add china_ip_route 103.41.148.0/22 -add china_ip_route 103.41.152.0/22 -add china_ip_route 103.41.160.0/22 -add china_ip_route 103.41.164.0/22 -add china_ip_route 103.41.220.0/22 -add china_ip_route 103.41.224.0/22 -add china_ip_route 103.41.228.0/22 -add china_ip_route 103.41.232.0/22 -add china_ip_route 103.42.8.0/22 -add china_ip_route 103.42.24.0/22 -add china_ip_route 103.42.28.0/22 -add china_ip_route 103.42.32.0/22 -add china_ip_route 103.42.64.0/22 -add china_ip_route 103.42.68.0/22 -add china_ip_route 103.42.76.0/22 -add china_ip_route 103.42.104.0/22 -add china_ip_route 103.42.180.0/22 -add china_ip_route 103.42.232.0/22 -add china_ip_route 103.43.16.0/22 -add china_ip_route 103.43.84.0/22 -add china_ip_route 103.43.96.0/22 -add china_ip_route 103.43.100.0/22 -add china_ip_route 103.43.104.0/22 -add china_ip_route 103.43.124.0/22 -add china_ip_route 103.43.184.0/22 -add china_ip_route 103.43.192.0/22 -add china_ip_route 103.43.196.0/22 -add china_ip_route 103.43.208.0/22 -add china_ip_route 103.43.220.0/22 -add china_ip_route 103.43.224.0/22 -add china_ip_route 103.43.240.0/22 -add china_ip_route 103.44.56.0/22 -add china_ip_route 103.44.80.0/22 -add china_ip_route 103.44.88.0/22 -add china_ip_route 103.44.120.0/22 -add china_ip_route 103.44.124.0/22 -add china_ip_route 103.44.132.0/22 -add china_ip_route 103.44.144.0/22 -add china_ip_route 103.44.168.0/22 -add china_ip_route 103.44.176.0/22 -add china_ip_route 103.44.180.0/22 -add china_ip_route 103.44.184.0/22 -add china_ip_route 103.44.188.0/22 -add china_ip_route 103.44.192.0/22 -add china_ip_route 103.44.196.0/22 -add china_ip_route 103.44.200.0/22 -add china_ip_route 103.44.204.0/22 -add china_ip_route 103.44.224.0/22 -add china_ip_route 103.44.236.0/22 -add china_ip_route 103.44.240.0/22 -add china_ip_route 103.44.244.0/22 -add china_ip_route 103.44.248.0/22 -add china_ip_route 103.44.252.0/22 -add china_ip_route 103.45.0.0/22 -add china_ip_route 103.45.4.0/22 -add china_ip_route 103.45.8.0/22 -add china_ip_route 103.45.12.0/22 -add china_ip_route 103.45.16.0/22 -add china_ip_route 103.45.20.0/22 -add china_ip_route 103.45.24.0/22 -add china_ip_route 103.45.28.0/22 -add china_ip_route 103.45.32.0/22 -add china_ip_route 103.45.36.0/22 -add china_ip_route 103.45.40.0/22 -add china_ip_route 103.45.44.0/22 -add china_ip_route 103.45.48.0/22 -add china_ip_route 103.45.52.0/22 -add china_ip_route 103.45.56.0/22 -add china_ip_route 103.45.60.0/22 -add china_ip_route 103.45.72.0/22 -add china_ip_route 103.45.76.0/22 -add china_ip_route 103.45.80.0/22 -add china_ip_route 103.45.84.0/22 -add china_ip_route 103.45.88.0/22 -add china_ip_route 103.45.92.0/22 -add china_ip_route 103.45.96.0/22 -add china_ip_route 103.45.100.0/22 -add china_ip_route 103.45.104.0/22 -add china_ip_route 103.45.108.0/22 -add china_ip_route 103.45.112.0/22 -add china_ip_route 103.45.116.0/22 -add china_ip_route 103.45.120.0/22 -add china_ip_route 103.45.124.0/22 -add china_ip_route 103.45.128.0/22 -add china_ip_route 103.45.132.0/22 -add china_ip_route 103.45.136.0/22 -add china_ip_route 103.45.140.0/22 -add china_ip_route 103.45.144.0/22 -add china_ip_route 103.45.148.0/22 -add china_ip_route 103.45.152.0/22 -add china_ip_route 103.45.156.0/22 -add china_ip_route 103.45.160.0/22 -add china_ip_route 103.45.164.0/22 -add china_ip_route 103.45.168.0/22 -add china_ip_route 103.45.172.0/22 -add china_ip_route 103.45.176.0/22 -add china_ip_route 103.45.180.0/22 -add china_ip_route 103.45.184.0/22 -add china_ip_route 103.45.188.0/22 -add china_ip_route 103.45.192.0/22 -add china_ip_route 103.45.196.0/22 -add china_ip_route 103.45.200.0/22 -add china_ip_route 103.45.204.0/22 -add china_ip_route 103.45.208.0/22 -add china_ip_route 103.45.212.0/22 -add china_ip_route 103.45.216.0/22 -add china_ip_route 103.45.220.0/22 -add china_ip_route 103.45.224.0/22 -add china_ip_route 103.45.248.0/22 -add china_ip_route 103.46.0.0/22 -add china_ip_route 103.46.12.0/22 -add china_ip_route 103.46.16.0/22 -add china_ip_route 103.46.20.0/22 -add china_ip_route 103.46.24.0/22 -add china_ip_route 103.46.28.0/22 -add china_ip_route 103.46.32.0/22 -add china_ip_route 103.46.36.0/22 -add china_ip_route 103.46.40.0/22 -add china_ip_route 103.46.44.0/22 -add china_ip_route 103.46.48.0/22 -add china_ip_route 103.46.52.0/22 -add china_ip_route 103.46.56.0/22 -add china_ip_route 103.46.60.0/22 -add china_ip_route 103.46.64.0/22 -add china_ip_route 103.46.68.0/22 -add china_ip_route 103.46.72.0/22 -add china_ip_route 103.46.76.0/22 -add china_ip_route 103.46.80.0/22 -add china_ip_route 103.46.84.0/22 -add china_ip_route 103.46.88.0/22 -add china_ip_route 103.46.92.0/22 -add china_ip_route 103.46.96.0/22 -add china_ip_route 103.46.100.0/22 -add china_ip_route 103.46.104.0/22 -add china_ip_route 103.46.108.0/22 -add china_ip_route 103.46.112.0/22 -add china_ip_route 103.46.116.0/22 -add china_ip_route 103.46.120.0/22 -add china_ip_route 103.46.124.0/22 -add china_ip_route 103.46.128.0/22 -add china_ip_route 103.46.132.0/22 -add china_ip_route 103.46.136.0/22 -add china_ip_route 103.46.152.0/22 -add china_ip_route 103.46.156.0/22 -add china_ip_route 103.46.160.0/22 -add china_ip_route 103.46.164.0/22 -add china_ip_route 103.46.168.0/22 -add china_ip_route 103.46.172.0/22 -add china_ip_route 103.46.176.0/22 -add china_ip_route 103.46.180.0/22 -add china_ip_route 103.46.244.0/22 -add china_ip_route 103.46.248.0/22 -add china_ip_route 103.47.4.0/22 -add china_ip_route 103.47.20.0/22 -add china_ip_route 103.47.36.0/22 -add china_ip_route 103.47.40.0/22 -add china_ip_route 103.47.48.0/22 -add china_ip_route 103.47.80.0/22 -add china_ip_route 103.47.96.0/22 -add china_ip_route 103.47.108.0/22 -add china_ip_route 103.47.116.0/22 -add china_ip_route 103.47.120.0/22 -add china_ip_route 103.47.136.0/22 -add china_ip_route 103.47.140.0/22 -add china_ip_route 103.47.212.0/22 -add china_ip_route 103.48.52.0/22 -add china_ip_route 103.48.92.0/22 -add china_ip_route 103.48.144.0/22 -add china_ip_route 103.48.148.0/22 -add china_ip_route 103.48.152.0/22 -add china_ip_route 103.48.156.0/22 -add china_ip_route 103.48.202.0/23 -add china_ip_route 103.48.216.0/22 -add china_ip_route 103.48.220.0/22 -add china_ip_route 103.48.224.0/22 -add china_ip_route 103.48.228.0/22 -add china_ip_route 103.48.232.0/22 -add china_ip_route 103.48.236.0/22 -add china_ip_route 103.48.240.0/22 -add china_ip_route 103.48.244.0/22 -add china_ip_route 103.49.12.0/22 -add china_ip_route 103.49.20.0/22 -add china_ip_route 103.49.72.0/22 -add china_ip_route 103.49.76.0/22 -add china_ip_route 103.49.92.0/22 -add china_ip_route 103.49.96.0/22 -add china_ip_route 103.49.108.0/22 -add china_ip_route 103.49.128.0/22 -add china_ip_route 103.49.176.0/22 -add china_ip_route 103.49.180.0/22 -add china_ip_route 103.49.196.0/22 -add china_ip_route 103.50.36.0/22 -add china_ip_route 103.50.44.0/22 -add china_ip_route 103.50.48.0/22 -add china_ip_route 103.50.52.0/22 -add china_ip_route 103.50.56.0/22 -add china_ip_route 103.50.60.0/22 -add china_ip_route 103.50.64.0/22 -add china_ip_route 103.50.68.0/22 -add china_ip_route 103.50.72.0/22 -add china_ip_route 103.50.108.0/22 -add china_ip_route 103.50.112.0/22 -add china_ip_route 103.50.116.0/22 -add china_ip_route 103.50.120.0/22 -add china_ip_route 103.50.124.0/22 -add china_ip_route 103.50.132.0/22 -add china_ip_route 103.50.136.0/22 -add china_ip_route 103.50.140.0/22 -add china_ip_route 103.50.172.0/22 -add china_ip_route 103.50.176.0/22 -add china_ip_route 103.50.180.0/22 -add china_ip_route 103.50.184.0/22 -add china_ip_route 103.50.188.0/22 -add china_ip_route 103.50.192.0/22 -add china_ip_route 103.50.196.0/22 -add china_ip_route 103.50.200.0/22 -add china_ip_route 103.50.220.0/22 -add china_ip_route 103.50.224.0/22 -add china_ip_route 103.50.228.0/22 -add china_ip_route 103.50.232.0/22 -add china_ip_route 103.50.236.0/22 -add china_ip_route 103.50.240.0/22 -add china_ip_route 103.50.244.0/22 -add china_ip_route 103.50.248.0/22 -add china_ip_route 103.52.40.0/22 -add china_ip_route 103.52.72.0/22 -add china_ip_route 103.52.76.0/22 -add china_ip_route 103.52.80.0/22 -add china_ip_route 103.52.84.0/22 -add china_ip_route 103.52.96.0/22 -add china_ip_route 103.52.100.0/22 -add china_ip_route 103.52.104.0/22 -add china_ip_route 103.52.160.0/22 -add china_ip_route 103.52.164.0/22 -add china_ip_route 103.52.172.0/22 -add china_ip_route 103.52.176.0/22 -add china_ip_route 103.52.184.0/22 -add china_ip_route 103.52.196.0/22 -add china_ip_route 103.53.64.0/22 -add china_ip_route 103.53.68.0/22 -add china_ip_route 103.53.92.0/22 -add china_ip_route 103.53.100.0/22 -add china_ip_route 103.53.124.0/22 -add china_ip_route 103.53.128.0/22 -add china_ip_route 103.53.132.0/22 -add china_ip_route 103.53.136.0/22 -add china_ip_route 103.53.140.0/22 -add china_ip_route 103.53.144.0/22 -add china_ip_route 103.53.180.0/22 -add china_ip_route 103.53.204.0/22 -add china_ip_route 103.53.208.0/22 -add china_ip_route 103.53.212.0/22 -add china_ip_route 103.53.216.0/22 -add china_ip_route 103.53.236.0/22 -add china_ip_route 103.53.248.0/22 -add china_ip_route 103.54.8.0/22 -add china_ip_route 103.54.48.0/22 -add china_ip_route 103.54.60.0/22 -add china_ip_route 103.54.160.0/22 -add china_ip_route 103.54.164.0/22 -add china_ip_route 103.54.212.0/22 -add china_ip_route 103.54.240.0/22 -add china_ip_route 103.55.24.0/22 -add china_ip_route 103.55.80.0/22 -add china_ip_route 103.55.120.0/22 -add china_ip_route 103.55.152.0/22 -add china_ip_route 103.55.172.0/22 -add china_ip_route 103.55.204.0/22 -add china_ip_route 103.55.208.0/22 -add china_ip_route 103.55.228.0/22 -add china_ip_route 103.55.236.0/22 -add china_ip_route 103.56.8.0/22 -add china_ip_route 103.56.16.0/22 -add china_ip_route 103.56.20.0/22 -add china_ip_route 103.56.32.0/22 -add china_ip_route 103.56.56.0/22 -add china_ip_route 103.56.60.0/22 -add china_ip_route 103.56.72.0/22 -add china_ip_route 103.56.76.0/22 -add china_ip_route 103.56.140.0/22 -add china_ip_route 103.56.152.0/22 -add china_ip_route 103.56.184.0/22 -add china_ip_route 103.56.200.0/22 -add china_ip_route 103.57.12.0/22 -add china_ip_route 103.57.52.0/22 -add china_ip_route 103.57.56.0/22 -add china_ip_route 103.57.76.0/22 -add china_ip_route 103.57.136.0/22 -add china_ip_route 103.57.196.0/22 -add china_ip_route 103.58.24.0/22 -add china_ip_route 103.59.76.0/22 -add china_ip_route 103.59.100.0/22 -add china_ip_route 103.59.112.0/22 -add china_ip_route 103.59.116.0/22 -add china_ip_route 103.59.120.0/22 -add china_ip_route 103.59.124.0/22 -add china_ip_route 103.59.128.0/22 -add china_ip_route 103.59.148.0/22 -add china_ip_route 103.59.164.0/22 -add china_ip_route 103.60.32.0/22 -add china_ip_route 103.60.44.0/22 -add china_ip_route 103.60.164.0/22 -add china_ip_route 103.60.228.0/22 -add china_ip_route 103.60.236.0/22 -add china_ip_route 103.61.60.0/22 -add china_ip_route 103.61.104.0/22 -add china_ip_route 103.61.140.0/22 -add china_ip_route 103.61.152.0/22 -add china_ip_route 103.61.156.0/22 -add china_ip_route 103.61.160.0/22 -add china_ip_route 103.61.172.0/22 -add china_ip_route 103.61.176.0/22 -add china_ip_route 103.61.188.0/22 -add china_ip_route 103.62.24.0/22 -add china_ip_route 103.62.52.0/22 -add china_ip_route 103.62.72.0/22 -add china_ip_route 103.62.76.0/22 -add china_ip_route 103.62.80.0/22 -add china_ip_route 103.62.84.0/22 -add china_ip_route 103.62.88.0/22 -add china_ip_route 103.62.96.0/22 -add china_ip_route 103.62.100.0/22 -add china_ip_route 103.62.104.0/22 -add china_ip_route 103.62.108.0/22 -add china_ip_route 103.62.112.0/22 -add china_ip_route 103.62.116.0/22 -add china_ip_route 103.62.120.0/22 -add china_ip_route 103.62.124.0/22 -add china_ip_route 103.62.128.0/22 -add china_ip_route 103.62.132.0/22 -add china_ip_route 103.62.156.0/22 -add china_ip_route 103.62.160.0/22 -add china_ip_route 103.62.164.0/22 -add china_ip_route 103.62.168.0/22 -add china_ip_route 103.62.172.0/22 -add china_ip_route 103.62.176.0/22 -add china_ip_route 103.62.180.0/22 -add china_ip_route 103.62.184.0/22 -add china_ip_route 103.62.188.0/22 -add china_ip_route 103.62.192.0/22 -add china_ip_route 103.62.204.0/22 -add china_ip_route 103.62.208.0/22 -add china_ip_route 103.62.212.0/22 -add china_ip_route 103.62.216.0/22 -add china_ip_route 103.62.220.0/22 -add china_ip_route 103.62.224.0/22 -add china_ip_route 103.63.32.0/22 -add china_ip_route 103.63.36.0/22 -add china_ip_route 103.63.40.0/22 -add china_ip_route 103.63.44.0/22 -add china_ip_route 103.63.48.0/22 -add china_ip_route 103.63.52.0/22 -add china_ip_route 103.63.56.0/22 -add china_ip_route 103.63.60.0/22 -add china_ip_route 103.63.64.0/22 -add china_ip_route 103.63.68.0/22 -add china_ip_route 103.63.72.0/22 -add china_ip_route 103.63.76.0/22 -add china_ip_route 103.63.80.0/22 -add china_ip_route 103.63.84.0/22 -add china_ip_route 103.63.88.0/22 -add china_ip_route 103.63.140.0/22 -add china_ip_route 103.63.144.0/22 -add china_ip_route 103.63.152.0/22 -add china_ip_route 103.63.160.0/22 -add china_ip_route 103.63.164.0/22 -add china_ip_route 103.63.168.0/22 -add china_ip_route 103.63.172.0/22 -add china_ip_route 103.63.176.0/22 -add china_ip_route 103.63.180.0/22 -add china_ip_route 103.63.184.0/22 -add china_ip_route 103.63.192.0/22 -add china_ip_route 103.63.196.0/22 -add china_ip_route 103.63.200.0/22 -add china_ip_route 103.63.204.0/22 -add china_ip_route 103.63.208.0/22 -add china_ip_route 103.63.240.0/22 -add china_ip_route 103.63.244.0/22 -add china_ip_route 103.63.248.0/22 -add china_ip_route 103.63.252.0/22 -add china_ip_route 103.64.0.0/22 -add china_ip_route 103.64.4.0/22 -add china_ip_route 103.64.24.0/22 -add china_ip_route 103.64.28.0/22 -add china_ip_route 103.64.32.0/22 -add china_ip_route 103.64.36.0/22 -add china_ip_route 103.64.40.0/22 -add china_ip_route 103.64.44.0/22 -add china_ip_route 103.64.48.0/22 -add china_ip_route 103.64.52.0/22 -add china_ip_route 103.64.56.0/22 -add china_ip_route 103.64.60.0/22 -add china_ip_route 103.64.64.0/22 -add china_ip_route 103.64.68.0/22 -add china_ip_route 103.64.72.0/22 -add china_ip_route 103.64.76.0/22 -add china_ip_route 103.64.80.0/22 -add china_ip_route 103.64.84.0/22 -add china_ip_route 103.64.88.0/22 -add china_ip_route 103.64.92.0/22 -add china_ip_route 103.64.96.0/22 -add china_ip_route 103.64.100.0/22 -add china_ip_route 103.64.104.0/22 -add china_ip_route 103.64.108.0/22 -add china_ip_route 103.64.112.0/22 -add china_ip_route 103.64.116.0/22 -add china_ip_route 103.64.120.0/22 -add china_ip_route 103.64.124.0/22 -add china_ip_route 103.64.140.0/22 -add china_ip_route 103.64.144.0/22 -add china_ip_route 103.64.152.0/22 -add china_ip_route 103.64.156.0/22 -add china_ip_route 103.64.160.0/22 -add china_ip_route 103.64.164.0/22 -add china_ip_route 103.64.168.0/22 -add china_ip_route 103.64.172.0/22 -add china_ip_route 103.64.176.0/22 -add china_ip_route 103.64.180.0/22 -add china_ip_route 103.64.184.0/22 -add china_ip_route 103.64.188.0/22 -add china_ip_route 103.64.192.0/22 -add china_ip_route 103.64.196.0/22 -add china_ip_route 103.64.200.0/22 -add china_ip_route 103.64.204.0/22 -add china_ip_route 103.64.208.0/22 -add china_ip_route 103.64.212.0/22 -add china_ip_route 103.64.216.0/22 -add china_ip_route 103.64.220.0/22 -add china_ip_route 103.64.224.0/22 -add china_ip_route 103.64.228.0/22 -add china_ip_route 103.64.232.0/22 -add china_ip_route 103.64.236.0/22 -add china_ip_route 103.64.240.0/22 -add china_ip_route 103.64.244.0/22 -add china_ip_route 103.64.248.0/22 -add china_ip_route 103.64.252.0/22 -add china_ip_route 103.65.0.0/22 -add china_ip_route 103.65.4.0/22 -add china_ip_route 103.65.8.0/22 -add china_ip_route 103.65.12.0/22 -add china_ip_route 103.65.16.0/22 -add china_ip_route 103.65.36.0/22 -add china_ip_route 103.65.40.0/22 -add china_ip_route 103.65.48.0/22 -add china_ip_route 103.65.52.0/22 -add china_ip_route 103.65.56.0/22 -add china_ip_route 103.65.60.0/22 -add china_ip_route 103.65.64.0/22 -add china_ip_route 103.65.68.0/22 -add china_ip_route 103.65.72.0/22 -add china_ip_route 103.65.76.0/22 -add china_ip_route 103.65.80.0/22 -add china_ip_route 103.65.84.0/22 -add china_ip_route 103.65.88.0/22 -add china_ip_route 103.65.92.0/22 -add china_ip_route 103.65.100.0/22 -add china_ip_route 103.65.104.0/22 -add china_ip_route 103.65.108.0/22 -add china_ip_route 103.65.112.0/22 -add china_ip_route 103.65.144.0/22 -add china_ip_route 103.65.148.0/22 -add china_ip_route 103.65.152.0/22 -add china_ip_route 103.65.156.0/22 -add china_ip_route 103.65.160.0/22 -add china_ip_route 103.65.164.0/22 -add china_ip_route 103.65.168.0/22 -add china_ip_route 103.65.172.0/22 -add china_ip_route 103.66.32.0/22 -add china_ip_route 103.66.40.0/22 -add china_ip_route 103.66.92.0/22 -add china_ip_route 103.66.108.0/22 -add china_ip_route 103.66.200.0/22 -add china_ip_route 103.66.216.0/22 -add china_ip_route 103.66.240.0/22 -add china_ip_route 103.66.244.0/22 -add china_ip_route 103.66.248.0/22 -add china_ip_route 103.66.252.0/22 -add china_ip_route 103.67.0.0/22 -add china_ip_route 103.67.4.0/22 -add china_ip_route 103.67.8.0/22 -add china_ip_route 103.67.100.0/22 -add china_ip_route 103.67.104.0/22 -add china_ip_route 103.67.108.0/22 -add china_ip_route 103.67.112.0/22 -add china_ip_route 103.67.116.0/22 -add china_ip_route 103.67.120.0/22 -add china_ip_route 103.67.124.0/22 -add china_ip_route 103.67.128.0/22 -add china_ip_route 103.67.132.0/22 -add china_ip_route 103.67.136.0/22 -add china_ip_route 103.67.140.0/22 -add china_ip_route 103.67.144.0/22 -add china_ip_route 103.67.148.0/22 -add china_ip_route 103.67.172.0/22 -add china_ip_route 103.67.192.0/22 -add china_ip_route 103.67.212.0/22 -add china_ip_route 103.67.252.0/22 -add china_ip_route 103.68.64.0/22 -add china_ip_route 103.68.88.0/22 -add china_ip_route 103.68.100.0/22 -add china_ip_route 103.68.128.0/22 -add china_ip_route 103.68.192.0/22 -add china_ip_route 103.69.16.0/22 -add china_ip_route 103.69.116.0/22 -add china_ip_route 103.69.132.0/22 -add china_ip_route 103.69.152.0/22 -add china_ip_route 103.69.212.0/22 -add china_ip_route 103.70.8.0/22 -add china_ip_route 103.70.148.0/22 -add china_ip_route 103.70.184.0/22 -add china_ip_route 103.70.220.0/22 -add china_ip_route 103.70.224.0/22 -add china_ip_route 103.70.236.0/22 -add china_ip_route 103.70.252.0/22 -add china_ip_route 103.71.0.0/22 -add china_ip_route 103.71.32.0/22 -add china_ip_route 103.71.48.0/22 -add china_ip_route 103.71.68.0/22 -add china_ip_route 103.71.72.0/22 -add china_ip_route 103.71.80.0/22 -add china_ip_route 103.71.84.0/22 -add china_ip_route 103.71.88.0/22 -add china_ip_route 103.71.120.0/22 -add china_ip_route 103.71.124.0/22 -add china_ip_route 103.71.128.0/22 -add china_ip_route 103.71.144.0/22 -add china_ip_route 103.71.196.0/22 -add china_ip_route 103.71.200.0/22 -add china_ip_route 103.71.232.0/22 -add china_ip_route 103.72.12.0/22 -add china_ip_route 103.72.16.0/22 -add china_ip_route 103.72.20.0/22 -add china_ip_route 103.72.24.0/22 -add china_ip_route 103.72.28.0/22 -add china_ip_route 103.72.32.0/22 -add china_ip_route 103.72.36.0/22 -add china_ip_route 103.72.40.0/22 -add china_ip_route 103.72.44.0/22 -add china_ip_route 103.72.48.0/22 -add china_ip_route 103.72.52.0/22 -add china_ip_route 103.72.112.0/22 -add china_ip_route 103.72.116.0/22 -add china_ip_route 103.72.120.0/22 -add china_ip_route 103.72.124.0/22 -add china_ip_route 103.72.128.0/22 -add china_ip_route 103.72.132.0/22 -add china_ip_route 103.72.144.0/22 -add china_ip_route 103.72.148.0/22 -add china_ip_route 103.72.172.0/22 -add china_ip_route 103.72.180.0/22 -add china_ip_route 103.72.224.0/22 -add china_ip_route 103.72.228.0/22 -add china_ip_route 103.72.232.0/22 -add china_ip_route 103.72.236.0/22 -add china_ip_route 103.72.240.0/22 -add china_ip_route 103.72.244.0/22 -add china_ip_route 103.72.248.0/22 -add china_ip_route 103.72.252.0/22 -add china_ip_route 103.73.0.0/22 -add china_ip_route 103.73.4.0/22 -add china_ip_route 103.73.8.0/22 -add china_ip_route 103.73.12.0/22 -add china_ip_route 103.73.16.0/22 -add china_ip_route 103.73.20.0/22 -add china_ip_route 103.73.24.0/22 -add china_ip_route 103.73.28.0/22 -add china_ip_route 103.73.48.0/22 -add china_ip_route 103.73.88.0/22 -add china_ip_route 103.73.96.0/22 -add china_ip_route 103.73.116.0/22 -add china_ip_route 103.73.120.0/22 -add china_ip_route 103.73.128.0/22 -add china_ip_route 103.73.132.0/22 -add china_ip_route 103.73.136.0/22 -add china_ip_route 103.73.140.0/22 -add china_ip_route 103.73.144.0/22 -add china_ip_route 103.73.168.0/22 -add china_ip_route 103.73.176.0/22 -add china_ip_route 103.73.204.0/22 -add china_ip_route 103.73.208.0/22 -add china_ip_route 103.73.240.0/22 -add china_ip_route 103.73.244.0/22 -add china_ip_route 103.73.248.0/22 -add china_ip_route 103.74.24.0/22 -add china_ip_route 103.74.28.0/22 -add china_ip_route 103.74.32.0/22 -add china_ip_route 103.74.36.0/22 -add china_ip_route 103.74.40.0/22 -add china_ip_route 103.74.44.0/22 -add china_ip_route 103.74.48.0/22 -add china_ip_route 103.74.56.0/22 -add china_ip_route 103.74.60.0/22 -add china_ip_route 103.74.80.0/22 -add china_ip_route 103.74.124.0/22 -add china_ip_route 103.74.148.0/22 -add china_ip_route 103.74.152.0/22 -add china_ip_route 103.74.156.0/22 -add china_ip_route 103.74.204.0/22 -add china_ip_route 103.74.232.0/22 -add china_ip_route 103.75.16.0/22 -add china_ip_route 103.75.88.0/22 -add china_ip_route 103.75.92.0/22 -add china_ip_route 103.75.104.0/22 -add china_ip_route 103.75.108.0/22 -add china_ip_route 103.75.112.0/22 -add china_ip_route 103.75.120.0/22 -add china_ip_route 103.75.128.0/22 -add china_ip_route 103.75.144.0/22 -add china_ip_route 103.75.152.0/22 -add china_ip_route 103.75.236.0/24 -add china_ip_route 103.76.60.0/22 -add china_ip_route 103.76.64.0/22 -add china_ip_route 103.76.68.0/22 -add china_ip_route 103.76.72.0/22 -add china_ip_route 103.76.84.0/22 -add china_ip_route 103.76.92.0/22 -add china_ip_route 103.76.216.0/22 -add china_ip_route 103.76.220.0/22 -add china_ip_route 103.76.224.0/22 -add china_ip_route 103.77.28.0/22 -add china_ip_route 103.77.52.0/22 -add china_ip_route 103.77.56.0/22 -add china_ip_route 103.77.72.0/22 -add china_ip_route 103.77.88.0/22 -add china_ip_route 103.77.92.0/22 -add china_ip_route 103.77.132.0/22 -add china_ip_route 103.77.148.0/22 -add china_ip_route 103.77.220.0/22 -add china_ip_route 103.78.56.0/22 -add china_ip_route 103.78.60.0/22 -add china_ip_route 103.78.64.0/22 -add china_ip_route 103.78.68.0/22 -add china_ip_route 103.78.124.0/22 -add china_ip_route 103.78.172.0/22 -add china_ip_route 103.78.176.0/22 -add china_ip_route 103.78.196.0/22 -add china_ip_route 103.78.228.0/22 -add china_ip_route 103.79.24.0/22 -add china_ip_route 103.79.28.0/22 -add china_ip_route 103.79.36.0/22 -add china_ip_route 103.79.40.0/22 -add china_ip_route 103.79.44.0/22 -add china_ip_route 103.79.52.0/22 -add china_ip_route 103.79.56.0/22 -add china_ip_route 103.79.60.0/22 -add china_ip_route 103.79.64.0/22 -add china_ip_route 103.79.68.0/22 -add china_ip_route 103.79.80.0/22 -add china_ip_route 103.79.84.0/22 -add china_ip_route 103.79.120.0/22 -add china_ip_route 103.79.136.0/22 -add china_ip_route 103.79.188.0/22 -add china_ip_route 103.79.192.0/22 -add china_ip_route 103.79.196.0/22 -add china_ip_route 103.79.200.0/22 -add china_ip_route 103.79.204.0/22 -add china_ip_route 103.79.208.0/22 -add china_ip_route 103.79.212.0/22 -add china_ip_route 103.79.240.0/22 -add china_ip_route 103.80.24.0/22 -add china_ip_route 103.80.28.0/22 -add china_ip_route 103.80.44.0/22 -add china_ip_route 103.80.72.0/22 -add china_ip_route 103.80.176.0/22 -add china_ip_route 103.80.180.0/22 -add china_ip_route 103.80.184.0/22 -add china_ip_route 103.80.192.0/22 -add china_ip_route 103.80.200.0/22 -add china_ip_route 103.80.232.0/22 -add china_ip_route 103.81.4.0/22 -add china_ip_route 103.81.8.0/22 -add china_ip_route 103.81.16.0/22 -add china_ip_route 103.81.20.0/22 -add china_ip_route 103.81.44.0/22 -add china_ip_route 103.81.48.0/22 -add china_ip_route 103.81.96.0/22 -add china_ip_route 103.81.120.0/22 -add china_ip_route 103.81.148.0/22 -add china_ip_route 103.81.164.0/22 -add china_ip_route 103.81.168.0/22 -add china_ip_route 103.81.183.0/24 -add china_ip_route 103.81.184.0/22 -add china_ip_route 103.81.200.0/22 -add china_ip_route 103.81.232.0/22 -add china_ip_route 103.82.52.0/22 -add china_ip_route 103.82.60.0/22 -add china_ip_route 103.82.68.0/22 -add china_ip_route 103.82.84.0/22 -add china_ip_route 103.82.104.0/22 -add china_ip_route 103.82.224.0/22 -add china_ip_route 103.82.236.0/22 -add china_ip_route 103.83.44.0/22 -add china_ip_route 103.83.52.0/22 -add china_ip_route 103.83.60.0/22 -add china_ip_route 103.83.64.0/22 -add china_ip_route 103.83.72.0/22 -add china_ip_route 103.83.112.0/22 -add china_ip_route 103.83.120.0/22 -add china_ip_route 103.83.180.0/22 -add china_ip_route 103.84.0.0/22 -add china_ip_route 103.84.12.0/22 -add china_ip_route 103.84.16.0/22 -add china_ip_route 103.84.20.0/22 -add china_ip_route 103.84.24.0/22 -add china_ip_route 103.84.28.0/22 -add china_ip_route 103.84.48.0/22 -add china_ip_route 103.84.64.0/22 -add china_ip_route 103.84.72.0/22 -add china_ip_route 103.84.92.0/22 -add china_ip_route 103.84.108.0/22 -add china_ip_route 103.84.136.0/22 -add china_ip_route 103.85.20.0/22 -add china_ip_route 103.85.24.0/22 -add china_ip_route 103.85.44.0/22 -add china_ip_route 103.85.48.0/22 -add china_ip_route 103.85.84.0/22 -add china_ip_route 103.85.136.0/22 -add china_ip_route 103.85.144.0/22 -add china_ip_route 103.85.164.0/22 -add china_ip_route 103.85.168.0/22 -add china_ip_route 103.85.172.0/22 -add china_ip_route 103.85.176.0/22 -add china_ip_route 103.85.224.0/22 -add china_ip_route 103.86.28.0/22 -add china_ip_route 103.86.32.0/22 -add china_ip_route 103.86.44.0/22 -add china_ip_route 103.86.60.0/22 -add china_ip_route 103.86.80.0/22 -add china_ip_route 103.86.84.0/22 -add china_ip_route 103.86.88.0/22 -add china_ip_route 103.86.204.0/22 -add china_ip_route 103.86.208.0/22 -add china_ip_route 103.86.212.0/22 -add china_ip_route 103.86.216.0/22 -add china_ip_route 103.86.220.0/22 -add china_ip_route 103.86.224.0/22 -add china_ip_route 103.86.228.0/22 -add china_ip_route 103.86.232.0/22 -add china_ip_route 103.86.236.0/22 -add china_ip_route 103.86.240.0/22 -add china_ip_route 103.86.244.0/22 -add china_ip_route 103.86.248.0/22 -add china_ip_route 103.86.252.0/22 -add china_ip_route 103.87.0.0/22 -add china_ip_route 103.87.4.0/22 -add china_ip_route 103.87.20.0/22 -add china_ip_route 103.87.32.0/22 -add china_ip_route 103.87.72.0/22 -add china_ip_route 103.87.96.0/22 -add china_ip_route 103.87.132.0/22 -add china_ip_route 103.87.180.0/22 -add china_ip_route 103.87.224.0/22 -add china_ip_route 103.88.4.0/22 -add china_ip_route 103.88.8.0/22 -add china_ip_route 103.88.12.0/22 -add china_ip_route 103.88.16.0/22 -add china_ip_route 103.88.20.0/22 -add china_ip_route 103.88.32.0/22 -add china_ip_route 103.88.36.0/22 -add china_ip_route 103.88.60.0/22 -add china_ip_route 103.88.64.0/22 -add china_ip_route 103.88.72.0/22 -add china_ip_route 103.88.96.0/22 -add china_ip_route 103.88.100.0/22 -add china_ip_route 103.88.164.0/22 -add china_ip_route 103.88.176.0/22 -add china_ip_route 103.88.184.0/22 -add china_ip_route 103.88.188.0/22 -add china_ip_route 103.88.212.0/22 -add china_ip_route 103.89.28.0/22 -add china_ip_route 103.89.96.0/22 -add china_ip_route 103.89.100.0/22 -add china_ip_route 103.89.104.0/22 -add china_ip_route 103.89.108.0/22 -add china_ip_route 103.89.112.0/22 -add china_ip_route 103.89.116.0/22 -add china_ip_route 103.89.148.0/22 -add china_ip_route 103.89.172.0/22 -add china_ip_route 103.89.184.0/22 -add china_ip_route 103.89.188.0/22 -add china_ip_route 103.89.192.0/22 -add china_ip_route 103.89.196.0/22 -add china_ip_route 103.89.200.0/22 -add china_ip_route 103.89.204.0/22 -add china_ip_route 103.89.208.0/22 -add china_ip_route 103.89.212.0/22 -add china_ip_route 103.89.216.0/22 -add china_ip_route 103.89.220.0/22 -add china_ip_route 103.89.224.0/22 -add china_ip_route 103.89.228.0/22 -add china_ip_route 103.90.52.0/22 -add china_ip_route 103.90.92.0/22 -add china_ip_route 103.90.100.0/22 -add china_ip_route 103.90.104.0/22 -add china_ip_route 103.90.108.0/22 -add china_ip_route 103.90.112.0/22 -add china_ip_route 103.90.116.0/22 -add china_ip_route 103.90.120.0/22 -add china_ip_route 103.90.124.0/22 -add china_ip_route 103.90.128.0/22 -add china_ip_route 103.90.132.0/22 -add china_ip_route 103.90.152.0/22 -add china_ip_route 103.90.168.0/22 -add china_ip_route 103.90.173.0/24 -add china_ip_route 103.90.176.0/22 -add china_ip_route 103.90.188.0/22 -add china_ip_route 103.90.192.0/22 -add china_ip_route 103.91.36.0/22 -add china_ip_route 103.91.40.0/22 -add china_ip_route 103.91.108.0/22 -add china_ip_route 103.91.152.0/22 -add china_ip_route 103.91.176.0/22 -add china_ip_route 103.91.200.0/22 -add china_ip_route 103.91.208.0/22 -add china_ip_route 103.91.212.0/22 -add china_ip_route 103.91.219.0/24 -add china_ip_route 103.91.236.0/22 -add china_ip_route 103.91.252.0/22 -add china_ip_route 103.92.0.0/22 -add china_ip_route 103.92.4.0/22 -add china_ip_route 103.92.8.0/22 -add china_ip_route 103.92.12.0/22 -add china_ip_route 103.92.48.0/22 -add china_ip_route 103.92.52.0/22 -add china_ip_route 103.92.56.0/22 -add china_ip_route 103.92.60.0/22 -add china_ip_route 103.92.64.0/22 -add china_ip_route 103.92.68.0/22 -add china_ip_route 103.92.72.0/22 -add china_ip_route 103.92.76.0/22 -add china_ip_route 103.92.80.0/22 -add china_ip_route 103.92.86.0/24 -add china_ip_route 103.92.88.0/22 -add china_ip_route 103.92.108.0/22 -add china_ip_route 103.92.124.0/22 -add china_ip_route 103.92.128.0/24 -add china_ip_route 103.92.132.0/22 -add china_ip_route 103.92.156.0/22 -add china_ip_route 103.92.164.0/22 -add china_ip_route 103.92.168.0/22 -add china_ip_route 103.92.172.0/22 -add china_ip_route 103.92.176.0/22 -add china_ip_route 103.92.180.0/22 -add china_ip_route 103.92.184.0/22 -add china_ip_route 103.92.188.0/22 -add china_ip_route 103.92.192.0/22 -add china_ip_route 103.92.236.0/22 -add china_ip_route 103.92.240.0/22 -add china_ip_route 103.92.244.0/22 -add china_ip_route 103.92.248.0/22 -add china_ip_route 103.92.252.0/22 -add china_ip_route 103.93.0.0/22 -add china_ip_route 103.93.4.0/22 -add china_ip_route 103.93.28.0/22 -add china_ip_route 103.93.76.0/22 -add china_ip_route 103.93.84.0/22 -add china_ip_route 103.93.152.0/22 -add china_ip_route 103.93.180.0/22 -add china_ip_route 103.93.204.0/22 -add china_ip_route 103.94.12.0/22 -add china_ip_route 103.94.20.0/22 -add china_ip_route 103.94.28.0/22 -add china_ip_route 103.94.32.0/22 -add china_ip_route 103.94.36.0/22 -add china_ip_route 103.94.40.0/22 -add china_ip_route 103.94.44.0/22 -add china_ip_route 103.94.72.0/22 -add china_ip_route 103.94.88.0/22 -add china_ip_route 103.94.116.0/22 -add china_ip_route 103.94.160.0/22 -add china_ip_route 103.94.180.0/22 -add china_ip_route 103.94.200.0/22 -add china_ip_route 103.95.28.0/22 -add china_ip_route 103.95.52.0/22 -add china_ip_route 103.95.64.0/22 -add china_ip_route 103.95.68.0/22 -add china_ip_route 103.95.88.0/22 -add china_ip_route 103.95.92.0/22 -add china_ip_route 103.95.116.0/22 -add china_ip_route 103.95.128.0/22 -add china_ip_route 103.95.136.0/22 -add china_ip_route 103.95.140.0/22 -add china_ip_route 103.95.144.0/22 -add china_ip_route 103.95.152.0/22 -add china_ip_route 103.95.207.0/24 -add china_ip_route 103.95.216.0/22 -add china_ip_route 103.95.220.0/22 -add china_ip_route 103.95.224.0/22 -add china_ip_route 103.95.236.0/22 -add china_ip_route 103.95.240.0/22 -add china_ip_route 103.95.244.0/22 -add china_ip_route 103.95.248.0/22 -add china_ip_route 103.95.252.0/22 -add china_ip_route 103.96.0.0/22 -add china_ip_route 103.96.8.0/22 -add china_ip_route 103.96.80.0/22 -add china_ip_route 103.96.124.0/22 -add china_ip_route 103.96.136.0/22 -add china_ip_route 103.96.140.0/24 -add china_ip_route 103.96.148.0/22 -add china_ip_route 103.96.152.0/22 -add china_ip_route 103.96.156.0/22 -add china_ip_route 103.96.160.0/22 -add china_ip_route 103.96.164.0/22 -add china_ip_route 103.96.168.0/22 -add china_ip_route 103.96.172.0/22 -add china_ip_route 103.96.176.0/22 -add china_ip_route 103.96.180.0/22 -add china_ip_route 103.96.184.0/22 -add china_ip_route 103.96.188.0/22 -add china_ip_route 103.96.192.0/22 -add china_ip_route 103.96.196.0/22 -add china_ip_route 103.96.200.0/22 -add china_ip_route 103.96.204.0/22 -add china_ip_route 103.96.208.0/22 -add china_ip_route 103.96.212.0/22 -add china_ip_route 103.96.216.0/22 -add china_ip_route 103.97.8.0/22 -add china_ip_route 103.97.12.0/22 -add china_ip_route 103.97.16.0/22 -add china_ip_route 103.97.20.0/22 -add china_ip_route 103.97.24.0/22 -add china_ip_route 103.97.28.0/22 -add china_ip_route 103.97.32.0/22 -add china_ip_route 103.97.36.0/22 -add china_ip_route 103.97.40.0/22 -add china_ip_route 103.97.56.0/22 -add china_ip_route 103.97.60.0/22 -add china_ip_route 103.97.64.0/22 -add china_ip_route 103.97.68.0/22 -add china_ip_route 103.97.72.0/22 -add china_ip_route 103.97.80.0/22 -add china_ip_route 103.97.112.0/22 -add china_ip_route 103.97.116.0/22 -add china_ip_route 103.97.128.0/22 -add china_ip_route 103.97.144.0/22 -add china_ip_route 103.97.148.0/22 -add china_ip_route 103.97.188.0/22 -add china_ip_route 103.97.192.0/22 -add china_ip_route 103.97.224.0/22 -add china_ip_route 103.97.228.0/23 -add china_ip_route 103.98.28.0/23 -add china_ip_route 103.98.40.0/22 -add china_ip_route 103.98.44.0/22 -add china_ip_route 103.98.48.0/22 -add china_ip_route 103.98.56.0/22 -add china_ip_route 103.98.80.0/22 -add china_ip_route 103.98.88.0/22 -add china_ip_route 103.98.92.0/22 -add china_ip_route 103.98.96.0/22 -add china_ip_route 103.98.100.0/22 -add china_ip_route 103.98.124.0/22 -add china_ip_route 103.98.136.0/22 -add china_ip_route 103.98.140.0/22 -add china_ip_route 103.98.144.0/22 -add china_ip_route 103.98.164.0/22 -add china_ip_route 103.98.168.0/22 -add china_ip_route 103.98.180.0/22 -add china_ip_route 103.98.196.0/22 -add china_ip_route 103.98.216.0/22 -add china_ip_route 103.98.220.0/22 -add china_ip_route 103.98.224.0/22 -add china_ip_route 103.98.228.0/22 -add china_ip_route 103.98.232.0/22 -add china_ip_route 103.98.240.0/22 -add china_ip_route 103.98.244.0/22 -add china_ip_route 103.98.248.0/22 -add china_ip_route 103.98.252.0/22 -add china_ip_route 103.99.40.0/23 -add china_ip_route 103.99.52.0/22 -add china_ip_route 103.99.56.0/22 -add china_ip_route 103.99.60.0/22 -add china_ip_route 103.99.76.0/22 -add china_ip_route 103.99.104.0/22 -add china_ip_route 103.99.116.0/22 -add china_ip_route 103.99.120.0/22 -add china_ip_route 103.99.152.0/22 -add china_ip_route 103.99.220.0/22 -add china_ip_route 103.99.232.0/22 -add china_ip_route 103.99.236.0/22 -add china_ip_route 103.100.0.0/22 -add china_ip_route 103.100.32.0/22 -add china_ip_route 103.100.40.0/22 -add china_ip_route 103.100.48.0/22 -add china_ip_route 103.100.52.0/22 -add china_ip_route 103.100.56.0/22 -add china_ip_route 103.100.60.0/22 -add china_ip_route 103.100.64.0/22 -add china_ip_route 103.100.68.0/22 -add china_ip_route 103.100.88.0/22 -add china_ip_route 103.100.116.0/22 -add china_ip_route 103.100.140.0/22 -add china_ip_route 103.100.144.0/22 -add china_ip_route 103.100.236.0/22 -add china_ip_route 103.100.240.0/22 -add china_ip_route 103.100.248.0/22 -add china_ip_route 103.100.252.0/22 -add china_ip_route 103.101.4.0/22 -add china_ip_route 103.101.8.0/22 -add china_ip_route 103.101.12.0/22 -add china_ip_route 103.101.28.0/22 -add china_ip_route 103.101.60.0/22 -add china_ip_route 103.101.120.0/22 -add china_ip_route 103.101.124.0/22 -add china_ip_route 103.101.144.0/22 -add china_ip_route 103.101.148.0/22 -add china_ip_route 103.101.153.0/24 -add china_ip_route 103.101.180.0/22 -add china_ip_route 103.101.184.0/22 -add china_ip_route 103.102.76.0/22 -add china_ip_route 103.102.80.0/22 -add china_ip_route 103.102.168.0/22 -add china_ip_route 103.102.172.0/22 -add china_ip_route 103.102.180.0/22 -add china_ip_route 103.102.184.0/22 -add china_ip_route 103.102.188.0/22 -add china_ip_route 103.102.192.0/22 -add china_ip_route 103.102.196.0/22 -add china_ip_route 103.102.200.0/22 -add china_ip_route 103.102.208.0/22 -add china_ip_route 103.102.212.0/22 -add china_ip_route 103.103.12.0/22 -add china_ip_route 103.103.16.0/22 -add china_ip_route 103.103.36.0/22 -add china_ip_route 103.103.68.0/22 -add china_ip_route 103.103.72.0/22 -add china_ip_route 103.103.176.0/22 -add china_ip_route 103.103.188.0/22 -add china_ip_route 103.103.200.0/22 -add china_ip_route 103.103.204.0/22 -add china_ip_route 103.103.220.0/22 -add china_ip_route 103.103.224.0/22 -add china_ip_route 103.103.228.0/22 -add china_ip_route 103.103.232.0/22 -add china_ip_route 103.103.248.0/22 -add china_ip_route 103.103.252.0/22 -add china_ip_route 103.104.0.0/22 -add china_ip_route 103.104.4.0/22 -add china_ip_route 103.104.36.0/22 -add china_ip_route 103.104.40.0/22 -add china_ip_route 103.104.64.0/22 -add china_ip_route 103.104.104.0/22 -add china_ip_route 103.104.152.0/22 -add china_ip_route 103.104.168.0/22 -add china_ip_route 103.104.172.0/22 -add china_ip_route 103.104.188.0/22 -add china_ip_route 103.104.198.0/23 -add china_ip_route 103.104.252.0/22 -add china_ip_route 103.105.0.0/22 -add china_ip_route 103.105.4.0/22 -add china_ip_route 103.105.12.0/22 -add china_ip_route 103.105.16.0/22 -add china_ip_route 103.105.23.0/24 -add china_ip_route 103.105.56.0/22 -add china_ip_route 103.105.60.0/22 -add china_ip_route 103.105.116.0/22 -add china_ip_route 103.105.132.0/22 -add china_ip_route 103.105.180.0/22 -add china_ip_route 103.105.184.0/22 -add china_ip_route 103.105.200.0/22 -add china_ip_route 103.105.204.0/22 -add china_ip_route 103.105.220.0/22 -add china_ip_route 103.106.36.0/22 -add china_ip_route 103.106.40.0/22 -add china_ip_route 103.106.44.0/22 -add china_ip_route 103.106.60.0/22 -add china_ip_route 103.106.68.0/22 -add china_ip_route 103.106.96.0/22 -add china_ip_route 103.106.120.0/22 -add china_ip_route 103.106.128.0/22 -add china_ip_route 103.106.132.0/22 -add china_ip_route 103.106.160.0/22 -add china_ip_route 103.106.188.0/22 -add china_ip_route 103.106.196.0/22 -add china_ip_route 103.106.202.0/23 -add china_ip_route 103.106.212.0/22 -add china_ip_route 103.106.244.0/22 -add china_ip_route 103.106.252.0/22 -add china_ip_route 103.107.0.0/22 -add china_ip_route 103.107.8.0/24 -add china_ip_route 103.107.28.0/22 -add china_ip_route 103.107.32.0/22 -add china_ip_route 103.107.44.0/22 -add china_ip_route 103.107.72.0/22 -add china_ip_route 103.107.108.0/22 -add china_ip_route 103.107.164.0/22 -add china_ip_route 103.107.168.0/22 -add china_ip_route 103.107.188.0/22 -add china_ip_route 103.107.192.0/22 -add china_ip_route 103.107.208.0/22 -add china_ip_route 103.107.212.0/22 -add china_ip_route 103.107.216.0/22 -add china_ip_route 103.107.220.0/22 -add china_ip_route 103.108.52.0/22 -add china_ip_route 103.108.64.0/22 -add china_ip_route 103.108.160.0/22 -add china_ip_route 103.108.164.0/22 -add china_ip_route 103.108.184.0/23 -add china_ip_route 103.108.188.0/23 -add china_ip_route 103.108.192.0/22 -add china_ip_route 103.108.196.0/22 -add china_ip_route 103.108.208.0/22 -add china_ip_route 103.108.212.0/22 -add china_ip_route 103.108.224.0/22 -add china_ip_route 103.108.244.0/22 -add china_ip_route 103.108.251.0/24 -add china_ip_route 103.109.20.0/22 -add china_ip_route 103.109.48.0/22 -add china_ip_route 103.109.88.0/22 -add china_ip_route 103.109.106.0/23 -add china_ip_route 103.109.248.0/22 -add china_ip_route 103.110.32.0/22 -add china_ip_route 103.110.80.0/23 -add china_ip_route 103.110.92.0/22 -add china_ip_route 103.110.100.0/22 -add china_ip_route 103.110.116.0/22 -add china_ip_route 103.110.127.0/24 -add china_ip_route 103.110.128.0/23 -add china_ip_route 103.110.131.0/24 -add china_ip_route 103.110.132.0/22 -add china_ip_route 103.110.136.0/22 -add china_ip_route 103.110.152.0/22 -add china_ip_route 103.110.156.0/22 -add china_ip_route 103.110.188.0/22 -add china_ip_route 103.110.204.0/22 -add china_ip_route 103.111.64.0/22 -add china_ip_route 103.111.172.0/22 -add china_ip_route 103.111.252.0/22 -add china_ip_route 103.112.28.0/22 -add china_ip_route 103.112.68.0/22 -add china_ip_route 103.112.72.0/22 -add china_ip_route 103.112.88.0/22 -add china_ip_route 103.112.92.0/22 -add china_ip_route 103.112.96.0/22 -add china_ip_route 103.112.108.0/22 -add china_ip_route 103.112.112.0/22 -add china_ip_route 103.112.116.0/22 -add china_ip_route 103.112.140.0/22 -add china_ip_route 103.112.172.0/22 -add china_ip_route 103.112.184.0/22 -add china_ip_route 103.112.208.0/22 -add china_ip_route 103.113.4.0/22 -add china_ip_route 103.113.92.0/22 -add china_ip_route 103.113.144.0/22 -add china_ip_route 103.113.220.0/22 -add china_ip_route 103.113.232.0/22 -add china_ip_route 103.113.236.0/22 -add china_ip_route 103.114.4.0/22 -add china_ip_route 103.114.28.0/22 -add china_ip_route 103.114.68.0/22 -add china_ip_route 103.114.72.0/22 -add china_ip_route 103.114.100.0/22 -add china_ip_route 103.114.132.0/22 -add china_ip_route 103.114.148.0/22 -add china_ip_route 103.114.156.0/22 -add china_ip_route 103.114.176.0/22 -add china_ip_route 103.114.212.0/22 -add china_ip_route 103.114.236.0/22 -add china_ip_route 103.114.240.0/22 -add china_ip_route 103.115.16.0/22 -add china_ip_route 103.115.40.0/22 -add china_ip_route 103.115.44.0/22 -add china_ip_route 103.115.48.0/22 -add china_ip_route 103.115.52.0/22 -add china_ip_route 103.115.56.0/22 -add china_ip_route 103.115.60.0/22 -add china_ip_route 103.115.64.0/22 -add china_ip_route 103.115.68.0/22 -add china_ip_route 103.115.92.0/22 -add china_ip_route 103.115.120.0/22 -add china_ip_route 103.115.148.0/22 -add china_ip_route 103.115.204.0/23 -add china_ip_route 103.115.248.0/22 -add china_ip_route 103.116.20.0/22 -add china_ip_route 103.116.40.0/22 -add china_ip_route 103.116.64.0/22 -add china_ip_route 103.116.72.0/22 -add china_ip_route 103.116.76.0/22 -add china_ip_route 103.116.92.0/22 -add china_ip_route 103.116.120.0/22 -add china_ip_route 103.116.128.0/22 -add china_ip_route 103.116.132.0/23 -add china_ip_route 103.116.148.0/22 -add china_ip_route 103.116.184.0/22 -add china_ip_route 103.116.206.0/23 -add china_ip_route 103.116.220.0/22 -add china_ip_route 103.116.224.0/22 -add china_ip_route 103.116.228.0/22 -add china_ip_route 103.117.16.0/22 -add china_ip_route 103.117.72.0/22 -add china_ip_route 103.117.88.0/22 -add china_ip_route 103.117.132.0/22 -add china_ip_route 103.117.136.0/22 -add china_ip_route 103.117.188.0/22 -add china_ip_route 103.117.220.0/22 -add china_ip_route 103.118.19.0/24 -add china_ip_route 103.118.36.0/22 -add china_ip_route 103.118.52.0/22 -add china_ip_route 103.118.56.0/22 -add china_ip_route 103.118.60.0/22 -add china_ip_route 103.118.64.0/22 -add china_ip_route 103.118.68.0/22 -add china_ip_route 103.118.72.0/22 -add china_ip_route 103.118.88.0/22 -add china_ip_route 103.118.173.0/24 -add china_ip_route 103.118.192.0/22 -add china_ip_route 103.118.196.0/22 -add china_ip_route 103.118.200.0/22 -add china_ip_route 103.118.204.0/22 -add china_ip_route 103.118.208.0/22 -add china_ip_route 103.118.212.0/22 -add china_ip_route 103.118.216.0/22 -add china_ip_route 103.118.220.0/22 -add china_ip_route 103.118.240.0/22 -add china_ip_route 103.118.244.0/22 -add china_ip_route 103.118.248.0/22 -add china_ip_route 103.118.252.0/22 -add china_ip_route 103.119.0.0/22 -add china_ip_route 103.119.12.0/22 -add china_ip_route 103.119.16.0/22 -add china_ip_route 103.119.28.0/22 -add china_ip_route 103.119.44.0/22 -add china_ip_route 103.119.104.0/22 -add china_ip_route 103.119.115.0/24 -add china_ip_route 103.119.156.0/22 -add china_ip_route 103.119.180.0/22 -add china_ip_route 103.119.200.0/22 -add china_ip_route 103.119.224.0/22 -add china_ip_route 103.120.52.0/22 -add china_ip_route 103.120.72.0/22 -add china_ip_route 103.120.88.0/22 -add china_ip_route 103.120.96.0/22 -add china_ip_route 103.120.100.0/22 -add china_ip_route 103.120.140.0/22 -add china_ip_route 103.120.196.0/22 -add china_ip_route 103.120.224.0/22 -add china_ip_route 103.121.52.0/22 -add china_ip_route 103.121.92.0/22 -add china_ip_route 103.121.160.0/22 -add china_ip_route 103.121.164.0/22 -add china_ip_route 103.121.250.0/24 -add china_ip_route 103.121.252.0/22 -add china_ip_route 103.122.48.0/22 -add china_ip_route 103.122.176.0/22 -add china_ip_route 103.122.192.0/22 -add china_ip_route 103.122.240.0/22 -add china_ip_route 103.123.4.0/22 -add china_ip_route 103.123.56.0/22 -add china_ip_route 103.123.88.0/22 -add china_ip_route 103.123.92.0/22 -add china_ip_route 103.123.116.0/22 -add china_ip_route 103.123.160.0/22 -add china_ip_route 103.123.176.0/22 -add china_ip_route 103.123.200.0/22 -add china_ip_route 103.123.204.0/22 -add china_ip_route 103.123.208.0/22 -add china_ip_route 103.123.212.0/22 -add china_ip_route 103.124.24.0/22 -add china_ip_route 103.124.48.0/22 -add china_ip_route 103.124.64.0/22 -add china_ip_route 103.124.212.0/22 -add china_ip_route 103.124.216.0/22 -add china_ip_route 103.125.20.0/22 -add china_ip_route 103.125.44.0/22 -add china_ip_route 103.125.132.0/22 -add china_ip_route 103.125.164.0/22 -add china_ip_route 103.125.196.0/22 -add china_ip_route 103.125.236.0/22 -add china_ip_route 103.125.248.0/22 -add china_ip_route 103.126.0.0/22 -add china_ip_route 103.126.16.0/22 -add china_ip_route 103.126.44.0/22 -add china_ip_route 103.126.100.0/22 -add china_ip_route 103.126.124.0/22 -add china_ip_route 103.126.128.0/22 -add china_ip_route 103.126.132.0/22 -add china_ip_route 103.126.208.0/22 -add china_ip_route 103.126.241.0/24 -add china_ip_route 103.129.52.0/22 -add china_ip_route 103.130.132.0/22 -add china_ip_route 103.130.152.0/24 -add china_ip_route 103.130.160.0/22 -add china_ip_route 103.130.228.0/22 -add china_ip_route 103.131.20.0/22 -add china_ip_route 103.131.36.0/22 -add china_ip_route 103.131.152.0/22 -add china_ip_route 103.131.168.0/22 -add china_ip_route 103.131.176.0/22 -add china_ip_route 103.131.224.0/22 -add china_ip_route 103.131.228.0/22 -add china_ip_route 103.131.240.0/22 -add china_ip_route 103.132.60.0/22 -add china_ip_route 103.132.64.0/22 -add china_ip_route 103.132.68.0/22 -add china_ip_route 103.132.72.0/22 -add china_ip_route 103.132.76.0/22 -add china_ip_route 103.132.80.0/22 -add china_ip_route 103.132.104.0/22 -add china_ip_route 103.132.108.0/22 -add china_ip_route 103.132.112.0/22 -add china_ip_route 103.132.116.0/22 -add china_ip_route 103.132.120.0/22 -add china_ip_route 103.132.160.0/22 -add china_ip_route 103.132.164.0/22 -add china_ip_route 103.132.188.0/22 -add china_ip_route 103.132.208.0/22 -add china_ip_route 103.132.212.0/22 -add china_ip_route 103.132.234.0/23 -add china_ip_route 103.133.12.0/22 -add china_ip_route 103.133.40.0/22 -add china_ip_route 103.133.128.0/22 -add china_ip_route 103.133.136.0/22 -add china_ip_route 103.133.176.0/22 -add china_ip_route 103.133.232.0/22 -add china_ip_route 103.134.12.0/24 -add china_ip_route 103.134.196.0/22 -add china_ip_route 103.135.80.0/22 -add china_ip_route 103.135.124.0/22 -add china_ip_route 103.135.148.0/22 -add china_ip_route 103.135.156.0/22 -add china_ip_route 103.135.160.0/22 -add china_ip_route 103.135.164.0/22 -add china_ip_route 103.135.176.0/22 -add china_ip_route 103.135.184.0/22 -add china_ip_route 103.135.192.0/22 -add china_ip_route 103.135.196.0/22 -add china_ip_route 103.135.236.0/22 -add china_ip_route 103.136.128.0/22 -add china_ip_route 103.136.232.0/22 -add china_ip_route 103.137.58.0/23 -add china_ip_route 103.137.60.0/24 -add china_ip_route 103.137.76.0/22 -add china_ip_route 103.137.136.0/23 -add china_ip_route 103.137.149.0/24 -add china_ip_route 103.137.180.0/22 -add china_ip_route 103.137.236.0/22 -add china_ip_route 103.138.2.0/23 -add china_ip_route 103.138.12.0/23 -add china_ip_route 103.138.80.0/22 -add china_ip_route 103.138.134.0/23 -add china_ip_route 103.138.156.0/23 -add china_ip_route 103.138.208.0/23 -add china_ip_route 103.138.220.0/23 -add china_ip_route 103.138.246.0/23 -add china_ip_route 103.138.248.0/23 -add china_ip_route 103.139.0.0/23 -add china_ip_route 103.139.2.0/23 -add china_ip_route 103.139.22.0/23 -add china_ip_route 103.139.113.0/24 -add china_ip_route 103.139.134.0/23 -add china_ip_route 103.139.136.0/23 -add china_ip_route 103.139.172.0/23 -add china_ip_route 103.139.200.0/23 -add china_ip_route 103.139.204.0/23 -add china_ip_route 103.139.212.0/23 -add china_ip_route 103.140.8.0/23 -add china_ip_route 103.140.14.0/23 -add china_ip_route 103.140.70.0/23 -add china_ip_route 103.140.126.0/23 -add china_ip_route 103.140.140.0/23 -add china_ip_route 103.140.144.0/23 -add china_ip_route 103.140.152.0/23 -add china_ip_route 103.140.192.0/23 -add china_ip_route 103.140.194.0/23 -add china_ip_route 103.140.228.0/23 -add china_ip_route 103.141.10.0/23 -add china_ip_route 103.141.36.0/23 -add china_ip_route 103.141.58.0/23 -add china_ip_route 103.141.128.0/23 -add china_ip_route 103.141.186.0/23 -add china_ip_route 103.141.242.0/23 -add china_ip_route 103.142.28.0/23 -add china_ip_route 103.142.58.0/23 -add china_ip_route 103.142.82.0/23 -add china_ip_route 103.142.96.0/23 -add china_ip_route 103.142.102.0/23 -add china_ip_route 103.142.122.0/23 -add china_ip_route 103.142.126.0/24 -add china_ip_route 103.142.128.0/23 -add china_ip_route 103.142.140.0/23 -add china_ip_route 103.142.154.0/23 -add china_ip_route 103.142.156.0/23 -add china_ip_route 103.142.172.0/23 -add china_ip_route 103.142.180.0/23 -add china_ip_route 103.142.186.0/23 -add china_ip_route 103.142.190.0/23 -add china_ip_route 103.142.220.0/23 -add china_ip_route 103.142.230.0/24 -add china_ip_route 103.142.234.0/23 -add china_ip_route 103.142.238.0/23 -add china_ip_route 103.142.248.0/23 -add china_ip_route 103.143.16.0/23 -add china_ip_route 103.143.18.0/23 -add china_ip_route 103.143.31.0/24 -add china_ip_route 103.143.74.0/23 -add china_ip_route 103.143.120.0/23 -add china_ip_route 103.143.124.0/23 -add china_ip_route 103.143.132.0/23 -add china_ip_route 103.143.134.0/23 -add china_ip_route 103.143.174.0/23 -add china_ip_route 103.143.228.0/23 -add china_ip_route 103.144.40.0/23 -add china_ip_route 103.144.52.0/23 -add china_ip_route 103.144.66.0/23 -add china_ip_route 103.144.70.0/23 -add china_ip_route 103.144.72.0/23 -add china_ip_route 103.144.88.0/24 -add china_ip_route 103.144.108.0/23 -add china_ip_route 103.144.136.0/23 -add china_ip_route 103.144.148.0/23 -add china_ip_route 103.144.158.0/23 -add china_ip_route 103.144.240.0/23 -add china_ip_route 103.145.38.0/23 -add china_ip_route 103.145.40.0/23 -add china_ip_route 103.145.42.0/23 -add china_ip_route 103.145.60.0/23 -add china_ip_route 103.145.72.0/23 -add china_ip_route 103.145.80.0/23 -add china_ip_route 103.145.86.0/23 -add china_ip_route 103.145.92.0/23 -add china_ip_route 103.145.94.0/23 -add china_ip_route 103.145.98.0/23 -add china_ip_route 103.145.106.0/23 -add china_ip_route 103.145.122.0/23 -add china_ip_route 103.145.188.0/23 -add china_ip_route 103.145.190.0/23 -add china_ip_route 103.146.6.0/23 -add china_ip_route 103.146.72.0/23 -add china_ip_route 103.146.88.0/23 -add china_ip_route 103.146.90.0/23 -add china_ip_route 103.146.124.0/23 -add china_ip_route 103.146.126.0/23 -add china_ip_route 103.146.138.0/23 -add china_ip_route 103.146.147.0/24 -add china_ip_route 103.146.230.0/23 -add china_ip_route 103.146.236.0/23 -add china_ip_route 103.146.252.0/23 -add china_ip_route 103.147.12.0/23 -add china_ip_route 103.147.124.0/23 -add china_ip_route 103.147.198.0/23 -add china_ip_route 103.147.206.0/23 -add china_ip_route 103.147.211.0/24 -add china_ip_route 103.148.174.0/23 -add china_ip_route 103.149.6.0/23 -add china_ip_route 103.149.17.0/24 -add china_ip_route 103.149.44.0/23 -add china_ip_route 103.149.110.0/23 -add china_ip_route 103.149.132.0/23 -add china_ip_route 103.149.144.0/23 -add china_ip_route 103.149.156.0/23 -add china_ip_route 103.149.181.0/24 -add china_ip_route 103.149.190.0/23 -add china_ip_route 103.149.210.0/23 -add china_ip_route 103.149.214.0/23 -add china_ip_route 103.149.220.0/23 -add china_ip_route 103.149.242.0/23 -add china_ip_route 103.149.244.0/23 -add china_ip_route 103.149.246.0/23 -add china_ip_route 103.149.248.0/23 -add china_ip_route 103.150.24.0/23 -add china_ip_route 103.150.66.0/23 -add china_ip_route 103.150.72.0/23 -add china_ip_route 103.150.122.0/23 -add china_ip_route 103.150.126.0/23 -add china_ip_route 103.150.128.0/23 -add china_ip_route 103.150.130.0/23 -add china_ip_route 103.150.146.0/23 -add china_ip_route 103.150.164.0/23 -add china_ip_route 103.150.172.0/23 -add china_ip_route 103.150.180.0/23 -add china_ip_route 103.150.200.0/23 -add china_ip_route 103.150.210.0/23 -add china_ip_route 103.150.214.0/23 -add china_ip_route 103.150.216.0/23 -add china_ip_route 103.150.244.0/23 -add china_ip_route 103.151.4.0/23 -add china_ip_route 103.151.44.0/23 -add china_ip_route 103.151.138.0/23 -add china_ip_route 103.151.142.0/23 -add china_ip_route 103.151.148.0/23 -add china_ip_route 103.151.150.0/23 -add china_ip_route 103.151.158.0/23 -add china_ip_route 103.151.178.0/23 -add china_ip_route 103.151.206.0/23 -add china_ip_route 103.151.216.0/23 -add china_ip_route 103.151.228.0/23 -add china_ip_route 103.152.14.0/23 -add china_ip_route 103.152.24.0/23 -add china_ip_route 103.152.28.0/23 -add china_ip_route 103.152.30.0/23 -add china_ip_route 103.152.56.0/23 -add china_ip_route 103.152.76.0/23 -add china_ip_route 103.152.80.0/23 -add china_ip_route 103.152.98.0/23 -add china_ip_route 103.152.112.0/23 -add china_ip_route 103.152.120.0/23 -add china_ip_route 103.152.122.0/23 -add china_ip_route 103.152.132.0/23 -add china_ip_route 103.152.152.0/23 -add china_ip_route 103.152.168.0/23 -add china_ip_route 103.152.170.0/23 -add china_ip_route 103.152.186.0/23 -add china_ip_route 103.152.190.0/23 -add china_ip_route 103.152.192.0/23 -add china_ip_route 103.152.200.0/23 -add china_ip_route 103.152.208.0/23 -add china_ip_route 103.152.224.0/23 -add china_ip_route 103.152.226.0/23 -add china_ip_route 103.152.246.0/23 -add china_ip_route 103.152.250.0/23 -add china_ip_route 103.153.4.0/23 -add china_ip_route 103.153.36.0/23 -add china_ip_route 103.153.98.0/23 -add china_ip_route 103.153.100.0/23 -add china_ip_route 103.153.114.0/23 -add china_ip_route 103.153.122.0/23 -add china_ip_route 103.153.128.0/23 -add china_ip_route 103.153.132.0/23 -add china_ip_route 103.153.138.0/23 -add china_ip_route 103.153.146.0/23 -add china_ip_route 103.153.160.0/23 -add china_ip_route 103.154.18.0/23 -add china_ip_route 103.154.30.0/23 -add china_ip_route 103.154.32.0/23 -add china_ip_route 103.154.40.0/23 -add china_ip_route 103.154.66.0/23 -add china_ip_route 103.154.162.0/23 -add china_ip_route 103.154.164.0/23 -add china_ip_route 103.154.168.0/23 -add china_ip_route 103.154.242.0/23 -add china_ip_route 103.155.14.0/23 -add china_ip_route 103.155.16.0/23 -add china_ip_route 103.155.34.0/23 -add china_ip_route 103.155.48.0/23 -add china_ip_route 103.155.76.0/23 -add china_ip_route 103.155.100.0/23 -add china_ip_route 103.155.110.0/23 -add china_ip_route 103.155.120.0/23 -add china_ip_route 103.155.214.0/23 -add china_ip_route 103.155.248.0/23 -add china_ip_route 103.156.24.0/23 -add china_ip_route 103.156.28.0/23 -add china_ip_route 103.156.68.0/23 -add china_ip_route 103.156.78.0/23 -add china_ip_route 103.156.104.0/23 -add china_ip_route 103.156.158.0/23 -add china_ip_route 103.156.166.0/23 -add china_ip_route 103.156.174.0/23 -add china_ip_route 103.156.186.0/23 -add china_ip_route 103.156.228.0/23 -add china_ip_route 103.157.30.0/23 -add china_ip_route 103.157.138.0/23 -add china_ip_route 103.157.174.0/23 -add china_ip_route 103.157.212.0/23 -add china_ip_route 103.157.234.0/23 -add china_ip_route 103.157.254.0/23 -add china_ip_route 103.158.0.0/23 -add china_ip_route 103.158.8.0/23 -add china_ip_route 103.158.13.0/24 -add china_ip_route 103.158.16.0/23 -add china_ip_route 103.158.190.0/23 -add china_ip_route 103.158.200.0/23 -add china_ip_route 103.158.224.0/23 -add china_ip_route 103.159.80.0/23 -add china_ip_route 103.159.122.0/23 -add china_ip_route 103.159.124.0/23 -add china_ip_route 103.159.134.0/23 -add china_ip_route 103.159.142.0/23 -add china_ip_route 103.192.0.0/22 -add china_ip_route 103.192.4.0/22 -add china_ip_route 103.192.8.0/22 -add china_ip_route 103.192.12.0/22 -add china_ip_route 103.192.16.0/22 -add china_ip_route 103.192.20.0/22 -add china_ip_route 103.192.24.0/22 -add china_ip_route 103.192.28.0/22 -add china_ip_route 103.192.48.0/22 -add china_ip_route 103.192.52.0/22 -add china_ip_route 103.192.56.0/22 -add china_ip_route 103.192.84.0/22 -add china_ip_route 103.192.88.0/22 -add china_ip_route 103.192.92.0/22 -add china_ip_route 103.192.96.0/22 -add china_ip_route 103.192.100.0/22 -add china_ip_route 103.192.104.0/22 -add china_ip_route 103.192.108.0/22 -add china_ip_route 103.192.112.0/22 -add china_ip_route 103.192.128.0/22 -add china_ip_route 103.192.132.0/22 -add china_ip_route 103.192.136.0/22 -add china_ip_route 103.192.140.0/22 -add china_ip_route 103.192.144.0/22 -add china_ip_route 103.192.164.0/22 -add china_ip_route 103.192.188.0/22 -add china_ip_route 103.192.208.0/22 -add china_ip_route 103.192.212.0/22 -add china_ip_route 103.192.216.0/22 -add china_ip_route 103.192.252.0/22 -add china_ip_route 103.193.40.0/22 -add china_ip_route 103.193.44.0/22 -add china_ip_route 103.193.120.0/22 -add china_ip_route 103.193.124.0/22 -add china_ip_route 103.193.140.0/22 -add china_ip_route 103.193.144.0/22 -add china_ip_route 103.193.160.0/22 -add china_ip_route 103.193.188.0/22 -add china_ip_route 103.193.192.0/22 -add china_ip_route 103.193.212.0/22 -add china_ip_route 103.193.216.0/22 -add china_ip_route 103.193.220.0/22 -add china_ip_route 103.193.224.0/22 -add china_ip_route 103.193.228.0/22 -add china_ip_route 103.193.232.0/22 -add china_ip_route 103.193.236.0/22 -add china_ip_route 103.193.240.0/22 -add china_ip_route 103.194.16.0/22 -add china_ip_route 103.195.104.0/22 -add china_ip_route 103.195.112.0/22 -add china_ip_route 103.195.136.0/22 -add china_ip_route 103.195.148.0/22 -add china_ip_route 103.195.152.0/22 -add china_ip_route 103.195.160.0/22 -add china_ip_route 103.196.64.0/22 -add china_ip_route 103.196.72.0/22 -add china_ip_route 103.196.88.0/22 -add china_ip_route 103.196.92.0/22 -add china_ip_route 103.196.96.0/22 -add china_ip_route 103.196.168.0/22 -add china_ip_route 103.196.204.0/22 -add china_ip_route 103.197.180.0/22 -add china_ip_route 103.197.228.0/22 -add china_ip_route 103.198.20.0/22 -add china_ip_route 103.198.60.0/22 -add china_ip_route 103.198.64.0/22 -add china_ip_route 103.198.72.0/22 -add china_ip_route 103.198.124.0/22 -add china_ip_route 103.198.156.0/22 -add china_ip_route 103.198.180.0/22 -add china_ip_route 103.198.196.0/22 -add china_ip_route 103.198.200.0/22 -add china_ip_route 103.198.216.0/22 -add china_ip_route 103.198.220.0/22 -add china_ip_route 103.198.224.0/22 -add china_ip_route 103.198.228.0/22 -add china_ip_route 103.198.232.0/22 -add china_ip_route 103.198.236.0/22 -add china_ip_route 103.198.240.0/22 -add china_ip_route 103.198.244.0/22 -add china_ip_route 103.199.164.0/22 -add china_ip_route 103.199.196.0/22 -add china_ip_route 103.199.228.0/22 -add china_ip_route 103.199.248.0/22 -add china_ip_route 103.199.252.0/22 -add china_ip_route 103.200.28.0/22 -add china_ip_route 103.200.52.0/22 -add china_ip_route 103.200.64.0/22 -add china_ip_route 103.200.68.0/22 -add china_ip_route 103.200.136.0/22 -add china_ip_route 103.200.140.0/22 -add china_ip_route 103.200.144.0/22 -add china_ip_route 103.200.148.0/22 -add china_ip_route 103.200.152.0/22 -add china_ip_route 103.200.156.0/22 -add china_ip_route 103.200.160.0/22 -add china_ip_route 103.200.164.0/22 -add china_ip_route 103.200.168.0/22 -add china_ip_route 103.200.172.0/22 -add china_ip_route 103.200.176.0/22 -add china_ip_route 103.200.180.0/22 -add china_ip_route 103.200.184.0/22 -add china_ip_route 103.200.188.0/22 -add china_ip_route 103.200.192.0/22 -add china_ip_route 103.200.220.0/22 -add china_ip_route 103.200.224.0/22 -add china_ip_route 103.200.228.0/22 -add china_ip_route 103.200.232.0/22 -add china_ip_route 103.200.236.0/22 -add china_ip_route 103.200.240.0/22 -add china_ip_route 103.200.244.0/22 -add china_ip_route 103.200.248.0/22 -add china_ip_route 103.200.252.0/22 -add china_ip_route 103.201.0.0/22 -add china_ip_route 103.201.4.0/22 -add china_ip_route 103.201.8.0/22 -add china_ip_route 103.201.12.0/22 -add china_ip_route 103.201.16.0/22 -add china_ip_route 103.201.20.0/22 -add china_ip_route 103.201.28.0/22 -add china_ip_route 103.201.32.0/22 -add china_ip_route 103.201.36.0/22 -add china_ip_route 103.201.40.0/22 -add china_ip_route 103.201.44.0/22 -add china_ip_route 103.201.48.0/22 -add china_ip_route 103.201.52.0/22 -add china_ip_route 103.201.56.0/22 -add china_ip_route 103.201.60.0/22 -add china_ip_route 103.201.64.0/22 -add china_ip_route 103.201.76.0/22 -add china_ip_route 103.201.80.0/22 -add china_ip_route 103.201.84.0/22 -add china_ip_route 103.201.88.0/22 -add china_ip_route 103.201.92.0/22 -add china_ip_route 103.201.96.0/22 -add china_ip_route 103.201.100.0/22 -add china_ip_route 103.201.104.0/22 -add china_ip_route 103.201.108.0/22 -add china_ip_route 103.201.112.0/22 -add china_ip_route 103.201.116.0/22 -add china_ip_route 103.201.120.0/22 -add china_ip_route 103.201.152.0/22 -add china_ip_route 103.201.156.0/22 -add china_ip_route 103.201.160.0/22 -add china_ip_route 103.201.164.0/22 -add china_ip_route 103.201.168.0/22 -add china_ip_route 103.201.172.0/22 -add china_ip_route 103.201.176.0/22 -add china_ip_route 103.201.180.0/22 -add china_ip_route 103.201.184.0/22 -add china_ip_route 103.201.188.0/22 -add china_ip_route 103.201.192.0/22 -add china_ip_route 103.201.196.0/22 -add china_ip_route 103.201.200.0/22 -add china_ip_route 103.201.204.0/22 -add china_ip_route 103.201.208.0/22 -add china_ip_route 103.201.212.0/22 -add china_ip_route 103.201.216.0/22 -add china_ip_route 103.201.220.0/22 -add china_ip_route 103.201.224.0/22 -add china_ip_route 103.201.228.0/22 -add china_ip_route 103.201.232.0/22 -add china_ip_route 103.201.236.0/22 -add china_ip_route 103.201.240.0/22 -add china_ip_route 103.201.244.0/22 -add china_ip_route 103.201.248.0/22 -add china_ip_route 103.201.252.0/22 -add china_ip_route 103.202.0.0/22 -add china_ip_route 103.202.4.0/22 -add china_ip_route 103.202.8.0/22 -add china_ip_route 103.202.12.0/22 -add china_ip_route 103.202.16.0/22 -add china_ip_route 103.202.20.0/22 -add china_ip_route 103.202.24.0/22 -add china_ip_route 103.202.28.0/22 -add china_ip_route 103.202.32.0/22 -add china_ip_route 103.202.36.0/22 -add china_ip_route 103.202.40.0/22 -add china_ip_route 103.202.44.0/22 -add china_ip_route 103.202.56.0/22 -add china_ip_route 103.202.60.0/22 -add china_ip_route 103.202.64.0/22 -add china_ip_route 103.202.68.0/22 -add china_ip_route 103.202.72.0/22 -add china_ip_route 103.202.76.0/22 -add china_ip_route 103.202.80.0/22 -add china_ip_route 103.202.84.0/22 -add china_ip_route 103.202.88.0/22 -add china_ip_route 103.202.92.0/22 -add china_ip_route 103.202.96.0/22 -add china_ip_route 103.202.100.0/22 -add china_ip_route 103.202.104.0/22 -add china_ip_route 103.202.108.0/22 -add china_ip_route 103.202.112.0/22 -add china_ip_route 103.202.116.0/22 -add china_ip_route 103.202.120.0/22 -add china_ip_route 103.202.124.0/22 -add china_ip_route 103.202.128.0/22 -add china_ip_route 103.202.132.0/22 -add china_ip_route 103.202.136.0/22 -add china_ip_route 103.202.140.0/22 -add china_ip_route 103.202.144.0/22 -add china_ip_route 103.202.152.0/22 -add china_ip_route 103.202.156.0/22 -add china_ip_route 103.202.160.0/22 -add china_ip_route 103.202.164.0/22 -add china_ip_route 103.202.168.0/22 -add china_ip_route 103.202.172.0/22 -add china_ip_route 103.202.176.0/22 -add china_ip_route 103.202.180.0/22 -add china_ip_route 103.202.184.0/22 -add china_ip_route 103.202.188.0/22 -add china_ip_route 103.202.192.0/22 -add china_ip_route 103.202.196.0/22 -add china_ip_route 103.202.200.0/21 -add china_ip_route 103.202.212.0/22 -add china_ip_route 103.202.228.0/22 -add china_ip_route 103.202.236.0/22 -add china_ip_route 103.202.240.0/22 -add china_ip_route 103.202.244.0/22 -add china_ip_route 103.202.248.0/22 -add china_ip_route 103.202.252.0/22 -add china_ip_route 103.203.0.0/22 -add china_ip_route 103.203.4.0/22 -add china_ip_route 103.203.8.0/22 -add china_ip_route 103.203.12.0/22 -add china_ip_route 103.203.16.0/22 -add china_ip_route 103.203.20.0/22 -add china_ip_route 103.203.24.0/22 -add china_ip_route 103.203.28.0/22 -add china_ip_route 103.203.32.0/22 -add china_ip_route 103.203.56.0/22 -add china_ip_route 103.203.96.0/22 -add china_ip_route 103.203.100.0/22 -add china_ip_route 103.203.104.0/22 -add china_ip_route 103.203.108.0/22 -add china_ip_route 103.203.112.0/22 -add china_ip_route 103.203.116.0/22 -add china_ip_route 103.203.120.0/22 -add china_ip_route 103.203.124.0/22 -add china_ip_route 103.203.128.0/22 -add china_ip_route 103.203.140.0/22 -add china_ip_route 103.203.164.0/22 -add china_ip_route 103.203.168.0/22 -add china_ip_route 103.203.192.0/22 -add china_ip_route 103.203.200.0/22 -add china_ip_route 103.203.212.0/22 -add china_ip_route 103.203.216.0/22 -add china_ip_route 103.204.24.0/22 -add china_ip_route 103.204.72.0/22 -add china_ip_route 103.204.88.0/22 -add china_ip_route 103.204.112.0/22 -add china_ip_route 103.204.136.0/22 -add china_ip_route 103.204.140.0/22 -add china_ip_route 103.204.144.0/22 -add china_ip_route 103.204.148.0/22 -add china_ip_route 103.204.152.0/22 -add china_ip_route 103.204.196.0/22 -add china_ip_route 103.204.232.0/22 -add china_ip_route 103.204.236.0/22 -add china_ip_route 103.205.4.0/22 -add china_ip_route 103.205.8.0/22 -add china_ip_route 103.205.40.0/22 -add china_ip_route 103.205.44.0/22 -add china_ip_route 103.205.52.0/22 -add china_ip_route 103.205.108.0/22 -add china_ip_route 103.205.116.0/22 -add china_ip_route 103.205.120.0/22 -add china_ip_route 103.205.136.0/22 -add china_ip_route 103.205.162.0/24 -add china_ip_route 103.205.188.0/22 -add china_ip_route 103.205.192.0/22 -add china_ip_route 103.205.196.0/22 -add china_ip_route 103.205.200.0/22 -add china_ip_route 103.205.236.0/22 -add china_ip_route 103.205.248.0/22 -add china_ip_route 103.205.252.0/22 -add china_ip_route 103.206.0.0/22 -add china_ip_route 103.206.44.0/22 -add china_ip_route 103.206.108.0/22 -add china_ip_route 103.206.148.0/22 -add china_ip_route 103.207.48.0/22 -add china_ip_route 103.207.104.0/22 -add china_ip_route 103.207.164.0/22 -add china_ip_route 103.207.184.0/22 -add china_ip_route 103.207.188.0/22 -add china_ip_route 103.207.192.0/22 -add china_ip_route 103.207.196.0/22 -add china_ip_route 103.207.200.0/22 -add china_ip_route 103.207.204.0/22 -add china_ip_route 103.207.208.0/22 -add china_ip_route 103.207.212.0/22 -add china_ip_route 103.207.220.0/22 -add china_ip_route 103.207.228.0/22 -add china_ip_route 103.207.232.0/22 -add china_ip_route 103.208.12.0/22 -add china_ip_route 103.208.16.0/22 -add china_ip_route 103.208.28.0/22 -add china_ip_route 103.208.40.0/22 -add china_ip_route 103.208.44.0/22 -add china_ip_route 103.208.48.0/22 -add china_ip_route 103.208.148.0/22 -add china_ip_route 103.209.112.0/22 -add china_ip_route 103.209.136.0/22 -add china_ip_route 103.209.200.0/22 -add china_ip_route 103.209.208.0/22 -add china_ip_route 103.209.216.0/22 -add china_ip_route 103.210.0.0/22 -add china_ip_route 103.210.20.0/22 -add china_ip_route 103.210.96.0/22 -add china_ip_route 103.210.156.0/22 -add china_ip_route 103.210.160.0/22 -add china_ip_route 103.210.164.0/22 -add china_ip_route 103.210.168.0/22 -add china_ip_route 103.210.172.0/22 -add china_ip_route 103.210.176.0/22 -add china_ip_route 103.210.180.0/22 -add china_ip_route 103.210.184.0/22 -add china_ip_route 103.210.188.0/22 -add china_ip_route 103.210.216.0/22 -add china_ip_route 103.211.44.0/22 -add china_ip_route 103.211.96.0/22 -add china_ip_route 103.211.100.0/22 -add china_ip_route 103.211.156.0/22 -add china_ip_route 103.211.164.0/22 -add china_ip_route 103.211.192.0/22 -add china_ip_route 103.211.220.0/22 -add china_ip_route 103.211.224.0/22 -add china_ip_route 103.211.248.0/22 -add china_ip_route 103.212.0.0/22 -add china_ip_route 103.212.4.0/22 -add china_ip_route 103.212.8.0/22 -add china_ip_route 103.212.12.0/22 -add china_ip_route 103.212.32.0/22 -add china_ip_route 103.212.44.0/22 -add china_ip_route 103.212.48.0/22 -add china_ip_route 103.212.84.0/22 -add china_ip_route 103.212.100.0/22 -add china_ip_route 103.212.104.0/22 -add china_ip_route 103.212.108.0/22 -add china_ip_route 103.212.148.0/22 -add china_ip_route 103.212.164.0/22 -add china_ip_route 103.212.196.0/22 -add china_ip_route 103.212.200.0/22 -add china_ip_route 103.212.228.0/22 -add china_ip_route 103.212.252.0/22 -add china_ip_route 103.213.40.0/22 -add china_ip_route 103.213.44.0/22 -add china_ip_route 103.213.48.0/22 -add china_ip_route 103.213.52.0/22 -add china_ip_route 103.213.56.0/22 -add china_ip_route 103.213.60.0/22 -add china_ip_route 103.213.64.0/22 -add china_ip_route 103.213.68.0/22 -add china_ip_route 103.213.72.0/22 -add china_ip_route 103.213.76.0/22 -add china_ip_route 103.213.80.0/22 -add china_ip_route 103.213.84.0/22 -add china_ip_route 103.213.88.0/22 -add china_ip_route 103.213.92.0/22 -add china_ip_route 103.213.96.0/22 -add china_ip_route 103.213.132.0/22 -add china_ip_route 103.213.136.0/22 -add china_ip_route 103.213.140.0/22 -add china_ip_route 103.213.144.0/22 -add china_ip_route 103.213.148.0/22 -add china_ip_route 103.213.152.0/22 -add china_ip_route 103.213.156.0/22 -add china_ip_route 103.213.160.0/22 -add china_ip_route 103.213.164.0/22 -add china_ip_route 103.213.168.0/22 -add china_ip_route 103.213.172.0/22 -add china_ip_route 103.213.176.0/22 -add china_ip_route 103.213.180.0/22 -add china_ip_route 103.213.184.0/22 -add china_ip_route 103.213.188.0/22 -add china_ip_route 103.213.248.0/22 -add china_ip_route 103.214.32.0/22 -add china_ip_route 103.214.48.0/22 -add china_ip_route 103.214.84.0/22 -add china_ip_route 103.214.168.0/22 -add china_ip_route 103.214.212.0/22 -add china_ip_route 103.214.240.0/22 -add china_ip_route 103.214.244.0/22 -add china_ip_route 103.215.28.0/22 -add china_ip_route 103.215.32.0/22 -add china_ip_route 103.215.36.0/22 -add china_ip_route 103.215.44.0/22 -add china_ip_route 103.215.48.0/22 -add china_ip_route 103.215.100.0/22 -add china_ip_route 103.215.104.0/22 -add china_ip_route 103.215.108.0/22 -add china_ip_route 103.215.116.0/22 -add china_ip_route 103.215.120.0/22 -add china_ip_route 103.215.140.0/22 -add china_ip_route 103.215.228.0/22 -add china_ip_route 103.216.4.0/22 -add china_ip_route 103.216.8.0/22 -add china_ip_route 103.216.12.0/22 -add china_ip_route 103.216.16.0/22 -add china_ip_route 103.216.20.0/22 -add china_ip_route 103.216.24.0/22 -add china_ip_route 103.216.28.0/22 -add china_ip_route 103.216.32.0/22 -add china_ip_route 103.216.36.0/22 -add china_ip_route 103.216.40.0/22 -add china_ip_route 103.216.44.0/22 -add china_ip_route 103.216.64.0/22 -add china_ip_route 103.216.108.0/22 -add china_ip_route 103.216.136.0/22 -add china_ip_route 103.216.152.0/22 -add china_ip_route 103.216.224.0/22 -add china_ip_route 103.216.228.0/22 -add china_ip_route 103.216.240.0/22 -add china_ip_route 103.216.244.0/22 -add china_ip_route 103.216.248.0/22 -add china_ip_route 103.216.252.0/22 -add china_ip_route 103.217.0.0/22 -add china_ip_route 103.217.4.0/22 -add china_ip_route 103.217.8.0/22 -add china_ip_route 103.217.12.0/22 -add china_ip_route 103.217.16.0/22 -add china_ip_route 103.217.20.0/22 -add china_ip_route 103.217.24.0/22 -add china_ip_route 103.217.28.0/22 -add china_ip_route 103.217.32.0/22 -add china_ip_route 103.217.36.0/22 -add china_ip_route 103.217.40.0/22 -add china_ip_route 103.217.44.0/22 -add china_ip_route 103.217.48.0/22 -add china_ip_route 103.217.52.0/22 -add china_ip_route 103.217.56.0/22 -add china_ip_route 103.217.60.0/22 -add china_ip_route 103.217.168.0/22 -add china_ip_route 103.217.180.0/22 -add china_ip_route 103.217.184.0/22 -add china_ip_route 103.217.188.0/22 -add china_ip_route 103.217.192.0/22 -add china_ip_route 103.217.196.0/22 -add china_ip_route 103.217.200.0/22 -add china_ip_route 103.217.204.0/22 -add china_ip_route 103.218.0.0/22 -add china_ip_route 103.218.8.0/22 -add china_ip_route 103.218.12.0/22 -add china_ip_route 103.218.16.0/22 -add china_ip_route 103.218.20.0/22 -add china_ip_route 103.218.28.0/22 -add china_ip_route 103.218.32.0/22 -add china_ip_route 103.218.36.0/22 -add china_ip_route 103.218.40.0/22 -add china_ip_route 103.218.44.0/22 -add china_ip_route 103.218.48.0/22 -add china_ip_route 103.218.52.0/22 -add china_ip_route 103.218.56.0/22 -add china_ip_route 103.218.60.0/22 -add china_ip_route 103.218.64.0/22 -add china_ip_route 103.218.68.0/22 -add china_ip_route 103.218.72.0/22 -add china_ip_route 103.218.76.0/22 -add china_ip_route 103.218.80.0/22 -add china_ip_route 103.218.84.0/22 -add china_ip_route 103.218.88.0/22 -add china_ip_route 103.218.92.0/22 -add china_ip_route 103.218.192.0/22 -add china_ip_route 103.218.196.0/22 -add china_ip_route 103.218.200.0/22 -add china_ip_route 103.218.204.0/22 -add china_ip_route 103.218.208.0/22 -add china_ip_route 103.218.212.0/22 -add china_ip_route 103.218.216.0/22 -add china_ip_route 103.219.24.0/22 -add china_ip_route 103.219.28.0/22 -add china_ip_route 103.219.32.0/22 -add china_ip_route 103.219.36.0/22 -add china_ip_route 103.219.64.0/22 -add china_ip_route 103.219.84.0/22 -add china_ip_route 103.219.88.0/22 -add china_ip_route 103.219.92.0/22 -add china_ip_route 103.219.96.0/22 -add china_ip_route 103.219.100.0/22 -add china_ip_route 103.219.176.0/22 -add china_ip_route 103.219.184.0/22 -add china_ip_route 103.220.48.0/22 -add china_ip_route 103.220.52.0/22 -add china_ip_route 103.220.56.0/22 -add china_ip_route 103.220.60.0/22 -add china_ip_route 103.220.64.0/22 -add china_ip_route 103.220.92.0/22 -add china_ip_route 103.220.96.0/22 -add china_ip_route 103.220.100.0/22 -add china_ip_route 103.220.104.0/22 -add china_ip_route 103.220.108.0/22 -add china_ip_route 103.220.116.0/22 -add china_ip_route 103.220.120.0/22 -add china_ip_route 103.220.124.0/22 -add china_ip_route 103.220.128.0/22 -add china_ip_route 103.220.132.0/22 -add china_ip_route 103.220.136.0/22 -add china_ip_route 103.220.140.0/22 -add china_ip_route 103.220.144.0/22 -add china_ip_route 103.220.148.0/22 -add china_ip_route 103.220.152.0/22 -add china_ip_route 103.220.160.0/22 -add china_ip_route 103.220.164.0/22 -add china_ip_route 103.220.168.0/22 -add china_ip_route 103.220.172.0/22 -add china_ip_route 103.220.176.0/22 -add china_ip_route 103.220.180.0/22 -add china_ip_route 103.220.184.0/22 -add china_ip_route 103.220.188.0/22 -add china_ip_route 103.220.192.0/22 -add china_ip_route 103.220.196.0/22 -add china_ip_route 103.220.200.0/22 -add china_ip_route 103.220.240.0/22 -add china_ip_route 103.220.244.0/22 -add china_ip_route 103.220.248.0/22 -add china_ip_route 103.220.252.0/22 -add china_ip_route 103.221.0.0/22 -add china_ip_route 103.221.4.0/22 -add china_ip_route 103.221.8.0/22 -add china_ip_route 103.221.12.0/22 -add china_ip_route 103.221.16.0/22 -add china_ip_route 103.221.20.0/22 -add china_ip_route 103.221.24.0/22 -add china_ip_route 103.221.28.0/22 -add china_ip_route 103.221.32.0/22 -add china_ip_route 103.221.36.0/22 -add china_ip_route 103.221.40.0/22 -add china_ip_route 103.221.44.0/22 -add china_ip_route 103.221.48.0/22 -add china_ip_route 103.221.88.0/22 -add china_ip_route 103.221.92.0/22 -add china_ip_route 103.221.96.0/22 -add china_ip_route 103.221.100.0/22 -add china_ip_route 103.221.104.0/22 -add china_ip_route 103.221.108.0/22 -add china_ip_route 103.221.112.0/22 -add china_ip_route 103.221.116.0/22 -add china_ip_route 103.221.120.0/22 -add china_ip_route 103.221.124.0/22 -add china_ip_route 103.221.128.0/22 -add china_ip_route 103.221.132.0/22 -add china_ip_route 103.221.136.0/22 -add china_ip_route 103.221.140.0/22 -add china_ip_route 103.221.144.0/22 -add china_ip_route 103.221.148.0/22 -add china_ip_route 103.221.152.0/22 -add china_ip_route 103.221.156.0/22 -add china_ip_route 103.221.160.0/22 -add china_ip_route 103.221.164.0/22 -add china_ip_route 103.221.168.0/22 -add china_ip_route 103.221.172.0/22 -add china_ip_route 103.221.176.0/22 -add china_ip_route 103.221.180.0/22 -add china_ip_route 103.221.184.0/22 -add china_ip_route 103.221.188.0/22 -add china_ip_route 103.221.192.0/22 -add china_ip_route 103.221.196.0/22 -add china_ip_route 103.221.200.0/22 -add china_ip_route 103.221.204.0/22 -add china_ip_route 103.222.0.0/22 -add china_ip_route 103.222.4.0/22 -add china_ip_route 103.222.8.0/22 -add china_ip_route 103.222.12.0/22 -add china_ip_route 103.222.16.0/22 -add china_ip_route 103.222.24.0/22 -add china_ip_route 103.222.28.0/22 -add china_ip_route 103.222.32.0/22 -add china_ip_route 103.222.36.0/22 -add china_ip_route 103.222.40.0/22 -add china_ip_route 103.222.44.0/22 -add china_ip_route 103.222.48.0/22 -add china_ip_route 103.222.52.0/22 -add china_ip_route 103.222.56.0/22 -add china_ip_route 103.222.60.0/22 -add china_ip_route 103.222.64.0/22 -add china_ip_route 103.222.68.0/22 -add china_ip_route 103.222.72.0/22 -add china_ip_route 103.222.76.0/22 -add china_ip_route 103.222.80.0/22 -add china_ip_route 103.222.84.0/22 -add china_ip_route 103.222.88.0/22 -add china_ip_route 103.222.92.0/22 -add china_ip_route 103.222.96.0/22 -add china_ip_route 103.222.100.0/22 -add china_ip_route 103.222.104.0/22 -add china_ip_route 103.222.108.0/22 -add china_ip_route 103.222.112.0/22 -add china_ip_route 103.222.116.0/22 -add china_ip_route 103.222.120.0/22 -add china_ip_route 103.222.124.0/22 -add china_ip_route 103.222.128.0/22 -add china_ip_route 103.222.132.0/22 -add china_ip_route 103.222.136.0/22 -add china_ip_route 103.222.140.0/22 -add china_ip_route 103.222.144.0/22 -add china_ip_route 103.222.148.0/22 -add china_ip_route 103.222.152.0/22 -add china_ip_route 103.222.156.0/22 -add china_ip_route 103.222.160.0/22 -add china_ip_route 103.222.164.0/22 -add china_ip_route 103.222.168.0/22 -add china_ip_route 103.222.172.0/22 -add china_ip_route 103.222.176.0/22 -add china_ip_route 103.222.180.0/22 -add china_ip_route 103.222.184.0/22 -add china_ip_route 103.222.188.0/22 -add china_ip_route 103.222.192.0/22 -add china_ip_route 103.222.196.0/22 -add china_ip_route 103.222.200.0/22 -add china_ip_route 103.222.204.0/22 -add china_ip_route 103.222.208.0/22 -add china_ip_route 103.222.212.0/22 -add china_ip_route 103.222.216.0/22 -add china_ip_route 103.222.220.0/22 -add china_ip_route 103.222.224.0/22 -add china_ip_route 103.222.228.0/22 -add china_ip_route 103.222.232.0/22 -add china_ip_route 103.222.240.0/22 -add china_ip_route 103.222.244.0/22 -add china_ip_route 103.223.16.0/22 -add china_ip_route 103.223.20.0/22 -add china_ip_route 103.223.24.0/22 -add china_ip_route 103.223.28.0/22 -add china_ip_route 103.223.32.0/22 -add china_ip_route 103.223.36.0/22 -add china_ip_route 103.223.40.0/22 -add china_ip_route 103.223.44.0/22 -add china_ip_route 103.223.48.0/22 -add china_ip_route 103.223.52.0/22 -add china_ip_route 103.223.56.0/22 -add china_ip_route 103.223.60.0/22 -add china_ip_route 103.223.64.0/22 -add china_ip_route 103.223.68.0/22 -add china_ip_route 103.223.72.0/22 -add china_ip_route 103.223.76.0/22 -add china_ip_route 103.223.80.0/22 -add china_ip_route 103.223.84.0/22 -add china_ip_route 103.223.88.0/22 -add china_ip_route 103.223.92.0/22 -add china_ip_route 103.223.96.0/22 -add china_ip_route 103.223.100.0/22 -add china_ip_route 103.223.104.0/22 -add china_ip_route 103.223.108.0/22 -add china_ip_route 103.223.112.0/22 -add china_ip_route 103.223.116.0/22 -add china_ip_route 103.223.120.0/22 -add china_ip_route 103.223.124.0/22 -add china_ip_route 103.223.128.0/22 -add china_ip_route 103.223.132.0/22 -add china_ip_route 103.223.140.0/22 -add china_ip_route 103.223.144.0/22 -add china_ip_route 103.223.148.0/22 -add china_ip_route 103.223.152.0/22 -add china_ip_route 103.223.156.0/22 -add china_ip_route 103.223.160.0/22 -add china_ip_route 103.223.164.0/22 -add china_ip_route 103.223.168.0/22 -add china_ip_route 103.223.172.0/22 -add china_ip_route 103.223.176.0/22 -add china_ip_route 103.223.180.0/22 -add china_ip_route 103.223.188.0/22 -add china_ip_route 103.223.192.0/22 -add china_ip_route 103.223.196.0/22 -add china_ip_route 103.223.200.0/22 -add china_ip_route 103.223.204.0/22 -add china_ip_route 103.223.208.0/22 -add china_ip_route 103.223.212.0/22 -add china_ip_route 103.223.216.0/22 -add china_ip_route 103.223.220.0/22 -add china_ip_route 103.223.224.0/22 -add china_ip_route 103.223.228.0/22 -add china_ip_route 103.223.232.0/22 -add china_ip_route 103.223.236.0/22 -add china_ip_route 103.223.240.0/22 -add china_ip_route 103.223.244.0/22 -add china_ip_route 103.223.248.0/22 -add china_ip_route 103.223.252.0/22 -add china_ip_route 103.224.0.0/22 -add china_ip_route 103.224.40.0/22 -add china_ip_route 103.224.44.0/22 -add china_ip_route 103.224.60.0/22 -add china_ip_route 103.224.80.0/22 -add china_ip_route 103.224.220.0/22 -add china_ip_route 103.224.224.0/22 -add china_ip_route 103.224.228.0/22 -add china_ip_route 103.224.232.0/22 -add china_ip_route 103.225.84.0/22 -add china_ip_route 103.226.16.0/22 -add china_ip_route 103.226.40.0/22 -add china_ip_route 103.226.56.0/22 -add china_ip_route 103.226.60.0/22 -add china_ip_route 103.226.80.0/22 -add china_ip_route 103.226.132.0/22 -add china_ip_route 103.226.156.0/22 -add china_ip_route 103.226.180.0/22 -add china_ip_route 103.226.196.0/22 -add china_ip_route 103.227.48.0/22 -add china_ip_route 103.227.72.0/22 -add china_ip_route 103.227.76.0/22 -add china_ip_route 103.227.80.0/22 -add china_ip_route 103.227.100.0/22 -add china_ip_route 103.227.120.0/22 -add china_ip_route 103.227.132.0/22 -add china_ip_route 103.227.136.0/22 -add china_ip_route 103.227.196.0/22 -add china_ip_route 103.227.204.0/22 -add china_ip_route 103.227.212.0/22 -add china_ip_route 103.227.228.0/22 -add china_ip_route 103.228.12.0/22 -add china_ip_route 103.228.88.0/22 -add china_ip_route 103.228.128.0/22 -add china_ip_route 103.228.136.0/22 -add china_ip_route 103.228.160.0/22 -add china_ip_route 103.228.176.0/22 -add china_ip_route 103.228.204.0/22 -add china_ip_route 103.228.208.0/22 -add china_ip_route 103.228.228.0/22 -add china_ip_route 103.228.232.0/22 -add china_ip_route 103.229.20.0/22 -add china_ip_route 103.229.60.0/22 -add china_ip_route 103.229.136.0/22 -add china_ip_route 103.229.148.0/22 -add china_ip_route 103.229.172.0/22 -add china_ip_route 103.229.212.0/22 -add china_ip_route 103.229.216.0/22 -add china_ip_route 103.229.220.0/22 -add china_ip_route 103.229.228.0/22 -add china_ip_route 103.229.236.0/22 -add china_ip_route 103.229.240.0/22 -add china_ip_route 103.230.0.0/22 -add china_ip_route 103.230.28.0/22 -add china_ip_route 103.230.44.0/22 -add china_ip_route 103.230.96.0/22 -add china_ip_route 103.230.196.0/22 -add china_ip_route 103.230.200.0/22 -add china_ip_route 103.230.204.0/22 -add china_ip_route 103.230.212.0/22 -add china_ip_route 103.230.236.0/22 -add china_ip_route 103.231.16.0/22 -add china_ip_route 103.231.20.0/22 -add china_ip_route 103.231.64.0/22 -add china_ip_route 103.231.68.0/22 -add china_ip_route 103.231.144.0/22 -add china_ip_route 103.231.180.0/22 -add china_ip_route 103.231.184.0/22 -add china_ip_route 103.231.244.0/22 -add china_ip_route 103.232.4.0/22 -add china_ip_route 103.232.144.0/22 -add china_ip_route 103.232.188.0/22 -add china_ip_route 103.232.212.0/22 -add china_ip_route 103.233.4.0/22 -add china_ip_route 103.233.44.0/22 -add china_ip_route 103.233.52.0/22 -add china_ip_route 103.233.104.0/22 -add china_ip_route 103.233.128.0/22 -add china_ip_route 103.233.136.0/22 -add china_ip_route 103.233.228.0/22 -add china_ip_route 103.234.0.0/22 -add china_ip_route 103.234.20.0/22 -add china_ip_route 103.234.56.0/22 -add china_ip_route 103.234.128.0/22 -add china_ip_route 103.234.172.0/22 -add china_ip_route 103.234.180.0/22 -add china_ip_route 103.234.244.0/22 -add china_ip_route 103.235.16.0/22 -add china_ip_route 103.235.48.0/22 -add china_ip_route 103.235.56.0/22 -add china_ip_route 103.235.60.0/22 -add china_ip_route 103.235.80.0/22 -add china_ip_route 103.235.84.0/22 -add china_ip_route 103.235.128.0/22 -add china_ip_route 103.235.132.0/22 -add china_ip_route 103.235.136.0/22 -add china_ip_route 103.235.140.0/22 -add china_ip_route 103.235.144.0/22 -add china_ip_route 103.235.148.0/22 -add china_ip_route 103.235.184.0/22 -add china_ip_route 103.235.192.0/22 -add china_ip_route 103.235.200.0/22 -add china_ip_route 103.235.220.0/22 -add china_ip_route 103.235.224.0/22 -add china_ip_route 103.235.228.0/22 -add china_ip_route 103.235.232.0/22 -add china_ip_route 103.235.236.0/22 -add china_ip_route 103.235.240.0/22 -add china_ip_route 103.235.244.0/22 -add china_ip_route 103.235.248.0/22 -add china_ip_route 103.235.252.0/22 -add china_ip_route 103.236.0.0/22 -add china_ip_route 103.236.4.0/22 -add china_ip_route 103.236.8.0/22 -add china_ip_route 103.236.12.0/22 -add china_ip_route 103.236.16.0/22 -add china_ip_route 103.236.20.0/22 -add china_ip_route 103.236.24.0/22 -add china_ip_route 103.236.28.0/22 -add china_ip_route 103.236.32.0/22 -add china_ip_route 103.236.36.0/22 -add china_ip_route 103.236.40.0/22 -add china_ip_route 103.236.44.0/22 -add china_ip_route 103.236.48.0/22 -add china_ip_route 103.236.52.0/22 -add china_ip_route 103.236.56.0/22 -add china_ip_route 103.236.60.0/22 -add china_ip_route 103.236.64.0/22 -add china_ip_route 103.236.68.0/22 -add china_ip_route 103.236.72.0/22 -add china_ip_route 103.236.76.0/22 -add china_ip_route 103.236.80.0/22 -add china_ip_route 103.236.84.0/22 -add china_ip_route 103.236.88.0/22 -add china_ip_route 103.236.92.0/22 -add china_ip_route 103.236.96.0/22 -add china_ip_route 103.236.120.0/22 -add china_ip_route 103.236.184.0/22 -add china_ip_route 103.236.220.0/22 -add china_ip_route 103.236.232.0/22 -add china_ip_route 103.236.240.0/22 -add china_ip_route 103.236.244.0/22 -add china_ip_route 103.236.248.0/22 -add china_ip_route 103.236.252.0/22 -add china_ip_route 103.237.0.0/22 -add china_ip_route 103.237.4.0/22 -add china_ip_route 103.237.8.0/22 -add china_ip_route 103.237.12.0/22 -add china_ip_route 103.237.24.0/22 -add china_ip_route 103.237.28.0/22 -add china_ip_route 103.237.68.0/22 -add china_ip_route 103.237.88.0/22 -add china_ip_route 103.237.152.0/22 -add china_ip_route 103.237.176.0/22 -add china_ip_route 103.237.180.0/22 -add china_ip_route 103.237.184.0/22 -add china_ip_route 103.237.188.0/22 -add china_ip_route 103.237.192.0/22 -add china_ip_route 103.237.196.0/22 -add china_ip_route 103.237.200.0/22 -add china_ip_route 103.237.204.0/22 -add china_ip_route 103.237.208.0/22 -add china_ip_route 103.237.212.0/22 -add china_ip_route 103.237.216.0/22 -add china_ip_route 103.237.220.0/22 -add china_ip_route 103.237.224.0/22 -add china_ip_route 103.237.228.0/22 -add china_ip_route 103.237.232.0/22 -add china_ip_route 103.237.236.0/22 -add china_ip_route 103.237.240.0/22 -add china_ip_route 103.237.244.0/22 -add china_ip_route 103.237.248.0/22 -add china_ip_route 103.237.252.0/22 -add china_ip_route 103.238.0.0/22 -add china_ip_route 103.238.4.0/22 -add china_ip_route 103.238.16.0/22 -add china_ip_route 103.238.20.0/22 -add china_ip_route 103.238.24.0/22 -add china_ip_route 103.238.28.0/22 -add china_ip_route 103.238.32.0/22 -add china_ip_route 103.238.36.0/22 -add china_ip_route 103.238.40.0/22 -add china_ip_route 103.238.44.0/22 -add china_ip_route 103.238.48.0/22 -add china_ip_route 103.238.52.0/22 -add china_ip_route 103.238.56.0/22 -add china_ip_route 103.238.88.0/22 -add china_ip_route 103.238.92.0/22 -add china_ip_route 103.238.96.0/22 -add china_ip_route 103.238.132.0/22 -add china_ip_route 103.238.140.0/22 -add china_ip_route 103.238.144.0/22 -add china_ip_route 103.238.160.0/22 -add china_ip_route 103.238.164.0/22 -add china_ip_route 103.238.168.0/22 -add china_ip_route 103.238.172.0/22 -add china_ip_route 103.238.176.0/22 -add china_ip_route 103.238.180.0/22 -add china_ip_route 103.238.184.0/22 -add china_ip_route 103.238.188.0/22 -add china_ip_route 103.238.196.0/22 -add china_ip_route 103.238.204.0/22 -add china_ip_route 103.238.252.0/22 -add china_ip_route 103.239.0.0/22 -add china_ip_route 103.239.44.0/22 -add china_ip_route 103.239.68.0/22 -add china_ip_route 103.239.96.0/22 -add china_ip_route 103.239.152.0/22 -add china_ip_route 103.239.156.0/22 -add china_ip_route 103.239.176.0/22 -add china_ip_route 103.239.180.0/22 -add china_ip_route 103.239.184.0/22 -add china_ip_route 103.239.192.0/22 -add china_ip_route 103.239.196.0/22 -add china_ip_route 103.239.204.0/22 -add china_ip_route 103.239.208.0/22 -add china_ip_route 103.239.224.0/22 -add china_ip_route 103.239.244.0/22 -add china_ip_route 103.240.16.0/22 -add china_ip_route 103.240.36.0/22 -add china_ip_route 103.240.72.0/22 -add china_ip_route 103.240.84.0/22 -add china_ip_route 103.240.124.0/22 -add china_ip_route 103.240.156.0/22 -add china_ip_route 103.240.172.0/22 -add china_ip_route 103.240.188.0/22 -add china_ip_route 103.240.244.0/22 -add china_ip_route 103.241.12.0/22 -add china_ip_route 103.241.72.0/22 -add china_ip_route 103.241.92.0/22 -add china_ip_route 103.241.96.0/22 -add china_ip_route 103.241.160.0/22 -add china_ip_route 103.241.184.0/22 -add china_ip_route 103.241.188.0/22 -add china_ip_route 103.241.220.0/22 -add china_ip_route 103.242.64.0/22 -add china_ip_route 103.242.128.0/22 -add china_ip_route 103.242.132.0/22 -add china_ip_route 103.242.160.0/22 -add china_ip_route 103.242.168.0/22 -add china_ip_route 103.242.172.0/22 -add china_ip_route 103.242.176.0/22 -add china_ip_route 103.242.200.0/22 -add china_ip_route 103.242.212.0/22 -add china_ip_route 103.242.220.0/22 -add china_ip_route 103.242.240.0/22 -add china_ip_route 103.243.136.0/22 -add china_ip_route 103.243.252.0/22 -add china_ip_route 103.244.16.0/22 -add china_ip_route 103.244.58.0/23 -add china_ip_route 103.244.60.0/22 -add china_ip_route 103.244.64.0/22 -add china_ip_route 103.244.68.0/22 -add china_ip_route 103.244.72.0/22 -add china_ip_route 103.244.76.0/22 -add china_ip_route 103.244.80.0/22 -add china_ip_route 103.244.84.0/22 -add china_ip_route 103.244.116.0/22 -add china_ip_route 103.244.164.0/22 -add china_ip_route 103.244.232.0/22 -add china_ip_route 103.244.252.0/22 -add china_ip_route 103.245.23.0/24 -add china_ip_route 103.245.52.0/22 -add china_ip_route 103.245.60.0/22 -add china_ip_route 103.245.80.0/22 -add china_ip_route 103.245.124.0/22 -add china_ip_route 103.245.128.0/22 -add china_ip_route 103.246.8.0/22 -add china_ip_route 103.246.12.0/22 -add china_ip_route 103.246.120.0/22 -add china_ip_route 103.246.124.0/22 -add china_ip_route 103.246.132.0/22 -add china_ip_route 103.246.152.0/22 -add china_ip_route 103.246.156.0/22 -add china_ip_route 103.247.168.0/22 -add china_ip_route 103.247.172.0/22 -add china_ip_route 103.247.176.0/22 -add china_ip_route 103.247.200.0/22 -add china_ip_route 103.247.212.0/22 -add china_ip_route 103.248.0.0/23 -add china_ip_route 103.248.64.0/22 -add china_ip_route 103.248.100.0/22 -add china_ip_route 103.248.124.0/22 -add china_ip_route 103.248.152.0/22 -add china_ip_route 103.248.168.0/22 -add china_ip_route 103.248.192.0/22 -add china_ip_route 103.248.212.0/22 -add china_ip_route 103.248.220.0/22 -add china_ip_route 103.248.224.0/22 -add china_ip_route 103.249.8.0/22 -add china_ip_route 103.249.12.0/22 -add china_ip_route 103.249.52.0/22 -add china_ip_route 103.249.104.0/22 -add china_ip_route 103.249.128.0/22 -add china_ip_route 103.249.136.0/22 -add china_ip_route 103.249.144.0/22 -add china_ip_route 103.249.164.0/22 -add china_ip_route 103.249.168.0/22 -add china_ip_route 103.249.172.0/22 -add china_ip_route 103.249.176.0/22 -add china_ip_route 103.249.188.0/22 -add china_ip_route 103.249.192.0/22 -add china_ip_route 103.249.244.0/22 -add china_ip_route 103.249.252.0/22 -add china_ip_route 103.250.32.0/22 -add china_ip_route 103.250.104.0/22 -add china_ip_route 103.250.124.0/22 -add china_ip_route 103.250.180.0/22 -add china_ip_route 103.250.192.0/22 -add china_ip_route 103.250.216.0/22 -add china_ip_route 103.250.224.0/22 -add china_ip_route 103.250.236.0/22 -add china_ip_route 103.250.248.0/22 -add china_ip_route 103.250.252.0/22 -add china_ip_route 103.251.32.0/22 -add china_ip_route 103.251.84.0/22 -add china_ip_route 103.251.96.0/22 -add china_ip_route 103.251.124.0/22 -add china_ip_route 103.251.128.0/22 -add china_ip_route 103.251.160.0/22 -add china_ip_route 103.251.192.0/22 -add china_ip_route 103.251.204.0/22 -add china_ip_route 103.251.240.0/22 -add china_ip_route 103.252.28.0/22 -add china_ip_route 103.252.36.0/22 -add china_ip_route 103.252.64.0/22 -add china_ip_route 103.252.96.0/22 -add china_ip_route 103.252.104.0/22 -add china_ip_route 103.252.172.0/22 -add china_ip_route 103.252.204.0/22 -add china_ip_route 103.252.208.0/22 -add china_ip_route 103.252.232.0/22 -add china_ip_route 103.252.248.0/22 -add china_ip_route 103.253.4.0/22 -add china_ip_route 103.253.60.0/22 -add china_ip_route 103.253.204.0/22 -add china_ip_route 103.253.220.0/22 -add china_ip_route 103.253.224.0/22 -add china_ip_route 103.253.232.0/22 -add china_ip_route 103.254.8.0/22 -add china_ip_route 103.254.20.0/22 -add china_ip_route 103.254.64.0/22 -add china_ip_route 103.254.68.0/22 -add china_ip_route 103.254.72.0/22 -add china_ip_route 103.254.76.0/22 -add china_ip_route 103.254.112.0/22 -add china_ip_route 103.254.176.0/22 -add china_ip_route 103.254.188.0/22 -add china_ip_route 103.254.196.0/24 -add china_ip_route 103.254.220.0/22 -add china_ip_route 103.255.56.0/22 -add china_ip_route 103.255.68.0/22 -add china_ip_route 103.255.88.0/22 -add china_ip_route 103.255.92.0/22 -add china_ip_route 103.255.136.0/22 -add china_ip_route 103.255.140.0/22 -add china_ip_route 103.255.184.0/22 -add china_ip_route 103.255.200.0/22 -add china_ip_route 103.255.212.0/22 -add china_ip_route 103.255.228.0/22 -add china_ip_route 106.0.0.0/24 -add china_ip_route 106.0.2.0/23 -add china_ip_route 106.0.4.0/22 -add china_ip_route 106.0.8.0/21 -add china_ip_route 106.0.16.0/20 -add china_ip_route 106.0.44.0/22 -add china_ip_route 106.0.64.0/18 -add china_ip_route 106.2.0.0/15 -add china_ip_route 106.4.0.0/14 -add china_ip_route 106.8.0.0/15 -add china_ip_route 106.11.0.0/16 -add china_ip_route 106.12.0.0/14 -add china_ip_route 106.16.0.0/12 -add china_ip_route 106.32.0.0/12 -add china_ip_route 106.48.0.0/15 -add china_ip_route 106.50.0.0/16 -add china_ip_route 106.52.0.0/14 -add china_ip_route 106.56.0.0/13 -add china_ip_route 106.74.0.0/16 -add china_ip_route 106.75.0.0/16 -add china_ip_route 106.80.0.0/12 -add china_ip_route 106.108.0.0/14 -add china_ip_route 106.112.0.0/13 -add china_ip_route 106.120.0.0/13 -add china_ip_route 106.224.0.0/12 -add china_ip_route 109.244.0.0/16 -add china_ip_route 110.6.0.0/15 -add china_ip_route 110.16.0.0/14 -add china_ip_route 110.34.40.0/22 -add china_ip_route 110.34.44.0/22 -add china_ip_route 110.40.0.0/14 -add china_ip_route 110.44.12.0/22 -add china_ip_route 110.44.144.0/20 -add china_ip_route 110.48.0.0/16 -add china_ip_route 110.51.0.0/16 -add china_ip_route 110.52.0.0/15 -add china_ip_route 110.56.0.0/13 -add china_ip_route 110.64.0.0/15 -add china_ip_route 110.72.0.0/15 -add china_ip_route 110.75.0.0/17 -add china_ip_route 110.75.128.0/19 -add china_ip_route 110.75.160.0/19 -add china_ip_route 110.75.192.0/18 -add china_ip_route 110.76.0.0/19 -add china_ip_route 110.76.32.0/19 -add china_ip_route 110.76.132.0/22 -add china_ip_route 110.76.156.0/22 -add china_ip_route 110.76.184.0/22 -add china_ip_route 110.76.192.0/18 -add china_ip_route 110.77.0.0/17 -add china_ip_route 110.80.0.0/13 -add china_ip_route 110.88.0.0/14 -add china_ip_route 110.92.68.0/22 -add china_ip_route 110.93.32.0/19 -add china_ip_route 110.94.0.0/15 -add china_ip_route 110.96.0.0/11 -add china_ip_route 110.152.0.0/14 -add china_ip_route 110.156.0.0/15 -add china_ip_route 110.165.32.0/19 -add china_ip_route 110.166.0.0/15 -add china_ip_route 110.172.192.0/18 -add china_ip_route 110.173.0.0/19 -add china_ip_route 110.173.32.0/20 -add china_ip_route 110.173.64.0/19 -add china_ip_route 110.173.96.0/19 -add china_ip_route 110.173.192.0/19 -add china_ip_route 110.176.0.0/13 -add china_ip_route 110.184.0.0/13 -add china_ip_route 110.192.0.0/11 -add china_ip_route 110.228.0.0/14 -add china_ip_route 110.232.32.0/19 -add china_ip_route 110.236.0.0/15 -add china_ip_route 110.240.0.0/12 -add china_ip_route 111.0.0.0/10 -add china_ip_route 111.66.0.0/16 -add china_ip_route 111.67.192.0/20 -add china_ip_route 111.68.64.0/19 -add china_ip_route 111.72.0.0/13 -add china_ip_route 111.85.0.0/16 -add china_ip_route 111.91.192.0/19 -add china_ip_route 111.92.248.0/22 -add china_ip_route 111.92.252.0/22 -add china_ip_route 111.112.0.0/15 -add china_ip_route 111.114.0.0/15 -add china_ip_route 111.116.0.0/15 -add china_ip_route 111.118.200.0/21 -add china_ip_route 111.119.64.0/18 -add china_ip_route 111.119.128.0/19 -add china_ip_route 111.120.0.0/14 -add china_ip_route 111.124.0.0/16 -add china_ip_route 111.126.0.0/15 -add china_ip_route 111.128.0.0/11 -add china_ip_route 111.160.0.0/13 -add china_ip_route 111.170.0.0/16 -add china_ip_route 111.172.0.0/14 -add china_ip_route 111.176.0.0/13 -add china_ip_route 111.186.0.0/15 -add china_ip_route 111.192.0.0/12 -add china_ip_route 111.208.0.0/14 -add china_ip_route 111.212.0.0/14 -add china_ip_route 111.221.28.0/24 -add china_ip_route 111.221.128.0/17 -add china_ip_route 111.222.0.0/16 -add china_ip_route 111.223.4.0/22 -add china_ip_route 111.223.8.0/22 -add china_ip_route 111.223.12.0/22 -add china_ip_route 111.223.16.0/22 -add china_ip_route 111.223.240.0/22 -add china_ip_route 111.223.248.0/22 -add china_ip_route 111.224.0.0/14 -add china_ip_route 111.228.0.0/14 -add china_ip_route 111.235.96.0/19 -add china_ip_route 111.235.156.0/22 -add china_ip_route 111.235.160.0/19 -add china_ip_route 112.0.0.0/10 -add china_ip_route 112.64.0.0/15 -add china_ip_route 112.66.0.0/15 -add china_ip_route 112.73.0.0/16 -add china_ip_route 112.74.0.0/15 -add china_ip_route 112.80.0.0/13 -add china_ip_route 112.88.0.0/13 -add china_ip_route 112.96.0.0/15 -add china_ip_route 112.98.0.0/15 -add china_ip_route 112.100.0.0/14 -add china_ip_route 112.109.128.0/17 -add china_ip_route 112.111.0.0/16 -add china_ip_route 112.112.0.0/14 -add china_ip_route 112.116.0.0/15 -add china_ip_route 112.122.0.0/15 -add china_ip_route 112.124.0.0/14 -add china_ip_route 112.128.0.0/14 -add china_ip_route 112.132.0.0/16 -add china_ip_route 112.137.48.0/21 -add china_ip_route 112.192.0.0/14 -add china_ip_route 112.224.0.0/11 -add china_ip_route 113.0.0.0/13 -add china_ip_route 113.8.0.0/15 -add china_ip_route 113.11.192.0/19 -add china_ip_route 113.12.0.0/14 -add china_ip_route 113.16.0.0/15 -add china_ip_route 113.18.0.0/16 -add china_ip_route 113.21.232.0/22 -add china_ip_route 113.21.236.0/22 -add china_ip_route 113.24.0.0/14 -add china_ip_route 113.31.0.0/16 -add china_ip_route 113.44.0.0/14 -add china_ip_route 113.48.0.0/14 -add china_ip_route 113.52.160.0/19 -add china_ip_route 113.52.228.0/22 -add china_ip_route 113.54.0.0/15 -add china_ip_route 113.56.0.0/15 -add china_ip_route 113.58.0.0/16 -add china_ip_route 113.59.0.0/17 -add china_ip_route 113.59.224.0/22 -add china_ip_route 113.62.0.0/15 -add china_ip_route 113.64.0.0/11 -add china_ip_route 113.96.0.0/12 -add china_ip_route 113.112.0.0/13 -add china_ip_route 113.120.0.0/13 -add china_ip_route 113.128.0.0/15 -add china_ip_route 113.130.96.0/20 -add china_ip_route 113.130.112.0/21 -add china_ip_route 113.132.0.0/14 -add china_ip_route 113.136.0.0/13 -add china_ip_route 113.194.0.0/15 -add china_ip_route 113.197.100.0/22 -add china_ip_route 113.200.0.0/15 -add china_ip_route 113.202.0.0/16 -add china_ip_route 113.204.0.0/14 -add china_ip_route 113.208.96.0/19 -add china_ip_route 113.208.128.0/17 -add china_ip_route 113.209.0.0/16 -add china_ip_route 113.212.0.0/18 -add china_ip_route 113.212.88.0/22 -add china_ip_route 113.212.100.0/22 -add china_ip_route 113.212.184.0/21 -add china_ip_route 113.213.0.0/17 -add china_ip_route 113.214.0.0/15 -add china_ip_route 113.218.0.0/15 -add china_ip_route 113.220.0.0/14 -add china_ip_route 113.224.0.0/12 -add china_ip_route 113.240.0.0/13 -add china_ip_route 113.248.0.0/14 -add china_ip_route 114.28.0.0/16 -add china_ip_route 114.31.64.0/22 -add china_ip_route 114.31.68.0/22 -add china_ip_route 114.54.0.0/15 -add china_ip_route 114.60.0.0/14 -add china_ip_route 114.64.0.0/14 -add china_ip_route 114.68.0.0/16 -add china_ip_route 114.79.64.0/18 -add china_ip_route 114.80.0.0/12 -add china_ip_route 114.96.0.0/13 -add china_ip_route 114.104.0.0/14 -add china_ip_route 114.110.0.0/20 -add china_ip_route 114.110.64.0/18 -add china_ip_route 114.111.0.0/19 -add china_ip_route 114.111.160.0/19 -add china_ip_route 114.112.0.0/14 -add china_ip_route 114.116.0.0/16 -add china_ip_route 114.117.0.0/17 -add china_ip_route 114.117.128.0/17 -add china_ip_route 114.118.0.0/16 -add china_ip_route 114.119.0.0/17 -add china_ip_route 114.119.192.0/21 -add china_ip_route 114.119.200.0/22 -add china_ip_route 114.119.204.0/22 -add china_ip_route 114.119.208.0/20 -add china_ip_route 114.119.224.0/19 -add china_ip_route 114.132.0.0/16 -add china_ip_route 114.135.0.0/16 -add china_ip_route 114.138.0.0/15 -add china_ip_route 114.141.64.0/21 -add china_ip_route 114.141.80.0/22 -add china_ip_route 114.141.84.0/22 -add china_ip_route 114.141.128.0/18 -add china_ip_route 114.196.0.0/15 -add china_ip_route 114.198.248.0/21 -add china_ip_route 114.208.0.0/14 -add china_ip_route 114.212.0.0/15 -add china_ip_route 114.214.0.0/16 -add china_ip_route 114.215.0.0/16 -add china_ip_route 114.216.0.0/13 -add china_ip_route 114.224.0.0/12 -add china_ip_route 114.240.0.0/12 -add china_ip_route 115.24.0.0/14 -add china_ip_route 115.28.0.0/15 -add china_ip_route 115.31.64.0/22 -add china_ip_route 115.31.68.0/22 -add china_ip_route 115.31.72.0/22 -add china_ip_route 115.31.76.0/22 -add china_ip_route 115.32.0.0/14 -add china_ip_route 115.42.56.0/22 -add china_ip_route 115.44.0.0/15 -add china_ip_route 115.46.0.0/16 -add china_ip_route 115.47.0.0/16 -add china_ip_route 115.48.0.0/12 -add china_ip_route 115.69.64.0/20 -add china_ip_route 115.84.0.0/18 -add china_ip_route 115.84.192.0/19 -add china_ip_route 115.85.192.0/18 -add china_ip_route 115.100.0.0/14 -add china_ip_route 115.104.0.0/14 -add china_ip_route 115.120.0.0/14 -add china_ip_route 115.124.16.0/20 -add china_ip_route 115.148.0.0/14 -add china_ip_route 115.152.0.0/15 -add china_ip_route 115.154.0.0/15 -add china_ip_route 115.156.0.0/15 -add china_ip_route 115.158.0.0/16 -add china_ip_route 115.159.0.0/16 -add china_ip_route 115.166.64.0/19 -add china_ip_route 115.168.0.0/14 -add china_ip_route 115.172.0.0/14 -add china_ip_route 115.180.0.0/15 -add china_ip_route 115.182.0.0/16 -add china_ip_route 115.183.0.0/16 -add china_ip_route 115.187.0.0/22 -add china_ip_route 115.187.4.0/22 -add china_ip_route 115.187.8.0/22 -add china_ip_route 115.187.12.0/22 -add china_ip_route 115.190.0.0/15 -add china_ip_route 115.192.0.0/11 -add china_ip_route 115.224.0.0/12 -add china_ip_route 116.0.8.0/21 -add china_ip_route 116.0.24.0/21 -add china_ip_route 116.1.0.0/16 -add china_ip_route 116.2.0.0/15 -add china_ip_route 116.4.0.0/14 -add china_ip_route 116.8.0.0/14 -add china_ip_route 116.13.0.0/16 -add china_ip_route 116.16.0.0/12 -add china_ip_route 116.50.0.0/20 -add china_ip_route 116.52.0.0/14 -add china_ip_route 116.56.0.0/15 -add china_ip_route 116.58.128.0/20 -add china_ip_route 116.58.208.0/20 -add china_ip_route 116.60.0.0/14 -add china_ip_route 116.66.0.0/17 -add china_ip_route 116.66.176.0/22 -add china_ip_route 116.68.136.0/22 -add china_ip_route 116.68.140.0/22 -add china_ip_route 116.68.176.0/22 -add china_ip_route 116.68.180.0/22 -add china_ip_route 116.69.0.0/16 -add china_ip_route 116.70.0.0/17 -add china_ip_route 116.76.0.0/15 -add china_ip_route 116.78.0.0/15 -add china_ip_route 116.85.0.0/16 -add china_ip_route 116.89.144.0/20 -add china_ip_route 116.89.240.0/22 -add china_ip_route 116.90.80.0/20 -add china_ip_route 116.90.184.0/21 -add china_ip_route 116.95.0.0/16 -add china_ip_route 116.112.0.0/14 -add china_ip_route 116.116.0.0/15 -add china_ip_route 116.128.0.0/10 -add china_ip_route 116.192.0.0/16 -add china_ip_route 116.193.16.0/20 -add china_ip_route 116.193.32.0/19 -add china_ip_route 116.193.152.0/22 -add china_ip_route 116.193.164.0/22 -add china_ip_route 116.193.176.0/21 -add china_ip_route 116.194.0.0/15 -add china_ip_route 116.196.0.0/16 -add china_ip_route 116.197.160.0/22 -add china_ip_route 116.197.164.0/22 -add china_ip_route 116.198.0.0/16 -add china_ip_route 116.199.0.0/17 -add china_ip_route 116.199.128.0/19 -add china_ip_route 116.204.0.0/17 -add china_ip_route 116.204.132.0/22 -add china_ip_route 116.204.168.0/22 -add china_ip_route 116.204.216.0/22 -add china_ip_route 116.204.232.0/22 -add china_ip_route 116.205.0.0/16 -add china_ip_route 116.206.92.0/22 -add china_ip_route 116.206.176.0/22 -add china_ip_route 116.207.0.0/16 -add china_ip_route 116.208.0.0/14 -add china_ip_route 116.212.160.0/20 -add china_ip_route 116.213.44.0/22 -add china_ip_route 116.213.64.0/18 -add china_ip_route 116.213.128.0/17 -add china_ip_route 116.214.32.0/19 -add china_ip_route 116.214.64.0/20 -add china_ip_route 116.214.128.0/17 -add china_ip_route 116.215.0.0/16 -add china_ip_route 116.216.0.0/14 -add china_ip_route 116.224.0.0/12 -add china_ip_route 116.242.0.0/15 -add china_ip_route 116.244.0.0/15 -add china_ip_route 116.246.0.0/15 -add china_ip_route 116.248.0.0/15 -add china_ip_route 116.251.64.0/18 -add china_ip_route 116.252.0.0/15 -add china_ip_route 116.254.104.0/22 -add china_ip_route 116.254.108.0/22 -add china_ip_route 116.254.128.0/17 -add china_ip_route 116.255.128.0/17 -add china_ip_route 117.8.0.0/13 -add china_ip_route 117.21.0.0/16 -add china_ip_route 117.22.0.0/15 -add china_ip_route 117.24.0.0/13 -add china_ip_route 117.32.0.0/13 -add china_ip_route 117.40.0.0/14 -add china_ip_route 117.44.0.0/15 -add china_ip_route 117.48.0.0/14 -add china_ip_route 117.53.48.0/20 -add china_ip_route 117.53.176.0/20 -add china_ip_route 117.57.0.0/16 -add china_ip_route 117.58.0.0/17 -add china_ip_route 117.59.0.0/16 -add china_ip_route 117.60.0.0/14 -add china_ip_route 117.64.0.0/13 -add china_ip_route 117.72.0.0/15 -add china_ip_route 117.74.64.0/20 -add china_ip_route 117.74.80.0/20 -add china_ip_route 117.74.128.0/17 -add china_ip_route 117.75.0.0/16 -add china_ip_route 117.76.0.0/14 -add china_ip_route 117.80.0.0/12 -add china_ip_route 117.100.0.0/15 -add china_ip_route 117.103.16.0/20 -add china_ip_route 117.103.40.0/21 -add china_ip_route 117.103.72.0/21 -add china_ip_route 117.103.128.0/20 -add china_ip_route 117.104.168.0/21 -add china_ip_route 117.106.0.0/15 -add china_ip_route 117.112.0.0/13 -add china_ip_route 117.120.64.0/18 -add china_ip_route 117.120.128.0/17 -add china_ip_route 117.121.0.0/17 -add china_ip_route 117.121.128.0/18 -add china_ip_route 117.121.192.0/21 -add china_ip_route 117.122.128.0/17 -add china_ip_route 117.124.0.0/14 -add china_ip_route 117.128.0.0/10 -add china_ip_route 118.24.0.0/15 -add china_ip_route 118.26.0.0/19 -add china_ip_route 118.26.32.0/22 -add china_ip_route 118.26.40.0/21 -add china_ip_route 118.26.48.0/21 -add china_ip_route 118.26.56.0/21 -add china_ip_route 118.26.64.0/19 -add china_ip_route 118.26.96.0/21 -add china_ip_route 118.26.112.0/21 -add china_ip_route 118.26.120.0/21 -add china_ip_route 118.26.128.0/17 -add china_ip_route 118.28.0.0/15 -add china_ip_route 118.30.0.0/16 -add china_ip_route 118.31.0.0/16 -add china_ip_route 118.64.0.0/15 -add china_ip_route 118.66.0.0/16 -add china_ip_route 118.67.112.0/20 -add china_ip_route 118.72.0.0/13 -add china_ip_route 118.80.0.0/15 -add china_ip_route 118.84.0.0/15 -add china_ip_route 118.88.32.0/19 -add china_ip_route 118.88.64.0/18 -add china_ip_route 118.88.128.0/17 -add china_ip_route 118.89.0.0/16 -add china_ip_route 118.91.240.0/20 -add china_ip_route 118.102.16.0/20 -add china_ip_route 118.102.32.0/21 -add china_ip_route 118.103.164.0/22 -add china_ip_route 118.103.168.0/22 -add china_ip_route 118.103.172.0/22 -add china_ip_route 118.103.176.0/22 -add china_ip_route 118.107.180.0/22 -add china_ip_route 118.112.0.0/13 -add china_ip_route 118.120.0.0/14 -add china_ip_route 118.124.0.0/15 -add china_ip_route 118.126.0.0/16 -add china_ip_route 118.127.128.0/19 -add china_ip_route 118.132.0.0/14 -add china_ip_route 118.144.0.0/14 -add china_ip_route 118.178.0.0/16 -add china_ip_route 118.180.0.0/14 -add china_ip_route 118.184.0.0/17 -add china_ip_route 118.184.128.0/17 -add china_ip_route 118.186.0.0/15 -add china_ip_route 118.188.0.0/16 -add china_ip_route 118.190.0.0/16 -add china_ip_route 118.191.0.0/21 -add china_ip_route 118.191.8.0/22 -add china_ip_route 118.191.12.0/24 -add china_ip_route 118.191.16.0/21 -add china_ip_route 118.191.64.0/20 -add china_ip_route 118.191.80.0/22 -add china_ip_route 118.191.128.0/19 -add china_ip_route 118.191.176.0/20 -add china_ip_route 118.191.192.0/20 -add china_ip_route 118.191.208.0/24 -add china_ip_route 118.191.216.0/22 -add china_ip_route 118.191.223.0/24 -add china_ip_route 118.191.224.0/24 -add china_ip_route 118.191.240.0/20 -add china_ip_route 118.192.0.0/16 -add china_ip_route 118.193.0.0/21 -add china_ip_route 118.193.8.0/21 -add china_ip_route 118.193.48.0/21 -add china_ip_route 118.193.96.0/19 -add china_ip_route 118.193.128.0/17 -add china_ip_route 118.194.0.0/17 -add china_ip_route 118.194.128.0/18 -add china_ip_route 118.194.192.0/19 -add china_ip_route 118.194.224.0/22 -add china_ip_route 118.194.240.0/21 -add china_ip_route 118.195.0.0/17 -add china_ip_route 118.195.128.0/17 -add china_ip_route 118.196.0.0/14 -add china_ip_route 118.202.0.0/15 -add china_ip_route 118.204.0.0/14 -add china_ip_route 118.212.0.0/16 -add china_ip_route 118.213.0.0/16 -add china_ip_route 118.215.192.0/18 -add china_ip_route 118.224.0.0/14 -add china_ip_route 118.228.0.0/15 -add china_ip_route 118.230.0.0/16 -add china_ip_route 118.239.0.0/16 -add china_ip_route 118.242.0.0/16 -add china_ip_route 118.244.0.0/14 -add china_ip_route 118.248.0.0/13 -add china_ip_route 119.0.0.0/15 -add china_ip_route 119.2.0.0/19 -add china_ip_route 119.2.128.0/17 -add china_ip_route 119.3.0.0/16 -add china_ip_route 119.4.0.0/14 -add china_ip_route 119.10.0.0/17 -add china_ip_route 119.15.136.0/21 -add china_ip_route 119.16.0.0/16 -add china_ip_route 119.18.192.0/20 -add china_ip_route 119.18.208.0/21 -add china_ip_route 119.18.224.0/20 -add china_ip_route 119.18.240.0/20 -add china_ip_route 119.19.0.0/16 -add china_ip_route 119.20.0.0/14 -add china_ip_route 119.27.64.0/18 -add china_ip_route 119.27.128.0/19 -add china_ip_route 119.27.160.0/19 -add china_ip_route 119.27.192.0/18 -add china_ip_route 119.28.0.0/15 -add china_ip_route 119.30.48.0/20 -add china_ip_route 119.31.192.0/19 -add china_ip_route 119.32.0.0/14 -add china_ip_route 119.36.0.0/16 -add china_ip_route 119.37.0.0/17 -add china_ip_route 119.37.128.0/18 -add china_ip_route 119.37.192.0/18 -add china_ip_route 119.38.0.0/17 -add china_ip_route 119.38.128.0/18 -add china_ip_route 119.38.192.0/20 -add china_ip_route 119.38.208.0/20 -add china_ip_route 119.38.224.0/19 -add china_ip_route 119.39.0.0/16 -add china_ip_route 119.40.0.0/18 -add china_ip_route 119.40.64.0/20 -add china_ip_route 119.40.128.0/17 -add china_ip_route 119.41.0.0/16 -add china_ip_route 119.42.0.0/19 -add china_ip_route 119.42.52.0/22 -add china_ip_route 119.42.128.0/21 -add china_ip_route 119.42.136.0/21 -add china_ip_route 119.42.224.0/19 -add china_ip_route 119.44.0.0/15 -add china_ip_route 119.48.0.0/13 -add china_ip_route 119.57.0.0/16 -add china_ip_route 119.58.0.0/16 -add china_ip_route 119.59.128.0/17 -add china_ip_route 119.60.0.0/16 -add china_ip_route 119.61.0.0/16 -add china_ip_route 119.62.0.0/16 -add china_ip_route 119.63.32.0/19 -add china_ip_route 119.75.208.0/20 -add china_ip_route 119.78.0.0/15 -add china_ip_route 119.80.0.0/16 -add china_ip_route 119.82.208.0/20 -add china_ip_route 119.84.0.0/14 -add china_ip_route 119.88.0.0/14 -add china_ip_route 119.96.0.0/13 -add china_ip_route 119.108.0.0/15 -add china_ip_route 119.112.0.0/13 -add china_ip_route 119.120.0.0/13 -add china_ip_route 119.128.0.0/12 -add china_ip_route 119.144.0.0/14 -add china_ip_route 119.148.160.0/20 -add china_ip_route 119.148.176.0/20 -add china_ip_route 119.151.192.0/18 -add china_ip_route 119.160.200.0/21 -add china_ip_route 119.161.120.0/22 -add china_ip_route 119.161.124.0/22 -add china_ip_route 119.161.128.0/17 -add china_ip_route 119.162.0.0/15 -add china_ip_route 119.164.0.0/14 -add china_ip_route 119.176.0.0/12 -add china_ip_route 119.232.0.0/15 -add china_ip_route 119.235.128.0/18 -add china_ip_route 119.248.0.0/14 -add china_ip_route 119.252.96.0/21 -add china_ip_route 119.252.240.0/20 -add china_ip_route 119.253.0.0/16 -add china_ip_route 119.254.0.0/15 -add china_ip_route 120.0.0.0/12 -add china_ip_route 120.24.0.0/14 -add china_ip_route 120.30.0.0/16 -add china_ip_route 120.31.0.0/16 -add china_ip_route 120.32.0.0/13 -add china_ip_route 120.40.0.0/14 -add china_ip_route 120.44.0.0/15 -add china_ip_route 120.46.0.0/16 -add china_ip_route 120.47.0.0/16 -add china_ip_route 120.48.0.0/15 -add china_ip_route 120.52.0.0/16 -add china_ip_route 120.53.0.0/16 -add china_ip_route 120.54.0.0/15 -add china_ip_route 120.64.0.0/14 -add china_ip_route 120.68.0.0/14 -add china_ip_route 120.72.32.0/19 -add china_ip_route 120.72.128.0/17 -add china_ip_route 120.76.0.0/14 -add china_ip_route 120.80.0.0/13 -add china_ip_route 120.88.8.0/21 -add china_ip_route 120.90.0.0/15 -add china_ip_route 120.92.0.0/16 -add china_ip_route 120.94.0.0/16 -add china_ip_route 120.95.0.0/16 -add china_ip_route 120.128.0.0/14 -add china_ip_route 120.132.0.0/17 -add china_ip_route 120.132.128.0/17 -add china_ip_route 120.133.0.0/16 -add china_ip_route 120.134.0.0/15 -add china_ip_route 120.136.16.0/22 -add china_ip_route 120.136.20.0/22 -add china_ip_route 120.136.128.0/18 -add china_ip_route 120.137.0.0/17 -add china_ip_route 120.143.128.0/19 -add china_ip_route 120.192.0.0/10 -add china_ip_route 121.0.8.0/21 -add china_ip_route 121.0.16.0/20 -add china_ip_route 121.4.0.0/15 -add china_ip_route 121.8.0.0/13 -add china_ip_route 121.16.0.0/13 -add china_ip_route 121.24.0.0/14 -add china_ip_route 121.28.0.0/15 -add china_ip_route 121.30.0.0/16 -add china_ip_route 121.31.0.0/16 -add china_ip_route 121.32.0.0/14 -add china_ip_route 121.36.0.0/16 -add china_ip_route 121.37.0.0/16 -add china_ip_route 121.38.0.0/15 -add china_ip_route 121.40.0.0/14 -add china_ip_route 121.46.0.0/18 -add china_ip_route 121.46.76.0/22 -add china_ip_route 121.46.128.0/17 -add china_ip_route 121.47.0.0/16 -add china_ip_route 121.48.0.0/15 -add china_ip_route 121.50.8.0/21 -add china_ip_route 121.51.0.0/16 -add china_ip_route 121.52.160.0/19 -add china_ip_route 121.52.208.0/20 -add china_ip_route 121.52.224.0/19 -add china_ip_route 121.54.176.0/21 -add china_ip_route 121.54.188.0/22 -add china_ip_route 121.55.0.0/18 -add china_ip_route 121.56.0.0/15 -add china_ip_route 121.58.0.0/17 -add china_ip_route 121.58.136.0/21 -add china_ip_route 121.58.144.0/20 -add china_ip_route 121.58.160.0/21 -add china_ip_route 121.59.0.0/16 -add china_ip_route 121.60.0.0/14 -add china_ip_route 121.68.0.0/14 -add china_ip_route 121.76.0.0/15 -add china_ip_route 121.79.128.0/18 -add china_ip_route 121.89.0.0/16 -add china_ip_route 121.100.128.0/17 -add china_ip_route 121.101.0.0/18 -add china_ip_route 121.101.208.0/20 -add china_ip_route 121.192.0.0/16 -add china_ip_route 121.193.0.0/16 -add china_ip_route 121.194.0.0/15 -add china_ip_route 121.196.0.0/14 -add china_ip_route 121.200.192.0/21 -add china_ip_route 121.201.0.0/16 -add china_ip_route 121.204.0.0/14 -add china_ip_route 121.224.0.0/12 -add china_ip_route 121.248.0.0/14 -add china_ip_route 121.255.0.0/16 -add china_ip_route 122.0.64.0/18 -add china_ip_route 122.0.128.0/17 -add china_ip_route 122.4.0.0/14 -add china_ip_route 122.8.0.0/16 -add china_ip_route 122.9.0.0/16 -add china_ip_route 122.10.128.0/22 -add china_ip_route 122.10.132.0/23 -add china_ip_route 122.10.136.0/23 -add china_ip_route 122.10.164.0/22 -add china_ip_route 122.10.168.0/21 -add china_ip_route 122.10.176.0/20 -add china_ip_route 122.10.192.0/22 -add china_ip_route 122.10.200.0/21 -add china_ip_route 122.10.208.0/21 -add china_ip_route 122.10.216.0/22 -add china_ip_route 122.10.228.0/22 -add china_ip_route 122.10.232.0/21 -add china_ip_route 122.10.240.0/22 -add china_ip_route 122.11.0.0/17 -add china_ip_route 122.12.0.0/16 -add china_ip_route 122.13.0.0/16 -add china_ip_route 122.14.0.0/17 -add china_ip_route 122.14.128.0/18 -add china_ip_route 122.14.192.0/18 -add china_ip_route 122.48.0.0/16 -add china_ip_route 122.49.0.0/18 -add china_ip_route 122.51.0.0/16 -add china_ip_route 122.64.0.0/11 -add china_ip_route 122.96.0.0/15 -add china_ip_route 122.102.0.0/20 -add china_ip_route 122.102.64.0/20 -add china_ip_route 122.102.80.0/20 -add china_ip_route 122.112.0.0/18 -add china_ip_route 122.112.64.0/18 -add china_ip_route 122.112.128.0/17 -add china_ip_route 122.113.0.0/16 -add china_ip_route 122.114.0.0/16 -add china_ip_route 122.115.0.0/17 -add china_ip_route 122.115.128.0/19 -add china_ip_route 122.115.160.0/19 -add china_ip_route 122.115.192.0/19 -add china_ip_route 122.115.224.0/19 -add china_ip_route 122.119.0.0/16 -add china_ip_route 122.128.100.0/22 -add china_ip_route 122.128.120.0/21 -add china_ip_route 122.136.0.0/13 -add china_ip_route 122.144.128.0/17 -add china_ip_route 122.152.192.0/18 -add china_ip_route 122.156.0.0/14 -add china_ip_route 122.188.0.0/14 -add china_ip_route 122.192.0.0/14 -add china_ip_route 122.198.0.0/16 -add china_ip_route 122.200.40.0/22 -add china_ip_route 122.200.44.0/22 -add china_ip_route 122.200.64.0/18 -add china_ip_route 122.201.48.0/20 -add china_ip_route 122.204.0.0/14 -add china_ip_route 122.224.0.0/12 -add china_ip_route 122.240.0.0/13 -add china_ip_route 122.248.24.0/21 -add china_ip_route 122.248.48.0/20 -add china_ip_route 122.255.64.0/21 -add china_ip_route 123.0.128.0/18 -add china_ip_route 123.4.0.0/14 -add china_ip_route 123.8.0.0/13 -add china_ip_route 123.49.128.0/17 -add china_ip_route 123.50.160.0/19 -add china_ip_route 123.52.0.0/14 -add china_ip_route 123.56.0.0/15 -add china_ip_route 123.58.0.0/20 -add china_ip_route 123.58.16.0/20 -add china_ip_route 123.58.32.0/19 -add china_ip_route 123.58.64.0/19 -add china_ip_route 123.58.96.0/19 -add china_ip_route 123.58.128.0/18 -add china_ip_route 123.58.224.0/20 -add china_ip_route 123.58.240.0/20 -add china_ip_route 123.59.0.0/16 -add china_ip_route 123.60.0.0/16 -add china_ip_route 123.61.0.0/16 -add china_ip_route 123.62.0.0/16 -add china_ip_route 123.64.0.0/11 -add china_ip_route 123.96.0.0/15 -add china_ip_route 123.98.0.0/17 -add china_ip_route 123.99.128.0/17 -add china_ip_route 123.100.0.0/19 -add china_ip_route 123.101.0.0/16 -add china_ip_route 123.103.0.0/17 -add china_ip_route 123.108.128.0/20 -add china_ip_route 123.108.208.0/20 -add china_ip_route 123.112.0.0/12 -add china_ip_route 123.128.0.0/13 -add china_ip_route 123.136.80.0/20 -add china_ip_route 123.137.0.0/16 -add china_ip_route 123.138.0.0/15 -add china_ip_route 123.144.0.0/14 -add china_ip_route 123.148.0.0/16 -add china_ip_route 123.149.0.0/16 -add china_ip_route 123.150.0.0/15 -add china_ip_route 123.152.0.0/13 -add china_ip_route 123.160.0.0/14 -add china_ip_route 123.164.0.0/14 -add china_ip_route 123.168.0.0/14 -add china_ip_route 123.172.0.0/15 -add china_ip_route 123.174.0.0/15 -add china_ip_route 123.176.60.0/22 -add china_ip_route 123.176.80.0/20 -add china_ip_route 123.177.0.0/16 -add china_ip_route 123.178.0.0/15 -add china_ip_route 123.180.0.0/14 -add china_ip_route 123.184.0.0/14 -add china_ip_route 123.188.0.0/14 -add china_ip_route 123.196.0.0/15 -add china_ip_route 123.199.128.0/17 -add china_ip_route 123.206.0.0/15 -add china_ip_route 123.232.0.0/14 -add china_ip_route 123.242.0.0/17 -add china_ip_route 123.242.192.0/22 -add china_ip_route 123.242.196.0/22 -add china_ip_route 123.244.0.0/14 -add china_ip_route 123.249.0.0/16 -add china_ip_route 123.253.108.0/22 -add china_ip_route 123.253.240.0/22 -add china_ip_route 123.254.96.0/22 -add china_ip_route 123.254.100.0/22 -add china_ip_route 124.6.64.0/18 -add china_ip_route 124.14.0.0/15 -add china_ip_route 124.16.0.0/15 -add china_ip_route 124.20.0.0/16 -add china_ip_route 124.21.0.0/20 -add china_ip_route 124.21.16.0/20 -add china_ip_route 124.21.32.0/19 -add china_ip_route 124.21.64.0/18 -add china_ip_route 124.21.128.0/17 -add china_ip_route 124.22.0.0/15 -add china_ip_route 124.28.192.0/18 -add china_ip_route 124.29.0.0/17 -add china_ip_route 124.31.0.0/16 -add china_ip_route 124.40.112.0/20 -add china_ip_route 124.40.128.0/18 -add china_ip_route 124.40.192.0/19 -add china_ip_route 124.40.240.0/22 -add china_ip_route 124.42.0.0/17 -add china_ip_route 124.42.128.0/17 -add china_ip_route 124.47.0.0/18 -add china_ip_route 124.64.0.0/15 -add china_ip_route 124.66.0.0/17 -add china_ip_route 124.67.0.0/16 -add china_ip_route 124.68.0.0/14 -add china_ip_route 124.72.0.0/16 -add china_ip_route 124.73.0.0/16 -add china_ip_route 124.74.0.0/15 -add china_ip_route 124.76.0.0/14 -add china_ip_route 124.88.0.0/16 -add china_ip_route 124.89.0.0/17 -add china_ip_route 124.89.128.0/17 -add china_ip_route 124.90.0.0/15 -add china_ip_route 124.92.0.0/14 -add china_ip_route 124.108.8.0/21 -add china_ip_route 124.108.40.0/21 -add china_ip_route 124.109.96.0/21 -add china_ip_route 124.112.0.0/15 -add china_ip_route 124.114.0.0/15 -add china_ip_route 124.116.0.0/16 -add china_ip_route 124.117.0.0/16 -add china_ip_route 124.118.0.0/15 -add china_ip_route 124.126.0.0/15 -add china_ip_route 124.128.0.0/13 -add china_ip_route 124.147.128.0/17 -add china_ip_route 124.150.137.0/24 -add china_ip_route 124.151.0.0/16 -add china_ip_route 124.152.0.0/16 -add china_ip_route 124.160.0.0/16 -add china_ip_route 124.161.0.0/16 -add china_ip_route 124.162.0.0/16 -add china_ip_route 124.163.0.0/16 -add china_ip_route 124.164.0.0/14 -add china_ip_route 124.172.0.0/15 -add china_ip_route 124.174.0.0/15 -add china_ip_route 124.192.0.0/15 -add china_ip_route 124.196.0.0/16 -add china_ip_route 124.200.0.0/13 -add china_ip_route 124.220.0.0/14 -add china_ip_route 124.224.0.0/16 -add china_ip_route 124.225.0.0/16 -add china_ip_route 124.226.0.0/15 -add china_ip_route 124.228.0.0/14 -add china_ip_route 124.232.0.0/15 -add china_ip_route 124.234.0.0/15 -add china_ip_route 124.236.0.0/14 -add china_ip_route 124.240.0.0/17 -add china_ip_route 124.240.128.0/18 -add china_ip_route 124.242.0.0/16 -add china_ip_route 124.243.192.0/18 -add china_ip_route 124.248.0.0/17 -add china_ip_route 124.249.0.0/16 -add china_ip_route 124.250.0.0/15 -add china_ip_route 124.254.0.0/18 -add china_ip_route 125.31.192.0/18 -add china_ip_route 125.32.0.0/16 -add china_ip_route 125.33.0.0/16 -add china_ip_route 125.34.0.0/16 -add china_ip_route 125.35.0.0/17 -add china_ip_route 125.35.128.0/17 -add china_ip_route 125.36.0.0/14 -add china_ip_route 125.40.0.0/13 -add china_ip_route 125.58.128.0/17 -add china_ip_route 125.61.128.0/17 -add china_ip_route 125.62.0.0/18 -add china_ip_route 125.64.0.0/13 -add china_ip_route 125.72.0.0/16 -add china_ip_route 125.73.0.0/16 -add china_ip_route 125.74.0.0/15 -add china_ip_route 125.76.0.0/17 -add china_ip_route 125.76.128.0/17 -add china_ip_route 125.77.0.0/16 -add china_ip_route 125.78.0.0/15 -add china_ip_route 125.80.0.0/13 -add china_ip_route 125.88.0.0/13 -add china_ip_route 125.96.0.0/15 -add china_ip_route 125.98.0.0/16 -add china_ip_route 125.104.0.0/13 -add china_ip_route 125.112.0.0/12 -add china_ip_route 125.169.0.0/16 -add china_ip_route 125.171.0.0/16 -add china_ip_route 125.208.0.0/18 -add china_ip_route 125.210.0.0/16 -add china_ip_route 125.211.0.0/16 -add china_ip_route 125.213.0.0/17 -add china_ip_route 125.214.96.0/19 -add china_ip_route 125.215.0.0/18 -add china_ip_route 125.216.0.0/15 -add china_ip_route 125.218.0.0/16 -add china_ip_route 125.219.0.0/16 -add china_ip_route 125.220.0.0/15 -add china_ip_route 125.222.0.0/15 -add china_ip_route 125.254.128.0/18 -add china_ip_route 125.254.192.0/18 -add china_ip_route 128.108.0.0/16 -add china_ip_route 129.28.0.0/16 -add china_ip_route 129.204.0.0/16 -add china_ip_route 129.211.0.0/16 -add china_ip_route 132.232.0.0/16 -add china_ip_route 134.175.0.0/16 -add china_ip_route 137.59.59.0/24 -add china_ip_route 137.59.88.0/22 -add china_ip_route 139.5.56.0/22 -add china_ip_route 139.5.60.0/22 -add china_ip_route 139.5.80.0/22 -add china_ip_route 139.5.92.0/22 -add china_ip_route 139.5.108.0/22 -add china_ip_route 139.5.128.0/22 -add china_ip_route 139.5.160.0/22 -add china_ip_route 139.5.192.0/22 -add china_ip_route 139.5.204.0/22 -add china_ip_route 139.5.208.0/22 -add china_ip_route 139.5.212.0/22 -add china_ip_route 139.5.244.0/22 -add china_ip_route 139.9.0.0/16 -add china_ip_route 139.129.0.0/16 -add china_ip_route 139.148.0.0/16 -add china_ip_route 139.155.0.0/16 -add china_ip_route 139.159.0.0/16 -add china_ip_route 139.170.0.0/16 -add china_ip_route 139.176.0.0/16 -add china_ip_route 139.183.0.0/16 -add china_ip_route 139.186.0.0/16 -add china_ip_route 139.189.0.0/16 -add china_ip_route 139.196.0.0/14 -add china_ip_route 139.200.0.0/13 -add china_ip_route 139.208.0.0/13 -add china_ip_route 139.217.0.0/16 -add china_ip_route 139.219.0.0/16 -add china_ip_route 139.220.0.0/15 -add china_ip_route 139.224.0.0/16 -add china_ip_route 139.226.0.0/15 -add china_ip_route 140.75.0.0/16 -add china_ip_route 140.143.0.0/16 -add china_ip_route 140.179.0.0/16 -add china_ip_route 140.205.0.0/16 -add china_ip_route 140.206.0.0/15 -add china_ip_route 140.210.0.0/16 -add china_ip_route 140.224.0.0/16 -add china_ip_route 140.237.0.0/16 -add china_ip_route 140.240.0.0/16 -add china_ip_route 140.243.0.0/16 -add china_ip_route 140.246.0.0/16 -add china_ip_route 140.249.0.0/16 -add china_ip_route 140.250.0.0/16 -add china_ip_route 140.255.0.0/16 -add china_ip_route 142.70.0.0/16 -add china_ip_route 142.86.0.0/16 -add china_ip_route 144.0.0.0/16 -add china_ip_route 144.7.0.0/16 -add china_ip_route 144.12.0.0/16 -add china_ip_route 144.48.8.0/22 -add china_ip_route 144.48.64.0/22 -add china_ip_route 144.48.88.0/22 -add china_ip_route 144.48.156.0/22 -add china_ip_route 144.48.180.0/22 -add china_ip_route 144.48.184.0/22 -add china_ip_route 144.48.204.0/22 -add china_ip_route 144.48.208.0/22 -add china_ip_route 144.48.212.0/22 -add china_ip_route 144.48.220.0/22 -add china_ip_route 144.48.252.0/22 -add china_ip_route 144.52.0.0/16 -add china_ip_route 144.123.0.0/16 -add china_ip_route 144.255.0.0/16 -add china_ip_route 146.56.192.0/18 -add china_ip_route 146.196.56.0/22 -add china_ip_route 146.196.68.0/22 -add china_ip_route 146.196.72.0/22 -add china_ip_route 146.196.92.0/22 -add china_ip_route 146.196.112.0/22 -add china_ip_route 146.196.116.0/22 -add china_ip_route 146.196.124.0/22 -add china_ip_route 148.70.0.0/16 -add china_ip_route 149.41.0.0/16 -add china_ip_route 150.0.0.0/16 -add china_ip_route 150.115.0.0/16 -add china_ip_route 150.121.0.0/16 -add china_ip_route 150.122.0.0/16 -add china_ip_route 150.129.136.0/22 -add china_ip_route 150.129.192.0/22 -add china_ip_route 150.129.216.0/22 -add china_ip_route 150.129.252.0/22 -add china_ip_route 150.138.0.0/15 -add china_ip_route 150.158.0.0/16 -add china_ip_route 150.223.0.0/16 -add china_ip_route 150.242.0.0/22 -add china_ip_route 150.242.4.0/22 -add china_ip_route 150.242.8.0/22 -add china_ip_route 150.242.28.0/22 -add china_ip_route 150.242.44.0/22 -add china_ip_route 150.242.48.0/22 -add china_ip_route 150.242.52.0/22 -add china_ip_route 150.242.56.0/22 -add china_ip_route 150.242.76.0/22 -add china_ip_route 150.242.80.0/22 -add china_ip_route 150.242.92.0/22 -add china_ip_route 150.242.96.0/22 -add china_ip_route 150.242.112.0/22 -add china_ip_route 150.242.116.0/22 -add china_ip_route 150.242.120.0/22 -add china_ip_route 150.242.152.0/22 -add china_ip_route 150.242.156.0/22 -add china_ip_route 150.242.160.0/22 -add china_ip_route 150.242.164.0/22 -add china_ip_route 150.242.168.0/22 -add china_ip_route 150.242.184.0/22 -add china_ip_route 150.242.188.0/22 -add china_ip_route 150.242.192.0/22 -add china_ip_route 150.242.212.0/22 -add china_ip_route 150.242.224.0/22 -add china_ip_route 150.242.232.0/22 -add china_ip_route 150.242.236.0/22 -add china_ip_route 150.242.240.0/22 -add china_ip_route 150.242.244.0/22 -add china_ip_route 150.242.248.0/22 -add china_ip_route 150.248.0.0/16 -add china_ip_route 150.255.0.0/16 -add china_ip_route 152.104.128.0/17 -add china_ip_route 152.136.0.0/16 -add china_ip_route 153.0.0.0/16 -add china_ip_route 153.3.0.0/16 -add china_ip_route 153.34.0.0/15 -add china_ip_route 153.36.0.0/15 -add china_ip_route 153.99.0.0/16 -add china_ip_route 153.101.0.0/16 -add china_ip_route 153.118.0.0/15 -add china_ip_route 154.8.128.0/17 -add china_ip_route 156.59.0.0/16 -add china_ip_route 157.0.0.0/16 -add china_ip_route 157.18.0.0/16 -add china_ip_route 157.61.0.0/16 -add china_ip_route 157.119.0.0/22 -add china_ip_route 157.119.8.0/22 -add china_ip_route 157.119.12.0/22 -add china_ip_route 157.119.16.0/22 -add china_ip_route 157.119.28.0/22 -add china_ip_route 157.119.132.0/22 -add china_ip_route 157.119.136.0/22 -add china_ip_route 157.119.140.0/22 -add china_ip_route 157.119.144.0/22 -add china_ip_route 157.119.148.0/22 -add china_ip_route 157.119.152.0/22 -add china_ip_route 157.119.156.0/22 -add china_ip_route 157.119.160.0/22 -add china_ip_route 157.119.164.0/22 -add china_ip_route 157.119.172.0/22 -add china_ip_route 157.119.192.0/22 -add china_ip_route 157.119.196.0/22 -add china_ip_route 157.119.240.0/22 -add china_ip_route 157.119.252.0/22 -add china_ip_route 157.122.0.0/16 -add china_ip_route 157.148.0.0/16 -add china_ip_route 157.156.0.0/16 -add china_ip_route 157.255.0.0/16 -add china_ip_route 158.79.0.0/16 -add china_ip_route 159.75.0.0/16 -add china_ip_route 159.226.0.0/16 -add china_ip_route 160.19.208.0/22 -add china_ip_route 160.19.212.0/22 -add china_ip_route 160.19.216.0/22 -add china_ip_route 160.20.48.0/22 -add china_ip_route 160.202.60.0/22 -add china_ip_route 160.202.148.0/22 -add china_ip_route 160.202.152.0/22 -add china_ip_route 160.202.168.0/22 -add china_ip_route 160.202.212.0/22 -add china_ip_route 160.202.216.0/22 -add china_ip_route 160.202.220.0/22 -add china_ip_route 160.202.224.0/22 -add china_ip_route 160.202.228.0/22 -add china_ip_route 160.202.232.0/22 -add china_ip_route 160.202.236.0/22 -add china_ip_route 160.202.240.0/22 -add china_ip_route 160.202.244.0/22 -add china_ip_route 160.202.248.0/22 -add china_ip_route 160.202.252.0/22 -add china_ip_route 160.238.64.0/22 -add china_ip_route 161.120.0.0/16 -add china_ip_route 161.189.0.0/16 -add china_ip_route 161.207.0.0/16 -add china_ip_route 162.14.0.0/16 -add china_ip_route 162.105.0.0/16 -add china_ip_route 163.0.0.0/16 -add china_ip_route 163.47.4.0/22 -add china_ip_route 163.53.0.0/22 -add china_ip_route 163.53.4.0/22 -add china_ip_route 163.53.8.0/22 -add china_ip_route 163.53.12.0/22 -add china_ip_route 163.53.36.0/22 -add china_ip_route 163.53.40.0/22 -add china_ip_route 163.53.44.0/22 -add china_ip_route 163.53.48.0/22 -add china_ip_route 163.53.52.0/22 -add china_ip_route 163.53.56.0/22 -add china_ip_route 163.53.60.0/22 -add china_ip_route 163.53.64.0/22 -add china_ip_route 163.53.88.0/22 -add china_ip_route 163.53.92.0/22 -add china_ip_route 163.53.96.0/22 -add china_ip_route 163.53.100.0/22 -add china_ip_route 163.53.104.0/22 -add china_ip_route 163.53.108.0/22 -add china_ip_route 163.53.112.0/22 -add china_ip_route 163.53.116.0/22 -add china_ip_route 163.53.120.0/22 -add china_ip_route 163.53.124.0/22 -add china_ip_route 163.53.128.0/22 -add china_ip_route 163.53.132.0/22 -add china_ip_route 163.53.136.0/22 -add china_ip_route 163.53.160.0/22 -add china_ip_route 163.53.164.0/22 -add china_ip_route 163.53.168.0/22 -add china_ip_route 163.53.172.0/22 -add china_ip_route 163.53.188.0/22 -add china_ip_route 163.53.220.0/22 -add china_ip_route 163.53.240.0/22 -add china_ip_route 163.125.0.0/16 -add china_ip_route 163.142.0.0/16 -add china_ip_route 163.177.0.0/16 -add china_ip_route 163.179.0.0/16 -add china_ip_route 163.204.0.0/16 -add china_ip_route 164.52.0.0/17 -add china_ip_route 166.111.0.0/16 -add china_ip_route 167.139.0.0/16 -add china_ip_route 167.189.0.0/16 -add china_ip_route 167.220.244.0/22 -add china_ip_route 168.160.0.0/16 -add china_ip_route 170.179.0.0/16 -add china_ip_route 171.8.0.0/13 -add china_ip_route 171.34.0.0/15 -add china_ip_route 171.36.0.0/14 -add china_ip_route 171.40.0.0/13 -add china_ip_route 171.80.0.0/14 -add china_ip_route 171.84.0.0/14 -add china_ip_route 171.88.0.0/13 -add china_ip_route 171.104.0.0/13 -add china_ip_route 171.112.0.0/14 -add china_ip_route 171.116.0.0/14 -add china_ip_route 171.120.0.0/13 -add china_ip_route 171.208.0.0/12 -add china_ip_route 172.81.192.0/18 -add china_ip_route 175.0.0.0/12 -add china_ip_route 175.16.0.0/13 -add china_ip_route 175.24.0.0/16 -add china_ip_route 175.25.0.0/16 -add china_ip_route 175.26.0.0/16 -add china_ip_route 175.27.0.0/16 -add china_ip_route 175.30.0.0/15 -add china_ip_route 175.42.0.0/15 -add china_ip_route 175.44.0.0/16 -add china_ip_route 175.46.0.0/15 -add china_ip_route 175.48.0.0/12 -add china_ip_route 175.64.0.0/11 -add china_ip_route 175.102.0.0/16 -add china_ip_route 175.106.128.0/17 -add china_ip_route 175.111.144.0/22 -add china_ip_route 175.111.148.0/22 -add china_ip_route 175.111.152.0/22 -add china_ip_route 175.111.156.0/22 -add china_ip_route 175.111.160.0/22 -add china_ip_route 175.111.164.0/22 -add china_ip_route 175.111.168.0/22 -add china_ip_route 175.111.172.0/22 -add china_ip_route 175.111.184.0/22 -add china_ip_route 175.146.0.0/15 -add china_ip_route 175.148.0.0/14 -add china_ip_route 175.152.0.0/14 -add china_ip_route 175.158.96.0/22 -add china_ip_route 175.160.0.0/12 -add china_ip_route 175.176.156.0/22 -add china_ip_route 175.176.176.0/22 -add china_ip_route 175.176.188.0/22 -add china_ip_route 175.176.192.0/22 -add china_ip_route 175.178.0.0/16 -add china_ip_route 175.184.128.0/18 -add china_ip_route 175.185.0.0/16 -add china_ip_route 175.186.0.0/15 -add china_ip_route 175.188.0.0/14 -add china_ip_route 180.76.0.0/16 -add china_ip_route 180.77.0.0/16 -add china_ip_route 180.78.0.0/15 -add china_ip_route 180.84.0.0/15 -add china_ip_route 180.86.0.0/16 -add china_ip_route 180.88.0.0/14 -add china_ip_route 180.94.56.0/21 -add china_ip_route 180.94.96.0/20 -add china_ip_route 180.94.120.0/22 -add china_ip_route 180.94.124.0/22 -add china_ip_route 180.95.128.0/17 -add china_ip_route 180.96.0.0/11 -add china_ip_route 180.129.128.0/17 -add china_ip_route 180.130.0.0/16 -add china_ip_route 180.136.0.0/13 -add china_ip_route 180.148.16.0/21 -add china_ip_route 180.148.152.0/21 -add china_ip_route 180.148.216.0/21 -add china_ip_route 180.148.224.0/19 -add china_ip_route 180.149.128.0/19 -add china_ip_route 180.149.236.0/22 -add china_ip_route 180.150.160.0/19 -add china_ip_route 180.152.0.0/13 -add china_ip_route 180.160.0.0/12 -add china_ip_route 180.178.112.0/22 -add china_ip_route 180.178.116.0/22 -add china_ip_route 180.178.192.0/18 -add china_ip_route 180.184.0.0/15 -add china_ip_route 180.186.0.0/16 -add china_ip_route 180.187.0.0/16 -add china_ip_route 180.188.0.0/17 -add china_ip_route 180.189.148.0/22 -add china_ip_route 180.200.252.0/22 -add china_ip_route 180.201.0.0/16 -add china_ip_route 180.202.0.0/15 -add china_ip_route 180.208.0.0/15 -add china_ip_route 180.210.212.0/22 -add china_ip_route 180.210.224.0/19 -add china_ip_route 180.212.0.0/15 -add china_ip_route 180.222.224.0/19 -add china_ip_route 180.223.0.0/16 -add china_ip_route 180.233.0.0/18 -add china_ip_route 180.233.64.0/19 -add china_ip_route 180.233.144.0/22 -add china_ip_route 180.235.64.0/19 -add china_ip_route 180.235.112.0/22 -add china_ip_route 182.16.144.0/22 -add china_ip_route 182.16.148.0/22 -add china_ip_route 182.16.192.0/19 -add china_ip_route 182.18.0.0/17 -add china_ip_route 182.23.184.0/21 -add china_ip_route 182.23.200.0/21 -add china_ip_route 182.32.0.0/12 -add china_ip_route 182.48.96.0/19 -add china_ip_route 182.49.0.0/16 -add china_ip_route 182.50.0.0/20 -add china_ip_route 182.50.112.0/20 -add china_ip_route 182.51.0.0/16 -add china_ip_route 182.54.0.0/17 -add china_ip_route 182.54.244.0/22 -add china_ip_route 182.61.0.0/16 -add china_ip_route 182.80.0.0/14 -add china_ip_route 182.84.0.0/14 -add china_ip_route 182.88.0.0/14 -add china_ip_route 182.92.0.0/16 -add china_ip_route 182.96.0.0/12 -add china_ip_route 182.112.0.0/12 -add china_ip_route 182.128.0.0/12 -add china_ip_route 182.144.0.0/13 -add china_ip_route 182.157.0.0/16 -add china_ip_route 182.160.64.0/19 -add china_ip_route 182.174.0.0/15 -add china_ip_route 182.200.0.0/13 -add china_ip_route 182.236.128.0/17 -add china_ip_route 182.237.24.0/22 -add china_ip_route 182.237.28.0/22 -add china_ip_route 182.238.0.0/16 -add china_ip_route 182.239.0.0/19 -add china_ip_route 182.240.0.0/13 -add china_ip_route 182.254.0.0/16 -add china_ip_route 182.255.32.0/22 -add china_ip_route 182.255.36.0/22 -add china_ip_route 182.255.60.0/22 -add china_ip_route 183.0.0.0/10 -add china_ip_route 183.64.0.0/13 -add china_ip_route 183.78.160.0/22 -add china_ip_route 183.78.164.0/22 -add china_ip_route 183.78.180.0/22 -add china_ip_route 183.81.172.0/22 -add china_ip_route 183.81.180.0/22 -add china_ip_route 183.84.0.0/15 -add china_ip_route 183.91.128.0/22 -add china_ip_route 183.91.136.0/21 -add china_ip_route 183.91.144.0/20 -add china_ip_route 183.92.0.0/14 -add china_ip_route 183.128.0.0/11 -add china_ip_route 183.160.0.0/13 -add china_ip_route 183.168.0.0/15 -add china_ip_route 183.170.0.0/16 -add china_ip_route 183.172.0.0/14 -add china_ip_route 183.182.0.0/19 -add china_ip_route 183.184.0.0/13 -add china_ip_route 183.192.0.0/10 -add china_ip_route 185.203.36.0/22 -add china_ip_route 188.131.128.0/17 -add china_ip_route 192.51.188.0/24 -add china_ip_route 192.55.46.0/24 -add china_ip_route 192.55.68.0/22 -add china_ip_route 192.102.204.0/23 -add china_ip_route 192.124.154.0/24 -add china_ip_route 192.140.128.0/22 -add china_ip_route 192.140.132.0/22 -add china_ip_route 192.140.136.0/22 -add china_ip_route 192.140.156.0/22 -add china_ip_route 192.140.160.0/22 -add china_ip_route 192.140.164.0/22 -add china_ip_route 192.140.168.0/22 -add china_ip_route 192.140.172.0/22 -add china_ip_route 192.140.176.0/22 -add china_ip_route 192.140.180.0/22 -add china_ip_route 192.140.184.0/22 -add china_ip_route 192.140.188.0/22 -add china_ip_route 192.140.192.0/22 -add china_ip_route 192.140.196.0/22 -add china_ip_route 192.140.200.0/22 -add china_ip_route 192.140.204.0/22 -add china_ip_route 192.140.208.0/22 -add china_ip_route 192.140.212.0/22 -add china_ip_route 192.144.128.0/17 -add china_ip_route 192.197.113.0/24 -add china_ip_route 193.112.0.0/16 -add china_ip_route 198.175.100.0/22 -add china_ip_route 199.212.57.0/24 -add china_ip_route 202.0.100.0/23 -add china_ip_route 202.0.122.0/23 -add china_ip_route 202.0.176.0/22 -add china_ip_route 202.3.128.0/23 -add china_ip_route 202.3.134.0/24 -add china_ip_route 202.4.128.0/19 -add china_ip_route 202.4.252.0/22 -add china_ip_route 202.5.208.0/22 -add china_ip_route 202.5.212.0/22 -add china_ip_route 202.5.216.0/22 -add china_ip_route 202.6.6.0/23 -add china_ip_route 202.6.66.0/23 -add china_ip_route 202.6.72.0/23 -add china_ip_route 202.6.87.0/24 -add china_ip_route 202.6.88.0/23 -add china_ip_route 202.6.92.0/23 -add china_ip_route 202.6.103.0/24 -add china_ip_route 202.6.108.0/24 -add china_ip_route 202.6.110.0/23 -add china_ip_route 202.6.114.0/24 -add china_ip_route 202.6.176.0/20 -add china_ip_route 202.8.0.0/24 -add china_ip_route 202.8.2.0/23 -add china_ip_route 202.8.4.0/23 -add china_ip_route 202.8.12.0/24 -add china_ip_route 202.8.24.0/24 -add china_ip_route 202.8.77.0/24 -add china_ip_route 202.8.120.0/22 -add china_ip_route 202.8.128.0/19 -add china_ip_route 202.8.192.0/20 -add china_ip_route 202.9.32.0/24 -add china_ip_route 202.9.34.0/23 -add china_ip_route 202.9.48.0/23 -add china_ip_route 202.9.51.0/24 -add china_ip_route 202.9.52.0/23 -add china_ip_route 202.9.54.0/24 -add china_ip_route 202.9.57.0/24 -add china_ip_route 202.9.58.0/23 -add china_ip_route 202.10.64.0/20 -add china_ip_route 202.10.112.0/22 -add china_ip_route 202.10.116.0/22 -add china_ip_route 202.10.120.0/22 -add china_ip_route 202.10.124.0/22 -add china_ip_route 202.12.1.0/24 -add china_ip_route 202.12.2.0/24 -add china_ip_route 202.12.17.0/24 -add china_ip_route 202.12.18.0/24 -add china_ip_route 202.12.19.0/24 -add china_ip_route 202.12.72.0/24 -add china_ip_route 202.12.84.0/23 -add china_ip_route 202.12.96.0/24 -add china_ip_route 202.12.98.0/23 -add china_ip_route 202.12.106.0/24 -add china_ip_route 202.12.111.0/24 -add china_ip_route 202.12.116.0/24 -add china_ip_route 202.14.64.0/23 -add china_ip_route 202.14.69.0/24 -add china_ip_route 202.14.73.0/24 -add china_ip_route 202.14.74.0/23 -add china_ip_route 202.14.76.0/24 -add china_ip_route 202.14.78.0/23 -add china_ip_route 202.14.88.0/24 -add china_ip_route 202.14.97.0/24 -add china_ip_route 202.14.104.0/23 -add china_ip_route 202.14.108.0/23 -add china_ip_route 202.14.111.0/24 -add china_ip_route 202.14.114.0/23 -add china_ip_route 202.14.118.0/23 -add china_ip_route 202.14.124.0/23 -add china_ip_route 202.14.127.0/24 -add china_ip_route 202.14.129.0/24 -add china_ip_route 202.14.135.0/24 -add china_ip_route 202.14.136.0/24 -add china_ip_route 202.14.149.0/24 -add china_ip_route 202.14.151.0/24 -add china_ip_route 202.14.157.0/24 -add china_ip_route 202.14.158.0/23 -add china_ip_route 202.14.169.0/24 -add china_ip_route 202.14.170.0/23 -add china_ip_route 202.14.172.0/22 -add china_ip_route 202.14.176.0/24 -add china_ip_route 202.14.184.0/23 -add china_ip_route 202.14.208.0/23 -add china_ip_route 202.14.213.0/24 -add china_ip_route 202.14.219.0/24 -add china_ip_route 202.14.220.0/24 -add china_ip_route 202.14.222.0/23 -add china_ip_route 202.14.225.0/24 -add china_ip_route 202.14.226.0/23 -add china_ip_route 202.14.231.0/24 -add china_ip_route 202.14.235.0/24 -add china_ip_route 202.14.236.0/23 -add china_ip_route 202.14.238.0/24 -add china_ip_route 202.14.239.0/24 -add china_ip_route 202.14.246.0/24 -add china_ip_route 202.14.251.0/24 -add china_ip_route 202.20.66.0/24 -add china_ip_route 202.20.79.0/24 -add china_ip_route 202.20.87.0/24 -add china_ip_route 202.20.88.0/23 -add china_ip_route 202.20.90.0/24 -add china_ip_route 202.20.94.0/23 -add china_ip_route 202.20.114.0/24 -add china_ip_route 202.20.117.0/24 -add china_ip_route 202.20.120.0/24 -add china_ip_route 202.20.125.0/24 -add china_ip_route 202.20.126.0/24 -add china_ip_route 202.20.127.0/24 -add china_ip_route 202.21.48.0/22 -add china_ip_route 202.21.52.0/22 -add china_ip_route 202.21.56.0/22 -add china_ip_route 202.21.60.0/22 -add china_ip_route 202.21.131.0/24 -add china_ip_route 202.21.132.0/24 -add china_ip_route 202.21.141.0/24 -add china_ip_route 202.21.142.0/24 -add china_ip_route 202.21.147.0/24 -add china_ip_route 202.21.148.0/24 -add china_ip_route 202.21.150.0/23 -add china_ip_route 202.21.152.0/23 -add china_ip_route 202.21.154.0/24 -add china_ip_route 202.21.156.0/24 -add china_ip_route 202.22.248.0/22 -add china_ip_route 202.22.252.0/22 -add china_ip_route 202.27.12.0/24 -add china_ip_route 202.27.14.0/24 -add china_ip_route 202.27.136.0/23 -add china_ip_route 202.36.226.0/24 -add china_ip_route 202.38.0.0/23 -add china_ip_route 202.38.2.0/23 -add china_ip_route 202.38.8.0/21 -add china_ip_route 202.38.48.0/20 -add china_ip_route 202.38.64.0/19 -add china_ip_route 202.38.96.0/19 -add china_ip_route 202.38.128.0/23 -add china_ip_route 202.38.130.0/23 -add china_ip_route 202.38.132.0/23 -add china_ip_route 202.38.134.0/24 -add china_ip_route 202.38.135.0/24 -add china_ip_route 202.38.136.0/23 -add china_ip_route 202.38.138.0/24 -add china_ip_route 202.38.140.0/23 -add china_ip_route 202.38.142.0/23 -add china_ip_route 202.38.146.0/23 -add china_ip_route 202.38.149.0/24 -add china_ip_route 202.38.150.0/23 -add china_ip_route 202.38.152.0/23 -add china_ip_route 202.38.154.0/23 -add china_ip_route 202.38.156.0/24 -add china_ip_route 202.38.158.0/23 -add china_ip_route 202.38.160.0/23 -add china_ip_route 202.38.164.0/22 -add china_ip_route 202.38.168.0/23 -add china_ip_route 202.38.170.0/24 -add china_ip_route 202.38.171.0/24 -add china_ip_route 202.38.176.0/23 -add china_ip_route 202.38.184.0/21 -add china_ip_route 202.38.192.0/18 -add china_ip_route 202.40.4.0/23 -add china_ip_route 202.40.7.0/24 -add china_ip_route 202.40.15.0/24 -add china_ip_route 202.40.135.0/24 -add china_ip_route 202.40.136.0/24 -add china_ip_route 202.40.140.0/24 -add china_ip_route 202.40.143.0/24 -add china_ip_route 202.40.144.0/23 -add china_ip_route 202.40.150.0/24 -add china_ip_route 202.40.155.0/24 -add china_ip_route 202.40.156.0/24 -add china_ip_route 202.40.158.0/23 -add china_ip_route 202.40.162.0/24 -add china_ip_route 202.41.8.0/23 -add china_ip_route 202.41.11.0/24 -add china_ip_route 202.41.12.0/23 -add china_ip_route 202.41.128.0/24 -add china_ip_route 202.41.130.0/23 -add china_ip_route 202.41.152.0/21 -add china_ip_route 202.41.192.0/24 -add china_ip_route 202.41.196.0/22 -add china_ip_route 202.41.200.0/22 -add china_ip_route 202.41.240.0/20 -add china_ip_route 202.43.76.0/22 -add china_ip_route 202.43.144.0/20 -add china_ip_route 202.44.16.0/20 -add china_ip_route 202.44.48.0/22 -add china_ip_route 202.44.67.0/24 -add china_ip_route 202.44.74.0/24 -add china_ip_route 202.44.97.0/24 -add china_ip_route 202.44.129.0/24 -add china_ip_route 202.44.132.0/23 -add china_ip_route 202.44.146.0/23 -add china_ip_route 202.45.0.0/23 -add china_ip_route 202.45.2.0/24 -add china_ip_route 202.45.15.0/24 -add china_ip_route 202.45.16.0/20 -add china_ip_route 202.46.16.0/23 -add china_ip_route 202.46.18.0/24 -add china_ip_route 202.46.20.0/23 -add china_ip_route 202.46.32.0/19 -add china_ip_route 202.46.128.0/24 -add china_ip_route 202.46.224.0/20 -add china_ip_route 202.47.82.0/23 -add china_ip_route 202.47.96.0/22 -add china_ip_route 202.47.100.0/22 -add china_ip_route 202.47.104.0/22 -add china_ip_route 202.47.108.0/22 -add china_ip_route 202.47.126.0/24 -add china_ip_route 202.47.128.0/24 -add china_ip_route 202.47.130.0/23 -add china_ip_route 202.52.33.0/24 -add china_ip_route 202.52.34.0/24 -add china_ip_route 202.52.47.0/24 -add china_ip_route 202.52.143.0/24 -add china_ip_route 202.52.144.0/24 -add china_ip_route 202.53.140.0/24 -add china_ip_route 202.53.143.0/24 -add china_ip_route 202.57.192.0/22 -add china_ip_route 202.57.196.0/22 -add china_ip_route 202.57.200.0/22 -add china_ip_route 202.57.204.0/22 -add china_ip_route 202.57.212.0/22 -add china_ip_route 202.57.216.0/22 -add china_ip_route 202.57.240.0/20 -add china_ip_route 202.58.0.0/24 -add china_ip_route 202.58.101.0/24 -add china_ip_route 202.58.104.0/22 -add china_ip_route 202.58.112.0/22 -add china_ip_route 202.59.0.0/24 -add china_ip_route 202.59.1.0/24 -add china_ip_route 202.59.212.0/22 -add china_ip_route 202.59.236.0/24 -add china_ip_route 202.59.240.0/24 -add china_ip_route 202.60.48.0/21 -add china_ip_route 202.60.96.0/21 -add china_ip_route 202.60.112.0/20 -add china_ip_route 202.60.132.0/22 -add china_ip_route 202.60.136.0/21 -add china_ip_route 202.60.144.0/20 -add china_ip_route 202.61.68.0/22 -add china_ip_route 202.61.76.0/22 -add china_ip_route 202.61.88.0/22 -add china_ip_route 202.61.123.0/24 -add china_ip_route 202.61.127.0/24 -add china_ip_route 202.62.112.0/22 -add china_ip_route 202.62.248.0/22 -add china_ip_route 202.62.252.0/24 -add china_ip_route 202.62.255.0/24 -add china_ip_route 202.63.80.0/24 -add china_ip_route 202.63.81.0/24 -add china_ip_route 202.63.82.0/23 -add china_ip_route 202.63.84.0/22 -add china_ip_route 202.63.88.0/21 -add china_ip_route 202.63.160.0/19 -add china_ip_route 202.63.248.0/22 -add china_ip_route 202.63.253.0/24 -add china_ip_route 202.65.0.0/21 -add china_ip_route 202.65.8.0/23 -add china_ip_route 202.65.96.0/22 -add china_ip_route 202.65.100.0/22 -add china_ip_route 202.65.104.0/22 -add china_ip_route 202.65.108.0/22 -add china_ip_route 202.66.168.0/22 -add china_ip_route 202.67.0.0/22 -add china_ip_route 202.69.4.0/22 -add china_ip_route 202.69.16.0/20 -add china_ip_route 202.70.0.0/19 -add china_ip_route 202.70.96.0/20 -add china_ip_route 202.70.192.0/20 -add china_ip_route 202.71.32.0/22 -add china_ip_route 202.71.36.0/22 -add china_ip_route 202.71.40.0/22 -add china_ip_route 202.71.44.0/22 -add china_ip_route 202.72.40.0/21 -add china_ip_route 202.72.80.0/20 -add china_ip_route 202.72.112.0/22 -add china_ip_route 202.72.116.0/22 -add china_ip_route 202.72.120.0/22 -add china_ip_route 202.72.124.0/22 -add china_ip_route 202.73.128.0/22 -add china_ip_route 202.73.240.0/22 -add china_ip_route 202.73.244.0/22 -add china_ip_route 202.73.248.0/22 -add china_ip_route 202.73.252.0/22 -add china_ip_route 202.74.8.0/21 -add china_ip_route 202.74.36.0/24 -add china_ip_route 202.74.42.0/24 -add china_ip_route 202.74.52.0/24 -add china_ip_route 202.74.80.0/20 -add china_ip_route 202.74.232.0/22 -add china_ip_route 202.74.254.0/23 -add china_ip_route 202.75.208.0/20 -add china_ip_route 202.75.252.0/22 -add china_ip_route 202.76.252.0/22 -add china_ip_route 202.77.80.0/21 -add china_ip_route 202.77.92.0/22 -add china_ip_route 202.78.8.0/21 -add china_ip_route 202.79.224.0/21 -add china_ip_route 202.79.248.0/22 -add china_ip_route 202.80.192.0/21 -add china_ip_route 202.80.200.0/21 -add china_ip_route 202.81.0.0/22 -add china_ip_route 202.81.176.0/22 -add china_ip_route 202.81.180.0/22 -add china_ip_route 202.81.184.0/22 -add china_ip_route 202.81.188.0/22 -add china_ip_route 202.83.252.0/22 -add china_ip_route 202.84.0.0/22 -add china_ip_route 202.84.4.0/22 -add china_ip_route 202.84.8.0/21 -add china_ip_route 202.84.16.0/23 -add china_ip_route 202.84.22.0/24 -add china_ip_route 202.84.24.0/21 -add china_ip_route 202.85.208.0/20 -add china_ip_route 202.86.249.0/24 -add china_ip_route 202.86.252.0/22 -add china_ip_route 202.87.80.0/20 -add china_ip_route 202.88.32.0/22 -add china_ip_route 202.89.8.0/21 -add china_ip_route 202.89.96.0/22 -add china_ip_route 202.89.108.0/22 -add china_ip_route 202.89.119.0/24 -add china_ip_route 202.89.232.0/21 -add china_ip_route 202.90.0.0/22 -add china_ip_route 202.90.16.0/22 -add china_ip_route 202.90.20.0/22 -add china_ip_route 202.90.24.0/22 -add china_ip_route 202.90.28.0/22 -add china_ip_route 202.90.37.0/24 -add china_ip_route 202.90.96.0/22 -add china_ip_route 202.90.100.0/22 -add china_ip_route 202.90.104.0/22 -add china_ip_route 202.90.108.0/22 -add china_ip_route 202.90.112.0/20 -add china_ip_route 202.90.193.0/24 -add china_ip_route 202.90.196.0/24 -add china_ip_route 202.90.205.0/24 -add china_ip_route 202.90.224.0/20 -add china_ip_route 202.91.0.0/22 -add china_ip_route 202.91.36.0/22 -add china_ip_route 202.91.96.0/20 -add china_ip_route 202.91.128.0/22 -add china_ip_route 202.91.176.0/20 -add china_ip_route 202.91.224.0/19 -add china_ip_route 202.92.0.0/22 -add china_ip_route 202.92.8.0/21 -add china_ip_route 202.92.48.0/20 -add china_ip_route 202.92.252.0/22 -add china_ip_route 202.93.0.0/22 -add china_ip_route 202.93.252.0/22 -add china_ip_route 202.94.68.0/24 -add china_ip_route 202.94.74.0/24 -add china_ip_route 202.94.81.0/24 -add china_ip_route 202.94.92.0/22 -add china_ip_route 202.95.240.0/21 -add china_ip_route 202.95.252.0/22 -add china_ip_route 202.96.0.0/18 -add china_ip_route 202.96.64.0/21 -add china_ip_route 202.96.72.0/21 -add china_ip_route 202.96.80.0/20 -add china_ip_route 202.96.96.0/21 -add china_ip_route 202.96.104.0/21 -add china_ip_route 202.96.112.0/20 -add china_ip_route 202.96.128.0/21 -add china_ip_route 202.96.136.0/21 -add china_ip_route 202.96.144.0/20 -add china_ip_route 202.96.160.0/21 -add china_ip_route 202.96.168.0/21 -add china_ip_route 202.96.176.0/20 -add china_ip_route 202.96.192.0/21 -add china_ip_route 202.96.200.0/21 -add china_ip_route 202.96.208.0/20 -add china_ip_route 202.96.224.0/21 -add china_ip_route 202.96.232.0/21 -add china_ip_route 202.96.240.0/20 -add china_ip_route 202.97.0.0/21 -add china_ip_route 202.97.8.0/21 -add china_ip_route 202.97.16.0/20 -add china_ip_route 202.97.32.0/19 -add china_ip_route 202.97.64.0/19 -add china_ip_route 202.97.96.0/20 -add china_ip_route 202.97.112.0/20 -add china_ip_route 202.97.128.0/18 -add china_ip_route 202.97.192.0/19 -add china_ip_route 202.97.224.0/21 -add china_ip_route 202.97.232.0/21 -add china_ip_route 202.97.240.0/20 -add china_ip_route 202.98.0.0/21 -add china_ip_route 202.98.8.0/21 -add china_ip_route 202.98.16.0/20 -add china_ip_route 202.98.32.0/21 -add china_ip_route 202.98.40.0/21 -add china_ip_route 202.98.48.0/20 -add china_ip_route 202.98.64.0/19 -add china_ip_route 202.98.96.0/21 -add china_ip_route 202.98.104.0/21 -add china_ip_route 202.98.112.0/20 -add china_ip_route 202.98.128.0/19 -add china_ip_route 202.98.160.0/21 -add china_ip_route 202.98.168.0/21 -add china_ip_route 202.98.176.0/20 -add china_ip_route 202.98.192.0/21 -add china_ip_route 202.98.200.0/21 -add china_ip_route 202.98.208.0/20 -add china_ip_route 202.98.224.0/21 -add china_ip_route 202.98.232.0/21 -add china_ip_route 202.98.240.0/20 -add china_ip_route 202.99.0.0/18 -add china_ip_route 202.99.64.0/19 -add china_ip_route 202.99.96.0/21 -add china_ip_route 202.99.104.0/21 -add china_ip_route 202.99.112.0/20 -add china_ip_route 202.99.128.0/19 -add china_ip_route 202.99.160.0/21 -add china_ip_route 202.99.168.0/21 -add china_ip_route 202.99.176.0/20 -add china_ip_route 202.99.192.0/21 -add china_ip_route 202.99.200.0/21 -add china_ip_route 202.99.208.0/20 -add china_ip_route 202.99.224.0/21 -add china_ip_route 202.99.232.0/21 -add china_ip_route 202.99.240.0/20 -add china_ip_route 202.100.0.0/21 -add china_ip_route 202.100.8.0/21 -add china_ip_route 202.100.16.0/20 -add china_ip_route 202.100.32.0/19 -add china_ip_route 202.100.64.0/21 -add china_ip_route 202.100.72.0/21 -add china_ip_route 202.100.80.0/20 -add china_ip_route 202.100.96.0/21 -add china_ip_route 202.100.104.0/21 -add china_ip_route 202.100.112.0/20 -add china_ip_route 202.100.128.0/21 -add china_ip_route 202.100.136.0/21 -add china_ip_route 202.100.144.0/20 -add china_ip_route 202.100.160.0/21 -add china_ip_route 202.100.168.0/21 -add china_ip_route 202.100.176.0/20 -add china_ip_route 202.100.192.0/21 -add china_ip_route 202.100.200.0/21 -add china_ip_route 202.100.208.0/20 -add china_ip_route 202.100.224.0/19 -add china_ip_route 202.101.0.0/18 -add china_ip_route 202.101.64.0/19 -add china_ip_route 202.101.96.0/19 -add china_ip_route 202.101.128.0/18 -add china_ip_route 202.101.192.0/19 -add china_ip_route 202.101.224.0/21 -add china_ip_route 202.101.232.0/21 -add china_ip_route 202.101.240.0/20 -add china_ip_route 202.102.0.0/19 -add china_ip_route 202.102.32.0/19 -add china_ip_route 202.102.64.0/18 -add china_ip_route 202.102.128.0/21 -add china_ip_route 202.102.136.0/21 -add china_ip_route 202.102.144.0/20 -add china_ip_route 202.102.160.0/19 -add china_ip_route 202.102.192.0/21 -add china_ip_route 202.102.200.0/21 -add china_ip_route 202.102.208.0/20 -add china_ip_route 202.102.224.0/21 -add china_ip_route 202.102.232.0/21 -add china_ip_route 202.102.240.0/20 -add china_ip_route 202.103.0.0/21 -add china_ip_route 202.103.8.0/21 -add china_ip_route 202.103.16.0/20 -add china_ip_route 202.103.32.0/19 -add china_ip_route 202.103.64.0/19 -add china_ip_route 202.103.96.0/21 -add china_ip_route 202.103.104.0/21 -add china_ip_route 202.103.112.0/20 -add china_ip_route 202.103.128.0/18 -add china_ip_route 202.103.192.0/19 -add china_ip_route 202.103.224.0/21 -add china_ip_route 202.103.232.0/21 -add china_ip_route 202.103.240.0/20 -add china_ip_route 202.104.0.0/15 -add china_ip_route 202.106.0.0/16 -add china_ip_route 202.107.0.0/17 -add china_ip_route 202.107.128.0/17 -add china_ip_route 202.108.0.0/16 -add china_ip_route 202.109.0.0/16 -add china_ip_route 202.110.0.0/18 -add china_ip_route 202.110.64.0/18 -add china_ip_route 202.110.128.0/18 -add china_ip_route 202.110.192.0/18 -add china_ip_route 202.111.0.0/17 -add china_ip_route 202.111.128.0/19 -add china_ip_route 202.111.160.0/19 -add china_ip_route 202.111.192.0/18 -add china_ip_route 202.112.0.0/16 -add china_ip_route 202.113.0.0/20 -add china_ip_route 202.113.16.0/20 -add china_ip_route 202.113.32.0/19 -add china_ip_route 202.113.64.0/18 -add china_ip_route 202.113.128.0/18 -add china_ip_route 202.113.192.0/19 -add china_ip_route 202.113.224.0/20 -add china_ip_route 202.113.240.0/20 -add china_ip_route 202.114.0.0/19 -add china_ip_route 202.114.32.0/19 -add china_ip_route 202.114.64.0/18 -add china_ip_route 202.114.128.0/17 -add china_ip_route 202.115.0.0/19 -add china_ip_route 202.115.32.0/19 -add china_ip_route 202.115.64.0/18 -add china_ip_route 202.115.128.0/17 -add china_ip_route 202.116.0.0/19 -add china_ip_route 202.116.32.0/20 -add china_ip_route 202.116.48.0/20 -add china_ip_route 202.116.64.0/19 -add china_ip_route 202.116.96.0/19 -add china_ip_route 202.116.128.0/17 -add china_ip_route 202.117.0.0/18 -add china_ip_route 202.117.64.0/18 -add china_ip_route 202.117.128.0/17 -add china_ip_route 202.118.0.0/19 -add china_ip_route 202.118.32.0/19 -add china_ip_route 202.118.64.0/18 -add china_ip_route 202.118.128.0/17 -add china_ip_route 202.119.0.0/19 -add china_ip_route 202.119.32.0/19 -add china_ip_route 202.119.64.0/20 -add china_ip_route 202.119.80.0/20 -add china_ip_route 202.119.96.0/19 -add china_ip_route 202.119.128.0/17 -add china_ip_route 202.120.0.0/18 -add china_ip_route 202.120.64.0/18 -add china_ip_route 202.120.128.0/17 -add china_ip_route 202.121.0.0/16 -add china_ip_route 202.122.0.0/21 -add china_ip_route 202.122.32.0/21 -add china_ip_route 202.122.64.0/19 -add china_ip_route 202.122.112.0/21 -add china_ip_route 202.122.120.0/21 -add china_ip_route 202.122.128.0/24 -add china_ip_route 202.122.132.0/24 -add china_ip_route 202.123.96.0/20 -add china_ip_route 202.123.116.0/22 -add china_ip_route 202.123.120.0/22 -add china_ip_route 202.124.16.0/21 -add china_ip_route 202.124.24.0/22 -add china_ip_route 202.125.107.0/24 -add china_ip_route 202.125.109.0/24 -add china_ip_route 202.125.112.0/20 -add china_ip_route 202.125.176.0/20 -add china_ip_route 202.127.0.0/23 -add china_ip_route 202.127.2.0/24 -add china_ip_route 202.127.3.0/24 -add china_ip_route 202.127.4.0/24 -add china_ip_route 202.127.5.0/24 -add china_ip_route 202.127.6.0/23 -add china_ip_route 202.127.12.0/22 -add china_ip_route 202.127.16.0/20 -add china_ip_route 202.127.40.0/21 -add china_ip_route 202.127.48.0/20 -add china_ip_route 202.127.112.0/20 -add china_ip_route 202.127.128.0/20 -add china_ip_route 202.127.144.0/20 -add china_ip_route 202.127.160.0/21 -add china_ip_route 202.127.192.0/23 -add china_ip_route 202.127.194.0/23 -add china_ip_route 202.127.196.0/22 -add china_ip_route 202.127.200.0/21 -add china_ip_route 202.127.208.0/24 -add china_ip_route 202.127.209.0/24 -add china_ip_route 202.127.212.0/22 -add china_ip_route 202.127.216.0/21 -add china_ip_route 202.127.224.0/19 -add china_ip_route 202.129.208.0/24 -add china_ip_route 202.130.0.0/19 -add china_ip_route 202.130.39.0/24 -add china_ip_route 202.130.224.0/19 -add china_ip_route 202.131.16.0/21 -add china_ip_route 202.131.48.0/20 -add china_ip_route 202.131.208.0/20 -add china_ip_route 202.133.32.0/20 -add china_ip_route 202.134.58.0/24 -add china_ip_route 202.134.128.0/20 -add china_ip_route 202.134.208.0/22 -add china_ip_route 202.134.212.0/22 -add china_ip_route 202.134.216.0/22 -add china_ip_route 202.134.220.0/22 -add china_ip_route 202.136.48.0/20 -add china_ip_route 202.136.208.0/20 -add china_ip_route 202.136.224.0/20 -add china_ip_route 202.136.248.0/22 -add china_ip_route 202.137.231.0/24 -add china_ip_route 202.140.140.0/22 -add china_ip_route 202.140.144.0/22 -add china_ip_route 202.140.148.0/22 -add china_ip_route 202.140.152.0/22 -add china_ip_route 202.140.156.0/22 -add china_ip_route 202.141.160.0/19 -add china_ip_route 202.142.16.0/20 -add china_ip_route 202.143.4.0/22 -add china_ip_route 202.143.16.0/20 -add china_ip_route 202.143.32.0/20 -add china_ip_route 202.143.56.0/21 -add china_ip_route 202.143.100.0/22 -add china_ip_route 202.143.104.0/22 -add china_ip_route 202.144.196.0/22 -add china_ip_route 202.146.160.0/20 -add china_ip_route 202.146.186.0/24 -add china_ip_route 202.146.188.0/22 -add china_ip_route 202.146.196.0/22 -add china_ip_route 202.146.200.0/21 -add china_ip_route 202.147.144.0/20 -add china_ip_route 202.148.32.0/20 -add china_ip_route 202.148.64.0/19 -add china_ip_route 202.148.96.0/19 -add china_ip_route 202.149.32.0/19 -add china_ip_route 202.149.160.0/19 -add china_ip_route 202.149.224.0/19 -add china_ip_route 202.150.16.0/20 -add china_ip_route 202.150.32.0/20 -add china_ip_route 202.150.56.0/22 -add china_ip_route 202.150.192.0/20 -add china_ip_route 202.150.224.0/19 -add china_ip_route 202.151.0.0/22 -add china_ip_route 202.151.33.0/24 -add china_ip_route 202.151.128.0/19 -add china_ip_route 202.152.176.0/20 -add china_ip_route 202.153.0.0/22 -add china_ip_route 202.153.7.0/24 -add china_ip_route 202.153.48.0/20 -add china_ip_route 202.157.192.0/19 -add china_ip_route 202.158.160.0/19 -add china_ip_route 202.158.242.0/24 -add china_ip_route 202.160.140.0/22 -add china_ip_route 202.160.156.0/22 -add china_ip_route 202.160.176.0/20 -add china_ip_route 202.162.67.0/24 -add china_ip_route 202.162.75.0/24 -add china_ip_route 202.164.0.0/20 -add china_ip_route 202.164.96.0/19 -add china_ip_route 202.165.176.0/20 -add china_ip_route 202.165.208.0/20 -add china_ip_route 202.165.239.0/24 -add china_ip_route 202.165.240.0/23 -add china_ip_route 202.165.243.0/24 -add china_ip_route 202.165.245.0/24 -add china_ip_route 202.165.251.0/24 -add china_ip_route 202.165.252.0/22 -add china_ip_route 202.166.224.0/19 -add china_ip_route 202.168.80.0/22 -add china_ip_route 202.168.128.0/22 -add china_ip_route 202.168.132.0/22 -add china_ip_route 202.168.136.0/22 -add china_ip_route 202.168.140.0/22 -add china_ip_route 202.168.160.0/20 -add china_ip_route 202.168.176.0/20 -add china_ip_route 202.170.128.0/19 -add china_ip_route 202.170.216.0/21 -add china_ip_route 202.170.224.0/19 -add china_ip_route 202.171.216.0/21 -add china_ip_route 202.171.232.0/24 -add china_ip_route 202.171.235.0/24 -add china_ip_route 202.172.0.0/22 -add china_ip_route 202.172.7.0/24 -add china_ip_route 202.173.0.0/22 -add china_ip_route 202.173.6.0/24 -add china_ip_route 202.173.8.0/21 -add china_ip_route 202.173.112.0/22 -add china_ip_route 202.173.224.0/19 -add china_ip_route 202.174.64.0/20 -add china_ip_route 202.174.124.0/22 -add china_ip_route 202.176.224.0/19 -add china_ip_route 202.179.160.0/22 -add china_ip_route 202.179.164.0/22 -add china_ip_route 202.179.168.0/22 -add china_ip_route 202.179.172.0/22 -add china_ip_route 202.179.240.0/20 -add china_ip_route 202.180.128.0/19 -add china_ip_route 202.180.208.0/21 -add china_ip_route 202.181.8.0/22 -add china_ip_route 202.181.28.0/22 -add china_ip_route 202.181.112.0/20 -add china_ip_route 202.182.32.0/20 -add china_ip_route 202.182.192.0/19 -add china_ip_route 202.189.0.0/18 -add china_ip_route 202.189.80.0/20 -add china_ip_route 202.189.184.0/21 -add china_ip_route 202.191.0.0/24 -add china_ip_route 202.191.68.0/22 -add china_ip_route 202.191.72.0/21 -add china_ip_route 202.191.80.0/20 -add china_ip_route 202.192.0.0/13 -add china_ip_route 202.200.0.0/14 -add china_ip_route 202.204.0.0/14 -add china_ip_route 203.0.4.0/22 -add china_ip_route 203.0.10.0/23 -add china_ip_route 203.0.18.0/24 -add china_ip_route 203.0.24.0/24 -add china_ip_route 203.0.42.0/23 -add china_ip_route 203.0.45.0/24 -add china_ip_route 203.0.46.0/23 -add china_ip_route 203.0.81.0/24 -add china_ip_route 203.0.82.0/23 -add china_ip_route 203.0.90.0/23 -add china_ip_route 203.0.96.0/23 -add china_ip_route 203.0.104.0/21 -add china_ip_route 203.0.114.0/23 -add china_ip_route 203.0.122.0/24 -add china_ip_route 203.0.128.0/24 -add china_ip_route 203.0.130.0/23 -add china_ip_route 203.0.132.0/22 -add china_ip_route 203.0.137.0/24 -add china_ip_route 203.0.142.0/24 -add china_ip_route 203.0.144.0/24 -add china_ip_route 203.0.146.0/24 -add china_ip_route 203.0.148.0/24 -add china_ip_route 203.0.150.0/23 -add china_ip_route 203.0.152.0/24 -add china_ip_route 203.0.177.0/24 -add china_ip_route 203.0.224.0/24 -add china_ip_route 203.1.4.0/22 -add china_ip_route 203.1.18.0/24 -add china_ip_route 203.1.26.0/23 -add china_ip_route 203.1.65.0/24 -add china_ip_route 203.1.66.0/23 -add china_ip_route 203.1.70.0/23 -add china_ip_route 203.1.76.0/23 -add china_ip_route 203.1.90.0/24 -add china_ip_route 203.1.97.0/24 -add china_ip_route 203.1.98.0/23 -add china_ip_route 203.1.100.0/22 -add china_ip_route 203.1.108.0/24 -add china_ip_route 203.1.253.0/24 -add china_ip_route 203.1.254.0/24 -add china_ip_route 203.2.64.0/21 -add china_ip_route 203.2.73.0/24 -add china_ip_route 203.2.112.0/21 -add china_ip_route 203.2.126.0/23 -add china_ip_route 203.2.140.0/24 -add china_ip_route 203.2.150.0/24 -add china_ip_route 203.2.152.0/22 -add china_ip_route 203.2.156.0/23 -add china_ip_route 203.2.160.0/21 -add china_ip_route 203.2.180.0/23 -add china_ip_route 203.2.196.0/23 -add china_ip_route 203.2.209.0/24 -add china_ip_route 203.2.214.0/23 -add china_ip_route 203.2.226.0/23 -add china_ip_route 203.2.229.0/24 -add china_ip_route 203.2.236.0/23 -add china_ip_route 203.3.68.0/24 -add china_ip_route 203.3.72.0/23 -add china_ip_route 203.3.75.0/24 -add china_ip_route 203.3.80.0/21 -add china_ip_route 203.3.96.0/22 -add china_ip_route 203.3.105.0/24 -add china_ip_route 203.3.112.0/21 -add china_ip_route 203.3.120.0/24 -add china_ip_route 203.3.123.0/24 -add china_ip_route 203.3.135.0/24 -add china_ip_route 203.3.139.0/24 -add china_ip_route 203.3.143.0/24 -add china_ip_route 203.4.132.0/23 -add china_ip_route 203.4.134.0/24 -add china_ip_route 203.4.151.0/24 -add china_ip_route 203.4.152.0/22 -add china_ip_route 203.4.174.0/23 -add china_ip_route 203.4.180.0/24 -add china_ip_route 203.4.186.0/24 -add china_ip_route 203.4.205.0/24 -add china_ip_route 203.4.208.0/22 -add china_ip_route 203.4.227.0/24 -add china_ip_route 203.4.230.0/23 -add china_ip_route 203.5.4.0/23 -add china_ip_route 203.5.7.0/24 -add china_ip_route 203.5.8.0/23 -add china_ip_route 203.5.11.0/24 -add china_ip_route 203.5.21.0/24 -add china_ip_route 203.5.22.0/24 -add china_ip_route 203.5.44.0/24 -add china_ip_route 203.5.46.0/23 -add china_ip_route 203.5.52.0/22 -add china_ip_route 203.5.56.0/23 -add china_ip_route 203.5.60.0/23 -add china_ip_route 203.5.114.0/23 -add china_ip_route 203.5.118.0/24 -add china_ip_route 203.5.120.0/24 -add china_ip_route 203.5.172.0/24 -add china_ip_route 203.5.180.0/23 -add china_ip_route 203.5.182.0/24 -add china_ip_route 203.5.185.0/24 -add china_ip_route 203.5.186.0/24 -add china_ip_route 203.5.188.0/23 -add china_ip_route 203.5.190.0/24 -add china_ip_route 203.5.195.0/24 -add china_ip_route 203.5.214.0/23 -add china_ip_route 203.5.218.0/23 -add china_ip_route 203.6.131.0/24 -add china_ip_route 203.6.136.0/24 -add china_ip_route 203.6.138.0/23 -add china_ip_route 203.6.142.0/24 -add china_ip_route 203.6.150.0/23 -add china_ip_route 203.6.157.0/24 -add china_ip_route 203.6.159.0/24 -add china_ip_route 203.6.224.0/20 -add china_ip_route 203.6.248.0/23 -add china_ip_route 203.7.129.0/24 -add china_ip_route 203.7.138.0/23 -add china_ip_route 203.7.147.0/24 -add china_ip_route 203.7.150.0/23 -add china_ip_route 203.7.158.0/24 -add china_ip_route 203.7.192.0/23 -add china_ip_route 203.7.200.0/24 -add china_ip_route 203.8.0.0/24 -add china_ip_route 203.8.8.0/24 -add china_ip_route 203.8.23.0/24 -add china_ip_route 203.8.70.0/24 -add china_ip_route 203.8.82.0/24 -add china_ip_route 203.8.86.0/23 -add china_ip_route 203.8.91.0/24 -add china_ip_route 203.8.110.0/23 -add china_ip_route 203.8.115.0/24 -add china_ip_route 203.8.166.0/23 -add china_ip_route 203.8.169.0/24 -add china_ip_route 203.8.173.0/24 -add china_ip_route 203.8.184.0/24 -add china_ip_route 203.8.186.0/23 -add china_ip_route 203.8.190.0/23 -add china_ip_route 203.8.192.0/24 -add china_ip_route 203.8.197.0/24 -add china_ip_route 203.8.198.0/23 -add china_ip_route 203.8.203.0/24 -add china_ip_route 203.8.209.0/24 -add china_ip_route 203.8.210.0/23 -add china_ip_route 203.8.212.0/22 -add china_ip_route 203.8.217.0/24 -add china_ip_route 203.8.220.0/24 -add china_ip_route 203.9.32.0/24 -add china_ip_route 203.9.36.0/23 -add china_ip_route 203.9.57.0/24 -add china_ip_route 203.9.63.0/24 -add china_ip_route 203.9.65.0/24 -add china_ip_route 203.9.70.0/23 -add china_ip_route 203.9.72.0/24 -add china_ip_route 203.9.75.0/24 -add china_ip_route 203.9.76.0/23 -add china_ip_route 203.9.96.0/22 -add china_ip_route 203.9.100.0/23 -add china_ip_route 203.9.108.0/24 -add china_ip_route 203.9.158.0/24 -add china_ip_route 203.10.34.0/24 -add china_ip_route 203.10.56.0/24 -add china_ip_route 203.10.74.0/23 -add china_ip_route 203.10.84.0/22 -add china_ip_route 203.10.88.0/24 -add china_ip_route 203.10.95.0/24 -add china_ip_route 203.10.125.0/24 -add china_ip_route 203.11.70.0/24 -add china_ip_route 203.11.76.0/22 -add china_ip_route 203.11.82.0/24 -add china_ip_route 203.11.84.0/22 -add china_ip_route 203.11.100.0/22 -add china_ip_route 203.11.109.0/24 -add china_ip_route 203.11.117.0/24 -add china_ip_route 203.11.122.0/24 -add china_ip_route 203.11.126.0/24 -add china_ip_route 203.11.136.0/22 -add china_ip_route 203.11.141.0/24 -add china_ip_route 203.11.142.0/23 -add china_ip_route 203.11.180.0/22 -add china_ip_route 203.11.208.0/22 -add china_ip_route 203.12.16.0/24 -add china_ip_route 203.12.19.0/24 -add china_ip_route 203.12.24.0/24 -add china_ip_route 203.12.57.0/24 -add china_ip_route 203.12.65.0/24 -add china_ip_route 203.12.66.0/24 -add china_ip_route 203.12.70.0/23 -add china_ip_route 203.12.87.0/24 -add china_ip_route 203.12.100.0/23 -add china_ip_route 203.12.103.0/24 -add china_ip_route 203.12.114.0/24 -add china_ip_route 203.12.118.0/24 -add china_ip_route 203.12.130.0/24 -add china_ip_route 203.12.137.0/24 -add china_ip_route 203.12.196.0/22 -add china_ip_route 203.12.211.0/24 -add china_ip_route 203.12.219.0/24 -add china_ip_route 203.12.226.0/24 -add china_ip_route 203.12.240.0/22 -add china_ip_route 203.13.18.0/24 -add china_ip_route 203.13.24.0/24 -add china_ip_route 203.13.44.0/23 -add china_ip_route 203.13.88.0/23 -add china_ip_route 203.13.92.0/22 -add china_ip_route 203.13.173.0/24 -add china_ip_route 203.13.224.0/23 -add china_ip_route 203.13.227.0/24 -add china_ip_route 203.13.233.0/24 -add china_ip_route 203.14.24.0/22 -add china_ip_route 203.14.33.0/24 -add china_ip_route 203.14.56.0/24 -add china_ip_route 203.14.61.0/24 -add china_ip_route 203.14.62.0/24 -add china_ip_route 203.14.104.0/24 -add china_ip_route 203.14.114.0/23 -add china_ip_route 203.14.118.0/24 -add china_ip_route 203.14.162.0/24 -add china_ip_route 203.14.192.0/24 -add china_ip_route 203.14.194.0/23 -add china_ip_route 203.14.214.0/24 -add china_ip_route 203.14.231.0/24 -add china_ip_route 203.14.246.0/24 -add china_ip_route 203.15.0.0/20 -add china_ip_route 203.15.20.0/23 -add china_ip_route 203.15.22.0/24 -add china_ip_route 203.15.87.0/24 -add china_ip_route 203.15.88.0/23 -add china_ip_route 203.15.105.0/24 -add china_ip_route 203.15.112.0/21 -add china_ip_route 203.15.130.0/23 -add china_ip_route 203.15.149.0/24 -add china_ip_route 203.15.151.0/24 -add china_ip_route 203.15.156.0/22 -add china_ip_route 203.15.174.0/24 -add china_ip_route 203.15.227.0/24 -add china_ip_route 203.15.232.0/21 -add china_ip_route 203.15.240.0/23 -add china_ip_route 203.15.246.0/24 -add china_ip_route 203.16.10.0/24 -add china_ip_route 203.16.12.0/23 -add china_ip_route 203.16.16.0/21 -add china_ip_route 203.16.27.0/24 -add china_ip_route 203.16.38.0/24 -add china_ip_route 203.16.49.0/24 -add china_ip_route 203.16.50.0/23 -add china_ip_route 203.16.58.0/24 -add china_ip_route 203.16.63.0/24 -add china_ip_route 203.16.133.0/24 -add china_ip_route 203.16.161.0/24 -add china_ip_route 203.16.162.0/24 -add china_ip_route 203.16.186.0/23 -add china_ip_route 203.16.228.0/24 -add china_ip_route 203.16.238.0/24 -add china_ip_route 203.16.240.0/24 -add china_ip_route 203.16.245.0/24 -add china_ip_route 203.17.2.0/24 -add china_ip_route 203.17.18.0/24 -add china_ip_route 203.17.28.0/24 -add china_ip_route 203.17.39.0/24 -add china_ip_route 203.17.56.0/24 -add china_ip_route 203.17.74.0/23 -add china_ip_route 203.17.88.0/23 -add china_ip_route 203.17.136.0/24 -add china_ip_route 203.17.164.0/24 -add china_ip_route 203.17.187.0/24 -add china_ip_route 203.17.190.0/23 -add china_ip_route 203.17.231.0/24 -add china_ip_route 203.17.233.0/24 -add china_ip_route 203.17.248.0/24 -add china_ip_route 203.17.249.0/24 -add china_ip_route 203.17.255.0/24 -add china_ip_route 203.18.2.0/23 -add china_ip_route 203.18.4.0/24 -add china_ip_route 203.18.7.0/24 -add china_ip_route 203.18.31.0/24 -add china_ip_route 203.18.37.0/24 -add china_ip_route 203.18.48.0/23 -add china_ip_route 203.18.52.0/24 -add china_ip_route 203.18.72.0/22 -add china_ip_route 203.18.80.0/23 -add china_ip_route 203.18.87.0/24 -add china_ip_route 203.18.100.0/23 -add china_ip_route 203.18.105.0/24 -add china_ip_route 203.18.107.0/24 -add china_ip_route 203.18.110.0/24 -add china_ip_route 203.18.129.0/24 -add china_ip_route 203.18.131.0/24 -add china_ip_route 203.18.132.0/23 -add china_ip_route 203.18.144.0/24 -add china_ip_route 203.18.153.0/24 -add china_ip_route 203.18.199.0/24 -add china_ip_route 203.18.208.0/24 -add china_ip_route 203.18.211.0/24 -add china_ip_route 203.18.215.0/24 -add china_ip_route 203.19.1.0/24 -add china_ip_route 203.19.18.0/24 -add china_ip_route 203.19.24.0/24 -add china_ip_route 203.19.30.0/24 -add china_ip_route 203.19.32.0/21 -add china_ip_route 203.19.41.0/24 -add china_ip_route 203.19.44.0/23 -add china_ip_route 203.19.46.0/24 -add china_ip_route 203.19.58.0/24 -add china_ip_route 203.19.60.0/23 -add china_ip_route 203.19.64.0/24 -add china_ip_route 203.19.68.0/24 -add china_ip_route 203.19.72.0/24 -add china_ip_route 203.19.101.0/24 -add china_ip_route 203.19.111.0/24 -add china_ip_route 203.19.131.0/24 -add china_ip_route 203.19.133.0/24 -add china_ip_route 203.19.144.0/24 -add china_ip_route 203.19.147.0/24 -add china_ip_route 203.19.149.0/24 -add china_ip_route 203.19.156.0/24 -add china_ip_route 203.19.176.0/24 -add china_ip_route 203.19.178.0/23 -add china_ip_route 203.19.208.0/24 -add china_ip_route 203.19.228.0/22 -add china_ip_route 203.19.233.0/24 -add china_ip_route 203.19.242.0/24 -add china_ip_route 203.19.248.0/23 -add china_ip_route 203.19.255.0/24 -add china_ip_route 203.20.17.0/24 -add china_ip_route 203.20.40.0/23 -add china_ip_route 203.20.44.0/24 -add china_ip_route 203.20.48.0/24 -add china_ip_route 203.20.61.0/24 -add china_ip_route 203.20.65.0/24 -add china_ip_route 203.20.84.0/23 -add china_ip_route 203.20.89.0/24 -add china_ip_route 203.20.106.0/23 -add china_ip_route 203.20.115.0/24 -add china_ip_route 203.20.117.0/24 -add china_ip_route 203.20.118.0/23 -add china_ip_route 203.20.122.0/24 -add china_ip_route 203.20.126.0/23 -add china_ip_route 203.20.135.0/24 -add china_ip_route 203.20.136.0/21 -add china_ip_route 203.20.150.0/24 -add china_ip_route 203.20.230.0/24 -add china_ip_route 203.20.232.0/24 -add china_ip_route 203.20.236.0/24 -add china_ip_route 203.21.0.0/23 -add china_ip_route 203.21.2.0/24 -add china_ip_route 203.21.8.0/24 -add china_ip_route 203.21.10.0/24 -add china_ip_route 203.21.18.0/24 -add china_ip_route 203.21.33.0/24 -add china_ip_route 203.21.34.0/24 -add china_ip_route 203.21.41.0/24 -add china_ip_route 203.21.44.0/24 -add china_ip_route 203.21.68.0/24 -add china_ip_route 203.21.82.0/24 -add china_ip_route 203.21.96.0/22 -add china_ip_route 203.21.124.0/24 -add china_ip_route 203.21.136.0/23 -add china_ip_route 203.21.145.0/24 -add china_ip_route 203.21.206.0/24 -add china_ip_route 203.22.24.0/24 -add china_ip_route 203.22.28.0/23 -add china_ip_route 203.22.31.0/24 -add china_ip_route 203.22.68.0/24 -add china_ip_route 203.22.76.0/24 -add china_ip_route 203.22.78.0/24 -add china_ip_route 203.22.84.0/24 -add china_ip_route 203.22.87.0/24 -add china_ip_route 203.22.92.0/22 -add china_ip_route 203.22.99.0/24 -add china_ip_route 203.22.106.0/24 -add china_ip_route 203.22.122.0/23 -add china_ip_route 203.22.131.0/24 -add china_ip_route 203.22.163.0/24 -add china_ip_route 203.22.166.0/24 -add china_ip_route 203.22.170.0/24 -add china_ip_route 203.22.176.0/21 -add china_ip_route 203.22.194.0/24 -add china_ip_route 203.22.242.0/23 -add china_ip_route 203.22.245.0/24 -add china_ip_route 203.22.246.0/24 -add china_ip_route 203.22.252.0/23 -add china_ip_route 203.23.0.0/24 -add china_ip_route 203.23.47.0/24 -add china_ip_route 203.23.61.0/24 -add china_ip_route 203.23.62.0/23 -add china_ip_route 203.23.73.0/24 -add china_ip_route 203.23.85.0/24 -add china_ip_route 203.23.92.0/22 -add china_ip_route 203.23.98.0/24 -add china_ip_route 203.23.107.0/24 -add china_ip_route 203.23.112.0/24 -add china_ip_route 203.23.130.0/24 -add china_ip_route 203.23.140.0/23 -add china_ip_route 203.23.172.0/24 -add china_ip_route 203.23.182.0/24 -add china_ip_route 203.23.186.0/23 -add china_ip_route 203.23.192.0/24 -add china_ip_route 203.23.197.0/24 -add china_ip_route 203.23.198.0/24 -add china_ip_route 203.23.204.0/22 -add china_ip_route 203.23.224.0/24 -add china_ip_route 203.23.226.0/23 -add china_ip_route 203.23.228.0/22 -add china_ip_route 203.23.249.0/24 -add china_ip_route 203.23.251.0/24 -add china_ip_route 203.24.13.0/24 -add china_ip_route 203.24.18.0/24 -add china_ip_route 203.24.27.0/24 -add china_ip_route 203.24.43.0/24 -add china_ip_route 203.24.56.0/24 -add china_ip_route 203.24.58.0/24 -add china_ip_route 203.24.67.0/24 -add china_ip_route 203.24.74.0/24 -add china_ip_route 203.24.79.0/24 -add china_ip_route 203.24.80.0/23 -add china_ip_route 203.24.84.0/23 -add china_ip_route 203.24.86.0/24 -add china_ip_route 203.24.90.0/24 -add china_ip_route 203.24.111.0/24 -add china_ip_route 203.24.112.0/24 -add china_ip_route 203.24.116.0/24 -add china_ip_route 203.24.122.0/23 -add china_ip_route 203.24.145.0/24 -add china_ip_route 203.24.152.0/23 -add china_ip_route 203.24.157.0/24 -add china_ip_route 203.24.161.0/24 -add china_ip_route 203.24.167.0/24 -add china_ip_route 203.24.186.0/23 -add china_ip_route 203.24.199.0/24 -add china_ip_route 203.24.202.0/24 -add china_ip_route 203.24.212.0/23 -add china_ip_route 203.24.217.0/24 -add china_ip_route 203.24.219.0/24 -add china_ip_route 203.24.244.0/24 -add china_ip_route 203.25.19.0/24 -add china_ip_route 203.25.20.0/23 -add china_ip_route 203.25.46.0/24 -add china_ip_route 203.25.48.0/21 -add china_ip_route 203.25.64.0/23 -add china_ip_route 203.25.91.0/24 -add china_ip_route 203.25.99.0/24 -add china_ip_route 203.25.100.0/24 -add china_ip_route 203.25.106.0/24 -add china_ip_route 203.25.131.0/24 -add china_ip_route 203.25.135.0/24 -add china_ip_route 203.25.138.0/24 -add china_ip_route 203.25.147.0/24 -add china_ip_route 203.25.153.0/24 -add china_ip_route 203.25.154.0/23 -add china_ip_route 203.25.164.0/24 -add china_ip_route 203.25.166.0/24 -add china_ip_route 203.25.174.0/23 -add china_ip_route 203.25.180.0/24 -add china_ip_route 203.25.182.0/24 -add china_ip_route 203.25.191.0/24 -add china_ip_route 203.25.199.0/24 -add china_ip_route 203.25.200.0/24 -add china_ip_route 203.25.202.0/23 -add china_ip_route 203.25.208.0/20 -add china_ip_route 203.25.229.0/24 -add china_ip_route 203.25.235.0/24 -add china_ip_route 203.25.236.0/24 -add china_ip_route 203.25.242.0/24 -add china_ip_route 203.26.12.0/24 -add china_ip_route 203.26.34.0/24 -add china_ip_route 203.26.49.0/24 -add china_ip_route 203.26.50.0/24 -add china_ip_route 203.26.55.0/24 -add china_ip_route 203.26.56.0/23 -add china_ip_route 203.26.60.0/24 -add china_ip_route 203.26.65.0/24 -add china_ip_route 203.26.68.0/24 -add china_ip_route 203.26.76.0/24 -add china_ip_route 203.26.80.0/24 -add china_ip_route 203.26.84.0/24 -add china_ip_route 203.26.97.0/24 -add china_ip_route 203.26.102.0/23 -add china_ip_route 203.26.115.0/24 -add china_ip_route 203.26.116.0/24 -add china_ip_route 203.26.129.0/24 -add china_ip_route 203.26.143.0/24 -add china_ip_route 203.26.144.0/24 -add china_ip_route 203.26.148.0/23 -add china_ip_route 203.26.154.0/24 -add china_ip_route 203.26.158.0/23 -add china_ip_route 203.26.170.0/24 -add china_ip_route 203.26.173.0/24 -add china_ip_route 203.26.176.0/24 -add china_ip_route 203.26.185.0/24 -add china_ip_route 203.26.202.0/23 -add china_ip_route 203.26.210.0/24 -add china_ip_route 203.26.214.0/24 -add china_ip_route 203.26.222.0/24 -add china_ip_route 203.26.224.0/24 -add china_ip_route 203.26.228.0/24 -add china_ip_route 203.26.232.0/24 -add china_ip_route 203.27.0.0/24 -add china_ip_route 203.27.10.0/24 -add china_ip_route 203.27.15.0/24 -add china_ip_route 203.27.16.0/24 -add china_ip_route 203.27.20.0/24 -add china_ip_route 203.27.22.0/23 -add china_ip_route 203.27.40.0/24 -add china_ip_route 203.27.45.0/24 -add china_ip_route 203.27.53.0/24 -add china_ip_route 203.27.65.0/24 -add china_ip_route 203.27.66.0/24 -add china_ip_route 203.27.81.0/24 -add china_ip_route 203.27.88.0/24 -add china_ip_route 203.27.102.0/24 -add china_ip_route 203.27.109.0/24 -add china_ip_route 203.27.117.0/24 -add china_ip_route 203.27.121.0/24 -add china_ip_route 203.27.122.0/23 -add china_ip_route 203.27.125.0/24 -add china_ip_route 203.27.200.0/24 -add china_ip_route 203.27.202.0/24 -add china_ip_route 203.27.233.0/24 -add china_ip_route 203.27.241.0/24 -add china_ip_route 203.27.250.0/24 -add china_ip_route 203.28.10.0/24 -add china_ip_route 203.28.12.0/24 -add china_ip_route 203.28.33.0/24 -add china_ip_route 203.28.34.0/23 -add china_ip_route 203.28.43.0/24 -add china_ip_route 203.28.44.0/24 -add china_ip_route 203.28.54.0/24 -add china_ip_route 203.28.56.0/24 -add china_ip_route 203.28.73.0/24 -add china_ip_route 203.28.74.0/24 -add china_ip_route 203.28.76.0/24 -add china_ip_route 203.28.86.0/24 -add china_ip_route 203.28.88.0/24 -add china_ip_route 203.28.112.0/24 -add china_ip_route 203.28.131.0/24 -add china_ip_route 203.28.136.0/24 -add china_ip_route 203.28.140.0/24 -add china_ip_route 203.28.145.0/24 -add china_ip_route 203.28.165.0/24 -add china_ip_route 203.28.169.0/24 -add china_ip_route 203.28.170.0/24 -add china_ip_route 203.28.178.0/23 -add china_ip_route 203.28.185.0/24 -add china_ip_route 203.28.187.0/24 -add china_ip_route 203.28.196.0/24 -add china_ip_route 203.28.226.0/23 -add china_ip_route 203.28.239.0/24 -add china_ip_route 203.29.2.0/24 -add china_ip_route 203.29.8.0/23 -add china_ip_route 203.29.13.0/24 -add china_ip_route 203.29.14.0/24 -add china_ip_route 203.29.28.0/24 -add china_ip_route 203.29.46.0/24 -add china_ip_route 203.29.57.0/24 -add china_ip_route 203.29.61.0/24 -add china_ip_route 203.29.63.0/24 -add china_ip_route 203.29.69.0/24 -add china_ip_route 203.29.73.0/24 -add china_ip_route 203.29.81.0/24 -add china_ip_route 203.29.90.0/24 -add china_ip_route 203.29.95.0/24 -add china_ip_route 203.29.100.0/24 -add china_ip_route 203.29.103.0/24 -add china_ip_route 203.29.112.0/24 -add china_ip_route 203.29.120.0/22 -add china_ip_route 203.29.182.0/23 -add china_ip_route 203.29.187.0/24 -add china_ip_route 203.29.189.0/24 -add china_ip_route 203.29.190.0/24 -add china_ip_route 203.29.205.0/24 -add china_ip_route 203.29.210.0/24 -add china_ip_route 203.29.217.0/24 -add china_ip_route 203.29.227.0/24 -add china_ip_route 203.29.231.0/24 -add china_ip_route 203.29.233.0/24 -add china_ip_route 203.29.234.0/24 -add china_ip_route 203.29.248.0/24 -add china_ip_route 203.29.254.0/23 -add china_ip_route 203.30.16.0/23 -add china_ip_route 203.30.25.0/24 -add china_ip_route 203.30.27.0/24 -add china_ip_route 203.30.29.0/24 -add china_ip_route 203.30.66.0/24 -add china_ip_route 203.30.81.0/24 -add china_ip_route 203.30.87.0/24 -add china_ip_route 203.30.111.0/24 -add china_ip_route 203.30.121.0/24 -add china_ip_route 203.30.123.0/24 -add china_ip_route 203.30.152.0/24 -add china_ip_route 203.30.156.0/24 -add china_ip_route 203.30.162.0/24 -add china_ip_route 203.30.173.0/24 -add china_ip_route 203.30.175.0/24 -add china_ip_route 203.30.187.0/24 -add china_ip_route 203.30.194.0/24 -add china_ip_route 203.30.217.0/24 -add china_ip_route 203.30.220.0/24 -add china_ip_route 203.30.222.0/24 -add china_ip_route 203.30.232.0/23 -add china_ip_route 203.30.235.0/24 -add china_ip_route 203.30.240.0/23 -add china_ip_route 203.30.246.0/24 -add china_ip_route 203.30.250.0/23 -add china_ip_route 203.31.45.0/24 -add china_ip_route 203.31.46.0/24 -add china_ip_route 203.31.49.0/24 -add china_ip_route 203.31.51.0/24 -add china_ip_route 203.31.54.0/23 -add china_ip_route 203.31.69.0/24 -add china_ip_route 203.31.72.0/24 -add china_ip_route 203.31.80.0/24 -add china_ip_route 203.31.85.0/24 -add china_ip_route 203.31.97.0/24 -add china_ip_route 203.31.105.0/24 -add china_ip_route 203.31.106.0/24 -add china_ip_route 203.31.108.0/23 -add china_ip_route 203.31.124.0/24 -add china_ip_route 203.31.162.0/24 -add china_ip_route 203.31.174.0/24 -add china_ip_route 203.31.177.0/24 -add china_ip_route 203.31.181.0/24 -add china_ip_route 203.31.187.0/24 -add china_ip_route 203.31.189.0/24 -add china_ip_route 203.31.204.0/24 -add china_ip_route 203.31.220.0/24 -add china_ip_route 203.31.222.0/23 -add china_ip_route 203.31.225.0/24 -add china_ip_route 203.31.229.0/24 -add china_ip_route 203.31.248.0/23 -add china_ip_route 203.31.253.0/24 -add china_ip_route 203.32.20.0/24 -add china_ip_route 203.32.48.0/23 -add china_ip_route 203.32.56.0/24 -add china_ip_route 203.32.60.0/24 -add china_ip_route 203.32.62.0/24 -add china_ip_route 203.32.68.0/23 -add china_ip_route 203.32.76.0/24 -add china_ip_route 203.32.81.0/24 -add china_ip_route 203.32.84.0/23 -add china_ip_route 203.32.95.0/24 -add china_ip_route 203.32.102.0/24 -add china_ip_route 203.32.105.0/24 -add china_ip_route 203.32.130.0/24 -add china_ip_route 203.32.133.0/24 -add china_ip_route 203.32.140.0/24 -add china_ip_route 203.32.152.0/24 -add china_ip_route 203.32.186.0/23 -add china_ip_route 203.32.192.0/24 -add china_ip_route 203.32.196.0/24 -add china_ip_route 203.32.203.0/24 -add china_ip_route 203.32.204.0/23 -add china_ip_route 203.32.212.0/24 -add china_ip_route 203.33.4.0/24 -add china_ip_route 203.33.7.0/24 -add china_ip_route 203.33.8.0/21 -add china_ip_route 203.33.21.0/24 -add china_ip_route 203.33.26.0/24 -add china_ip_route 203.33.32.0/24 -add china_ip_route 203.33.63.0/24 -add china_ip_route 203.33.64.0/24 -add china_ip_route 203.33.67.0/24 -add china_ip_route 203.33.68.0/24 -add china_ip_route 203.33.73.0/24 -add china_ip_route 203.33.79.0/24 -add china_ip_route 203.33.100.0/24 -add china_ip_route 203.33.122.0/24 -add china_ip_route 203.33.129.0/24 -add china_ip_route 203.33.131.0/24 -add china_ip_route 203.33.145.0/24 -add china_ip_route 203.33.156.0/24 -add china_ip_route 203.33.158.0/23 -add china_ip_route 203.33.174.0/24 -add china_ip_route 203.33.185.0/24 -add china_ip_route 203.33.200.0/24 -add china_ip_route 203.33.202.0/23 -add china_ip_route 203.33.204.0/24 -add china_ip_route 203.33.206.0/23 -add china_ip_route 203.33.214.0/23 -add china_ip_route 203.33.224.0/23 -add china_ip_route 203.33.226.0/24 -add china_ip_route 203.33.233.0/24 -add china_ip_route 203.33.243.0/24 -add china_ip_route 203.33.250.0/24 -add china_ip_route 203.34.4.0/24 -add china_ip_route 203.34.21.0/24 -add china_ip_route 203.34.27.0/24 -add china_ip_route 203.34.39.0/24 -add china_ip_route 203.34.48.0/23 -add china_ip_route 203.34.54.0/24 -add china_ip_route 203.34.56.0/23 -add china_ip_route 203.34.67.0/24 -add china_ip_route 203.34.69.0/24 -add china_ip_route 203.34.76.0/24 -add china_ip_route 203.34.92.0/24 -add china_ip_route 203.34.106.0/24 -add china_ip_route 203.34.113.0/24 -add china_ip_route 203.34.147.0/24 -add china_ip_route 203.34.150.0/24 -add china_ip_route 203.34.152.0/23 -add china_ip_route 203.34.161.0/24 -add china_ip_route 203.34.162.0/24 -add china_ip_route 203.34.187.0/24 -add china_ip_route 203.34.192.0/21 -add china_ip_route 203.34.204.0/22 -add china_ip_route 203.34.232.0/24 -add china_ip_route 203.34.240.0/24 -add china_ip_route 203.34.242.0/24 -add china_ip_route 203.34.245.0/24 -add china_ip_route 203.34.251.0/24 -add china_ip_route 203.55.2.0/23 -add china_ip_route 203.55.4.0/24 -add china_ip_route 203.55.10.0/24 -add china_ip_route 203.55.13.0/24 -add china_ip_route 203.55.22.0/24 -add china_ip_route 203.55.30.0/24 -add china_ip_route 203.55.93.0/24 -add china_ip_route 203.55.101.0/24 -add china_ip_route 203.55.109.0/24 -add china_ip_route 203.55.110.0/24 -add china_ip_route 203.55.116.0/23 -add china_ip_route 203.55.119.0/24 -add china_ip_route 203.55.128.0/23 -add china_ip_route 203.55.146.0/23 -add china_ip_route 203.55.192.0/24 -add china_ip_route 203.55.196.0/24 -add china_ip_route 203.55.218.0/23 -add china_ip_route 203.55.221.0/24 -add china_ip_route 203.55.224.0/24 -add china_ip_route 203.56.1.0/24 -add china_ip_route 203.56.4.0/24 -add china_ip_route 203.56.12.0/24 -add china_ip_route 203.56.24.0/24 -add china_ip_route 203.56.38.0/24 -add china_ip_route 203.56.40.0/24 -add china_ip_route 203.56.46.0/24 -add china_ip_route 203.56.48.0/21 -add china_ip_route 203.56.68.0/23 -add china_ip_route 203.56.82.0/23 -add china_ip_route 203.56.84.0/23 -add china_ip_route 203.56.95.0/24 -add china_ip_route 203.56.110.0/24 -add china_ip_route 203.56.121.0/24 -add china_ip_route 203.56.161.0/24 -add china_ip_route 203.56.169.0/24 -add china_ip_route 203.56.172.0/23 -add china_ip_route 203.56.175.0/24 -add china_ip_route 203.56.183.0/24 -add china_ip_route 203.56.185.0/24 -add china_ip_route 203.56.187.0/24 -add china_ip_route 203.56.192.0/24 -add china_ip_route 203.56.198.0/24 -add china_ip_route 203.56.201.0/24 -add china_ip_route 203.56.208.0/23 -add china_ip_route 203.56.210.0/24 -add china_ip_route 203.56.214.0/24 -add china_ip_route 203.56.216.0/24 -add china_ip_route 203.56.227.0/24 -add china_ip_route 203.56.228.0/24 -add china_ip_route 203.56.231.0/24 -add china_ip_route 203.56.232.0/24 -add china_ip_route 203.56.240.0/24 -add china_ip_route 203.56.252.0/24 -add china_ip_route 203.56.254.0/24 -add china_ip_route 203.57.5.0/24 -add china_ip_route 203.57.6.0/24 -add china_ip_route 203.57.12.0/23 -add china_ip_route 203.57.28.0/24 -add china_ip_route 203.57.39.0/24 -add china_ip_route 203.57.46.0/24 -add china_ip_route 203.57.58.0/24 -add china_ip_route 203.57.61.0/24 -add china_ip_route 203.57.66.0/24 -add china_ip_route 203.57.69.0/24 -add china_ip_route 203.57.70.0/23 -add china_ip_route 203.57.73.0/24 -add china_ip_route 203.57.90.0/24 -add china_ip_route 203.57.101.0/24 -add china_ip_route 203.57.109.0/24 -add china_ip_route 203.57.123.0/24 -add china_ip_route 203.57.157.0/24 -add china_ip_route 203.57.200.0/24 -add china_ip_route 203.57.202.0/24 -add china_ip_route 203.57.206.0/24 -add china_ip_route 203.57.222.0/24 -add china_ip_route 203.57.224.0/20 -add china_ip_route 203.57.246.0/23 -add china_ip_route 203.57.249.0/24 -add china_ip_route 203.57.253.0/24 -add china_ip_route 203.57.254.0/23 -add china_ip_route 203.62.2.0/24 -add china_ip_route 203.62.131.0/24 -add china_ip_route 203.62.139.0/24 -add china_ip_route 203.62.161.0/24 -add china_ip_route 203.62.197.0/24 -add china_ip_route 203.62.228.0/22 -add china_ip_route 203.62.234.0/24 -add china_ip_route 203.62.246.0/24 -add china_ip_route 203.76.160.0/22 -add china_ip_route 203.76.168.0/22 -add china_ip_route 203.76.208.0/22 -add china_ip_route 203.76.212.0/22 -add china_ip_route 203.76.216.0/22 -add china_ip_route 203.76.240.0/22 -add china_ip_route 203.76.244.0/22 -add china_ip_route 203.77.180.0/22 -add china_ip_route 203.78.48.0/20 -add china_ip_route 203.78.156.0/22 -add china_ip_route 203.79.0.0/20 -add china_ip_route 203.79.32.0/20 -add china_ip_route 203.80.4.0/23 -add china_ip_route 203.80.32.0/20 -add china_ip_route 203.80.57.0/24 -add china_ip_route 203.80.129.0/24 -add china_ip_route 203.80.132.0/22 -add china_ip_route 203.80.136.0/21 -add china_ip_route 203.80.144.0/20 -add china_ip_route 203.81.0.0/21 -add china_ip_route 203.81.16.0/20 -add china_ip_route 203.81.244.0/22 -add china_ip_route 203.82.0.0/23 -add china_ip_route 203.82.16.0/21 -add china_ip_route 203.82.112.0/22 -add china_ip_route 203.82.116.0/22 -add china_ip_route 203.82.120.0/22 -add china_ip_route 203.82.124.0/22 -add china_ip_route 203.82.224.0/22 -add china_ip_route 203.82.228.0/22 -add china_ip_route 203.82.232.0/22 -add china_ip_route 203.82.236.0/22 -add china_ip_route 203.83.0.0/22 -add china_ip_route 203.83.8.0/22 -add china_ip_route 203.83.12.0/22 -add china_ip_route 203.83.56.0/21 -add china_ip_route 203.83.224.0/20 -add china_ip_route 203.86.0.0/19 -add china_ip_route 203.86.32.0/19 -add china_ip_route 203.86.64.0/20 -add china_ip_route 203.86.80.0/20 -add china_ip_route 203.86.96.0/19 -add china_ip_route 203.86.250.0/24 -add china_ip_route 203.86.254.0/23 -add china_ip_route 203.88.32.0/19 -add china_ip_route 203.88.100.0/22 -add china_ip_route 203.88.192.0/19 -add china_ip_route 203.89.0.0/22 -add china_ip_route 203.89.8.0/21 -add china_ip_route 203.89.100.0/22 -add china_ip_route 203.89.133.0/24 -add china_ip_route 203.89.136.0/22 -add china_ip_route 203.89.144.0/24 -add china_ip_route 203.90.0.0/22 -add china_ip_route 203.90.8.0/22 -add china_ip_route 203.90.12.0/22 -add china_ip_route 203.90.128.0/19 -add china_ip_route 203.90.160.0/19 -add china_ip_route 203.90.192.0/19 -add china_ip_route 203.91.32.0/19 -add china_ip_route 203.91.96.0/20 -add china_ip_route 203.91.120.0/21 -add china_ip_route 203.92.0.0/22 -add china_ip_route 203.92.6.0/24 -add china_ip_route 203.92.160.0/19 -add china_ip_route 203.93.0.0/22 -add china_ip_route 203.93.4.0/22 -add china_ip_route 203.93.8.0/24 -add china_ip_route 203.93.9.0/24 -add china_ip_route 203.93.10.0/23 -add china_ip_route 203.93.12.0/22 -add china_ip_route 203.93.16.0/20 -add china_ip_route 203.93.32.0/19 -add china_ip_route 203.93.64.0/18 -add china_ip_route 203.93.128.0/21 -add china_ip_route 203.93.136.0/22 -add china_ip_route 203.93.140.0/24 -add china_ip_route 203.93.141.0/24 -add china_ip_route 203.93.142.0/23 -add china_ip_route 203.93.144.0/20 -add china_ip_route 203.93.160.0/19 -add china_ip_route 203.93.192.0/18 -add china_ip_route 203.94.0.0/22 -add china_ip_route 203.94.4.0/22 -add china_ip_route 203.94.8.0/21 -add china_ip_route 203.94.16.0/20 -add china_ip_route 203.95.0.0/21 -add china_ip_route 203.95.96.0/20 -add china_ip_route 203.95.112.0/20 -add china_ip_route 203.95.128.0/18 -add china_ip_route 203.95.200.0/22 -add china_ip_route 203.95.204.0/22 -add china_ip_route 203.95.208.0/22 -add china_ip_route 203.95.224.0/19 -add china_ip_route 203.99.8.0/21 -add china_ip_route 203.99.16.0/20 -add china_ip_route 203.99.80.0/20 -add china_ip_route 203.100.32.0/20 -add china_ip_route 203.100.48.0/21 -add china_ip_route 203.100.58.0/24 -add china_ip_route 203.100.60.0/24 -add china_ip_route 203.100.63.0/24 -add china_ip_route 203.100.80.0/20 -add china_ip_route 203.100.96.0/19 -add china_ip_route 203.100.192.0/20 -add china_ip_route 203.104.32.0/20 -add china_ip_route 203.105.96.0/19 -add china_ip_route 203.105.128.0/19 -add china_ip_route 203.107.0.0/17 -add china_ip_route 203.110.160.0/19 -add china_ip_route 203.110.208.0/20 -add china_ip_route 203.110.232.0/23 -add china_ip_route 203.110.234.0/24 -add china_ip_route 203.114.80.0/22 -add china_ip_route 203.114.84.0/22 -add china_ip_route 203.114.88.0/22 -add china_ip_route 203.114.92.0/22 -add china_ip_route 203.114.244.0/22 -add china_ip_route 203.118.192.0/19 -add china_ip_route 203.118.241.0/24 -add china_ip_route 203.118.248.0/22 -add china_ip_route 203.119.24.0/21 -add china_ip_route 203.119.32.0/22 -add china_ip_route 203.119.80.0/22 -add china_ip_route 203.119.85.0/24 -add china_ip_route 203.119.113.0/24 -add china_ip_route 203.119.114.0/23 -add china_ip_route 203.119.116.0/22 -add china_ip_route 203.119.120.0/21 -add china_ip_route 203.119.128.0/17 -add china_ip_route 203.123.58.0/24 -add china_ip_route 203.128.32.0/19 -add china_ip_route 203.128.96.0/19 -add china_ip_route 203.128.224.0/21 -add china_ip_route 203.129.8.0/21 -add china_ip_route 203.130.32.0/19 -add china_ip_route 203.132.32.0/19 -add china_ip_route 203.134.240.0/21 -add china_ip_route 203.135.96.0/20 -add china_ip_route 203.135.112.0/20 -add china_ip_route 203.135.160.0/20 -add china_ip_route 203.142.219.0/24 -add china_ip_route 203.142.224.0/19 -add china_ip_route 203.144.96.0/19 -add china_ip_route 203.145.0.0/19 -add china_ip_route 203.148.0.0/18 -add china_ip_route 203.148.64.0/20 -add china_ip_route 203.148.80.0/22 -add china_ip_route 203.148.86.0/23 -add china_ip_route 203.149.92.0/22 -add china_ip_route 203.152.64.0/19 -add china_ip_route 203.152.128.0/19 -add china_ip_route 203.153.0.0/22 -add china_ip_route 203.156.192.0/18 -add china_ip_route 203.158.16.0/21 -add china_ip_route 203.160.52.0/22 -add china_ip_route 203.160.104.0/21 -add china_ip_route 203.160.129.0/24 -add china_ip_route 203.160.192.0/19 -add china_ip_route 203.161.0.0/22 -add china_ip_route 203.161.180.0/24 -add china_ip_route 203.161.183.0/24 -add china_ip_route 203.161.192.0/19 -add china_ip_route 203.166.160.0/19 -add china_ip_route 203.167.28.0/22 -add china_ip_route 203.168.0.0/19 -add china_ip_route 203.170.58.0/23 -add china_ip_route 203.171.0.0/22 -add china_ip_route 203.171.208.0/24 -add china_ip_route 203.171.224.0/20 -add china_ip_route 203.174.4.0/24 -add china_ip_route 203.174.6.0/24 -add china_ip_route 203.174.7.0/24 -add china_ip_route 203.174.96.0/19 -add china_ip_route 203.175.128.0/19 -add china_ip_route 203.175.192.0/18 -add china_ip_route 203.176.0.0/18 -add china_ip_route 203.176.64.0/19 -add china_ip_route 203.176.168.0/21 -add china_ip_route 203.184.80.0/20 -add china_ip_route 203.185.189.0/24 -add china_ip_route 203.187.160.0/19 -add china_ip_route 203.189.0.0/23 -add china_ip_route 203.189.6.0/23 -add china_ip_route 203.189.112.0/22 -add china_ip_route 203.189.192.0/19 -add china_ip_route 203.189.232.0/22 -add china_ip_route 203.189.240.0/22 -add china_ip_route 203.190.96.0/20 -add china_ip_route 203.190.249.0/24 -add china_ip_route 203.191.0.0/23 -add china_ip_route 203.191.2.0/24 -add china_ip_route 203.191.5.0/24 -add china_ip_route 203.191.7.0/24 -add china_ip_route 203.191.16.0/20 -add china_ip_route 203.191.64.0/18 -add china_ip_route 203.191.133.0/24 -add china_ip_route 203.191.144.0/21 -add china_ip_route 203.191.152.0/21 -add china_ip_route 203.192.0.0/19 -add china_ip_route 203.193.224.0/19 -add china_ip_route 203.194.120.0/21 -add china_ip_route 203.195.64.0/19 -add china_ip_route 203.195.112.0/21 -add china_ip_route 203.195.128.0/17 -add china_ip_route 203.196.0.0/21 -add china_ip_route 203.196.8.0/21 -add china_ip_route 203.196.28.0/22 -add china_ip_route 203.201.181.0/24 -add china_ip_route 203.201.182.0/24 -add china_ip_route 203.202.236.0/22 -add china_ip_route 203.205.64.0/19 -add china_ip_route 203.205.128.0/17 -add china_ip_route 203.207.64.0/20 -add china_ip_route 203.207.80.0/21 -add china_ip_route 203.207.88.0/22 -add china_ip_route 203.207.92.0/22 -add china_ip_route 203.207.96.0/20 -add china_ip_route 203.207.112.0/20 -add china_ip_route 203.207.128.0/18 -add china_ip_route 203.207.192.0/21 -add china_ip_route 203.207.200.0/21 -add china_ip_route 203.207.208.0/20 -add china_ip_route 203.207.224.0/19 -add china_ip_route 203.208.0.0/20 -add china_ip_route 203.208.16.0/22 -add china_ip_route 203.208.32.0/19 -add china_ip_route 203.209.224.0/19 -add china_ip_route 203.212.0.0/20 -add china_ip_route 203.212.80.0/20 -add china_ip_route 203.215.232.0/21 -add china_ip_route 203.217.164.0/22 -add china_ip_route 203.223.0.0/20 -add china_ip_route 203.223.16.0/21 -add china_ip_route 204.52.191.0/24 -add china_ip_route 210.2.0.0/20 -add china_ip_route 210.2.16.0/20 -add china_ip_route 210.5.0.0/19 -add china_ip_route 210.5.56.0/21 -add china_ip_route 210.5.128.0/20 -add china_ip_route 210.5.144.0/20 -add china_ip_route 210.7.56.0/22 -add china_ip_route 210.7.60.0/22 -add china_ip_route 210.12.0.0/18 -add china_ip_route 210.12.64.0/18 -add china_ip_route 210.12.128.0/18 -add china_ip_route 210.12.192.0/18 -add china_ip_route 210.13.0.0/18 -add china_ip_route 210.13.64.0/18 -add china_ip_route 210.13.128.0/17 -add china_ip_route 210.14.64.0/19 -add china_ip_route 210.14.112.0/20 -add china_ip_route 210.14.128.0/19 -add china_ip_route 210.14.160.0/19 -add china_ip_route 210.14.192.0/19 -add china_ip_route 210.14.224.0/19 -add china_ip_route 210.15.0.0/19 -add china_ip_route 210.15.32.0/19 -add china_ip_route 210.15.64.0/19 -add china_ip_route 210.15.96.0/19 -add china_ip_route 210.15.128.0/18 -add china_ip_route 210.16.104.0/22 -add china_ip_route 210.16.128.0/18 -add china_ip_route 210.21.0.0/17 -add china_ip_route 210.21.128.0/17 -add china_ip_route 210.22.0.0/16 -add china_ip_route 210.23.32.0/19 -add china_ip_route 210.25.0.0/16 -add china_ip_route 210.26.0.0/15 -add china_ip_route 210.28.0.0/14 -add china_ip_route 210.32.0.0/14 -add china_ip_route 210.36.0.0/14 -add china_ip_route 210.40.0.0/13 -add china_ip_route 210.51.0.0/16 -add china_ip_route 210.52.0.0/18 -add china_ip_route 210.52.64.0/18 -add china_ip_route 210.52.128.0/17 -add china_ip_route 210.53.0.0/17 -add china_ip_route 210.53.128.0/17 -add china_ip_route 210.56.192.0/19 -add china_ip_route 210.72.0.0/17 -add china_ip_route 210.72.128.0/19 -add china_ip_route 210.72.160.0/19 -add china_ip_route 210.72.192.0/18 -add china_ip_route 210.73.0.0/19 -add china_ip_route 210.73.32.0/19 -add china_ip_route 210.73.64.0/18 -add china_ip_route 210.73.128.0/17 -add china_ip_route 210.74.0.0/19 -add china_ip_route 210.74.32.0/19 -add china_ip_route 210.74.64.0/19 -add china_ip_route 210.74.96.0/19 -add china_ip_route 210.74.128.0/19 -add china_ip_route 210.74.160.0/19 -add china_ip_route 210.74.192.0/18 -add china_ip_route 210.75.0.0/16 -add china_ip_route 210.76.0.0/19 -add china_ip_route 210.76.32.0/19 -add china_ip_route 210.76.64.0/18 -add china_ip_route 210.76.128.0/17 -add china_ip_route 210.77.0.0/16 -add china_ip_route 210.78.0.0/19 -add china_ip_route 210.78.32.0/19 -add china_ip_route 210.78.64.0/18 -add china_ip_route 210.78.128.0/19 -add china_ip_route 210.78.160.0/19 -add china_ip_route 210.78.192.0/18 -add china_ip_route 210.79.64.0/18 -add china_ip_route 210.79.224.0/19 -add china_ip_route 210.82.0.0/15 -add china_ip_route 210.87.128.0/20 -add china_ip_route 210.87.144.0/20 -add china_ip_route 210.87.160.0/19 -add china_ip_route 210.185.192.0/18 -add china_ip_route 210.192.96.0/19 -add china_ip_route 211.64.0.0/14 -add china_ip_route 211.68.0.0/15 -add china_ip_route 211.70.0.0/15 -add china_ip_route 211.80.0.0/16 -add china_ip_route 211.81.0.0/16 -add china_ip_route 211.82.0.0/16 -add china_ip_route 211.83.0.0/16 -add china_ip_route 211.84.0.0/15 -add china_ip_route 211.86.0.0/15 -add china_ip_route 211.88.0.0/16 -add china_ip_route 211.89.0.0/16 -add china_ip_route 211.90.0.0/15 -add china_ip_route 211.92.0.0/15 -add china_ip_route 211.94.0.0/15 -add china_ip_route 211.96.0.0/15 -add china_ip_route 211.98.0.0/16 -add china_ip_route 211.99.0.0/18 -add china_ip_route 211.99.64.0/19 -add china_ip_route 211.99.96.0/19 -add china_ip_route 211.99.128.0/17 -add china_ip_route 211.100.0.0/16 -add china_ip_route 211.101.0.0/18 -add china_ip_route 211.101.64.0/18 -add china_ip_route 211.101.128.0/17 -add china_ip_route 211.102.0.0/16 -add china_ip_route 211.103.0.0/17 -add china_ip_route 211.103.128.0/17 -add china_ip_route 211.136.0.0/14 -add china_ip_route 211.140.0.0/15 -add china_ip_route 211.142.0.0/17 -add china_ip_route 211.142.128.0/17 -add china_ip_route 211.143.0.0/16 -add china_ip_route 211.144.0.0/15 -add china_ip_route 211.146.0.0/16 -add china_ip_route 211.147.0.0/16 -add china_ip_route 211.148.0.0/14 -add china_ip_route 211.152.0.0/15 -add china_ip_route 211.154.0.0/16 -add china_ip_route 211.155.0.0/18 -add china_ip_route 211.155.64.0/19 -add china_ip_route 211.155.96.0/19 -add china_ip_route 211.155.128.0/17 -add china_ip_route 211.156.0.0/14 -add china_ip_route 211.160.0.0/14 -add china_ip_route 211.164.0.0/14 -add china_ip_route 212.64.0.0/17 -add china_ip_route 212.129.128.0/17 -add china_ip_route 218.0.0.0/16 -add china_ip_route 218.1.0.0/16 -add china_ip_route 218.2.0.0/15 -add china_ip_route 218.4.0.0/15 -add china_ip_route 218.6.0.0/16 -add china_ip_route 218.7.0.0/16 -add china_ip_route 218.8.0.0/15 -add china_ip_route 218.10.0.0/16 -add china_ip_route 218.11.0.0/16 -add china_ip_route 218.12.0.0/16 -add china_ip_route 218.13.0.0/16 -add china_ip_route 218.14.0.0/15 -add china_ip_route 218.16.0.0/14 -add china_ip_route 218.20.0.0/16 -add china_ip_route 218.21.0.0/17 -add china_ip_route 218.21.128.0/17 -add china_ip_route 218.22.0.0/15 -add china_ip_route 218.24.0.0/15 -add china_ip_route 218.26.0.0/16 -add china_ip_route 218.27.0.0/16 -add china_ip_route 218.28.0.0/15 -add china_ip_route 218.30.0.0/15 -add china_ip_route 218.56.0.0/14 -add china_ip_route 218.60.0.0/15 -add china_ip_route 218.62.0.0/17 -add china_ip_route 218.62.128.0/17 -add china_ip_route 218.63.0.0/16 -add china_ip_route 218.64.0.0/15 -add china_ip_route 218.66.0.0/16 -add china_ip_route 218.67.0.0/17 -add china_ip_route 218.67.128.0/17 -add china_ip_route 218.68.0.0/15 -add china_ip_route 218.70.0.0/15 -add china_ip_route 218.72.0.0/14 -add china_ip_route 218.76.0.0/15 -add china_ip_route 218.78.0.0/15 -add china_ip_route 218.80.0.0/14 -add china_ip_route 218.84.0.0/14 -add china_ip_route 218.88.0.0/13 -add china_ip_route 218.96.0.0/15 -add china_ip_route 218.98.0.0/17 -add china_ip_route 218.98.128.0/18 -add china_ip_route 218.98.192.0/19 -add china_ip_route 218.98.224.0/19 -add china_ip_route 218.99.0.0/16 -add china_ip_route 218.100.88.0/21 -add china_ip_route 218.100.96.0/19 -add china_ip_route 218.100.128.0/17 -add china_ip_route 218.104.0.0/17 -add china_ip_route 218.104.128.0/19 -add china_ip_route 218.104.160.0/19 -add china_ip_route 218.104.192.0/21 -add china_ip_route 218.104.200.0/21 -add china_ip_route 218.104.208.0/20 -add china_ip_route 218.104.224.0/19 -add china_ip_route 218.105.0.0/16 -add china_ip_route 218.106.0.0/15 -add china_ip_route 218.108.0.0/16 -add china_ip_route 218.109.0.0/16 -add china_ip_route 218.185.192.0/19 -add china_ip_route 218.185.240.0/21 -add china_ip_route 218.192.0.0/16 -add china_ip_route 218.193.0.0/16 -add china_ip_route 218.194.0.0/16 -add china_ip_route 218.195.0.0/16 -add china_ip_route 218.196.0.0/14 -add china_ip_route 218.200.0.0/14 -add china_ip_route 218.204.0.0/15 -add china_ip_route 218.206.0.0/15 -add china_ip_route 218.240.0.0/14 -add china_ip_route 218.244.0.0/15 -add china_ip_route 218.246.0.0/15 -add china_ip_route 218.249.0.0/16 -add china_ip_route 219.72.0.0/16 -add china_ip_route 219.82.0.0/16 -add china_ip_route 219.83.128.0/17 -add china_ip_route 219.90.68.0/22 -add china_ip_route 219.90.72.0/22 -add china_ip_route 219.90.76.0/22 -add china_ip_route 219.128.0.0/12 -add china_ip_route 219.144.0.0/14 -add china_ip_route 219.148.0.0/16 -add china_ip_route 219.149.0.0/17 -add china_ip_route 219.149.128.0/18 -add china_ip_route 219.149.192.0/18 -add china_ip_route 219.150.0.0/19 -add china_ip_route 219.150.32.0/19 -add china_ip_route 219.150.64.0/19 -add china_ip_route 219.150.96.0/20 -add china_ip_route 219.150.112.0/20 -add china_ip_route 219.150.128.0/17 -add china_ip_route 219.151.0.0/19 -add china_ip_route 219.151.32.0/19 -add china_ip_route 219.151.64.0/18 -add china_ip_route 219.151.128.0/17 -add china_ip_route 219.152.0.0/15 -add china_ip_route 219.154.0.0/15 -add china_ip_route 219.156.0.0/15 -add china_ip_route 219.158.0.0/17 -add china_ip_route 219.158.128.0/17 -add china_ip_route 219.159.0.0/18 -add china_ip_route 219.159.64.0/18 -add china_ip_route 219.159.128.0/17 -add china_ip_route 219.216.0.0/15 -add china_ip_route 219.218.0.0/15 -add china_ip_route 219.220.0.0/16 -add china_ip_route 219.221.0.0/16 -add china_ip_route 219.222.0.0/15 -add china_ip_route 219.224.0.0/15 -add china_ip_route 219.226.0.0/16 -add china_ip_route 219.227.0.0/16 -add china_ip_route 219.228.0.0/15 -add china_ip_route 219.230.0.0/15 -add china_ip_route 219.232.0.0/14 -add china_ip_route 219.236.0.0/15 -add china_ip_route 219.238.0.0/15 -add china_ip_route 219.242.0.0/15 -add china_ip_route 219.244.0.0/14 -add china_ip_route 220.101.192.0/18 -add china_ip_route 220.112.0.0/14 -add china_ip_route 220.152.128.0/17 -add china_ip_route 220.154.0.0/15 -add china_ip_route 220.158.240.0/22 -add china_ip_route 220.160.0.0/11 -add china_ip_route 220.192.0.0/15 -add china_ip_route 220.194.0.0/15 -add china_ip_route 220.196.0.0/14 -add china_ip_route 220.200.0.0/13 -add china_ip_route 220.231.0.0/18 -add china_ip_route 220.231.128.0/17 -add china_ip_route 220.232.64.0/18 -add china_ip_route 220.234.0.0/16 -add china_ip_route 220.242.0.0/15 -add china_ip_route 220.247.136.0/21 -add china_ip_route 220.248.0.0/14 -add china_ip_route 220.252.0.0/16 -add china_ip_route 221.0.0.0/15 -add china_ip_route 221.2.0.0/16 -add china_ip_route 221.3.0.0/17 -add china_ip_route 221.3.128.0/17 -add china_ip_route 221.4.0.0/16 -add china_ip_route 221.5.0.0/17 -add china_ip_route 221.5.128.0/17 -add china_ip_route 221.6.0.0/16 -add china_ip_route 221.7.0.0/19 -add china_ip_route 221.7.32.0/19 -add china_ip_route 221.7.64.0/19 -add china_ip_route 221.7.96.0/19 -add china_ip_route 221.7.128.0/17 -add china_ip_route 221.8.0.0/15 -add china_ip_route 221.10.0.0/16 -add china_ip_route 221.11.0.0/17 -add china_ip_route 221.11.128.0/18 -add china_ip_route 221.11.192.0/19 -add china_ip_route 221.11.224.0/19 -add china_ip_route 221.12.0.0/17 -add china_ip_route 221.12.128.0/18 -add china_ip_route 221.13.0.0/18 -add china_ip_route 221.13.64.0/19 -add china_ip_route 221.13.96.0/19 -add china_ip_route 221.13.128.0/17 -add china_ip_route 221.14.0.0/15 -add china_ip_route 221.122.0.0/15 -add china_ip_route 221.128.128.0/17 -add china_ip_route 221.129.0.0/16 -add china_ip_route 221.130.0.0/15 -add china_ip_route 221.133.224.0/19 -add china_ip_route 221.136.0.0/16 -add china_ip_route 221.137.0.0/16 -add china_ip_route 221.172.0.0/14 -add china_ip_route 221.176.0.0/13 -add china_ip_route 221.192.0.0/15 -add china_ip_route 221.194.0.0/16 -add china_ip_route 221.195.0.0/16 -add china_ip_route 221.196.0.0/15 -add china_ip_route 221.198.0.0/16 -add china_ip_route 221.199.0.0/19 -add china_ip_route 221.199.32.0/20 -add china_ip_route 221.199.48.0/20 -add china_ip_route 221.199.64.0/18 -add china_ip_route 221.199.128.0/18 -add china_ip_route 221.199.192.0/20 -add china_ip_route 221.199.224.0/19 -add china_ip_route 221.200.0.0/14 -add china_ip_route 221.204.0.0/15 -add china_ip_route 221.206.0.0/16 -add china_ip_route 221.207.0.0/18 -add china_ip_route 221.207.64.0/18 -add china_ip_route 221.207.128.0/17 -add china_ip_route 221.208.0.0/14 -add china_ip_route 221.212.0.0/16 -add china_ip_route 221.213.0.0/16 -add china_ip_route 221.214.0.0/15 -add china_ip_route 221.216.0.0/13 -add china_ip_route 221.224.0.0/13 -add china_ip_route 221.232.0.0/14 -add china_ip_route 221.236.0.0/15 -add china_ip_route 221.238.0.0/16 -add china_ip_route 221.239.0.0/17 -add china_ip_route 221.239.128.0/17 -add china_ip_route 222.16.0.0/15 -add china_ip_route 222.18.0.0/15 -add china_ip_route 222.20.0.0/15 -add china_ip_route 222.22.0.0/16 -add china_ip_route 222.23.0.0/16 -add china_ip_route 222.24.0.0/15 -add china_ip_route 222.26.0.0/15 -add china_ip_route 222.28.0.0/14 -add china_ip_route 222.32.0.0/11 -add china_ip_route 222.64.0.0/13 -add china_ip_route 222.72.0.0/15 -add china_ip_route 222.74.0.0/16 -add china_ip_route 222.75.0.0/16 -add china_ip_route 222.76.0.0/14 -add china_ip_route 222.80.0.0/15 -add china_ip_route 222.82.0.0/16 -add china_ip_route 222.83.0.0/17 -add china_ip_route 222.83.128.0/17 -add china_ip_route 222.84.0.0/16 -add china_ip_route 222.85.0.0/17 -add china_ip_route 222.85.128.0/17 -add china_ip_route 222.86.0.0/15 -add china_ip_route 222.88.0.0/15 -add china_ip_route 222.90.0.0/15 -add china_ip_route 222.92.0.0/14 -add china_ip_route 222.125.0.0/16 -add china_ip_route 222.126.128.0/17 -add china_ip_route 222.128.0.0/14 -add china_ip_route 222.132.0.0/14 -add china_ip_route 222.136.0.0/13 -add china_ip_route 222.160.0.0/15 -add china_ip_route 222.162.0.0/16 -add china_ip_route 222.163.0.0/19 -add china_ip_route 222.163.32.0/19 -add china_ip_route 222.163.64.0/18 -add china_ip_route 222.163.128.0/17 -add china_ip_route 222.168.0.0/15 -add china_ip_route 222.170.0.0/15 -add china_ip_route 222.172.0.0/17 -add china_ip_route 222.172.128.0/17 -add china_ip_route 222.173.0.0/16 -add china_ip_route 222.174.0.0/15 -add china_ip_route 222.176.0.0/13 -add china_ip_route 222.184.0.0/13 -add china_ip_route 222.192.0.0/14 -add china_ip_route 222.196.0.0/15 -add china_ip_route 222.198.0.0/16 -add china_ip_route 222.199.0.0/16 -add china_ip_route 222.200.0.0/14 -add china_ip_route 222.204.0.0/15 -add china_ip_route 222.206.0.0/15 -add china_ip_route 222.208.0.0/13 -add china_ip_route 222.216.0.0/15 -add china_ip_route 222.218.0.0/16 -add china_ip_route 222.219.0.0/16 -add china_ip_route 222.220.0.0/15 -add china_ip_route 222.222.0.0/15 -add china_ip_route 222.240.0.0/13 -add china_ip_route 222.248.0.0/16 -add china_ip_route 222.249.0.0/17 -add china_ip_route 222.249.128.0/19 -add china_ip_route 222.249.160.0/20 -add china_ip_route 222.249.176.0/20 -add china_ip_route 222.249.192.0/18 -add china_ip_route 223.0.0.0/15 -add china_ip_route 223.2.0.0/15 -add china_ip_route 223.4.0.0/14 -add china_ip_route 223.8.0.0/13 -add china_ip_route 223.20.0.0/15 -add china_ip_route 223.27.184.0/22 -add china_ip_route 223.29.208.0/22 -add china_ip_route 223.29.252.0/22 -add china_ip_route 223.64.0.0/11 -add china_ip_route 223.96.0.0/12 -add china_ip_route 223.112.0.0/14 -add china_ip_route 223.116.0.0/15 -add china_ip_route 223.120.128.0/17 -add china_ip_route 223.121.128.0/17 -add china_ip_route 223.122.0.0/15 -add china_ip_route 223.124.0.0/14 -add china_ip_route 223.128.0.0/15 -add china_ip_route 223.144.0.0/12 -add china_ip_route 223.160.0.0/14 -add china_ip_route 223.166.0.0/15 -add china_ip_route 223.192.0.0/15 -add china_ip_route 223.198.0.0/15 -add china_ip_route 223.201.0.0/16 -add china_ip_route 223.202.0.0/15 -add china_ip_route 223.208.0.0/14 -add china_ip_route 223.212.0.0/15 -add china_ip_route 223.214.0.0/15 -add china_ip_route 223.220.0.0/15 -add china_ip_route 223.223.176.0/20 -add china_ip_route 223.223.192.0/20 -add china_ip_route 223.240.0.0/13 -add china_ip_route 223.248.0.0/14 -add china_ip_route 223.252.128.0/17 -add china_ip_route 223.254.0.0/16 -add china_ip_route 223.255.0.0/17 -add china_ip_route 223.255.236.0/22 -add china_ip_route 223.255.252.0/23 diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list b/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list deleted file mode 100644 index 6e1fa82b46..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list +++ /dev/null @@ -1 +0,0 @@ -#baidu.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list b/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list deleted file mode 100644 index 685587dfc3..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fake_filter.list +++ /dev/null @@ -1,89 +0,0 @@ -*.lan -#放行NTP服务 -time.windows.com -time.nist.gov -time.apple.com -time.asia.apple.com -*.ntp.org.cn -*.openwrt.pool.ntp.org -time1.cloud.tencent.com -time.ustc.edu.cn -pool.ntp.org -ntp.ubuntu.com -ntp.aliyun.com -ntp1.aliyun.com -ntp2.aliyun.com -ntp3.aliyun.com -ntp4.aliyun.com -ntp5.aliyun.com -ntp6.aliyun.com -ntp7.aliyun.com -time1.aliyun.com -time2.aliyun.com -time3.aliyun.com -time4.aliyun.com -time5.aliyun.com -time6.aliyun.com -time7.aliyun.com -*.time.edu.cn -time1.apple.com -time2.apple.com -time3.apple.com -time4.apple.com -time5.apple.com -time6.apple.com -time7.apple.com -time1.google.com -time2.google.com -time3.google.com -time4.google.com -#放行网易云音乐 -music.163.com -*.music.163.com -*.126.net -#百度音乐 -musicapi.taihe.com -music.taihe.com -#酷狗音乐 -songsearch.kugou.com -trackercdn.kugou.com -#酷我音乐 -*.kuwo.cn -#JOOX音乐 -api-jooxtt.sanook.com -api.joox.com -joox.com -#QQ音乐 -y.qq.com -*.y.qq.com -streamoc.music.tc.qq.com -mobileoc.music.tc.qq.com -isure.stream.qqmusic.qq.com -dl.stream.qqmusic.qq.com -aqqmusic.tc.qq.com -amobile.music.tc.qq.com -#虾米音乐 -*.xiami.com -#咪咕音乐 -*.music.migu.cn -music.migu.cn -#win10本地连接检测 -*.msftconnecttest.com -*.msftncsi.com -#QQ快捷登录 -localhost.ptlogin2.qq.com -#Nintendo Switch -+.srv.nintendo.net -#Sony PlayStation -+.stun.playstation.net -#Microsoft Xbox -xbox.*.microsoft.com -+.xboxlive.com -proxy.golang.org -stun.*.* -stun.*.*.* -#Linksys Router -heartbeat.belkin.com -*.linksys.com -*.linksyssmartwifi.com -+.battlenet.com.cn \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list b/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list deleted file mode 100644 index 1180bb5f65..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list +++ /dev/null @@ -1,6 +0,0 @@ -# experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com) -# static domain has a higher priority than wildcard domain (foo.example.com > *.example.com) -# NOTE: hosts don't work with `fake-ip` - -# '*.clash.dev': 127.0.0.1 -# 'alpha.clash.dev': '::1' diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list b/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list deleted file mode 100644 index d0ebf97eb0..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list +++ /dev/null @@ -1,46 +0,0 @@ -##- DOMAIN-SUFFIX,google.com,Proxy 匹配域名后缀(交由Proxy代理服务器组) -##- DOMAIN-KEYWORD,google,Proxy 匹配域名关键字(交由Proxy代理服务器组) -##- DOMAIN,google.com,Proxy 匹配域名(交由Proxy代理服务器组) -##- DOMAIN-SUFFIX,ad.com,REJECT 匹配域名后缀(拒绝) -##- IP-CIDR,127.0.0.0/8,DIRECT 匹配数据目标IP(直连) -##- SRC-IP-CIDR,192.168.1.201/32,DIRECT 匹配数据发起IP(直连) -##- DST-PORT,80,DIRECT 匹配数据目标端口(直连) -##- SRC-PORT,7777,DIRECT 匹配数据源端口(直连) - -##排序在上的规则优先生效,如添加(去除规则前的#号): -##IP段:192.168.1.2-192.168.1.200 直连 -##- SRC-IP-CIDR,192.168.1.2/31,DIRECT -##- SRC-IP-CIDR,192.168.1.4/30,DIRECT -##- SRC-IP-CIDR,192.168.1.8/29,DIRECT -##- SRC-IP-CIDR,192.168.1.16/28,DIRECT -##- SRC-IP-CIDR,192.168.1.32/27,DIRECT -##- SRC-IP-CIDR,192.168.1.64/26,DIRECT -##- SRC-IP-CIDR,192.168.1.128/26,DIRECT -##- SRC-IP-CIDR,192.168.1.192/29,DIRECT -##- SRC-IP-CIDR,192.168.1.200/32,DIRECT - -##IP段:192.168.1.202-192.168.1.255 直连 -##- SRC-IP-CIDR,192.168.1.202/31,DIRECT -##- SRC-IP-CIDR,192.168.1.204/30,DIRECT -##- SRC-IP-CIDR,192.168.1.208/28,DIRECT -##- SRC-IP-CIDR,192.168.1.224/27,DIRECT - -##此时IP为192.168.1.1和192.168.1.201的客户端流量走代理(策略),其余客户端不走代理 -##因为Fake-IP模式下,IP地址为192.168.1.1的路由器自身流量可走代理(策略),所以需要排除 - -##仅设置路由器自身直连: -##- SRC-IP-CIDR,192.168.1.1/32,DIRECT -##- SRC-IP-CIDR,198.18.0.1/32,DIRECT - -##DDNS -##-DOMAIN-SUFFIX,checkip.dyndns.org,DIRECT -##-DOMAIN-SUFFIX,checkipv6.dyndns.org,DIRECT -##-DOMAIN-SUFFIX,checkip.synology.com,DIRECT -##-DOMAIN-SUFFIX,ifconfig.co,DIRECT -##-DOMAIN-SUFFIX,api.myip.com,DIRECT -##-DOMAIN-SUFFIX,ip-api.com,DIRECT -##-DOMAIN-SUFFIX,ipapi.co,DIRECT -##-DOMAIN-SUFFIX,ip6.seeip.org,DIRECT -##-DOMAIN-SUFFIX,members.3322.org,DIRECT - -##在线IP段转CIDR地址:http://ip2cidr.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list b/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list deleted file mode 100644 index 371e38b5c6..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list +++ /dev/null @@ -1,8 +0,0 @@ -##- DOMAIN-SUFFIX,google.com,Proxy 匹配域名后缀(交由Proxy代理服务器组) -##- DOMAIN-KEYWORD,google,Proxy 匹配域名关键字(交由Proxy代理服务器组) -##- DOMAIN,google.com,Proxy 匹配域名(交由Proxy代理服务器组) -##- DOMAIN-SUFFIX,ad.com,REJECT 匹配域名后缀(拒绝) -##- IP-CIDR,127.0.0.0/8,DIRECT 匹配数据目标IP(直连) -##- SRC-IP-CIDR,192.168.1.201/32,DIRECT 匹配数据发起IP(直连) -##- DST-PORT,80,DIRECT 匹配数据目标端口(直连) -##- SRC-PORT,7777,DIRECT 匹配数据源端口(直连) diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/CS-GO.rules b/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/CS-GO.rules deleted file mode 100644 index 9bab472ab0..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/CS-GO.rules +++ /dev/null @@ -1,618 +0,0 @@ -#CSGO,反恐精英:全球攻势,0,0,1,0,1,0,By-AmazingDM -1.165.84.0/24 -1.165.85.0/24 -1.165.90.0/24 -5.8.200.0/24 -5.9.123.0/24 -13.73.0.0/16 -13.73.1.0/24 -13.75.114.0/24 -13.126.76.0/24 -14.18.251.72/32 -18.214.26.0/24 -24.105.28.0/24 -27.64.93.0/24 -34.235.169.0/24 -35.185.157.0/24 -35.198.200.0/24 -36.232.23.0/24 -36.232.28.0/24 -36.232.29.0/24 -37.21.10.0/24 -37.230.228.0/24 -42.113.94.0/24 -42.114.229.0/24 -43.225.199.0/24 -43.239.136.0/24 -43.241.50.0/24 -43.249.36.0/24 -45.113.137.0/24 -45.113.191.0/24 -45.119.240.0/24 -45.121.184.0/24 -45.121.185.0/24 -45.121.186.0/24 -45.121.187.0/24 -47.52.16.0/24 -47.52.17.0/24 -47.52.18.0/24 -47.52.19.0/24 -47.52.20.0/24 -47.52.21.0/24 -47.52.22.0/24 -47.52.23.0/24 -47.52.24.0/24 -47.52.25.0/24 -47.52.26.0/24 -47.52.27.0/24 -47.52.28.0/24 -47.52.29.0/24 -47.52.30.0/24 -47.52.31.0/24 -47.52.40.0/24 -47.52.41.0/24 -47.52.42.0/24 -47.52.43.0/24 -47.52.44.0/24 -47.52.45.0/24 -47.52.46.0/24 -47.52.47.0/24 -47.52.56.0/24 -47.52.57.0/24 -47.52.58.0/24 -47.52.59.0/24 -47.52.60.0/24 -47.52.61.0/24 -47.52.62.0/24 -47.52.63.0/24 -47.52.64.0/24 -47.52.65.0/24 -47.52.66.0/24 -47.52.67.0/24 -47.52.68.0/24 -47.52.69.0/24 -47.52.70.0/24 -47.52.71.0/24 -47.52.72.0/24 -47.52.73.0/24 -47.52.74.0/24 -47.52.75.0/24 -47.52.76.0/24 -47.52.77.0/24 -47.52.78.0/24 -47.52.79.0/24 -47.52.88.0/24 -47.52.89.0/24 -47.52.90.0/24 -47.52.91.0/24 -47.52.92.0/24 -47.52.93.0/24 -47.52.94.0/24 -47.52.95.0/24 -47.52.96.0/24 -47.52.97.0/24 -47.52.98.0/24 -47.52.99.0/24 -47.52.100.0/24 -47.52.101.0/24 -47.52.102.0/24 -47.52.103.0/24 -47.52.104.0/24 -47.52.105.0/24 -47.52.106.0/24 -47.52.107.0/24 -47.52.108.0/24 -47.52.109.0/24 -47.52.110.0/24 -47.52.111.0/24 -47.52.112.0/24 -47.52.113.0/24 -47.52.114.0/24 -47.52.115.0/24 -47.52.116.0/24 -47.52.117.0/24 -47.52.118.0/24 -47.52.119.0/24 -47.52.128.0/24 -47.52.129.0/24 -47.52.130.0/24 -47.52.131.0/24 -47.52.132.0/24 -47.52.133.0/24 -47.52.134.0/24 -47.52.135.0/24 -47.52.136.0/24 -47.52.137.0/24 -47.52.138.0/24 -47.52.139.0/24 -47.52.140.0/24 -47.52.141.0/24 -47.52.142.0/24 -47.52.143.0/24 -47.52.144.0/24 -47.52.145.0/24 -47.52.146.0/24 -47.52.147.0/24 -47.52.148.0/24 -47.52.149.0/24 -47.52.150.0/24 -47.52.151.0/24 -47.52.152.0/24 -47.52.153.0/24 -47.52.154.0/24 -47.52.155.0/24 -47.52.156.0/24 -47.52.157.0/24 -47.52.158.0/24 -47.52.159.0/24 -47.52.160.0/24 -47.52.161.0/24 -47.52.162.0/24 -47.52.163.0/24 -47.52.164.0/24 -47.52.165.0/24 -47.52.166.0/24 -47.52.167.0/24 -47.52.168.0/24 -47.52.169.0/24 -47.52.170.0/24 -47.52.171.0/24 -47.52.172.0/24 -47.52.173.0/24 -47.52.174.0/24 -47.52.175.0/24 -47.52.188.0/24 -47.52.190.0/24 -47.52.191.0/24 -47.52.192.0/24 -47.52.193.0/24 -47.52.194.0/24 -47.52.195.0/24 -47.52.196.0/24 -47.52.197.0/24 -47.52.198.0/24 -47.52.199.0/24 -47.52.200.0/24 -47.52.201.0/24 -47.52.202.0/24 -47.52.203.0/24 -47.52.204.0/24 -47.52.205.0/24 -47.52.206.0/24 -47.52.207.0/24 -47.52.208.0/24 -47.52.209.0/24 -47.52.224.0/24 -47.52.225.0/24 -47.52.226.0/24 -47.52.228.0/24 -47.52.230.0/24 -47.52.231.0/24 -47.52.232.0/24 -47.52.234.0/24 -47.52.235.0/24 -47.52.236.0/24 -47.52.241.0/24 -47.52.242.0/24 -47.52.244.0/24 -47.52.246.0/24 -47.52.247.0/24 -47.52.248.0/24 -47.52.249.0/24 -47.52.250.0/24 -47.52.251.0/24 -47.52.252.0/24 -47.52.253.0/24 -47.52.254.0/24 -47.52.255.0/24 -47.74.1.0/24 -47.75.3.0/24 -47.75.5.0/24 -47.75.94.0/24 -47.75.98.0/24 -47.75.143.0/24 -47.75.194.0/24 -47.75.207.0/24 -47.75.219.0/24 -47.89.8.0/24 -47.89.9.0/24 -47.89.10.0/24 -47.89.11.0/24 -47.89.12.0/24 -47.89.13.0/24 -47.89.14.0/24 -47.89.15.0/24 -47.89.16.0/24 -47.89.17.0/24 -47.89.18.0/24 -47.89.19.0/24 -47.89.20.0/24 -47.89.21.0/24 -47.89.22.0/24 -47.89.23.0/24 -47.90.8.0/24 -47.90.90.0/24 -47.90.96.0/24 -47.90.97.0/24 -47.90.98.0/24 -47.90.99.0/24 -47.90.100.0/24 -47.90.101.0/24 -47.90.102.0/24 -47.90.103.0/24 -47.90.120.0/24 -47.90.121.0/24 -47.90.122.0/24 -47.90.123.0/24 -47.90.124.0/24 -47.90.125.0/24 -47.90.126.0/24 -47.90.127.0/24 -47.90.214.0/24 -47.91.152.0/24 -47.91.153.0/24 -47.91.154.0/24 -47.91.155.0/24 -47.91.156.0/24 -47.91.157.0/24 -47.91.158.0/24 -47.91.159.0/24 -47.91.207.0/24 -47.91.208.0/24 -47.91.209.0/24 -47.91.210.0/24 -47.91.211.0/24 -47.91.212.0/24 -47.91.213.0/24 -47.91.214.0/24 -47.91.215.0/24 -47.91.216.0/24 -47.91.217.0/24 -47.91.218.0/24 -47.91.219.0/24 -47.91.220.0/24 -47.91.221.0/24 -47.91.224.0/24 -47.91.225.0/24 -47.91.226.0/24 -47.91.227.0/24 -47.91.228.0/24 -47.91.229.0/24 -47.91.230.0/24 -47.91.231.0/24 -47.91.232.0/24 -47.91.233.0/24 -47.91.234.0/24 -47.91.235.0/24 -47.91.236.0/24 -47.91.237.0/24 -47.91.238.0/24 -47.91.239.0/24 -47.91.240.0/24 -47.91.241.0/24 -47.91.242.0/24 -47.91.243.0/24 -47.91.244.0/24 -47.91.245.0/24 -47.91.246.0/24 -47.91.247.0/24 -47.91.248.0/24 -47.91.249.0/24 -47.91.250.0/24 -47.91.251.0/24 -47.91.252.0/24 -47.91.253.0/24 -47.91.254.0/24 -47.91.255.0/24 -47.96.0.0/16 -47.96.2.0/24 -47.96.3.0/24 -47.96.5.0/24 -47.96.6.0/24 -47.96.7.0/24 -47.96.8.0/24 -47.96.9.0/24 -47.96.10.0/24 -47.96.12.0/24 -47.96.13.0/24 -47.96.14.0/24 -47.99.33.0/24 -47.99.38.0/24 -47.99.44.0/24 -47.99.62.0/24 -47.99.73.0/24 -47.99.75.0/24 -47.99.76.0/24 -47.99.81.0/24 -47.99.84.0/24 -47.99.89.0/24 -47.99.90.0/24 -47.99.93.0/24 -47.99.95.0/24 -47.99.98.0/24 -47.99.99.0/24 -47.99.101.0/24 -47.99.103.0/24 -47.99.104.0/24 -47.99.107.0/24 -47.99.111.0/24 -47.99.120.0/24 -47.99.128.0/24 -47.99.159.0/24 -47.99.161.0/24 -47.99.164.0/24 -47.99.166.0/24 -47.99.169.0/24 -47.110.42.0/24 -47.244.1.0/24 -47.244.2.0/24 -47.244.3.0/24 -47.244.5.0/24 -47.244.7.0/24 -47.244.10.0/24 -47.244.11.0/24 -47.244.12.0/24 -47.244.13.0/24 -47.244.14.0/24 -47.244.15.0/24 -47.244.16.0/24 -47.244.17.0/24 -47.244.18.0/24 -47.244.19.0/24 -47.244.21.0/24 -47.244.22.0/24 -47.244.24.0/24 -47.244.25.0/24 -47.244.26.0/24 -47.244.33.0/24 -47.244.35.0/24 -47.244.36.0/24 -47.244.37.0/24 -47.244.43.0/24 -47.244.44.0/24 -47.244.48.0/24 -47.244.51.0/24 -47.244.56.0/24 -52.53.89.0/24 -52.63.114.0/24 -52.64.199.0/24 -52.90.185.0/24 -52.175.16.0/24 -52.175.31.0/24 -52.207.236.0/24 -52.229.154.0/24 -52.229.160.0/24 -52.229.161.0/24 -54.66.223.0/24 -54.158.198.0/24 -54.164.19.0/24 -54.169.27.0/24 -54.209.147.0/24 -58.153.0.0/16 -58.153.19.0/24 -58.153.171.0/24 -58.153.208.0/24 -58.153.209.0/24 -58.153.221.0/24 -58.176.80.0/24 -58.177.181.0/24 -58.215.54.0/24 -58.221.252.0/24 -59.16.249.0/24 -59.127.115.0/24 -59.149.239.0/24 -60.248.89.0/24 -61.80.89.0/24 -61.84.148.0/24 -61.155.210.0/24 -61.216.2.0/24 -61.216.34.0/24 -61.216.146.0/24 -61.238.35.0/24 -61.239.213.0/24 -61.239.223.0/24 -74.91.112.0/24 -74.201.99.0/24 -87.98.228.0/24 -88.82.185.0/24 -90.188.238.0/24 -94.245.155.0/24 -95.154.88.0/24 -95.154.113.0/24 -95.172.92.0/24 -95.183.13.0/24 -103.9.89.0/24 -103.10.124.0/24 -103.10.125.0/24 -103.16.27.0/24 -103.28.54.0/24 -103.28.55.0/24 -103.36.208.0/24 -103.44.160.0/24 -103.57.72.0/24 -103.58.149.0/24 -103.60.126.0/24 -103.62.48.0/24 -103.89.90.0/24 -103.207.36.0/24 -103.222.20.0/24 -103.231.163.0/24 -103.232.85.0/24 -103.241.165.0/24 -103.244.2.0/24 -103.254.153.0/24 -104.199.166.0/24 -104.236.115.0/24 -107.21.14.0/24 -110.42.10.0/24 -110.173.58.0/24 -111.91.236.0/24 -111.231.11.0/24 -111.253.47.0/24 -111.253.49.0/24 -111.253.50.0/24 -111.253.52.0/24 -111.253.55.0/24 -112.118.44.0/24 -112.118.193.0/24 -113.160.204.0/24 -113.190.242.0/24 -114.46.16.0/24 -114.46.20.0/24 -114.46.21.0/24 -114.46.22.0/24 -114.46.24.0/24 -114.46.30.0/24 -114.167.236.0/24 -115.230.127.0/24 -115.231.221.0/24 -115.231.223.0/24 -116.31.123.0/24 -116.49.214.0/24 -116.122.109.0/24 -116.251.223.0/24 -118.107.76.0/24 -119.28.222.0/24 -119.197.57.0/24 -119.236.132.0/24 -119.237.11.0/24 -120.72.85.0/24 -123.31.20.0/24 -123.194.52.0/24 -124.158.10.0/24 -124.228.91.0/24 -125.212.211.0/24 -125.212.226.0/24 -125.226.128.0/24 -125.253.124.0/24 -128.199.81.0/24 -132.232.7.0/24 -132.232.9.0/24 -132.232.12.0/24 -132.232.29.0/24 -132.232.51.0/24 -132.232.55.0/24 -132.232.57.0/24 -132.232.61.0/24 -132.232.62.0/24 -132.232.75.0/24 -132.232.91.0/24 -132.232.94.0/24 -132.232.99.0/24 -132.232.104.0/24 -133.130.123.0/24 -138.19.63.0/24 -139.99.9.0/24 -139.99.104.0/24 -139.99.119.0/24 -139.162.55.0/24 -146.66.152.0/24 -146.66.153.0/24 -146.66.154.0/24 -146.66.155.0/24 -146.66.156.0/24 -146.66.157.0/24 -146.66.158.0/24 -146.66.159.0/24 -150.109.40.0/24 -151.80.60.0/24 -151.80.145.0/24 -152.111.192.0/24 -153.160.25.0/24 -153.254.86.0/24 -155.133.227.0/24 -155.133.230.0/24 -155.133.232.0/24 -155.133.233.0/24 -155.133.235.0/24 -155.133.238.0/24 -155.133.239.0/24 -155.133.242.0/24 -155.133.244.0/24 -155.133.245.0/24 -155.133.246.0/24 -155.133.247.0/24 -155.133.248.0/24 -155.133.249.0/24 -155.133.252.0/24 -155.133.253.0/24 -155.133.254.0/24 -159.28.159.0/24 -161.202.44.0/24 -162.254.192.0/24 -162.254.193.0/24 -162.254.194.0/24 -162.254.195.0/24 -162.254.196.0/24 -162.254.197.0/24 -162.254.198.0/24 -162.254.199.0/24 -163.53.149.0/24 -169.254.0.0/16 -169.254.125.95/32 -169.254.10.218/32 -175.210.83.0/24 -176.215.255.0/24 -180.149.95.0/24 -180.177.178.0/24 -182.171.230.0/24 -182.176.65.0/24 -183.60.111.0/24 -183.179.66.0/24 -185.25.60.0/24 -185.25.180.0/24 -185.25.181.0/24 -185.25.182.0/24 -185.25.183.0/24 -185.37.216.0/24 -185.62.205.0/24 -185.113.141.0/24 -190.217.33.0/24 -192.69.96.0/24 -192.69.97.0/24 -193.33.176.0/24 -195.14.118.0/24 -195.201.246.0/24 -196.38.180.0/24 -197.80.200.0/24 -198.27.83.0/24 -202.21.115.0/24 -203.175.163.0/24 -203.175.164.0/24 -203.175.165.0/24 -203.175.166.0/24 -203.218.101.0/24 -205.185.194.0/24 -205.196.6.0/24 -208.64.200.0/24 -208.64.203.0/24 -208.78.164.0/24 -208.78.165.0/24 -208.78.166.0/24 -209.58.164.0/24 -209.58.168.0/24 -209.58.178.0/24 -209.58.188.0/24 -210.211.124.0/24 -211.21.37.0/24 -211.48.69.0/24 -211.75.181.0/24 -212.64.32.0/24 -216.52.148.0/24 -217.150.77.0/24 -218.250.12.0/24 -218.250.15.0/24 -218.250.113.0/24 -218.255.3.0/24 -220.80.129.0/24 -220.134.154.0/24 -220.135.180.0/24 -220.169.242.0/24 -220.170.89.0/24 -221.6.100.0/24 -222.102.95.0/24 -222.112.242.0/24 -222.186.50.0/24 -222.187.224.0/24 -224.0.0.0/4 -240.0.0.0/4 diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/Monster-Hunter-World.rules b/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/Monster-Hunter-World.rules deleted file mode 100644 index 6b4de7abad..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/Monster-Hunter-World.rules +++ /dev/null @@ -1,295 +0,0 @@ -#Monster Hunter: World,怪兽世界猎人steam版,0,0,1,0,1,0,By-normanbb -2.16.0.0/16 -2.17.0.0/16 -2.18.0.0/16 -2.19.0.0/16 -2.20.0.0/16 -2.21.0.0/16 -2.22.0.0/16 -2.23.0.0/16 -8.7.0.0/16 -14.21.0.0/16 -23.0.0.0/4 -23.1.0.0/16 -23.2.0.0/16 -23.3.0.0/16 -23.4.0.0/16 -23.5.0.0/16 -23.7.0.0/16 -23.8.0.0/16 -23.9.0.0/16 -23.11.0.0/16 -23.12.0.0/16 -23.13.0.0/16 -23.14.0.0/16 -23.15.0.0/16 -23.32.0.0/16 -23.33.0.0/16 -23.34.0.0/16 -23.35.0.0/16 -23.36.0.0/16 -23.37.0.0/16 -23.38.0.0/16 -23.39.0.0/16 -23.40.0.0/16 -23.41.0.0/16 -23.42.0.0/16 -23.44.0.0/16 -23.45.0.0/16 -23.46.0.0/16 -23.48.0.0/16 -23.49.0.0/16 -23.50.0.0/16 -23.51.0.0/16 -23.52.0.0/16 -23.53.0.0/16 -23.54.0.0/16 -23.55.0.0/16 -23.56.0.0/16 -23.57.0.0/16 -23.58.0.0/16 -23.59.0.0/16 -23.60.0.0/16 -23.61.0.0/16 -23.62.0.0/16 -23.63.0.0/16 -23.64.0.0/16 -23.65.0.0/16 -23.67.0.0/16 -23.72.0.0/16 -23.73.0.0/16 -23.74.0.0/16 -23.75.0.0/16 -23.76.0.0/16 -23.77.0.0/16 -23.78.0.0/16 -23.79.0.0/16 -23.192.0.0/16 -23.193.0.0/16 -23.194.0.0/16 -23.196.0.0/16 -23.197.0.0/16 -23.198.0.0/16 -23.199.0.0/16 -23.200.0.0/16 -23.201.0.0/16 -23.202.0.0/16 -23.203.0.0/16 -23.204.0.0/16 -23.205.0.0/16 -23.206.0.0/16 -23.207.0.0/16 -23.208.0.0/16 -23.209.0.0/16 -23.210.0.0/16 -23.211.0.0/16 -23.212.0.0/16 -23.213.0.0/16 -23.214.0.0/16 -23.215.0.0/16 -23.216.0.0/16 -23.217.0.0/16 -23.218.0.0/16 -23.219.0.0/16 -23.220.0.0/16 -23.221.0.0/16 -23.222.0.0/16 -23.223.0.0/16 -31.0.0.0/4 -31.13.0.0/16 -37.10.0.0/16 -45.121.0.0/16 -45.121.184.0/24 -45.121.186.0/24 -46.0.0.0/4 -59.0.0.0/4 -60.254.0.0/16 -61.213.0.0/16 -63.146.0.0/16 -63.219.0.0/16 -63.243.0.0/16 -64.0.0.0/4 -64.124.0.0/16 -65.152.0.0/16 -65.158.0.0/16 -66.0.0.0/4 -67.0.0.0/4 -67.131.0.0/16 -69.0.0.0/4 -69.16.0.0/16 -69.63.0.0/16 -69.171.0.0/16 -69.192.0.0/16 -72.165.0.0/16 -72.246.0.0/16 -72.247.0.0/16 -74.0.0.0/4 -74.86.0.0/16 -74.201.0.0/16 -75.0.0.0/4 -75.126.0.0/16 -78.16.0.0/16 -84.53.0.0/16 -85.190.0.0/16 -88.0.0.0/4 -88.221.0.0/16 -92.122.0.0/16 -92.123.0.0/16 -95.100.0.0/16 -95.101.0.0/16 -96.0.0.0/4 -96.6.0.0/16 -96.16.0.0/16 -96.17.0.0/16 -103.10.124.0/24 -103.28.0.0/16 -103.28.54.0/24 -103.74.0.0/16 -104.0.0.0/4 -104.65.0.0/16 -104.66.0.0/16 -104.67.0.0/16 -104.68.0.0/16 -104.70.0.0/16 -104.71.0.0/16 -104.72.0.0/16 -104.73.0.0/16 -104.75.0.0/16 -104.76.0.0/16 -104.77.0.0/16 -104.79.0.0/16 -104.80.0.0/16 -104.81.0.0/16 -104.82.0.0/16 -104.83.0.0/16 -104.84.0.0/16 -104.85.0.0/16 -104.86.0.0/16 -104.87.0.0/16 -104.89.0.0/16 -104.90.0.0/16 -104.91.0.0/16 -104.92.0.0/16 -104.94.0.0/16 -104.95.0.0/16 -104.97.0.0/16 -104.98.0.0/16 -104.100.0.0/16 -104.101.0.0/16 -104.102.0.0/16 -104.103.0.0/16 -104.104.0.0/16 -104.105.0.0/16 -104.106.0.0/16 -104.107.0.0/16 -104.108.0.0/16 -104.109.0.0/16 -104.110.0.0/16 -104.111.0.0/16 -104.112.0.0/16 -104.113.0.0/16 -104.115.0.0/16 -104.116.0.0/16 -104.117.0.0/16 -104.118.0.0/16 -104.119.0.0/16 -104.120.0.0/16 -104.121.0.0/16 -104.122.0.0/16 -104.123.0.0/16 -104.124.0.0/16 -104.126.0.0/16 -104.127.0.0/16 -106.15.0.0/16 -110.45.0.0/16 -115.223.0.0/16 -117.103.0.0/16 -118.155.0.0/16 -118.214.0.0/16 -118.215.0.0/16 -120.24.184.25/32 -121.156.0.0/16 -122.252.0.0/16 -125.56.0.0/16 -125.252.0.0/16 -128.241.0.0/16 -139.175.0.0/16 -141.0.0.0/4 -146.66.0.0/16 -152.199.0.0/16 -153.254.0.0/16 -153.254.86.0/24 -155.133.0.0/16 -155.133.232.0/24 -155.133.233.0/24 -155.133.234.0/24 -155.133.235.0/24 -155.133.239.0/24 -155.133.244.0/24 -155.133.253.0/24 -155.133.254.0/24 -162.254.0.0/16 -162.254.192.0/24 -162.254.193.0/24 -162.254.194.0/24 -162.254.199.0/24 -165.254.0.0/16 -172.0.0.0/4 -172.224.0.0/16 -172.226.0.0/16 -172.227.0.0/16 -172.228.0.0/16 -172.229.0.0/16 -172.230.0.0/16 -172.231.0.0/16 -173.0.0.0/4 -173.197.0.0/16 -173.205.0.0/16 -173.222.0.0/16 -173.223.0.0/16 -173.252.0.0/16 -174.36.0.0/16 -175.99.0.0/16 -175.139.0.0/16 -180.101.192.0/24 -182.162.0.0/16 -184.0.0.0/4 -184.24.0.0/16 -184.25.0.0/16 -184.26.0.0/16 -184.29.0.0/16 -184.30.0.0/16 -184.31.0.0/16 -184.50.0.0/16 -184.51.0.0/16 -184.84.0.0/16 -184.85.0.0/16 -184.87.0.0/16 -185.25.0.0/16 -185.27.0.0/16 -185.88.0.0/16 -192.69.96.0/24 -192.81.0.0/16 -198.87.0.0/16 -198.172.0.0/16 -199.0.0.0/4 -199.239.0.0/16 -203.69.0.0/16 -203.80.149.0/24 -205.186.0.0/16 -205.196.6.0/24 -205.197.0.0/16 -208.0.0.0/4 -208.64.0.0/16 -208.64.200.0/24 -208.78.0.0/16 -208.78.164.0/24 -208.78.166.0/24 -208.78.167.0/24 -209.170.0.0/16 -210.61.0.0/16 -210.201.0.0/16 -216.3.0.0/16 -216.156.0.0/16 -223.119.0.0/16 - diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/PUBG-Asia%26-Southeast-Asia.rules b/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/PUBG-Asia%26-Southeast-Asia.rules deleted file mode 100644 index 76452bc6de..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/PUBG-Asia%26-Southeast-Asia.rules +++ /dev/null @@ -1,1759 +0,0 @@ -#PUBG Asia & Southeast Asia,绝地求生亚服&东南亚服,0,0,1,0,1,0,By-normanbb -1.255.48.0/20 -1.255.50.0/23 -1.255.54.0/23 -2.16.0.0/16 -2.16.4.0/24 -2.16.10.0/24 -2.16.64.0/24 -2.17.0.0/16 -2.17.55.0/24 -2.18.0.0/16 -2.18.24.0/24 -2.18.212.0/24 -2.19.0.0/16 -2.19.147.0/24 -2.20.0.0/16 -2.20.188.0/24 -2.21.0.0/16 -2.21.71.0/24 -2.21.74.0/24 -2.21.75.0/24 -2.22.0.0/16 -2.22.74.0/24 -2.22.146.0/24 -2.23.0.0/16 -3.0.0.0/4 -3.0.0.0/15 -3.80.0.0/12 -5.9.56.0/24 -8.7.0.0/16 -13.32.0.0/15 -13.32.1.0/24 -13.32.14.0/24 -13.32.16.0/24 -13.32.198.0/24 -13.32.230.0/24 -13.32.231.0/24 -13.32.253.0/24 -13.33.172.21/32 -13.33.172.29/32 -13.33.172.61/32 -13.33.172.72/32 -13.33.172.82/32 -13.33.172.100/32 -13.33.172.108/32 -13.33.172.249/32 -13.35.0.0/16 -13.35.121.0/24 -13.35.125.27/32 -13.35.125.75/32 -13.35.125.119/32 -13.35.125.123/32 -13.54.0.0/16 -13.58.0.0/16 -13.70.0.0/16 -13.72.192.0/24 -13.73.232.0/24 -13.75.0.0/16 -13.88.208.0/24 -13.94.0.0/16 -13.94.32.0/24 -13.94.48.0/24 -13.94.49.0/24 -13.94.56.0/24 -13.112.0.0/16 -13.115.142.243/32 -13.124.0.0/16 -13.125.0.0/16 -13.125.34.57/32 -13.125.133.61/32 -13.125.200.121/32 -13.209.0.0/16 -13.210.0.0/16 -13.228.0.0/15 -13.228.0.0/16 -13.230.0.0/16 -13.236.0.0/16 -13.238.85.250/32 -13.249.0.0/16 -13.250.0.0/15 -13.250.0.0/16 -13.250.244.21/32 -13.251.110.6/32 -14.21.0.0/16 -18.136.0.0/16 -18.136.198.141/32 -18.179.0.0/16 -18.179.147.209/32 -18.182.0.0/16 -18.184.0.0/16 -18.184.56.0/24 -18.184.93.0/24 -18.185.215.159/32 -18.188.0.0/16 -18.191.0.0/16 -18.194.0.0/16 -18.194.55.168/32 -18.196.0.0/16 -18.200.0.0/16 -18.202.0.0/16 -18.204.0.0/14 -18.204.0.0/16 -18.205.2.190/32 -18.208.0.0/13 -18.208.0.0/16 -18.216.0.0/16 -18.220.0.0/16 -18.224.0.0/16 -18.228.0.0/16 -18.231.0.0/16 -18.231.163.192/32 -18.232.0.0/14 -18.232.0.0/16 -23.0.0.0/4 -23.0.7.0/24 -23.1.0.0/16 -23.2.0.0/16 -23.2.16.0/24 -23.2.17.0/24 -23.3.0.0/16 -23.4.0.0/16 -23.4.240.0/24 -23.5.0.0/16 -23.7.0.0/16 -23.8.0.0/16 -23.9.0.0/16 -23.11.0.0/16 -23.12.0.0/16 -23.13.0.0/16 -23.14.0.0/16 -23.14.85.0/24 -23.14.90.0/24 -23.15.0.0/16 -23.15.4.0/24 -23.15.224.0/24 -23.20.0.0/14 -23.20.0.0/16 -23.32.0.0/16 -23.32.241.0/24 -23.32.248.0/24 -23.33.0.0/16 -23.34.0.0/16 -23.34.60.0/24 -23.34.61.0/24 -23.35.0.0/16 -23.35.216.0/24 -23.36.0.0/16 -23.37.0.0/16 -23.38.0.0/16 -23.39.0.0/16 -23.40.0.0/16 -23.41.0.0/16 -23.41.243.0/24 -23.42.0.0/16 -23.44.0.0/16 -23.45.0.0/16 -23.45.232.0/24 -23.46.0.0/16 -23.48.0.0/16 -23.49.0.0/16 -23.50.0.0/16 -23.50.49.0/24 -23.50.224.0/24 -23.51.0.0/16 -23.51.122.0/24 -23.52.0.0/16 -23.53.0.0/16 -23.53.73.0/24 -23.53.195.0/24 -23.54.0.0/16 -23.55.0.0/16 -23.56.0.0/16 -23.57.0.0/16 -23.57.66.9/32 -23.57.66.11/32 -23.57.66.17/32 -23.57.66.48/32 -23.57.66.49/32 -23.57.66.50/32 -23.57.66.51/32 -23.58.0.0/16 -23.58.154.0/24 -23.59.0.0/16 -23.59.133.245/32 -23.60.0.0/16 -23.61.0.0/16 -23.61.249.0/24 -23.61.250.0/24 -23.62.0.0/16 -23.62.2.0/24 -23.62.53.0/24 -23.62.98.0/24 -23.62.109.0/24 -23.62.226.0/24 -23.63.0.0/16 -23.63.44.150/32 -23.64.0.0/16 -23.65.0.0/16 -23.65.182.0/24 -23.67.0.0/16 -23.67.161.0/24 -23.72.0.0/16 -23.73.0.0/16 -23.73.206.0/24 -23.74.0.0/16 -23.74.138.0/24 -23.75.0.0/16 -23.76.0.0/16 -23.77.0.0/16 -23.77.202.0/24 -23.78.0.0/16 -23.79.0.0/16 -23.97.64.0/24 -23.97.80.0/24 -23.98.32.0/24 -23.98.40.0/24 -23.98.44.0/24 -23.98.56.0/24 -23.98.56.96/32 -23.98.56.128/32 -23.99.96.0/24 -23.100.88.0/24 -23.100.104.0/24 -23.101.0.0/16 -23.102.224.0/24 -23.111.236.0/24 -23.192.0.0/16 -23.193.0.0/16 -23.194.0.0/16 -23.196.0.0/16 -23.196.214.0/24 -23.197.0.0/16 -23.198.0.0/16 -23.198.99.0/24 -23.199.0.0/16 -23.200.0.0/16 -23.201.0.0/16 -23.201.102.0/24 -23.201.103.0/24 -23.202.0.0/16 -23.202.83.0/24 -23.203.0.0/16 -23.204.0.0/16 -23.204.239.0/24 -23.205.0.0/16 -23.206.0.0/16 -23.206.90.0/24 -23.207.0.0/16 -23.208.0.0/16 -23.209.0.0/16 -23.210.0.0/16 -23.210.202.0/24 -23.210.203.0/24 -23.211.0.0/16 -23.211.40.0/24 -23.211.150.0/24 -23.212.0.0/16 -23.212.53.0/24 -23.213.0.0/16 -23.214.0.0/16 -23.215.0.0/16 -23.215.105.0/24 -23.215.130.0/24 -23.216.0.0/16 -23.217.0.0/16 -23.217.43.0/24 -23.218.0.0/16 -23.219.0.0/16 -23.220.0.0/16 -23.220.195.0/24 -23.221.0.0/16 -23.222.0.0/16 -23.222.61.0/24 -23.223.0.0/16 -23.251.140.0/24 -27.0.0.0/4 -31.0.0.0/4 -31.13.0.0/16 -31.13.65.18/32 -31.13.77.55/32 -34.192.0.0/12 -34.192.0.0/16 -34.224.0.0/12 -34.224.0.0/16 -34.230.18.128/32 -34.240.0.0/16 -34.248.0.0/16 -35.153.0.0/16 -35.156.0.0/16 -35.157.9.231/32 -35.167.6.0/24 -35.168.0.0/13 -35.168.0.0/16 -35.187.4.0/24 -35.187.15.0/24 -35.187.36.0/24 -35.187.59.0/24 -35.187.73.0/24 -35.187.76.0/24 -35.187.83.0/24 -35.187.88.0/24 -35.187.89.0/24 -35.187.93.0/24 -35.187.95.0/24 -35.187.97.0/24 -35.187.103.0/24 -35.187.107.0/24 -35.187.123.0/24 -35.187.161.0/24 -35.187.163.0/24 -35.187.175.0/24 -35.187.176.0/24 -35.187.178.0/24 -35.187.182.0/24 -35.187.188.0/24 -35.187.190.0/24 -35.189.194.0/24 -35.189.197.0/24 -35.189.206.0/24 -35.189.207.0/24 -35.189.212.0/24 -35.189.216.0/24 -35.189.228.0/24 -35.189.235.0/24 -35.189.248.0/24 -35.190.193.0/24 -35.190.202.0/24 -35.190.203.0/24 -35.190.204.0/24 -35.190.205.0/24 -35.190.206.0/24 -35.195.4.0/24 -35.195.7.0/24 -35.195.9.0/24 -35.195.11.0/24 -35.195.24.0/24 -35.195.29.0/24 -35.195.33.0/24 -35.195.41.0/24 -35.195.44.0/24 -35.195.45.0/24 -35.195.47.0/24 -35.195.50.0/24 -35.195.53.0/24 -35.195.66.0/24 -35.195.70.0/24 -35.195.73.0/24 -35.195.75.0/24 -35.195.85.0/24 -35.195.87.0/24 -35.195.89.0/24 -35.195.95.0/24 -35.195.98.0/24 -35.195.100.0/24 -35.195.103.0/24 -35.195.105.0/24 -35.195.112.0/24 -35.195.114.0/24 -35.195.121.0/24 -35.195.126.0/24 -35.195.131.0/24 -35.195.146.0/24 -35.195.149.0/24 -35.195.150.0/24 -35.195.153.0/24 -35.195.156.0/24 -35.195.159.0/24 -35.195.161.0/24 -35.195.162.0/24 -35.195.176.0/24 -35.195.182.0/24 -35.195.188.0/24 -35.195.192.0/24 -35.195.195.0/24 -35.195.202.0/24 -35.195.207.0/24 -35.195.216.0/24 -35.195.217.0/24 -35.195.231.0/24 -35.195.239.0/24 -35.195.247.0/24 -35.195.248.0/24 -35.195.251.0/24 -35.195.253.0/24 -35.198.110.0/24 -35.198.140.0/24 -35.205.19.0/24 -35.205.21.0/24 -35.205.30.0/24 -35.205.34.0/24 -35.205.36.0/24 -35.205.46.0/24 -35.205.47.0/24 -35.205.50.0/24 -35.205.60.0/24 -35.205.73.0/24 -35.205.74.0/24 -35.205.79.0/24 -35.205.80.0/24 -35.205.81.0/24 -35.205.85.0/24 -35.205.94.0/24 -35.205.97.0/24 -35.205.100.0/24 -35.205.101.0/24 -35.205.108.0/24 -35.205.110.0/24 -35.205.111.0/24 -35.205.112.0/24 -35.205.115.0/24 -35.205.125.0/24 -35.205.128.0/24 -35.205.130.0/24 -35.205.135.0/24 -35.205.138.0/24 -35.205.141.0/24 -35.205.144.0/24 -35.205.153.0/24 -35.205.154.0/24 -35.205.155.0/24 -35.205.159.0/24 -35.205.163.0/24 -35.205.164.0/24 -35.205.172.0/24 -35.205.174.0/24 -35.205.180.0/24 -35.205.183.0/24 -35.205.189.0/24 -35.205.190.0/24 -35.205.192.0/24 -35.205.193.0/24 -35.205.197.0/24 -35.205.206.0/24 -35.205.210.0/24 -35.205.211.0/24 -35.205.212.0/24 -35.205.213.0/24 -35.205.216.0/24 -35.205.226.0/24 -35.205.228.0/24 -35.205.233.0/24 -35.205.236.0/24 -35.205.237.0/24 -35.205.238.0/24 -35.205.239.0/24 -35.205.244.0/24 -35.205.249.0/24 -35.205.253.0/24 -35.233.8.0/24 -35.233.10.0/24 -35.233.24.0/24 -35.233.27.0/24 -35.233.29.0/24 -35.233.32.0/24 -35.233.33.0/24 -35.233.34.0/24 -35.233.37.0/24 -35.233.42.0/24 -35.233.44.0/24 -35.233.52.0/24 -35.233.59.0/24 -35.233.65.0/24 -35.233.68.0/24 -35.233.73.0/24 -35.233.84.0/24 -35.233.91.0/24 -35.233.96.0/24 -35.233.97.0/24 -35.233.109.0/24 -35.233.113.0/24 -35.233.118.0/24 -35.233.119.0/24 -35.233.122.0/24 -35.233.123.0/24 -35.234.66.0/24 -35.234.67.0/24 -35.234.68.0/24 -35.240.2.0/24 -35.240.4.0/24 -35.240.5.0/24 -35.240.8.0/24 -35.240.11.0/24 -35.240.12.0/24 -35.240.14.0/24 -35.240.15.0/24 -35.240.16.0/24 -35.240.17.0/24 -35.240.18.0/24 -35.240.25.0/24 -35.240.33.0/24 -35.240.34.0/24 -35.240.35.0/24 -35.240.41.0/24 -35.240.43.0/24 -35.240.48.0/24 -35.240.49.0/24 -35.240.53.0/24 -35.240.54.0/24 -35.240.55.0/24 -35.240.64.0/24 -35.240.67.0/24 -35.240.70.0/24 -35.240.72.0/24 -35.240.73.0/24 -35.240.75.0/24 -35.240.81.0/24 -35.240.82.0/24 -35.240.83.0/24 -35.240.95.0/24 -35.240.97.0/24 -35.240.98.0/24 -35.240.102.0/24 -35.240.104.0/24 -35.240.105.0/24 -35.240.108.0/24 -35.240.109.0/24 -35.240.117.0/24 -35.240.123.0/24 -35.240.124.0/24 -35.241.128.0/24 -35.241.129.0/24 -35.241.132.0/24 -35.241.133.0/24 -35.241.135.0/24 -35.241.141.0/24 -35.241.142.0/24 -35.241.144.0/24 -35.241.148.0/24 -35.241.149.0/24 -35.241.150.0/24 -35.241.152.0/24 -35.241.153.0/24 -35.241.154.0/24 -35.241.156.0/24 -35.241.158.0/24 -35.241.160.0/24 -35.241.162.0/24 -35.241.163.0/24 -35.241.166.0/24 -35.241.168.0/24 -35.241.170.0/24 -35.241.173.0/24 -35.241.175.0/24 -35.241.177.0/24 -35.241.179.0/24 -35.241.182.0/24 -35.241.183.0/24 -35.241.186.0/24 -35.241.189.0/24 -35.241.191.0/24 -35.241.192.0/24 -35.241.193.0/24 -35.241.195.0/24 -35.241.199.0/24 -35.241.200.0/24 -35.241.204.0/24 -35.241.207.0/24 -35.241.211.0/24 -35.241.213.0/24 -35.241.214.0/24 -35.241.216.0/24 -35.241.218.0/24 -35.241.219.0/24 -35.241.225.0/24 -35.241.227.0/24 -35.241.229.0/24 -35.241.231.0/24 -35.241.232.0/24 -35.241.240.0/24 -35.241.242.0/24 -35.241.244.0/24 -35.241.248.0/24 -35.241.251.0/24 -37.10.0.0/16 -37.10.124.0/24 -40.74.64.0/24 -40.74.96.0/24 -40.74.128.0/24 -40.83.64.0/24 -42.99.128.0/24 -43.250.192.0/24 -43.250.193.0/24 -45.119.146.0/24 -45.121.0.0/16 -45.121.186.0/24 -46.0.0.0/4 -46.33.69.0/24 -46.51.128.0/24 -46.51.192.0/24 -46.51.216.0/21 -46.51.216.0/24 -46.51.224.0/24 -46.137.0.0/16 -46.137.128.0/24 -46.137.192.0/19 -46.137.192.0/24 -46.137.224.0/19 -46.137.224.0/24 -47.75.17.0/24 -49.236.136.0/24 -50.16.0.0/15 -50.16.0.0/16 -50.19.0.0/16 -52.0.0.0/4 -52.0.0.0/15 -52.2.0.0/15 -52.2.0.0/16 -52.4.0.0/14 -52.4.0.0/16 -52.14.0.0/16 -52.15.0.0/16 -52.16.0.0/16 -52.18.0.0/16 -52.20.0.0/14 -52.20.0.0/16 -52.28.0.0/16 -52.29.0.0/16 -52.30.0.0/16 -52.44.0.0/15 -52.44.0.0/16 -52.46.0.0/18 -52.48.0.0/16 -52.54.0.0/15 -52.54.0.0/16 -52.57.0.0/16 -52.57.89.137/32 -52.58.0.0/16 -52.62.0.0/16 -52.62.107.227/32 -52.64.0.0/16 -52.64.103.63/32 -52.64.128.0/24 -52.65.0.0/16 -52.67.0.0/16 -52.67.16.101/32 -52.68.0.0/16 -52.70.0.0/15 -52.70.0.0/16 -52.72.0.0/15 -52.72.0.0/16 -52.74.0.0/16 -52.76.0.0/16 -52.76.0.0/17 -52.76.128.0/17 -52.76.128.0/24 -52.76.132.161/32 -52.77.0.0/16 -52.77.210.211/32 -52.78.0.0/16 -52.78.100.116/32 -52.79.0.0/16 -52.79.125.129/32 -52.84.0.0/15 -52.84.43.0/24 -52.84.166.0/24 -52.84.167.0/24 -52.84.186.0/24 -52.84.193.0/24 -52.84.203.0/24 -52.84.239.0/24 -52.84.243.0/24 -52.85.0.0/16 -52.86.0.0/15 -52.86.0.0/16 -52.90.0.0/15 -52.90.0.0/16 -52.92.0.0/16 -52.92.16.0/24 -52.92.39.0/24 -52.92.40.0/24 -52.92.52.0/24 -52.92.56.0/24 -52.92.60.0/24 -52.92.64.0/24 -52.92.68.0/24 -52.92.72.0/24 -52.92.76.0/24 -52.92.80.0/24 -52.93.0.0/16 -52.93.1.0/24 -52.93.2.0/24 -52.93.3.0/24 -52.93.4.0/24 -52.93.8.0/24 -52.93.16.0/24 -52.94.0.0/16 -52.94.4.0/24 -52.94.5.0/24 -52.94.6.0/24 -52.94.7.0/24 -52.94.8.0/24 -52.94.11.0/24 -52.94.13.0/24 -52.94.17.0/24 -52.94.24.0/24 -52.94.26.0/24 -52.94.192.0/24 -52.94.196.0/24 -52.94.198.16/32 -52.94.198.48/32 -52.94.198.64/32 -52.94.198.96/32 -52.94.198.112/32 -52.94.199.0/24 -52.94.200.0/24 -52.94.204.0/24 -52.94.206.0/24 -52.94.216.0/24 -52.94.224.0/24 -52.94.240.0/24 -52.94.244.0/24 -52.94.248.0/24 -52.94.248.0/28 -52.94.248.16/32 -52.94.248.32/28 -52.94.248.32/32 -52.94.248.48/32 -52.94.248.64/32 -52.94.248.80/32 -52.94.248.112/32 -52.94.248.160/32 -52.94.248.176/28 -52.94.248.176/32 -52.94.252.0/24 -52.94.254.0/24 -52.95.0.0/16 -52.95.16.0/24 -52.95.24.0/24 -52.95.28.0/24 -52.95.30.0/24 -52.95.34.0/24 -52.95.35.0/24 -52.95.36.0/24 -52.95.48.0/24 -52.95.56.0/24 -52.95.60.0/24 -52.95.61.0/24 -52.95.62.0/24 -52.95.63.0/24 -52.95.104.0/24 -52.95.108.0/24 -52.95.111.0/24 -52.95.112.0/24 -52.95.128.0/24 -52.95.136.0/24 -52.95.138.0/24 -52.95.192.0/24 -52.95.212.0/24 -52.95.240.0/24 -52.95.241.0/24 -52.95.242.0/24 -52.95.243.0/24 -52.95.244.0/24 -52.95.245.0/24 -52.95.248.0/24 -52.95.251.0/24 -52.95.252.0/24 -52.95.255.0/24 -52.95.255.16/32 -52.95.255.32/28 -52.95.255.32/32 -52.95.255.48/32 -52.95.255.64/32 -52.95.255.80/28 -52.95.255.80/32 -52.95.255.128/32 -52.119.184.0/24 -52.119.192.0/24 -52.119.196.0/24 -52.119.205.0/24 -52.119.212.0/24 -52.119.216.0/24 -52.119.224.0/24 -52.119.232.0/24 -52.119.240.0/24 -52.124.128.0/17 -52.141.0.0/16 -52.141.16.0/24 -52.147.64.0/24 -52.175.0.0/16 -52.175.32.0/24 -52.175.40.0/24 -52.175.40.64/32 -52.175.40.128/32 -52.175.41.0/24 -52.175.42.0/24 -52.175.43.0/24 -52.175.43.64/32 -52.175.44.0/24 -52.175.48.0/24 -52.175.64.0/24 -52.175.96.0/24 -52.175.112.0/24 -52.175.112.32/32 -52.175.113.0/24 -52.175.120.0/24 -52.175.128.0/24 -52.175.160.0/24 -52.184.0.0/16 -52.184.32.0/24 -52.184.40.0/24 -52.184.40.64/32 -52.184.41.0/24 -52.184.42.0/24 -52.184.48.0/24 -52.184.64.0/24 -52.184.96.0/24 -52.192.0.0/16 -52.194.0.0/16 -52.196.0.0/16 -52.200.0.0/13 -52.200.0.0/16 -52.208.0.0/16 -52.216.0.0/16 -52.218.0.0/16 -52.219.0.0/16 -52.219.16.0/24 -52.219.32.0/24 -52.219.40.0/24 -52.219.44.0/24 -52.219.56.0/24 -52.219.60.0/24 -52.219.68.0/24 -52.219.72.0/24 -52.219.76.0/24 -52.219.80.0/24 -52.220.0.0/15 -52.220.0.0/16 -52.222.128.0/17 -52.229.128.0/24 -52.229.160.0/24 -52.229.176.0/24 -52.229.177.0/24 -52.229.184.0/24 -52.229.192.0/24 -52.229.224.0/24 -52.229.232.0/24 -52.229.240.0/24 -52.231.0.0/16 -52.231.1.0/24 -52.231.8.0/24 -52.231.16.0/24 -52.231.32.0/24 -52.231.40.0/24 -52.231.41.0/24 -52.231.48.0/24 -52.231.64.0/24 -52.231.80.0/24 -52.231.80.128/32 -52.231.88.0/24 -52.231.96.0/24 -52.231.128.0/24 -52.231.129.0/24 -52.231.136.0/24 -52.231.144.0/24 -52.231.160.0/24 -52.231.168.0/24 -52.231.168.128/32 -52.231.169.0/24 -52.231.176.0/24 -52.231.192.0/24 -52.231.208.0/24 -52.231.208.32/32 -52.231.216.0/24 -52.231.224.0/24 -52.231.240.0/24 -52.239.128.0/24 -52.239.146.0/24 -52.239.147.0/24 -52.239.147.96/32 -52.239.147.128/32 -52.239.148.0/24 -52.239.165.160/32 -52.245.56.0/24 -52.245.56.32/32 -52.245.92.0/24 -52.245.93.0/24 -52.245.93.32/32 -52.245.93.64/32 -52.245.93.112/32 -52.245.93.128/32 -52.245.100.0/24 -52.245.112.0/24 -52.245.112.32/32 -52.253.172.0/24 -52.253.188.0/24 -52.253.192.0/24 -52.253.216.0/24 -54.64.0.0/16 -54.66.0.0/16 -54.72.0.0/16 -54.74.0.0/16 -54.76.0.0/16 -54.78.0.0/16 -54.79.0.0/16 -54.80.0.0/13 -54.80.0.0/16 -54.88.0.0/14 -54.88.0.0/16 -54.92.0.0/16 -54.92.128.0/17 -54.92.128.0/24 -54.93.0.0/16 -54.94.0.0/16 -54.94.197.230/32 -54.95.0.0/16 -54.144.0.0/14 -54.144.0.0/16 -54.150.0.0/16 -54.151.128.0/17 -54.151.128.0/24 -54.152.0.0/16 -54.153.128.0/24 -54.154.0.0/16 -54.155.0.0/16 -54.156.0.0/14 -54.156.0.0/16 -54.160.0.0/13 -54.160.0.0/16 -54.168.0.0/16 -54.169.0.0/16 -54.170.0.0/16 -54.172.0.0/15 -54.172.0.0/16 -54.174.0.0/15 -54.174.0.0/16 -54.174.0.173/32 -54.178.0.0/16 -54.179.0.0/16 -54.180.0.0/15 -54.180.0.0/16 -54.182.0.0/16 -54.182.2.0/24 -54.182.4.0/24 -54.182.5.0/24 -54.192.0.0/16 -54.194.0.0/16 -54.196.0.0/15 -54.196.0.0/16 -54.198.0.0/16 -54.199.0.0/16 -54.204.0.0/15 -54.204.0.0/16 -54.206.0.0/16 -54.206.7.59/32 -54.206.43.103/32 -54.207.0.0/16 -54.208.0.0/15 -54.208.0.0/16 -54.210.0.0/15 -54.210.0.0/16 -54.216.0.0/16 -54.220.0.0/16 -54.221.0.0/16 -54.224.0.0/15 -54.224.0.0/16 -54.226.0.0/15 -54.226.0.0/16 -54.228.0.0/16 -54.229.0.0/16 -54.230.0.0/16 -54.231.0.0/16 -54.231.128.0/24 -54.231.192.0/24 -54.231.224.0/24 -54.231.240.0/24 -54.231.244.0/24 -54.231.248.0/24 -54.231.252.0/24 -54.231.253.0/24 -54.232.0.0/16 -54.233.0.0/16 -54.233.64.0/24 -54.233.128.0/17 -54.233.128.0/24 -54.234.0.0/15 -54.234.0.0/16 -54.236.0.0/15 -54.236.0.0/16 -54.238.0.0/16 -54.239.0.48/32 -54.239.0.80/32 -54.239.0.96/32 -54.239.0.192/32 -54.239.4.0/24 -54.239.8.0/24 -54.239.16.0/24 -54.239.32.0/24 -54.239.52.0/24 -54.239.54.0/24 -54.239.56.0/24 -54.239.64.0/24 -54.239.96.0/24 -54.239.98.0/24 -54.239.99.0/24 -54.239.100.0/24 -54.239.104.0/24 -54.239.108.0/24 -54.239.116.0/24 -54.239.120.0/24 -54.239.128.0/18 -54.239.130.0/24 -54.239.158.0/24 -54.239.192.0/19 -54.240.128.0/18 -54.240.192.0/24 -54.240.196.0/24 -54.240.197.0/24 -54.240.199.0/24 -54.240.200.0/24 -54.240.202.0/24 -54.240.203.0/24 -54.240.204.0/24 -54.240.208.0/24 -54.240.216.0/24 -54.240.220.0/24 -54.240.225.0/24 -54.240.226.0/24 -54.240.227.0/24 -54.240.228.0/24 -54.240.232.0/24 -54.240.244.0/24 -54.242.0.0/15 -54.242.0.0/16 -54.246.0.0/16 -54.247.0.0/16 -54.248.0.0/16 -54.250.0.0/16 -54.251.0.0/16 -54.252.0.0/16 -54.253.0.0/16 -54.254.0.0/16 -54.255.0.0/16 -59.0.0.0/4 -60.254.0.0/16 -60.254.131.0/24 -61.160.200.0/24 -61.213.0.0/16 -61.213.168.0/24 -63.130.76.0/24 -63.146.0.0/16 -63.146.69.0/24 -63.147.242.0/24 -63.217.8.0/24 -63.219.0.0/16 -63.219.254.0/24 -63.233.60.0/24 -63.243.0.0/16 -63.243.242.0/24 -63.243.244.0/24 -63.251.124.0/24 -64.0.0.0/4 -64.48.225.0/24 -64.124.0.0/16 -64.124.167.0/24 -64.252.64.0/18 -65.52.160.0/24 -65.152.0.0/16 -65.158.0.0/16 -65.158.114.0/24 -65.200.22.0/24 -66.0.0.0/4 -66.61.174.0/24 -67.0.0.0/4 -67.131.0.0/16 -67.131.44.0/24 -67.202.0.0/16 -67.202.0.0/18 -69.0.0.0/4 -69.16.0.0/16 -69.16.175.0/24 -69.63.0.0/16 -69.171.0.0/16 -69.192.0.0/16 -70.42.62.0/24 -70.132.0.0/18 -71.152.0.0/17 -72.21.192.0/24 -72.44.32.0/19 -72.44.32.0/24 -72.165.0.0/16 -72.165.61.0/24 -72.166.126.0/24 -72.246.0.0/16 -72.246.103.0/24 -72.246.188.0/24 -72.246.189.0/24 -72.246.190.0/24 -72.247.0.0/16 -72.247.177.0/24 -72.247.184.0/24 -74.0.0.0/4 -74.86.0.0/16 -74.201.0.0/16 -74.201.98.0/24 -74.201.99.0/24 -74.201.102.0/24 -74.201.103.0/24 -74.201.107.0/24 -75.0.0.0/4 -75.101.128.0/17 -75.101.128.0/24 -75.126.0.0/16 -77.67.20.0/24 -78.16.0.0/16 -79.125.0.0/16 -82.163.72.0/24 -84.53.0.0/16 -85.190.0.0/16 -85.190.158.0/24 -87.238.80.0/24 -88.0.0.0/4 -88.202.177.0/24 -88.202.180.0/24 -88.202.181.0/24 -88.202.182.0/24 -88.202.186.0/24 -88.221.0.0/16 -88.221.71.0/24 -88.221.116.0/24 -88.221.235.0/24 -92.122.0.0/16 -92.122.226.0/24 -92.122.227.0/24 -92.123.0.0/16 -92.123.225.0/24 -93.46.8.0/24 -95.100.0.0/16 -95.100.97.0/24 -95.101.0.0/16 -95.101.2.0/24 -95.101.78.0/24 -95.101.89.0/24 -95.101.182.0/24 -96.0.0.0/4 -96.6.0.0/16 -96.16.0.0/16 -96.17.0.0/16 -96.17.70.0/24 -96.17.109.0/24 -96.17.151.0/24 -99.84.0.0/16 -99.84.216.19/32 -99.84.216.53/32 -99.84.216.79/32 -99.84.216.103/32 -99.86.0.0/16 -100.24.0.0/13 -103.4.8.0/24 -103.4.12.0/24 -103.8.172.0/24 -103.28.0.0/16 -103.28.54.0/24 -103.74.0.0/16 -103.112.40.0/24 -103.112.40.2/32 -103.112.40.32/32 -103.112.40.62/32 -103.112.40.92/32 -103.194.164.0/24 -103.194.166.0/24 -103.246.148.0/24 -103.246.150.0/24 -104.0.0.0/4 -104.46.24.0/24 -104.46.25.0/24 -104.46.26.0/24 -104.46.27.0/24 -104.46.160.0/24 -104.46.224.0/24 -104.65.0.0/16 -104.66.0.0/16 -104.67.0.0/16 -104.68.0.0/16 -104.70.0.0/16 -104.70.154.0/24 -104.71.0.0/16 -104.72.0.0/16 -104.73.0.0/16 -104.75.0.0/16 -104.75.169.0/24 -104.76.0.0/16 -104.76.18.0/24 -104.76.133.0/24 -104.77.0.0/16 -104.77.22.0/24 -104.79.0.0/16 -104.79.88.0/24 -104.80.0.0/16 -104.80.88.0/24 -104.81.0.0/16 -104.81.11.0/24 -104.82.0.0/16 -104.83.0.0/16 -104.84.0.0/16 -104.84.150.0/24 -104.85.0.0/16 -104.86.0.0/16 -104.86.110.0/24 -104.87.0.0/16 -104.89.0.0/16 -104.90.0.0/16 -104.90.49.0/24 -104.91.0.0/16 -104.92.0.0/16 -104.94.0.0/16 -104.95.0.0/16 -104.97.0.0/16 -104.98.0.0/16 -104.100.0.0/16 -104.101.0.0/16 -104.102.0.0/16 -104.103.0.0/16 -104.103.70.0/24 -104.104.0.0/16 -104.104.187.0/24 -104.105.0.0/16 -104.106.0.0/16 -104.107.0.0/16 -104.108.0.0/16 -104.109.0.0/16 -104.109.235.0/24 -104.110.0.0/16 -104.111.0.0/16 -104.111.200.0/24 -104.112.0.0/16 -104.113.0.0/16 -104.115.0.0/16 -104.115.118.0/24 -104.115.209.0/24 -104.116.0.0/16 -104.116.243.0/24 -104.117.0.0/16 -104.118.0.0/16 -104.118.6.0/24 -104.118.112.0/24 -104.119.0.0/16 -104.120.0.0/16 -104.121.0.0/16 -104.121.76.0/24 -104.122.0.0/16 -104.123.0.0/16 -104.124.0.0/16 -104.126.0.0/16 -104.127.0.0/16 -104.155.6.0/24 -104.155.7.0/24 -104.155.12.0/24 -104.155.23.0/24 -104.155.24.0/24 -104.155.28.0/24 -104.155.31.0/24 -104.155.36.0/24 -104.155.37.0/24 -104.155.41.0/24 -104.155.64.0/24 -104.155.75.0/24 -104.155.77.0/24 -104.155.86.0/24 -104.155.97.0/24 -104.155.102.0/24 -104.155.116.0/24 -104.155.119.0/24 -104.155.120.0/24 -104.155.123.0/24 -104.155.125.0/24 -104.199.1.0/24 -104.199.11.0/24 -104.199.12.0/24 -104.199.14.0/24 -104.199.17.0/24 -104.199.23.0/24 -104.199.26.0/24 -104.199.35.0/24 -104.199.36.0/24 -104.199.38.0/24 -104.199.66.0/24 -104.199.75.0/24 -104.199.76.0/24 -104.199.86.0/24 -104.199.92.0/24 -104.199.95.0/24 -104.199.104.0/24 -104.199.107.0/24 -104.208.80.0/24 -104.208.96.0/24 -104.214.128.0/24 -104.215.0.0/16 -106.10.36.136/32 -106.10.39.82/32 -106.10.40.0/24 -106.10.41.0/24 -106.10.42.0/24 -106.10.43.0/24 -106.10.44.0/24 -106.10.46.0/24 -106.10.48.0/21 -106.10.49.0/24 -106.15.0.0/16 -107.20.0.0/14 -107.20.0.0/16 -110.45.0.0/16 -111.221.64.0/24 -111.221.69.0/24 -112.121.79.0/24 -115.29.141.0/24 -115.223.0.0/16 -117.103.0.0/16 -117.103.182.0/24 -118.155.0.0/16 -118.155.230.0/24 -118.214.0.0/16 -118.215.0.0/16 -119.28.149.0/24 -119.28.150.0/24 -119.28.156.0/24 -119.28.160.0/24 -119.28.163.0/24 -119.28.226.0/24 -119.42.60.0/24 -119.81.0.0/16 -119.81.39.0/24 -119.81.69.0/24 -119.81.76.0/24 -119.81.82.0/24 -119.81.171.0/24 -119.81.227.0/24 -121.78.55.0/24 -121.156.0.0/16 -121.169.159.0/24 -122.248.192.0/18 -122.248.192.0/24 -122.252.0.0/16 -125.56.0.0/16 -125.56.200.0/24 -125.56.201.0/24 -125.56.227.0/24 -125.252.0.0/16 -128.241.0.0/16 -128.241.91.0/24 -130.211.49.0/24 -130.211.52.0/24 -130.211.56.0/24 -130.211.61.0/24 -130.211.98.0/24 -130.211.99.0/24 -130.211.101.0/24 -130.211.102.0/24 -130.211.104.0/24 -130.211.111.0/24 -134.170.192.0/24 -137.116.160.0/24 -138.91.16.0/24 -139.175.0.0/16 -139.175.87.0/24 -140.174.11.0/24 -141.0.0.0/4 -141.0.168.0/24 -143.204.0.0/16 -145.239.8.0/24 -146.66.0.0/16 -146.66.152.0/24 -146.148.6.0/24 -146.148.10.0/24 -146.148.14.0/24 -146.148.28.0/24 -146.148.31.0/24 -146.148.121.0/24 -146.148.127.0/24 -149.202.197.0/24 -152.199.0.0/16 -152.199.38.120/32 -153.254.0.0/16 -153.254.86.0/24 -155.133.0.0/16 -155.133.227.0/24 -155.133.229.0/24 -155.133.230.0/24 -155.133.238.0/24 -155.133.242.0/24 -155.133.245.0/24 -155.133.248.0/24 -155.133.254.0/24 -161.202.0.0/16 -161.202.47.0/24 -161.202.52.0/24 -161.202.61.0/24 -161.202.101.0/24 -162.14.18.74/32 -162.14.18.124/32 -162.254.0.0/16 -162.254.193.0/24 -162.254.195.0/24 -162.254.196.0/24 -162.254.197.0/24 -165.254.0.0/16 -165.254.12.0/24 -165.254.26.0/24 -165.254.105.0/24 -165.254.134.0/24 -165.254.146.0/24 -165.254.238.0/24 -165.254.247.0/24 -168.63.128.0/24 -168.63.128.96/32 -168.63.128.128/32 -168.63.129.0/24 -168.63.129.80/32 -168.63.129.96/32 -168.63.129.128/32 -168.63.130.0/24 -168.63.132.0/24 -168.63.136.0/24 -168.63.144.0/24 -168.63.192.0/24 -169.51.50.0/24 -169.51.51.0/24 -169.56.0.0/16 -169.56.1.0/24 -169.56.2.0/24 -169.56.3.0/24 -169.56.4.0/24 -169.56.5.0/24 -169.56.6.0/24 -169.56.7.0/24 -169.56.8.0/24 -169.56.9.0/24 -169.56.10.0/24 -169.56.11.0/24 -169.56.12.0/24 -169.56.13.0/24 -169.56.14.0/24 -169.56.15.0/24 -169.56.16.0/24 -169.56.17.0/24 -169.56.18.0/24 -169.56.19.0/24 -169.56.20.0/24 -169.56.21.0/24 -169.56.22.0/24 -169.56.23.0/24 -169.56.24.0/24 -169.56.25.0/24 -169.56.26.0/24 -169.56.27.0/24 -169.56.28.0/24 -169.56.29.0/24 -169.56.30.0/24 -169.56.31.0/24 -169.56.32.0/24 -169.56.33.0/24 -169.56.34.0/24 -169.56.35.0/24 -169.56.36.0/24 -169.56.37.0/24 -169.56.38.0/24 -169.56.39.0/24 -169.56.40.0/24 -169.56.41.0/24 -169.56.42.0/24 -169.56.43.0/24 -169.56.44.0/24 -169.56.45.0/24 -169.56.46.0/24 -169.56.47.0/24 -169.56.48.0/24 -169.56.49.0/24 -169.56.50.0/24 -169.56.51.0/24 -169.56.52.0/24 -169.56.53.0/24 -169.56.54.0/24 -169.56.55.0/24 -169.56.56.0/24 -169.56.57.0/24 -169.56.58.0/24 -169.56.59.0/24 -169.56.60.0/24 -169.56.61.0/24 -169.56.62.0/24 -169.56.63.0/24 -169.56.64.0/24 -169.56.65.0/24 -169.56.66.0/24 -169.56.67.0/24 -169.56.68.0/24 -169.56.69.0/24 -169.56.70.0/24 -169.56.71.0/24 -169.56.72.0/24 -169.56.73.0/24 -169.56.74.0/24 -169.56.75.0/24 -169.56.76.0/24 -169.56.77.0/24 -169.56.78.0/24 -169.56.79.0/24 -169.56.80.0/24 -169.56.81.0/24 -169.56.82.0/24 -169.56.83.0/24 -169.56.84.0/24 -169.56.85.0/24 -169.56.86.0/24 -169.56.87.0/24 -169.56.88.0/24 -169.56.89.0/24 -169.56.90.0/24 -169.56.91.0/24 -169.56.92.0/24 -169.56.93.0/24 -169.56.94.0/24 -169.56.95.0/24 -169.56.96.0/24 -169.56.97.0/24 -169.56.98.0/24 -169.56.99.0/24 -169.56.100.0/24 -169.56.101.0/24 -169.56.102.0/24 -169.56.103.0/24 -169.56.104.0/24 -169.56.105.0/24 -169.56.106.0/24 -169.56.107.0/24 -169.56.108.0/24 -169.56.109.0/24 -169.56.110.0/24 -169.56.111.0/24 -169.56.112.0/24 -169.56.113.0/24 -169.56.114.0/24 -169.56.115.0/24 -169.56.116.0/24 -169.56.117.0/24 -169.56.118.0/24 -169.56.119.0/24 -169.56.120.0/24 -169.56.121.0/24 -169.56.122.0/24 -169.56.123.0/24 -169.56.124.0/24 -169.56.125.0/24 -169.56.126.0/24 -169.56.127.0/24 -169.56.160.0/24 -169.56.161.0/24 -169.56.162.0/24 -169.56.163.0/24 -169.56.164.0/24 -169.56.165.0/24 -169.56.166.0/24 -169.56.167.0/24 -169.56.168.0/24 -169.56.169.0/24 -169.56.170.0/24 -169.56.171.0/24 -169.56.172.0/24 -169.56.173.0/24 -169.56.174.0/24 -169.56.175.0/24 -169.56.176.0/24 -169.56.177.0/24 -169.56.178.0/24 -169.56.179.0/24 -169.56.180.0/24 -169.56.181.0/24 -169.56.182.0/24 -169.56.183.0/24 -169.56.184.0/24 -169.56.185.0/24 -169.56.186.0/24 -169.56.187.0/24 -169.56.188.0/24 -169.56.189.0/24 -169.56.190.0/24 -169.56.191.0/24 -172.0.0.0/4 -172.96.97.0/24 -172.96.98.0/24 -172.224.0.0/16 -172.226.0.0/16 -172.227.0.0/16 -172.228.0.0/16 -172.229.0.0/16 -172.230.0.0/16 -172.231.0.0/16 -172.255.224.0/24 -172.255.226.0/24 -172.255.227.0/24 -172.255.229.0/24 -173.0.0.0/4 -173.197.0.0/16 -173.197.192.0/24 -173.205.0.0/16 -173.205.6.0/24 -173.205.14.0/24 -173.222.0.0/16 -173.222.108.0/24 -173.223.0.0/16 -173.252.0.0/16 -174.36.0.0/16 -174.36.196.242/32 -174.69.172.0/24 -174.129.0.0/16 -175.41.128.0/18 -175.41.128.0/24 -175.41.192.0/24 -175.99.0.0/16 -175.139.0.0/16 -176.32.64.0/24 -176.32.96.0/24 -176.32.104.0/24 -176.32.120.0/24 -176.34.0.0/16 -176.34.32.0/24 -176.34.64.0/24 -176.34.128.0/24 -177.71.128.0/24 -177.72.240.0/24 -178.236.0.0/16 -182.50.136.0/24 -182.162.0.0/16 -182.162.106.0/24 -184.0.0.0/4 -184.24.0.0/16 -184.25.0.0/16 -184.25.56.0/23 -184.25.56.0/24 -184.25.205.0/24 -184.26.0.0/16 -184.26.114.0/24 -184.29.0.0/16 -184.29.59.0/24 -184.30.0.0/16 -184.30.226.0/24 -184.31.0.0/16 -184.50.0.0/16 -184.50.87.0/24 -184.51.0.0/16 -184.51.1.0/24 -184.51.15.0/24 -184.51.198.0/24 -184.51.200.0/24 -184.72.64.0/18 -184.72.64.0/24 -184.72.128.0/17 -184.72.128.0/24 -184.73.0.0/16 -184.84.0.0/16 -184.85.0.0/16 -184.85.120.0/24 -184.87.0.0/16 -185.25.0.0/16 -185.25.180.0/24 -185.27.0.0/16 -185.27.16.0/24 -185.48.120.0/24 -185.80.220.0/24 -185.80.221.0/24 -185.88.0.0/16 -185.88.181.0/24 -185.143.16.0/24 -185.225.208.0/24 -188.42.39.0/24 -188.42.40.0/24 -188.42.41.0/24 -188.42.42.0/24 -188.42.172.0/24 -188.42.174.0/24 -188.93.59.0/24 -191.233.32.0/24 -191.234.2.16/32 -191.234.2.64/32 -191.234.2.128/32 -191.234.3.0/24 -191.234.16.0/24 -191.237.236.0/24 -191.237.238.0/24 -191.237.238.32/32 -191.237.238.64/32 -191.237.238.112/32 -191.238.68.0/24 -191.238.80.0/24 -191.238.88.0/24 -191.238.92.0/24 -191.239.96.0/24 -192.81.0.0/16 -192.81.222.0/24 -192.204.26.0/24 -197.165.7.0/24 -198.41.0.0/16 -198.87.0.0/16 -198.87.188.0/24 -198.172.0.0/16 -198.172.88.0/24 -199.0.0.0/4 -199.239.0.0/16 -199.239.182.0/24 -203.69.0.0/16 -203.69.81.0/24 -203.83.220.0/24 -203.195.120.0/24 -204.1.136.0/24 -204.236.192.0/18 -204.236.192.0/24 -204.246.164.0/22 -204.246.168.0/22 -204.246.172.0/23 -204.246.174.0/23 -204.246.176.0/20 -205.168.236.0/24 -205.186.0.0/16 -205.197.0.0/16 -205.197.140.0/24 -205.251.192.0/19 -205.251.215.0/24 -205.251.224.0/24 -205.251.240.0/24 -205.251.244.0/24 -205.251.247.0/24 -205.251.248.0/24 -205.251.249.0/24 -205.251.250.0/23 -205.251.252.0/23 -205.251.254.0/24 -207.46.87.0/24 -207.46.89.16/32 -207.46.95.48/32 -207.46.128.0/24 -207.109.221.0/24 -207.171.160.0/24 -207.171.176.0/24 -208.0.0.0/4 -208.64.0.0/16 -208.64.201.0/24 -208.78.0.0/16 -208.78.164.0/24 -208.185.115.0/24 -209.133.57.0/24 -209.170.0.0/16 -209.170.97.0/24 -210.61.0.0/16 -210.61.248.0/24 -210.201.0.0/16 -210.201.31.0/24 -211.43.13.0/24 -216.3.0.0/16 -216.3.133.0/24 -216.137.32.0/19 -216.137.61.0/24 -216.156.0.0/16 -216.156.211.0/24 -216.182.224.0/21 -216.182.224.0/24 -216.182.232.0/22 -216.182.238.0/23 -223.119.0.0/16 -223.119.50.0/24 \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/Steam.rules b/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/Steam.rules deleted file mode 100644 index 417e71919e..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/game_rules/Steam.rules +++ /dev/null @@ -1,949 +0,0 @@ -#Steam,Steam-社区(Beta),0,0,1,0,0,0,By-FQrabbit -2.16.4.0/24 -2.16.10.0/24 -2.16.17.0/24 -2.16.21.0/24 -2.16.39.0/24 -2.16.59.0/24 -2.16.82.0/24 -2.16.95.0/24 -2.16.104.0/23 -2.16.111.0/24 -2.17.55.0/24 -2.17.98.0/24 -2.17.191.0/24 -2.18.119.0/24 -2.18.152.0/24 -2.18.199.0/24 -2.19.131.0/24 -2.19.147.0/24 -2.19.225.0/24 -2.20.57.0/24 -2.20.166.0/24 -2.20.177.0/24 -2.20.200.0/24 -2.20.214.0/24 -2.21.31.0/24 -2.21.46.0/24 -2.21.75.0/24 -2.21.131.0/24 -2.21.145.0/24 -2.21.150.0/24 -2.21.195.0/24 -2.21.205.0/24 -2.21.248.0/24 -2.22.13.0/24 -2.22.15.0/24 -2.22.36.0/24 -2.22.69.0/24 -2.22.73.0/24 -2.22.74.0/23 -2.22.146.0/24 -2.23.151.0/24 -2.23.181.0/24 -8.7.198.0/24 -14.21.78.0/24 -23.0.7.0/24 -23.0.21.0/24 -23.0.83.0/24 -23.0.146.0/24 -23.0.168.0/24 -23.0.178.0/24 -23.0.232.0/24 -23.0.252.0/24 -23.1.15.0/24 -23.1.26.0/24 -23.1.45.0/24 -23.1.227.0/24 -23.2.8.0/24 -23.2.11.0/24 -23.2.16.0/24 -23.2.18.0/24 -23.2.29.0/24 -23.2.42.0/24 -23.2.59.0/24 -23.2.92.0/24 -23.2.204.0/24 -23.2.206.0/24 -23.3.244.0/24 -23.4.168.0/24 -23.4.251.0/24 -23.5.114.0/24 -23.5.117.0/24 -23.5.156.0/24 -23.5.170.0/24 -23.5.241.0/24 -23.5.242.0/24 -23.7.39.0/24 -23.7.80.0/24 -23.7.128.0/24 -23.7.199.0/24 -23.7.246.0/24 -23.8.12.0/24 -23.8.117.0/24 -23.8.229.0/24 -23.9.9.0/24 -23.9.154.0/24 -23.10.0.0/16 -23.11.202.0/24 -23.11.204.0/24 -23.11.225.0/24 -23.11.236.0/24 -23.12.34.0/24 -23.12.109.0/24 -23.12.227.0/24 -23.12.229.0/24 -23.13.147.0/24 -23.14.6.0/24 -23.14.10.0/24 -23.14.68.0/24 -23.14.77.0/24 -23.14.85.0/24 -23.14.222.0/24 -23.14.229.0/24 -23.15.4.0/24 -23.15.81.0/24 -23.15.91.0/24 -23.15.94.0/24 -23.15.98.0/23 -23.15.184.0/24 -23.15.187.0/24 -23.15.224.0/24 -23.32.17.0/24 -23.32.86.0/24 -23.32.113.0/24 -23.32.131.0/24 -23.32.163.0/24 -23.32.215.0/24 -23.32.216.0/24 -23.32.248.0/24 -23.32.254.0/24 -23.33.75.0/24 -23.33.88.0/24 -23.33.112.0/24 -23.33.168.0/24 -23.33.255.0/24 -23.34.60.0/24 -23.34.65.0/24 -23.34.75.0/24 -23.35.225.0/24 -23.35.230.0/24 -23.36.26.0/24 -23.36.105.0/24 -23.36.141.0/24 -23.36.148.0/24 -23.36.165.0/24 -23.36.216.0/24 -23.36.220.0/24 -23.36.230.0/23 -23.37.53.0/24 -23.37.58.0/24 -23.37.67.0/24 -23.37.147.0/24 -23.37.148.0/24 -23.37.237.0/24 -23.37.239.0/24 -23.37.242.0/23 -23.37.249.0/24 -23.37.250.0/24 -23.38.3.0/24 -23.38.77.0/24 -23.38.109.0/24 -23.38.153.0/24 -23.38.155.0/24 -23.38.166.0/24 -23.39.136.0/24 -23.40.1.0/24 -23.40.4.0/24 -23.40.31.0/24 -23.40.247.0/24 -23.41.5.0/24 -23.41.59.0/24 -23.41.102.0/24 -23.41.132.0/24 -23.41.149.0/24 -23.41.165.0/24 -23.41.243.0/24 -23.42.6.0/24 -23.42.69.0/24 -23.42.83.0/24 -23.42.165.0/24 -23.42.212.0/24 -23.42.232.0/24 -23.42.248.0/24 -23.43.0.0/16 -23.44.193.0/24 -23.45.96.0/24 -23.45.201.0/24 -23.46.18.0/24 -23.46.24.0/24 -23.46.104.0/24 -23.46.241.0/24 -23.47.0.0/16 -23.48.4.0/24 -23.48.219.0/24 -23.49.4.0/24 -23.49.119.0/24 -23.49.135.0/24 -23.49.148.0/24 -23.49.224.0/24 -23.50.18.0/24 -23.50.37.0/24 -23.50.43.0/24 -23.50.69.0/24 -23.50.168.0/24 -23.51.39.0/24 -23.51.122.0/24 -23.51.131.0/24 -23.51.134.0/23 -23.51.154.0/24 -23.51.240.0/24 -23.51.246.0/24 -23.52.37.0/24 -23.52.51.0/24 -23.52.74.0/24 -23.52.82.0/24 -23.52.86.0/24 -23.53.33.0/24 -23.53.73.0/24 -23.53.195.0/24 -23.54.176.0/24 -23.54.179.0/24 -23.54.199.0/24 -23.54.247.0/24 -23.54.248.0/24 -23.54.250.0/24 -23.55.48.0/24 -23.55.53.0/24 -23.55.60.0/24 -23.55.139.0/24 -23.55.235.0/24 -23.56.115.0/24 -23.56.208.0/24 -23.57.32.0/24 -23.57.64.0/23 -23.57.230.0/24 -23.57.251.0/24 -23.58.0.0/24 -23.58.27.0/24 -23.58.36.0/24 -23.58.41.0/24 -23.58.75.0/24 -23.58.80.0/24 -23.58.154.0/24 -23.59.57.0/24 -23.59.96.0/24 -23.59.117.0/24 -23.60.41.0/24 -23.60.48.0/24 -23.60.123.0/24 -23.60.131.0/24 -23.61.10.0/24 -23.61.74.0/24 -23.61.161.0/24 -23.62.53.0/24 -23.62.102.0/24 -23.62.109.0/24 -23.62.145.0/24 -23.62.152.0/24 -23.63.11.0/24 -23.63.22.0/24 -23.63.32.0/24 -23.63.219.0/24 -23.63.228.0/24 -23.64.22.0/24 -23.64.34.0/24 -23.64.37.0/24 -23.64.38.0/24 -23.64.127.0/24 -23.64.158.0/24 -23.64.178.0/24 -23.65.80.0/24 -23.65.190.0/24 -23.65.225.0/24 -23.66.0.0/16 -23.67.65.0/24 -23.67.67.0/24 -23.67.69.0/24 -23.67.72.0/24 -23.67.76.0/24 -23.67.130.0/24 -23.67.161.0/24 -23.67.200.0/24 -23.67.204.0/24 -23.67.217.0/24 -23.72.20.0/24 -23.72.36.0/24 -23.72.58.0/24 -23.72.80.0/24 -23.72.92.0/24 -23.72.138.0/24 -23.72.156.0/24 -23.72.226.0/24 -23.72.250.0/24 -23.73.29.0/24 -23.73.77.0/24 -23.73.85.0/24 -23.73.137.0/24 -23.73.139.0/24 -23.73.144.0/24 -23.73.153.0/24 -23.73.168.0/24 -23.73.170.0/24 -23.73.199.0/24 -23.73.206.0/24 -23.74.15.0/24 -23.74.17.0/24 -23.74.57.0/24 -23.74.60.0/24 -23.74.138.0/24 -23.74.162.0/24 -23.74.170.0/24 -23.74.237.0/24 -23.75.12.0/24 -23.75.14.0/24 -23.75.30.0/24 -23.75.186.0/24 -23.75.210.0/24 -23.75.212.0/24 -23.75.216.0/23 -23.76.253.0/24 -23.77.32.0/24 -23.77.202.0/24 -23.77.208.0/24 -23.77.214.0/24 -23.78.23.0/24 -23.78.39.0/24 -23.78.54.0/24 -23.78.86.0/24 -23.78.117.0/24 -23.78.168.0/24 -23.79.15.0/24 -23.79.19.0/24 -23.79.68.0/24 -23.192.26.0/24 -23.192.38.0/24 -23.192.114.0/24 -23.192.116.0/24 -23.192.126.0/24 -23.192.168.0/24 -23.192.245.0/24 -23.193.64.0/24 -23.193.162.0/24 -23.193.168.0/24 -23.193.171.0/24 -23.193.175.0/24 -23.194.66.0/24 -23.194.88.0/24 -23.194.212.0/24 -23.194.216.0/24 -23.196.4.0/24 -23.196.56.0/24 -23.196.199.0/24 -23.196.214.0/24 -23.196.244.0/24 -23.197.49.0/24 -23.198.97.0/24 -23.198.108.0/24 -23.198.121.0/24 -23.198.213.0/24 -23.198.214.0/24 -23.199.7.0/24 -23.199.10.0/24 -23.199.67.0/24 -23.199.134.0/24 -23.199.138.0/24 -23.199.149.0/24 -23.199.152.0/24 -23.199.154.0/24 -23.199.207.0/24 -23.199.232.0/24 -23.199.234.0/24 -23.199.242.0/24 -23.199.248.0/24 -23.200.18.0/24 -23.200.26.0/24 -23.200.94.0/24 -23.200.103.0/24 -23.200.140.0/24 -23.201.23.0/24 -23.201.41.0/24 -23.201.103.0/24 -23.201.254.0/24 -23.202.39.0/24 -23.202.69.0/24 -23.202.70.0/24 -23.202.83.0/24 -23.202.117.0/24 -23.202.124.0/24 -23.202.128.0/24 -23.202.139.0/24 -23.202.143.0/24 -23.203.26.0/23 -23.203.50.0/24 -23.203.52.0/24 -23.203.62.0/24 -23.203.84.0/24 -23.203.132.0/24 -23.203.255.0/24 -23.204.36.0/24 -23.204.104.0/23 -23.204.148.0/24 -23.204.239.0/24 -23.205.26.0/24 -23.205.35.0/24 -23.205.132.0/24 -23.205.140.0/24 -23.205.226.0/24 -23.206.10.0/24 -23.206.13.0/24 -23.206.35.0/24 -23.206.51.0/24 -23.206.66.0/24 -23.206.90.0/24 -23.206.95.0/24 -23.206.112.0/24 -23.206.126.0/24 -23.206.169.0/24 -23.206.192.0/24 -23.206.197.0/24 -23.206.198.0/24 -23.206.211.0/24 -23.206.239.0/24 -23.206.246.0/24 -23.207.179.0/24 -23.208.28.0/24 -23.208.34.0/24 -23.208.36.0/24 -23.208.102.0/24 -23.208.123.0/24 -23.208.136.0/24 -23.208.138.0/24 -23.208.215.0/24 -23.208.228.0/24 -23.208.235.0/24 -23.209.75.0/24 -23.209.184.0/24 -23.210.0.0/24 -23.210.3.0/24 -23.210.203.0/24 -23.211.16.0/24 -23.211.40.0/24 -23.211.56.0/24 -23.211.106.0/24 -23.211.140.0/24 -23.211.150.0/24 -23.211.152.0/24 -23.212.53.0/24 -23.212.110.0/24 -23.212.141.0/24 -23.212.171.0/24 -23.213.53.0/24 -23.213.55.0/24 -23.213.138.0/24 -23.213.158.0/24 -23.213.176.0/24 -23.214.27.0/24 -23.214.43.0/24 -23.214.51.0/24 -23.214.66.0/24 -23.214.74.0/24 -23.214.102.0/23 -23.214.116.0/24 -23.214.165.0/24 -23.214.172.0/24 -23.215.0.0/24 -23.215.52.0/24 -23.215.57.0/24 -23.215.105.0/24 -23.215.130.0/24 -23.216.8.0/24 -23.216.202.0/24 -23.217.43.0/24 -23.217.106.0/24 -23.217.143.0/24 -23.217.226.0/24 -23.218.40.0/24 -23.218.144.0/24 -23.218.158.0/24 -23.218.215.0/24 -23.219.212.0/24 -23.220.38.0/24 -23.220.46.0/24 -23.220.181.0/24 -23.220.195.0/24 -23.220.206.0/24 -23.221.3.0/24 -23.221.17.0/24 -23.221.45.0/24 -23.221.46.0/24 -23.221.66.0/24 -23.221.154.0/24 -23.222.27.0/24 -23.222.61.0/24 -23.222.132.0/24 -23.222.161.0/24 -23.222.172.0/24 -23.222.195.0/24 -23.223.65.0/24 -23.223.75.0/24 -23.223.99.0/24 -31.13.0.0/16 -37.10.124.0/24 -45.121.186.0/24 -46.82.0.0/16 -59.24.0.0/16 -60.254.131.0/24 -60.254.171.0/24 -61.213.168.0/24 -63.146.69.0/24 -63.219.254.0/24 -63.243.244.0/24 -64.13.0.0/16 -65.158.114.0/24 -66.220.0.0/16 -67.15.0.0/16 -67.131.44.0/24 -67.228.0.0/16 -69.16.175.0/24 -69.63.0.0/16 -69.171.0.0/16 -69.192.12.0/24 -69.192.44.0/24 -72.165.61.0/24 -72.246.62.0/24 -72.246.91.0/24 -72.246.106.0/24 -72.246.167.0/24 -72.246.169.0/24 -72.246.174.0/24 -72.246.189.0/24 -72.246.190.0/24 -72.246.224.0/24 -72.247.90.0/24 -72.247.192.0/23 -72.247.198.0/24 -74.86.0.0/16 -74.201.99.0/24 -75.126.0.0/16 -78.16.49.0/24 -84.53.134.0/24 -85.190.158.0/24 -88.191.0.0/16 -88.221.34.0/24 -88.221.37.0/24 -88.221.71.0/24 -88.221.99.0/24 -88.221.172.0/24 -88.221.175.0/24 -88.221.195.0/24 -88.221.198.0/23 -92.122.5.0/24 -92.122.254.0/24 -92.123.123.0/24 -92.123.176.0/24 -92.123.208.0/24 -95.100.3.0/24 -95.100.60.0/24 -95.100.97.0/24 -95.100.142.0/24 -95.101.30.0/24 -95.101.51.0/24 -95.101.166.0/24 -95.101.199.0/24 -95.101.241.0/24 -95.101.247.0/24 -96.6.89.0/24 -96.6.161.0/24 -96.7.0.0/16 -96.16.160.0/24 -96.16.184.0/24 -96.16.186.0/24 -96.16.221.0/24 -96.17.38.0/24 -96.17.109.0/24 -96.17.210.0/24 -103.28.54.0/24 -103.74.6.0/24 -104.65.15.0/24 -104.66.5.0/24 -104.66.7.0/24 -104.66.36.0/24 -104.66.44.0/24 -104.66.140.0/24 -104.67.26.0/24 -104.67.37.0/24 -104.67.57.0/24 -104.67.152.0/24 -104.68.176.0/24 -104.68.183.0/24 -104.68.189.0/24 -104.69.0.0/16 -104.70.69.0/24 -104.70.154.0/24 -104.70.200.0/24 -104.70.204.0/24 -104.70.207.0/24 -104.71.138.0/24 -104.71.152.0/24 -104.71.213.0/24 -104.72.60.0/24 -104.72.63.0/24 -104.72.154.0/24 -104.72.156.0/24 -104.73.12.0/24 -104.74.0.0/16 -104.75.37.0/24 -104.75.57.0/24 -104.75.65.0/24 -104.75.228.0/24 -104.76.18.0/24 -104.76.58.0/24 -104.76.65.0/24 -104.76.88.0/24 -104.76.111.0/24 -104.76.114.0/24 -104.76.133.0/24 -104.77.22.0/24 -104.78.0.0/16 -104.79.88.0/24 -104.79.128.0/24 -104.79.153.0/24 -104.80.3.0/24 -104.80.29.0/24 -104.80.37.0/24 -104.80.53.0/24 -104.80.59.0/24 -104.80.64.0/24 -104.80.66.0/24 -104.80.88.0/24 -104.81.11.0/24 -104.81.23.0/24 -104.81.120.0/24 -104.81.126.0/24 -104.81.137.0/24 -104.81.141.0/24 -104.81.244.0/23 -104.82.83.0/24 -104.82.89.0/24 -104.82.180.0/23 -104.82.245.0/24 -104.82.247.0/24 -104.83.70.0/24 -104.83.83.0/24 -104.83.89.0/24 -104.83.100.0/24 -104.83.102.0/24 -104.84.154.0/24 -104.84.169.0/24 -104.84.187.0/24 -104.85.41.0/24 -104.85.50.0/24 -104.85.52.0/23 -104.85.172.0/24 -104.85.174.0/24 -104.86.44.0/23 -104.86.110.0/24 -104.86.250.0/24 -104.87.39.0/24 -104.87.102.0/24 -104.87.227.0/24 -104.87.228.0/24 -104.88.0.0/16 -104.89.8.0/24 -104.89.18.0/24 -104.89.38.0/23 -104.89.40.0/24 -104.89.143.0/24 -104.90.20.0/24 -104.90.24.0/24 -104.90.44.0/24 -104.90.49.0/24 -104.90.96.0/24 -104.90.100.0/24 -104.90.104.0/24 -104.90.140.0/24 -104.90.143.0/24 -104.90.180.0/24 -104.91.170.0/24 -104.91.217.0/24 -104.91.233.0/24 -104.92.6.0/24 -104.92.80.0/24 -104.92.90.0/24 -104.92.102.0/24 -104.92.123.0/24 -104.92.136.0/24 -104.92.153.0/24 -104.93.0.0/16 -104.94.2.0/24 -104.94.8.0/24 -104.94.18.0/24 -104.94.110.0/24 -104.94.173.0/24 -104.94.204.0/24 -104.95.20.0/24 -104.95.24.0/24 -104.95.59.0/24 -104.95.98.0/24 -104.95.110.0/24 -104.95.119.0/24 -104.95.197.0/24 -104.95.227.0/24 -104.96.0.0/16 -104.97.66.0/24 -104.97.113.0/24 -104.97.226.0/24 -104.97.228.0/24 -104.98.0.0/15 -104.100.51.0/24 -104.100.52.0/24 -104.100.187.0/24 -104.101.203.0/24 -104.102.10.0/24 -104.102.56.0/24 -104.103.52.0/24 -104.103.58.0/24 -104.103.70.0/24 -104.103.106.0/24 -104.103.157.0/24 -104.104.162.0/24 -104.104.187.0/24 -104.105.7.0/24 -104.105.10.0/24 -104.105.28.0/24 -104.105.58.0/24 -104.105.148.0/24 -104.105.153.0/24 -104.106.200.0/24 -104.106.236.0/24 -104.107.7.0/24 -104.107.52.0/23 -104.107.108.0/24 -104.107.168.0/23 -104.107.248.0/24 -104.108.46.0/24 -104.108.52.0/24 -104.108.69.0/24 -104.109.55.0/24 -104.109.66.0/24 -104.109.82.0/24 -104.109.130.0/24 -104.109.139.0/24 -104.109.142.0/24 -104.109.160.0/24 -104.109.208.0/24 -104.109.235.0/24 -104.110.104.0/24 -104.111.200.0/24 -104.111.247.0/24 -104.112.150.0/24 -104.112.238.0/24 -104.113.52.0/24 -104.113.62.0/24 -104.113.115.0/24 -104.115.83.0/24 -104.115.92.0/24 -104.115.97.0/24 -104.115.118.0/24 -104.115.125.0/24 -104.115.175.0/24 -104.115.209.0/24 -104.115.227.0/24 -104.115.233.0/24 -104.115.253.0/24 -104.116.0.0/24 -104.116.18.0/24 -104.116.70.0/24 -104.116.130.0/24 -104.116.145.0/24 -104.116.217.0/24 -104.116.243.0/24 -104.116.246.0/24 -104.116.251.0/24 -104.117.0.0/24 -104.117.65.0/24 -104.117.95.0/24 -104.117.105.0/24 -104.117.140.0/24 -104.118.6.0/24 -104.118.28.0/24 -104.118.96.0/24 -104.118.103.0/24 -104.118.112.0/24 -104.119.40.0/24 -104.119.181.0/24 -104.120.78.0/24 -104.120.86.0/24 -104.120.92.0/24 -104.120.143.0/24 -104.120.178.0/24 -104.120.219.0/24 -104.121.21.0/24 -104.121.70.0/24 -104.121.122.0/24 -104.121.226.0/24 -104.121.232.0/24 -104.121.249.0/24 -104.122.2.0/24 -104.122.10.0/24 -104.122.102.0/24 -104.122.198.0/24 -104.122.203.0/24 -104.122.220.0/24 -104.122.255.0/24 -104.123.122.0/24 -104.124.27.0/24 -104.124.49.0/24 -104.124.119.0/24 -104.124.134.0/24 -104.124.139.0/24 -104.124.182.0/24 -104.124.211.0/24 -104.124.228.0/24 -104.125.0.0/16 -104.126.21.0/24 -104.126.83.0/24 -104.127.43.0/24 -104.127.62.0/24 -104.127.119.0/24 -104.127.221.0/24 -106.15.109.0/24 -110.45.200.0/24 -115.223.23.0/24 -117.103.182.0/24 -118.155.230.0/24 -118.214.82.0/24 -118.214.249.0/24 -118.215.92.0/24 -118.215.97.0/24 -118.215.176.0/24 -121.156.60.0/24 -122.252.43.0/24 -125.56.227.0/24 -125.252.235.0/24 -128.241.91.0/24 -139.175.87.0/24 -141.0.168.0/24 -146.66.152.0/24 -152.199.38.0/24 -153.254.86.0/24 -155.133.227.0/24 -155.133.229.0/24 -155.133.230.0/24 -155.133.238.0/24 -155.133.242.0/24 -155.133.254.0/24 -162.254.193.0/24 -162.254.195.0/24 -162.254.196.0/23 -165.254.12.0/24 -165.254.105.0/24 -165.254.134.0/24 -172.16.0.0/16 -172.19.83.0/24 -172.224.1.0/24 -172.224.11.0/24 -172.226.72.0/24 -172.226.220.0/24 -172.227.13.0/24 -172.227.150.0/24 -172.227.171.0/24 -172.228.232.0/24 -172.229.58.0/24 -172.230.102.0/24 -172.230.106.0/24 -172.230.108.0/24 -172.230.172.0/24 -172.231.9.0/24 -173.197.192.0/24 -173.205.6.0/24 -173.222.1.0/24 -173.222.43.0/24 -173.222.193.0/24 -173.222.225.0/24 -173.222.237.0/24 -173.223.81.0/24 -173.223.87.0/24 -173.223.164.0/24 -173.252.0.0/16 -174.36.0.0/15 -175.99.100.0/24 -175.99.115.0/24 -175.139.142.0/24 -182.162.106.0/24 -184.24.26.0/24 -184.24.104.0/24 -184.24.110.0/24 -184.24.155.0/24 -184.24.195.0/24 -184.24.223.0/24 -184.25.19.0/24 -184.25.56.0/24 -184.25.61.0/24 -184.25.91.0/24 -184.25.146.0/24 -184.25.158.0/24 -184.25.205.0/24 -184.25.221.0/24 -184.25.243.0/24 -184.25.248.0/24 -184.25.252.0/23 -184.26.22.0/24 -184.26.84.0/24 -184.26.114.0/24 -184.26.120.0/24 -184.26.140.0/23 -184.26.221.0/24 -184.27.0.0/16 -184.28.0.0/16 -184.29.37.0/24 -184.29.59.0/24 -184.29.108.0/24 -184.29.150.0/24 -184.30.6.0/24 -184.30.19.0/24 -184.30.20.0/24 -184.30.226.0/24 -184.31.201.0/24 -184.50.2.0/24 -184.50.87.0/24 -184.50.163.0/24 -184.51.0.0/24 -184.51.15.0/24 -184.51.17.0/24 -184.51.56.0/24 -184.51.141.0/24 -184.84.56.0/24 -184.84.168.0/24 -184.85.67.0/24 -184.85.120.0/24 -184.85.244.0/24 -184.86.0.0/16 -184.87.14.0/24 -184.87.121.0/24 -184.87.197.0/24 -185.25.180.0/24 -185.27.16.0/24 -185.88.181.0/24 -192.81.222.0/24 -198.172.88.0/24 -199.16.0.0/16 -199.59.0.0/16 -199.239.182.0/24 -203.69.81.0/24 -205.186.152.0/24 -208.43.0.0/16 -208.64.201.0/24 -208.78.164.0/24 -208.101.0.0/16 -209.170.97.0/24 -210.61.248.0/24 -210.201.31.0/24 -216.3.133.0/24 -216.156.211.0/24 -223.119.157.0/24 -223.119.206.0/24 -223.119.217.0/24 -224.0.0.0/4 -243.185.187.0/24 diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/China.yaml b/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/China.yaml deleted file mode 100644 index f09a433cf1..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/China.yaml +++ /dev/null @@ -1,327 +0,0 @@ -payload: - # China Area Network - # > 360 - - DOMAIN-SUFFIX,qhres.com - - DOMAIN-SUFFIX,qhimg.com - # > Alibaba - # USER-AGENT,%E4%BC%98%E9%85%B7* - - DOMAIN-SUFFIX,alibaba.com - - DOMAIN-SUFFIX,alibabausercontent.com - - DOMAIN-SUFFIX,alicdn.com - - DOMAIN-SUFFIX,alikunlun.com - - DOMAIN-SUFFIX,alipay.com - - DOMAIN-SUFFIX,amap.com - - DOMAIN-SUFFIX,autonavi.com - - DOMAIN-SUFFIX,dingtalk.com - - DOMAIN-SUFFIX,mxhichina.com - - DOMAIN-SUFFIX,soku.com - - DOMAIN-SUFFIX,taobao.com - - DOMAIN-SUFFIX,tmall.com - - DOMAIN-SUFFIX,tmall.hk - - DOMAIN-SUFFIX,ykimg.com - - DOMAIN-SUFFIX,youku.com - - DOMAIN-SUFFIX,xiami.com - - DOMAIN-SUFFIX,xiami.net - # > Apple - - DOMAIN-SUFFIX,aaplimg.com - - DOMAIN-SUFFIX,apple.co - - DOMAIN-SUFFIX,apple.com - - DOMAIN-SUFFIX,apple-cloudkit.com - - DOMAIN-SUFFIX,appstore.com - - DOMAIN-SUFFIX,cdn-apple.com - - DOMAIN-SUFFIX,icloud.com - - DOMAIN-SUFFIX,icloud-content.com - - DOMAIN-SUFFIX,me.com - - DOMAIN-SUFFIX,mzstatic.com - - DOMAIN-KEYWORD,apple.com.akadns.net - - DOMAIN-KEYWORD,icloud.com.akadns.net - # > Baidu - - DOMAIN-SUFFIX,baidu.com - - DOMAIN-SUFFIX,baidubcr.com - - DOMAIN-SUFFIX,bdstatic.com - - DOMAIN-SUFFIX,yunjiasu-cdn.net - # > bilibili - - DOMAIN-SUFFIX,acgvideo.com - - DOMAIN-SUFFIX,biliapi.com - - DOMAIN-SUFFIX,biliapi.net - - DOMAIN-SUFFIX,bilibili.com - - DOMAIN-SUFFIX,bilibili.tv - - DOMAIN-SUFFIX,hdslb.com - # > ByteDance - - DOMAIN-SUFFIX,feiliao.com - - DOMAIN-SUFFIX,pstatp.com - - DOMAIN-SUFFIX,snssdk.com - - DOMAIN-SUFFIX,iesdouyin.com - - DOMAIN-SUFFIX,toutiao.com - # > CCTV - - DOMAIN-SUFFIX,cctv.com - - DOMAIN-SUFFIX,cctvpic.com - - DOMAIN-SUFFIX,livechina.com - # > DiDi - - DOMAIN-SUFFIX,didialift.com - - DOMAIN-SUFFIX,didiglobal.com - - DOMAIN-SUFFIX,udache.com - # > 蛋蛋赞 - - DOMAIN-SUFFIX,343480.com - - DOMAIN-SUFFIX,baduziyuan.com - - DOMAIN-SUFFIX,com-hs-hkdy.com - - DOMAIN-SUFFIX,czybjz.com - - DOMAIN-SUFFIX,dandanzan.com - - DOMAIN-SUFFIX,fjhps.com - - DOMAIN-SUFFIX,kuyunbo.club - - DOMAIN-SUFFIX,youkutv.cc - # > ChinaTelecom - - DOMAIN-SUFFIX,21cn.com - # > HunanTV - - DOMAIN-SUFFIX,hitv.com - - DOMAIN-SUFFIX,mgtv.com - # > iQiyi - - DOMAIN-SUFFIX,iqiyi.com - - DOMAIN-SUFFIX,iqiyipic.com - - DOMAIN-SUFFIX,71.am - # > JD - - DOMAIN-SUFFIX,jd.com - - DOMAIN-SUFFIX,jd.hk - - DOMAIN-SUFFIX,jdpay.com - - DOMAIN-SUFFIX,360buyimg.com - # > Kingsoft - - DOMAIN-SUFFIX,iciba.com - - DOMAIN-SUFFIX,ksosoft.com - # > Meitu - - DOMAIN-SUFFIX,meitu.com - - DOMAIN-SUFFIX,meitudata.com - - DOMAIN-SUFFIX,meitustat.com - - DOMAIN-SUFFIX,meipai.com - # > MI - - DOMAIN-SUFFIX,duokan.com - - DOMAIN-SUFFIX,mi.com - - DOMAIN-SUFFIX,mi-img.com - - DOMAIN-SUFFIX,miui.com - - DOMAIN-SUFFIX,miwifi.com - - DOMAIN-SUFFIX,xiaomi.com - - DOMAIN-SUFFIX,xiaomi.net - # > Microsoft - - DOMAIN-SUFFIX,microsoft.com - - DOMAIN-SUFFIX,msecnd.net - - DOMAIN-SUFFIX,office365.com - - DOMAIN-SUFFIX,outlook.com - - DOMAIN-SUFFIX,s-microsoft.com - - DOMAIN-SUFFIX,visualstudio.com - - DOMAIN-SUFFIX,windows.com - - DOMAIN-SUFFIX,windowsupdate.com - # - DOMAIN-KEYWORD,-microsoft-com.akamaized.net - # > NetEase - # USER-AGENT,NeteaseMusic* - # USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90* - - DOMAIN-SUFFIX,163.com - - DOMAIN-SUFFIX,126.com - - DOMAIN-SUFFIX,126.net - - DOMAIN-SUFFIX,127.net - - DOMAIN-SUFFIX,163yun.com - - DOMAIN-SUFFIX,lofter.com - - DOMAIN-SUFFIX,netease.com - - DOMAIN-SUFFIX,ydstatic.com - # > PayPal - # USER-AGENT,PayPal* - - DOMAIN-SUFFIX,paypal.com - - DOMAIN-SUFFIX,paypal.me - - DOMAIN-SUFFIX,paypalobjects.com - # > Sina - - DOMAIN-SUFFIX,sina.com - - DOMAIN-SUFFIX,weibo.com - - DOMAIN-SUFFIX,weibocdn.com - # > Sohu - - DOMAIN-SUFFIX,sohu.com - - DOMAIN-SUFFIX,sohucs.com - - DOMAIN-SUFFIX,sohu-inc.com - - DOMAIN-SUFFIX,v-56.com - # > Sogo - - DOMAIN-SUFFIX,sogo.com - - DOMAIN-SUFFIX,sogou.com - - DOMAIN-SUFFIX,sogoucdn.com - # > Tencent - # USER-AGENT,MicroMessenger%20Client - # USER-AGENT,WeChat* - # USER-AGENT,%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1* - - DOMAIN-SUFFIX,gtimg.com - - DOMAIN-SUFFIX,idqqimg.com - - DOMAIN-SUFFIX,igamecj.com - - DOMAIN-SUFFIX,myapp.com - - DOMAIN-SUFFIX,myqcloud.com - - DOMAIN-SUFFIX,qq.com - - DOMAIN-SUFFIX,qqmail.com - - DOMAIN-SUFFIX,servicewechat.com - - DOMAIN-SUFFIX,tencent.com - - DOMAIN-SUFFIX,tencent-cloud.net - - DOMAIN-SUFFIX,tenpay.com - - DOMAIN-SUFFIX,wechat.com - - DOMAIN,file-igamecj.akamaized.net - # > Content Delivery Network - - DOMAIN-SUFFIX,ccgslb.com - - DOMAIN-SUFFIX,ccgslb.net - - DOMAIN-SUFFIX,chinanetcenter.com - - DOMAIN-SUFFIX,meixincdn.com - - DOMAIN-SUFFIX,ourdvs.com - - DOMAIN-SUFFIX,staticdn.net - - DOMAIN-SUFFIX,wangsu.com - # > IP Query - - DOMAIN-SUFFIX,ipip.net - - DOMAIN-SUFFIX,ip.la - - DOMAIN-SUFFIX,ip.sb - - DOMAIN-SUFFIX,ip-cdn.com - - DOMAIN-SUFFIX,ipv6-test.com - - DOMAIN-SUFFIX,test-ipv6.com - - DOMAIN-SUFFIX,whatismyip.com - - DOMAIN,ip.istatmenus.app - # > Speed Test - # - DOMAIN-SUFFIX,speedtest.net - - DOMAIN-SUFFIX,netspeedtestmaster.com - - DOMAIN,speedtest.macpaw.com - # > Private Tracker - - DOMAIN-SUFFIX,animebytes.tv - - DOMAIN-SUFFIX,awesome-hd.me - - DOMAIN-SUFFIX,broadcasthe.net - - DOMAIN-SUFFIX,chdbits.co - - DOMAIN-SUFFIX,classix-unlimited.co.uk - - DOMAIN-SUFFIX,empornium.me - - DOMAIN-SUFFIX,gazellegames.net - - DOMAIN-SUFFIX,hdchina.org - - DOMAIN-SUFFIX,hdsky.me - - DOMAIN-SUFFIX,hdhome.org - - DOMAIN-SUFFIX,hdbits.org - - DOMAIN-SUFFIX,icetorrent.org - - DOMAIN-SUFFIX,jpopsuki.eu - - DOMAIN-SUFFIX,keepfrds.com - - DOMAIN-SUFFIX,madsrevolution.net - - DOMAIN-SUFFIX,myanonamouse.net - - DOMAIN-SUFFIX,m-team.cc - - DOMAIN-SUFFIX,morethan.tv - - DOMAIN-SUFFIX,nanyangpt.com - - DOMAIN-SUFFIX,ncore.cc - - DOMAIN-SUFFIX,open.cd - - DOMAIN-SUFFIX,ourbits.club - - DOMAIN-SUFFIX,passthepopcorn.me - - DOMAIN-SUFFIX,privatehd.to - - DOMAIN-SUFFIX,pterclub.com - - DOMAIN-SUFFIX,redacted.ch - - DOMAIN-SUFFIX,springsunday.net - - DOMAIN-SUFFIX,tjupt.org - - DOMAIN-SUFFIX,totheglory.im - # > Other - - DOMAIN-SUFFIX,cn - # - DOMAIN-SUFFIX,vmware.com - - DOMAIN-SUFFIX,115.com - - DOMAIN-SUFFIX,360in.com - - DOMAIN-SUFFIX,51ym.me - - DOMAIN-SUFFIX,8686c.com - - DOMAIN-SUFFIX,abchina.com - - DOMAIN-SUFFIX,accuweather.com - - DOMAIN-SUFFIX,aicoinstorge.com - - DOMAIN-SUFFIX,air-matters.com - - DOMAIN-SUFFIX,air-matters.io - - DOMAIN-SUFFIX,aixifan.com - - DOMAIN-SUFFIX,amd.com - - DOMAIN-SUFFIX,b612.net - - DOMAIN-SUFFIX,bdatu.com - - DOMAIN-SUFFIX,beitaichufang.com - - DOMAIN-SUFFIX,bjango.com - - DOMAIN-SUFFIX,booking.com - - DOMAIN-SUFFIX,bstatic.com - - DOMAIN-SUFFIX,cailianpress.com - - DOMAIN-SUFFIX,camera360.com - - DOMAIN-SUFFIX,chaoxing.com - - DOMAIN-SUFFIX,chinaso.com - - DOMAIN-SUFFIX,chuimg.com - - DOMAIN-SUFFIX,chunyu.mobi - - DOMAIN-SUFFIX,chushou.tv - - DOMAIN-SUFFIX,cmbchina.com - - DOMAIN-SUFFIX,cmbimg.com - - DOMAIN-SUFFIX,ctrip.com - - DOMAIN-SUFFIX,dfcfw.com - - DOMAIN-SUFFIX,docschina.org - - DOMAIN-SUFFIX,douban.com - - DOMAIN-SUFFIX,doubanio.com - - DOMAIN-SUFFIX,douyu.com - - DOMAIN-SUFFIX,dxycdn.com - - DOMAIN-SUFFIX,dytt8.net - - DOMAIN-SUFFIX,eastmoney.com - - DOMAIN-SUFFIX,eudic.net - - DOMAIN-SUFFIX,feng.com - - DOMAIN-SUFFIX,fengkongcloud.com - - DOMAIN-SUFFIX,frdic.com - - DOMAIN-SUFFIX,futu5.com - - DOMAIN-SUFFIX,futunn.com - - DOMAIN-SUFFIX,gandi.net - - DOMAIN-SUFFIX,gcores.com - - DOMAIN-SUFFIX,geilicdn.com - - DOMAIN-SUFFIX,getpricetag.com - - DOMAIN-SUFFIX,gifshow.com - - DOMAIN-SUFFIX,godic.net - - DOMAIN-SUFFIX,hicloud.com - - DOMAIN-SUFFIX,hongxiu.com - - DOMAIN-SUFFIX,hostbuf.com - - DOMAIN-SUFFIX,huxiucdn.com - - DOMAIN-SUFFIX,huya.com - - DOMAIN-SUFFIX,ibm.com - - DOMAIN-SUFFIX,infinitynewtab.com - - DOMAIN-SUFFIX,ithome.com - - DOMAIN-SUFFIX,java.com - - DOMAIN-SUFFIX,jianguoyun.com - - DOMAIN-SUFFIX,jianshu.io - - DOMAIN-SUFFIX,jidian.im - - DOMAIN-SUFFIX,kaiyanapp.com - - DOMAIN-SUFFIX,kaspersky-labs.com - - DOMAIN-SUFFIX,keepcdn.com - - DOMAIN-SUFFIX,kkmh.com - - DOMAIN-SUFFIX,licdn.com - - DOMAIN-SUFFIX,linkedin.com - - DOMAIN-SUFFIX,loli.net - - DOMAIN-SUFFIX,luojilab.com - - DOMAIN-SUFFIX,maoyan.com - - DOMAIN-SUFFIX,maoyun.tv - - DOMAIN-SUFFIX,meituan.com - - DOMAIN-SUFFIX,meituan.net - - DOMAIN-SUFFIX,mls-cdn.com - - DOMAIN-SUFFIX,mobike.com - - DOMAIN-SUFFIX,moke.com - - DOMAIN-SUFFIX,mubu.com - - DOMAIN-SUFFIX,myzaker.com - - DOMAIN-SUFFIX,nim-lang-cn.org - - DOMAIN-SUFFIX,nvidia.com - - DOMAIN-SUFFIX,oracle.com - - DOMAIN-SUFFIX,plex.tv - - DOMAIN-SUFFIX,qdaily.com - - DOMAIN-SUFFIX,qidian.com - - DOMAIN-SUFFIX,qyer.com - - DOMAIN-SUFFIX,qyerstatic.com - - DOMAIN-SUFFIX,raychase.net - - DOMAIN-SUFFIX,ronghub.com - - DOMAIN-SUFFIX,ruguoapp.com - - DOMAIN-SUFFIX,sankuai.com - - DOMAIN-SUFFIX,scomper.me - - DOMAIN-SUFFIX,seafile.com - - DOMAIN-SUFFIX,sm.ms - - DOMAIN-SUFFIX,smzdm.com - - DOMAIN-SUFFIX,snapdrop.net - - DOMAIN-SUFFIX,snwx.com - - DOMAIN-SUFFIX,s-reader.com - - DOMAIN-SUFFIX,sspai.com - - DOMAIN-SUFFIX,takungpao.com - - DOMAIN-SUFFIX,teamviewer.com - - DOMAIN-SUFFIX,tianyancha.com - - DOMAIN-SUFFIX,udacity.com - - DOMAIN-SUFFIX,uning.com - - DOMAIN-SUFFIX,weather.com - - DOMAIN-SUFFIX,weico.cc - - DOMAIN-SUFFIX,weidian.com - - DOMAIN-SUFFIX,xiachufang.com - - DOMAIN-SUFFIX,ximalaya.com - - DOMAIN-SUFFIX,xinhuanet.com - - DOMAIN-SUFFIX,xmcdn.com - - DOMAIN-SUFFIX,yangkeduo.com - - DOMAIN-SUFFIX,zhangzishi.cc - - DOMAIN-SUFFIX,zhihu.com - - DOMAIN-SUFFIX,zhimg.com - - DOMAIN-SUFFIX,zhuihd.com - - DOMAIN,download.jetbrains.com - - DOMAIN,images-cn.ssl-images-amazon.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/ChinaIP.yaml b/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/ChinaIP.yaml deleted file mode 100644 index af12e0638d..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/ChinaIP.yaml +++ /dev/null @@ -1,5973 +0,0 @@ -payload: - # > ChinaIP by ipipdotnet - # 用于(可选)替代 GeoIP 使用 - - '1.0.1.0/24' - - '1.0.2.0/23' - - '1.0.8.0/21' - - '1.0.32.0/19' - - '1.1.0.0/24' - - '1.1.2.0/23' - - '1.1.4.0/22' - - '1.1.8.0/21' - - '1.1.16.0/20' - - '1.1.32.0/19' - - '1.2.0.0/23' - - '1.2.2.0/24' - - '1.2.4.0/22' - - '1.2.8.0/21' - - '1.2.16.0/20' - - '1.2.32.0/19' - - '1.2.64.0/18' - - '1.3.0.0/16' - - '1.4.1.0/24' - - '1.4.2.0/23' - - '1.4.4.0/22' - - '1.4.8.0/21' - - '1.4.16.0/20' - - '1.4.32.0/19' - - '1.4.64.0/18' - - '1.8.0.0/16' - - '1.10.0.0/21' - - '1.10.8.0/23' - - '1.10.11.0/24' - - '1.10.12.0/22' - - '1.10.16.0/20' - - '1.10.32.0/19' - - '1.10.64.0/18' - - '1.12.0.0/14' - - '1.18.128.0/24' - - '1.24.0.0/13' - - '1.45.0.0/16' - - '1.48.0.0/14' - - '1.56.0.0/13' - - '1.68.0.0/14' - - '1.80.0.0/12' - - '1.116.0.0/15' - - '1.118.1.0/24' - - '1.118.2.0/23' - - '1.118.4.0/22' - - '1.118.8.0/21' - - '1.118.16.0/20' - - '1.118.32.0/19' - - '1.118.64.0/18' - - '1.118.128.0/17' - - '1.119.0.0/16' - - '1.180.0.0/14' - - '1.184.0.0/15' - - '1.188.0.0/14' - - '1.192.0.0/13' - - '1.202.0.0/15' - - '1.204.0.0/14' - - '3.5.214.0/23' - - '3.5.216.0/24' - - '8.128.0.0/10' - - '8.209.40.0/21' - - '14.0.0.0/21' - - '14.0.12.0/22' - - '14.1.0.0/22' - - '14.1.24.0/22' - - '14.1.108.0/22' - - '14.16.0.0/12' - - '14.102.128.0/22' - - '14.102.180.0/22' - - '14.103.0.0/16' - - '14.104.0.0/13' - - '14.112.0.0/12' - - '14.130.0.0/15' - - '14.134.0.0/15' - - '14.144.0.0/12' - - '14.192.60.0/22' - - '14.192.76.0/22' - - '14.196.0.0/15' - - '14.204.0.0/15' - - '14.208.0.0/12' - - '15.230.41.0/24' - - '15.230.49.0/24' - - '20.81.0.0/24' - - '20.139.160.0/20' - - '20.249.255.0/24' - - '20.251.0.0/22' - - '27.0.128.0/22' - - '27.0.132.0/24' - - '27.0.134.0/23' - - '27.0.160.0/21' - - '27.0.188.0/22' - - '27.0.204.0/22' - - '27.0.208.0/21' - - '27.8.0.0/13' - - '27.16.0.0/12' - - '27.34.232.0/21' - - '27.36.0.0/14' - - '27.40.0.0/13' - - '27.50.40.0/21' - - '27.50.128.0/17' - - '27.54.72.0/21' - - '27.54.152.0/21' - - '27.54.192.0/18' - - '27.98.208.0/20' - - '27.98.224.0/19' - - '27.99.128.0/17' - - '27.103.0.0/16' - - '27.106.128.0/18' - - '27.106.204.0/22' - - '27.109.32.0/19' - - '27.109.124.0/22' - - '27.112.0.0/18' - - '27.112.80.0/20' - - '27.112.112.0/21' - - '27.113.128.0/18' - - '27.115.0.0/17' - - '27.116.44.0/22' - - '27.121.72.0/21' - - '27.121.120.0/21' - - '27.128.0.0/15' - - '27.131.220.0/22' - - '27.144.0.0/16' - - '27.148.0.0/14' - - '27.152.0.0/13' - - '27.184.0.0/13' - - '27.192.0.0/11' - - '27.224.0.0/14' - - '36.0.0.0/22' - - '36.0.16.0/20' - - '36.0.32.0/19' - - '36.0.64.0/18' - - '36.0.128.0/17' - - '36.1.0.0/16' - - '36.4.0.0/14' - - '36.16.0.0/12' - - '36.32.0.0/14' - - '36.36.0.0/16' - - '36.37.0.0/19' - - '36.37.36.0/23' - - '36.37.39.0/24' - - '36.37.40.0/21' - - '36.37.48.0/20' - - '36.40.0.0/13' - - '36.48.0.0/15' - - '36.51.0.0/17' - - '36.51.128.0/18' - - '36.51.192.0/19' - - '36.51.224.0/20' - - '36.51.240.0/21' - - '36.51.248.0/22' - - '36.51.252.0/23' - - '36.56.0.0/13' - - '36.96.0.0/11' - - '36.128.0.0/10' - - '36.192.0.0/11' - - '36.248.0.0/14' - - '36.254.0.0/16' - - '36.255.116.0/22' - - '36.255.128.0/22' - - '36.255.164.0/22' - - '36.255.172.0/22' - - '36.255.176.0/22' - - '38.142.239.114/32' - - '39.0.0.0/24' - - '39.0.2.0/23' - - '39.0.4.0/22' - - '39.0.8.0/21' - - '39.0.16.0/20' - - '39.0.32.0/19' - - '39.0.64.0/18' - - '39.0.128.0/17' - - '39.64.0.0/11' - - '39.96.0.0/16' - - '39.97.0.0/17' - - '39.97.128.0/18' - - '39.97.192.0/21' - - '39.97.200.0/22' - - '39.97.208.0/20' - - '39.97.224.0/19' - - '39.98.0.0/15' - - '39.100.0.0/14' - - '39.104.0.0/14' - - '39.108.0.0/16' - - '39.109.120.0/23' - - '39.128.0.0/10' - - '40.0.176.0/20' - - '40.0.247.0/24' - - '40.0.248.0/22' - - '40.0.252.0/23' - - '40.0.255.0/24' - - '40.72.0.0/15' - - '40.77.136.112/28' - - '40.77.236.224/27' - - '40.77.254.64/27' - - '40.125.128.0/17' - - '40.126.64.0/18' - - '40.198.10.0/24' - - '40.198.16.0/21' - - '40.198.24.0/23' - - '40.251.225.0/24' - - '40.251.227.0/24' - - '42.0.0.0/22' - - '42.0.8.0/21' - - '42.0.16.0/21' - - '42.0.24.0/22' - - '42.0.32.0/19' - - '42.0.128.0/17' - - '42.1.0.0/19' - - '42.1.32.0/20' - - '42.1.48.0/21' - - '42.1.56.0/22' - - '42.4.0.0/14' - - '42.48.0.0/13' - - '42.56.0.0/14' - - '42.62.0.0/17' - - '42.62.128.0/19' - - '42.62.160.0/20' - - '42.62.180.0/22' - - '42.62.184.0/21' - - '42.63.0.0/16' - - '42.80.0.0/15' - - '42.83.64.0/20' - - '42.83.80.0/22' - - '42.83.88.0/21' - - '42.83.96.0/19' - - '42.83.128.0/23' - - '42.83.134.0/24' - - '42.83.139.0/24' - - '42.83.140.0/22' - - '42.83.144.0/20' - - '42.83.160.0/19' - - '42.83.192.0/18' - - '42.84.0.0/14' - - '42.88.0.0/13' - - '42.96.64.0/19' - - '42.96.96.0/21' - - '42.96.108.0/22' - - '42.96.112.0/20' - - '42.96.128.0/17' - - '42.97.0.0/16' - - '42.99.0.0/18' - - '42.99.64.0/19' - - '42.99.96.0/20' - - '42.99.112.0/22' - - '42.99.120.0/21' - - '42.100.0.0/14' - - '42.120.0.0/15' - - '42.122.0.0/16' - - '42.123.0.0/19' - - '42.123.36.0/22' - - '42.123.40.0/21' - - '42.123.48.0/20' - - '42.123.64.0/18' - - '42.123.128.0/17' - - '42.128.0.0/12' - - '42.156.0.0/19' - - '42.156.36.0/22' - - '42.156.40.0/21' - - '42.156.48.0/20' - - '42.156.64.0/18' - - '42.156.128.0/17' - - '42.157.0.0/21' - - '42.157.8.0/22' - - '42.157.14.0/23' - - '42.157.16.0/20' - - '42.157.32.0/19' - - '42.157.64.0/18' - - '42.157.128.0/17' - - '42.158.0.0/15' - - '42.160.0.0/12' - - '42.176.0.0/13' - - '42.184.0.0/15' - - '42.186.0.0/16' - - '42.187.0.0/18' - - '42.187.64.0/19' - - '42.187.96.0/20' - - '42.187.112.0/21' - - '42.187.120.0/22' - - '42.187.128.0/17' - - '42.192.0.0/13' - - '42.201.0.0/17' - - '42.202.0.0/15' - - '42.204.0.0/14' - - '42.208.0.0/12' - - '42.224.0.0/12' - - '42.240.0.0/16' - - '42.242.0.0/15' - - '42.244.0.0/15' - - '42.246.0.0/16' - - '42.247.0.0/22' - - '42.247.4.0/24' - - '42.247.5.0/25' - - '42.247.5.128/26' - - '42.247.5.204/30' - - '42.247.5.208/28' - - '42.247.5.224/27' - - '42.247.6.0/23' - - '42.247.8.0/21' - - '42.247.16.0/20' - - '42.247.32.0/19' - - '42.247.64.0/18' - - '42.247.128.0/17' - - '42.248.0.0/13' - - '43.0.0.0/9' - - '43.224.12.0/22' - - '43.224.24.0/22' - - '43.224.44.0/22' - - '43.224.52.0/22' - - '43.224.56.0/22' - - '43.224.68.0/22' - - '43.224.72.0/22' - - '43.224.80.0/22' - - '43.224.100.0/22' - - '43.224.144.0/22' - - '43.224.161.0/24' - - '43.224.176.0/22' - - '43.224.184.0/22' - - '43.224.200.0/21' - - '43.224.208.0/21' - - '43.224.216.0/22' - - '43.224.240.0/22' - - '43.225.76.0/22' - - '43.225.86.0/24' - - '43.225.120.0/22' - - '43.225.180.0/22' - - '43.225.208.0/22' - - '43.225.216.0/21' - - '43.225.224.0/20' - - '43.225.240.0/21' - - '43.225.252.0/22' - - '43.226.32.0/19' - - '43.226.64.0/19' - - '43.226.96.0/20' - - '43.226.112.0/21' - - '43.226.120.0/22' - - '43.226.128.0/19' - - '43.226.160.0/21' - - '43.226.236.0/22' - - '43.226.240.0/20' - - '43.227.0.0/21' - - '43.227.8.0/22' - - '43.227.32.0/19' - - '43.227.64.0/19' - - '43.227.104.0/22' - - '43.227.136.0/21' - - '43.227.144.0/22' - - '43.227.152.0/21' - - '43.227.160.0/20' - - '43.227.176.0/21' - - '43.227.188.0/22' - - '43.227.192.0/19' - - '43.227.232.0/22' - - '43.227.248.0/21' - - '43.228.0.0/18' - - '43.228.64.0/21' - - '43.228.76.0/22' - - '43.228.100.0/22' - - '43.228.116.0/24' - - '43.228.118.0/23' - - '43.228.132.0/22' - - '43.228.136.0/22' - - '43.228.148.0/22' - - '43.228.152.0/22' - - '43.228.188.0/22' - - '43.229.40.0/22' - - '43.229.48.0/22' - - '43.229.56.0/22' - - '43.229.96.0/22' - - '43.229.136.0/21' - - '43.229.168.0/21' - - '43.229.176.0/20' - - '43.229.192.0/21' - - '43.229.216.0/21' - - '43.229.232.0/21' - - '43.230.20.0/22' - - '43.230.32.0/22' - - '43.230.68.0/22' - - '43.230.72.0/22' - - '43.230.84.0/22' - - '43.230.124.0/22' - - '43.230.220.0/22' - - '43.230.224.0/19' - - '43.231.32.0/20' - - '43.231.80.0/20' - - '43.231.96.0/20' - - '43.231.136.0/21' - - '43.231.144.0/20' - - '43.231.160.0/20' - - '43.231.176.0/21' - - '43.236.0.0/15' - - '43.238.0.0/16' - - '43.239.0.0/19' - - '43.239.32.0/20' - - '43.239.48.0/22' - - '43.239.116.0/22' - - '43.239.120.0/22' - - '43.239.172.0/22' - - '43.240.0.0/22' - - '43.240.56.0/21' - - '43.240.68.0/22' - - '43.240.72.0/21' - - '43.240.84.0/22' - - '43.240.124.0/22' - - '43.240.128.0/21' - - '43.240.136.0/22' - - '43.240.156.0/22' - - '43.240.160.0/19' - - '43.240.192.0/19' - - '43.240.240.0/20' - - '43.241.0.0/20' - - '43.241.16.0/21' - - '43.241.48.0/22' - - '43.241.76.0/22' - - '43.241.80.0/20' - - '43.241.112.0/22' - - '43.241.168.0/21' - - '43.241.176.0/21' - - '43.241.184.0/22' - - '43.241.208.0/20' - - '43.241.224.0/20' - - '43.241.240.0/22' - - '43.241.248.0/22' - - '43.242.8.0/21' - - '43.242.16.0/20' - - '43.242.48.0/22' - - '43.242.53.0/24' - - '43.242.54.0/24' - - '43.242.56.0/21' - - '43.242.64.0/22' - - '43.242.72.0/21' - - '43.242.80.0/20' - - '43.242.96.0/22' - - '43.242.144.0/20' - - '43.242.160.0/21' - - '43.242.180.0/22' - - '43.242.188.0/22' - - '43.242.192.0/21' - - '43.242.204.0/22' - - '43.242.216.0/21' - - '43.242.252.0/22' - - '43.243.4.0/22' - - '43.243.8.0/21' - - '43.243.16.0/22' - - '43.243.88.0/22' - - '43.243.128.0/22' - - '43.243.136.0/22' - - '43.243.144.0/21' - - '43.243.156.0/22' - - '43.243.180.0/22' - - '43.243.228.0/22' - - '43.243.232.0/22' - - '43.243.244.0/22' - - '43.246.0.0/18' - - '43.246.64.0/19' - - '43.246.96.0/22' - - '43.246.147.0/24' - - '43.246.148.0/24' - - '43.246.150.0/24' - - '43.246.151.0/30' - - '43.246.151.4/32' - - '43.246.151.6/31' - - '43.246.151.8/29' - - '43.246.151.16/28' - - '43.246.151.32/27' - - '43.246.151.64/26' - - '43.246.151.128/25' - - '43.246.228.0/22' - - '43.247.4.0/22' - - '43.247.8.0/22' - - '43.247.44.0/22' - - '43.247.48.0/22' - - '43.247.68.0/22' - - '43.247.76.0/22' - - '43.247.84.0/22' - - '43.247.88.0/21' - - '43.247.96.0/21' - - '43.247.108.0/22' - - '43.247.112.0/22' - - '43.247.148.0/22' - - '43.247.152.0/22' - - '43.247.176.0/20' - - '43.247.196.0/22' - - '43.247.200.0/21' - - '43.247.208.0/20' - - '43.247.224.0/19' - - '43.248.0.0/21' - - '43.248.20.0/22' - - '43.248.28.0/22' - - '43.248.48.0/22' - - '43.248.76.0/22' - - '43.248.80.0/20' - - '43.248.96.0/19' - - '43.248.128.0/20' - - '43.248.144.0/21' - - '43.248.176.0/20' - - '43.248.192.0/20' - - '43.248.208.0/22' - - '43.248.228.0/22' - - '43.248.232.0/22' - - '43.248.244.0/22' - - '43.249.4.0/22' - - '43.249.120.0/22' - - '43.249.132.0/22' - - '43.249.136.0/22' - - '43.249.144.0/20' - - '43.249.160.0/21' - - '43.249.168.0/22' - - '43.249.192.0/22' - - '43.249.236.0/22' - - '43.250.4.0/22' - - '43.250.12.0/22' - - '43.250.16.0/21' - - '43.250.28.0/22' - - '43.250.32.0/22' - - '43.250.96.0/21' - - '43.250.108.0/22' - - '43.250.112.0/21' - - '43.250.128.0/22' - - '43.250.144.0/21' - - '43.250.160.0/22' - - '43.250.168.0/22' - - '43.250.176.0/22' - - '43.250.200.0/22' - - '43.250.212.0/22' - - '43.250.216.0/21' - - '43.250.236.0/22' - - '43.250.244.0/22' - - '43.251.4.0/22' - - '43.251.36.0/22' - - '43.251.192.0/22' - - '43.251.232.0/22' - - '43.251.244.0/22' - - '43.252.48.0/22' - - '43.252.56.0/22' - - '43.252.224.0/22' - - '43.254.0.0/21' - - '43.254.8.0/22' - - '43.254.24.0/22' - - '43.254.36.0/22' - - '43.254.44.0/22' - - '43.254.52.0/22' - - '43.254.64.0/22' - - '43.254.72.0/22' - - '43.254.84.0/22' - - '43.254.88.0/21' - - '43.254.100.0/22' - - '43.254.104.0/22' - - '43.254.112.0/21' - - '43.254.128.0/22' - - '43.254.136.0/21' - - '43.254.144.0/20' - - '43.254.168.0/21' - - '43.254.180.0/22' - - '43.254.184.0/21' - - '43.254.192.0/22' - - '43.254.200.0/22' - - '43.254.208.0/22' - - '43.254.220.0/22' - - '43.254.224.0/20' - - '43.254.240.0/22' - - '43.254.248.0/21' - - '43.255.0.0/21' - - '43.255.8.0/22' - - '43.255.16.0/22' - - '43.255.48.0/22' - - '43.255.64.0/20' - - '43.255.84.0/22' - - '43.255.96.0/22' - - '43.255.144.0/22' - - '43.255.176.0/22' - - '43.255.184.0/22' - - '43.255.192.0/22' - - '43.255.200.0/21' - - '43.255.208.0/21' - - '43.255.224.0/21' - - '43.255.232.0/22' - - '43.255.244.0/22' - - '45.40.192.0/20' - - '45.40.208.0/21' - - '45.40.224.0/19' - - '45.65.16.0/20' - - '45.87.53.0/24' - - '45.87.54.0/23' - - '45.112.132.0/22' - - '45.112.188.0/22' - - '45.112.208.0/20' - - '45.112.228.0/22' - - '45.112.232.0/21' - - '45.113.12.0/22' - - '45.113.16.0/20' - - '45.113.40.0/22' - - '45.113.52.0/22' - - '45.113.72.0/22' - - '45.113.144.0/21' - - '45.113.168.0/22' - - '45.113.184.0/22' - - '45.113.200.0/21' - - '45.113.208.0/20' - - '45.113.240.0/22' - - '45.113.252.0/22' - - '45.114.0.0/22' - - '45.114.32.0/22' - - '45.114.52.0/22' - - '45.114.96.0/22' - - '45.114.136.0/22' - - '45.114.196.0/22' - - '45.114.200.0/22' - - '45.114.228.0/22' - - '45.114.237.0/24' - - '45.114.238.0/23' - - '45.114.252.0/22' - - '45.115.44.0/22' - - '45.115.100.0/22' - - '45.115.120.0/22' - - '45.115.132.0/22' - - '45.115.144.0/22' - - '45.115.156.0/22' - - '45.115.164.0/22' - - '45.115.200.0/22' - - '45.115.212.0/22' - - '45.115.244.0/22' - - '45.115.248.0/22' - - '45.116.16.0/22' - - '45.116.24.0/22' - - '45.116.32.0/21' - - '45.116.52.0/22' - - '45.116.96.0/21' - - '45.116.140.0/22' - - '45.116.152.0/22' - - '45.116.208.0/22' - - '45.117.8.0/22' - - '45.117.20.0/22' - - '45.117.68.0/22' - - '45.117.124.0/22' - - '45.117.252.0/22' - - '45.119.60.0/22' - - '45.119.64.0/21' - - '45.119.72.0/22' - - '45.119.104.0/22' - - '45.119.232.0/22' - - '45.120.100.0/22' - - '45.120.140.0/22' - - '45.120.164.0/22' - - '45.120.180.128/27' - - '45.120.240.0/22' - - '45.121.52.0/22' - - '45.121.64.0/21' - - '45.121.72.0/22' - - '45.121.92.0/22' - - '45.121.96.0/22' - - '45.121.172.0/22' - - '45.121.176.0/22' - - '45.121.240.0/20' - - '45.122.0.0/19' - - '45.122.32.0/21' - - '45.122.40.0/22' - - '45.122.60.0/22' - - '45.122.64.0/19' - - '45.122.96.0/20' - - '45.122.112.0/21' - - '45.122.160.0/19' - - '45.122.192.0/20' - - '45.122.208.0/21' - - '45.122.216.0/22' - - '45.123.28.0/22' - - '45.123.32.0/21' - - '45.123.44.0/22' - - '45.123.48.0/20' - - '45.123.64.0/20' - - '45.123.80.0/21' - - '45.123.120.0/22' - - '45.123.128.0/21' - - '45.123.136.0/22' - - '45.123.148.0/22' - - '45.123.152.0/21' - - '45.123.164.0/22' - - '45.123.168.0/21' - - '45.123.176.0/21' - - '45.123.184.0/22' - - '45.123.204.0/22' - - '45.123.212.0/22' - - '45.123.224.0/19' - - '45.124.0.0/22' - - '45.124.20.0/22' - - '45.124.28.0/22' - - '45.124.32.0/21' - - '45.124.44.0/22' - - '45.124.68.0/22' - - '45.124.76.0/22' - - '45.124.80.0/22' - - '45.124.100.0/22' - - '45.124.124.0/22' - - '45.124.172.0/22' - - '45.124.176.0/22' - - '45.124.208.0/22' - - '45.124.248.0/22' - - '45.125.24.0/22' - - '45.125.44.0/22' - - '45.125.52.0/22' - - '45.125.56.0/22' - - '45.125.76.0/22' - - '45.125.80.0/20' - - '45.125.96.0/21' - - '45.125.136.0/22' - - '45.126.48.0/21' - - '45.126.108.0/22' - - '45.126.112.0/21' - - '45.126.120.0/22' - - '45.126.220.0/22' - - '45.127.8.0/21' - - '45.127.128.0/22' - - '45.127.144.0/21' - - '45.127.156.0/22' - - '45.248.8.0/22' - - '45.248.80.0/22' - - '45.248.88.0/22' - - '45.248.96.0/20' - - '45.248.128.0/21' - - '45.248.204.0/22' - - '45.248.208.0/20' - - '45.248.224.0/19' - - '45.249.0.0/21' - - '45.249.12.0/22' - - '45.249.16.0/20' - - '45.249.32.0/21' - - '45.249.112.0/22' - - '45.249.188.0/22' - - '45.249.192.0/20' - - '45.249.208.0/21' - - '45.250.12.0/22' - - '45.250.16.0/22' - - '45.250.28.0/22' - - '45.250.32.0/21' - - '45.250.40.0/22' - - '45.250.76.0/22' - - '45.250.80.0/20' - - '45.250.96.0/22' - - '45.250.104.0/21' - - '45.250.112.0/20' - - '45.250.128.0/20' - - '45.250.144.0/21' - - '45.250.152.0/22' - - '45.250.164.0/22' - - '45.250.180.0/22' - - '45.250.184.0/21' - - '45.250.192.0/22' - - '45.251.0.0/22' - - '45.251.8.0/22' - - '45.251.16.0/21' - - '45.251.52.0/22' - - '45.251.84.0/22' - - '45.251.88.0/21' - - '45.251.96.0/21' - - '45.251.120.0/21' - - '45.251.137.0/24' - - '45.251.138.0/23' - - '45.251.140.0/22' - - '45.251.144.0/20' - - '45.251.160.0/19' - - '45.251.192.0/19' - - '45.251.224.0/22' - - '45.252.0.0/19' - - '45.252.32.0/20' - - '45.252.48.0/22' - - '45.252.84.0/22' - - '45.252.88.0/21' - - '45.252.96.0/19' - - '45.252.128.0/19' - - '45.252.160.0/20' - - '45.252.176.0/22' - - '45.252.192.0/19' - - '45.252.224.0/21' - - '45.252.232.0/22' - - '45.253.0.0/18' - - '45.253.64.0/20' - - '45.253.80.0/21' - - '45.253.92.0/22' - - '45.253.96.0/20' - - '45.253.112.0/21' - - '45.253.120.0/22' - - '45.253.132.0/22' - - '45.253.136.0/21' - - '45.253.144.0/20' - - '45.253.160.0/19' - - '45.253.192.0/19' - - '45.253.224.0/20' - - '45.253.240.0/22' - - '45.254.0.0/20' - - '45.254.16.0/21' - - '45.254.28.0/22' - - '45.254.40.0/22' - - '45.254.48.0/20' - - '45.254.64.0/18' - - '45.254.128.0/18' - - '45.254.192.0/19' - - '45.254.224.0/21' - - '45.254.236.0/22' - - '45.254.248.0/22' - - '45.255.0.0/18' - - '45.255.64.0/19' - - '45.255.96.0/20' - - '45.255.112.0/21' - - '45.255.120.0/22' - - '45.255.136.0/21' - - '45.255.144.0/20' - - '45.255.160.0/19' - - '45.255.192.0/19' - - '45.255.224.0/20' - - '45.255.240.0/21' - - '45.255.248.0/22' - - '46.248.24.0/23' - - '47.92.0.0/14' - - '47.96.0.0/11' - - '49.4.0.0/14' - - '49.51.56.0/22' - - '49.51.60.0/23' - - '49.51.110.0/23' - - '49.51.112.0/20' - - '49.52.0.0/14' - - '49.64.0.0/11' - - '49.112.0.0/13' - - '49.120.0.0/14' - - '49.128.0.0/24' - - '49.128.2.0/23' - - '49.128.4.0/22' - - '49.140.0.0/15' - - '49.152.0.0/14' - - '49.208.0.0/14' - - '49.220.0.0/14' - - '49.232.0.0/14' - - '49.239.0.0/18' - - '49.239.192.0/18' - - '52.80.0.0/14' - - '52.94.249.0/27' - - '52.130.0.0/15' - - '54.222.0.0/15' - - '54.231.208.0/20' - - '54.240.224.0/24' - - '57.92.96.0/20' - - '58.14.0.0/15' - - '58.16.0.0/13' - - '58.24.0.0/15' - - '58.30.0.0/15' - - '58.32.0.0/11' - - '58.65.232.0/21' - - '58.66.0.0/15' - - '58.68.128.0/19' - - '58.68.160.0/23' - - '58.68.163.0/24' - - '58.68.164.0/22' - - '58.68.179.0/24' - - '58.68.180.0/24' - - '58.68.200.0/21' - - '58.68.208.0/20' - - '58.68.224.0/19' - - '58.82.0.0/17' - - '58.83.0.0/16' - - '58.87.64.0/18' - - '58.99.128.0/17' - - '58.100.0.0/15' - - '58.116.0.0/14' - - '58.128.0.0/13' - - '58.144.0.0/16' - - '58.154.0.0/15' - - '58.192.0.0/11' - - '58.240.0.0/12' - - '59.32.0.0/11' - - '59.64.0.0/12' - - '59.80.0.0/15' - - '59.82.0.0/16' - - '59.83.0.0/18' - - '59.83.132.0/22' - - '59.83.136.0/21' - - '59.83.144.0/20' - - '59.83.160.0/19' - - '59.83.192.0/19' - - '59.83.224.0/20' - - '59.83.240.0/21' - - '59.83.248.0/22' - - '59.83.252.0/23' - - '59.83.254.0/24' - - '59.107.0.0/16' - - '59.108.0.0/14' - - '59.151.0.0/17' - - '59.152.16.0/20' - - '59.152.36.0/22' - - '59.152.64.0/20' - - '59.152.112.0/21' - - '59.153.4.0/22' - - '59.153.32.0/22' - - '59.153.64.0/21' - - '59.153.72.0/22' - - '59.153.92.0/22' - - '59.153.136.0/22' - - '59.153.152.0/21' - - '59.153.164.0/22' - - '59.153.168.0/21' - - '59.153.176.0/20' - - '59.153.192.0/22' - - '59.155.0.0/16' - - '59.172.0.0/14' - - '59.191.0.0/17' - - '59.192.0.0/10' - - '60.0.0.0/11' - - '60.55.0.0/16' - - '60.63.0.0/16' - - '60.160.0.0/11' - - '60.194.0.0/15' - - '60.200.0.0/13' - - '60.208.0.0/12' - - '60.232.0.0/15' - - '60.235.0.0/16' - - '60.245.128.0/17' - - '60.247.0.0/16' - - '60.252.0.0/16' - - '60.253.128.0/17' - - '60.255.0.0/16' - - '61.4.81.0/24' - - '61.4.82.0/23' - - '61.4.84.0/22' - - '61.4.88.0/21' - - '61.4.176.0/20' - - '61.8.160.0/20' - - '61.14.212.0/22' - - '61.14.216.0/21' - - '61.14.240.0/21' - - '61.28.0.0/17' - - '61.29.128.0/18' - - '61.29.192.0/19' - - '61.29.224.0/20' - - '61.45.128.0/18' - - '61.45.224.0/20' - - '61.47.128.0/18' - - '61.48.0.0/13' - - '61.87.192.0/18' - - '61.128.0.0/10' - - '61.232.0.0/14' - - '61.236.0.0/15' - - '61.240.0.0/14' - - '62.234.0.0/16' - - '64.188.38.0/23' - - '64.188.40.0/22' - - '64.188.44.0/23' - - '68.79.0.0/18' - - '69.230.192.0/18' - - '69.231.128.0/18' - - '69.234.192.0/18' - - '69.235.128.0/18' - - '71.131.192.0/18' - - '71.132.0.0/18' - - '71.136.64.0/18' - - '71.137.0.0/18' - - '72.163.240.0/23' - - '72.163.248.0/22' - - '81.68.0.0/14' - - '82.156.0.0/15' - - '87.254.207.0/24' - - '89.19.34.0/23' - - '93.183.14.0/24' - - '93.183.18.0/24' - - '94.191.0.0/17' - - '101.0.0.0/22' - - '101.1.0.0/22' - - '101.2.172.0/22' - - '101.4.0.0/14' - - '101.16.0.0/12' - - '101.32.176.0/20' - - '101.32.192.0/18' - - '101.33.0.0/16' - - '101.34.0.0/15' - - '101.36.0.0/18' - - '101.36.64.0/20' - - '101.36.88.0/21' - - '101.36.128.0/17' - - '101.37.0.0/16' - - '101.38.0.0/15' - - '101.40.0.0/13' - - '101.48.0.0/15' - - '101.50.8.0/21' - - '101.50.56.0/22' - - '101.52.0.0/16' - - '101.53.100.0/22' - - '101.54.0.0/16' - - '101.55.224.0/21' - - '101.64.0.0/13' - - '101.72.0.0/14' - - '101.76.0.0/15' - - '101.78.0.0/22' - - '101.78.32.0/19' - - '101.80.0.0/12' - - '101.96.0.0/21' - - '101.96.8.0/22' - - '101.96.16.0/20' - - '101.96.128.0/17' - - '101.99.96.0/19' - - '101.101.64.0/19' - - '101.101.100.0/24' - - '101.101.102.0/23' - - '101.101.104.0/21' - - '101.101.112.0/20' - - '101.102.64.0/19' - - '101.102.100.0/23' - - '101.102.102.0/24' - - '101.102.104.0/21' - - '101.102.112.0/20' - - '101.104.0.0/14' - - '101.110.64.0/19' - - '101.110.96.0/20' - - '101.110.116.0/22' - - '101.110.120.0/21' - - '101.120.0.0/14' - - '101.124.0.0/15' - - '101.126.0.0/16' - - '101.128.0.0/22' - - '101.128.8.0/21' - - '101.128.16.0/20' - - '101.128.32.0/19' - - '101.129.0.0/16' - - '101.130.0.0/15' - - '101.132.0.0/15' - - '101.134.0.0/17' - - '101.134.128.0/19' - - '101.134.160.0/20' - - '101.134.176.0/21' - - '101.134.184.0/22' - - '101.134.189.0/24' - - '101.134.190.0/23' - - '101.134.192.0/18' - - '101.135.0.0/16' - - '101.144.0.0/12' - - '101.192.0.0/14' - - '101.196.0.0/16' - - '101.198.128.0/18' - - '101.198.194.0/24' - - '101.198.196.0/23' - - '101.198.200.0/22' - - '101.198.224.0/19' - - '101.199.0.0/19' - - '101.199.48.0/20' - - '101.199.64.0/18' - - '101.199.128.0/17' - - '101.200.0.0/15' - - '101.203.128.0/19' - - '101.203.160.0/21' - - '101.203.172.0/22' - - '101.203.176.0/20' - - '101.204.0.0/14' - - '101.224.0.0/13' - - '101.232.0.0/15' - - '101.234.64.0/21' - - '101.234.76.0/22' - - '101.234.80.0/20' - - '101.234.96.0/19' - - '101.236.0.0/14' - - '101.240.0.0/13' - - '101.248.0.0/15' - - '101.251.0.0/22' - - '101.251.8.0/21' - - '101.251.16.0/20' - - '101.251.32.0/19' - - '101.251.64.0/18' - - '101.251.128.0/17' - - '101.252.0.0/15' - - '101.254.0.0/16' - - '102.176.130.0/24' - - '103.1.8.0/22' - - '103.1.20.0/22' - - '103.1.24.0/22' - - '103.1.88.0/22' - - '103.1.168.0/22' - - '103.2.108.0/22' - - '103.2.156.0/22' - - '103.2.164.0/22' - - '103.2.200.0/21' - - '103.2.208.0/21' - - '103.3.84.0/22' - - '103.3.88.0/21' - - '103.3.96.0/19' - - '103.3.128.0/20' - - '103.3.148.0/22' - - '103.3.152.0/21' - - '103.4.56.0/22' - - '103.4.168.0/22' - - '103.4.184.0/22' - - '103.5.36.0/22' - - '103.5.52.0/24' - - '103.5.56.0/22' - - '103.5.152.0/22' - - '103.5.168.0/22' - - '103.5.192.0/22' - - '103.5.252.0/22' - - '103.6.76.0/22' - - '103.6.120.0/22' - - '103.6.220.0/22' - - '103.7.140.0/22' - - '103.7.212.0/22' - - '103.7.216.0/21' - - '103.8.0.0/21' - - '103.8.8.0/22' - - '103.8.32.0/22' - - '103.8.52.0/22' - - '103.8.68.0/22' - - '103.8.108.0/22' - - '103.8.156.0/22' - - '103.8.200.0/21' - - '103.8.220.0/22' - - '103.9.8.0/22' - - '103.9.24.0/22' - - '103.9.108.0/22' - - '103.9.152.0/22' - - '103.9.248.0/21' - - '103.10.0.0/22' - - '103.10.16.0/22' - - '103.10.84.0/22' - - '103.10.111.0/24' - - '103.10.140.0/22' - - '103.11.16.0/22' - - '103.11.168.0/22' - - '103.11.180.0/22' - - '103.12.32.0/22' - - '103.12.136.0/22' - - '103.12.184.0/22' - - '103.12.232.0/22' - - '103.13.12.0/22' - - '103.13.124.0/22' - - '103.13.144.0/22' - - '103.13.196.0/22' - - '103.13.244.0/22' - - '103.14.84.0/22' - - '103.14.132.0/22' - - '103.14.136.0/22' - - '103.14.156.0/22' - - '103.14.240.0/22' - - '103.15.4.0/22' - - '103.15.8.0/22' - - '103.15.16.0/22' - - '103.15.96.0/22' - - '103.15.200.0/22' - - '103.16.52.0/22' - - '103.16.80.0/21' - - '103.16.88.0/22' - - '103.16.108.0/22' - - '103.16.124.0/22' - - '103.17.40.0/22' - - '103.17.64.0/22' - - '103.17.120.0/23' - - '103.17.136.0/22' - - '103.17.160.0/22' - - '103.17.204.0/22' - - '103.17.228.0/22' - - '103.18.192.0/22' - - '103.18.208.0/21' - - '103.18.224.0/22' - - '103.19.12.0/22' - - '103.19.40.0/21' - - '103.19.64.0/21' - - '103.19.72.0/22' - - '103.19.232.0/22' - - '103.20.12.0/22' - - '103.20.32.0/23' - - '103.20.34.0/24' - - '103.20.68.0/22' - - '103.20.112.0/22' - - '103.20.128.0/22' - - '103.20.160.0/22' - - '103.20.248.0/22' - - '103.21.112.0/21' - - '103.21.140.0/22' - - '103.21.176.0/22' - - '103.21.240.0/22' - - '103.22.0.0/18' - - '103.22.64.0/19' - - '103.22.100.0/22' - - '103.22.104.0/21' - - '103.22.112.0/20' - - '103.22.188.0/22' - - '103.22.228.0/22' - - '103.22.252.0/22' - - '103.23.8.0/22' - - '103.23.56.0/22' - - '103.23.160.0/21' - - '103.23.176.0/22' - - '103.23.228.0/22' - - '103.24.24.0/22' - - '103.24.116.0/22' - - '103.24.128.0/22' - - '103.24.144.0/22' - - '103.24.176.0/22' - - '103.24.184.0/22' - - '103.24.228.0/22' - - '103.24.252.0/22' - - '103.25.20.0/22' - - '103.25.24.0/21' - - '103.25.32.0/21' - - '103.25.40.0/22' - - '103.25.48.0/22' - - '103.25.64.0/21' - - '103.25.148.0/22' - - '103.25.156.0/22' - - '103.25.216.0/22' - - '103.26.0.0/22' - - '103.26.64.0/22' - - '103.26.76.0/22' - - '103.26.116.0/22' - - '103.26.156.0/22' - - '103.26.160.0/22' - - '103.26.228.0/22' - - '103.26.240.0/22' - - '103.27.4.0/22' - - '103.27.12.0/22' - - '103.27.24.0/22' - - '103.27.56.0/22' - - '103.27.96.0/22' - - '103.27.240.0/22' - - '103.28.4.0/22' - - '103.28.8.0/22' - - '103.28.184.0/22' - - '103.28.204.0/22' - - '103.28.212.0/22' - - '103.29.16.0/22' - - '103.29.128.0/21' - - '103.29.136.0/22' - - '103.30.20.0/22' - - '103.30.96.0/22' - - '103.30.148.0/22' - - '103.30.202.0/23' - - '103.30.228.0/22' - - '103.30.236.0/22' - - '103.31.0.0/22' - - '103.31.48.0/21' - - '103.31.60.0/22' - - '103.31.64.0/21' - - '103.31.72.0/24' - - '103.31.148.0/22' - - '103.31.160.0/22' - - '103.31.168.0/22' - - '103.31.200.0/22' - - '103.31.236.0/22' - - '103.32.0.0/15' - - '103.34.0.0/16' - - '103.35.0.0/19' - - '103.35.32.0/20' - - '103.35.48.0/22' - - '103.35.104.0/22' - - '103.35.220.0/22' - - '103.36.28.0/22' - - '103.36.36.0/22' - - '103.36.56.0/21' - - '103.36.64.0/22' - - '103.36.72.0/22' - - '103.36.96.0/22' - - '103.36.132.0/22' - - '103.36.136.0/22' - - '103.36.160.0/19' - - '103.36.192.0/19' - - '103.36.224.0/20' - - '103.36.240.0/21' - - '103.37.12.0/22' - - '103.37.16.0/22' - - '103.37.24.0/22' - - '103.37.44.0/22' - - '103.37.52.0/22' - - '103.37.56.0/22' - - '103.37.72.0/22' - - '103.37.100.0/22' - - '103.37.104.0/22' - - '103.37.136.0/21' - - '103.37.144.0/20' - - '103.37.160.0/21' - - '103.37.172.0/22' - - '103.37.176.0/22' - - '103.37.188.0/22' - - '103.37.208.0/20' - - '103.37.252.0/22' - - '103.38.0.0/22' - - '103.38.32.0/22' - - '103.38.40.0/21' - - '103.38.76.0/22' - - '103.38.84.0/22' - - '103.38.92.0/22' - - '103.38.96.0/22' - - '103.38.116.0/22' - - '103.38.132.0/22' - - '103.38.140.0/22' - - '103.38.220.0/22' - - '103.38.224.0/21' - - '103.38.232.0/22' - - '103.38.252.0/23' - - '103.39.64.0/22' - - '103.39.88.0/22' - - '103.39.100.0/22' - - '103.39.104.0/22' - - '103.39.160.0/19' - - '103.39.200.0/21' - - '103.39.208.0/20' - - '103.39.224.0/21' - - '103.39.232.0/22' - - '103.40.12.0/22' - - '103.40.16.0/20' - - '103.40.32.0/20' - - '103.40.88.0/22' - - '103.40.192.0/22' - - '103.40.212.0/22' - - '103.40.220.0/22' - - '103.40.228.0/22' - - '103.40.232.0/21' - - '103.40.240.0/20' - - '103.41.0.0/22' - - '103.41.52.0/22' - - '103.41.140.0/22' - - '103.41.148.0/22' - - '103.41.152.0/22' - - '103.41.160.0/21' - - '103.41.220.0/22' - - '103.41.224.0/21' - - '103.41.232.0/22' - - '103.42.8.0/22' - - '103.42.24.0/22' - - '103.42.32.0/22' - - '103.42.64.0/21' - - '103.42.76.0/22' - - '103.42.232.0/22' - - '103.43.26.0/23' - - '103.43.96.0/21' - - '103.43.104.0/22' - - '103.43.124.0/22' - - '103.43.184.0/22' - - '103.43.196.0/22' - - '103.43.208.0/22' - - '103.43.220.0/22' - - '103.43.224.0/22' - - '103.43.240.0/22' - - '103.44.58.0/23' - - '103.44.80.0/22' - - '103.44.120.0/21' - - '103.44.144.0/22' - - '103.44.152.0/22' - - '103.44.168.0/22' - - '103.44.176.0/20' - - '103.44.192.0/20' - - '103.44.224.0/22' - - '103.44.236.0/22' - - '103.44.240.0/20' - - '103.45.0.0/18' - - '103.45.72.0/21' - - '103.45.80.0/20' - - '103.45.96.0/19' - - '103.45.128.0/18' - - '103.45.192.0/19' - - '103.45.224.0/22' - - '103.45.248.0/22' - - '103.46.0.0/22' - - '103.46.12.0/22' - - '103.46.16.0/20' - - '103.46.32.0/19' - - '103.46.64.0/18' - - '103.46.128.0/21' - - '103.46.136.0/22' - - '103.46.152.0/21' - - '103.46.160.0/20' - - '103.46.176.0/21' - - '103.46.244.0/22' - - '103.46.248.0/22' - - '103.47.4.0/22' - - '103.47.20.0/22' - - '103.47.36.0/22' - - '103.47.40.0/22' - - '103.47.48.0/22' - - '103.47.80.0/22' - - '103.47.96.0/22' - - '103.47.116.0/22' - - '103.47.120.0/22' - - '103.47.136.0/21' - - '103.47.212.0/22' - - '103.48.52.0/22' - - '103.48.92.0/22' - - '103.48.148.0/22' - - '103.48.152.0/22' - - '103.48.202.0/23' - - '103.48.216.0/21' - - '103.48.224.0/20' - - '103.48.240.0/21' - - '103.49.12.0/22' - - '103.49.20.0/22' - - '103.49.72.0/21' - - '103.49.96.0/22' - - '103.49.108.0/22' - - '103.49.128.0/22' - - '103.49.176.0/21' - - '103.50.36.0/22' - - '103.50.44.0/22' - - '103.50.48.0/20' - - '103.50.64.0/21' - - '103.50.72.0/22' - - '103.50.108.0/22' - - '103.50.112.0/20' - - '103.50.132.0/22' - - '103.50.136.0/21' - - '103.50.172.0/22' - - '103.50.176.0/20' - - '103.50.192.0/21' - - '103.50.200.0/22' - - '103.50.220.0/22' - - '103.50.224.0/20' - - '103.50.240.0/21' - - '103.50.248.0/22' - - '103.52.40.0/22' - - '103.52.72.0/21' - - '103.52.80.0/21' - - '103.52.96.0/21' - - '103.52.104.0/22' - - '103.52.160.0/21' - - '103.52.172.0/22' - - '103.52.176.0/22' - - '103.52.184.0/22' - - '103.52.196.0/22' - - '103.53.64.0/21' - - '103.53.92.0/22' - - '103.53.124.0/22' - - '103.53.128.0/20' - - '103.53.144.0/22' - - '103.53.160.0/22' - - '103.53.180.0/22' - - '103.53.204.0/22' - - '103.53.208.0/21' - - '103.53.236.0/22' - - '103.53.248.0/22' - - '103.54.8.0/22' - - '103.54.48.0/22' - - '103.54.160.0/21' - - '103.54.212.0/22' - - '103.54.228.0/22' - - '103.54.240.0/22' - - '103.55.80.0/22' - - '103.55.120.0/22' - - '103.55.152.0/22' - - '103.55.172.0/22' - - '103.55.204.0/22' - - '103.55.208.0/22' - - '103.55.228.0/22' - - '103.55.236.0/22' - - '103.55.240.0/22' - - '103.56.20.0/22' - - '103.56.32.0/22' - - '103.56.56.0/21' - - '103.56.72.0/21' - - '103.56.140.0/22' - - '103.56.152.0/22' - - '103.56.184.0/22' - - '103.56.200.0/22' - - '103.57.12.0/22' - - '103.57.52.0/22' - - '103.57.56.0/22' - - '103.57.76.0/22' - - '103.57.136.0/22' - - '103.57.196.0/22' - - '103.58.24.0/22' - - '103.59.76.0/22' - - '103.59.112.0/21' - - '103.59.120.0/24' - - '103.59.123.0/24' - - '103.59.124.0/22' - - '103.59.128.0/22' - - '103.59.148.0/22' - - '103.60.32.0/22' - - '103.60.44.0/22' - - '103.60.164.0/22' - - '103.60.228.0/22' - - '103.60.236.0/22' - - '103.61.60.0/24' - - '103.61.104.0/22' - - '103.61.140.0/22' - - '103.61.152.0/21' - - '103.61.160.0/22' - - '103.61.172.0/22' - - '103.61.176.0/22' - - '103.62.24.0/22' - - '103.62.72.0/21' - - '103.62.80.0/21' - - '103.62.88.0/22' - - '103.62.96.0/19' - - '103.62.128.0/21' - - '103.62.156.0/22' - - '103.62.160.0/19' - - '103.62.192.0/22' - - '103.62.204.0/22' - - '103.62.208.0/20' - - '103.62.224.0/22' - - '103.63.32.0/19' - - '103.63.64.0/20' - - '103.63.80.0/21' - - '103.63.88.0/22' - - '103.63.140.0/22' - - '103.63.144.0/22' - - '103.63.152.0/22' - - '103.63.160.0/20' - - '103.63.176.0/21' - - '103.63.184.0/22' - - '103.63.192.0/20' - - '103.63.208.0/22' - - '103.63.240.0/20' - - '103.64.0.0/21' - - '103.64.24.0/21' - - '103.64.32.0/19' - - '103.64.64.0/18' - - '103.64.140.0/22' - - '103.64.144.0/22' - - '103.64.152.0/21' - - '103.64.160.0/19' - - '103.64.192.0/18' - - '103.65.0.0/21' - - '103.65.12.0/22' - - '103.65.16.0/22' - - '103.65.48.0/20' - - '103.65.64.0/19' - - '103.65.100.0/22' - - '103.65.104.0/21' - - '103.65.112.0/20' - - '103.65.128.0/21' - - '103.65.136.0/22' - - '103.65.144.0/20' - - '103.65.160.0/20' - - '103.66.32.0/22' - - '103.66.40.0/22' - - '103.66.108.0/22' - - '103.66.200.0/22' - - '103.66.240.0/20' - - '103.67.0.0/21' - - '103.67.8.0/22' - - '103.67.40.0/21' - - '103.67.48.0/20' - - '103.67.64.0/18' - - '103.67.128.0/20' - - '103.67.144.0/21' - - '103.67.172.0/24' - - '103.67.175.0/24' - - '103.67.192.0/22' - - '103.67.212.0/22' - - '103.68.88.0/22' - - '103.68.100.0/22' - - '103.68.128.0/22' - - '103.69.16.0/22' - - '103.70.8.0/22' - - '103.70.148.0/22' - - '103.70.236.0/22' - - '103.70.252.0/22' - - '103.71.0.0/22' - - '103.71.68.0/22' - - '103.71.72.0/22' - - '103.71.80.0/21' - - '103.71.88.0/22' - - '103.71.120.0/21' - - '103.71.128.0/22' - - '103.71.196.0/22' - - '103.71.200.0/22' - - '103.71.232.0/22' - - '103.72.12.0/22' - - '103.72.16.0/20' - - '103.72.32.0/20' - - '103.72.48.0/21' - - '103.72.112.0/21' - - '103.72.124.0/22' - - '103.72.128.0/21' - - '103.72.149.0/24' - - '103.72.150.0/23' - - '103.72.172.0/22' - - '103.72.180.0/22' - - '103.72.224.0/19' - - '103.73.0.0/19' - - '103.73.48.0/22' - - '103.73.116.0/22' - - '103.73.120.0/22' - - '103.73.128.0/20' - - '103.73.168.0/22' - - '103.73.176.0/22' - - '103.73.204.0/22' - - '103.73.208.0/22' - - '103.73.240.0/23' - - '103.73.244.0/22' - - '103.73.248.0/22' - - '103.74.24.0/21' - - '103.74.32.0/20' - - '103.74.48.0/22' - - '103.74.56.0/21' - - '103.74.80.0/22' - - '103.74.124.0/22' - - '103.74.148.0/22' - - '103.74.152.0/21' - - '103.74.204.0/22' - - '103.74.232.0/22' - - '103.75.87.0/24' - - '103.75.88.0/21' - - '103.75.104.0/21' - - '103.75.112.0/22' - - '103.75.120.0/22' - - '103.75.128.0/22' - - '103.75.144.0/22' - - '103.75.152.0/22' - - '103.76.60.0/22' - - '103.76.64.0/21' - - '103.76.72.0/22' - - '103.76.92.0/22' - - '103.76.216.0/21' - - '103.76.224.0/22' - - '103.77.28.0/22' - - '103.77.52.0/22' - - '103.77.56.0/22' - - '103.77.88.0/22' - - '103.77.132.0/22' - - '103.77.148.0/22' - - '103.77.220.0/22' - - '103.78.56.0/21' - - '103.78.64.0/22' - - '103.78.124.0/22' - - '103.78.172.0/22' - - '103.78.176.0/22' - - '103.78.196.0/22' - - '103.78.228.0/22' - - '103.79.24.0/21' - - '103.79.36.0/22' - - '103.79.40.0/21' - - '103.79.56.0/21' - - '103.79.64.0/21' - - '103.79.80.0/21' - - '103.79.136.0/22' - - '103.79.188.0/22' - - '103.79.192.0/20' - - '103.79.208.0/21' - - '103.80.44.0/22' - - '103.80.72.0/22' - - '103.80.176.0/21' - - '103.80.184.0/22' - - '103.80.192.0/22' - - '103.80.200.0/22' - - '103.80.232.0/22' - - '103.81.4.0/22' - - '103.81.44.0/22' - - '103.81.48.0/22' - - '103.81.96.0/22' - - '103.81.120.0/22' - - '103.81.148.0/22' - - '103.81.164.0/22' - - '103.81.200.0/22' - - '103.81.232.0/22' - - '103.82.60.0/22' - - '103.82.68.0/22' - - '103.82.84.0/22' - - '103.82.104.0/22' - - '103.82.224.0/22' - - '103.82.236.0/22' - - '103.83.44.0/22' - - '103.83.52.0/22' - - '103.83.60.0/22' - - '103.83.72.0/22' - - '103.83.112.0/22' - - '103.83.132.0/22' - - '103.83.180.0/22' - - '103.84.0.0/22' - - '103.84.12.0/22' - - '103.84.20.0/22' - - '103.84.24.0/21' - - '103.84.48.0/22' - - '103.84.56.0/22' - - '103.84.64.0/22' - - '103.84.72.0/22' - - '103.85.44.0/22' - - '103.85.48.0/21' - - '103.85.56.0/22' - - '103.85.84.0/22' - - '103.85.136.0/22' - - '103.85.144.0/22' - - '103.85.164.0/22' - - '103.85.168.0/21' - - '103.85.176.0/22' - - '103.86.28.0/22' - - '103.86.32.0/22' - - '103.86.60.0/22' - - '103.86.129.0/24' - - '103.86.204.0/22' - - '103.86.208.0/20' - - '103.86.224.0/19' - - '103.87.0.0/21' - - '103.87.20.0/22' - - '103.87.32.0/22' - - '103.87.96.0/22' - - '103.87.132.0/22' - - '103.87.180.0/22' - - '103.87.224.0/22' - - '103.88.4.0/22' - - '103.88.8.0/21' - - '103.88.16.0/21' - - '103.88.32.0/21' - - '103.88.60.0/22' - - '103.88.64.0/22' - - '103.88.72.0/22' - - '103.88.96.0/21' - - '103.88.152.0/23' - - '103.88.164.0/22' - - '103.88.212.0/22' - - '103.89.28.0/22' - - '103.89.96.0/20' - - '103.89.112.0/22' - - '103.89.148.0/22' - - '103.89.172.0/22' - - '103.89.184.0/21' - - '103.89.192.0/19' - - '103.89.224.0/21' - - '103.90.52.0/22' - - '103.90.92.0/22' - - '103.90.100.0/22' - - '103.90.104.0/21' - - '103.90.112.0/20' - - '103.90.128.0/21' - - '103.90.152.0/22' - - '103.90.168.0/22' - - '103.90.173.0/24' - - '103.90.176.0/22' - - '103.90.188.0/22' - - '103.90.192.0/22' - - '103.91.36.0/22' - - '103.91.40.0/22' - - '103.91.108.0/22' - - '103.91.152.0/22' - - '103.91.176.0/22' - - '103.91.200.0/22' - - '103.91.208.0/21' - - '103.91.236.0/22' - - '103.92.48.0/20' - - '103.92.64.0/20' - - '103.92.80.0/22' - - '103.92.88.0/22' - - '103.92.108.0/22' - - '103.92.124.0/22' - - '103.92.132.0/22' - - '103.92.156.0/22' - - '103.92.164.0/22' - - '103.92.168.0/21' - - '103.92.176.0/20' - - '103.92.192.0/22' - - '103.92.236.0/22' - - '103.92.240.0/20' - - '103.93.0.0/21' - - '103.93.28.0/22' - - '103.93.84.0/22' - - '103.93.152.0/22' - - '103.93.180.0/22' - - '103.93.204.0/22' - - '103.94.12.0/22' - - '103.94.20.0/22' - - '103.94.29.0/24' - - '103.94.30.0/23' - - '103.94.32.0/20' - - '103.94.72.0/22' - - '103.94.88.0/22' - - '103.94.116.0/22' - - '103.94.160.0/22' - - '103.94.200.0/22' - - '103.95.28.0/24' - - '103.95.30.0/23' - - '103.95.52.0/22' - - '103.95.69.0/24' - - '103.95.70.0/23' - - '103.95.88.0/21' - - '103.95.136.0/21' - - '103.95.144.0/22' - - '103.95.152.0/22' - - '103.95.216.0/21' - - '103.95.224.0/22' - - '103.95.236.0/22' - - '103.95.240.0/20' - - '103.96.8.0/22' - - '103.96.124.0/22' - - '103.96.136.0/22' - - '103.96.152.0/21' - - '103.96.160.0/19' - - '103.96.192.0/20' - - '103.96.208.0/21' - - '103.96.216.0/22' - - '103.97.40.0/22' - - '103.97.60.0/23' - - '103.97.112.0/21' - - '103.97.148.0/22' - - '103.97.188.0/22' - - '103.97.192.0/22' - - '103.98.40.0/21' - - '103.98.48.0/22' - - '103.98.56.0/22' - - '103.98.80.0/22' - - '103.98.88.0/22' - - '103.98.100.0/22' - - '103.98.124.0/24' - - '103.98.126.0/23' - - '103.98.136.0/21' - - '103.98.144.0/22' - - '103.98.164.0/22' - - '103.98.168.0/22' - - '103.98.180.0/22' - - '103.98.196.0/22' - - '103.98.216.0/21' - - '103.98.224.0/21' - - '103.98.232.0/22' - - '103.98.240.0/21' - - '103.98.248.0/23' - - '103.98.250.0/24' - - '103.98.252.0/22' - - '103.99.56.0/22' - - '103.99.104.0/22' - - '103.99.116.0/22' - - '103.99.120.0/22' - - '103.99.132.0/22' - - '103.99.136.0/21' - - '103.99.144.0/22' - - '103.99.152.0/22' - - '103.99.220.0/22' - - '103.99.232.0/21' - - '103.100.0.0/22' - - '103.100.32.0/22' - - '103.100.40.0/22' - - '103.100.48.0/22' - - '103.100.56.0/22' - - '103.100.64.0/22' - - '103.100.88.0/22' - - '103.100.116.0/22' - - '103.100.144.0/22' - - '103.100.240.0/22' - - '103.100.248.0/21' - - '103.101.4.0/22' - - '103.101.8.0/21' - - '103.101.60.0/22' - - '103.101.121.0/24' - - '103.101.122.0/23' - - '103.101.124.0/24' - - '103.101.126.0/23' - - '103.101.144.0/21' - - '103.101.180.0/22' - - '103.101.184.0/22' - - '103.102.76.0/22' - - '103.102.80.0/22' - - '103.102.168.0/21' - - '103.102.180.0/22' - - '103.102.184.0/21' - - '103.102.192.0/22' - - '103.102.196.0/24' - - '103.102.200.0/22' - - '103.102.208.0/21' - - '103.103.12.0/22' - - '103.103.16.0/22' - - '103.103.36.0/22' - - '103.103.72.0/22' - - '103.103.188.0/22' - - '103.103.204.0/22' - - '103.103.225.0/24' - - '103.104.36.0/22' - - '103.104.40.0/22' - - '103.104.64.0/22' - - '103.104.152.0/22' - - '103.104.252.0/22' - - '103.105.0.0/21' - - '103.105.12.0/22' - - '103.105.16.0/22' - - '103.105.60.0/22' - - '103.105.116.0/22' - - '103.105.180.0/22' - - '103.105.184.0/22' - - '103.105.200.0/21' - - '103.105.220.0/22' - - '103.106.36.0/22' - - '103.106.40.0/21' - - '103.106.60.0/22' - - '103.106.68.0/22' - - '103.106.96.0/22' - - '103.106.120.0/22' - - '103.106.128.0/21' - - '103.106.190.0/23' - - '103.106.196.0/22' - - '103.106.212.0/22' - - '103.106.252.0/22' - - '103.107.0.0/22' - - '103.107.28.0/22' - - '103.107.32.0/22' - - '103.107.44.0/22' - - '103.107.72.0/22' - - '103.107.164.0/22' - - '103.107.168.0/22' - - '103.107.188.0/22' - - '103.107.192.0/22' - - '103.107.208.0/20' - - '103.108.52.0/22' - - '103.108.160.0/21' - - '103.108.196.0/22' - - '103.108.208.0/21' - - '103.108.224.0/22' - - '103.108.244.0/22' - - '103.108.251.0/24' - - '103.109.20.0/22' - - '103.109.48.0/22' - - '103.109.88.0/22' - - '103.109.107.0/24' - - '103.109.248.0/22' - - '103.110.32.0/22' - - '103.110.92.0/22' - - '103.110.119.0/24' - - '103.110.127.0/24' - - '103.110.128.0/23' - - '103.110.131.0/24' - - '103.110.132.0/22' - - '103.110.136.0/22' - - '103.110.156.0/22' - - '103.110.188.0/22' - - '103.110.204.0/22' - - '103.111.64.0/22' - - '103.111.172.0/22' - - '103.111.252.0/22' - - '103.112.72.0/22' - - '103.112.88.0/21' - - '103.112.108.0/22' - - '103.112.112.0/22' - - '103.112.140.0/22' - - '103.113.4.0/22' - - '103.113.144.0/22' - - '103.113.220.0/22' - - '103.113.232.0/21' - - '103.114.4.0/22' - - '103.114.68.0/22' - - '103.114.100.0/22' - - '103.114.148.0/22' - - '103.114.156.0/23' - - '103.114.212.0/22' - - '103.114.236.0/22' - - '103.114.240.0/22' - - '103.115.52.0/22' - - '103.115.68.0/22' - - '103.115.92.0/22' - - '103.115.120.0/22' - - '103.115.148.0/22' - - '103.115.248.0/22' - - '103.116.76.0/22' - - '103.116.92.0/22' - - '103.116.120.0/22' - - '103.116.128.0/22' - - '103.116.184.0/22' - - '103.116.220.0/22' - - '103.116.224.0/21' - - '103.117.16.0/22' - - '103.117.88.0/22' - - '103.117.188.0/22' - - '103.117.220.0/22' - - '103.118.19.0/24' - - '103.118.52.0/22' - - '103.118.56.0/21' - - '103.118.64.0/21' - - '103.118.72.0/22' - - '103.118.88.0/22' - - '103.118.173.0/24' - - '103.119.115.0/24' - - '103.119.156.0/22' - - '103.119.180.0/22' - - '103.119.200.0/22' - - '103.119.224.0/22' - - '103.120.52.0/22' - - '103.120.72.0/22' - - '103.120.76.0/24' - - '103.120.88.0/22' - - '103.120.96.0/22' - - '103.120.140.0/22' - - '103.120.196.0/22' - - '103.120.224.0/22' - - '103.121.52.0/22' - - '103.121.160.0/21' - - '103.121.250.0/24' - - '103.121.252.0/22' - - '103.122.48.0/22' - - '103.122.178.0/23' - - '103.122.192.0/22' - - '103.122.240.0/23' - - '103.122.242.0/24' - - '103.123.4.0/22' - - '103.123.56.0/22' - - '103.123.88.0/21' - - '103.123.116.0/22' - - '103.123.176.0/22' - - '103.123.200.0/21' - - '103.123.208.0/21' - - '103.124.24.0/22' - - '103.124.48.0/22' - - '103.124.64.0/22' - - '103.124.212.0/22' - - '103.124.216.0/22' - - '103.125.20.0/22' - - '103.125.44.0/22' - - '103.125.132.0/22' - - '103.125.164.0/22' - - '103.125.196.0/22' - - '103.125.236.0/22' - - '103.126.0.0/22' - - '103.126.16.0/23' - - '103.126.44.0/22' - - '103.126.124.0/22' - - '103.126.128.0/22' - - '103.129.53.0/24' - - '103.129.54.0/23' - - '103.129.148.0/22' - - '103.130.132.0/22' - - '103.130.160.0/22' - - '103.130.228.0/22' - - '103.131.20.0/22' - - '103.131.36.0/22' - - '103.131.152.0/22' - - '103.131.168.0/22' - - '103.131.224.0/21' - - '103.131.240.0/22' - - '103.132.60.0/22' - - '103.132.64.0/20' - - '103.132.80.0/22' - - '103.132.104.0/21' - - '103.132.112.0/21' - - '103.132.120.0/22' - - '103.132.188.0/22' - - '103.132.208.0/21' - - '103.133.12.0/22' - - '103.133.40.0/22' - - '103.133.128.0/22' - - '103.133.232.0/22' - - '103.134.196.0/22' - - '103.135.80.0/22' - - '103.135.124.0/22' - - '103.135.148.0/22' - - '103.135.156.0/22' - - '103.135.160.0/21' - - '103.135.176.0/22' - - '103.135.184.0/22' - - '103.135.192.0/21' - - '103.135.236.0/22' - - '103.136.128.0/22' - - '103.136.232.0/22' - - '103.137.58.0/23' - - '103.137.60.0/24' - - '103.137.136.0/23' - - '103.137.149.0/24' - - '103.137.180.0/22' - - '103.137.236.0/22' - - '103.138.2.0/23' - - '103.138.135.0/24' - - '103.138.208.0/23' - - '103.138.220.0/23' - - '103.138.248.0/23' - - '103.139.22.0/23' - - '103.139.134.0/23' - - '103.139.172.0/23' - - '103.139.204.0/23' - - '103.139.212.0/23' - - '103.140.14.0/23' - - '103.140.46.0/23' - - '103.140.140.0/23' - - '103.140.144.0/23' - - '103.140.192.0/23' - - '103.141.10.0/23' - - '103.141.58.0/23' - - '103.141.128.0/23' - - '103.141.186.0/23' - - '103.141.242.0/23' - - '103.142.0.0/23' - - '103.142.28.0/23' - - '103.142.58.0/23' - - '103.142.82.0/23' - - '103.142.96.0/23' - - '103.142.122.0/23' - - '103.142.128.0/23' - - '103.142.154.0/23' - - '103.142.156.0/23' - - '103.142.180.0/23' - - '103.142.186.0/23' - - '103.142.230.0/24' - - '103.142.234.0/23' - - '103.142.238.0/23' - - '103.143.16.0/22' - - '103.143.31.0/24' - - '103.143.74.0/23' - - '103.143.120.0/24' - - '103.143.124.0/23' - - '103.143.132.0/22' - - '103.143.174.0/23' - - '103.143.228.0/23' - - '103.144.66.0/23' - - '103.144.70.0/23' - - '103.144.72.0/23' - - '103.144.136.0/23' - - '103.144.158.0/23' - - '103.145.42.0/23' - - '103.145.94.0/23' - - '103.145.98.0/23' - - '103.145.188.0/23' - - '103.146.6.0/23' - - '103.146.72.0/23' - - '103.146.126.0/23' - - '103.146.138.0/23' - - '103.146.236.0/23' - - '103.146.252.0/23' - - '103.147.124.0/23' - - '103.147.198.0/23' - - '103.147.206.0/23' - - '103.147.211.0/24' - - '103.148.174.0/23' - - '103.149.6.0/23' - - '103.149.17.0/24' - - '103.149.44.0/23' - - '103.149.190.0/23' - - '103.149.210.0/23' - - '103.149.214.0/23' - - '103.149.220.0/23' - - '103.149.242.0/23' - - '103.149.244.0/22' - - '103.150.24.0/23' - - '103.150.66.0/23' - - '103.150.72.0/23' - - '103.150.122.0/23' - - '103.150.126.0/23' - - '103.150.128.0/23' - - '103.150.131.0/24' - - '103.150.146.0/23' - - '103.150.164.0/23' - - '103.150.200.0/23' - - '103.150.216.0/23' - - '103.150.244.0/23' - - '103.151.142.0/23' - - '103.151.148.0/22' - - '103.151.158.0/23' - - '103.152.28.0/22' - - '103.152.76.0/23' - - '103.152.80.0/23' - - '103.152.113.0/24' - - '103.152.120.0/22' - - '103.152.152.0/23' - - '103.152.168.0/23' - - '103.152.186.0/23' - - '103.152.190.0/23' - - '103.152.192.0/23' - - '103.152.200.0/23' - - '103.152.208.0/23' - - '103.152.224.0/23' - - '103.152.247.0/24' - - '103.152.250.0/23' - - '103.153.4.0/23' - - '103.153.36.0/23' - - '103.153.99.0/24' - - '103.153.100.0/23' - - '103.153.114.0/23' - - '103.153.122.0/23' - - '103.153.128.0/23' - - '103.153.132.0/23' - - '103.153.138.0/23' - - '103.153.146.0/23' - - '103.153.160.0/23' - - '103.154.18.0/23' - - '103.154.30.0/23' - - '103.154.32.0/23' - - '103.154.40.0/23' - - '103.154.66.0/23' - - '103.154.162.0/23' - - '103.154.164.0/23' - - '103.154.168.0/23' - - '103.154.243.0/24' - - '103.155.14.0/23' - - '103.155.16.0/23' - - '103.155.34.0/23' - - '103.192.0.0/19' - - '103.192.48.0/21' - - '103.192.56.0/22' - - '103.192.84.0/22' - - '103.192.88.0/21' - - '103.192.96.0/20' - - '103.192.112.0/22' - - '103.192.128.0/20' - - '103.192.144.0/22' - - '103.192.164.0/22' - - '103.192.188.0/22' - - '103.192.208.0/21' - - '103.192.216.0/22' - - '103.192.252.0/22' - - '103.193.40.0/21' - - '103.193.120.0/22' - - '103.193.140.0/22' - - '103.193.160.0/22' - - '103.193.188.0/22' - - '103.193.192.0/22' - - '103.193.212.0/22' - - '103.193.216.0/21' - - '103.193.224.0/20' - - '103.194.16.0/22' - - '103.195.112.0/22' - - '103.195.152.0/22' - - '103.195.160.0/22' - - '103.196.64.0/22' - - '103.196.72.0/22' - - '103.196.88.0/21' - - '103.196.96.0/22' - - '103.196.168.0/22' - - '103.196.185.0/24' - - '103.196.186.0/23' - - '103.197.181.0/24' - - '103.197.183.0/24' - - '103.197.228.0/22' - - '103.197.253.0/24' - - '103.197.254.0/23' - - '103.198.20.0/22' - - '103.198.60.0/22' - - '103.198.64.0/22' - - '103.198.72.0/22' - - '103.198.124.0/22' - - '103.198.156.0/22' - - '103.198.180.0/22' - - '103.198.196.0/22' - - '103.198.200.0/22' - - '103.199.164.0/22' - - '103.199.196.0/22' - - '103.199.228.0/22' - - '103.199.252.0/22' - - '103.200.52.0/22' - - '103.200.64.0/21' - - '103.200.136.0/21' - - '103.200.144.0/20' - - '103.200.160.0/19' - - '103.200.192.0/22' - - '103.200.220.0/22' - - '103.200.224.0/19' - - '103.201.0.0/20' - - '103.201.16.0/21' - - '103.201.28.0/22' - - '103.201.32.0/19' - - '103.201.64.0/22' - - '103.201.76.0/22' - - '103.201.80.0/20' - - '103.201.96.0/20' - - '103.201.112.0/21' - - '103.201.120.0/22' - - '103.201.152.0/21' - - '103.201.160.0/19' - - '103.201.192.0/18' - - '103.202.0.0/19' - - '103.202.32.0/20' - - '103.202.56.0/21' - - '103.202.64.0/18' - - '103.202.128.0/20' - - '103.202.144.0/22' - - '103.202.152.0/21' - - '103.202.160.0/19' - - '103.202.192.0/20' - - '103.202.212.0/22' - - '103.202.228.0/22' - - '103.202.236.0/22' - - '103.202.240.0/20' - - '103.203.0.0/19' - - '103.203.32.0/22' - - '103.203.96.0/19' - - '103.203.128.0/22' - - '103.203.140.0/22' - - '103.203.164.0/22' - - '103.203.168.0/22' - - '103.203.192.0/22' - - '103.203.200.0/22' - - '103.203.212.0/22' - - '103.203.216.0/22' - - '103.204.24.0/22' - - '103.204.88.0/22' - - '103.204.112.0/22' - - '103.204.136.0/21' - - '103.204.144.0/21' - - '103.204.152.0/22' - - '103.204.196.0/22' - - '103.204.232.0/21' - - '103.205.4.0/22' - - '103.205.40.0/21' - - '103.205.52.0/22' - - '103.205.108.0/22' - - '103.205.116.0/22' - - '103.205.120.0/24' - - '103.205.136.0/22' - - '103.205.162.0/24' - - '103.205.188.0/22' - - '103.205.192.0/21' - - '103.205.200.0/22' - - '103.205.236.0/22' - - '103.205.248.0/21' - - '103.206.0.0/22' - - '103.206.44.0/22' - - '103.206.148.0/22' - - '103.207.104.0/22' - - '103.207.184.0/21' - - '103.207.192.0/20' - - '103.207.208.0/21' - - '103.207.220.0/22' - - '103.207.228.0/22' - - '103.207.232.0/22' - - '103.208.12.0/22' - - '103.208.16.0/22' - - '103.208.28.0/22' - - '103.208.48.0/22' - - '103.208.148.0/22' - - '103.209.112.0/22' - - '103.209.136.0/22' - - '103.209.200.0/22' - - '103.209.208.0/22' - - '103.209.216.0/22' - - '103.210.0.0/22' - - '103.210.96.0/22' - - '103.210.156.0/22' - - '103.210.160.0/19' - - '103.210.217.0/24' - - '103.210.218.0/23' - - '103.211.44.0/22' - - '103.211.96.0/23' - - '103.211.98.0/24' - - '103.211.100.0/22' - - '103.211.156.0/22' - - '103.211.165.0/24' - - '103.211.168.0/22' - - '103.211.220.0/22' - - '103.211.248.0/22' - - '103.212.0.0/20' - - '103.212.44.0/22' - - '103.212.48.0/22' - - '103.212.84.0/22' - - '103.212.100.0/22' - - '103.212.148.0/22' - - '103.212.164.0/22' - - '103.212.196.0/22' - - '103.212.200.0/22' - - '103.212.252.0/22' - - '103.213.40.0/21' - - '103.213.48.0/20' - - '103.213.64.0/19' - - '103.213.96.0/22' - - '103.213.132.0/22' - - '103.213.136.0/21' - - '103.213.144.0/20' - - '103.213.160.0/19' - - '103.213.252.0/22' - - '103.214.48.0/22' - - '103.214.84.0/22' - - '103.214.212.0/22' - - '103.214.240.0/21' - - '103.215.28.0/22' - - '103.215.32.0/21' - - '103.215.44.0/22' - - '103.215.100.0/23' - - '103.215.108.0/22' - - '103.215.116.0/22' - - '103.215.120.0/22' - - '103.215.140.0/22' - - '103.216.4.0/22' - - '103.216.8.0/21' - - '103.216.16.0/20' - - '103.216.32.0/20' - - '103.216.64.0/22' - - '103.216.108.0/22' - - '103.216.136.0/22' - - '103.216.152.0/22' - - '103.216.224.0/21' - - '103.216.240.0/20' - - '103.217.0.0/18' - - '103.217.168.0/22' - - '103.217.180.0/22' - - '103.217.184.0/21' - - '103.217.192.0/20' - - '103.218.8.0/21' - - '103.218.16.0/21' - - '103.218.28.0/22' - - '103.218.32.0/19' - - '103.218.64.0/19' - - '103.218.192.0/20' - - '103.218.208.0/21' - - '103.218.216.0/22' - - '103.219.24.0/21' - - '103.219.32.0/21' - - '103.219.64.0/22' - - '103.219.84.0/22' - - '103.219.88.0/21' - - '103.219.96.0/21' - - '103.219.176.0/22' - - '103.219.184.0/22' - - '103.220.48.0/20' - - '103.220.64.0/22' - - '103.220.92.0/22' - - '103.220.96.0/22' - - '103.220.104.0/21' - - '103.220.116.0/22' - - '103.220.120.0/21' - - '103.220.128.0/20' - - '103.220.144.0/21' - - '103.220.152.0/22' - - '103.220.160.0/19' - - '103.220.192.0/21' - - '103.220.200.0/22' - - '103.220.240.0/21' - - '103.220.252.0/22' - - '103.221.0.0/19' - - '103.221.32.0/22' - - '103.221.40.0/24' - - '103.221.44.0/22' - - '103.221.88.0/22' - - '103.221.92.0/23' - - '103.221.95.0/24' - - '103.221.96.0/19' - - '103.221.128.0/18' - - '103.221.192.0/20' - - '103.222.0.0/20' - - '103.222.16.0/22' - - '103.222.24.0/21' - - '103.222.33.0/24' - - '103.222.34.0/23' - - '103.222.36.0/22' - - '103.222.40.0/21' - - '103.222.48.0/20' - - '103.222.64.0/18' - - '103.222.128.0/18' - - '103.222.192.0/19' - - '103.222.224.0/21' - - '103.222.232.0/22' - - '103.222.240.0/21' - - '103.223.16.0/20' - - '103.223.32.0/19' - - '103.223.64.0/19' - - '103.223.96.0/20' - - '103.223.112.0/21' - - '103.223.124.0/22' - - '103.223.128.0/21' - - '103.223.140.0/22' - - '103.223.144.0/20' - - '103.223.160.0/20' - - '103.223.176.0/21' - - '103.223.188.0/22' - - '103.223.192.0/18' - - '103.224.0.0/22' - - '103.224.40.0/21' - - '103.224.60.0/22' - - '103.224.220.0/22' - - '103.224.224.0/21' - - '103.224.232.0/22' - - '103.225.32.0/22' - - '103.226.40.0/22' - - '103.226.56.0/21' - - '103.226.80.0/22' - - '103.226.116.0/22' - - '103.226.132.0/22' - - '103.226.156.0/22' - - '103.226.180.0/22' - - '103.226.196.0/22' - - '103.227.48.0/22' - - '103.227.72.0/21' - - '103.227.80.0/22' - - '103.227.100.0/22' - - '103.227.120.0/22' - - '103.227.132.0/22' - - '103.227.136.0/22' - - '103.227.196.0/22' - - '103.227.204.0/23' - - '103.227.206.0/24' - - '103.227.212.0/22' - - '103.227.228.0/22' - - '103.228.12.0/22' - - '103.228.88.0/22' - - '103.228.136.0/22' - - '103.228.160.0/22' - - '103.228.176.0/22' - - '103.228.204.0/22' - - '103.228.208.0/22' - - '103.228.228.0/22' - - '103.228.232.0/22' - - '103.229.20.0/22' - - '103.229.136.0/22' - - '103.229.148.0/22' - - '103.229.172.0/22' - - '103.229.212.0/22' - - '103.229.216.0/21' - - '103.229.228.0/22' - - '103.229.236.0/22' - - '103.229.240.0/22' - - '103.230.0.0/22' - - '103.230.28.0/22' - - '103.230.40.0/21' - - '103.230.96.0/22' - - '103.230.196.0/22' - - '103.230.200.0/21' - - '103.230.212.0/22' - - '103.230.236.0/22' - - '103.231.16.0/21' - - '103.231.64.0/21' - - '103.231.144.0/22' - - '103.231.180.0/22' - - '103.231.244.0/22' - - '103.232.4.0/22' - - '103.232.17.168/29' - - '103.232.144.0/22' - - '103.233.4.0/22' - - '103.233.44.0/22' - - '103.233.52.0/22' - - '103.233.104.0/22' - - '103.233.128.0/22' - - '103.233.136.0/22' - - '103.233.228.0/22' - - '103.234.0.0/22' - - '103.234.20.0/22' - - '103.234.56.0/22' - - '103.234.124.0/22' - - '103.234.128.0/22' - - '103.234.172.0/22' - - '103.234.180.0/22' - - '103.235.56.0/21' - - '103.235.80.0/22' - - '103.235.85.0/24' - - '103.235.87.0/24' - - '103.235.128.0/20' - - '103.235.144.0/21' - - '103.235.184.0/22' - - '103.235.192.0/22' - - '103.235.200.0/22' - - '103.235.220.0/22' - - '103.235.224.0/19' - - '103.236.0.0/18' - - '103.236.64.0/19' - - '103.236.96.0/22' - - '103.236.120.0/22' - - '103.236.184.0/22' - - '103.236.240.0/20' - - '103.237.0.0/20' - - '103.237.24.0/21' - - '103.237.68.0/22' - - '103.237.88.0/22' - - '103.237.152.0/22' - - '103.237.176.0/20' - - '103.237.192.0/18' - - '103.238.0.0/21' - - '103.238.18.0/23' - - '103.238.20.0/22' - - '103.238.24.0/21' - - '103.238.32.0/20' - - '103.238.48.0/21' - - '103.238.56.0/22' - - '103.238.88.0/21' - - '103.238.96.0/22' - - '103.238.132.0/22' - - '103.238.140.0/22' - - '103.238.144.0/22' - - '103.238.160.0/22' - - '103.238.165.0/24' - - '103.238.166.0/23' - - '103.238.168.0/21' - - '103.238.176.0/20' - - '103.238.196.0/22' - - '103.238.204.0/22' - - '103.238.252.0/22' - - '103.239.0.0/22' - - '103.239.44.0/22' - - '103.239.68.0/22' - - '103.239.152.0/21' - - '103.239.180.0/22' - - '103.239.184.0/22' - - '103.239.192.0/21' - - '103.239.204.0/22' - - '103.239.208.0/22' - - '103.239.224.0/22' - - '103.239.244.0/22' - - '103.240.16.0/22' - - '103.240.36.0/22' - - '103.240.72.0/22' - - '103.240.84.0/22' - - '103.240.124.0/22' - - '103.240.172.0/22' - - '103.240.188.0/22' - - '103.240.244.0/22' - - '103.241.12.0/22' - - '103.241.92.0/22' - - '103.241.96.0/22' - - '103.241.160.0/22' - - '103.241.184.0/21' - - '103.241.220.0/22' - - '103.242.64.0/23' - - '103.242.128.0/23' - - '103.242.160.0/22' - - '103.242.168.0/21' - - '103.242.176.0/22' - - '103.242.200.0/22' - - '103.242.212.0/22' - - '103.242.220.0/22' - - '103.242.240.0/22' - - '103.243.136.0/22' - - '103.243.252.0/22' - - '103.244.16.0/22' - - '103.244.58.0/23' - - '103.244.60.0/22' - - '103.244.64.0/20' - - '103.244.80.0/21' - - '103.244.116.0/22' - - '103.244.164.0/22' - - '103.244.232.0/22' - - '103.244.252.0/22' - - '103.245.23.0/24' - - '103.245.52.0/22' - - '103.245.60.0/22' - - '103.245.80.0/22' - - '103.245.124.0/22' - - '103.245.128.0/22' - - '103.246.8.0/21' - - '103.246.120.0/21' - - '103.246.132.0/22' - - '103.246.152.0/22' - - '103.247.168.0/21' - - '103.247.176.0/22' - - '103.247.200.0/22' - - '103.247.212.0/22' - - '103.248.64.0/23' - - '103.248.100.0/22' - - '103.248.124.0/22' - - '103.248.152.0/22' - - '103.248.168.0/22' - - '103.248.192.0/22' - - '103.248.212.0/22' - - '103.248.224.0/21' - - '103.249.8.0/21' - - '103.249.52.0/22' - - '103.249.128.0/22' - - '103.249.136.0/22' - - '103.249.144.0/22' - - '103.249.164.0/22' - - '103.249.168.0/21' - - '103.249.176.0/22' - - '103.249.188.0/22' - - '103.249.192.0/22' - - '103.249.244.0/22' - - '103.249.252.0/22' - - '103.250.32.0/22' - - '103.250.104.0/22' - - '103.250.124.0/22' - - '103.250.180.0/22' - - '103.250.192.0/22' - - '103.250.216.0/22' - - '103.250.224.0/22' - - '103.250.236.0/22' - - '103.250.248.0/21' - - '103.251.32.0/22' - - '103.251.84.0/22' - - '103.251.96.0/22' - - '103.251.124.0/22' - - '103.251.160.0/22' - - '103.251.192.0/22' - - '103.251.204.0/22' - - '103.251.240.0/22' - - '103.252.28.0/22' - - '103.252.36.0/22' - - '103.252.64.0/22' - - '103.252.96.0/22' - - '103.252.104.0/22' - - '103.252.172.0/22' - - '103.252.204.0/22' - - '103.252.208.0/22' - - '103.252.232.0/22' - - '103.252.248.0/22' - - '103.253.4.0/22' - - '103.253.60.0/22' - - '103.253.204.0/22' - - '103.253.220.0/22' - - '103.253.224.0/22' - - '103.253.232.0/22' - - '103.254.8.0/22' - - '103.254.20.0/22' - - '103.254.64.0/21' - - '103.254.76.0/22' - - '103.254.112.0/22' - - '103.254.176.0/22' - - '103.254.188.0/22' - - '103.255.68.0/22' - - '103.255.88.0/21' - - '103.255.136.0/21' - - '103.255.184.0/22' - - '103.255.200.0/22' - - '103.255.208.0/22' - - '103.255.228.0/22' - - '106.0.0.0/24' - - '106.0.2.0/23' - - '106.0.4.0/22' - - '106.0.8.0/21' - - '106.0.16.0/20' - - '106.0.44.0/22' - - '106.0.64.0/18' - - '106.2.0.0/23' - - '106.2.3.0/24' - - '106.2.4.0/22' - - '106.2.8.0/21' - - '106.2.16.0/20' - - '106.2.32.0/19' - - '106.2.64.0/18' - - '106.2.128.0/20' - - '106.2.144.0/21' - - '106.2.152.0/22' - - '106.2.156.0/23' - - '106.2.160.0/19' - - '106.2.192.0/18' - - '106.3.16.0/20' - - '106.3.32.0/19' - - '106.3.64.0/20' - - '106.3.80.0/22' - - '106.3.88.0/21' - - '106.3.96.0/19' - - '106.3.128.0/19' - - '106.3.164.0/22' - - '106.3.168.0/21' - - '106.3.176.0/20' - - '106.3.192.0/18' - - '106.4.0.0/14' - - '106.8.0.0/15' - - '106.11.0.0/16' - - '106.12.0.0/14' - - '106.16.0.0/12' - - '106.32.0.0/12' - - '106.48.0.0/21' - - '106.48.8.0/22' - - '106.48.16.0/20' - - '106.48.32.0/20' - - '106.48.57.0/24' - - '106.48.60.0/24' - - '106.48.63.0/24' - - '106.48.64.0/18' - - '106.48.128.0/17' - - '106.49.1.0/24' - - '106.49.2.0/23' - - '106.49.4.0/22' - - '106.49.8.0/21' - - '106.49.16.0/20' - - '106.49.32.0/19' - - '106.49.64.0/19' - - '106.49.96.0/24' - - '106.49.98.0/23' - - '106.49.100.0/22' - - '106.49.104.0/21' - - '106.49.112.0/20' - - '106.49.128.0/17' - - '106.50.0.0/16' - - '106.52.0.0/14' - - '106.56.0.0/13' - - '106.74.0.0/16' - - '106.75.0.0/17' - - '106.75.128.0/18' - - '106.75.201.0/24' - - '106.75.204.0/22' - - '106.75.208.0/20' - - '106.75.224.0/19' - - '106.80.0.0/12' - - '106.108.0.0/14' - - '106.112.0.0/12' - - '106.224.0.0/12' - - '109.71.4.0/24' - - '109.244.0.0/16' - - '110.6.0.0/15' - - '110.16.0.0/14' - - '110.34.40.0/21' - - '110.40.0.0/15' - - '110.42.0.0/16' - - '110.43.0.0/18' - - '110.43.64.0/21' - - '110.43.72.0/22' - - '110.43.76.0/23' - - '110.43.80.0/20' - - '110.43.96.0/19' - - '110.43.128.0/17' - - '110.44.12.0/22' - - '110.44.144.0/20' - - '110.48.0.0/16' - - '110.51.0.0/16' - - '110.52.0.0/15' - - '110.56.0.0/13' - - '110.64.0.0/15' - - '110.72.0.0/15' - - '110.75.0.0/16' - - '110.76.0.0/20' - - '110.76.16.0/22' - - '110.76.20.0/24' - - '110.76.22.0/24' - - '110.76.24.0/21' - - '110.76.32.0/19' - - '110.76.132.0/22' - - '110.76.156.0/22' - - '110.76.184.0/22' - - '110.76.192.0/18' - - '110.77.0.0/17' - - '110.80.0.0/13' - - '110.88.0.0/14' - - '110.92.68.0/22' - - '110.93.32.0/19' - - '110.94.0.0/15' - - '110.96.0.0/11' - - '110.152.0.0/14' - - '110.156.0.0/15' - - '110.166.0.0/15' - - '110.172.192.0/18' - - '110.173.0.0/19' - - '110.173.32.0/20' - - '110.173.64.0/19' - - '110.173.192.0/19' - - '110.176.0.0/12' - - '110.192.0.0/11' - - '110.228.0.0/14' - - '110.232.32.0/19' - - '110.236.0.0/15' - - '110.240.0.0/12' - - '111.0.0.0/10' - - '111.66.0.0/16' - - '111.67.192.0/20' - - '111.68.64.0/19' - - '111.72.0.0/13' - - '111.85.0.0/16' - - '111.91.192.0/19' - - '111.92.248.0/21' - - '111.112.0.0/14' - - '111.116.0.0/15' - - '111.118.200.0/21' - - '111.119.64.0/18' - - '111.119.128.0/19' - - '111.120.0.0/14' - - '111.124.0.0/16' - - '111.126.0.0/15' - - '111.128.0.0/11' - - '111.160.0.0/13' - - '111.170.0.0/16' - - '111.172.0.0/14' - - '111.176.0.0/13' - - '111.186.0.0/15' - - '111.192.0.0/12' - - '111.208.0.0/13' - - '111.221.28.0/24' - - '111.221.128.0/17' - - '111.222.0.0/16' - - '111.223.4.0/22' - - '111.223.8.0/21' - - '111.223.16.0/22' - - '111.223.240.0/22' - - '111.223.249.0/24' - - '111.223.250.0/23' - - '111.224.0.0/13' - - '111.235.96.0/19' - - '111.235.156.0/22' - - '111.235.160.0/21' - - '111.235.170.0/23' - - '111.235.172.0/22' - - '111.235.176.0/20' - - '112.0.0.0/10' - - '112.64.0.0/14' - - '112.73.64.0/18' - - '112.74.0.0/16' - - '112.80.0.0/12' - - '112.96.0.0/13' - - '112.109.128.0/17' - - '112.111.0.0/16' - - '112.112.0.0/14' - - '112.116.0.0/15' - - '112.122.0.0/15' - - '112.124.0.0/14' - - '112.128.0.0/14' - - '112.132.0.0/16' - - '112.137.48.0/21' - - '112.192.0.0/14' - - '112.224.0.0/11' - - '113.0.0.0/13' - - '113.8.0.0/15' - - '113.11.192.0/19' - - '113.12.0.0/14' - - '113.16.0.0/15' - - '113.18.0.0/16' - - '113.21.232.0/21' - - '113.24.0.0/14' - - '113.31.0.0/16' - - '113.44.0.0/14' - - '113.48.0.0/14' - - '113.52.160.0/19' - - '113.52.228.0/22' - - '113.54.0.0/15' - - '113.56.0.0/15' - - '113.58.0.0/16' - - '113.59.0.0/17' - - '113.59.224.0/22' - - '113.62.0.0/15' - - '113.64.0.0/10' - - '113.128.0.0/15' - - '113.130.96.0/20' - - '113.130.112.0/21' - - '113.132.0.0/14' - - '113.136.0.0/13' - - '113.194.0.0/15' - - '113.197.100.0/23' - - '113.197.102.0/24' - - '113.197.104.0/22' - - '113.200.0.0/15' - - '113.202.0.0/16' - - '113.204.0.0/14' - - '113.208.96.0/19' - - '113.208.128.0/17' - - '113.209.0.0/16' - - '113.212.0.0/18' - - '113.212.100.0/22' - - '113.212.184.0/21' - - '113.213.0.0/17' - - '113.214.0.0/15' - - '113.218.0.0/15' - - '113.220.0.0/14' - - '113.224.0.0/12' - - '113.240.0.0/13' - - '113.248.0.0/14' - - '114.28.0.0/17' - - '114.28.128.0/18' - - '114.28.192.0/19' - - '114.28.232.0/22' - - '114.28.240.0/20' - - '114.31.64.0/21' - - '114.54.0.0/15' - - '114.60.0.0/14' - - '114.64.0.0/14' - - '114.68.0.0/16' - - '114.79.64.0/18' - - '114.80.0.0/12' - - '114.96.0.0/13' - - '114.104.0.0/14' - - '114.110.0.0/20' - - '114.110.64.0/18' - - '114.111.0.0/19' - - '114.111.160.0/19' - - '114.112.4.0/22' - - '114.112.8.0/22' - - '114.112.24.0/21' - - '114.112.32.0/19' - - '114.112.64.0/19' - - '114.112.96.0/20' - - '114.112.116.0/22' - - '114.112.120.0/21' - - '114.112.136.0/21' - - '114.112.144.0/20' - - '114.112.160.0/19' - - '114.112.192.0/19' - - '114.113.0.0/17' - - '114.113.128.0/21' - - '114.113.140.0/22' - - '114.113.144.0/20' - - '114.113.160.0/19' - - '114.113.196.0/22' - - '114.113.200.0/21' - - '114.113.208.0/20' - - '114.113.224.0/20' - - '114.114.0.0/15' - - '114.116.0.0/15' - - '114.118.0.0/16' - - '114.119.0.0/17' - - '114.119.192.0/18' - - '114.132.0.0/16' - - '114.135.0.0/16' - - '114.138.0.0/15' - - '114.141.64.0/21' - - '114.141.80.0/21' - - '114.141.128.0/18' - - '114.196.0.0/15' - - '114.198.248.0/21' - - '114.208.0.0/12' - - '114.224.0.0/11' - - '115.24.0.0/14' - - '115.28.0.0/15' - - '115.31.64.0/20' - - '115.32.0.0/14' - - '115.42.56.0/22' - - '115.44.0.0/14' - - '115.48.0.0/12' - - '115.69.64.0/20' - - '115.84.0.0/18' - - '115.84.192.0/19' - - '115.85.192.0/18' - - '115.100.0.0/14' - - '115.104.0.0/14' - - '115.120.0.0/14' - - '115.124.16.0/20' - - '115.148.0.0/14' - - '115.152.0.0/13' - - '115.166.64.0/19' - - '115.168.0.0/16' - - '115.169.0.0/23' - - '115.169.3.0/24' - - '115.169.6.0/24' - - '115.169.9.0/24' - - '115.169.14.0/23' - - '115.169.16.0/20' - - '115.169.39.0/24' - - '115.169.42.0/23' - - '115.169.44.0/22' - - '115.169.48.0/20' - - '115.169.64.0/18' - - '115.169.128.0/17' - - '115.170.0.0/15' - - '115.172.0.0/14' - - '115.180.0.0/14' - - '115.187.0.0/20' - - '115.190.0.0/15' - - '115.192.0.0/11' - - '115.224.0.0/12' - - '116.0.8.0/21' - - '116.0.24.0/21' - - '116.1.0.0/16' - - '116.2.0.0/15' - - '116.4.0.0/14' - - '116.8.0.0/14' - - '116.13.0.0/16' - - '116.16.0.0/12' - - '116.50.0.0/20' - - '116.52.0.0/14' - - '116.56.0.0/15' - - '116.58.128.0/20' - - '116.58.208.0/20' - - '116.60.0.0/14' - - '116.66.0.0/18' - - '116.66.64.0/19' - - '116.66.96.0/20' - - '116.66.120.0/22' - - '116.68.136.0/21' - - '116.68.176.0/21' - - '116.69.0.0/16' - - '116.70.0.0/17' - - '116.76.0.0/14' - - '116.85.0.0/17' - - '116.85.128.0/18' - - '116.85.192.0/19' - - '116.85.224.0/20' - - '116.85.240.0/21' - - '116.85.248.0/23' - - '116.85.250.0/24' - - '116.85.252.0/22' - - '116.89.144.0/20' - - '116.90.80.0/20' - - '116.90.184.0/21' - - '116.95.0.0/16' - - '116.112.0.0/14' - - '116.116.0.0/15' - - '116.128.0.0/10' - - '116.192.0.0/16' - - '116.193.16.0/20' - - '116.193.32.0/19' - - '116.193.176.0/21' - - '116.194.0.0/15' - - '116.196.0.0/21' - - '116.196.8.0/22' - - '116.196.12.0/23' - - '116.196.16.0/20' - - '116.196.32.0/19' - - '116.196.64.0/18' - - '116.196.128.0/18' - - '116.196.192.0/21' - - '116.196.200.0/23' - - '116.196.203.0/24' - - '116.196.204.0/22' - - '116.196.208.0/20' - - '116.196.224.0/19' - - '116.197.160.0/21' - - '116.197.180.0/23' - - '116.198.0.0/16' - - '116.199.0.0/17' - - '116.199.128.0/19' - - '116.204.0.0/17' - - '116.204.232.0/22' - - '116.205.0.0/16' - - '116.207.0.0/16' - - '116.208.0.0/14' - - '116.212.160.0/20' - - '116.213.64.0/18' - - '116.213.128.0/17' - - '116.214.32.0/19' - - '116.214.64.0/20' - - '116.214.128.0/17' - - '116.215.0.0/16' - - '116.216.0.0/14' - - '116.224.0.0/12' - - '116.242.0.0/15' - - '116.244.0.0/14' - - '116.248.0.0/15' - - '116.252.0.0/15' - - '116.254.104.0/21' - - '116.254.129.0/24' - - '116.254.130.0/23' - - '116.254.132.0/22' - - '116.254.136.0/21' - - '116.254.144.0/20' - - '116.254.160.0/19' - - '116.254.192.0/18' - - '116.255.128.0/17' - - '117.8.0.0/13' - - '117.21.0.0/16' - - '117.22.0.0/15' - - '117.24.0.0/13' - - '117.32.0.0/13' - - '117.40.0.0/14' - - '117.44.0.0/15' - - '117.48.0.0/15' - - '117.50.0.0/16' - - '117.51.128.0/23' - - '117.51.131.0/24' - - '117.51.132.0/22' - - '117.51.136.0/21' - - '117.51.144.0/20' - - '117.51.160.0/19' - - '117.51.192.0/18' - - '117.53.48.0/20' - - '117.53.176.0/20' - - '117.57.0.0/16' - - '117.58.0.0/18' - - '117.59.0.0/16' - - '117.60.0.0/14' - - '117.64.0.0/13' - - '117.72.0.0/15' - - '117.74.64.0/19' - - '117.74.128.0/17' - - '117.75.0.0/16' - - '117.76.0.0/14' - - '117.80.0.0/12' - - '117.100.0.0/15' - - '117.103.16.0/20' - - '117.103.40.0/21' - - '117.103.72.0/21' - - '117.103.128.0/20' - - '117.104.168.0/21' - - '117.106.0.0/15' - - '117.112.0.0/13' - - '117.120.64.0/18' - - '117.120.128.0/17' - - '117.121.0.0/19' - - '117.121.32.0/21' - - '117.121.40.0/22' - - '117.121.44.0/23' - - '117.121.46.0/24' - - '117.121.48.0/20' - - '117.121.64.0/18' - - '117.121.128.0/20' - - '117.121.148.0/22' - - '117.121.152.0/21' - - '117.121.160.0/19' - - '117.121.192.0/21' - - '117.122.128.0/17' - - '117.124.0.0/14' - - '117.128.0.0/10' - - '118.24.0.0/15' - - '118.26.0.0/19' - - '118.26.40.0/21' - - '118.26.48.0/20' - - '118.26.64.0/19' - - '118.26.112.0/21' - - '118.26.121.0/24' - - '118.26.122.0/23' - - '118.26.124.0/23' - - '118.26.128.0/17' - - '118.28.0.0/15' - - '118.30.0.0/20' - - '118.30.16.0/21' - - '118.30.24.0/22' - - '118.30.32.0/19' - - '118.30.64.0/18' - - '118.30.128.0/17' - - '118.31.0.0/16' - - '118.64.0.0/15' - - '118.66.0.0/16' - - '118.67.112.0/20' - - '118.72.0.0/13' - - '118.80.0.0/15' - - '118.84.0.0/15' - - '118.88.32.0/19' - - '118.88.64.0/18' - - '118.88.128.0/17' - - '118.89.0.0/16' - - '118.102.16.0/20' - - '118.102.32.0/21' - - '118.103.164.0/22' - - '118.103.168.0/21' - - '118.103.176.0/22' - - '118.103.245.0/24' - - '118.103.246.0/23' - - '118.112.0.0/13' - - '118.120.0.0/14' - - '118.124.0.0/15' - - '118.126.1.0/24' - - '118.126.2.0/23' - - '118.126.4.0/22' - - '118.126.8.0/21' - - '118.126.16.0/23' - - '118.126.18.0/24' - - '118.126.32.0/19' - - '118.126.64.0/18' - - '118.126.128.0/17' - - '118.127.128.0/19' - - '118.132.0.0/14' - - '118.144.0.0/14' - - '118.178.0.0/16' - - '118.180.0.0/14' - - '118.184.5.0/24' - - '118.184.109.0/24' - - '118.184.110.0/23' - - '118.184.116.0/22' - - '118.184.120.0/23' - - '118.184.122.0/24' - - '118.184.128.0/18' - - '118.184.192.0/19' - - '118.184.240.0/20' - - '118.186.0.0/15' - - '118.188.0.0/16' - - '118.190.0.0/16' - - '118.191.0.0/20' - - '118.191.32.0/19' - - '118.191.64.0/18' - - '118.191.144.0/21' - - '118.191.153.0/24' - - '118.191.154.0/23' - - '118.191.156.0/22' - - '118.191.160.0/19' - - '118.191.192.0/20' - - '118.191.209.0/24' - - '118.191.210.0/23' - - '118.191.212.0/22' - - '118.191.248.0/21' - - '118.192.0.0/16' - - '118.193.0.0/22' - - '118.193.96.0/19' - - '118.194.0.0/17' - - '118.194.128.0/18' - - '118.194.192.0/19' - - '118.194.232.0/21' - - '118.194.240.0/20' - - '118.195.0.0/16' - - '118.196.0.0/14' - - '118.202.0.0/15' - - '118.204.0.0/14' - - '118.212.0.0/15' - - '118.215.192.0/18' - - '118.224.0.0/14' - - '118.228.0.0/17' - - '118.228.128.0/20' - - '118.228.144.0/21' - - '118.228.156.0/22' - - '118.228.160.0/19' - - '118.228.192.0/18' - - '118.229.0.0/16' - - '118.230.0.0/16' - - '118.239.0.0/16' - - '118.242.0.0/16' - - '118.244.0.0/14' - - '118.248.0.0/13' - - '119.0.0.0/15' - - '119.2.0.0/19' - - '119.2.128.0/17' - - '119.3.0.0/16' - - '119.4.0.0/14' - - '119.10.0.0/17' - - '119.15.136.0/21' - - '119.16.0.0/16' - - '119.18.192.0/20' - - '119.18.208.0/21' - - '119.18.224.0/19' - - '119.19.0.0/16' - - '119.20.0.0/14' - - '119.27.64.0/18' - - '119.27.128.0/17' - - '119.28.28.0/24' - - '119.29.0.0/16' - - '119.30.48.0/20' - - '119.31.192.0/19' - - '119.32.0.0/14' - - '119.36.0.0/15' - - '119.38.0.0/17' - - '119.38.128.0/18' - - '119.38.192.0/20' - - '119.38.208.0/22' - - '119.38.212.0/23' - - '119.38.214.0/27' - - '119.38.214.56/29' - - '119.38.214.64/26' - - '119.38.214.128/25' - - '119.38.215.0/24' - - '119.38.216.0/21' - - '119.39.0.0/16' - - '119.40.0.0/18' - - '119.40.64.0/20' - - '119.40.128.0/17' - - '119.41.0.0/16' - - '119.42.0.0/19' - - '119.42.52.0/22' - - '119.42.128.0/20' - - '119.42.224.0/19' - - '119.44.0.0/15' - - '119.48.0.0/13' - - '119.57.0.0/16' - - '119.58.0.0/16' - - '119.59.128.0/17' - - '119.60.0.0/15' - - '119.62.0.0/16' - - '119.63.32.0/19' - - '119.75.208.0/20' - - '119.78.0.0/15' - - '119.80.0.0/16' - - '119.82.208.0/20' - - '119.84.0.0/14' - - '119.88.0.0/16' - - '119.89.0.0/17' - - '119.89.128.0/21' - - '119.89.136.0/23' - - '119.89.139.0/24' - - '119.89.140.0/22' - - '119.89.144.0/20' - - '119.89.160.0/20' - - '119.89.176.0/22' - - '119.89.180.0/23' - - '119.89.183.0/24' - - '119.89.184.0/21' - - '119.89.192.0/23' - - '119.89.194.0/24' - - '119.89.196.0/22' - - '119.89.200.0/21' - - '119.89.208.0/21' - - '119.89.217.0/24' - - '119.89.218.0/23' - - '119.89.220.0/22' - - '119.89.224.0/19' - - '119.90.0.0/15' - - '119.96.0.0/13' - - '119.108.0.0/15' - - '119.112.0.0/12' - - '119.128.0.0/12' - - '119.144.0.0/14' - - '119.148.160.0/19' - - '119.151.192.0/18' - - '119.160.200.0/21' - - '119.161.120.0/21' - - '119.161.128.0/21' - - '119.161.160.0/19' - - '119.161.192.0/18' - - '119.162.0.0/15' - - '119.164.0.0/14' - - '119.176.0.0/12' - - '119.232.0.0/15' - - '119.235.128.0/19' - - '119.235.160.0/20' - - '119.235.184.0/22' - - '119.248.0.0/14' - - '119.252.96.0/21' - - '119.252.240.0/21' - - '119.252.249.0/24' - - '119.252.252.0/23' - - '119.253.0.0/16' - - '119.254.0.0/15' - - '120.0.0.0/12' - - '120.24.0.0/14' - - '120.30.0.0/15' - - '120.32.0.0/13' - - '120.40.0.0/14' - - '120.44.0.0/15' - - '120.46.0.0/16' - - '120.48.0.0/15' - - '120.52.0.0/14' - - '120.64.0.0/13' - - '120.72.32.0/19' - - '120.72.128.0/17' - - '120.76.0.0/14' - - '120.80.0.0/13' - - '120.88.8.0/21' - - '120.90.0.0/15' - - '120.92.0.0/17' - - '120.92.128.0/18' - - '120.92.192.0/22' - - '120.92.198.0/23' - - '120.92.200.0/21' - - '120.92.208.0/20' - - '120.92.224.0/19' - - '120.94.0.0/15' - - '120.128.0.0/13' - - '120.136.16.0/21' - - '120.136.128.0/18' - - '120.137.0.0/17' - - '120.143.128.0/19' - - '120.192.0.0/10' - - '121.0.8.0/21' - - '121.0.16.0/20' - - '121.4.0.0/15' - - '121.8.0.0/13' - - '121.16.0.0/12' - - '121.32.0.0/13' - - '121.40.0.0/14' - - '121.46.0.0/18' - - '121.46.76.0/22' - - '121.46.128.0/17' - - '121.47.0.0/16' - - '121.48.0.0/15' - - '121.50.8.0/21' - - '121.51.0.0/16' - - '121.52.160.0/19' - - '121.52.208.0/20' - - '121.52.224.0/19' - - '121.54.176.0/21' - - '121.55.0.0/18' - - '121.56.0.0/15' - - '121.58.0.0/17' - - '121.58.136.0/21' - - '121.58.144.0/20' - - '121.58.160.0/21' - - '121.59.0.0/20' - - '121.59.16.0/21' - - '121.59.24.0/22' - - '121.59.28.0/24' - - '121.59.31.0/24' - - '121.59.33.0/24' - - '121.59.35.0/24' - - '121.59.36.0/22' - - '121.59.40.0/21' - - '121.59.48.0/20' - - '121.59.64.0/18' - - '121.59.128.0/17' - - '121.60.0.0/14' - - '121.68.0.0/14' - - '121.76.0.0/15' - - '121.79.128.0/18' - - '121.89.0.0/16' - - '121.100.128.0/17' - - '121.101.0.0/18' - - '121.101.208.0/20' - - '121.192.0.0/13' - - '121.200.192.0/23' - - '121.200.194.0/24' - - '121.200.196.0/22' - - '121.201.0.0/16' - - '121.204.0.0/14' - - '121.224.0.0/12' - - '121.248.0.0/14' - - '121.255.0.0/16' - - '122.0.64.0/18' - - '122.0.128.0/17' - - '122.4.0.0/14' - - '122.9.0.0/16' - - '122.10.132.0/23' - - '122.10.136.0/23' - - '122.10.216.0/22' - - '122.10.228.0/22' - - '122.10.232.0/21' - - '122.10.240.0/22' - - '122.11.0.0/17' - - '122.12.0.0/15' - - '122.14.0.0/17' - - '122.14.192.0/18' - - '122.48.0.0/16' - - '122.49.0.0/18' - - '122.51.0.0/16' - - '122.64.0.0/14' - - '122.68.0.0/15' - - '122.70.0.0/18' - - '122.70.64.0/19' - - '122.70.96.0/20' - - '122.70.112.0/21' - - '122.70.120.0/22' - - '122.70.124.0/23' - - '122.70.126.0/24' - - '122.70.128.0/17' - - '122.71.0.0/16' - - '122.72.0.0/13' - - '122.80.0.0/12' - - '122.96.0.0/15' - - '122.98.144.0/20' - - '122.98.160.0/21' - - '122.98.172.0/22' - - '122.98.176.0/20' - - '122.98.192.0/21' - - '122.98.232.0/21' - - '122.98.240.0/20' - - '122.102.0.0/20' - - '122.102.64.0/19' - - '122.112.0.0/18' - - '122.112.64.0/19' - - '122.112.96.0/22' - - '122.112.118.0/24' - - '122.112.122.0/24' - - '122.112.125.0/24' - - '122.112.128.0/17' - - '122.113.0.0/16' - - '122.114.0.0/16' - - '122.115.0.0/18' - - '122.115.80.0/20' - - '122.115.96.0/19' - - '122.115.128.0/17' - - '122.119.0.0/16' - - '122.128.100.0/22' - - '122.128.120.0/21' - - '122.136.0.0/13' - - '122.144.128.0/17' - - '122.152.192.0/18' - - '122.156.0.0/14' - - '122.188.0.0/14' - - '122.192.0.0/14' - - '122.198.0.0/16' - - '122.200.40.0/21' - - '122.200.64.0/18' - - '122.201.48.0/20' - - '122.204.0.0/14' - - '122.224.0.0/12' - - '122.240.0.0/13' - - '122.248.24.0/21' - - '122.248.48.0/20' - - '122.255.64.0/21' - - '123.0.128.0/21' - - '123.0.136.0/23' - - '123.0.139.0/24' - - '123.0.140.0/22' - - '123.0.144.0/20' - - '123.0.160.0/19' - - '123.4.0.0/14' - - '123.8.0.0/13' - - '123.49.130.0/23' - - '123.49.132.0/22' - - '123.49.136.0/22' - - '123.49.152.0/21' - - '123.49.160.0/19' - - '123.49.192.0/18' - - '123.50.160.0/19' - - '123.52.0.0/14' - - '123.56.0.0/15' - - '123.58.0.0/18' - - '123.58.64.0/20' - - '123.58.80.0/21' - - '123.58.88.0/22' - - '123.58.96.0/19' - - '123.58.128.0/18' - - '123.58.224.0/19' - - '123.59.0.0/16' - - '123.61.0.0/16' - - '123.62.0.0/16' - - '123.64.0.0/11' - - '123.96.0.0/15' - - '123.98.0.0/17' - - '123.99.128.0/17' - - '123.100.0.0/19' - - '123.100.232.0/24' - - '123.101.0.0/16' - - '123.103.0.0/20' - - '123.103.16.0/21' - - '123.103.24.0/22' - - '123.103.28.0/23' - - '123.103.30.0/24' - - '123.103.32.0/19' - - '123.103.64.0/18' - - '123.108.134.0/24' - - '123.108.138.0/23' - - '123.108.140.0/24' - - '123.108.142.0/24' - - '123.108.208.0/20' - - '123.112.0.0/12' - - '123.128.0.0/13' - - '123.137.0.0/16' - - '123.138.0.0/15' - - '123.144.0.0/12' - - '123.160.0.0/12' - - '123.176.60.0/22' - - '123.176.80.0/20' - - '123.177.0.0/16' - - '123.178.0.0/15' - - '123.180.0.0/14' - - '123.184.0.0/13' - - '123.196.0.0/15' - - '123.199.128.0/17' - - '123.206.0.0/15' - - '123.232.0.0/14' - - '123.242.0.0/17' - - '123.242.192.0/21' - - '123.244.0.0/14' - - '123.249.0.0/16' - - '123.253.240.0/22' - - '123.254.96.0/21' - - '124.6.64.0/18' - - '124.14.0.0/15' - - '124.16.0.0/15' - - '124.20.0.0/14' - - '124.28.192.0/18' - - '124.29.0.0/17' - - '124.31.0.0/16' - - '124.40.112.0/20' - - '124.40.128.0/18' - - '124.40.192.0/19' - - '124.40.240.0/22' - - '124.42.0.0/16' - - '124.47.0.0/18' - - '124.64.0.0/15' - - '124.66.0.0/17' - - '124.67.0.0/16' - - '124.68.0.0/19' - - '124.68.32.0/20' - - '124.68.48.0/21' - - '124.68.56.0/22' - - '124.68.60.0/23' - - '124.68.63.0/24' - - '124.68.64.0/18' - - '124.68.128.0/18' - - '124.68.192.0/19' - - '124.68.224.0/23' - - '124.68.226.0/24' - - '124.68.228.0/22' - - '124.68.232.0/21' - - '124.68.240.0/23' - - '124.68.242.0/24' - - '124.68.244.0/23' - - '124.68.254.0/23' - - '124.69.0.0/16' - - '124.70.0.0/15' - - '124.72.0.0/13' - - '124.88.0.0/13' - - '124.108.8.0/21' - - '124.108.40.0/21' - - '124.109.96.0/21' - - '124.112.0.0/14' - - '124.116.0.0/15' - - '124.118.0.0/16' - - '124.119.0.0/17' - - '124.119.128.0/18' - - '124.119.192.0/19' - - '124.119.224.0/20' - - '124.119.240.0/22' - - '124.119.244.0/23' - - '124.119.246.0/25' - - '124.119.246.128/26' - - '124.119.246.192/27' - - '124.119.246.224/28' - - '124.119.246.240/29' - - '124.119.246.248/30' - - '124.119.246.254/31' - - '124.119.247.0/24' - - '124.119.248.0/21' - - '124.126.0.0/15' - - '124.128.0.0/13' - - '124.147.128.0/17' - - '124.150.137.0/24' - - '124.151.0.0/16' - - '124.152.0.0/16' - - '124.160.0.0/13' - - '124.172.0.0/16' - - '124.173.32.0/19' - - '124.173.64.0/18' - - '124.173.128.0/17' - - '124.174.0.0/15' - - '124.192.0.0/15' - - '124.196.0.0/16' - - '124.200.0.0/13' - - '124.220.0.0/14' - - '124.224.0.0/12' - - '124.240.0.0/17' - - '124.240.128.0/18' - - '124.242.0.0/16' - - '124.243.192.0/18' - - '124.248.0.0/17' - - '124.249.0.0/16' - - '124.250.0.0/15' - - '124.254.0.0/18' - - '125.31.192.0/18' - - '125.32.0.0/12' - - '125.58.128.0/17' - - '125.61.128.0/17' - - '125.62.0.0/18' - - '125.64.0.0/11' - - '125.96.0.0/15' - - '125.98.0.0/16' - - '125.104.0.0/13' - - '125.112.0.0/12' - - '125.169.0.0/16' - - '125.171.0.0/16' - - '125.208.0.0/19' - - '125.208.37.0/24' - - '125.208.40.0/24' - - '125.208.45.0/24' - - '125.208.46.0/23' - - '125.208.48.0/20' - - '125.210.0.0/15' - - '125.213.0.0/17' - - '125.214.96.0/19' - - '125.215.0.0/18' - - '125.216.0.0/13' - - '125.254.128.0/17' - - '128.108.0.0/16' - - '129.28.0.0/16' - - '129.204.0.0/16' - - '129.211.0.0/16' - - '129.223.254.0/24' - - '130.36.146.0/23' - - '130.214.218.0/23' - - '131.228.96.0/24' - - '131.253.12.0/29' - - '131.253.12.80/28' - - '131.253.12.240/29' - - '132.232.0.0/16' - - '132.237.134.0/24' - - '134.175.0.0/16' - - '135.84.247.0/24' - - '135.84.254.0/23' - - '135.159.208.0/20' - - '135.244.80.0/20' - - '137.59.59.0/24' - - '137.59.88.0/22' - - '138.32.244.0/24' - - '139.5.56.0/21' - - '139.5.80.0/22' - - '139.5.92.0/22' - - '139.5.128.0/22' - - '139.5.160.0/22' - - '139.5.192.0/22' - - '139.5.204.0/22' - - '139.5.244.0/22' - - '139.9.0.0/16' - - '139.129.0.0/16' - - '139.138.238.0/28' - - '139.148.0.0/16' - - '139.155.0.0/16' - - '139.159.0.0/19' - - '139.159.32.0/21' - - '139.159.40.0/22' - - '139.159.52.0/22' - - '139.159.56.0/21' - - '139.159.64.0/19' - - '139.159.96.0/20' - - '139.159.112.0/22' - - '139.159.116.0/23' - - '139.159.120.0/21' - - '139.159.128.0/17' - - '139.170.0.0/16' - - '139.176.0.0/16' - - '139.183.0.0/16' - - '139.186.0.0/16' - - '139.189.0.0/16' - - '139.196.0.0/15' - - '139.198.0.0/21' - - '139.198.8.0/23' - - '139.198.11.0/24' - - '139.198.12.0/22' - - '139.198.16.0/20' - - '139.198.32.0/19' - - '139.198.66.0/23' - - '139.198.68.0/22' - - '139.198.72.0/21' - - '139.198.80.0/20' - - '139.198.96.0/20' - - '139.198.116.0/22' - - '139.198.122.0/23' - - '139.198.124.0/22' - - '139.198.128.0/17' - - '139.199.0.0/16' - - '139.200.0.0/13' - - '139.208.0.0/13' - - '139.217.0.0/16' - - '139.219.0.0/16' - - '139.220.0.0/17' - - '139.220.128.0/18' - - '139.220.192.0/22' - - '139.220.196.0/23' - - '139.220.200.0/21' - - '139.220.208.0/23' - - '139.220.212.0/22' - - '139.220.216.0/21' - - '139.220.224.0/19' - - '139.221.0.0/16' - - '139.224.0.0/16' - - '139.226.0.0/15' - - '140.75.0.0/16' - - '140.101.208.0/24' - - '140.143.0.0/16' - - '140.179.0.0/16' - - '140.205.0.0/16' - - '140.206.0.0/15' - - '140.210.0.0/16' - - '140.224.0.0/16' - - '140.237.0.0/16' - - '140.240.0.0/16' - - '140.242.223.0/24' - - '140.242.224.0/24' - - '140.243.0.0/16' - - '140.246.0.0/16' - - '140.249.0.0/16' - - '140.250.0.0/16' - - '140.255.0.0/16' - - '142.70.0.0/16' - - '142.86.0.0/16' - - '144.0.0.0/16' - - '144.7.0.0/16' - - '144.12.0.0/16' - - '144.36.146.0/23' - - '144.48.64.0/22' - - '144.48.88.0/22' - - '144.48.156.0/22' - - '144.48.180.0/22' - - '144.48.184.0/22' - - '144.48.204.0/22' - - '144.48.208.0/21' - - '144.52.0.0/16' - - '144.123.0.0/16' - - '144.211.80.0/24' - - '144.211.138.0/24' - - '144.255.0.0/16' - - '146.56.192.0/18' - - '146.88.175.0/24' - - '146.196.56.0/22' - - '146.196.68.0/22' - - '146.196.92.0/22' - - '146.196.112.0/21' - - '146.196.124.0/22' - - '146.217.137.0/24' - - '146.222.79.0/24' - - '146.222.81.0/24' - - '146.222.94.0/24' - - '147.243.13.32/27' - - '147.243.13.64/27' - - '147.243.14.32/27' - - '148.70.0.0/16' - - '150.0.0.0/16' - - '150.115.0.0/16' - - '150.121.0.0/16' - - '150.122.0.0/16' - - '150.129.136.0/22' - - '150.129.192.0/22' - - '150.129.252.0/22' - - '150.138.0.0/15' - - '150.158.0.0/16' - - '150.222.88.0/23' - - '150.223.0.0/16' - - '150.242.0.0/21' - - '150.242.8.0/22' - - '150.242.28.0/22' - - '150.242.44.0/22' - - '150.242.48.0/21' - - '150.242.56.0/22' - - '150.242.76.0/22' - - '150.242.80.0/22' - - '150.242.92.0/22' - - '150.242.96.0/22' - - '150.242.112.0/21' - - '150.242.120.0/22' - - '150.242.152.0/22' - - '150.242.158.0/24' - - '150.242.160.0/21' - - '150.242.168.0/22' - - '150.242.184.0/21' - - '150.242.192.0/22' - - '150.242.224.0/22' - - '150.242.232.0/21' - - '150.242.240.0/21' - - '150.242.248.0/22' - - '150.248.0.0/16' - - '150.255.0.0/16' - - '152.32.178.0/23' - - '152.104.128.0/17' - - '152.136.0.0/16' - - '153.0.0.0/16' - - '153.3.0.0/16' - - '153.34.0.0/15' - - '153.36.0.0/15' - - '153.99.0.0/16' - - '153.101.0.0/16' - - '153.118.0.0/15' - - '154.8.128.0/17' - - '155.126.176.0/23' - - '156.107.160.0/24' - - '156.107.170.0/24' - - '156.107.179.0/24' - - '156.107.181.0/24' - - '156.154.62.0/23' - - '157.0.0.0/16' - - '157.18.0.0/16' - - '157.61.0.0/16' - - '157.119.8.0/21' - - '157.119.16.0/22' - - '157.119.28.0/22' - - '157.119.132.0/22' - - '157.119.136.0/21' - - '157.119.144.0/20' - - '157.119.160.0/21' - - '157.119.172.0/22' - - '157.119.192.0/21' - - '157.119.240.0/22' - - '157.119.252.0/22' - - '157.122.0.0/16' - - '157.133.186.0/23' - - '157.133.192.0/21' - - '157.133.212.0/24' - - '157.133.236.0/24' - - '157.148.0.0/16' - - '157.156.0.0/16' - - '157.255.0.0/16' - - '158.79.0.0/24' - - '158.79.2.0/23' - - '158.79.4.0/22' - - '158.79.8.0/21' - - '158.79.16.0/20' - - '158.79.32.0/19' - - '158.79.64.0/18' - - '158.79.128.0/17' - - '159.75.0.0/16' - - '159.221.232.0/22' - - '159.226.0.0/16' - - '160.19.212.0/22' - - '160.19.216.0/22' - - '160.20.48.0/22' - - '160.62.10.0/24' - - '160.83.109.0/24' - - '160.83.110.0/23' - - '160.202.60.0/23' - - '160.202.62.0/24' - - '160.202.148.0/22' - - '160.202.152.0/22' - - '160.202.212.0/22' - - '160.202.216.0/21' - - '160.202.224.0/19' - - '160.238.64.0/22' - - '161.120.0.0/16' - - '161.163.0.0/21' - - '161.163.28.0/23' - - '161.163.176.0/24' - - '161.163.178.0/23' - - '161.163.180.0/22' - - '161.189.0.0/16' - - '161.207.0.0/16' - - '162.14.0.0/21' - - '162.14.12.0/22' - - '162.14.16.0/21' - - '162.14.26.0/23' - - '162.14.28.0/22' - - '162.14.32.0/19' - - '162.14.64.0/18' - - '162.14.128.0/17' - - '162.105.0.0/16' - - '163.0.0.0/16' - - '163.47.4.0/22' - - '163.53.0.0/20' - - '163.53.36.0/22' - - '163.53.40.0/22' - - '163.53.48.0/20' - - '163.53.64.0/22' - - '163.53.88.0/21' - - '163.53.96.0/19' - - '163.53.128.0/21' - - '163.53.136.0/22' - - '163.53.160.0/20' - - '163.53.188.0/22' - - '163.53.220.0/22' - - '163.53.240.0/22' - - '163.116.202.0/23' - - '163.125.0.0/16' - - '163.142.0.0/16' - - '163.177.0.0/16' - - '163.179.0.0/16' - - '163.204.0.0/16' - - '163.244.246.0/24' - - '164.52.80.0/24' - - '165.84.197.0/24' - - '165.84.251.0/25' - - '165.84.251.128/26' - - '165.84.251.192/27' - - '165.84.251.224/28' - - '165.84.251.240/29' - - '165.84.251.248/30' - - '165.84.251.253/32' - - '165.84.251.254/31' - - '165.156.30.0/24' - - '165.254.82.27/32' - - '166.111.0.0/16' - - '167.139.0.0/16' - - '167.189.0.0/16' - - '167.220.244.0/22' - - '168.159.144.0/21' - - '168.159.152.0/22' - - '168.159.156.0/23' - - '168.159.158.0/24' - - '168.160.0.0/16' - - '168.230.0.0/24' - - '170.179.0.0/16' - - '170.225.224.0/23' - - '170.252.152.0/21' - - '171.8.0.0/13' - - '171.34.0.0/15' - - '171.36.0.0/14' - - '171.40.0.0/13' - - '171.80.0.0/12' - - '171.104.0.0/13' - - '171.112.0.0/12' - - '171.208.0.0/12' - - '172.81.192.0/18' - - '173.39.200.0/23' - - '175.0.0.0/12' - - '175.16.0.0/13' - - '175.24.0.0/14' - - '175.30.0.0/15' - - '175.42.0.0/15' - - '175.44.0.0/16' - - '175.46.0.0/15' - - '175.48.0.0/12' - - '175.64.0.0/11' - - '175.102.0.0/16' - - '175.106.128.0/17' - - '175.111.144.0/20' - - '175.111.160.0/20' - - '175.111.184.0/22' - - '175.146.0.0/15' - - '175.148.0.0/14' - - '175.152.0.0/14' - - '175.158.96.0/22' - - '175.160.0.0/12' - - '175.176.156.0/22' - - '175.176.188.0/22' - - '175.178.0.0/16' - - '175.184.128.0/18' - - '175.185.0.0/16' - - '175.186.0.0/15' - - '175.188.0.0/14' - - '180.76.16.0/20' - - '180.76.32.0/19' - - '180.76.64.0/18' - - '180.76.128.0/18' - - '180.76.192.0/19' - - '180.76.224.0/20' - - '180.76.240.0/24' - - '180.76.242.0/23' - - '180.76.244.0/22' - - '180.76.248.0/22' - - '180.76.252.0/23' - - '180.76.255.0/24' - - '180.77.0.0/16' - - '180.78.0.0/15' - - '180.84.0.0/15' - - '180.86.0.0/16' - - '180.87.93.98/32' - - '180.88.0.0/14' - - '180.94.56.0/21' - - '180.94.96.0/20' - - '180.94.120.0/21' - - '180.95.128.0/17' - - '180.96.0.0/11' - - '180.129.128.0/17' - - '180.130.0.0/16' - - '180.136.0.0/13' - - '180.148.16.0/21' - - '180.148.152.0/21' - - '180.148.216.0/21' - - '180.148.224.0/19' - - '180.149.128.0/19' - - '180.150.160.0/21' - - '180.150.176.0/20' - - '180.152.0.0/13' - - '180.160.0.0/12' - - '180.178.112.0/21' - - '180.178.192.0/18' - - '180.184.0.0/14' - - '180.188.0.0/17' - - '180.189.148.0/22' - - '180.200.252.0/22' - - '180.201.0.0/16' - - '180.202.0.0/15' - - '180.208.0.0/15' - - '180.210.212.0/22' - - '180.210.233.0/24' - - '180.210.236.0/22' - - '180.212.0.0/15' - - '180.222.224.0/19' - - '180.223.0.0/18' - - '180.223.80.0/20' - - '180.223.96.0/19' - - '180.223.129.0/24' - - '180.223.130.0/23' - - '180.223.132.0/22' - - '180.223.136.0/21' - - '180.223.144.0/20' - - '180.223.160.0/19' - - '180.223.192.0/18' - - '180.233.0.0/18' - - '180.233.64.0/19' - - '180.233.144.0/22' - - '180.235.64.0/19' - - '180.235.112.0/22' - - '182.16.144.0/21' - - '182.16.192.0/19' - - '182.18.0.0/17' - - '182.23.184.0/21' - - '182.23.200.0/21' - - '182.32.0.0/12' - - '182.48.96.0/19' - - '182.49.0.0/16' - - '182.50.0.0/22' - - '182.50.8.0/21' - - '182.50.112.0/20' - - '182.51.0.0/16' - - '182.54.0.0/17' - - '182.61.0.0/18' - - '182.61.128.0/19' - - '182.61.192.0/18' - - '182.80.0.0/13' - - '182.88.0.0/14' - - '182.92.0.0/16' - - '182.96.0.0/11' - - '182.128.0.0/12' - - '182.144.0.0/13' - - '182.157.0.0/16' - - '182.160.64.0/19' - - '182.174.0.0/15' - - '182.200.0.0/13' - - '182.236.128.0/17' - - '182.237.24.0/21' - - '182.238.0.0/16' - - '182.239.0.0/19' - - '182.240.0.0/13' - - '182.254.0.0/18' - - '182.254.64.0/19' - - '182.254.96.0/20' - - '182.254.112.0/22' - - '182.254.117.0/24' - - '182.254.119.0/24' - - '182.254.120.0/21' - - '182.254.128.0/17' - - '183.0.0.0/10' - - '183.64.0.0/13' - - '183.78.160.0/21' - - '183.78.180.0/22' - - '183.81.180.0/22' - - '183.84.0.0/15' - - '183.91.128.0/22' - - '183.91.136.0/21' - - '183.91.144.0/20' - - '183.92.0.0/14' - - '183.128.0.0/11' - - '183.160.0.0/13' - - '183.168.0.0/15' - - '183.170.0.0/16' - - '183.172.0.0/14' - - '183.184.0.0/13' - - '183.192.0.0/10' - - '185.109.236.0/24' - - '185.216.118.0/26' - - '185.216.118.64/27' - - '185.216.118.112/28' - - '185.216.118.128/25' - - '188.131.128.0/17' - - '192.11.23.0/24' - - '192.11.26.0/24' - - '192.11.39.0/24' - - '192.11.236.0/24' - - '192.23.191.0/24' - - '192.55.10.0/23' - - '192.55.40.0/24' - - '192.55.46.0/24' - - '192.55.68.0/22' - - '192.102.204.0/22' - - '192.124.154.0/24' - - '192.137.31.0/24' - - '192.140.128.0/21' - - '192.140.136.0/22' - - '192.140.156.0/22' - - '192.140.160.0/19' - - '192.140.192.0/20' - - '192.140.208.0/21' - - '192.144.128.0/17' - - '192.163.11.0/24' - - '192.232.97.0/24' - - '193.17.120.0/22' - - '193.20.64.0/22' - - '193.112.0.0/16' - - '193.200.196.0/24' - - '193.200.222.160/28' - - '194.138.136.0/24' - - '194.138.202.0/23' - - '194.138.245.0/24' - - '195.142.215.0/24' - - '198.175.100.0/22' - - '198.208.17.0/24' - - '198.208.19.0/24' - - '199.7.72.0/24' - - '199.65.192.0/21' - - '199.244.144.0/24' - - '202.0.100.0/23' - - '202.0.122.0/23' - - '202.1.105.0/24' - - '202.1.106.0/24' - - '202.3.128.0/23' - - '202.4.128.0/19' - - '202.4.252.0/22' - - '202.5.208.0/21' - - '202.5.216.0/22' - - '202.6.6.0/23' - - '202.6.66.0/23' - - '202.6.72.0/23' - - '202.6.87.0/24' - - '202.6.88.0/23' - - '202.6.92.0/23' - - '202.6.103.0/24' - - '202.6.108.0/24' - - '202.6.110.0/23' - - '202.6.114.0/24' - - '202.6.176.0/20' - - '202.8.0.0/24' - - '202.8.2.0/23' - - '202.8.4.0/23' - - '202.8.12.0/24' - - '202.8.24.0/24' - - '202.8.77.0/24' - - '202.8.128.0/19' - - '202.8.192.0/20' - - '202.9.32.0/24' - - '202.9.34.0/23' - - '202.9.48.0/23' - - '202.9.51.0/24' - - '202.9.52.0/23' - - '202.9.54.0/24' - - '202.9.57.0/24' - - '202.9.58.0/23' - - '202.10.64.0/21' - - '202.10.74.0/23' - - '202.10.76.0/22' - - '202.10.112.0/20' - - '202.12.1.0/24' - - '202.12.2.0/24' - - '202.12.17.0/24' - - '202.12.18.0/23' - - '202.12.72.0/24' - - '202.12.84.0/23' - - '202.12.96.0/24' - - '202.12.98.0/23' - - '202.12.106.0/24' - - '202.12.111.0/24' - - '202.12.116.0/24' - - '202.14.64.0/23' - - '202.14.69.0/24' - - '202.14.73.0/24' - - '202.14.74.0/23' - - '202.14.76.0/24' - - '202.14.78.0/23' - - '202.14.88.0/24' - - '202.14.97.0/24' - - '202.14.104.0/23' - - '202.14.108.0/23' - - '202.14.111.0/24' - - '202.14.114.0/23' - - '202.14.118.0/23' - - '202.14.124.0/23' - - '202.14.127.0/24' - - '202.14.129.0/24' - - '202.14.135.0/24' - - '202.14.136.0/24' - - '202.14.149.0/24' - - '202.14.151.0/24' - - '202.14.157.0/24' - - '202.14.158.0/23' - - '202.14.169.0/24' - - '202.14.170.0/23' - - '202.14.172.0/22' - - '202.14.176.0/24' - - '202.14.184.0/23' - - '202.14.208.0/23' - - '202.14.213.0/24' - - '202.14.219.0/24' - - '202.14.220.0/24' - - '202.14.222.0/23' - - '202.14.225.0/24' - - '202.14.226.0/23' - - '202.14.231.0/24' - - '202.14.235.0/24' - - '202.14.236.0/22' - - '202.14.246.0/24' - - '202.14.251.0/24' - - '202.20.66.0/24' - - '202.20.79.0/24' - - '202.20.87.0/24' - - '202.20.88.0/23' - - '202.20.90.0/24' - - '202.20.94.0/23' - - '202.20.114.0/24' - - '202.20.117.0/24' - - '202.20.120.0/24' - - '202.20.125.0/24' - - '202.20.126.0/23' - - '202.21.48.0/20' - - '202.21.131.0/24' - - '202.21.132.0/24' - - '202.21.141.0/24' - - '202.21.142.0/24' - - '202.21.147.0/24' - - '202.21.148.0/24' - - '202.21.150.0/23' - - '202.21.152.0/23' - - '202.21.154.0/24' - - '202.21.156.0/24' - - '202.21.208.0/24' - - '202.22.248.0/21' - - '202.27.12.0/24' - - '202.27.14.0/24' - - '202.27.136.0/23' - - '202.36.226.0/24' - - '202.38.0.0/22' - - '202.38.8.0/21' - - '202.38.48.0/20' - - '202.38.64.0/18' - - '202.38.128.0/21' - - '202.38.136.0/23' - - '202.38.138.0/24' - - '202.38.140.0/22' - - '202.38.146.0/23' - - '202.38.149.0/24' - - '202.38.150.0/23' - - '202.38.152.0/22' - - '202.38.156.0/24' - - '202.38.158.0/23' - - '202.38.160.0/23' - - '202.38.164.0/22' - - '202.38.168.0/22' - - '202.38.176.0/23' - - '202.38.184.0/21' - - '202.38.192.0/18' - - '202.40.4.0/23' - - '202.40.7.0/24' - - '202.40.15.0/24' - - '202.40.135.0/24' - - '202.40.136.0/24' - - '202.40.140.0/24' - - '202.40.143.0/24' - - '202.40.144.0/23' - - '202.40.150.0/24' - - '202.40.155.0/24' - - '202.40.156.0/24' - - '202.40.158.0/23' - - '202.40.162.0/24' - - '202.41.8.0/23' - - '202.41.11.0/24' - - '202.41.12.0/23' - - '202.41.128.0/24' - - '202.41.130.0/23' - - '202.41.142.0/24' - - '202.41.152.0/21' - - '202.41.192.0/24' - - '202.41.196.0/22' - - '202.41.200.0/22' - - '202.41.240.0/20' - - '202.43.76.0/22' - - '202.43.144.0/20' - - '202.44.16.0/20' - - '202.44.48.0/22' - - '202.44.67.0/24' - - '202.44.74.0/24' - - '202.44.97.0/24' - - '202.44.129.0/24' - - '202.44.132.0/23' - - '202.44.146.0/23' - - '202.45.0.0/23' - - '202.45.2.0/24' - - '202.45.15.0/24' - - '202.45.16.0/20' - - '202.46.16.0/23' - - '202.46.18.0/24' - - '202.46.20.0/23' - - '202.46.128.0/24' - - '202.46.224.0/20' - - '202.47.82.0/23' - - '202.47.96.0/20' - - '202.47.126.0/24' - - '202.47.128.0/24' - - '202.47.130.0/23' - - '202.52.34.0/24' - - '202.52.143.0/24' - - '202.53.140.0/24' - - '202.53.143.0/24' - - '202.53.202.0/24' - - '202.57.212.0/22' - - '202.57.216.0/22' - - '202.57.240.0/20' - - '202.58.0.0/24' - - '202.58.112.0/22' - - '202.59.0.0/23' - - '202.59.212.0/22' - - '202.59.236.0/24' - - '202.59.240.0/24' - - '202.60.48.0/21' - - '202.60.96.0/21' - - '202.60.112.0/20' - - '202.60.132.0/22' - - '202.60.136.0/21' - - '202.60.144.0/20' - - '202.61.68.0/22' - - '202.61.76.0/22' - - '202.61.88.0/22' - - '202.61.123.0/24' - - '202.61.127.0/24' - - '202.62.112.0/22' - - '202.62.248.0/22' - - '202.62.252.0/24' - - '202.62.255.0/24' - - '202.63.80.0/20' - - '202.63.160.0/19' - - '202.63.248.0/22' - - '202.63.253.0/24' - - '202.65.0.0/21' - - '202.65.8.0/23' - - '202.67.0.0/22' - - '202.69.4.0/23' - - '202.69.16.0/20' - - '202.70.0.0/19' - - '202.70.96.0/20' - - '202.70.192.0/20' - - '202.71.32.0/20' - - '202.72.40.0/21' - - '202.72.80.0/20' - - '202.72.112.0/20' - - '202.73.128.0/22' - - '202.73.240.0/20' - - '202.74.8.0/21' - - '202.74.36.0/24' - - '202.74.42.0/24' - - '202.74.52.0/24' - - '202.74.80.0/20' - - '202.74.254.0/23' - - '202.75.208.0/20' - - '202.75.252.0/22' - - '202.76.247.0/24' - - '202.76.252.0/22' - - '202.77.80.0/21' - - '202.77.92.0/22' - - '202.78.8.0/21' - - '202.79.224.0/21' - - '202.79.248.0/22' - - '202.80.192.0/20' - - '202.81.0.0/22' - - '202.81.176.0/20' - - '202.83.252.0/22' - - '202.84.0.0/20' - - '202.84.16.0/23' - - '202.84.22.0/24' - - '202.84.24.0/21' - - '202.85.208.0/20' - - '202.86.249.0/24' - - '202.87.80.0/20' - - '202.88.32.0/22' - - '202.89.8.0/21' - - '202.89.96.0/22' - - '202.89.108.0/22' - - '202.89.119.0/24' - - '202.89.232.0/21' - - '202.90.0.0/22' - - '202.90.16.0/20' - - '202.90.37.0/24' - - '202.90.96.0/19' - - '202.90.193.0/24' - - '202.90.196.0/24' - - '202.90.205.0/24' - - '202.90.224.0/20' - - '202.91.0.0/22' - - '202.91.96.0/20' - - '202.91.128.0/22' - - '202.91.176.0/20' - - '202.91.224.0/19' - - '202.92.0.0/22' - - '202.92.8.0/21' - - '202.92.48.0/20' - - '202.92.252.0/22' - - '202.93.0.0/22' - - '202.93.252.0/22' - - '202.94.0.0/19' - - '202.94.74.0/24' - - '202.94.81.0/24' - - '202.94.92.0/22' - - '202.95.240.0/21' - - '202.95.252.0/22' - - '202.96.0.0/12' - - '202.112.0.0/13' - - '202.120.0.0/15' - - '202.122.0.0/21' - - '202.122.32.0/21' - - '202.122.64.0/19' - - '202.122.112.0/20' - - '202.122.128.0/24' - - '202.122.132.0/24' - - '202.123.96.0/20' - - '202.123.116.0/22' - - '202.123.120.0/22' - - '202.124.16.0/21' - - '202.124.24.0/22' - - '202.125.107.0/24' - - '202.125.109.0/24' - - '202.125.112.0/20' - - '202.125.176.0/20' - - '202.127.0.0/21' - - '202.127.12.0/22' - - '202.127.16.0/20' - - '202.127.40.0/21' - - '202.127.48.0/20' - - '202.127.112.0/20' - - '202.127.128.0/19' - - '202.127.160.0/21' - - '202.127.192.0/20' - - '202.127.208.0/23' - - '202.127.212.0/22' - - '202.127.216.0/21' - - '202.127.224.0/19' - - '202.129.208.0/24' - - '202.130.0.0/19' - - '202.130.39.0/24' - - '202.130.224.0/19' - - '202.131.16.0/21' - - '202.131.59.0/24' - - '202.131.208.0/20' - - '202.133.32.0/20' - - '202.134.58.0/24' - - '202.134.128.0/20' - - '202.134.208.0/20' - - '202.136.48.0/20' - - '202.136.208.0/20' - - '202.136.224.0/20' - - '202.136.248.0/22' - - '202.136.254.0/23' - - '202.137.231.0/24' - - '202.140.140.0/22' - - '202.140.144.0/20' - - '202.141.160.0/19' - - '202.142.16.0/20' - - '202.143.4.0/22' - - '202.143.16.0/20' - - '202.143.32.0/20' - - '202.143.56.0/21' - - '202.143.100.0/22' - - '202.143.104.0/22' - - '202.146.160.0/20' - - '202.146.186.0/24' - - '202.146.188.0/22' - - '202.146.196.0/22' - - '202.146.200.0/21' - - '202.147.12.0/26' - - '202.147.12.64/27' - - '202.147.12.96/28' - - '202.147.12.128/29' - - '202.147.12.136/30' - - '202.147.12.140/31' - - '202.147.12.142/32' - - '202.147.12.144/28' - - '202.147.12.160/27' - - '202.147.12.192/26' - - '202.147.144.0/20' - - '202.148.32.0/20' - - '202.148.64.0/18' - - '202.149.32.0/19' - - '202.149.160.0/19' - - '202.149.224.0/19' - - '202.150.16.0/20' - - '202.150.32.0/20' - - '202.150.56.0/22' - - '202.150.192.0/20' - - '202.150.224.0/19' - - '202.151.0.0/22' - - '202.151.128.0/19' - - '202.152.176.0/20' - - '202.153.0.0/22' - - '202.153.7.0/24' - - '202.153.48.0/20' - - '202.157.192.0/19' - - '202.158.160.0/19' - - '202.158.242.0/24' - - '202.160.156.0/22' - - '202.160.176.0/20' - - '202.162.67.0/24' - - '202.162.75.0/24' - - '202.164.0.0/20' - - '202.164.96.0/19' - - '202.165.176.0/20' - - '202.165.208.0/20' - - '202.165.239.0/24' - - '202.165.240.0/23' - - '202.165.243.0/24' - - '202.165.245.0/24' - - '202.165.251.0/24' - - '202.165.252.0/22' - - '202.166.224.0/19' - - '202.168.80.0/22' - - '202.168.128.0/20' - - '202.168.160.0/19' - - '202.170.128.0/19' - - '202.170.216.0/21' - - '202.170.224.0/19' - - '202.171.216.0/21' - - '202.171.232.0/24' - - '202.171.235.0/24' - - '202.172.0.0/22' - - '202.172.7.0/24' - - '202.173.0.0/22' - - '202.173.6.0/24' - - '202.173.8.0/21' - - '202.173.112.0/22' - - '202.173.224.0/19' - - '202.174.64.0/20' - - '202.174.124.0/22' - - '202.176.224.0/19' - - '202.179.160.0/20' - - '202.179.240.0/20' - - '202.180.128.0/19' - - '202.180.208.0/21' - - '202.181.8.0/22' - - '202.181.28.0/22' - - '202.181.112.0/20' - - '202.182.32.0/20' - - '202.182.192.0/19' - - '202.189.0.0/18' - - '202.189.80.0/20' - - '202.189.184.0/21' - - '202.191.0.0/24' - - '202.191.68.0/22' - - '202.191.72.0/21' - - '202.191.80.0/20' - - '202.192.0.0/12' - - '203.0.4.0/22' - - '203.0.10.0/23' - - '203.0.18.0/24' - - '203.0.24.0/24' - - '203.0.42.0/23' - - '203.0.45.0/24' - - '203.0.46.0/23' - - '203.0.81.0/24' - - '203.0.82.0/23' - - '203.0.90.0/23' - - '203.0.96.0/23' - - '203.0.104.0/21' - - '203.0.114.0/23' - - '203.0.122.0/24' - - '203.0.128.0/24' - - '203.0.130.0/23' - - '203.0.132.0/22' - - '203.0.137.0/24' - - '203.0.142.0/24' - - '203.0.144.0/24' - - '203.0.146.0/24' - - '203.0.148.0/24' - - '203.0.150.0/23' - - '203.0.152.0/24' - - '203.0.177.0/24' - - '203.0.224.0/24' - - '203.1.4.0/22' - - '203.1.18.0/24' - - '203.1.26.0/23' - - '203.1.65.0/24' - - '203.1.66.0/23' - - '203.1.70.0/23' - - '203.1.76.0/23' - - '203.1.90.0/24' - - '203.1.97.0/24' - - '203.1.98.0/23' - - '203.1.100.0/22' - - '203.1.108.0/24' - - '203.1.253.0/24' - - '203.1.254.0/24' - - '203.2.64.0/21' - - '203.2.73.0/24' - - '203.2.112.0/21' - - '203.2.126.0/23' - - '203.2.140.0/24' - - '203.2.150.0/24' - - '203.2.152.0/22' - - '203.2.156.0/23' - - '203.2.160.0/21' - - '203.2.180.0/23' - - '203.2.196.0/23' - - '203.2.209.0/24' - - '203.2.214.0/23' - - '203.2.226.0/23' - - '203.2.229.0/24' - - '203.2.236.0/23' - - '203.3.68.0/24' - - '203.3.72.0/23' - - '203.3.75.0/24' - - '203.3.80.0/21' - - '203.3.96.0/22' - - '203.3.105.0/24' - - '203.3.112.0/21' - - '203.3.120.0/24' - - '203.3.123.0/24' - - '203.3.135.0/24' - - '203.3.139.0/24' - - '203.3.143.0/24' - - '203.4.132.0/23' - - '203.4.134.0/24' - - '203.4.151.0/24' - - '203.4.152.0/22' - - '203.4.174.0/23' - - '203.4.180.0/24' - - '203.4.186.0/24' - - '203.4.205.0/24' - - '203.4.208.0/22' - - '203.4.227.0/24' - - '203.4.230.0/23' - - '203.5.4.0/23' - - '203.5.7.0/24' - - '203.5.8.0/23' - - '203.5.11.0/24' - - '203.5.21.0/24' - - '203.5.22.0/24' - - '203.5.44.0/24' - - '203.5.46.0/23' - - '203.5.52.0/22' - - '203.5.56.0/23' - - '203.5.60.0/23' - - '203.5.114.0/23' - - '203.5.118.0/24' - - '203.5.120.0/24' - - '203.5.172.0/24' - - '203.5.180.0/23' - - '203.5.182.0/24' - - '203.5.185.0/24' - - '203.5.186.0/24' - - '203.5.188.0/23' - - '203.5.190.0/24' - - '203.5.195.0/24' - - '203.5.214.0/23' - - '203.5.218.0/23' - - '203.6.131.0/24' - - '203.6.136.0/24' - - '203.6.138.0/23' - - '203.6.142.0/24' - - '203.6.150.0/23' - - '203.6.157.0/24' - - '203.6.159.0/24' - - '203.6.224.0/20' - - '203.6.248.0/23' - - '203.7.129.0/24' - - '203.7.138.0/23' - - '203.7.147.0/24' - - '203.7.150.0/23' - - '203.7.158.0/24' - - '203.7.192.0/23' - - '203.7.200.0/24' - - '203.8.0.0/24' - - '203.8.8.0/24' - - '203.8.23.0/24' - - '203.8.70.0/24' - - '203.8.82.0/24' - - '203.8.86.0/23' - - '203.8.91.0/24' - - '203.8.110.0/23' - - '203.8.115.0/24' - - '203.8.166.0/23' - - '203.8.169.0/24' - - '203.8.173.0/24' - - '203.8.184.0/24' - - '203.8.186.0/23' - - '203.8.190.0/23' - - '203.8.192.0/24' - - '203.8.197.0/24' - - '203.8.198.0/23' - - '203.8.203.0/24' - - '203.8.209.0/24' - - '203.8.210.0/23' - - '203.8.212.0/22' - - '203.8.217.0/24' - - '203.8.220.0/24' - - '203.9.32.0/24' - - '203.9.36.0/23' - - '203.9.57.0/24' - - '203.9.63.0/24' - - '203.9.65.0/24' - - '203.9.70.0/23' - - '203.9.72.0/24' - - '203.9.75.0/24' - - '203.9.76.0/23' - - '203.9.96.0/22' - - '203.9.100.0/23' - - '203.9.108.0/24' - - '203.9.158.0/24' - - '203.10.34.0/24' - - '203.10.56.0/24' - - '203.10.74.0/23' - - '203.10.84.0/22' - - '203.10.88.0/24' - - '203.10.95.0/24' - - '203.10.125.0/24' - - '203.11.70.0/24' - - '203.11.76.0/22' - - '203.11.82.0/24' - - '203.11.84.0/22' - - '203.11.100.0/22' - - '203.11.109.0/24' - - '203.11.117.0/24' - - '203.11.122.0/24' - - '203.11.126.0/24' - - '203.11.136.0/22' - - '203.11.141.0/24' - - '203.11.142.0/23' - - '203.11.180.0/22' - - '203.11.208.0/22' - - '203.12.16.0/24' - - '203.12.19.0/24' - - '203.12.24.0/24' - - '203.12.57.0/24' - - '203.12.65.0/24' - - '203.12.66.0/24' - - '203.12.70.0/23' - - '203.12.87.0/24' - - '203.12.100.0/23' - - '203.12.103.0/24' - - '203.12.114.0/24' - - '203.12.118.0/24' - - '203.12.130.0/24' - - '203.12.137.0/24' - - '203.12.196.0/22' - - '203.12.211.0/24' - - '203.12.219.0/24' - - '203.12.226.0/24' - - '203.12.240.0/22' - - '203.13.18.0/24' - - '203.13.24.0/24' - - '203.13.44.0/23' - - '203.13.88.0/23' - - '203.13.92.0/22' - - '203.13.173.0/24' - - '203.13.224.0/23' - - '203.13.227.0/24' - - '203.13.233.0/24' - - '203.14.24.0/22' - - '203.14.33.0/24' - - '203.14.56.0/24' - - '203.14.61.0/24' - - '203.14.62.0/24' - - '203.14.104.0/24' - - '203.14.114.0/23' - - '203.14.118.0/24' - - '203.14.162.0/24' - - '203.14.184.0/21' - - '203.14.192.0/24' - - '203.14.194.0/23' - - '203.14.214.0/24' - - '203.14.231.0/24' - - '203.14.246.0/24' - - '203.15.0.0/20' - - '203.15.20.0/23' - - '203.15.22.0/24' - - '203.15.87.0/24' - - '203.15.88.0/23' - - '203.15.105.0/24' - - '203.15.112.0/21' - - '203.15.130.0/23' - - '203.15.149.0/24' - - '203.15.151.0/24' - - '203.15.156.0/22' - - '203.15.174.0/24' - - '203.15.227.0/24' - - '203.15.232.0/22' - - '203.15.238.0/23' - - '203.15.240.0/23' - - '203.15.246.0/24' - - '203.16.10.0/24' - - '203.16.12.0/23' - - '203.16.16.0/21' - - '203.16.27.0/24' - - '203.16.38.0/24' - - '203.16.49.0/24' - - '203.16.50.0/23' - - '203.16.58.0/24' - - '203.16.63.0/24' - - '203.16.133.0/24' - - '203.16.161.0/24' - - '203.16.162.0/24' - - '203.16.186.0/23' - - '203.16.228.0/24' - - '203.16.238.0/24' - - '203.16.240.0/24' - - '203.16.245.0/24' - - '203.17.2.0/24' - - '203.17.18.0/24' - - '203.17.28.0/24' - - '203.17.39.0/24' - - '203.17.56.0/24' - - '203.17.74.0/23' - - '203.17.88.0/23' - - '203.17.136.0/24' - - '203.17.164.0/24' - - '203.17.187.0/24' - - '203.17.190.0/23' - - '203.17.231.0/24' - - '203.17.233.0/24' - - '203.17.248.0/23' - - '203.17.255.0/24' - - '203.18.2.0/23' - - '203.18.4.0/24' - - '203.18.7.0/24' - - '203.18.31.0/24' - - '203.18.37.0/24' - - '203.18.48.0/23' - - '203.18.52.0/24' - - '203.18.72.0/22' - - '203.18.80.0/23' - - '203.18.87.0/24' - - '203.18.100.0/23' - - '203.18.105.0/24' - - '203.18.107.0/24' - - '203.18.110.0/24' - - '203.18.129.0/24' - - '203.18.131.0/24' - - '203.18.132.0/23' - - '203.18.144.0/24' - - '203.18.153.0/24' - - '203.18.199.0/24' - - '203.18.208.0/24' - - '203.18.211.0/24' - - '203.18.215.0/24' - - '203.19.1.0/24' - - '203.19.18.0/24' - - '203.19.24.0/24' - - '203.19.30.0/24' - - '203.19.41.0/24' - - '203.19.44.0/23' - - '203.19.46.0/24' - - '203.19.58.0/24' - - '203.19.60.0/23' - - '203.19.64.0/24' - - '203.19.68.0/24' - - '203.19.72.0/24' - - '203.19.101.0/24' - - '203.19.111.0/24' - - '203.19.131.0/24' - - '203.19.133.0/24' - - '203.19.144.0/24' - - '203.19.147.0/24' - - '203.19.149.0/24' - - '203.19.156.0/24' - - '203.19.176.0/24' - - '203.19.178.0/23' - - '203.19.208.0/24' - - '203.19.228.0/22' - - '203.19.233.0/24' - - '203.19.242.0/24' - - '203.19.248.0/23' - - '203.19.255.0/24' - - '203.20.17.0/24' - - '203.20.40.0/23' - - '203.20.44.0/24' - - '203.20.48.0/24' - - '203.20.61.0/24' - - '203.20.65.0/24' - - '203.20.84.0/23' - - '203.20.89.0/24' - - '203.20.106.0/23' - - '203.20.115.0/24' - - '203.20.117.0/24' - - '203.20.118.0/23' - - '203.20.122.0/24' - - '203.20.126.0/23' - - '203.20.135.0/24' - - '203.20.140.0/22' - - '203.20.150.0/24' - - '203.20.230.0/24' - - '203.20.232.0/24' - - '203.20.236.0/24' - - '203.21.0.0/23' - - '203.21.2.0/24' - - '203.21.8.0/24' - - '203.21.10.0/24' - - '203.21.18.0/24' - - '203.21.33.0/24' - - '203.21.34.0/24' - - '203.21.41.0/24' - - '203.21.44.0/24' - - '203.21.68.0/24' - - '203.21.82.0/24' - - '203.21.96.0/22' - - '203.21.124.0/24' - - '203.21.136.0/23' - - '203.21.145.0/24' - - '203.21.206.0/24' - - '203.22.24.0/24' - - '203.22.28.0/23' - - '203.22.31.0/24' - - '203.22.68.0/24' - - '203.22.76.0/24' - - '203.22.84.0/24' - - '203.22.87.0/24' - - '203.22.92.0/22' - - '203.22.99.0/24' - - '203.22.106.0/24' - - '203.22.122.0/23' - - '203.22.131.0/24' - - '203.22.163.0/24' - - '203.22.166.0/24' - - '203.22.170.0/24' - - '203.22.176.0/22' - - '203.22.180.0/23' - - '203.22.182.0/30' - - '203.22.182.6/31' - - '203.22.182.8/29' - - '203.22.182.18/31' - - '203.22.182.20/30' - - '203.22.182.24/29' - - '203.22.182.32/27' - - '203.22.182.64/26' - - '203.22.182.128/25' - - '203.22.183.0/24' - - '203.22.194.0/24' - - '203.22.242.0/23' - - '203.22.245.0/24' - - '203.22.246.0/24' - - '203.22.252.0/23' - - '203.23.0.0/24' - - '203.23.47.0/24' - - '203.23.61.0/24' - - '203.23.62.0/23' - - '203.23.73.0/24' - - '203.23.85.0/24' - - '203.23.92.0/22' - - '203.23.98.0/24' - - '203.23.107.0/24' - - '203.23.112.0/24' - - '203.23.130.0/24' - - '203.23.140.0/23' - - '203.23.172.0/24' - - '203.23.182.0/24' - - '203.23.186.0/23' - - '203.23.192.0/24' - - '203.23.197.0/24' - - '203.23.198.0/24' - - '203.23.204.0/22' - - '203.23.224.0/24' - - '203.23.226.0/23' - - '203.23.228.0/22' - - '203.23.249.0/24' - - '203.23.251.0/24' - - '203.24.13.0/24' - - '203.24.18.0/24' - - '203.24.27.0/24' - - '203.24.43.0/24' - - '203.24.56.0/24' - - '203.24.58.0/24' - - '203.24.67.0/24' - - '203.24.74.0/24' - - '203.24.79.0/24' - - '203.24.80.0/23' - - '203.24.84.0/23' - - '203.24.86.0/24' - - '203.24.90.0/24' - - '203.24.111.0/24' - - '203.24.112.0/24' - - '203.24.116.0/24' - - '203.24.122.0/23' - - '203.24.145.0/24' - - '203.24.152.0/23' - - '203.24.157.0/24' - - '203.24.161.0/24' - - '203.24.167.0/24' - - '203.24.186.0/23' - - '203.24.199.0/24' - - '203.24.202.0/24' - - '203.24.212.0/23' - - '203.24.217.0/24' - - '203.24.219.0/24' - - '203.24.244.0/24' - - '203.25.19.0/24' - - '203.25.20.0/23' - - '203.25.46.0/24' - - '203.25.64.0/23' - - '203.25.91.0/24' - - '203.25.99.0/24' - - '203.25.100.0/24' - - '203.25.106.0/24' - - '203.25.131.0/24' - - '203.25.135.0/24' - - '203.25.138.0/24' - - '203.25.147.0/24' - - '203.25.153.0/24' - - '203.25.154.0/23' - - '203.25.164.0/24' - - '203.25.166.0/24' - - '203.25.174.0/23' - - '203.25.180.0/24' - - '203.25.182.0/24' - - '203.25.191.0/24' - - '203.25.199.0/24' - - '203.25.200.0/24' - - '203.25.202.0/23' - - '203.25.208.0/20' - - '203.25.229.0/24' - - '203.25.235.0/24' - - '203.25.236.0/24' - - '203.25.242.0/24' - - '203.26.12.0/24' - - '203.26.34.0/24' - - '203.26.49.0/24' - - '203.26.50.0/24' - - '203.26.55.0/24' - - '203.26.56.0/23' - - '203.26.60.0/24' - - '203.26.65.0/24' - - '203.26.68.0/24' - - '203.26.76.0/24' - - '203.26.80.0/24' - - '203.26.84.0/24' - - '203.26.97.0/24' - - '203.26.102.0/23' - - '203.26.115.0/24' - - '203.26.116.0/24' - - '203.26.129.0/24' - - '203.26.143.0/24' - - '203.26.144.0/24' - - '203.26.148.0/23' - - '203.26.154.0/24' - - '203.26.158.0/23' - - '203.26.170.0/24' - - '203.26.173.0/24' - - '203.26.176.0/24' - - '203.26.185.0/24' - - '203.26.202.0/23' - - '203.26.210.0/24' - - '203.26.214.0/24' - - '203.26.222.0/24' - - '203.26.224.0/24' - - '203.26.228.0/24' - - '203.26.232.0/24' - - '203.27.0.0/24' - - '203.27.10.0/24' - - '203.27.15.0/24' - - '203.27.16.0/24' - - '203.27.20.0/24' - - '203.27.22.0/23' - - '203.27.40.0/24' - - '203.27.45.0/24' - - '203.27.53.0/24' - - '203.27.65.0/24' - - '203.27.66.0/24' - - '203.27.81.0/24' - - '203.27.88.0/24' - - '203.27.102.0/24' - - '203.27.109.0/24' - - '203.27.117.0/24' - - '203.27.121.0/24' - - '203.27.122.0/23' - - '203.27.125.0/24' - - '203.27.200.0/24' - - '203.27.202.0/24' - - '203.27.233.0/24' - - '203.27.241.0/24' - - '203.27.250.0/24' - - '203.28.10.0/24' - - '203.28.12.0/24' - - '203.28.33.0/24' - - '203.28.34.0/23' - - '203.28.43.0/24' - - '203.28.44.0/24' - - '203.28.54.0/24' - - '203.28.56.0/24' - - '203.28.73.0/24' - - '203.28.74.0/24' - - '203.28.76.0/24' - - '203.28.86.0/24' - - '203.28.88.0/24' - - '203.28.112.0/24' - - '203.28.131.0/24' - - '203.28.136.0/24' - - '203.28.140.0/24' - - '203.28.145.0/24' - - '203.28.165.0/24' - - '203.28.169.0/24' - - '203.28.170.0/24' - - '203.28.178.0/23' - - '203.28.185.0/24' - - '203.28.187.0/24' - - '203.28.196.0/24' - - '203.28.226.0/23' - - '203.28.239.0/24' - - '203.29.2.0/24' - - '203.29.8.0/23' - - '203.29.13.0/24' - - '203.29.14.0/24' - - '203.29.28.0/24' - - '203.29.46.0/24' - - '203.29.57.0/24' - - '203.29.61.0/24' - - '203.29.63.0/24' - - '203.29.69.0/24' - - '203.29.73.0/24' - - '203.29.81.0/24' - - '203.29.90.0/24' - - '203.29.95.0/24' - - '203.29.100.0/24' - - '203.29.103.0/24' - - '203.29.112.0/24' - - '203.29.120.0/22' - - '203.29.182.0/23' - - '203.29.187.0/24' - - '203.29.189.0/24' - - '203.29.190.0/24' - - '203.29.205.0/24' - - '203.29.210.0/24' - - '203.29.217.0/24' - - '203.29.227.0/24' - - '203.29.231.0/24' - - '203.29.233.0/24' - - '203.29.234.0/24' - - '203.29.248.0/24' - - '203.29.254.0/23' - - '203.30.16.0/23' - - '203.30.25.0/24' - - '203.30.29.0/24' - - '203.30.66.0/24' - - '203.30.81.0/24' - - '203.30.87.0/24' - - '203.30.111.0/24' - - '203.30.121.0/24' - - '203.30.123.0/24' - - '203.30.152.0/24' - - '203.30.156.0/24' - - '203.30.162.0/24' - - '203.30.173.0/24' - - '203.30.175.0/24' - - '203.30.187.0/24' - - '203.30.194.0/24' - - '203.30.217.0/24' - - '203.30.220.0/24' - - '203.30.222.0/24' - - '203.30.232.0/23' - - '203.30.235.0/24' - - '203.30.240.0/23' - - '203.30.246.0/24' - - '203.30.250.0/23' - - '203.31.45.0/24' - - '203.31.46.0/24' - - '203.31.49.0/24' - - '203.31.51.0/24' - - '203.31.54.0/23' - - '203.31.69.0/24' - - '203.31.72.0/24' - - '203.31.80.0/24' - - '203.31.85.0/24' - - '203.31.97.0/24' - - '203.31.105.0/24' - - '203.31.106.0/24' - - '203.31.108.0/23' - - '203.31.124.0/24' - - '203.31.162.0/24' - - '203.31.174.0/24' - - '203.31.177.0/24' - - '203.31.181.0/24' - - '203.31.187.0/24' - - '203.31.189.0/24' - - '203.31.204.0/24' - - '203.31.220.0/24' - - '203.31.222.0/23' - - '203.31.225.0/24' - - '203.31.229.0/24' - - '203.31.248.0/23' - - '203.31.253.0/24' - - '203.32.20.0/24' - - '203.32.48.0/23' - - '203.32.56.0/24' - - '203.32.60.0/24' - - '203.32.62.0/24' - - '203.32.68.0/23' - - '203.32.76.0/24' - - '203.32.81.0/24' - - '203.32.84.0/23' - - '203.32.95.0/24' - - '203.32.102.0/24' - - '203.32.105.0/24' - - '203.32.130.0/24' - - '203.32.133.0/24' - - '203.32.140.0/24' - - '203.32.152.0/24' - - '203.32.186.0/23' - - '203.32.192.0/24' - - '203.32.196.0/24' - - '203.32.203.0/24' - - '203.32.204.0/23' - - '203.32.212.0/24' - - '203.33.4.0/24' - - '203.33.7.0/24' - - '203.33.12.0/23' - - '203.33.21.0/24' - - '203.33.26.0/24' - - '203.33.32.0/24' - - '203.33.63.0/24' - - '203.33.64.0/24' - - '203.33.67.0/24' - - '203.33.68.0/24' - - '203.33.73.0/24' - - '203.33.79.0/24' - - '203.33.100.0/24' - - '203.33.122.0/24' - - '203.33.129.0/24' - - '203.33.131.0/24' - - '203.33.145.0/24' - - '203.33.156.0/24' - - '203.33.158.0/23' - - '203.33.174.0/24' - - '203.33.185.0/24' - - '203.33.200.0/24' - - '203.33.202.0/23' - - '203.33.204.0/24' - - '203.33.206.0/23' - - '203.33.214.0/23' - - '203.33.224.0/23' - - '203.33.226.0/24' - - '203.33.233.0/24' - - '203.33.243.0/24' - - '203.33.250.0/24' - - '203.34.4.0/24' - - '203.34.21.0/24' - - '203.34.27.0/24' - - '203.34.39.0/24' - - '203.34.48.0/23' - - '203.34.54.0/24' - - '203.34.56.0/23' - - '203.34.67.0/24' - - '203.34.69.0/24' - - '203.34.76.0/24' - - '203.34.92.0/24' - - '203.34.106.0/24' - - '203.34.113.0/24' - - '203.34.147.0/24' - - '203.34.150.0/24' - - '203.34.152.0/23' - - '203.34.161.0/24' - - '203.34.162.0/24' - - '203.34.187.0/24' - - '203.34.192.0/22' - - '203.34.197.0/24' - - '203.34.198.0/23' - - '203.34.204.0/22' - - '203.34.232.0/24' - - '203.34.240.0/24' - - '203.34.242.0/24' - - '203.34.245.0/24' - - '203.34.251.0/24' - - '203.55.2.0/23' - - '203.55.4.0/24' - - '203.55.10.0/24' - - '203.55.13.0/24' - - '203.55.22.0/24' - - '203.55.30.0/24' - - '203.55.93.0/24' - - '203.55.101.0/24' - - '203.55.109.0/24' - - '203.55.110.0/24' - - '203.55.116.0/23' - - '203.55.119.0/24' - - '203.55.128.0/23' - - '203.55.146.0/23' - - '203.55.192.0/24' - - '203.55.196.0/24' - - '203.55.218.0/23' - - '203.55.221.0/24' - - '203.55.224.0/24' - - '203.56.1.0/24' - - '203.56.4.0/24' - - '203.56.12.0/24' - - '203.56.24.0/24' - - '203.56.38.0/24' - - '203.56.40.0/24' - - '203.56.46.0/24' - - '203.56.50.0/23' - - '203.56.52.0/22' - - '203.56.68.0/23' - - '203.56.82.0/23' - - '203.56.84.0/23' - - '203.56.95.0/24' - - '203.56.110.0/24' - - '203.56.121.0/24' - - '203.56.161.0/24' - - '203.56.169.0/24' - - '203.56.172.0/23' - - '203.56.175.0/24' - - '203.56.183.0/24' - - '203.56.185.0/24' - - '203.56.187.0/24' - - '203.56.192.0/24' - - '203.56.198.0/24' - - '203.56.201.0/24' - - '203.56.208.0/23' - - '203.56.210.0/24' - - '203.56.214.0/24' - - '203.56.216.0/24' - - '203.56.227.0/24' - - '203.56.228.0/24' - - '203.56.232.0/24' - - '203.56.240.0/24' - - '203.56.252.0/24' - - '203.56.254.0/24' - - '203.57.5.0/24' - - '203.57.6.0/24' - - '203.57.12.0/23' - - '203.57.28.0/24' - - '203.57.39.0/24' - - '203.57.46.0/24' - - '203.57.58.0/24' - - '203.57.61.0/24' - - '203.57.66.0/24' - - '203.57.69.0/24' - - '203.57.70.0/23' - - '203.57.73.0/24' - - '203.57.90.0/24' - - '203.57.101.0/24' - - '203.57.109.0/24' - - '203.57.123.0/24' - - '203.57.157.0/24' - - '203.57.200.0/24' - - '203.57.202.0/24' - - '203.57.206.0/24' - - '203.57.222.0/24' - - '203.57.224.0/20' - - '203.57.246.0/23' - - '203.57.249.0/24' - - '203.57.253.0/24' - - '203.57.254.0/23' - - '203.62.2.0/24' - - '203.62.131.0/24' - - '203.62.139.0/24' - - '203.62.161.0/24' - - '203.62.197.0/24' - - '203.62.228.0/22' - - '203.62.234.0/24' - - '203.62.246.0/24' - - '203.65.240.0/22' - - '203.76.160.0/22' - - '203.76.168.0/22' - - '203.76.208.0/21' - - '203.76.216.0/22' - - '203.76.240.0/22' - - '203.77.180.0/22' - - '203.78.48.0/20' - - '203.78.156.0/22' - - '203.79.0.0/20' - - '203.80.4.0/23' - - '203.80.32.0/20' - - '203.80.57.0/24' - - '203.80.129.0/24' - - '203.80.132.0/22' - - '203.80.140.0/22' - - '203.80.144.0/20' - - '203.81.0.0/21' - - '203.81.16.0/20' - - '203.81.244.0/22' - - '203.82.0.0/23' - - '203.82.16.0/21' - - '203.82.112.0/20' - - '203.82.224.0/20' - - '203.83.0.0/22' - - '203.83.12.0/22' - - '203.83.56.0/21' - - '203.83.224.0/20' - - '203.86.0.0/17' - - '203.86.250.0/24' - - '203.86.254.0/23' - - '203.88.32.0/19' - - '203.88.100.0/22' - - '203.88.192.0/19' - - '203.89.0.0/22' - - '203.89.100.0/22' - - '203.89.136.0/22' - - '203.89.144.0/24' - - '203.90.0.0/22' - - '203.90.8.0/21' - - '203.90.128.0/18' - - '203.90.192.0/19' - - '203.91.32.0/19' - - '203.91.96.0/20' - - '203.91.120.0/21' - - '203.92.0.0/22' - - '203.92.6.0/24' - - '203.92.160.0/19' - - '203.93.0.0/16' - - '203.94.0.0/19' - - '203.95.0.0/21' - - '203.95.96.0/19' - - '203.95.128.0/18' - - '203.95.200.0/21' - - '203.95.208.0/22' - - '203.95.224.0/19' - - '203.99.8.0/21' - - '203.99.16.0/22' - - '203.99.30.0/23' - - '203.99.80.0/20' - - '203.100.32.0/20' - - '203.100.58.0/24' - - '203.100.60.0/24' - - '203.100.63.0/24' - - '203.100.80.0/20' - - '203.100.96.0/19' - - '203.100.192.0/20' - - '203.104.32.0/20' - - '203.105.96.0/19' - - '203.105.128.0/19' - - '203.107.0.0/19' - - '203.107.32.0/20' - - '203.107.52.0/22' - - '203.107.56.0/21' - - '203.107.69.0/24' - - '203.107.70.0/23' - - '203.107.72.0/21' - - '203.107.80.0/20' - - '203.107.96.0/19' - - '203.110.160.0/19' - - '203.110.208.0/20' - - '203.110.232.0/23' - - '203.110.234.0/24' - - '203.114.80.0/20' - - '203.114.244.0/22' - - '203.118.192.0/19' - - '203.118.241.0/24' - - '203.118.248.0/22' - - '203.119.24.0/22' - - '203.119.28.0/23' - - '203.119.30.0/24' - - '203.119.32.0/24' - - '203.119.34.0/23' - - '203.119.80.0/22' - - '203.119.85.0/24' - - '203.119.113.0/24' - - '203.119.114.0/23' - - '203.119.116.0/22' - - '203.119.128.0/17' - - '203.123.58.0/24' - - '203.128.32.0/19' - - '203.128.96.0/19' - - '203.128.128.0/24' - - '203.128.225.0/24' - - '203.128.226.0/23' - - '203.128.228.0/22' - - '203.130.32.0/20' - - '203.130.49.0/24' - - '203.130.51.0/24' - - '203.130.53.0/24' - - '203.130.54.0/23' - - '203.130.56.0/22' - - '203.130.60.0/23' - - '203.132.32.0/19' - - '203.134.240.0/22' - - '203.134.246.0/23' - - '203.135.96.0/19' - - '203.135.160.0/20' - - '203.142.12.0/23' - - '203.142.219.0/24' - - '203.142.224.0/19' - - '203.144.96.0/19' - - '203.145.0.0/19' - - '203.148.0.0/18' - - '203.148.64.0/20' - - '203.148.80.0/22' - - '203.148.86.0/23' - - '203.149.92.0/22' - - '203.152.64.0/19' - - '203.152.128.0/19' - - '203.153.0.0/22' - - '203.156.192.0/18' - - '203.158.16.0/21' - - '203.160.129.0/24' - - '203.160.192.0/19' - - '203.161.0.0/22' - - '203.161.180.0/24' - - '203.161.183.0/24' - - '203.161.192.0/19' - - '203.166.160.0/19' - - '203.167.28.0/22' - - '203.168.0.0/19' - - '203.170.58.0/23' - - '203.171.0.0/22' - - '203.171.208.0/24' - - '203.171.224.0/20' - - '203.174.4.0/24' - - '203.174.6.0/24' - - '203.174.96.0/20' - - '203.175.128.0/19' - - '203.175.192.0/18' - - '203.176.0.0/18' - - '203.176.64.0/19' - - '203.176.168.0/21' - - '203.184.80.0/20' - - '203.187.160.0/19' - - '203.189.0.0/23' - - '203.189.6.0/23' - - '203.189.112.0/22' - - '203.189.192.0/19' - - '203.189.240.0/22' - - '203.190.96.0/20' - - '203.190.249.0/24' - - '203.191.0.0/23' - - '203.191.2.0/24' - - '203.191.5.0/24' - - '203.191.7.0/24' - - '203.191.29.0/24' - - '203.191.31.0/24' - - '203.191.64.0/18' - - '203.191.133.0/24' - - '203.191.144.0/20' - - '203.192.0.0/19' - - '203.193.224.0/19' - - '203.195.64.0/19' - - '203.195.128.0/17' - - '203.196.0.0/21' - - '203.196.12.0/22' - - '203.196.28.0/22' - - '203.201.181.0/24' - - '203.201.182.0/24' - - '203.202.236.0/22' - - '203.205.64.0/19' - - '203.207.64.0/18' - - '203.207.128.0/17' - - '203.208.0.0/20' - - '203.208.16.0/22' - - '203.208.32.0/19' - - '203.209.224.0/19' - - '203.212.0.0/20' - - '203.212.80.0/20' - - '203.217.164.0/22' - - '203.223.0.0/20' - - '204.55.160.0/24' - - '204.74.96.0/24' - - '204.114.176.0/23' - - '207.89.20.0/24' - - '210.2.0.0/23' - - '210.2.2.0/24' - - '210.2.5.0/24' - - '210.2.6.0/23' - - '210.2.8.0/21' - - '210.2.24.0/21' - - '210.5.0.0/19' - - '210.5.60.0/24' - - '210.5.128.0/19' - - '210.7.56.0/21' - - '210.12.0.0/15' - - '210.14.64.0/19' - - '210.14.112.0/20' - - '210.14.128.0/17' - - '210.15.0.0/17' - - '210.15.128.0/18' - - '210.16.128.0/21' - - '210.16.136.0/22' - - '210.16.156.0/22' - - '210.16.160.0/19' - - '210.21.0.0/16' - - '210.22.0.0/16' - - '210.23.32.0/19' - - '210.25.0.0/16' - - '210.26.0.0/15' - - '210.28.0.0/14' - - '210.32.0.0/12' - - '210.51.0.0/16' - - '210.52.0.0/18' - - '210.52.64.0/23' - - '210.52.66.0/24' - - '210.52.68.0/22' - - '210.52.72.0/21' - - '210.52.80.0/20' - - '210.52.96.0/21' - - '210.52.104.0/22' - - '210.52.108.0/24' - - '210.52.110.0/23' - - '210.52.112.0/20' - - '210.52.128.0/17' - - '210.53.0.0/16' - - '210.56.192.0/19' - - '210.72.0.0/14' - - '210.76.0.0/15' - - '210.78.0.0/16' - - '210.79.64.0/18' - - '210.79.224.0/19' - - '210.82.0.0/15' - - '210.87.128.0/18' - - '210.185.192.0/18' - - '210.192.96.0/19' - - '211.64.0.0/13' - - '211.80.0.0/12' - - '211.96.0.0/14' - - '211.100.0.0/17' - - '211.100.128.0/19' - - '211.100.160.0/20' - - '211.100.184.0/21' - - '211.100.192.0/18' - - '211.101.0.0/16' - - '211.102.0.0/15' - - '211.136.0.0/13' - - '211.144.0.0/13' - - '211.152.0.0/17' - - '211.152.134.0/23' - - '211.152.140.0/22' - - '211.152.150.0/23' - - '211.152.157.0/24' - - '211.152.160.0/19' - - '211.152.192.0/18' - - '211.153.0.0/16' - - '211.154.0.0/19' - - '211.154.32.0/20' - - '211.154.48.0/21' - - '211.154.64.0/18' - - '211.154.128.0/17' - - '211.155.0.0/18' - - '211.155.67.0/24' - - '211.155.68.0/24' - - '211.155.72.0/21' - - '211.155.80.0/20' - - '211.155.97.0/24' - - '211.155.98.0/23' - - '211.155.100.0/22' - - '211.155.104.0/21' - - '211.155.113.0/24' - - '211.155.116.0/22' - - '211.155.120.0/21' - - '211.155.128.0/17' - - '211.156.0.0/18' - - '211.156.64.0/19' - - '211.156.96.0/21' - - '211.156.104.0/22' - - '211.156.108.0/23' - - '211.156.112.0/20' - - '211.156.128.0/17' - - '211.157.0.0/16' - - '211.158.0.0/15' - - '211.160.0.0/13' - - '212.64.0.0/17' - - '212.129.128.0/17' - - '213.199.169.0/24' - - '218.0.0.0/12' - - '218.16.0.0/13' - - '218.24.0.0/14' - - '218.28.0.0/15' - - '218.30.0.0/19' - - '218.30.64.0/18' - - '218.30.128.0/18' - - '218.30.192.0/19' - - '218.30.224.0/20' - - '218.30.240.0/21' - - '218.30.248.0/22' - - '218.30.252.0/25' - - '218.30.252.128/26' - - '218.30.252.194/31' - - '218.30.252.196/30' - - '218.30.252.200/29' - - '218.30.252.208/28' - - '218.30.252.224/27' - - '218.30.253.0/24' - - '218.30.254.0/23' - - '218.31.0.0/16' - - '218.56.0.0/13' - - '218.64.0.0/11' - - '218.96.0.0/15' - - '218.98.0.0/18' - - '218.98.96.0/19' - - '218.98.128.0/19' - - '218.98.192.0/18' - - '218.99.0.0/16' - - '218.100.96.0/19' - - '218.100.128.0/17' - - '218.104.0.0/14' - - '218.108.0.0/15' - - '218.185.192.0/19' - - '218.192.0.0/12' - - '218.240.0.0/14' - - '218.244.0.0/15' - - '218.246.0.0/19' - - '218.246.32.0/20' - - '218.246.48.0/21' - - '218.246.56.0/23' - - '218.246.58.0/24' - - '218.246.60.0/22' - - '218.246.64.0/18' - - '218.246.129.0/24' - - '218.246.131.0/24' - - '218.246.132.0/23' - - '218.246.134.0/24' - - '218.246.139.0/24' - - '218.246.144.0/20' - - '218.246.160.0/19' - - '218.246.192.0/18' - - '218.247.0.0/18' - - '218.247.96.0/19' - - '218.247.128.0/17' - - '218.249.0.0/16' - - '219.72.0.0/16' - - '219.82.0.0/16' - - '219.83.128.0/17' - - '219.90.68.0/22' - - '219.90.72.0/21' - - '219.128.0.0/11' - - '219.216.0.0/13' - - '219.224.0.0/13' - - '219.232.0.0/15' - - '219.234.0.0/21' - - '219.234.9.0/24' - - '219.234.10.0/23' - - '219.234.12.0/22' - - '219.234.32.0/19' - - '219.234.64.0/18' - - '219.234.128.0/17' - - '219.235.0.0/16' - - '219.236.0.0/14' - - '219.242.0.0/15' - - '219.244.0.0/14' - - '220.101.192.0/18' - - '220.112.0.0/14' - - '220.152.128.0/17' - - '220.154.0.0/16' - - '220.155.0.0/21' - - '220.155.9.0/24' - - '220.155.10.0/23' - - '220.155.12.0/22' - - '220.155.16.0/21' - - '220.155.24.0/22' - - '220.155.28.0/23' - - '220.155.31.0/24' - - '220.155.32.0/19' - - '220.155.64.0/18' - - '220.155.128.0/17' - - '220.158.241.0/24' - - '220.158.243.0/24' - - '220.160.0.0/11' - - '220.192.0.0/12' - - '220.231.0.0/18' - - '220.231.128.0/17' - - '220.232.64.0/18' - - '220.234.0.0/16' - - '220.242.0.0/23' - - '220.242.6.0/24' - - '220.242.8.0/24' - - '220.242.12.0/23' - - '220.242.14.0/24' - - '220.242.17.0/24' - - '220.242.18.0/23' - - '220.242.20.0/24' - - '220.242.32.0/20' - - '220.242.48.0/23' - - '220.242.53.0/24' - - '220.242.55.0/24' - - '220.242.56.0/22' - - '220.242.60.0/23' - - '220.242.62.0/24' - - '220.242.64.0/19' - - '220.242.96.0/20' - - '220.242.112.0/21' - - '220.242.120.0/22' - - '220.242.124.0/23' - - '220.242.126.0/24' - - '220.242.134.0/23' - - '220.242.173.0/24' - - '220.242.183.0/24' - - '220.242.197.0/24' - - '220.242.205.0/24' - - '220.242.207.0/24' - - '220.242.217.0/24' - - '220.242.218.0/23' - - '220.242.220.0/22' - - '220.242.224.0/19' - - '220.243.0.0/17' - - '220.243.128.0/18' - - '220.243.192.0/23' - - '220.243.196.0/24' - - '220.243.198.0/23' - - '220.243.201.0/24' - - '220.243.204.0/24' - - '220.243.214.0/24' - - '220.243.216.0/23' - - '220.243.218.0/24' - - '220.243.220.0/23' - - '220.243.223.0/24' - - '220.243.225.0/24' - - '220.243.226.0/23' - - '220.243.229.0/24' - - '220.243.230.0/24' - - '220.243.233.0/24' - - '220.243.234.0/23' - - '220.243.237.0/24' - - '220.243.238.0/23' - - '220.243.243.0/24' - - '220.243.244.0/24' - - '220.243.246.0/23' - - '220.243.249.0/24' - - '220.243.250.0/24' - - '220.243.252.0/24' - - '220.243.254.0/23' - - '220.247.136.0/21' - - '220.248.0.0/14' - - '220.252.0.0/16' - - '221.0.0.0/13' - - '221.8.0.0/14' - - '221.12.0.0/17' - - '221.12.128.0/18' - - '221.13.0.0/16' - - '221.14.0.0/15' - - '221.122.0.0/15' - - '221.128.128.0/17' - - '221.129.0.0/16' - - '221.130.0.0/15' - - '221.133.224.0/19' - - '221.136.0.0/15' - - '221.172.0.0/14' - - '221.176.0.0/19' - - '221.176.32.0/20' - - '221.176.48.0/21' - - '221.176.56.0/24' - - '221.176.58.0/23' - - '221.176.60.0/22' - - '221.176.64.0/18' - - '221.176.128.0/17' - - '221.177.0.0/16' - - '221.178.0.0/15' - - '221.180.0.0/14' - - '221.192.0.0/14' - - '221.196.0.0/15' - - '221.198.0.0/16' - - '221.199.0.0/17' - - '221.199.128.0/18' - - '221.199.192.0/20' - - '221.199.224.0/19' - - '221.200.0.0/13' - - '221.208.0.0/12' - - '221.224.0.0/12' - - '222.16.0.0/12' - - '222.32.0.0/11' - - '222.64.0.0/11' - - '222.125.0.0/16' - - '222.126.128.0/19' - - '222.126.160.0/21' - - '222.126.168.0/22' - - '222.126.172.0/23' - - '222.126.174.40/29' - - '222.126.174.76/30' - - '222.126.174.88/29' - - '222.126.174.144/28' - - '222.126.178.0/23' - - '222.126.180.0/22' - - '222.126.184.0/21' - - '222.126.192.0/21' - - '222.126.200.104/29' - - '222.126.206.0/23' - - '222.126.208.0/22' - - '222.126.212.0/26' - - '222.126.212.64/27' - - '222.126.212.96/28' - - '222.126.212.112/29' - - '222.126.212.128/25' - - '222.126.213.0/24' - - '222.126.214.0/23' - - '222.126.216.0/21' - - '222.126.224.0/19' - - '222.128.0.0/12' - - '222.160.0.0/14' - - '222.168.0.0/13' - - '222.176.0.0/12' - - '222.192.0.0/11' - - '222.240.0.0/13' - - '222.248.0.0/15' - - '223.0.0.0/12' - - '223.20.0.0/15' - - '223.27.184.0/22' - - '223.29.208.0/22' - - '223.29.252.0/22' - - '223.64.0.0/11' - - '223.96.0.0/12' - - '223.112.0.0/14' - - '223.116.0.0/15' - - '223.120.0.0/13' - - '223.128.0.0/15' - - '223.144.0.0/12' - - '223.160.0.0/14' - - '223.166.0.0/15' - - '223.192.0.0/15' - - '223.198.0.0/15' - - '223.201.8.0/21' - - '223.201.16.0/20' - - '223.201.32.0/19' - - '223.201.64.0/18' - - '223.201.128.0/17' - - '223.202.0.0/15' - - '223.208.0.0/13' - - '223.220.0.0/15' - - '223.223.176.0/20' - - '223.223.192.0/20' - - '223.240.0.0/13' - - '223.248.0.0/14' - - '223.252.128.0/19' - - '223.252.192.0/18' - - '223.254.0.0/16' - - '223.255.0.0/17' - - '223.255.236.0/22' - - '223.255.252.0/23' \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Global.yaml b/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Global.yaml deleted file mode 100644 index 69ad117a46..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Global.yaml +++ /dev/null @@ -1,541 +0,0 @@ -payload: - # (DNS Cache Pollution) - # > Google - - DOMAIN-SUFFIX,appspot.com - - DOMAIN-SUFFIX,blogger.com - - DOMAIN-SUFFIX,getoutline.org - - DOMAIN-SUFFIX,gvt0.com - - DOMAIN-SUFFIX,gvt1.com - - DOMAIN-SUFFIX,gvt3.com - - DOMAIN-SUFFIX,xn--ngstr-lra8j.com - - DOMAIN-KEYWORD,google - - DOMAIN-KEYWORD,blogspot - # > Microsoft - - DOMAIN-SUFFIX,onedrive.live.com - - DOMAIN,az416426.vo.msecnd.net - - DOMAIN,az668014.vo.msecnd.net - # > Facebook - - DOMAIN-SUFFIX,cdninstagram.com - - DOMAIN-SUFFIX,facebook.com - - DOMAIN-SUFFIX,facebook.net - - DOMAIN-SUFFIX,fb.com - - DOMAIN-SUFFIX,fb.me - - DOMAIN-SUFFIX,fbaddins.com - - DOMAIN-SUFFIX,fbcdn.net - - DOMAIN-SUFFIX,fbsbx.com - - DOMAIN-SUFFIX,fbworkmail.com - - DOMAIN-SUFFIX,instagram.com - - DOMAIN-SUFFIX,m.me - - DOMAIN-SUFFIX,messenger.com - - DOMAIN-SUFFIX,oculus.com - - DOMAIN-SUFFIX,oculuscdn.com - - DOMAIN-SUFFIX,rocksdb.org - - DOMAIN-SUFFIX,whatsapp.com - - DOMAIN-SUFFIX,whatsapp.net - # > Twitter - - DOMAIN-SUFFIX,pscp.tv - - DOMAIN-SUFFIX,periscope.tv - - DOMAIN-SUFFIX,t.co - - DOMAIN-SUFFIX,twimg.co - - DOMAIN-SUFFIX,twimg.com - - DOMAIN-SUFFIX,twitpic.com - - DOMAIN-SUFFIX,twitter.com - - DOMAIN-SUFFIX,vine.co - # > Telegram - - DOMAIN-SUFFIX,telegra.ph - - DOMAIN-SUFFIX,telegram.org - - IP-CIDR,91.108.4.0/22,no-resolve - - IP-CIDR,91.108.8.0/22,no-resolve - - IP-CIDR,91.108.12.0/22,no-resolve - - IP-CIDR,91.108.16.0/22,no-resolve - - IP-CIDR,91.108.56.0/22,no-resolve - - IP-CIDR,149.154.160.0/20,no-resolve - - IP-CIDR,2001:b28:f23d::/48,no-resolve - - IP-CIDR,2001:b28:f23f::/48,no-resolve - - IP-CIDR,2001:67c:4e8::/48,no-resolve - # > Line - - DOMAIN-SUFFIX,line.me - - DOMAIN-SUFFIX,line-apps.com - - DOMAIN-SUFFIX,line-scdn.net - - DOMAIN-SUFFIX,naver.jp - - IP-CIDR,103.2.30.0/23,no-resolve - - IP-CIDR,125.209.208.0/20,no-resolve - - IP-CIDR,147.92.128.0/17,no-resolve - - IP-CIDR,203.104.144.0/21,no-resolve - # > Akamai - - DOMAIN,a248.e.akamai.net - - DOMAIN,a771.dscq.akamai.net - # > Amazon CloudFront - - DOMAIN,d3c33hcgiwev3.cloudfront.net - # > Others - - DOMAIN-SUFFIX,4shared.com - - DOMAIN-SUFFIX,9cache.com - - DOMAIN-SUFFIX,9gag.com - - DOMAIN-SUFFIX,abc.com - - DOMAIN-SUFFIX,abc.net.au - - DOMAIN-SUFFIX,abebooks.com - - DOMAIN-SUFFIX,amazon.co.jp - - DOMAIN-SUFFIX,ao3.org - - DOMAIN-SUFFIX,apigee.com - - DOMAIN-SUFFIX,apkcombo.com - - DOMAIN-SUFFIX,apk-dl.com - - DOMAIN-SUFFIX,apkfind.com - - DOMAIN-SUFFIX,apkmirror.com - - DOMAIN-SUFFIX,apkmonk.com - - DOMAIN-SUFFIX,apkpure.com - - DOMAIN-SUFFIX,aptoide.com - - DOMAIN-SUFFIX,archive.is - - DOMAIN-SUFFIX,archive.org - - DOMAIN-SUFFIX,archiveofourown.com - - DOMAIN-SUFFIX,archiveofourown.org - - DOMAIN-SUFFIX,arte.tv - - DOMAIN-SUFFIX,artstation.com - - DOMAIN-SUFFIX,arukas.io - - DOMAIN-SUFFIX,ask.com - - DOMAIN-SUFFIX,avg.com - - DOMAIN-SUFFIX,avgle.com - - DOMAIN-SUFFIX,badoo.com - - DOMAIN-SUFFIX,bandwagonhost.com - - DOMAIN-SUFFIX,bangkokpost.com - - DOMAIN-SUFFIX,bbc.com - - DOMAIN-SUFFIX,behance.net - - DOMAIN-SUFFIX,bibox.com - - DOMAIN-SUFFIX,biggo.com.tw - - DOMAIN-SUFFIX,binance.com - - DOMAIN-SUFFIX,bit.ly - - DOMAIN-SUFFIX,bitcointalk.org - - DOMAIN-SUFFIX,bitfinex.com - - DOMAIN-SUFFIX,bitmex.com - - DOMAIN-SUFFIX,bit-z.com - - DOMAIN-SUFFIX,bloglovin.com - - DOMAIN-SUFFIX,bloomberg.cn - - DOMAIN-SUFFIX,bloomberg.com - - DOMAIN-SUFFIX,blubrry.com - - DOMAIN-SUFFIX,book.com.tw - - DOMAIN-SUFFIX,booklive.jp - - DOMAIN-SUFFIX,books.com.tw - - DOMAIN-SUFFIX,boslife.net - - DOMAIN-SUFFIX,box.com - - DOMAIN-SUFFIX,brave.com - - DOMAIN-SUFFIX,businessinsider.com - - DOMAIN-SUFFIX,buzzfeed.com - - DOMAIN-SUFFIX,bwh1.net - - DOMAIN-SUFFIX,castbox.fm - - DOMAIN-SUFFIX,cbc.ca - - DOMAIN-SUFFIX,cdw.com - - DOMAIN-SUFFIX,change.org - - DOMAIN-SUFFIX,channelnewsasia.com - - DOMAIN-SUFFIX,ck101.com - - DOMAIN-SUFFIX,clarionproject.org - - DOMAIN-SUFFIX,cloudcone.com - - DOMAIN-SUFFIX,clyp.it - - DOMAIN-SUFFIX,cna.com.tw - - DOMAIN-SUFFIX,comparitech.com - - DOMAIN-SUFFIX,conoha.jp - - DOMAIN-SUFFIX,crucial.com - - DOMAIN-SUFFIX,cts.com.tw - - DOMAIN-SUFFIX,cw.com.tw - - DOMAIN-SUFFIX,cyberctm.com - - DOMAIN-SUFFIX,dailymotion.com - - DOMAIN-SUFFIX,dailyview.tw - - DOMAIN-SUFFIX,daum.net - - DOMAIN-SUFFIX,daumcdn.net - - DOMAIN-SUFFIX,dcard.tw - - DOMAIN-SUFFIX,deadline.com - - DOMAIN-SUFFIX,deepdiscount.com - - DOMAIN-SUFFIX,depositphotos.com - - DOMAIN-SUFFIX,deviantart.com - - DOMAIN-SUFFIX,disconnect.me - - DOMAIN-SUFFIX,discordapp.com - - DOMAIN-SUFFIX,discordapp.net - - DOMAIN-SUFFIX,disqus.com - - DOMAIN-SUFFIX,dlercloud.com - - DOMAIN-SUFFIX,dmhy.org - - DOMAIN-SUFFIX,dns2go.com - - DOMAIN-SUFFIX,dowjones.com - - DOMAIN-SUFFIX,dropbox.com - - DOMAIN-SUFFIX,dropboxapi.com - - DOMAIN-SUFFIX,dropboxusercontent.com - - DOMAIN-SUFFIX,duckduckgo.com - - DOMAIN-SUFFIX,duyaoss.com - - DOMAIN-SUFFIX,dw.com - - DOMAIN-SUFFIX,dynu.com - - DOMAIN-SUFFIX,earthcam.com - - DOMAIN-SUFFIX,ebookservice.tw - - DOMAIN-SUFFIX,economist.com - - DOMAIN-SUFFIX,edgecastcdn.net - - DOMAIN-SUFFIX,edu - - DOMAIN-SUFFIX,edx-cdn.org - - DOMAIN-SUFFIX,elpais.com - - DOMAIN-SUFFIX,enanyang.my - - DOMAIN-SUFFIX,encyclopedia.com - - DOMAIN-SUFFIX,esoir.be - - DOMAIN-SUFFIX,etherscan.io - - DOMAIN-SUFFIX,euronews.com - - DOMAIN-SUFFIX,evozi.com - - DOMAIN-SUFFIX,exblog.jp - - DOMAIN-SUFFIX,feeder.co - - DOMAIN-SUFFIX,feedly.com - - DOMAIN-SUFFIX,feedx.net - - DOMAIN-SUFFIX,firech.at - - DOMAIN-SUFFIX,flickr.com - - DOMAIN-SUFFIX,flipboard.com - - DOMAIN-SUFFIX,flitto.com - - DOMAIN-SUFFIX,foreignpolicy.com - - DOMAIN-SUFFIX,fortawesome.com - - DOMAIN-SUFFIX,freetls.fastly.net - - DOMAIN-SUFFIX,friday.tw - - DOMAIN-SUFFIX,ft.com - - DOMAIN-SUFFIX,ftchinese.com - - DOMAIN-SUFFIX,ftimg.net - - DOMAIN-SUFFIX,gate.io - - DOMAIN-SUFFIX,getlantern.org - - DOMAIN-SUFFIX,getsync.com - - DOMAIN-SUFFIX,github.com - - DOMAIN-SUFFIX,github.io - - DOMAIN-SUFFIX,githubusercontent.com - - DOMAIN-SUFFIX,globalvoices.org - - DOMAIN-SUFFIX,goo.ne.jp - - DOMAIN-SUFFIX,goodreads.com - - DOMAIN-SUFFIX,gov - - DOMAIN-SUFFIX,gov.tw - - DOMAIN-SUFFIX,greatfire.org - - DOMAIN-SUFFIX,gumroad.com - - DOMAIN-SUFFIX,hbg.com - - DOMAIN-SUFFIX,heroku.com - - DOMAIN-SUFFIX,hightail.com - - DOMAIN-SUFFIX,hk01.com - - DOMAIN-SUFFIX,hkbf.org - - DOMAIN-SUFFIX,hkbookcity.com - - DOMAIN-SUFFIX,hkej.com - - DOMAIN-SUFFIX,hket.com - - DOMAIN-SUFFIX,hootsuite.com - - DOMAIN-SUFFIX,hudson.org - - DOMAIN-SUFFIX,huffpost.com - - DOMAIN-SUFFIX,hyread.com.tw - - DOMAIN-SUFFIX,ibtimes.com - - DOMAIN-SUFFIX,i-cable.com - - DOMAIN-SUFFIX,icij.org - - DOMAIN-SUFFIX,icoco.com - - DOMAIN-SUFFIX,imgur.com - - DOMAIN-SUFFIX,independent.co.uk - - DOMAIN-SUFFIX,initiummall.com - - DOMAIN-SUFFIX,inoreader.com - - DOMAIN-SUFFIX,insecam.org - - DOMAIN-SUFFIX,ipfs.io - - DOMAIN-SUFFIX,issuu.com - - DOMAIN-SUFFIX,istockphoto.com - - DOMAIN-SUFFIX,japantimes.co.jp - - DOMAIN-SUFFIX,jiji.com - - DOMAIN-SUFFIX,jinx.com - - DOMAIN-SUFFIX,jkforum.net - - DOMAIN-SUFFIX,joinmastodon.org - - DOMAIN-SUFFIX,justmysocks.net - - DOMAIN-SUFFIX,justpaste.it - - DOMAIN-SUFFIX,kadokawa.co.jp - - DOMAIN-SUFFIX,kakao.com - - DOMAIN-SUFFIX,kakaocorp.com - - DOMAIN-SUFFIX,kik.com - - DOMAIN-SUFFIX,kingkong.com.tw - - DOMAIN-SUFFIX,knowyourmeme.com - - DOMAIN-SUFFIX,kobo.com - - DOMAIN-SUFFIX,kobobooks.com - - DOMAIN-SUFFIX,kodingen.com - - DOMAIN-SUFFIX,lemonde.fr - - DOMAIN-SUFFIX,lepoint.fr - - DOMAIN-SUFFIX,lihkg.com - - DOMAIN-SUFFIX,limbopro.xyz - - DOMAIN-SUFFIX,listennotes.com - - DOMAIN-SUFFIX,livestream.com - - DOMAIN-SUFFIX,logimg.jp - - DOMAIN-SUFFIX,logmein.com - - DOMAIN-SUFFIX,mail.ru - - DOMAIN-SUFFIX,mailchimp.com - - DOMAIN-SUFFIX,marc.info - - DOMAIN-SUFFIX,matters.news - - DOMAIN-SUFFIX,maying.co - - DOMAIN-SUFFIX,medium.com - - DOMAIN-SUFFIX,mega.nz - - DOMAIN-SUFFIX,mergersandinquisitions.com - - DOMAIN-SUFFIX,mil - - DOMAIN-SUFFIX,mingpao.com - - DOMAIN-SUFFIX,mixi.jp - - DOMAIN-SUFFIX,mobile01.com - - DOMAIN-SUFFIX,mubi.com - - DOMAIN-SUFFIX,myspace.com - - DOMAIN-SUFFIX,myspacecdn.com - - DOMAIN-SUFFIX,nanyang.com - - DOMAIN-SUFFIX,nationalinterest.org - - DOMAIN-SUFFIX,naver.com - - DOMAIN-SUFFIX,nbcnews.com - - DOMAIN-SUFFIX,ndr.de - - DOMAIN-SUFFIX,neowin.net - - DOMAIN-SUFFIX,newstapa.org - - DOMAIN-SUFFIX,nexitally.com - - DOMAIN-SUFFIX,nhk.or.jp - - DOMAIN-SUFFIX,nii.ac.jp - - DOMAIN-SUFFIX,nikkei.com - - DOMAIN-SUFFIX,nitter.net - - DOMAIN-SUFFIX,nofile.io - - DOMAIN-SUFFIX,notion.so - - DOMAIN-SUFFIX,now.com - - DOMAIN-SUFFIX,nrk.no - - DOMAIN-SUFFIX,nuget.org - - DOMAIN-SUFFIX,nyaa.si - - DOMAIN-SUFFIX,nyaa.si - - DOMAIN-SUFFIX,nyt.com - - DOMAIN-SUFFIX,nytchina.com - - DOMAIN-SUFFIX,nytcn.me - - DOMAIN-SUFFIX,nytco.com - - DOMAIN-SUFFIX,nytimes.com - - DOMAIN-SUFFIX,nytimg.com - - DOMAIN-SUFFIX,nytlog.com - - DOMAIN-SUFFIX,nytstyle.com - - DOMAIN-SUFFIX,ok.ru - - DOMAIN-SUFFIX,okex.com - - DOMAIN-SUFFIX,on.cc - - DOMAIN-SUFFIX,orientaldaily.com.my - - DOMAIN-SUFFIX,overcast.fm - - DOMAIN-SUFFIX,paltalk.com - - DOMAIN-SUFFIX,parsevideo.com - - DOMAIN-SUFFIX,pawoo.net - - DOMAIN-SUFFIX,pbxes.com - - DOMAIN-SUFFIX,pcdvd.com.tw - - DOMAIN-SUFFIX,pchome.com.tw - - DOMAIN-SUFFIX,pcloud.com - - DOMAIN-SUFFIX,picacomic.com - - DOMAIN-SUFFIX,pinimg.com - - DOMAIN-SUFFIX,pixiv.net - - DOMAIN-SUFFIX,player.fm - - DOMAIN-SUFFIX,plurk.com - - DOMAIN-SUFFIX,po18.tw - - DOMAIN-SUFFIX,potato.im - - DOMAIN-SUFFIX,potatso.com - - DOMAIN-SUFFIX,prism-break.org - - DOMAIN-SUFFIX,proxifier.com - - DOMAIN-SUFFIX,pt.im - - DOMAIN-SUFFIX,pts.org.tw - - DOMAIN-SUFFIX,pubu.com.tw - - DOMAIN-SUFFIX,pubu.tw - - DOMAIN-SUFFIX,pureapk.com - - DOMAIN-SUFFIX,quora.com - - DOMAIN-SUFFIX,quoracdn.net - - DOMAIN-SUFFIX,qz.com - - DOMAIN-SUFFIX,radio.garden - - DOMAIN-SUFFIX,rakuten.co.jp - - DOMAIN-SUFFIX,rarbgprx.org - - DOMAIN-SUFFIX,readingtimes.com.tw - - DOMAIN-SUFFIX,readmoo.com - - DOMAIN-SUFFIX,redbubble.com - - DOMAIN-SUFFIX,redd.it - - DOMAIN-SUFFIX,reddit.com - - DOMAIN-SUFFIX,redditmedia.com - - DOMAIN-SUFFIX,resilio.com - - DOMAIN-SUFFIX,reuters.com - - DOMAIN-SUFFIX,reutersmedia.net - - DOMAIN-SUFFIX,rfi.fr - - DOMAIN-SUFFIX,rixcloud.com - - DOMAIN-SUFFIX,roadshow.hk - - DOMAIN-SUFFIX,rsshub.app - - DOMAIN-SUFFIX,scmp.com - - DOMAIN-SUFFIX,scribd.com - - DOMAIN-SUFFIX,seatguru.com - - DOMAIN-SUFFIX,shadowsocks.org - - DOMAIN-SUFFIX,shindanmaker.com - - DOMAIN-SUFFIX,shopee.tw - - DOMAIN-SUFFIX,sina.com.hk - - DOMAIN-SUFFIX,slideshare.net - - DOMAIN-SUFFIX,softfamous.com - - DOMAIN-SUFFIX,spiegel.de - - DOMAIN-SUFFIX,ssrcloud.org - - DOMAIN-SUFFIX,startpage.com - - DOMAIN-SUFFIX,steamcommunity.com - - DOMAIN-SUFFIX,steemit.com - - DOMAIN-SUFFIX,steemitwallet.com - - DOMAIN-SUFFIX,straitstimes.com - - DOMAIN-SUFFIX,streema.com - - DOMAIN-SUFFIX,t66y.com - - DOMAIN-SUFFIX,tapatalk.com - - DOMAIN-SUFFIX,teco-hk.org - - DOMAIN-SUFFIX,teco-mo.org - - DOMAIN-SUFFIX,teddysun.com - - DOMAIN-SUFFIX,textnow.me - - DOMAIN-SUFFIX,theguardian.com - - DOMAIN-SUFFIX,theinitium.com - - DOMAIN-SUFFIX,themoviedb.org - - DOMAIN-SUFFIX,thetvdb.com - - DOMAIN-SUFFIX,time.com - - DOMAIN-SUFFIX,tineye.com - - DOMAIN-SUFFIX,tiny.cc - - DOMAIN-SUFFIX,tinyurl.com - - DOMAIN-SUFFIX,torproject.org - - DOMAIN-SUFFIX,tumblr.com - - DOMAIN-SUFFIX,turbobit.net - - DOMAIN-SUFFIX,tutanota.com - - DOMAIN-SUFFIX,tvboxnow.com - - DOMAIN-SUFFIX,udn.com - - DOMAIN-SUFFIX,unseen.is - - DOMAIN-SUFFIX,upmedia.mg - - DOMAIN-SUFFIX,uptodown.com - - DOMAIN-SUFFIX,urbandictionary.com - - DOMAIN-SUFFIX,ustream.tv - - DOMAIN-SUFFIX,uwants.com - - DOMAIN-SUFFIX,v2ray.com - - DOMAIN-SUFFIX,viber.com - - DOMAIN-SUFFIX,videopress.com - - DOMAIN-SUFFIX,vimeo.com - - DOMAIN-SUFFIX,voachinese.com - - DOMAIN-SUFFIX,voanews.com - - DOMAIN-SUFFIX,voxer.com - - DOMAIN-SUFFIX,vzw.com - - DOMAIN-SUFFIX,w3schools.com - - DOMAIN-SUFFIX,washingtonpost.com - - DOMAIN-SUFFIX,wattpad.com - - DOMAIN-SUFFIX,whoer.net - - DOMAIN-SUFFIX,wikileaks.org - - DOMAIN-SUFFIX,wikimapia.org - - DOMAIN-SUFFIX,wikimedia.org - - DOMAIN-SUFFIX,wikinews.org - - DOMAIN-SUFFIX,wikipedia.org - - DOMAIN-SUFFIX,wikiquote.org - - DOMAIN-SUFFIX,wikiwand.com - - DOMAIN-SUFFIX,winudf.com - - DOMAIN-SUFFIX,wire.com - - DOMAIN-SUFFIX,wn.com - - DOMAIN-SUFFIX,wordpress.com - - DOMAIN-SUFFIX,workflow.is - - DOMAIN-SUFFIX,worldcat.org - - DOMAIN-SUFFIX,wsj.com - - DOMAIN-SUFFIX,wsj.net - - DOMAIN-SUFFIX,xhamster.com - - DOMAIN-SUFFIX,xn--90wwvt03e.com - - DOMAIN-SUFFIX,xn--i2ru8q2qg.com - - DOMAIN-SUFFIX,xnxx.com - - DOMAIN-SUFFIX,xvideos.com - - DOMAIN-SUFFIX,yahoo.com - - DOMAIN-SUFFIX,yandex.ru - - DOMAIN-SUFFIX,ycombinator.com - - DOMAIN-SUFFIX,yesasia.com - - DOMAIN-SUFFIX,yes-news.com - - DOMAIN-SUFFIX,yomiuri.co.jp - - DOMAIN-SUFFIX,you-get.org - - DOMAIN-SUFFIX,zaobao.com - - DOMAIN-SUFFIX,zb.com - - DOMAIN-SUFFIX,zello.com - - DOMAIN-SUFFIX,zeronet.io - - DOMAIN-SUFFIX,zoom.us - - - DOMAIN,cc.tvbs.com.tw - - DOMAIN,ocsp.int-x3.letsencrypt.org - - DOMAIN,payments-jp.amazon.com - - DOMAIN,s3-ap-northeast-1.amazonaws.com - - DOMAIN,s3-ap-southeast-2.amazonaws.com - - DOMAIN,search.avira.com - - DOMAIN,us.weibo.com - - - DOMAIN-KEYWORD,jav - - DOMAIN-KEYWORD,pinterest - - DOMAIN-KEYWORD,porn - - # (IP Blackhole) - # > Google - - DOMAIN-SUFFIX,abc.xyz - - DOMAIN-SUFFIX,advertisercommunity.com - - DOMAIN-SUFFIX,ampproject.org - - DOMAIN-SUFFIX,android.com - - DOMAIN-SUFFIX,androidify.com - - DOMAIN-SUFFIX,dialogflow.com - - DOMAIN-SUFFIX,autodraw.com - - DOMAIN-SUFFIX,capitalg.com - - DOMAIN-SUFFIX,certificate-transparency.org - - DOMAIN-SUFFIX,chrome.com - - DOMAIN-SUFFIX,chromeexperiments.com - - DOMAIN-SUFFIX,chromestatus.com - - DOMAIN-SUFFIX,chromium.org - - DOMAIN-SUFFIX,creativelab5.com - - DOMAIN-SUFFIX,debug.com - - DOMAIN-SUFFIX,deepmind.com - - DOMAIN-SUFFIX,firebaseio.com - - DOMAIN-SUFFIX,getmdl.io - - DOMAIN-SUFFIX,ggpht.com - - DOMAIN-SUFFIX,gmail.com - - DOMAIN-SUFFIX,gmodules.com - - DOMAIN-SUFFIX,godoc.org - - DOMAIN-SUFFIX,golang.org - - DOMAIN-SUFFIX,gstatic.com - - DOMAIN-SUFFIX,gv.com - - DOMAIN-SUFFIX,gwtproject.org - - DOMAIN-SUFFIX,itasoftware.com - - DOMAIN-SUFFIX,madewithcode.com - - DOMAIN-SUFFIX,material.io - - DOMAIN-SUFFIX,page.link - - DOMAIN-SUFFIX,polymer-project.org - - DOMAIN-SUFFIX,admin.recaptcha.net - - DOMAIN-SUFFIX,recaptcha.net - - DOMAIN-SUFFIX,shattered.io - - DOMAIN-SUFFIX,synergyse.com - - DOMAIN-SUFFIX,telephony.goog - - DOMAIN-SUFFIX,tensorflow.org - - DOMAIN-SUFFIX,tfhub.dev - - DOMAIN-SUFFIX,tiltbrush.com - - DOMAIN-SUFFIX,waveprotocol.org - - DOMAIN-SUFFIX,waymo.com - - DOMAIN-SUFFIX,webmproject.org - - DOMAIN-SUFFIX,webrtc.org - - DOMAIN-SUFFIX,whatbrowser.org - - DOMAIN-SUFFIX,widevine.com - - DOMAIN-SUFFIX,x.company - - DOMAIN-SUFFIX,youtu.be - - DOMAIN-SUFFIX,yt.be - - DOMAIN-SUFFIX,ytimg.com - # > Telegram - - DOMAIN-SUFFIX,t.me - - DOMAIN-SUFFIX,tdesktop.com - - DOMAIN-SUFFIX,telegram.me - - DOMAIN-SUFFIX,telesco.pe - # > Facebook - - DOMAIN-SUFFIX,facebook.br - - DOMAIN-SUFFIX,facebook.design - - DOMAIN-SUFFIX,facebook.hu - - DOMAIN-SUFFIX,facebook.in - - DOMAIN-SUFFIX,facebook.nl - - DOMAIN-SUFFIX,facebook.se - - DOMAIN-SUFFIX,facebookmail.com - # > Others - - DOMAIN-SUFFIX,noxinfluencer.com - - DOMAIN-SUFFIX,smartmailcloud.com - - DOMAIN-SUFFIX,weebly.com - - DOMAIN-SUFFIX,twitter.jp - - # (Region-Restricted Access Denied) - # ---(Apple)--- - # > Apple URL Shortener - - DOMAIN-SUFFIX,appsto.re - # > iBooks Store download - - DOMAIN,books.itunes.apple.com - # > App Store Preview - - DOMAIN,apps.apple.com - - DOMAIN,itunes.apple.com - # > Spotlight - - DOMAIN,api-glb-sea.smoot.apple.com - # > Look Up - - DOMAIN,lookup-api.apple.com - - DOMAIN-SUFFIX,smoot.apple.com - # > Apple Music Web - - DOMAIN,beta.music.apple.com - # ------ - # > Others - - DOMAIN-SUFFIX,bing.com - - DOMAIN-SUFFIX,cccat.io - - DOMAIN-SUFFIX,ifixit.com - - DOMAIN-SUFFIX,mangakakalot.com - - DOMAIN-SUFFIX,shopeemobile.com - - # (Network Jitter) - # > Fix download or update is stuck in App Store,and when change the Apple ID region,the payment information can be selected by none. - - DOMAIN-KEYWORD,buy.itunes.apple.com - - DOMAIN-SUFFIX,cloudcone.com.cn - - DOMAIN-SUFFIX,inkbunny.net - - DOMAIN-SUFFIX,metapix.net - - DOMAIN-SUFFIX,s3.amazonaws.com - - DOMAIN-SUFFIX,zaobao.com.sg \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Streaming.yaml b/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Streaming.yaml deleted file mode 100644 index 71f8e847d7..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Streaming.yaml +++ /dev/null @@ -1,262 +0,0 @@ -payload: - # Streaming Media - # (Podcast) - # > Himalaya - # USER-AGENT,Himalaya* - - DOMAIN-SUFFIX,himalaya.com - # (Music) - # > Deezer - # USER-AGENT,Deezer* - - DOMAIN-SUFFIX,deezer.com - - DOMAIN-SUFFIX,dzcdn.net - # > JOOX - # USER-AGENT,JOOX* - # USER-AGENT,WeMusic* - - DOMAIN-SUFFIX,joox.com - - DOMAIN-KEYWORD,jooxweb-api - # > KKBOX - - DOMAIN-SUFFIX,kkbox.com - - DOMAIN-SUFFIX,kkbox.com.tw - - DOMAIN-SUFFIX,kfs.io - # > Pandora - # USER-AGENT,Pandora* - - DOMAIN-SUFFIX,pandora.com - # > SoundCloud - # USER-AGENT,SoundCloud* - - DOMAIN-SUFFIX,p-cdn.us - - DOMAIN-SUFFIX,sndcdn.com - - DOMAIN-SUFFIX,soundcloud.com - # > Spotify - # USER-AGENT,Spotify* - - DOMAIN-SUFFIX,pscdn.co - - DOMAIN-SUFFIX,scdn.co - - DOMAIN-SUFFIX,spotify.com - - DOMAIN-SUFFIX,spoti.fi - - DOMAIN-KEYWORD,spotify.com - - DOMAIN-KEYWORD,-spotify-com - # > TIDAL - # USER-AGENT,TIDAL* - - DOMAIN-SUFFIX,tidal.com - # > YouTubeMusic - # USER-AGENT,com.google.ios.youtubemusic* - # USER-AGENT,YouTubeMusic* - # (Video) - # > AbemaTV - # USER-AGENT,AbemaTV* - - DOMAIN-SUFFIX,abema.io - - DOMAIN-SUFFIX,abema.tv - - DOMAIN-SUFFIX,ameba.jp - - DOMAIN-SUFFIX,hayabusa.io - - DOMAIN-KEYWORD,abematv.akamaized.net - # > All 4 - # USER-AGENT,All4* - - DOMAIN-SUFFIX,c4assets.com - - DOMAIN-SUFFIX,channel4.com - # > Amazon Prime Video - # USER-AGENT,InstantVideo.US* - # USER-AGENT,Prime%20Video* - - DOMAIN-SUFFIX,aiv-cdn.net - - DOMAIN-SUFFIX,aiv-delivery.net - - DOMAIN-SUFFIX,amazonvideo.com - - DOMAIN-SUFFIX,primevideo.com - - DOMAIN,avodmp4s3ww-a.akamaihd.net - - DOMAIN,d25xi40x97liuc.cloudfront.net - - DOMAIN,dmqdd6hw24ucf.cloudfront.net - - DOMAIN,dmqdd6hw24ucf.cloudfront.net - - DOMAIN,d22qjgkvxw22r6.cloudfront.net - - DOMAIN,d1v5ir2lpwr8os.cloudfront.net - - DOMAIN-KEYWORD,avoddashs - # > Apple TV - - DOMAIN-SUFFIX,tv.apple.com - - DOMAIN,hls.itunes.apple.com - - DOMAIN,hls-amt.itunes.apple.com - - DOMAIN,play-edge.itunes.apple.com - # > Bahamut - # USER-AGENT,Anime* - - DOMAIN-SUFFIX,bahamut.com.tw - - DOMAIN-SUFFIX,gamer.com.tw - - DOMAIN,gamer-cds.cdn.hinet.net - - DOMAIN,gamer2-cds.cdn.hinet.net - # > BBC iPlayer - # USER-AGENT,BBCiPlayer* - - DOMAIN-SUFFIX,bbc.co.uk - - DOMAIN-SUFFIX,bbci.co.uk - - DOMAIN-KEYWORD,bbcfmt - - DOMAIN-KEYWORD,uk-live - # > DAZN - # USER-AGENT,DAZN* - - DOMAIN-SUFFIX,dazn.com - - DOMAIN-SUFFIX,dazn-api.com - - DOMAIN,d151l6v8er5bdm.cloudfront.net - - DOMAIN-KEYWORD,voddazn - # > Disney+ - # USER-AGENT,Disney+* - - DOMAIN-SUFFIX,disney-plus.net - - DOMAIN-SUFFIX,disneyplus.com - - DOMAIN-SUFFIX,dssott.com - - DOMAIN,cdn.registerdisney.go.com - - DOMAIN,global.edge.bamgrid.com - # > DMM - - DOMAIN-SUFFIX,dmm.co.jp - - DOMAIN-SUFFIX,dmm.com - - DOMAIN-SUFFIX,dmm-extension.com - # > encoreTVB - # USER-AGENT,encoreTVB* - - DOMAIN-SUFFIX,encoretvb.com - - DOMAIN,edge.api.brightcove.com - - DOMAIN,bcbolt446c5271-a.akamaihd.net - # > FOX NOW - # USER-AGENT,FOX%20NOW* - - DOMAIN-SUFFIX,fox.com - - DOMAIN-SUFFIX,foxdcg.com - - DOMAIN-SUFFIX,theplatform.com - - DOMAIN-SUFFIX,uplynk.com - # > FOX+ - - DOMAIN-SUFFIX,foxplus.com - # - DOMAIN-SUFFIX,theplatform.com - - DOMAIN,cdn-fox-networks-group-green.akamaized.net - - DOMAIN,d3cv4a9a9wh0bt.cloudfront.net - - DOMAIN,foxsports01-i.akamaihd.net - - DOMAIN,foxsports02-i.akamaihd.net - - DOMAIN,foxsports03-i.akamaihd.net - - DOMAIN,staticasiafox.akamaized.net - # > HBO NOW & Max - # USER-AGENT,HBO%20NOW* - - DOMAIN-SUFFIX,hbo.com - - DOMAIN-SUFFIX,hbogo.com - - DOMAIN-SUFFIX,hbonow.com - # USER-AGENT,HBOMAX* - - DOMAIN-SUFFIX,hbomax.com - # > HBO GO HKG - # USER-AGENT,HBO%20GO%20PROD%20HKG* - - DOMAIN-SUFFIX,hbogoasia.com - - DOMAIN-SUFFIX,hbogoasia.hk - - DOMAIN,bcbolthboa-a.akamaihd.net - - DOMAIN,players.brightcove.net - - DOMAIN,s3-ap-southeast-1.amazonaws.com - - DOMAIN,dai3fd1oh325y.cloudfront.net - - DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com - - DOMAIN,hboasia1-i.akamaihd.net - - DOMAIN,hboasia2-i.akamaihd.net - - DOMAIN,hboasia3-i.akamaihd.net - - DOMAIN,hboasia4-i.akamaihd.net - - DOMAIN,hboasia5-i.akamaihd.net - - DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net - # > 华文电视 - # USER-AGENT,HWTVMobile* - - DOMAIN-SUFFIX,5itv.tv - - DOMAIN-SUFFIX,ocnttv.com - # > Hulu - - DOMAIN-SUFFIX,hulu.com - - DOMAIN-SUFFIX,huluim.com - - DOMAIN-SUFFIX,hulustream.com - # > Hulu / フールー - - DOMAIN-SUFFIX,happyon.jp - - DOMAIN-SUFFIX,hjholdings.jp - - DOMAIN-SUFFIX,hulu.jp - # > ITV - # USER-AGENT,ITV_Player* - - DOMAIN-SUFFIX,itv.com - - DOMAIN-SUFFIX,itvstatic.com - - DOMAIN,itvpnpmobile-a.akamaihd.net - # > KKTV - # USER-AGENT,KKTV* - # USER-AGENT,com.kktv.ios.kktv* - - DOMAIN-SUFFIX,kktv.com.tw - - DOMAIN-SUFFIX,kktv.me - - DOMAIN,kktv-theater.kk.stream - # > LINE TV - # USER-AGENT,LINE%20TV* - - DOMAIN-SUFFIX,linetv.tw - - DOMAIN,d3c7rimkq79yfu.cloudfront.net - # > LiTV - - DOMAIN-SUFFIX,litv.tv - - DOMAIN,litvfreemobile-hichannel.cdn.hinet.net - # > My5 - # USER-AGENT,My5* - - DOMAIN-SUFFIX,channel5.com - - DOMAIN-SUFFIX,my5.tv - - DOMAIN,d349g9zuie06uo.cloudfront.net - # > myTV SUPER - # USER-AGENT,mytv* - - DOMAIN-SUFFIX,mytvsuper.com - - DOMAIN-SUFFIX,tvb.com - # > Netflix - # USER-AGENT,Argo* - - DOMAIN-SUFFIX,netflix.com - - DOMAIN-SUFFIX,netflix.net - - DOMAIN-SUFFIX,nflxext.com - - DOMAIN-SUFFIX,nflximg.com - - DOMAIN-SUFFIX,nflximg.net - - DOMAIN-SUFFIX,nflxso.net - - DOMAIN-SUFFIX,nflxvideo.net - - DOMAIN-SUFFIX,netflixdnstest0.com - - DOMAIN-SUFFIX,netflixdnstest1.com - - DOMAIN-SUFFIX,netflixdnstest2.com - - DOMAIN-SUFFIX,netflixdnstest3.com - - DOMAIN-SUFFIX,netflixdnstest4.com - - DOMAIN-SUFFIX,netflixdnstest5.com - - DOMAIN-SUFFIX,netflixdnstest6.com - - DOMAIN-SUFFIX,netflixdnstest7.com - - DOMAIN-SUFFIX,netflixdnstest8.com - - DOMAIN-SUFFIX,netflixdnstest9.com - - IP-CIDR,23.246.0.0/18,no-resolve - - IP-CIDR,37.77.184.0/21,no-resolve - - IP-CIDR,45.57.0.0/17,no-resolve - - IP-CIDR,64.120.128.0/17,no-resolve - - IP-CIDR,66.197.128.0/17,no-resolve - - IP-CIDR,108.175.32.0/20,no-resolve - - IP-CIDR,192.173.64.0/18,no-resolve - - IP-CIDR,198.38.96.0/19,no-resolve - - IP-CIDR,198.45.48.0/20,no-resolve - # > niconico - # USER-AGENT,Niconico* - - DOMAIN-SUFFIX,dmc.nico - - DOMAIN-SUFFIX,nicovideo.jp - - DOMAIN-SUFFIX,nimg.jp - - DOMAIN-SUFFIX,socdm.com - # > Now E - - DOMAIN-SUFFIX,nowe.com - - DOMAIN-SUFFIX,nowestatic.com - # > PBS - # USER-AGENT,PBS* - - DOMAIN-SUFFIX,pbs.org - # > Pornhub - - DOMAIN-SUFFIX,phncdn.com - - DOMAIN-SUFFIX,phprcdn.com - - DOMAIN-SUFFIX,pornhub.com - - DOMAIN-SUFFIX,pornhubpremium.com - # > 台湾好 - # USER-AGENT,TaiwanGood* - - DOMAIN-SUFFIX,skyking.com.tw - - DOMAIN,hamifans.emome.net - # > TikTok - # USER-AGENT,TikTok* - - DOMAIN-SUFFIX,byteoversea.com - - DOMAIN-SUFFIX,ibytedtos.com - - DOMAIN-SUFFIX,ipstatp.com - - DOMAIN-SUFFIX,muscdn.com - - DOMAIN-SUFFIX,musical.ly - - DOMAIN-SUFFIX,tiktok.com - - DOMAIN-SUFFIX,tiktokcdn.com - - DOMAIN-SUFFIX,tiktokv.com - - DOMAIN-KEYWORD,-tiktokcdn-com - # > Twitch - - DOMAIN-SUFFIX,jtvnw.net - - DOMAIN-SUFFIX,ttvnw.net - - DOMAIN-SUFFIX,twitch.tv - - DOMAIN-SUFFIX,twitchcdn.net - # > ViuTV - # USER-AGENT,Viu* - - DOMAIN-SUFFIX,viu.com - - DOMAIN-SUFFIX,viu.tv - - DOMAIN,api.viu.now.com - - DOMAIN,d1k2us671qcoau.cloudfront.net - - DOMAIN,d2anahhhmp1ffz.cloudfront.net - - DOMAIN,dfp6rglgjqszk.cloudfront.net - # > YouTube - # USER-AGENT,com.google.ios.youtube* - # USER-AGENT,YouTube* - - DOMAIN-SUFFIX,googlevideo.com - - DOMAIN-SUFFIX,youtube.com - - DOMAIN,youtubei.googleapis.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/StreamingSE.yaml b/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/StreamingSE.yaml deleted file mode 100644 index 8f184d5e9b..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/StreamingSE.yaml +++ /dev/null @@ -1,13 +0,0 @@ -payload: - # > bilibili - - DOMAIN-SUFFIX,biliapi.net - - DOMAIN,api.bilibili.com - - DOMAIN,www.bilibili.com - - DOMAIN,upos-hz-mirrorakam.akamaized.net - # > 愛奇藝台灣站 - - DOMAIN,cache.video.iqiyi.com - # > 芒果TV国际 - - DOMAIN-SUFFIX,api.mgtv.com - # > WeTV - - DOMAIN-SUFFIX,wetv.vip - - DOMAIN-SUFFIX,wetvinfo.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Unbreak.yaml b/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Unbreak.yaml deleted file mode 100644 index b64bc02fb0..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/openclash/rule_provider/Unbreak.yaml +++ /dev/null @@ -1,23 +0,0 @@ -payload: - # Unbreak - # > General - # USER-AGENT,archero* - # USER-AGENT,coffeecorp* - # USER-AGENT,Coffee%20Corp* - # USER-AGENT,restaurant-mobile* - - DOMAIN,app.adjust.com - # > Alibaba - - DOMAIN,log.mmstat.com - - DOMAIN,sycm.mmstat.com - # > Google - - DOMAIN-SUFFIX,googletraveladservices.com - - DOMAIN,dl.google.com - - DOMAIN,mtalk.google.com - # > Tencent - - DOMAIN,livew.l.qq.com - - DOMAIN,vd.l.qq.com - # > Strava - - DOMAIN,analytics.strava.com - # > Umeng - - DOMAIN,msg.umeng.com - - DOMAIN,msg.umengcloud.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/uci-defaults/luci-openclash b/package/ctcgfw/luci-app-openclash/root/etc/uci-defaults/luci-openclash deleted file mode 100644 index 30335dbc1b..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/etc/uci-defaults/luci-openclash +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/sh - -uci -q delete ucitrack.@openclash[-1] -uci -q add ucitrack openclash -uci -q set ucitrack.@openclash[-1].init=openclash -uci -q commit ucitrack -uci -q delete firewall.openclash -uci -q set firewall.openclash=include -uci -q set firewall.openclash.type=script -uci -q set firewall.openclash.path=/var/etc/openclash.include -uci -q set firewall.openclash.reload=1 -uci -q commit firewall - -mkdir -p /etc/openclash/config -mkdir -p /etc/openclash/proxy_provider -mkdir -p /etc/openclash/backup -mkdir -p /etc/openclash/core -mkdir -p /etc/openclash/history -mkdir -p /usr/share/openclash/backup - -cp -f "/etc/config/openclash" "/usr/share/openclash/backup/openclash" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_rules.list" "/usr/share/openclash/backup/openclash_custom_rules.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_rules_2.list" "/usr/share/openclash/backup/openclash_custom_rules_2.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_hosts.list" "/usr/share/openclash/backup/openclash_custom_hosts.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_fake_filter.list" "/usr/share/openclash/backup/openclash_custom_fake_filter.list" >/dev/null 2>&1 -cp -f "/etc/openclash/custom/openclash_custom_domain_dns.list" "/usr/share/openclash/backup/openclash_custom_domain_dns.list" >/dev/null 2>&1 - -mkdir -p /lib/upgrade/keep.d -cat > "/lib/upgrade/keep.d/luci-app-openclash" <<-EOF -/etc/openclash/ -EOF - -if [ -f "/tmp/openclash.bak" ]; then - mv -f "/tmp/openclash.bak" "/etc/config/openclash" >/dev/null 2>&1 - cp -rf "/tmp/openclash/." "/etc/openclash/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_config/." "/etc/openclash/config/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_core/." "/etc/openclash/core/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_history/." "/etc/openclash/history/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_proxy_provider/." "/etc/openclash/proxy_provider/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_rule_provider/." "/etc/openclash/rule_provider/" >/dev/null 2>&1 - cp -rf "/tmp/openclash_game_rules/." "/etc/openclash/game_rules/" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_rules.list.bak" "/etc/openclash/custom/openclash_custom_rules.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_rules_2.list.bak" "/etc/openclash/custom/openclash_custom_rules_2.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_hosts.list.bak" "/etc/openclash/custom/openclash_custom_hosts.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_fake_filter.list.bak" "/etc/openclash/custom/openclash_custom_fake_filter.list" >/dev/null 2>&1 - mv -f "/tmp/openclash_custom_domain_dns.list.bak" "/etc/openclash/custom/openclash_custom_domain_dns.list" >/dev/null 2>&1 - rm -rf "/etc/openclash/openclash" - rm -rf "/etc/openclash/fake_filter.list" - rm -rf "/etc/openclash/openclash_servers_fake_filter.conf" - rm -rf /tmp/openclash* -fi - -source "/etc/openwrt_release" -case "${DISTRIB_ARCH}" in - aarch64_*) - CORE_ARCH="linux-armv8" - ;; - arm_*_neon-vfp*) - CORE_ARCH="linux-armv7" - ;; - arm_*_neon|arm_*_vfp*) - CORE_ARCH="linux-armv6" - ;; - arm*) - CORE_ARCH="linux-armv5" - ;; - i386_*) - CORE_ARCH="linux-386" - ;; - mips64_*) - CORE_ARCH="linux-mips64" - ;; - mips_*) - CORE_ARCH="linux-mips-softfloat" - ;; - mipsel_*) - CORE_ARCH="linux-mipsle-softfloat" - ;; - x86_64) - CORE_ARCH="linux-amd64" - ;; - *) - CORE_ARCH="0" - ;; -esac -uci -q set openclash.config.core_version="${CORE_ARCH}" - -uci -q set openclash.config.enable=0 -uci -q commit openclash - -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/cfg_servers_address_fake_filter.sh b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/cfg_servers_address_fake_filter.sh deleted file mode 100755 index fa127187fe..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/cfg_servers_address_fake_filter.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/openclash_ps.sh - -status=$(unify_ps_status "cfg_servers_address_fake_filter.sh") -[ "$status" -gt "3" ] && exit 0 - -START_LOG="/tmp/openclash_start.log" -en_mode=$(uci get openclash.config.en_mode 2>/dev/null) - -if pidof clash >/dev/null && [ -z "$(echo "$en_mode" |grep "redir-host")" ]; then - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1 - /usr/share/openclash/openclash_fake_filter.sh - if [ -s "/etc/openclash/servers_fake_filter.conf" ]; then - mkdir -p /tmp/dnsmasq.d - ln -s /etc/openclash/servers_fake_filter.conf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1 - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - echo "" >$START_LOG -fi diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh deleted file mode 100755 index 61d8918b2f..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -. /lib/functions.sh -. /usr/share/openclash/openclash_ps.sh - -cfg_unused_servers_del() -{ - - local section="$1" - config_get_bool "enabled" "$section" "enabled" "1" - - if [ "$enabled" = "1" ]; then - return - fi - - #删除未选中节点 - uci delete openclash."$section" 2>/dev/null -} - -status=$(unify_ps_status "cfg_unused_servers_del.sh") -[ "$status" -gt "3" ] && exit 0 - config_load "openclash" - config_foreach cfg_unused_servers_del "servers" - uci commit openclash - diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/clash_version.sh b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/clash_version.sh deleted file mode 100755 index 6531f1e3d9..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/clash_version.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -. /usr/share/openclash/openclash_ps.sh - -#禁止多个实例 -status=$(unify_ps_status "clash_version.sh") -[ "$status" -gt "3" ] && exit 0 - -CKTIME=$(date "+%Y-%m-%d-%H") -LAST_OPVER="/tmp/clash_last_version" - -if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then - if pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://raw.githubusercontent.com/vernesong/OpenClash/master/core_version -o $LAST_OPVER >/dev/null 2>&1 - fi - if [ "$?" -ne "0" ] || ! pidof clash >/dev/null; then - curl -sL --connect-timeout 10 --retry 2 https://cdn.jsdelivr.net/gh/vernesong/OpenClash@master/core_version -o $LAST_OPVER >/dev/null 2>&1 - fi - if [ "$?" -eq "0" ] && [ -s "$LAST_OPVER" ]; then - echo "CheckTime:$CKTIME" >>$LAST_OPVER - else - rm -rf $LAST_OPVER - fi -fi diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/CNAME b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/CNAME deleted file mode 100644 index fed224edb9..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/CNAME +++ /dev/null @@ -1 +0,0 @@ -clash.razord.top \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.0bf7b2ad.js b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.0bf7b2ad.js deleted file mode 100644 index 3b1ba0698e..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.0bf7b2ad.js +++ /dev/null @@ -1 +0,0 @@ -var e=Object.assign;import{e as t,u as n,r as a,c as s,R as o,a as r,b as l,d as c,f as i,g as u,h as d,i as m,j as p,k as f,l as h,A as g,F as y,m as v,N as E,n as w,o as x,p as b,q as N,s as C,t as k,H as P}from"./vendor.b176d855.js";function S(){return"ClashX Runtime"===navigator.userAgent}!function(e=".",t="__import__"){try{self[t]=new Function("u","return import(u)")}catch(n){const a=new URL(e,location),s=e=>{URL.revokeObjectURL(e.src),e.remove()};self[t]=e=>new Promise(((n,o)=>{const r=new URL(e,a);if(self[t].moduleMap[r])return n(self[t].moduleMap[r]);const l=new Blob([`import * as m from '${r}';`,`${t}.moduleMap['${r}']=m;`],{type:"text/javascript"}),c=Object.assign(document.createElement("script"),{type:"module",src:URL.createObjectURL(l),onerror(){o(new Error(`Failed to import: ${e}`)),s(c)},onload(){n(self[t].moduleMap[r]),s(c)}});document.head.appendChild(c)})),self[t].moduleMap={}}}("assets/");let T=null;class L{constructor(e){this.instance=null,window.WebViewJavascriptBridge&&(this.instance=window.WebViewJavascriptBridge),this.initBridge((t=>{this.instance=t,e()}))}initBridge(e){if(!S())return null==e?void 0:e(null);if(window.WebViewJavascriptBridge)return e(window.WebViewJavascriptBridge);if(window.WVJBCallbacks)return window.WVJBCallbacks.push(e);window.WVJBCallbacks=[e];const t=document.createElement("iframe");t.style.display="none",t.src="https://__bridge_loaded__",document.documentElement.appendChild(t),setTimeout((()=>document.documentElement.removeChild(t)),0)}callHandler(e,t){return new Promise((n=>{var a;null==(a=this.instance)||a.callHandler(e,t,n)}))}ping(){return this.callHandler("ping")}readConfigString(){return this.callHandler("readConfigString")}getPasteboard(){return this.callHandler("getPasteboard")}getAPIInfo(){return this.callHandler("apiInfo")}setPasteboard(e){return this.callHandler("setPasteboard",e)}writeConfigWithString(e){return this.callHandler("writeConfigWithString",e)}setSystemProxy(e){return this.callHandler("setSystemProxy",e)}getStartAtLogin(){return this.callHandler("getStartAtLogin")}getProxyDelay(e){return this.callHandler("speedTest",e)}setStartAtLogin(e){return this.callHandler("setStartAtLogin",e)}isSystemProxySet(){return this.callHandler("isSystemProxySet")}}var $;($||($={})).SPEED_NOTIFY="speed-notify";var R=new class{constructor(){this.EE=new t}notifySpeedTest(){this.EE.emit($.SPEED_NOTIFY)}subscribe(e,t){this.EE.addListener(e,t)}unsubscribe(e,t){this.EE.removeListener(e,t)}};function D(e,t=""){return window.localStorage.getItem(e)||t}function I(e,t){return window.localStorage.setItem(e,t)}function A(){}async function B(e){try{return[await e,null]}catch(t){return[null,t]}}function M(e){const[t,s]=n(e);return[t,a.useMemo((()=>function(e,t){"string"==typeof e?s((n=>{const a=t;n[e]=a})):"function"==typeof e?s(e):"object"==typeof e&&s((t=>{const n=e;for(const e of Object.keys(n)){const a=e;t[a]=n[a]}}))}),[s])]}function H(e=!1){const[t,n]=a.useState(e);return{visible:t,hide:function(){n(!1)},show:function(){n(!0)}}}function U(e){const{title:t,children:n,className:o,style:r}=e;return a.createElement("header",{className:s("header",o),style:r},a.createElement("h1",null,t),a.createElement("div",{className:"operations"},n))}function O(t){const{type:n,size:o=14,className:r,style:l}=t,c=s("clash-iconfont",`icon-${n}`,r),i=e({fontSize:o},l),u=e(e({},t),{className:c,style:i});return a.createElement("i",e({},u))}function j(e){const{className:t,checked:n=!1,disabled:o=!1,onChange:r=A}=e,l=s("switch",{checked:n,disabled:o},t);return a.createElement("div",{className:l,onClick:function(){o||r(!n)}},a.createElement(O,{className:"switch-icon",type:"check",size:20,style:{fontWeight:"bold"}}))}function F(e){const{className:t,style:n,children:o}=e;return a.createElement("div",{className:s("card",t),style:n},o)}function z(e){const{options:t,value:n,onSelect:o}=e;return a.createElement("div",{className:"button-select"},t.map((e=>a.createElement("button",{value:e.value,key:e.value,className:s("button-select-options",{actived:n===e.value}),onClick:()=>null==o?void 0:o(e.value)},e.label))))}const W={en_US:{SideBar:{Proxies:"Proxies",Overview:"Overview",Logs:"Logs",Rules:"Rules",Settings:"Setting",Connections:"Connections",Version:"Version"},Settings:{title:"Settings",labels:{startAtLogin:"Start at login",language:"language",setAsSystemProxy:"Set as system proxy",allowConnectFromLan:"Allow connect from Lan",proxyMode:"Mode",socks5ProxyPort:"Socks5 proxy port",httpProxyPort:"HTTP proxy port",mixedProxyPort:"Mixed proxy port",externalController:"External controller"},values:{cn:"中文",en:"English",global:"Global",rules:"Rules",direct:"Direct",script:"Script"},versionString:"Current ClashX is the latest version:{{version}}",checkUpdate:"Check Update",externalControllerSetting:{title:"External Controller",note:"Please note that modifying this configuration will only configure Dashboard. Will not modify your Clash configuration file. Please make sure that the external controller address matches the address in the Clash configuration file, otherwise, Dashboard will not be able to connect to Clash.",host:"Host",port:"Port",secret:"Secret"}},Logs:{title:"Logs"},Rules:{title:"Rules",providerTitle:"Providers",providerUpdateTime:"Last updated at",ruleCount:"Rule count"},Connections:{title:"Connections",keepClosed:"Keep closed connections",total:{text:"total",upload:"upload",download:"download"},closeAll:{title:"Warning",content:"This would close all connections"},filter:{all:"All"},columns:{host:"Host",network:"Network",type:"Type",chains:"Chains",rule:"Rule",time:"Time",speed:"Speed",upload:"Upload",download:"Download",sourceIP:"Source IP"}},Proxies:{title:"Proxies",editDialog:{title:"Edit Proxy",color:"Color",name:"Name",type:"Type",server:"Server",port:"Port",password:"Password",cipher:"Cipher",obfs:"Obfs","obfs-host":"Obfs-host",uuid:"UUID",alterId:"AlterId",tls:"TLS"},groupTitle:"Policy Group",providerTitle:"Providers",providerUpdateTime:"Last updated at",expandText:"Expand",collapseText:"Collapse",speedTestText:"Speed Test",breakConnectionsText:"Close connections which include the group"},Modal:{ok:"Ok",cancel:"Cancel"}},zh_CN:{SideBar:{Proxies:"代理",Overview:"总览",Logs:"日志",Rules:"规则",Settings:"设置",Connections:"连接",Version:"版本"},Settings:{title:"设置",labels:{startAtLogin:"开机时启动",language:"语言",setAsSystemProxy:"设置为系统代理",allowConnectFromLan:"允许来自局域网的连接",proxyMode:"代理模式",socks5ProxyPort:"Socks5 代理端口",httpProxyPort:"HTTP 代理端口",mixedProxyPort:"混合代理端口",externalController:"外部控制设置"},values:{cn:"中文",en:"English",global:"全局",rules:"规则",direct:"直连",script:"脚本"},versionString:"当前 ClashX 已是最新版本:{{version}}",checkUpdate:"检查更新",externalControllerSetting:{title:"编辑外部控制设置",note:"请注意,修改该配置项并不会修改你的 Clash 配置文件,请确认修改后的外部控制地址和 Clash 配置文件内的地址一致,否则会导致 Dashboard 无法连接。",host:"Host",port:"端口",secret:"密钥"}},Logs:{title:"日志"},Rules:{title:"规则",providerTitle:"规则集",providerUpdateTime:"最后更新于",ruleCount:"规则条数"},Connections:{title:"连接",keepClosed:"保留关闭连接",total:{text:"总量",upload:"上传",download:"下载"},closeAll:{title:"警告",content:"将会关闭所有连接"},filter:{all:"全部"},columns:{host:"域名",network:"网络",type:"类型",chains:"节点链",rule:"规则",time:"连接时间",speed:"速率",upload:"上传",download:"下载",sourceIP:"来源 IP"}},Proxies:{title:"代理",editDialog:{title:"编辑代理",color:"颜色",name:"名字",type:"类型",server:"服务器",port:"端口",password:"密码",cipher:"加密方式",obfs:"Obfs","obfs-host":"Obfs-host",uuid:"UUID",alterId:"AlterId",tls:"TLS"},groupTitle:"策略组",providerTitle:"代理集",providerUpdateTime:"最后更新于",expandText:"展开",collapseText:"收起",speedTestText:"测速",breakConnectionsText:"切换时打断包含策略组的连接"},Modal:{ok:"确 定",cancel:"取 消"}}},_=Object.keys(W);function G(e){const[t,n]=o(e);return[t,a.useMemo((()=>function(e,t){if("string"==typeof e)n((n=>r(n,(n=>{const a=t;n[e]=a}))));else if("function"==typeof e){const t=e;n((e=>r(e,t)))}else"object"==typeof e&&n((t=>r(t,(t=>{const n=e;for(const e of Object.keys(n)){const a=e;t[a]=n[a]}}))))}),[n])]}function V(e){let t=null;return async function(){return t||(t=e(),t.catch((e=>{throw t=null,e})))}}class X{constructor(e){this.EE=new t,this.innerBuffer=[],this.isClose=!1,this.config=Object.assign({bufferLength:0,retryInterval:5e3,headers:{}},e),this.config.useWebsocket?this.websocketLoop():this.loop()}websocketLoop(){var e;const t=new URL(this.config.url);t.protocol="http:"===t.protocol?"ws:":"wss:",t.searchParams.set("token",null!=(e=this.config.token)?e:"");const n=new WebSocket(t.toString());n.addEventListener("message",(e=>{const t=JSON.parse(e.data);this.EE.emit("data",[t]),this.config.bufferLength>0&&(this.innerBuffer.push(t),this.innerBuffer.length>this.config.bufferLength&&this.innerBuffer.splice(0,this.innerBuffer.length-this.config.bufferLength))})),n.addEventListener("close",(()=>setTimeout(this.websocketLoop,this.config.retryInterval))),n.addEventListener("error",(e=>{this.EE.emit("error",e),setTimeout(this.websocketLoop,this.config.retryInterval)}))}async loop(){const[e,t]=await B(fetch(this.config.url,{mode:"cors",headers:this.config.token?{Authorization:`Bearer ${this.config.token}`}:{}}));if(t||!e.body)return void this.retry(t);const n=e.body.getReader(),a=new TextDecoder;for(;!this.isClose;){const[{value:e},t]=await B(null==n?void 0:n.read());if(t){this.retry(t);break}const s=a.decode(e).trim().split("\n").map((e=>JSON.parse(e)));this.EE.emit("data",s),this.config.bufferLength>0&&(this.innerBuffer.push(...s),this.innerBuffer.length>this.config.bufferLength&&this.innerBuffer.splice(0,this.innerBuffer.length-this.config.bufferLength))}}retry(e){this.isClose||(this.EE.emit("error",e),window.setTimeout(this.loop,this.config.retryInterval))}subscribe(e,t){this.EE.addListener(e,t)}unsubscribe(e,t){this.EE.removeListener(e,t)}buffer(){return this.innerBuffer.slice()}destory(){this.EE.removeAllListeners(),this.isClose=!0}}async function J(){if(S()){const e=await T.getAPIInfo();return{hostname:e.host,port:e.port,secret:e.secret,protocol:"http:"}}const e=D("externalControllerAddr","127.0.0.1"),t=D("externalControllerPort","9090"),n=D("secret",""),a="127.0.0.1"===e?"http:":window.location.protocol;if(!e||!t)throw new Error("can't get hostname or port");return{hostname:e,port:t,secret:n,protocol:a}}const Y=V((async()=>{const{hostname:e,port:t,secret:n,protocol:a}=await J();return l.create({baseURL:`${a}//${e}:${t}`,headers:n?{Authorization:`Bearer ${n}`}:{}})}));async function K(){return(await Y()).get("configs")}async function q(e){return(await Y()).patch("configs",e)}async function Q(){return(await Y()).get("version")}async function Z(e){return(await Y()).delete(`connections/${e}`)}const ee=V((async function(){const e=await J(),{data:t}=await K(),[n,a]=await B(Q()),s=!!(a?"unkonwn version":n.data.version)||!0,o=`${e.protocol}//${e.hostname}:${e.port}/logs?level=${t["log-level"]}`;return new X({url:o,bufferLength:200,token:e.secret,useWebsocket:s})})),te=V((async function(){const e=await J(),[t,n]=await B(Q()),a=!!(n?"unkonwn version":t.data.version)||!0,s=`${e.protocol}//${e.hostname}:${e.port}/connections`;return new X({url:s,bufferLength:200,token:e.secret,useWebsocket:a})})),ne=c({key:"identity",default:!0});function ae(){const[e,t]=o(ne);return{identity:e,wrapFetcher:function(e){return async function(...n){const[a,s]=await B(e(...n)),o=s;if(o&&(!o.response||401===o.response.status))throw t(!1),s;return t(!0),a}},set:t}}const se=c({key:"i18n",default:function(){const e=D("language");if(e&&_.includes(e))return e;const t=function(){const e=[];if(window.navigator)if(window.navigator.languages)for(const t of window.navigator.languages)e.push(t);else window.navigator.language&&e.push(navigator.language);return e}();for(const n of t){if(n.includes("zh"))return"zh_CN";if(n.includes("us"))return"en_US"}return"en_US"}()});function oe(){const[e,t]=o(se);const n=a.useCallback((function(t){return{t:function(n){return d(W[e][t],n)}}}),[e]);return{lang:e,locales:_,setLang:function(e){t(e),function(e){I("language",e)}(e)},translation:n}}const re=c({key:"version",default:{version:"",premium:!1}});function le(){const[e,t]=o(re),{set:n}=ae();return{version:e.version,premium:e.premium,update:async function(){const[e,a]=await B(Q());n(!a),t(a?{version:"",premium:!1}:{version:e.data.version,premium:!!e.data.premium})}}}const ce=c({key:"config",default:{breakConnections:!1}});function ie(){const[e,t]=G(ce);return{data:e,set:t}}const ue=c({key:"proxyProvider",default:[]});function de(){const[e,t]=o(ue),{data:n,mutate:s}=u("/providers/proxy",(async()=>{const e=await async function(){return(await Y()).get("providers/proxies",{validateStatus:e=>e>=200&&e<300||404===e}).then((e=>(404===e.status&&(e.data={providers:{}}),e)))}();return Object.keys(e.data.providers).map((t=>e.data.providers[t])).filter((e=>"default"!==e.name)).filter((e=>"Compatible"!==e.vehicleType))}));return a.useEffect((()=>t(null!=n?n:[])),[n,t]),{providers:e,update:s}}function me(){const[{premium:e}]=o(re),{data:t,mutate:n}=u("/providers/rule",(async()=>{if(!e)return[];const t=await async function(){return(await Y()).get("providers/rules")}();return Object.keys(t.data.providers).map((e=>t.data.providers[e]))}));return{providers:null!=t?t:[],update:n}}function pe(){const{data:e,mutate:t}=u("/config",(async()=>{var e;const t=(await K()).data;return{port:t.port,socksPort:t["socks-port"],mixedPort:null!=(e=t["mixed-port"])?e:0,redirPort:t["redir-port"],mode:t.mode.toLowerCase(),logLevel:t["log-level"],allowLan:t["allow-lan"]}}));return{general:null!=e?e:{},update:t}}const fe=c({key:"proxies",default:{proxies:[],groups:[],global:{name:"GLOBAL",type:"Selector",now:"",history:[],all:[]}}});function he(){const[t,n]=G(fe),{mutate:s}=u("/proxies",(async()=>{const t=await async function(){return(await Y()).get("proxies")}(),a=t.data.proxies.GLOBAL;a.name="GLOBAL";const s=new Set(["Selector","URLTest","Fallback","LoadBalance"]),o=new Set(["DIRECT","REJECT","GLOBAL"]),r=a.all.filter((e=>!o.has(e))).map((n=>e(e({},t.data.proxies[n]),{name:n}))),[l,c]=function(e,t){const n=[],a=[];for(const s of e)t(s)?n.push(s):a.push(s);return[n,a]}(r,(e=>!s.has(e.type)));n({proxies:l,groups:c,global:a})})),o=a.useCallback(((e,t)=>{n((n=>{for(const a of n.groups)a.name===e&&(a.now=t)}))}),[n]);return{proxies:t.proxies,groups:t.groups,global:t.global,update:s,markProxySelected:o,set:n}}const ge=i({key:"proxyMapping",get:({get:e})=>{const t=e(fe),n=e(ue),a=new Map;for(const s of t.proxies)a.set(s.name,s);for(const s of n)for(const e of s.proxies)a.set(e.name,e);return a}});function ye(){const{data:e,mutate:t}=u("/clashx",(async()=>{var e,t;if(!S())return{isClashX:!1,startAtLogin:!1,systemProxy:!1};return{startAtLogin:null!=(e=await(null==T?void 0:T.getStartAtLogin()))&&e,systemProxy:null!=(t=await(null==T?void 0:T.isSystemProxySet()))&&t,isClashX:!0}}));return{data:e,update:t}}const ve=c({key:"apiData",default:{hostname:"127.0.0.1",port:"9090",secret:""}});function Ee(){const[t,n]=o(ve);return{data:t,fetch:a.useCallback((async function(){const t=await J();n(e({},t))}),[n]),update:async function(e){const{hostname:t,port:n,secret:a}=e;I("externalControllerAddr",t),I("externalControllerPort",n),I("secret",a),window.location.reload()}}}const we=c({key:"rules",default:[]});function xe(){const[e,t]=G(we);return{rules:e,update:async function(){const e=await async function(){return(await Y()).get("rules")}();t(e.data.rules)}}}function be(e){const{className:t,data:n,onClick:o,select:r,canClick:l,errSet:c,rowHeight:i}=e,{translation:u}=oe(),{t:d}=u("Proxies"),[m,p]=a.useState(!1),[f,h]=a.useState(!1),g=a.useRef(null);a.useLayoutEffect((()=>{var e,t;h((null!=(t=null==(e=null==g?void 0:g.current)?void 0:e.offsetHeight)?t:0)>30)}),[]);const y=m?"auto":i,v=l?o:A;const E=n.map((e=>{const t=s({"tags-selected":r===e,"can-click":l,error:null==c?void 0:c.has(e)});return a.createElement("li",{className:t,key:e,onClick:()=>v(e)},e)}));return a.createElement("div",{className:s("tags-container",t),style:{height:y}},a.createElement("ul",{ref:g,className:s("tags",{expand:m})},E),f&&a.createElement("span",{className:"tags-expand",onClick:function(){p(!m)}},d(m?"collapseText":"expandText")))}function Ne(e){const{className:t,style:n,value:o="",align:r="center",inside:l=!1,autoFocus:c=!1,type:i="text",disabled:u=!1,onChange:d=A,onBlur:m=A}=e,p=s("input",`input-align-${r}`,{"input-inside":l},t);return a.createElement("input",{disabled:u,className:p,style:n,value:o,autoFocus:c,type:i,onChange:e=>d(e.target.value,e),onBlur:m})}function Ce(e){const{show:t=!0,title:n="Modal",size:o="small",footer:r=!0,onOk:l=A,onClose:c=A,bodyClassName:i,bodyStyle:u,className:d,style:p,children:f}=e,{translation:h}=oe(),{t:g}=h("Modal"),y=a.useRef(document.createElement("div")),v=a.useRef(null);a.useLayoutEffect((()=>{const e=y.current;return document.body.appendChild(e),()=>{document.body.removeChild(e)}}),[]);const E=a.createElement("div",{className:s("modal-mask",{"modal-show":t}),ref:v,onMouseDown:function(e){e.target===v.current&&c()}},a.createElement("div",{className:s("modal",`modal-${o}`,d),style:p},a.createElement("div",{className:"modal-title"},n),a.createElement("div",{className:s("modal-body",i),style:u},f),r&&a.createElement("div",{className:"footer"},a.createElement(Se,{onClick:()=>c()},g("cancel")),a.createElement(Se,{type:"primary",onClick:()=>l()},g("ok")))));return m.createPortal(E,y.current)}const ke={success:"check",info:"info",warning:"info",error:"close"};function Pe(e){const{message:t="",type:n="info",inside:o=!1,children:r,className:l,style:c}=e,i=s("alert",`alert-${o?"note":"box"}-${n}`,l);return a.createElement("div",{className:i,style:c},a.createElement("span",{className:"alert-icon"},a.createElement(O,{type:ke[n],size:26})),t?a.createElement("p",{className:"alert-message"},t):a.createElement("div",{className:"alert-message"},r))}function Se(e){const{type:t="normal",onClick:n=A,children:o,className:r,style:l}=e,c=s("button",`button-${t}`,r);return a.createElement("button",{className:c,style:l,onClick:n},o)}function Te(e){const{className:t,checked:n=!1,onChange:o=A}=e,r=s("checkbox",{checked:n},t);return a.createElement("div",{className:r,onClick:function(){o(!n)}},a.createElement(O,{className:"checkbox-icon",type:"check",size:18}),a.createElement("div",null,e.children))}function Le(t){const{color:n,className:o,style:r}=t,l=s("tag",o),c=e({color:n},r),i=e(e({},t),{className:l,style:c});return a.createElement("span",e({},i),t.children)}function $e(e){const t=s("spinner",e.className);return a.createElement("div",{className:t},a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})),a.createElement("div",{className:"spinner-circle"},a.createElement("div",{className:"spinner-inner"})))}function Re(e){const t=s("loading","visible",e.className);return e.visible?a.createElement("div",{className:t},a.createElement($e,{className:e.spinnerClassName})):null}const De={"#909399":0,"#00c520":260,"#ff9a28":600,"#ff3e5e":1/0};async function Ie(e){var t;if(S()){return null!=(t=await(null==T?void 0:T.getProxyDelay(e)))?t:0}const{data:{delay:n}}=await async function(e){return(await Y()).get(`proxies/${encodeURIComponent(e)}/delay`,{params:{timeout:5e3,url:"http://www.gstatic.com/generate_204"}})}(e);return n}function Ae(e){const{config:t,className:n}=e,{set:o}=he(),r=a.useCallback((async function(){const[e,n]=await B(Ie(t.name)),a=n?0:e;o((e=>{const n=e.proxies.find((e=>e.name===t.name));n&&n.history.push({time:Date.now().toString(),delay:a})}))}),[t.name,o]),l=a.useMemo((()=>{var e;return(null==(e=t.history)?void 0:e.length)?t.history.slice(-1)[0].delay:0}),[t]);a.useLayoutEffect((()=>(R.subscribe($.SPEED_NOTIFY,r),()=>R.unsubscribe($.SPEED_NOTIFY,r))),[r]);const c=a.useMemo((()=>0===l),[l]),i=a.useMemo((()=>Object.keys(De).find((e=>l<=De[e]))),[l]),u=c?void 0:i;return a.createElement("div",{className:s("proxy-item",{"proxy-error":c},n)},a.createElement("span",{className:"proxy-type",style:{backgroundColor:u}},t.type),a.createElement("p",{className:"proxy-name"},t.name),a.createElement("p",{className:"proxy-delay"},0===l?"-":`${l}ms`))}function Be(e){const{markProxySelected:t}=he(),n=p(ge),{data:s}=ie(),{config:o}=e;const r=a.useMemo((()=>{var e;const t=new Set;for(const a of o.all){const s=null==(e=n.get(a))?void 0:e.history;(null==s?void 0:s.length)&&0===s.slice(-1)[0].delay&&t.add(a)}return t}),[o.all,n]),l="Selector"===o.type;return a.createElement("div",{className:"proxy-group"},a.createElement("div",{className:"proxy-group-part"},a.createElement("span",{className:"proxy-group-name"},o.name),a.createElement(Le,{className:"proxy-group-type"},o.type)),a.createElement("div",{className:"proxy-group-tags-container"},a.createElement(be,{className:"proxy-group-tags",data:o.all,onClick:async function(n){if(await async function(e,t){return(await Y()).put(`proxies/${encodeURIComponent(e)}`,{name:t})}(e.config.name,n),t(e.config.name,n),s.breakConnections){const t=[],n=await async function(){return(await Y()).get("connections")}();for(const a of n.data.connections)a.chains.includes(e.config.name)&&t.push(a.id);for(const e of t)Z(e)}},errSet:r,select:o.now,canClick:l,rowHeight:30})))}function Me(e,t){const n="en_US"===t?"en":"zh-cn";return f().locale(n).from(e)}f.extend(h);function He(e){const{update:t}=de(),{translation:n,lang:s}=oe(),{provider:o}=e,{t:r}=n("Proxies"),{visible:l,hide:c,show:i}=H();const u=a.useMemo((()=>o.proxies.slice().sort(((e,t)=>-1*Fe(e,t)))),[o.proxies]);return a.createElement(F,{className:"proxy-provider"},a.createElement(Re,{visible:l}),a.createElement("div",{className:"proxy-provider-header"},a.createElement("div",{className:"proxy-provider-header-part"},a.createElement("span",{className:"proxy-provider-name"},o.name),a.createElement(Le,null,o.vehicleType)),a.createElement("div",{className:"proxy-provider-header-part"},o.updatedAt&&a.createElement("span",{className:"proxy-provider-update"},`${r("providerUpdateTime")}: ${Me(new Date(o.updatedAt),s)}`),a.createElement(O,{className:"proxy-provider-icon healthcheck",type:"healthcheck",size:18,onClick:function(){i(),async function(e){return(await Y()).get(`providers/proxies/${encodeURIComponent(e)}/healthcheck`)}(o.name).then((()=>t())).finally((()=>c()))}}),a.createElement(O,{className:"proxy-provider-icon",type:"update",size:18,onClick:function(){i(),async function(e){return(await Y()).put(`providers/proxies/${encodeURIComponent(e)}`)}(o.name).then((()=>t())).finally((()=>c()))}}))),a.createElement("ul",{className:"proxies-list"},u.map((e=>a.createElement("li",{key:e.name},a.createElement(Ae,{className:"proxy-provider-item",config:e}))))))}var Ue,Oe;(Oe=Ue||(Ue={}))[Oe.None=0]="None",Oe[Oe.Asc=1]="Asc",Oe[Oe.Desc=2]="Desc";const je={0:"sort",1:"sort-ascending",2:"sort-descending"};function Fe(e,t){const n=e.history.length?e.history.slice(-1)[0].delay:0;return((t.history.length?t.history.slice(-1)[0].delay:0)||Number.MAX_SAFE_INTEGER)-(n||Number.MAX_SAFE_INTEGER)}function ze(){const{groups:e,global:t}=he(),{data:n,set:s}=ie(),{general:o}=pe(),{translation:r}=oe(),{t:l}=r("Proxies"),c=a.useMemo((()=>"global"===o.mode?[t]:e),[o,e,t]);return a.createElement(a.Fragment,null,0!==c.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:l("groupTitle")},a.createElement(Te,{className:"connections-filter",checked:n.breakConnections,onChange:e=>s("breakConnections",e)},l("breakConnectionsText"))),a.createElement(F,{className:"proxies-group-card"},a.createElement("ul",{className:"proxies-group-list"},c.map((e=>a.createElement("li",{className:"proxies-group-item",key:e.name},a.createElement(Be,{config:e}))))))))}function We(){const{providers:e}=de(),{translation:t}=oe(),{t:n}=t("Proxies");return a.createElement(a.Fragment,null,0!==e.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:n("providerTitle")}),a.createElement("ul",{className:"proxies-providers-list"},e.map((e=>a.createElement("li",{className:"proxies-providers-item",key:e.name},a.createElement(He,{provider:e})))))))}function _e(){const{proxies:e}=he(),{translation:t}=oe(),{t:n}=t("Proxies");const{current:s,next:o}=function(e,t=0){if(e.length<2)throw new Error("List requires at least two elements");const[n,s]=a.useState(t);return{current:a.useMemo((()=>e[n]),[e,n]),next:function(){s((n+1)%e.length)}}}([1,2,0]),r=a.useMemo((()=>{switch(s){case 2:return e.slice().sort(((e,t)=>Fe(e,t)));case 1:return e.slice().sort(((e,t)=>-1*Fe(e,t)));default:return e.slice()}}),[s,e]),l=o;return a.createElement(a.Fragment,null,0!==r.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:n("title")},a.createElement(O,{className:"proxies-action-icon",type:je[s],onClick:l,size:20}),a.createElement(O,{className:"proxies-action-icon",type:"speed",size:20}),a.createElement("span",{className:"proxies-speed-test",onClick:function(){R.notifySpeedTest()}},n("speedTestText"))),a.createElement("ul",{className:"proxies-list"},r.map((e=>a.createElement("li",{key:e.name},a.createElement(Ae,{config:e})))))))}function Ge(){return a.createElement("div",{className:"page"},a.createElement(ze,null),a.createElement(We,null),a.createElement(_e,null))}function Ve(){const t=a.useRef(null),n=a.useRef([]),[s,o]=a.useState([]),{translation:r}=oe(),{t:l}=r("Logs");return a.useLayoutEffect((()=>{const e=t.current;e&&(e.scrollTop=e.scrollHeight)})),a.useEffect((()=>{let t=null;function a(t){n.current=n.current.slice().concat(t.map((t=>e(e({},t),{time:new Date})))),o(n.current)}return async function(){t=await ee(),n.current=t.buffer(),o(n.current),t.subscribe("data",a)}(),()=>null==t?void 0:t.unsubscribe("data",a)}),[]),a.createElement("div",{className:"page"},a.createElement(U,{title:l("title")}),a.createElement(F,{className:"logs-card"},a.createElement("ul",{className:"logs-panel",ref:t},s.map(((e,t)=>a.createElement("li",{key:t},a.createElement("span",{className:"logs-panel-time"},f(e.time).format("YYYY-MM-DD HH:mm:ss")),a.createElement("span",null,"[",e.type,"] ",e.payload)))))))}function Xe(e){const{update:t}=me(),{translation:n,lang:o}=oe(),{provider:r}=e,{t:l}=n("Rules"),{visible:c,hide:i,show:u}=H();const d=s("rule-provider-icon",{"rule-provider-loading":c});return a.createElement(F,{className:"rule-provider"},a.createElement("div",{className:"rule-provider-header"},a.createElement("div",{className:"rule-provider-header-part"},a.createElement("span",{className:"rule-provider-name"},r.name),a.createElement(Le,null,r.vehicleType),a.createElement(Le,{className:"rule-provider-behavior"},r.behavior),a.createElement("span",{className:"rule-provider-update"},`${l("ruleCount")}: ${r.ruleCount}`)),a.createElement("div",{className:"rule-provider-header-part"},r.updatedAt&&a.createElement("span",{className:"rule-provider-update"},`${l("providerUpdateTime")}: ${Me(new Date(r.updatedAt),o)}`),a.createElement(O,{className:d,type:"update",size:18,onClick:function(){u(),async function(e){return(await Y()).put(`providers/rules/${encodeURIComponent(e)}`)}(r.name).then((()=>t())).finally((()=>i()))}}))))}function Je(){const{providers:e}=me(),{translation:t}=oe(),{t:n}=t("Rules");return a.createElement(a.Fragment,null,0!==e.length&&a.createElement("div",{className:"proxies-container"},a.createElement(U,{title:n("providerTitle")}),a.createElement("ul",{className:"proxies-providers-list"},e.map((e=>a.createElement("li",{className:"proxies-providers-item",key:e.name},a.createElement(Xe,{provider:e})))))))}function Ye(){const{rules:e,update:t}=xe(),{translation:n}=oe(),{t:s}=n("Rules");function o({index:t,style:n}){const s=e[t];return a.createElement("li",{className:"rule-item",style:n},a.createElement("div",{className:"rule-item-row flex"},a.createElement("div",{className:"rule-type w-40 text-center"},s.type),a.createElement("div",{className:"payload flex-1 text-center"},s.payload),a.createElement("div",{className:"rule-proxy w-40 text-center"},s.proxy)))}return u("rules",t),a.createElement("div",{className:"page"},a.createElement(Je,null),a.createElement(U,{title:s("title")}),a.createElement(F,{className:"rules-card"},a.createElement(g,{className:"rules"},(({height:t,width:n})=>a.createElement(y,{height:t,width:n,itemCount:e.length,itemSize:50},o)))))}const Ke=[{label:"中文",value:"zh_CN"},{label:"English",value:"en_US"}];function qe(){var e,t,n;const{premium:o}=le(),{data:r,update:l}=ye(),{general:c,update:i}=pe(),{set:u}=ae(),{data:d}=Ee(),{translation:m,setLang:p,lang:f}=oe(),{t:h}=m("Settings"),[g,y]=M({socks5ProxyPort:7891,httpProxyPort:7890,mixedProxyPort:0});a.useEffect((()=>{var e,t,n;y("socks5ProxyPort",null!=(e=null==c?void 0:c.socksPort)?e:0),y("httpProxyPort",null!=(t=null==c?void 0:c.port)?t:0),y("mixedProxyPort",null!=(n=null==c?void 0:c.mixedPort)?n:0)}),[c,y]);const{hostname:E,port:w}=d,{allowLan:x,mode:b}=c,N=null!=(e=null==r?void 0:r.startAtLogin)&&e,C=null!=(t=null==r?void 0:r.systemProxy)&&t,k=null!=(n=null==r?void 0:r.isClashX)&&n,P=a.useMemo((()=>{const e=[{label:h("values.global"),value:"Global"},{label:h("values.rules"),value:"Rule"},{label:h("values.direct"),value:"Direct"}];return o&&e.push({label:h("values.script"),value:"Script"}),e}),[h,o]);return a.createElement("div",{className:"page"},a.createElement(U,{title:h("title")}),a.createElement(F,{className:"settings-card"},a.createElement("div",{className:"flex flex-wrap"},a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.startAtLogin")),a.createElement(j,{disabled:!(null==r?void 0:r.isClashX),checked:N,onChange:async function(e){await(null==T?void 0:T.setStartAtLogin(e)),l()}})),a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.language")),a.createElement(z,{options:Ke,value:f,onSelect:e=>{p(e)}}))),a.createElement("div",{className:"flex flex-wrap"},a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.setAsSystemProxy")),a.createElement(j,{disabled:!k,checked:C,onChange:async function(e){await(null==T?void 0:T.setSystemProxy(e)),l()}})),a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.allowConnectFromLan")),a.createElement(j,{checked:x,onChange:async function(e){await q({"allow-lan":e}),await i()}})))),a.createElement(F,{className:"settings-card"},a.createElement("div",{className:"flex flex-wrap"},a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.proxyMode")),a.createElement(z,{options:P,value:v(b),onSelect:async function(e){await q({mode:e}),await i()}})),a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.socks5ProxyPort")),a.createElement(Ne,{className:"w-28",disabled:k,value:g.socks5ProxyPort,onChange:e=>y("socks5ProxyPort",+e),onBlur:async function(){await q({"socks-port":g.socks5ProxyPort}),await i()}}))),a.createElement("div",{className:"flex flex-wrap"},a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.httpProxyPort")),a.createElement(Ne,{className:"w-28",disabled:k,value:g.httpProxyPort,onChange:e=>y("httpProxyPort",+e),onBlur:async function(){await q({port:g.httpProxyPort}),await i()}})),a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.mixedProxyPort")),a.createElement(Ne,{className:"w-28",disabled:k,value:g.mixedProxyPort,onChange:e=>y("mixedProxyPort",+e),onBlur:async function(){await q({"mixed-port":g.mixedProxyPort}),await i()}}))),a.createElement("div",{className:"flex flex-wrap"},a.createElement("div",{className:"flex w-1/2 items-center justify-between px-8 py-3"},a.createElement("span",{className:"label font-bold"},h("labels.externalController")),a.createElement("span",{className:s({"modify-btn":!k},"external-controller"),onClick:()=>!k&&u(!1)},`${E}:${w}`)),a.createElement("div",{className:"w-1/2 px-8"}))),a.createElement(F,{className:"clash-version",style:{display:"none"}},a.createElement("span",{className:"check-icon"},a.createElement(O,{type:"check",size:20})),a.createElement("p",{className:"version-info"},h("versionString")),a.createElement("span",{className:"check-update-btn"},h("checkUpdate"))))}var Qe,Ze;function et(e){const{routes:t}=e,{translation:n}=oe(),{version:o,premium:r,update:l}=le(),{data:c}=ye(),{t:i}=n("SideBar");u("version",l);const d=t.map((({path:e,name:t,exact:n,noMobile:o})=>a.createElement("li",{className:s("item",{"no-mobile":o}),key:t},a.createElement(E,{to:e,activeClassName:"active",exact:!!n},i(t)))));return a.createElement("div",{className:"sidebar"},a.createElement("img",{src:"./assets/logo.b453e72f.png",alt:"logo",className:"sidebar-logo"}),a.createElement("ul",{className:"sidebar-menu"},d),a.createElement("div",{className:"sidebar-version"},a.createElement("span",{className:"sidebar-version-label"},"Clash",(null==c?void 0:c.isClashX)&&"X"," ",i("Version")),a.createElement("span",{className:"sidebar-version-text"},o),r&&a.createElement("span",{className:"sidebar-version-label"},"Premium")))}(Ze=Qe||(Qe={})).Domain="Domain",Ze.DomainSuffix="DomainSuffix",Ze.DomainKeyword="DomainKeyword",Ze.GeoIP="GeoIP",Ze.IPCIDR="IPCIDR",Ze.SrcIPCIDR="SrcIPCIDR",Ze.SrcPort="SrcPort",Ze.DstPort="DstPort",Ze.MATCH="MATCH",Ze.RuleSet="RuleSet";function tt(e){const{translation:t}=oe(),n=a.useMemo((()=>t("Connections").t),[t]),{className:o,style:r}=e,l=s("connections-devices",o);function c(t){var n;null==(n=e.onChange)||n.call(e,t)}return a.createElement("div",{className:l,style:r},a.createElement("div",{className:s("connections-devices-item",{selected:""===e.selected}),onClick:()=>c("")},n("filter.all")),e.devices.map((t=>a.createElement("div",{key:t.label,className:s("connections-devices-item",{selected:e.selected===t.label}),onClick:()=>c(t.label)},t.label," (",t.number,")"))))}class nt{constructor(){this.connections=new Map,this.saveDisconnection=!1}appendToSet(t){var n;const a=t.reduce(((e,t)=>e.set(t.id,t)),new Map);for(const e of this.connections.keys())if(!a.has(e))if(this.saveDisconnection){const t=this.connections.get(e);t&&(t.completed=!0,t.uploadSpeed=0,t.downloadSpeed=0)}else this.connections.delete(e);for(const s of a.keys()){if(!this.connections.has(s)){this.connections.set(s,e(e({},a.get(s)),{uploadSpeed:0,downloadSpeed:0}));continue}const t=this.connections.get(s),o=a.get(s);null==(n=this.connections)||n.set(s,e(e({},o),{uploadSpeed:o.upload-t.upload,downloadSpeed:o.download-t.download}))}}toggleSave(){var e,t;if(this.saveDisconnection){this.saveDisconnection=!1;for(const n of this.connections.keys())(null==(t=null==(e=this.connections)?void 0:e.get(n))?void 0:t.completed)&&this.connections.delete(n)}else this.saveDisconnection=!0;return this.saveDisconnection}getConnections(){return[...this.connections.values()]}}var at,st;(st=at||(at={})).Host="host",st.Network="network",st.Type="type",st.Chains="chains",st.Rule="rule",st.Speed="speed",st.Upload="upload",st.Download="download",st.SourceIP="sourceIP",st.Time="time";const ot=new Set([at.Network,at.Type,at.Rule,at.Speed,at.Upload,at.Download,at.SourceIP,at.Time]);function rt(e){const t=["B","KB","MB","GB","TB"];let n=0;for(;~~(e/1024)&&nt("Connections").t),[t]),[r,l]=M({uploadTotal:0,downloadTotal:0}),{visible:c,show:i,hide:u}=H();const{connections:d,feed:m,save:p,toggleSave:f}=function(){const e=a.useMemo((()=>new nt),[]),t=a.useRef(!0),[n,s]=a.useState([]),[o,r]=a.useState(!1);return{connections:n,feed:a.useCallback((function(n){e.appendToSet(n),t.current&&s(e.getConnections()),t.current=!t.current}),[e]),toggleSave:a.useCallback((function(){const n=e.toggleSave();r(n),n||s(e.getConnections()),t.current=!0}),[e]),save:o}}(),h=a.useMemo((()=>d.map((e=>({id:e.id,host:`${e.metadata.host||e.metadata.destinationIP}:${e.metadata.destinationPort}`,chains:e.chains.slice().reverse().join(" / "),rule:e.rule===Qe.RuleSet?`${e.rule}(${e.rulePayload})`:e.rule,time:new Date(e.start).getTime(),upload:e.upload,download:e.download,sourceIP:e.metadata.sourceIP,type:e.metadata.type,network:e.metadata.network.toUpperCase(),speed:{upload:e.uploadSpeed,download:e.downloadSpeed},completed:!!e.completed})))),[d]),g=a.useMemo((()=>{const e=w(d,"metadata.sourceIP");return Object.keys(e).map((t=>({label:t,number:e[t].length}))).sort(((e,t)=>e.label.localeCompare(t.label)))}),[d]),y=a.useRef(null),{x:v}=x(y),E=a.useMemo((()=>[{Header:o(`columns.${at.Host}`),accessor:at.Host,minWidth:260,width:260},{Header:o(`columns.${at.Network}`),accessor:at.Network,minWidth:80,width:80},{Header:o(`columns.${at.Type}`),accessor:at.Type,minWidth:120,width:120},{Header:o(`columns.${at.Chains}`),accessor:at.Chains,minWidth:200,width:200},{Header:o(`columns.${at.Rule}`),accessor:at.Rule,minWidth:140,width:140},{id:at.Speed,Header:o(`columns.${at.Speed}`),accessor:e=>[e.speed.upload,e.speed.download],sortType(e,t){const n=e.original.speed,a=t.original.speed;return n.download===a.download?n.upload-a.upload:n.download-a.download},minWidth:200,width:200,sortDescFirst:!0},{Header:o(`columns.${at.Upload}`),accessor:at.Upload,minWidth:100,width:100,sortDescFirst:!0},{Header:o(`columns.${at.Download}`),accessor:at.Download,minWidth:100,width:100,sortDescFirst:!0},{Header:o(`columns.${at.SourceIP}`),accessor:at.SourceIP,minWidth:140,width:140},{Header:o(`columns.${at.Time}`),accessor:at.Time,minWidth:120,width:120,sortType:(e,t)=>t.original.time-e.original.time}]),[o]);a.useLayoutEffect((()=>{let e=null;function t(e){for(const t of e)l({uploadTotal:t.uploadTotal,downloadTotal:t.downloadTotal}),m(t.connections)}return async function(){e=await te(),e.subscribe("data",t)}(),()=>{e&&(e.unsubscribe("data",t),e.destory())}}),[m,l]);const{getTableProps:N,getTableBodyProps:C,headerGroups:k,rows:P,prepareRow:S,setFilter:T}=b.useTable({columns:E,data:h,autoResetSortBy:!1,autoResetFilters:!1,initialState:{sortBy:[{id:at.Time,desc:!1}]}},b.useResizeColumns,b.useBlockLayout,b.useFilters,b.useSortBy),L=a.useMemo((()=>k[0]),[k]),$=a.useCallback((function(e){switch(e.column.id){case at.Speed:return function(e,t){switch(!0){case 0===e&&0===t:return"-";case 0!==e&&0!==t:return`↑ ${rt(e)}/s ↓ ${rt(t)}/s`;case 0!==e:return`↑ ${rt(e)}/s`;default:return`↓ ${rt(t)}/s`}}(e.value[0],e.value[1]);case at.Upload:case at.Download:return rt(e.value);case at.Time:return Me(new Date(e.value),n);default:return e.value}}),[n]),[R,D]=a.useState("");return a.createElement("div",{className:"page"},a.createElement(U,{title:o("title")},a.createElement("span",{className:"connections-filter total"},`(${o("total.text")}: ${o("total.upload")} ${rt(r.uploadTotal)} ${o("total.download")} ${rt(r.downloadTotal)})`),a.createElement(Te,{className:"connections-filter",checked:p,onChange:f},o("keepClosed")),a.createElement(O,{className:"connections-filter dangerous",onClick:i,type:"close-all",size:20})),g.length>1&&a.createElement(tt,{devices:g,selected:R,onChange:function(e){D(e),null==T||T(at.SourceIP,e)}}),a.createElement(F,{className:"connections-card"},a.createElement("div",e(e({},N()),{className:"connections",ref:y}),a.createElement("div",e(e({},L.getHeaderGroupProps()),{className:"connections-header"}),L.headers.map(((t,n)=>{const o=t,r=o.id;return a.createElement("div",e(e({},o.getHeaderProps()),{className:s("connections-th",{resizing:o.isResizing,fixed:v>0&&o.id===at.Host}),key:r}),a.createElement("div",e({},o.getSortByToggleProps()),t.render("Header"),o.isSorted?o.isSortedDesc?" ↓":" ↑":null),n!==L.headers.length-1&&a.createElement("div",e(e({},o.getResizerProps()),{className:"connections-resizer"})))}))),a.createElement("div",e(e({},C()),{className:"connections-body"}),P.map((t=>(S(t),a.createElement("div",e(e({},t.getRowProps()),{className:"connections-item",key:t.original.id}),t.cells.map((n=>{const o=s("connections-block",{center:ot.has(n.column.id),completed:t.original.completed},{fixed:v>0&&n.column.id===at.Host});return a.createElement("div",e(e({},n.getCellProps()),{className:o,key:n.column.id}),$(n))}))))))))),a.createElement(Ce,{title:o("closeAll.title"),show:c,onClose:u,onOk:function(){(async function(){return(await Y()).delete("connections")})().finally((()=>u()))}},o("closeAll.content")))}function ct(){const{translation:e}=oe(),{t:t}=e("Settings"),{data:n,update:s,fetch:o}=Ee(),{identity:r,set:l}=ae(),[c,i]=M({hostname:"",port:"",secret:""});return a.useEffect((()=>{o()}),[o]),a.useEffect((()=>{i({hostname:n.hostname,port:n.port,secret:n.secret})}),[n,i]),a.createElement(Ce,{show:!r,title:t("externalControllerSetting.title"),bodyClassName:"external-controller",onClose:()=>l(!0),onOk:function(){const{hostname:e,port:t,secret:n}=c;s({hostname:e,port:t,secret:n})}},a.createElement(Pe,{type:"info",inside:!0},a.createElement("p",null,t("externalControllerSetting.note"))),a.createElement("div",{className:"flex items-center"},a.createElement("span",{className:"title w-14"},t("externalControllerSetting.host")),a.createElement(Ne,{className:"form flex-1",align:"left",inside:!0,value:c.hostname,onChange:e=>i("hostname",e)})),a.createElement("div",{className:"flex items-center"},a.createElement("div",{className:"title w-14"},t("externalControllerSetting.port")),a.createElement(Ne,{className:"form flex-1",align:"left",inside:!0,value:c.port,onChange:e=>i("port",e)})),a.createElement("div",{className:"flex items-center"},a.createElement("div",{className:"title w-14"},t("externalControllerSetting.secret")),a.createElement(Ne,{className:"form flex-1",align:"left",inside:!0,value:c.secret,onChange:e=>i("secret",e)})))}function it(){a.useEffect((()=>{ee()}),[]);const e=[{path:"/proxies",name:"Proxies",component:Ge},{path:"/logs",name:"Logs",component:Ve},{path:"/rules",name:"Rules",component:Ye,noMobile:!0},{path:"/connections",name:"Connections",component:lt,noMobile:!0},{path:"/settings",name:"Settings",component:qe}];return a.createElement("div",{className:s("app",{"not-clashx":!S()})},a.createElement(et,{routes:e}),a.createElement("div",{className:"page-container"},a.createElement(N,{exact:!0,path:"/",component:()=>a.createElement(C,{to:"/proxies"})}),e.map((e=>a.createElement(N,{exact:!1,path:e.path,key:e.path,component:e.component})))),a.createElement(ct,null))}var ut;function dt(){const e=document.getElementById("root"),t=a.createElement(k,null,a.createElement(P,null,a.createElement(it,null)));m.render(t,e)}S()?(ut=()=>dt(),T?ut():T=new L(ut)):dt(); diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.0e294c2a.css b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.0e294c2a.css deleted file mode 100644 index d52f671858..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/index.0e294c2a.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.header{margin:10px 0;width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;user-select:none}.header>h1{flex-shrink:0;font-size:24px;color:#2c8af8;font-weight:500;text-shadow:0 2px 6px rgba(44,138,248,.4);line-height:32px}.operations{display:flex;flex:1;align-items:center;justify-content:flex-end}@media (max-width:768px){.header>h1{font-size:20px}}.switch{display:inline-block;width:32px;height:16px;border-radius:8px;background-color:#d8dee2;transition:background-color .3s ease;position:relative;cursor:pointer}.switch.checked{background-color:#57befc}.switch.checked::after{transform:translateX(16px)}.switch.disabled{cursor:not-allowed;background-color:#b7c5d6}.switch.disabled::after{background-color:#e4eaef;box-shadow:0 0 8px rgba(144,147,153,.5)}.switch.checked.disabled{background-color:#e4eaef}.switch::after{content:"";position:absolute;top:-1px;height:18px;width:18px;border-radius:9px;background-color:#fff;box-shadow:0 0 8px rgba(44,138,248,.4);transition:transform .3s ease;transform:translateX(-2px)}.switch-icon{position:absolute;transform:translateX(-1px) scale(.4);color:#fff;line-height:16px}.card{padding:15px;box-shadow:2px 5px 20px -3px rgba(44,138,248,.18);background-color:#fff;border-radius:4px}.button-select{display:flex;flex-direction:row}.button-select .button-select-options{height:30px;padding:0 15px;color:#54759a;font-size:12px;line-height:30px;background:#fff;border:1px solid #e4eaef;border-right:none;transition:all .3s ease;cursor:pointer;outline:0;display:block}.button-select .button-select-options:first-child{border-radius:3px 0 0 3px}.button-select .button-select-options:last-child{border-radius:0 3px 3px 0;border-right:1px solid #e4eaef}.button-select .button-select-options.actived{background:#57befc;color:#fff;border-color:#57befc;box-shadow:0 2px 5px rgba(87,190,252,.5)}.button-select .button-select-options.actived:active{box-shadow:none}.tags-container{display:flex;align-items:flex-start;overflow-y:hidden}.tags{display:flex;flex:1;align-items:center;list-style:none;flex-wrap:wrap;box-sizing:content-box}.tags li{position:relative;display:flex;align-items:center;justify-content:center;border:1px solid #2c8af8;color:#54759a;height:22px;border-radius:11px;padding:0 6px;margin:3px 4px;font-size:10px;cursor:default}.tags li.can-click{cursor:pointer}.tags li.error{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.tags li.tags-selected.error{background:linear-gradient(135deg,#2c8af8,#f56c6c);border:none;height:24px;padding:0 7px}.tags .tags-selected{background-color:#2c8af8;color:#fff}.tags-expand{height:30px;line-height:30px;padding:0 20px;user-select:none;cursor:pointer}.input{display:inline-block;height:30px;width:100%;padding:0 10px;font-size:14px;color:#54759a;border-radius:3px;border:1px solid #e4eaef;transition:all .3s;transition-property:border-color,color,box-shadow}.input:focus{outline:0;border-color:#57befc;color:#2c8af8;box-shadow:0 2px 5px rgba(87,190,252,.5)}.input-align-left{text-align:left}.input-align-center{text-align:center}.input-align-right{text-align:right}.input-inside:focus{box-shadow:none}.select{cursor:pointer;font-size:14px;line-height:30px;color:#54759a;display:flex;overflow:hidden}.select>i{margin-left:5px;color:#54759a}.select-list{position:absolute;max-width:170px;border-radius:4px;overflow:hidden;box-shadow:0 2px 5px rgba(183,197,214,.5);opacity:.8;pointer-events:none;transform:scaleY(0);transform-origin:top;transition:all .2s linear}.select-list .list{max-height:300px;overflow:auto;background:#fff;padding:5px 0;transform:scaleY(2);transform-origin:top;transition:all .2s linear}.select-list .list>.option{color:#54759a;padding:10px 15px;font-size:14px;list-style:none;cursor:pointer}.select-list .list>.option:hover{background:rgba(228,234,239,.5)}.select-list .list>.selected{background:rgba(228,234,239,.5)}.select-list-show{opacity:1;pointer-events:visible;transform:scaleY(1)}.select-list-show .list{transform:scaleY(1)}.modal-mask{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.15);opacity:0;pointer-events:none;transition:all .5s ease;display:flex;justify-content:center;align-items:center;z-index:9999}.modal-mask .modal{margin-top:-50px;padding:20px 30px;background:#fff;box-shadow:0 2px 16px rgba(84,117,154,.2);border-radius:4px;display:flex;flex-direction:column;transform:scale(0);transition:all .3s cubic-bezier(.32,.26,.71,1.29)}.modal-mask .modal .modal-title{margin:5px 0;width:100%;display:flex;align-items:center;justify-content:space-between;font-weight:700;font-size:18px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.modal-mask .modal .modal-body{margin:10px 0;font-size:14px;color:#54759a}.modal-mask .modal .footer{width:100%;margin:5px 0;display:flex;align-items:center;justify-content:flex-end}.modal-mask .modal .footer .button{margin-left:10px}.modal-mask .modal-small{width:400px}.modal-mask .modal-big{width:600px}.modal-show{opacity:1;pointer-events:visible}.modal-show .modal{transform:scale(1)}@media (max-width:768px){.modal-mask .modal{margin-top:0;padding:18px 20px}.modal-mask .modal-small{width:280px}.modal-mask .modal-big{width:480px}}.alert{padding:15px;background:#fff;border-radius:4px;box-shadow:0 2px 8px rgba(44,138,248,.3);font-size:13px;line-height:1.6;text-align:justify;display:flex}.alert .alert-icon{margin-right:10px;width:20px;height:20px;border-radius:50%;flex-shrink:0;display:flex;justify-content:center;align-items:center;background:#fff}.alert .alert-icon>i{transform:scale(.5);font-weight:700}.alert .alert-message{width:100%;color:#fff}.alert-box-success{background:linear-gradient(135deg,#5dae34,#67c23a);box-shadow:0 2px 8px rgba(93,174,52,.3)}.alert-box-success .alert-icon>i{color:#67c23a}.alert-box-info{background:linear-gradient(135deg,#3eb4fc,#57befc);box-shadow:0 2px 8px rgba(62,180,252,.3)}.alert-box-info .alert-icon>i{color:#57befc}.alert-box-warning{background:linear-gradient(135deg,#e39725,#e6a23c);box-shadow:0 2px 8px rgba(227,151,37,.3)}.alert-box-warning .alert-icon>i{color:#e6a23c}.alert-box-error{background:linear-gradient(135deg,#f35454,#f56c6c);box-shadow:0 2px 8px rgba(243,84,84,.3)}.alert-box-error .alert-icon>i{color:#f56c6c}.alert-note-success{background:rgba(103,194,58,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #67c23a;box-shadow:0 2px 8px rgba(93,174,52,.3)}.alert-note-success .alert-icon{background:#67c23a}.alert-note-success .alert-icon>i{color:#fff}.alert-note-success .alert-message{color:#3d7323}.alert-note-info{background:rgba(87,190,252,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #57befc;box-shadow:0 2px 8px rgba(62,180,252,.3)}.alert-note-info .alert-icon{background:#57befc}.alert-note-info .alert-icon>i{color:#fff}.alert-note-info .alert-message{color:#0493e9}.alert-note-warning{background:rgba(230,162,60,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #e6a23c;box-shadow:0 2px 8px rgba(227,151,37,.3)}.alert-note-warning .alert-icon{background:#e6a23c}.alert-note-warning .alert-icon>i{color:#fff}.alert-note-warning .alert-message{color:#a76d15}.alert-note-error{background:rgba(245,108,108,.05);border-radius:1px 4px 4px 1px;border-left:2px solid #f56c6c;box-shadow:0 2px 8px rgba(243,84,84,.3)}.alert-note-error .alert-icon{background:#f56c6c}.alert-note-error .alert-icon>i{color:#fff}.alert-note-error .alert-message{color:#eb1010}.button{outline:0;padding:0 15px;height:32px;line-height:32px;border-radius:16px;font-size:14px;cursor:pointer;transition:all 150ms ease}.button-primary{color:#fff;border:none;background:linear-gradient(135deg,#57befc,#2c8af8);box-shadow:0 2px 8px rgba(44,138,248,.5)}.button-primary:hover{border:none}.button-primary:active{box-shadow:0 0 2px rgba(44,138,248,.5)}.button-normal{color:#909399;background:#fff;border:1px solid rgba(0,0,0,.1)}.button-normal:hover{border-color:#b7c5d6;color:#54759a}.button-normal:active{background:#fafafa;color:#54759a}.button-danger{color:#fff;border:none;background:linear-gradient(135deg,#f56c6c,#f23c3c);box-shadow:0 2px 8px rgba(242,60,60,.5)}.button-danger:hover{border:none}.button-danger:active{box-shadow:0 0 2px rgba(242,60,60,.5)}.button-success{color:#fff;border:none;background:linear-gradient(135deg,#67c23a,#5dae34);box-shadow:0 2px 8px rgba(93,174,52,.5)}.button-success:hover{border:none}.button-success:active{box-shadow:0 0 2px rgba(93,174,52,.5)}.button-warning{color:#fff;border:none;background:linear-gradient(135deg,#e6a23c,#e39725);box-shadow:0 2px 8px rgba(227,151,37,.5)}.button-warning:hover{border:none}.button-warning:active{box-shadow:0 0 2px rgba(227,151,37,.5)}.message{position:fixed;top:20px;right:20px;border-radius:4px;opacity:0;background:#fff;display:flex;box-shadow:0 0 20px rgba(44,138,248,.2);transition:all .2s ease;transform:translateX(100%)}.message .message-icon{width:36px;flex:1;border-radius:4px 0 0 4px;display:flex;justify-content:center;align-items:center}.message .message-icon>i{color:#fff}.message .message-content{padding:10px 15px;font-size:13px;color:#54759a}.message-info .message-icon{background:linear-gradient(135deg,#57befc,#2c8af8)}.message-success .message-icon{background:linear-gradient(135deg,#67c23a,#5dae34)}.message-warning .message-icon{background:linear-gradient(135deg,#e6a23c,#e39725)}.message-error .message-icon{background:linear-gradient(135deg,#f56c6c,#f23c3c)}.message-show{opacity:1;transition:all .2s ease;transform:translateX(0)}.checkbox{display:flex;position:relative;padding-left:26px;cursor:pointer;line-height:18px}.checkbox::before{content:"";display:inline-block;position:absolute;left:0;top:50%;width:18px;height:18px;border-radius:3px;transition:background-color .3s ease;transform:translateY(-9px);background-color:#fff;border:1px solid #e4eaef}.checkbox.checked::before{background-color:#57befc}.checkbox-icon{position:absolute;left:0;top:50%;line-height:18px;transform:translateY(-9px) scale(.6);text-shadow:none;font-weight:700}.checkbox-icon.checkbox-icon{color:#fff}.tag{display:flex;align-items:center;justify-content:center;height:24px;font-size:12px;padding:0 12px;text-align:center;background-color:#fff;border:2px solid #2c8af8;color:#2c8af8;border-radius:12px}.spinner{position:relative;width:80px;height:80px;border-radius:100%;animation:spinner 5s infinite linear}.spinner-circle{position:absolute;width:100%;height:100%;transform-origin:48% 48%}.spinner-inner{width:100%;height:100%;border-radius:100%;border:5px solid rgba(44,138,248,.7);border-right:none;border-top:none;background-clip:padding-box;box-shadow:inset 0 0 10px rgba(44,138,248,.15)}.spinner-circle:nth-of-type(0){transform:rotate(0)}.spinner-circle:nth-of-type(0) .spinner-inner{animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(1){transform:rotate(70deg)}.spinner-circle:nth-of-type(1) .spinner-inner{animation:spinner 2s infinite linear}.spinner-circle:nth-of-type(2){transform:rotate(140deg)}.spinner-circle:nth-of-type(2) .spinner-inner{animation:spinner 2s infinite linear}@keyframes spinner{from{transform:rotate(0)}to{transform:rotate(360deg)}}.loading{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0;bottom:0;right:0;background-color:rgba(255,255,255,.9);box-shadow:inset 0 0 80px rgba(0,0,0,.1);z-index:1000}.proxy-item{position:relative;width:100%;height:110px;padding:10px;border-radius:4px;background:#fff;user-select:none;cursor:default;box-shadow:2px 5px 20px -3px rgba(44,138,248,.2);transition:all .3s ease}.proxy-item .proxy-type{padding:2px 5px;font-size:10px;color:#fff;border-radius:2px}.proxy-item .proxy-name{display:-webkit-box;margin-top:10px;color:#54759a;font-size:10px;overflow:hidden;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.proxy-item .proxy-delay{position:absolute;left:10px;bottom:13px;font-size:10px;color:rgba(84,117,154,.8)}.proxy-item .proxy-editor{position:absolute;right:10px;bottom:10px;cursor:pointer;color:rgba(84,117,154,.8);opacity:0;pointer-events:none;transition:all .3s ease}.proxy-item:hover{box-shadow:0 14px 20px -4px rgba(84,117,154,.4)}.proxy-item:hover .proxy-editor{opacity:1;pointer-events:visible}.proxy-error{opacity:.5}.proxy-error .proxy-type{background-color:#909399}@media (max-width:768px){.proxy-item{height:70px}.proxy-item .proxy-delay{left:unset;bottom:unset;top:0;right:20px;height:70px;line-height:70px}}.proxy-group{display:flex;align-items:flex-start;font-size:14px;color:#546b87}.proxy-group-part{display:flex;align-items:center;height:60px}.proxy-group-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 20px;width:120px;height:18px}.proxies-group-card{padding:0}.proxies-group-item{border-bottom:1px solid #d8dee2}.proxies-group-item:last-child{border-bottom:none}.proxy-group-tags-container{padding:15px 0}.proxy-group-tags{flex:1;margin-left:30px}@media (max-width:768px){.proxy-group{flex-direction:column}.proxy-group-name{width:140px}.proxy-group-part{width:100%;height:42px;margin-top:6px;justify-content:space-between}.proxy-group-type{margin-right:20px}.proxy-group-tags-container{padding:5px 0 10px}.proxy-group-tags{margin-left:20px}}.proxy-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.proxy-provider-header{display:flex;align-items:center;justify-content:space-between}.proxy-provider-header-part{display:flex;align-items:center}.proxy-provider-name{margin-right:24px}.proxy-provider-proxies{list-style:none}.proxy-provider-item{box-shadow:0 0 24px 0 rgba(44,138,248,.2)}.proxy-provider-item:hover{box-shadow:0 0 24px 0 rgba(84,117,154,.4)}.proxy-provider-update{line-height:14px;font-size:14px}.proxy-provider-icon{margin-left:20px;cursor:pointer}.proxy-provider-icon.healthcheck{color:#f56c6c}@media (max-width:768px){.proxy-provider-header{flex-direction:column;align-items:flex-start}.proxy-provider-header-part{margin:6px 0}}.proxies-list{--item-width:calc(100% / (var(--columns) + 1));--gap:calc(var(--item-width) / var(--columns));display:flex;margin-right:calc(-1 * var(--gap));margin-top:20px;flex-wrap:wrap;align-content:flex-start;list-style:none}.proxies-list>li{display:inline-block;width:var(--item-width);margin-right:var(--gap);flex-shrink:0;margin-bottom:10px}.proxies-group-list{list-style:none}.proxies-group-card{margin:20px 0}.proxies-container .proxies-action-icon{margin-left:10px}.proxies-speed-test{line-height:32px;margin:0 2px 0 6px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4);cursor:pointer}.proxies-providers-item{margin:20px 0}.proxies-providers-list{list-style:none}@media (min-width:2001px){.proxies-list{--columns:12}}@media (max-width:2000px){.proxies-list{--columns:10}}@media (max-width:1600px){.proxies-list{--columns:8}}@media (max-width:1340px){.proxies-list{--columns:7}}@media (max-width:960px){.proxies-list{--columns:6}}@media (max-width:860px){.proxies-list{--columns:5}}@media (max-width:768px){.proxies-group-card{margin:12px 0}.proxies-list{margin-right:0;padding-bottom:20px;flex-wrap:unset;flex-direction:column}.proxies-list>li{width:100%;margin-right:0;margin-bottom:10px}}@media (max-width:760px){.proxies-list{--columns:3}}.logs-card{display:flex;flex-direction:column;flex:1;margin-top:10px}.logs-panel{display:flex;flex-direction:column;flex-grow:1;flex-basis:0;list-style:none;padding:10px;border-radius:2px;background-color:#f3f6f9;font-size:12px;color:#73808f;overflow-y:auto;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace}.logs-panel li{line-height:20px;display:inline-block}.logs-panel-time{margin-right:10px;color:#adb7c3}.rule-provider{position:relative;display:flex;flex-direction:column;font-size:16px;padding:20px;color:#546b87}.rule-provider-header{display:flex;align-items:center;justify-content:space-between}.rule-provider-header-part{display:flex;align-items:center}.rule-provider-name{width:120px;margin-right:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rule-provider-behavior{width:80px;margin:0 20px 0 12px;background-color:#2c8af8;color:#fff}.rule-provider-spinner{transform:scale(.4)}.rule-provider-proxies{list-style:none}.rule-provider-item{box-shadow:0 0 24px 0 rgba(44,138,248,.2)}.rule-provider-item:hover{box-shadow:0 0 24px 0 rgba(84,117,154,.4)}.rule-provider-update{line-height:14px;font-size:14px}.rule-provider-icon{display:block;margin-left:20px;cursor:pointer}.rule-provider-icon.rule-provider-loading::before{color:#909399;cursor:not-allowed;animation:spinner 2s infinite linear}@media (max-width:768px){.rule-provider-header{flex-direction:column;align-items:flex-start}.rule-provider-header-part{margin:6px 0}}.rules-card{display:flex;flex-direction:column;flex:1;min-height:700px;margin-top:10px;padding:0}.rules-card:focus{outline:0}.rules-card .rules{flex:1 0 auto}.rule-item{line-height:30px;padding:5px 0;height:50px;overflow:hidden;list-style:none;user-select:none;border-bottom:1px solid rgba(228,234,239,.5)}.rule-item .rule-item-row{padding:5px 0}.rule-item .drag-handler{cursor:row-resize;margin:0 10px;display:flex;justify-content:center}.rule-item .drag-handler>i{font-weight:700;color:#b7c5d6}.rule-item .rule-type{font-size:14px;color:#54759a}.rule-item .rule-type>i{margin-left:5px;color:#54759a}.rule-item .payload{font-size:14px;color:#54759a;cursor:pointer}.rule-item .rule-proxy{font-size:14px;color:#54759a}.rule-item .delete-btn{opacity:0;transition:all .3s ease}.rule-item .delete-btn span{font-size:14px;color:#f56c6c;cursor:pointer}.rule-item:last-child{border-bottom:none}.rule-item:hover .delete-btn{opacity:1}.rule-proxy-option{display:flex;align-items:center;overflow:hidden}.rule-proxy-option .label{margin-right:5px;height:20px;line-height:20px;padding:0 8px;font-size:10px;border-radius:10px;color:#fff;background:#b7c5d6}.rule-proxy-option .value{line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-card{margin-top:10px;padding:.75rem 0}.settings-card .label{font-size:14px;color:#54759a}.settings-card .external-controller{font-size:14px;color:#54759a;display:flex;justify-content:flex-end;font-weight:400;line-height:17px}.settings-card .external-controller.modify-btn{color:#2c8af8;cursor:pointer}.clash-version{position:relative;margin-top:10px;padding:20px 45px;display:flex}.clash-version .check-icon{width:24px;height:24px;border-radius:50%;background:linear-gradient(135deg,#57befc,#2c8af8);display:flex;justify-content:center;align-items:center}.clash-version .check-icon>i{transform:scale(.5);color:#fff;font-weight:700}.clash-version .version-info{margin-left:10px;font-size:14px;line-height:24px;color:#54759a}.clash-version .check-update-btn{position:absolute;right:45px;font-size:14px;line-height:24px;color:#b7c5d6;cursor:pointer;transition:all 150ms ease}.clash-version .check-update-btn:hover{color:#54759a}@media (max-width:768px){.settings-card .flex .flex.w-1\/2{width:100%}}.sidebar{position:fixed;top:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:160px;user-select:none}.sidebar-logo{margin-top:50px;width:60px;height:60px}.sidebar-menu{display:flex;flex-direction:column;flex:1;margin-top:12px}.sidebar-menu .item{display:block;margin-top:18px}.sidebar-menu .item>a{display:block;width:120px;height:36px;line-height:36px;font-size:14px;border-radius:18px;text-align:center}.sidebar-menu .item a:active,.sidebar-menu .item a:visited,.sidebar-menu .item>a{color:#909399;text-decoration:none}.sidebar-menu .item>a.active{background:linear-gradient(135deg,#57befc,#2c8af8);color:#fff;box-shadow:0 2px 8px rgba(44,138,248,.5)}.sidebar-version{display:flex;flex-direction:column;align-items:center;padding-bottom:20px}.sidebar-version-label{font-size:14px;color:#2c8af8;text-shadow:0 2px 6px rgba(44,138,248,.4)}.sidebar-version-text{text-align:center;font-size:14px;margin:8px 0;padding:0 10px;color:#54759a}@media (max-width:768px){.sidebar{width:100%;height:60px;flex-direction:row;background:#f4f5f6;z-index:10}.sidebar-logo{margin:0 15px;width:36px;height:36px}.sidebar-menu{flex:1;flex-direction:row;justify-content:center;margin-top:0;overflow-x:scroll;padding:10px}.sidebar-menu::-webkit-scrollbar{display:none}.sidebar-menu .item{margin:0 3px}.sidebar-menu .item>a{width:80px;height:32px;line-height:32px}.sidebar-menu .item.no-mobile{display:none}.sidebar-version{display:none}}.connections-devices{display:flex;padding:8px 2px}.connections-devices-item{padding:4px 0;margin-right:20px;font-size:14px;color:#909399;border-radius:3px;cursor:pointer;transition:color .3s ease}.connections-devices-item.selected{color:#2c8af8}.connections-card{display:flex;flex-direction:column;flex:1;margin-top:10px;padding:0;overflow:hidden}.connections-card .connections{display:flex;flex-direction:column;width:100%;flex-grow:1;flex-basis:0;overflow:auto}.connections-card .connections-body{flex:1 0 auto}.connections-card .connections-th{position:relative;text-align:center;color:#909399;background:#f3f6f9;height:30px;line-height:30px;font-weight:500;font-size:14px;cursor:pointer;user-select:none}.connections-card .connections-th.resizing .connections-resizer{opacity:1}.connections-card .connections-th.fixed{position:sticky!important;left:0;z-index:99;box-shadow:inset -9px 0 8px -14px #000}.connections-card .connections-resizer{position:absolute;opacity:0;right:-10px;top:8px;bottom:8px;width:20px;transition:opacity .3s ease;z-index:10;font-size:14px;font-weight:300;touch-action:none}.connections-card .connections-resizer::before{content:"";display:block;position:absolute;left:10px;transform:translateX(-2px);width:2px;height:100%;background-color:rgba(144,147,153,.6)}.connections-card .connections-header{position:sticky;top:0;z-index:9999;white-space:nowrap}.connections-card .connections-header:hover .connections-resizer{opacity:1}.connections-card .connetions-item{height:36px}.connections-card .connections-block{display:flex;align-items:center;font-size:14px;line-height:36px;padding:0 10px;color:#54759a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.connections-card .connections-block.center{text-align:center}.connections-card .connections-block.completed{background-color:#e9eef4;color:rgba(84,117,154,.5)}.connections-card .connections-block.fixed{position:sticky;left:0;z-index:999;background-color:#fff;box-shadow:inset -9px 0 8px -14px #000}.connections-filter{color:#2c8af8;font-size:14px;line-height:20px;margin-left:15px;text-shadow:0 0 6px rgba(44,138,248,.4);cursor:pointer}.connections-filter.dangerous{color:#f56c6c;text-shadow:0 0 6px rgba(87,190,252,.2)}.connections-filter.total{flex:1;cursor:unset}.external-controller .alert{margin:10px 0}.external-controller .form,.external-controller .title{margin:15px 0}.external-controller .title{margin-top:15px;font-size:14px;font-weight:700}@media (max-width:768px){.external-controller .title{margin:5px 0}.external-controller .form{margin:5px 0}.external-controller .alert{display:none}}*,::after,::before{margin:0;padding:0;box-sizing:inherit}body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"}body ::-webkit-scrollbar{z-index:11;background:0 0}body ::-webkit-scrollbar-thumb{border-radius:5px;background:#2c8af8}body ::-webkit-scrollbar:vertical{width:6px}body ::-webkit-scrollbar:horizontal{height:6px}html{box-sizing:border-box;background:rgba(255,255,255,.8);overflow:hidden}input{-webkit-appearance:none}.container{margin:20px 0}.app{min-height:100vh;padding-left:150px}.app.not-clashx{background:#f4f5f6}.page-container{width:100%;height:100vh;padding-left:10px;overflow-y:scroll}.page{padding:20px 35px 30px 20px;width:100%;min-height:100vh;margin:0 auto;display:flex;flex-direction:column}@media (max-width:768px){.app{padding-left:0;padding-top:60px}.page-container{width:100%;padding:0 10px;height:calc(100vh - 60px);-webkit-overflow-scrolling:touch}.page-container::-webkit-scrollbar{display:none}.page{padding:0 0 20px;height:100%}}@font-face{font-family:clash-iconfont;src:url(//at.alicdn.com/t/font_841708_ok9czskbhel.ttf?t=1576162884356) format("truetype")}.clash-iconfont{font-family:clash-iconfont!important;font-size:14px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c8af8}.icon-update::before{content:""}.icon-healthcheck::before{content:""}.icon-speed::before{content:""}.icon-close::before{content:""}.icon-drag::before{content:""}.icon-down-arrow-o::before{content:""}.icon-check::before{content:""}.icon-plus::before{content:""}.icon-triangle-up::before{content:""}.icon-triangle-down::before{content:""}.icon-up-arrow-o::before{content:""}.icon-info::before{content:""}.icon-info-o::before{content:""}.icon-setting::before{content:""}.icon-show::before{content:""}.icon-hide::before{content:""}.icon-sort::before{content:""}.icon-sort-descending::before{content:""}.icon-sort-ascending::before{content:""}.icon-close-all::before{content:""}*,::after,::before{-webkit-box-sizing:border-box;box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}*{--tw-ring-inset:var(--tw-empty, );/*!*//*!*/--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59, 130, 246, 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000}:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}::moz-focus-inner{border-style:none;padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}body{margin:0;font-family:inherit;line-height:inherit}button,input{font-family:inherit;font-size:100%;line-height:1.15;margin:0;padding:0;line-height:inherit;color:inherit}button{text-transform:none;background-color:transparent;background-image:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}[role=button],button{cursor:pointer}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.5}h1{font-size:inherit;font-weight:inherit}img{border-style:solid;display:block;vertical-align:middle;max-width:100%;height:auto}input::placeholder{opacity:1;color:#9ca3af}input::webkit-input-placeholder{opacity:1;color:#9ca3af}input::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder{opacity:1;color:#9ca3af}input::-ms-input-placeholder{opacity:1;color:#9ca3af}h1,p{margin:0}ul{list-style:none;margin:0;padding:0}.flex{display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;-webkit-flex:1 1 0%;flex:1 1 0%}.flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.font-bold{font-weight:700}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-8{padding-left:2rem;padding-right:2rem}.text-center{text-align:center}.w-14{width:3.5rem}.w-40{width:10rem}.w-1\/2{width:50%}.w-28{width:7rem}.visible{visibility:visible}.items-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png deleted file mode 100644 index 439a7a3b53..0000000000 Binary files a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/logo.b453e72f.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.b176d855.js b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.b176d855.js deleted file mode 100644 index 9a5cf886c7..0000000000 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/dashboard/assets/vendor.b176d855.js +++ /dev/null @@ -1,32 +0,0 @@ -var e=Object.prototype.hasOwnProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.propertyIsEnumerable,r=Object.assign;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function o(e){var t={exports:{}};return e(t,t.exports),t.exports -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/}var a=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;function l(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var s=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,r,o=l(e),s=1;s=b},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(!(void 0!==o&&0R(i,n))void 0!==l&&0>R(l,i)?(e[r]=l,e[u]=n,r=u):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==l&&0>R(l,n)))break e;e[r]=l,e[u]=n,r=u}}}return t}return null}function R(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var x=[],C=[],T=1,P=null,O=3,A=!1,M=!1,N=!1;function L(e){for(var t=E(C);null!==t;){if(null===t.callback)k(C);else{if(!(t.startTime<=e))break;k(C),t.sortIndex=t.expirationTime,_(x,t)}t=E(C)}}function I(e){if(N=!1,L(e),!M)if(null!==E(x))M=!0,n(z);else{var t=E(C);null!==t&&r(I,t.startTime-e)}}function z(e,n){M=!1,N&&(N=!1,o()),A=!0;var a=O;try{for(L(n),P=E(x);null!==P&&(!(P.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=P.callback;if("function"==typeof i){P.callback=null,O=P.priorityLevel;var u=i(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof u?P.callback=u:P===E(x)&&k(x),L(n)}else k(x);P=E(x)}if(null!==P)var l=!0;else{var s=E(C);null!==s&&r(I,s.startTime-n),l=!1}return l}finally{P=null,O=a,A=!1}}var D=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){M||A||(M=!0,n(z))},t.unstable_getCurrentPriorityLevel=function(){return O},t.unstable_getFirstCallbackNode=function(){return E(x)},t.unstable_next=function(e){switch(O){case 1:case 2:case 3:var t=3;break;default:t=O}var n=O;O=t;try{return e()}finally{O=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=D,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=O;O=e;try{return t()}finally{O=n}},t.unstable_scheduleCallback=function(e,a,i){var u=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0u?(e.sortIndex=i,_(C,e),null===E(x)&&e===E(C)&&(N?o():N=!0,r(I,i-u))):(e.sortIndex=l,_(x,e),M||A||(M=!0,n(z))),e},t.unstable_wrapCallback=function(e){var t=O;return function(){var n=O;O=t;try{return e.apply(this,arguments)}finally{O=n}}}})),p=o((function(e){e.exports=d})); -/** @license React v17.0.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v17.0.1 - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -function h(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n
diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/cell_valueheader.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/cell_valueheader.htm deleted file mode 100644 index a1fea40f60..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/cell_valueheader.htm +++ /dev/null @@ -1,2 +0,0 @@ - -
" data-index="<%=self.index%>" class="incon<%=subcount%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm deleted file mode 100644 index af7630dd73..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/licence.htm +++ /dev/null @@ -1,22 +0,0 @@ -<%+header%> - - -
-
-
-
-

GeoLite2

-

This product includes GeoLite2 data created by MaxMind, - available from - https://www.maxmind.com.

- -

Flag-icon-css

-

A collection of all country flags in SVG — plus the CSS for - easier integration https://flagicons.lipis.dev

- -
-
-
- -
-<%+footer%> diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm deleted file mode 100644 index 7487bee563..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/refresh.htm +++ /dev/null @@ -1,35 +0,0 @@ -<%+cbi/valueheader%> - - - - -<%=self.value%> - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm deleted file mode 100644 index d8db64c56e..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/ssrurl.htm +++ /dev/null @@ -1,310 +0,0 @@ -<%+cbi/valueheader%> - - - - - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm deleted file mode 100644 index 60a833393a..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_bottom.htm +++ /dev/null @@ -1,71 +0,0 @@ -
-
-
-
- 获取中... -
-
-
- - - - -
-
-
-
-
- - - diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm deleted file mode 100644 index 2c6d060573..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/status_top.htm +++ /dev/null @@ -1,93 +0,0 @@ -<% math.randomseed(os.time()) %> - - - -
-
-
-
-

<%:Client%>
<%:Not Running%>

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

<%:Game Mode%>
<%:Not Running%>

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

PDNSD
<%:Not Running%>

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

SOCKS5
<%:Not Running%>

-
-
-
- -
-
-
-
-
- - diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm deleted file mode 100644 index 289cb6b9bf..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/tblsection.htm +++ /dev/null @@ -1,294 +0,0 @@ - - - - -
-
- 总计 - <%- print(self.des)-%>个节点 - -
-
- -
- <%- local count=0 -%> - -
- - <%- local isempty=true for i, k in ipairs(self.serverTable) do section=k isempty=false local - fc=(section.name==self.current) and "fast" or "" local flag_icon=(section.flag ~=nil) - and "flag-icon-" .. section.flag or "flag-icon-un" local switch_enable=(section.switch_enable=="1" ) - and "" or "hidden" scope={ valueheader="cbi/cell_valueheader" , valuefooter="cbi/cell_valuefooter" } - -%> - -
-
-
-
- -
- <%=section.type%> -
-
-
- <%=section.alias%> -
- <%- if self.extedit or self.addremove then -%> - - <%- end -%> -
-
- <%- end -%> - - <%- if isempty then -%> -
-

- <%:This section contains no values yet%> -
-
- <%- end -%> -
- - <% if self.error then %> -
-
    - <% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%> -
  • - <%=pcdata(e):gsub("\n","
    ")%> -
  • - <%- end end %> -
-
- <% end %> - - <%- if self.addremove then -%> - <% if self.template_addremove then include(self.template_addremove) else -%> -
- <% if self.anonymous then %> - - <% else %> - <% if self.invalid_cts then -%> -
- <% end %> - - - <% if self.invalid_cts then -%> -
- <%:Invalid%> -
- <%- end %> - <% end %> -
- <%- end %> - <%- end -%> -
-
- - diff --git a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm b/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm deleted file mode 100644 index ae787ab59f..0000000000 --- a/package/ctcgfw/luci-app-vssr/luasrc/view/vssr/update_subscribe.htm +++ /dev/null @@ -1,113 +0,0 @@ -<%+cbi/valueheader%> - - - -
- "> -
- - - -<%+cbi/valuefooter%> diff --git a/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po b/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po deleted file mode 100644 index 7fdd3ee318..0000000000 --- a/package/ctcgfw/luci-app-vssr/po/zh-cn/vssr.po +++ /dev/null @@ -1,724 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8\n" - -msgid "vssr" -msgstr "Hello World" - -msgid "Client" -msgstr "客户端" - -msgid "Enable" -msgstr "启用" - -msgid "Disable" -msgstr "停用" - -msgid "Log" -msgstr "日志" - -msgid "Running" -msgstr "运行中" - -msgid "Not Running" -msgstr "未运行" - -msgid "Game Mode" -msgstr "游戏模式" - -msgid "Global Setting" -msgstr "全局设置" - -msgid "Global Server" -msgstr "全局服务器" - -msgid "vssr SOCK5 Proxy is running" -msgstr "vssr SOCK5代理运行中" - -msgid "UDP Relay Server" -msgstr "UDP中继服务器" - -msgid "Same as Main Server" -msgstr "与主服务器相同" - -msgid "Servers Setting" -msgstr "服务器配置" - -msgid "Alias(optional)" -msgstr "别名(可选)" - -msgid "Onetime Authentication" -msgstr "一次验证" - -msgid "Server Address" -msgstr "服务器地址" - -msgid "Server Port" -msgstr "服务器端口" - -msgid "Local Port" -msgstr "本地端口" - -msgid "Connection Timeout" -msgstr "连接超时" - -msgid "Password" -msgstr "密码" - -msgid "Encrypt Method" -msgstr "加密方式" - -msgid "Protocol" -msgstr "传输协议" - -msgid "Protocol param(optional)" -msgstr "传输协议参数(可选)" - -msgid "Obfs" -msgstr "混淆插件" - -msgid "Obfs param(optional)" -msgstr "混淆参数(可选)" - -msgid "Enable Tunnel(DNS)" -msgstr "启用隧道(DNS)转发" - -msgid "Tunnel Port" -msgstr "隧道(DNS)本地端口" - -msgid "Forwarding Tunnel" -msgstr "隧道(DNS)转发地址" - -msgid "Access Control" -msgstr "访问控制" - -msgid "Interfaces - WAN" -msgstr "接口 - WAN" - -msgid "Bypassed IP List" -msgstr "被忽略IP列表" - -msgid "NULL - As Global Proxy" -msgstr "留空 - 作为全局代理" - -msgid "Bypassed IP" -msgstr "额外被忽略IP" - -msgid "Forwarded IP" -msgstr "强制走代理IP" - -msgid "Interfaces - LAN" -msgstr "接口 - LAN" - -msgid "LAN Access Control" -msgstr "内网访问控制" - -msgid "Allow listed only" -msgstr "仅允许列表内" - -msgid "Allow all except listed" -msgstr "仅允许列表外" - -msgid "LAN Host List" -msgstr "内网主机列表" - -msgid "SSR Client" -msgstr "基本设置" - -msgid "SSR Server" -msgstr "服务端" - -msgid "vssr Server" -msgstr "Hello World 服务端" - -msgid "vssr Server is running" -msgstr "Hello World 服务端运行中" - -msgid "vssr Server is not running" -msgstr "Hello World 服务端未运行" - -msgid "Enable Server" -msgstr "启动服务端" - -msgid "Server Setting" -msgstr "服务端配置" - -msgid "KcpTun Enable" -msgstr "KcpTun 启用" - -msgid "bin:/usr/bin/kcptun-client" -msgstr "二进制文件:/usr/bin/kcptun-client" - -msgid "KcpTun Port" -msgstr "KcpTun 端口" - -msgid "KcpTun Param" -msgstr "KcpTun 参数" - -msgid "KcpTun Password" -msgstr "KcpTun 密码" - -msgid "Haven't a Kcptun executable file" -msgstr "不存在Kcptun可执行文件,请下载Kcptun可执行文件并改名放入/usr/bin/kcptun-client" - -msgid "Not a Kcptun executable file" -msgstr "Kcptun可执行文件格式不正确,请确认是否正确下载了路由器对应的可执行文件" - -msgid "Enable Process Monitor" -msgstr "启用进程监控" - -msgid "Edit vssr Server" -msgstr "编辑服务器配置" - -msgid "Alias" -msgstr "别名" - -msgid "Xray SOCKS5 Proxy" -msgstr "Xray SOCKS5 代理" - -msgid "Xray HTTP Proxy" -msgstr "Xray HTTP 代理" - -msgid "Server" -msgstr "服务器" - -msgid "TCP Fast Open" -msgstr "TCP快速打开" - -msgid "Status" -msgstr "状态" - -msgid "Unknown" -msgstr "未知" - -msgid "Running Status" -msgstr "运行状态" - -msgid "Global Client" -msgstr "TCP透明代理" - -msgid "Global SSR Server" -msgstr "SSR服务端" - -msgid "DNS Tunnel" -msgstr "DNS 隧道" - -msgid "IPK Version" -msgstr "IPK 版本号" - -msgid "KcpTun Version" -msgstr "KcpTun 版本号" - -msgid "Not exist" -msgstr "未安装可执行文件" - -msgid "IPK Installation Time" -msgstr "IPK 安装时间" - -msgid "Project" -msgstr "项目地址" - -msgid "Not Running" -msgstr "未运行" - -msgid "Running" -msgstr "运行中" - -msgid "Enable GFW mode" -msgstr "启用 GFW 模式" - -msgid "Running Mode" -msgstr "运行模式" - -msgid "IP Route Mode" -msgstr "绕过中国大陆IP模式" - -msgid "GFW List Mode" -msgstr "GFW列表模式" - -msgid "Global Mode" -msgstr "全局模式" - -msgid "Oversea Mode" -msgstr "海外用户回国模式" - -msgid "Router Proxy" -msgstr "路由器访问控制" - -msgid "Normal Proxy" -msgstr "正常代理" - -msgid "Bypassed Proxy" -msgstr "不走代理" - -msgid "Forwarded Proxy" -msgstr "强制走代理" - -msgid "UDP Relay" -msgstr "UDP中继" - -msgid "Google Connectivity" -msgstr "【谷歌】连通性检查" - -msgid "Baidu Connectivity" -msgstr "【百度】连通性检查" - -msgid "No Check" -msgstr "未检查" - -msgid "Check" -msgstr "检查" - -msgid "Connect OK" -msgstr "连接正常" - -msgid "Connect Error" -msgstr "连接错误" - -msgid "Check..." -msgstr "正在检查.." - -msgid "Proxy Check" -msgstr "代理检查" - - -msgid "GFW List Data" -msgstr "【GFW列表】数据库" - -msgid "China IP Data" -msgstr "【国内IP段】数据库" - -msgid "Records" -msgstr "条记录" - -msgid "Refresh Data" -msgstr "更新数据库" - -msgid "Refresh..." -msgstr "正在更新,请稍候.." - -msgid "Refresh OK!" -msgstr "更新成功!" - -msgid "Refresh Error!" -msgstr "更新失败!" - -msgid "No new data!" -msgstr "你已经是最新数据,无需更新!" - -msgid "Total Records:" -msgstr "新的总纪录数:" - -msgid "Check Server Port" -msgstr "【服务器端口】检查" - -msgid "Check Connect" -msgstr "检查连通性" - -msgid "Check Server" -msgstr "检查服务器" - -msgid "Auto Switch" -msgstr "自动切换" - -msgid "Enable Auto Switch" -msgstr "启用自动切换" - -msgid "Switch check cycly(second)" -msgstr "自动切换检查周期(秒)" - -msgid "Check timout(second)" -msgstr "切换检查超时时间(秒)" - -msgid "Check Try Count" -msgstr "切换检查重试次数" - -msgid "Enable Process Deamon" -msgstr "启用进程自动守护" - -msgid "Advertising Data" -msgstr "【广告屏蔽】数据库" - -msgid "DNS Server IP and Port" -msgstr "DNS服务器地址和端口" - -msgid "Resolve Dns Mode" -msgstr "DNS解析方式" - -msgid "Use SSR DNS Tunnel" -msgstr "使用SSR-DNS隧道" - -msgid "Use Pdnsd" -msgstr "使用Pdnsd" - -msgid "Use Other DNS Tunnel(Need to install)" -msgstr "使用其他DNS转发(需要自己安装)" - -msgid "Import SSR" -msgstr "导入ssr配置信息" - -msgid "Export SSR" -msgstr "导出ssr配置信息" - -msgid "Import SSR successfully." -msgstr "成功导入SSR。" - -msgid "Invalid SSR format." -msgstr "无效的SSR格式。" - -msgid "User cancelled." -msgstr "用户已取消。" - -msgid "Paste ssr url here" -msgstr "在此处粘贴ssr://网址" - -msgid "Unable to copy SSR to clipboard." -msgstr "无法复制SSR网址到剪贴板。" - -msgid "Copy SSR to clipboard successfully." -msgstr "成功复制SSR网址到剪贴板。" - -msgid "Servers Manage" -msgstr "服务器管理" - -msgid "Auto Update" -msgstr "自动更新" - -msgid "Through proxy update" -msgstr "通过代理更新" - -msgid "GFW List" -msgstr "GFW列表" - -msgid "Basic Settings [SS|SSR|Xray|Trojan]" -msgstr "基本设置 [SS|SSR|Xray|Trojan]" - -msgid "Main Server" -msgstr "主服务器" - -msgid "Anti-pollution DNS Server" -msgstr "访问国外域名DNS服务器" - -msgid "Use Pdnsd tcp query and cache" -msgstr "使用PDNSD TCP查询并缓存" - -msgid "DNS Server IP:Port" -msgstr "DNS服务器 IP:Port" - -msgid "Update time (every day)" -msgstr "更新时间 (每天)" - -msgid "Auto Update Server subscription, GFW list and CHN route" -msgstr "自动更新服务器订阅、GFW列表和 CHN路由表" - -msgid "Subscribe URL" -msgstr "SSR/V2RAY订阅URL地址" - -msgid "Update" -msgstr "更新" - -msgid "Save And Start Subscribe" -msgstr "保存并开始订阅" - -msgid "Server Count" -msgstr "节点数量" - -msgid "IP black-and-white list" -msgstr "禁止/通行名单" - -msgid "WAN IP AC" -msgstr "广域网访问控制" - -msgid "WAN White List IP" -msgstr "不走代理的广域网 IP" - -msgid "WAN Force Proxy IP" -msgstr "强制走代理的广域网 IP" - -msgid "LAN Bypassed Host List" -msgstr "不走代理的局域网LAN IP" - -msgid "LAN Force Proxy Host List" -msgstr "全局代理的LAN IP" - -msgid "Router Self AC" -msgstr "路由器自身代理设置" - -msgid "Router Self Proxy" -msgstr "路由器自身代理方式" - -msgid "Normal Proxy" -msgstr "跟随全局设置" - -msgid "Bypassed Proxy" -msgstr "不走代理" - -msgid "Forwarded Proxy" -msgstr "全局代理" - -msgid "GFW Custom List" -msgstr "GFW 用户自定义列表" - -msgid "Please refer to the following writing" -msgstr "每行一个域名,无需写前面的 HTTP(S):// ,提交后即时生效" - -msgid "Servers subscription and manage" -msgstr "服务器节点订阅管理(支持SSR/V2ray 订阅)" - -msgid "Subscription" -msgstr "节点订阅" - -msgid "Through proxy update list, Not Recommended" -msgstr "通过路由器自身代理更新订阅(不推荐)" - -msgid "LAN IP AC" -msgstr "局域网访问控制" - -msgid "Game Mode UDP Server" -msgstr "游戏模式UDP中继服务器" - -msgid "Game Mode UDP Relay" -msgstr "游戏模式UDP中继" - -msgid "Server failsafe auto swith settings" -msgstr "服务器节点故障自动切换设置" - -msgid "Delete All Subscribe Severs" -msgstr "删除所有订阅服务器" - -msgid "Severs Nodes" -msgstr "节点列表" - -msgid "Use Local DNS Service listen port 5335" -msgstr "使用本机端口为5335的DNS服务" - -msgid "Server Node Type" -msgstr "服务器节点类型" - -msgid "Using incorrect encryption mothod may causes service fail to start" -msgstr "输入不正确的参数组合可能会导致服务无法启动" - -msgid "Game Mode Host List" -msgstr "增强游戏模式客户端LAN IP" - -msgid "Multi Threads Option" -msgstr "多线程并发转发" - -msgid "Auto Threads" -msgstr "自动(CPU线程数)" - -msgid "1 Thread" -msgstr "单线程" - -msgid "2 Threads" -msgstr "2 线程" - -msgid "4 Threads" -msgstr "4 线程" - -msgid "8 Threads" -msgstr "8 线程" - -msgid "Proxy Ports" -msgstr "需要代理的端口" - -msgid "All Ports" -msgstr "所有端口(默认)" - -msgid "Only Common Ports" -msgstr "仅常用端口(不走P2P流量到代理)" - -msgid "Ping Latency" -msgstr "Ping延迟" - -msgid "Bypass Domain List" -msgstr "直连域名" - -msgid "Black Domain List" -msgstr "代理域名" - -msgid "Socks user" -msgstr "用户名" - -msgid "Socks pass" -msgstr "密码" - -msgid "HTTP user" -msgstr "用户名" - -msgid "HTTP pass" -msgstr "密码" - -msgid "Enable Servers" -msgstr "开启服务" - -msgid "Enable Auth" -msgstr "开启验证" - -msgid "Subscribing,Please do not refresh!" -msgstr "请勿刷新本页面,正在订阅中 ..." - -msgid "Apply" -msgstr "应用" - -msgid "Edit" -msgstr "修改" - -msgid "Delete" -msgstr "删除" - -msgid "Ping All Servers" -msgstr "Ping 所有节点" - -msgid "Check Ip And Access" -msgstr "Ip地址检查" - -msgid "Test From Internal" -msgstr "从国内测试" - -msgid "Test From Abroad" -msgstr "从国外测试" - -msgid "Test From Google" -msgstr "从谷歌测试" - -msgid "Baidu" -msgstr "百度搜索" - -msgid "Connection OK" -msgstr "访问正常" - -msgid "Cannot Access" -msgstr "无法访问" - -msgid "Unavailable" -msgstr "无法获取" - -msgid "Connection Timeout" -msgstr "连接超时" - -msgid "Update Setting" -msgstr "更新设置" - -msgid "Paste Node Link Here" -msgstr "在这里粘贴配置链接" - -msgid "User Cancel" -msgstr "用户取消" - -msgid "Invalid Format" -msgstr "无效的格式" - -msgid "Import Configuration" -msgstr "导入配置信息" - -msgid "Import" -msgstr "导入" - - -msgid "Configuration Succeeded" -msgstr "配置信息成功" - -msgid "Import Configuration" -msgstr "导入配置信息" - -msgid "Configuration Url" -msgstr "配置链接" - -msgid "Open v2ray route" -msgstr "开启分流" - -msgid "When open v2ray routed,Apply may take more time." -msgstr "(支持全类型分流)当分流开启时,保存并应用的时间可能变长。" - -msgid "Youtube Proxy" -msgstr "Youtube 代理" - -msgid "TaiWan Video Proxy" -msgstr "台湾视频服务代理" - -msgid "Netflix Proxy" -msgstr "Netflix 代理" - -msgid "Disney+ Proxy" -msgstr "Disney+ 代理" - -msgid "Prime Video Proxy" -msgstr "Prime Video 代理" - -msgid "TVB Video Proxy" -msgstr "TVB 视频代理" - -msgid "Custom Proxy" -msgstr "自定义代理" - -msgid "Custom Proxy Domain Name" -msgstr "自定义分流域名" - -msgid "Proxy Domain Name" -msgstr "需要被分流的域名" - -msgid "adblock settings" -msgstr "广告屏蔽设置" - -msgid "Enable adblock" -msgstr "开启广告屏蔽" - -msgid "Licence" -msgstr "许可" - -msgid "Area" -msgstr "国家或地区" - -msgid "Use Xray instead of V2ray" -msgstr "使用Xray替代V2ray" - -msgid "Subscribe Filter Words" -msgstr "订阅过滤关键词" - -msgid "Filter Words splited by /" -msgstr "使用 / 分隔关键词" - -msgid "VLESS Encryption" -msgstr "VLESS 加密" - -msgid "You can manually add group names in front of the URL, splited by ," -msgstr "你可以在URL前面手动添加组名,使用 , 分隔" - -msgid "Router Config" -msgstr "分流设置" - -msgid "Router domain config" -msgstr "分流域名设置" - -msgid "Youtube Domain" -msgstr "YouTube 域名" - -msgid "Tw Video Domain" -msgstr "台湾视频域名" - -msgid "Netflix Domain" -msgstr "Netflix 域名" - -msgid "Disney+ Domain" -msgstr "Disney+ 域名" - -msgid "Prime Video Domain" -msgstr "Prime Video 域名" - -msgid "TVB Domain" -msgstr "TVB 域名" - -msgid "Custom Domain" -msgstr "自定义域名" - -msgid "Subscribe" -msgstr "订阅设置" - -msgid "Local Proxy" -msgstr "本地代理" - -msgid "↑ Put your IP list here" -msgstr "↑ 在上面放置你需要分流的IP列表" - -msgid "↑ Put your domain list here" -msgstr "↑ 在上面放置你需要分流的域名列表" diff --git a/package/ctcgfw/luci-app-vssr/root/etc/config/vssr b/package/ctcgfw/luci-app-vssr/root/etc/config/vssr deleted file mode 100644 index 8db9e5a9ca..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/config/vssr +++ /dev/null @@ -1,52 +0,0 @@ - -config global - option tunnel_forward '8.8.4.4:53' - option tunnel_address '0.0.0.0' - option run_mode 'router' - option pdnsd_enable '1' - option monitor_enable '1' - option global_server 'nil' - option enable_switch '0' - option switch_timeout '5' - option switch_time '667' - option switch_try_count '3' - option adblock '0' - option dports '1' - -config socks5_proxy - option enable_server '0' - option local_port '1080' - option local_address '0.0.0.0' - option enable_auth '1' - option Socks_user 'user' - option Socks_pass 'password' - -config http_proxy - option enable_server '0' - option local_port '1088' - option local_address '0.0.0.0' - option enable_auth '0' - option http_user 'user' - option http_pass 'password' - -config access_control - option wan_bp_list '/etc/vssr/china_ssr.txt' - option lan_ac_mode 'b' - option router_proxy '1' - list wan_fw_ips '149.154.160.0/20' - list wan_fw_ips '67.198.55.0/24' - list wan_fw_ips '91.108.4.0/22' - list wan_fw_ips '91.108.56.0/22' - list wan_fw_ips '109.239.140.0/24' - -config server_global - option enable_server '0' - -config server_subscribe - option proxy '0' - option auto_update_time '2' - option auto_update '1' - option filter_words '过期时间/剩余流量' - - - diff --git a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr deleted file mode 100755 index 4938e3197c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr +++ /dev/null @@ -1,654 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# Copyright (C) 2018 lean -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -START=99 -STOP=15 - -SERVICE_DAEMONIZE=1 -NAME=vssr -EXTRA_COMMANDS=rules - -#定义配置文件名称 -CONFIG_FILE=/var/etc/${NAME}_t.json -CONFIG_UDP_FILE=/var/etc/${NAME}_u.json -CONFIG_SOCK5_FILE=/var/etc/${NAME}_s.json -CRON_FILE=/etc/crontabs/root - -#定义可执行文件路径 -VSSR_RULES_BIN=/usr/bin/vssr-rules - -#初始化配置 -server_count=0 -redir_tcp=0 -redir_udp=0 -tunnel_enable=0 -local_enable=0 -kcp_enable_flag=0 -kcp_flag=0 -pdnsd_enable_flag=0 -switch_enable=0 -shunt_enable=0 -switch_server=$1 -MAXFD=32768 -threads=1 - - -#读取 uci 数据 -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -run_mode=$(uci_get_by_type global run_mode) -is_xray=$(uci_get_by_type global use_xray) - -#查找可执行文件 -find_bin() { - case "$1" in - ss) ret="ss-redir" ;; - ss-local) ret="ss-local" ;; - ssr) ret="ssr-redir" ;; - ssr-local) ret="ssr-local" ;; - ssr-server) ret="ssr-server" ;; - v2ray | vless) ret="xray" ;; - trojan) ret="trojan" ;; - esac - echo $(find /usr -perm /+x -type f -name $ret) -} - -#添加定时执行脚本 -add_cron() { - sed -i '/vssr.log/d' $CRON_FILE && echo '0 1 * * * echo "" > /tmp/vssr.log' >>$CRON_FILE - [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/bin/lua /usr/share/vssr/subscribe.lua" >>$CRON_FILE - [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/bin/lua /usr/share/vssr/update.lua" >>$CRON_FILE - crontab $CRON_FILE -} - -#删除定时执行脚本 -del_cron() { - sed -i '/vssr/d' $CRON_FILE - sed -i '/vssr.log/d' $CRON_FILE - /etc/init.d/cron restart -} - -#计算分流数量 -count_shunt() { - snum=0 - eval shunt_array1="youtube" - eval shunt_array2="tw_video" - eval shunt_array3="netflix" - eval shunt_array4="disney" - eval shunt_array5="prime" - eval shunt_array6="tvb" - eval shunt_array7="custom" - for i in 1 2 3 4 5 6 7; do - a=$(eval echo "\$shunt_array$i") - local server_index=$(uci_get_by_type global ${a}_server) - local server_type=$(uci_get_by_name $server_index type) - if [ "$server_type" != "" ]; then - snum=$(($snum + 1)) - fi - done - echo $snum -} - - -#创建配置文件 -gen_config_file() { - local hostip=$(uci_get_by_name $1 server) - [ $2 = "0" -a $kcp_flag = "1" ] && hostip="127.0.0.1" - - if [ $2 = "0" ]; then - re_type="tcp" - config_file=$CONFIG_FILE - server_obj=$GLOBAL_SERVER - elif [ $2 = "1" ]; then - re_type="udp" - config_file=$CONFIG_UDP_FILE - server_obj=$UDP_RELAY_SERVER - fi - [[ $(uci_get_by_name $1 fast_open 0) = "1" ]] && fastopen="true" || fastopen="false" - - local stype=$(uci_get_by_name $1 type) - local port=$(uci_get_by_name $1 local_port) - [[ "$stype" == "vless" ]] && stype="v2ray" - - if [ "$stype" == "trojan" ]; then - if [ "$re_type" == "udp" ]; then - re_type="client" - port="10801" - else - re_type="nat" - fi - fi - - local mport=0 - if [ $3 = "1" ]; then - stype="v2ray" - mport=1090 - re_type="tcp" - fi - - lua /usr/share/vssr/genconfig_${stype}.lua ${server_obj} ${re_type} ${port} ${hostip} ${mport} >${config_file} - sed -i 's/\\//g' $config_file -} - -#获取arg输出 -get_arg_out() { - case "$(uci_get_by_type access_control router_proxy 1)" in - 1) echo "-o" ;; - 2) echo "-O" ;; - esac -} - -#启动规则 -start_rules() { - local server=$(uci_get_by_name $GLOBAL_SERVER server) - #resolve name - if echo $server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - server=${server} - elif [ "$server" != "${server#*:[0-9a-fA-F]}" ]; then - server=${server} - else - server=$(ping ${server} -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) - if echo $server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - echo $server >/etc/ssr_ip - else - server=$(cat /etc/ssr_ip) - fi - fi - - kcp_server=$server - - local kcp_enable=$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0) - if [ $kcp_enable = "1" ]; then - kcp_flag=1 - fi - - local local_port=$(uci_get_by_name $GLOBAL_SERVER local_port) - local lan_ac_ips=$(uci_get_by_type access_control lan_ac_ips) - local lan_ac_mode=$(uci_get_by_type access_control lan_ac_mode) - local router_proxy=$(uci_get_by_type access_control router_proxy) - if [ "$GLOBAL_SERVER" == "$UDP_RELAY_SERVER" -a $kcp_flag == 0 ]; then - ARG_UDP="-u" - elif [ -n "$UDP_RELAY_SERVER" ]; then - ARG_UDP="-U" - local udp_server=$(uci_get_by_name $UDP_RELAY_SERVER server) - if echo $udp_server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - udp_server=${udp_server} - elif [ "$udp_server" != "${udp_server#*:[0-9a-fA-F]}" ]; then - udp_server=${udp_server} - else - udp_server=$(ping ${udp_server} -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) - if echo $udp_server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - echo $udp_server >/etc/ssr_ip - else - udp_server=$(cat /etc/ssr_ip) - fi - fi - local udp_local_port=$(uci_get_by_name $UDP_RELAY_SERVER local_port) - fi - - if [ -n "$lan_ac_ips" ]; then - case "$lan_ac_mode" in - w | W | b | B) local ac_ips="$lan_ac_mode$lan_ac_ips" ;; - esac - fi - - #deal gfw firewall rule - local gfwmode="" - case "$run_mode" in - gfw) gfwmode="-g" ;; - router) gfwmode="-r" ;; - oversea) gfwmode="-c" ;; - all) gfwmode="-z" ;; - esac - - local dports=$(uci_get_by_type global dports 1) - if [ $dports = "1" ]; then - proxyport=" " - else - proxyport="-m multiport --dports 22,53,587,465,995,993,143,80,443 " - fi - - $VSSR_RULES_BIN \ - -s "$server" \ - -l "$local_port" \ - -S "$udp_server" \ - -L "$udp_local_port" \ - -a "$ac_ips" \ - -i "$(uci_get_by_type access_control wan_bp_list)" \ - -b "$(uci_get_by_type access_control wan_bp_ips)" \ - -w "$(uci_get_by_type access_control wan_fw_ips)" \ - -p "$(uci_get_by_type access_control lan_fp_ips)" \ - -G "$(uci_get_by_type access_control lan_gm_ips)" \ - -D "$proxyport" \ - $(get_arg_out) $gfwmode $ARG_UDP - return $? -} - -#启动PDNSD -start_pdnsd() { - local usr_dns="$1" - local usr_port="$2" - - local tcp_dns_list="208.67.222.222, 208.67.220.220" - [ -z "$usr_dns" ] && usr_dns="8.8.8.8" - [ -z "$usr_port" ] && usr_port="53" - - [ -d /var/etc ] || mkdir -p /var/etc - - if [ ! -d /var/pdnsd ]; then - mkdir -p /var/pdnsd - echo -ne "pd13\000\000\000\000" >/var/pdnsd/pdnsd.cache - chown -R nobody:nogroup /var/pdnsd - fi - - cat <<-EOF >/var/etc/pdnsd.conf - global{ - perm_cache=1024; - cache_dir="/var/pdnsd"; - pid_file="/var/run/pdnsd.pid"; - run_as="nobody"; - server_ip=127.0.0.1; - server_port=5335; - status_ctl=on; - query_method=tcp_only; - min_ttl=1h; - max_ttl=1w; - timeout=10; - neg_domain_pol=on; - proc_limit=2; - procq_limit=8; - par_queries=1; - } - server{ - label="ssr-usrdns"; - ip=$usr_dns; - port=$usr_port; - timeout=6; - uptest=none; - interval=10m; - purge_cache=off; - } - EOF - /usr/sbin/pdnsd -c /var/etc/pdnsd.conf -d -} - - -#开启分流 -start_shunt() { - eval shunt_type1="global" - eval shunt_type2="youtube" - eval shunt_type3="tw_video" - eval shunt_type4="netflix" - eval shunt_type5="disney" - eval shunt_type6="prime" - eval shunt_type7="tvb" - eval shunt_type8="custom" - eval shunt_port1=2080 - eval shunt_port2=2081 - eval shunt_port3=2082 - eval shunt_port4=2083 - eval shunt_port5=2084 - eval shunt_port6=2085 - eval shunt_port7=2086 - eval shunt_port8=2087 - for i in 1 2 3 4 5 6 7 8; do - shunt_type=$(eval echo "\$shunt_type$i") - shunt_port=$(eval echo "\$shunt_port$i") - local server_index=$(uci_get_by_type global ${shunt_type}_server) - local server_port=${shunt_port} - local server_type=$(uci_get_by_name $server_index type) - local server_ip=$(uci_get_by_name $server_index server) - if [ "$server_type" = "vless" ]; then - server_type="v2ray" - fi - [ "$server_type" = "trojan" ] && re_type="client" || re_type="tcp" - if [ "$server_type" != "v2ray" -a "$server_type" != "" ]; then - local config_file=/var/etc/${NAME}_${shunt_type}.json - local bin=$(find_bin $server_type) - lua /usr/share/vssr/genconfig_${server_type}.lua ${server_index} ${re_type} ${server_port} ${server_ip} >${config_file} - sed -i 's/\\//g' $config_file - case "$server_type" in - ss | ssr) - bin=$(find_bin "ss-local") - [ "$server_type" == "ssr" ] && bin=$(find_bin "ssr-local") - $bin -c $config_file $ARG_OTA -f /var/run/vssr-${shunt_type}.pid1 >/dev/null 2>&1 - ;; - trojan) - $bin --config $config_file >/dev/null 2>&1 & - ;; - esac - echo "$(date "+%Y-%m-%d %H:%M:%S") ${shunt_type}: $server_type 分流服务已启动!" >>/tmp/vssr.log - fi - done - return $? -} - -start_redir() { - case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in - 1 | on | true | yes | enabled) ARG_OTA="-A" ;; - *) ARG_OTA="" ;; - esac - - #deal kcp - local kcp_enable=$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0) - if [ $kcp_enable = "1" ]; then - [ ! -f "/usr/bin/kcptun-client" ] && return 1 - - local kcp_str=$(/usr/bin/kcptun-client -v | grep kcptun | wc -l) - [ "0" = $kcp_str ] && return 1 - local kcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) - local server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) - local password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) - local kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) - [ "$password" != "" ] && password="--key "${password} - service_start /usr/bin/kcptun-client \ - -r $kcp_server:$kcp_port \ - -l :$server_port $password $kcp_param - kcp_enable_flag=1 - fi - - gen_config_file $GLOBAL_SERVER 0 0 - local stype=$(uci_get_by_name $GLOBAL_SERVER type) - sscmd=$(find_bin $stype) - - - - if [ "$(uci_get_by_type global threads 0)" = "0" ]; then - threads=$(cat /proc/cpuinfo | grep 'processor' | wc -l) - else - threads=$(uci_get_by_type global threads) - fi - #转发TCP - redir_tcp=1 - scount=$(count_shunt) - if [ $scount == "0" ]; then - local last_config_file=$CONFIG_FILE - case "$stype" in - ss | ssr) - local pid_file="/var/run/ssr-retcp.pid" - local name="Shadowsocks" - [ "$type" == "ssr" ] && name="ShadowsocksR" - for i in $(seq 1 $threads); do - $sscmd -c $last_config_file $ARG_OTA -f /var/run/ssr-retcp_$i.pid >/dev/null 2>&1 - done - echo "$(date "+%Y-%m-%d %H:%M:%S") $name $threads 线程 已启动!" >>/tmp/vssr.log - ;; - v2ray | vless) - $sscmd -config $last_config_file >/dev/null 2>&1 & - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -version | head -1) 已启动!" >>/tmp/vssr.log - ;; - trojan) - for i in $(seq 1 $threads); do - $sscmd -c $last_config_file >/dev/null 2>&1 & - done - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -V 2>&1 | head -1) $threads 线程 已启动!" >>/tmp/vssr.log - ;; - esac - else - if [ $stype != "vray" ]; then - #开启 v2ray 路由服务 - gen_config_file $GLOBAL_SERVER 0 1 - sscmd=$(find_bin "v2ray") - local last_config_file=$CONFIG_FILE - $sscmd -config $last_config_file >/dev/null 2>&1 & - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -version | head -1) 已启动!" >>/tmp/vssr.log - fi - - fi - - #转发UDP - if [ -n "$UDP_RELAY_SERVER" ]; then - redir_udp=1 - local utype=$(uci_get_by_name $UDP_RELAY_SERVER type) - ucmd=$(find_bin $utype) - gen_config_file $UDP_RELAY_SERVER 1 0 - last_config_file=$CONFIG_UDP_FILE - case "$utype" in - ss | ssr) - case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in - 1 | on | true | yes | enabled) ARG_OTA="-A" ;; - *) ARG_OTA="" ;; - esac - local name="Shadowsocks" - [ "$type" == "ssr" ] && name="ShadowsocksR" - pid_file="/var/run/ssr-reudp.pid" - $ucmd -c $last_config_file $ARG_OTA -U -f /var/run/ssr-reudp.pid >/dev/null 2>&1 - echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay: $name 已启动!" >>/tmp/vssr.log - ;; - v2ray | vless) - $ucmd -config $last_config_file >/dev/null 2>&1 & - echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay: V2ray 已启动!" >>/tmp/vssr.log - ;; - trojan) - $ucmd --config $last_config_file >/dev/null 2>&1 & - ipt2socks -U -4 -b 0.0.0.0 -s 127.0.0.1 -p 10801 -l $(uci_get_by_name $UDP_RELAY_SERVER local_port) >/dev/null 2>&1 & - echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay: Trojan 已启动!" >>/tmp/vssr.log - ;; - esac - fi - - #deal with dns - - if [ "$(uci_get_by_type global pdnsd_enable)" = "1" ]; then - local dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" - local dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') - local dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') - if [ "$run_mode" = "gfw" ]; then - ipset add gfwlist $dnsserver 2>/dev/null - elif [ "$run_mode" = "oversea" ]; then - ipset add oversea $dnsserver 2>/dev/null - else - ipset add ss_spec_wan_ac $dnsserver nomatch 2>/dev/null - fi - start_pdnsd $dnsserver $dnsport - pdnsd_enable_flag=1 - fi - - if [ "$(uci_get_by_type global enable_switch)" = "1" ]; then - if [ "$(uci_get_by_name $GLOBAL_SERVER switch_enable)" = "1" ]; then - if [ -z "$switch_server" ]; then - local switch_time=$(uci_get_by_type global switch_time) - local switch_timeout=$(uci_get_by_type global switch_timeout) - service_start /usr/bin/vssr-switch start $switch_time $switch_timeout - switch_enable=1 - fi - fi - fi - add_cron - - return $? -} - -gen_service_file() { - [[ $(uci_get_by_name $1 fast_open) = "1" ]] && fastopen="true" || fastopen="false" - cat <<-EOF >$2 - { - "server": "0.0.0.0", - "server_port": $(uci_get_by_name $1 server_port), - "password": "$(uci_get_by_name $1 password)", - "timeout": $(uci_get_by_name $1 timeout 60), - "method": "$(uci_get_by_name $1 encrypt_method)", - "protocol": "$(uci_get_by_name $1 protocol)", - "protocol_param": "$(uci_get_by_name $1 protocol_param)", - "obfs": "$(uci_get_by_name $1 obfs)", - "obfs_param": "$(uci_get_by_name $1 obfs_param)", - "fast_open": $fastopen - } - EOF -} - -start_service() { - [ $(uci_get_by_name $1 enable) = "0" ] && return 1 - let server_count=server_count+1 - if [ $server_count = 1 ]; then - if ! (iptables-save -t filter | grep SSR-SERVER-RULE >/dev/null); then - iptables -N SSR-SERVER-RULE && \ - iptables -t filter -I INPUT -j SSR-SERVER-RULE - fi - fi - - gen_service_file $1 /var/etc/${NAME}_${server_count}.json - /usr/bin/ssr-server -c /var/etc/${NAME}_${server_count}.json -u -f /var/run/ssr-server${server_count}.pid >/dev/null 2>&1 - iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $(uci_get_by_name $1 server_port) -j ACCEPT - iptables -t filter -A SSR-SERVER-RULE -p udp --dport $(uci_get_by_name $1 server_port) -j ACCEPT - return 0 -} - -gen_serv_include() { - FWI=$(uci get firewall.vssr.path 2>/dev/null) - [ -n "$FWI" ] || return 0 - if [ ! -f $FWI ]; then - echo '#!/bin/sh' >$FWI - fi - extract_rules() { - echo "*filter" - iptables-save -t filter | grep SSR-SERVER-RULE | sed -e "s/^-A INPUT/-I INPUT/" - echo 'COMMIT' - } - cat <<-EOF >>$FWI - iptables-save -c | grep -v "SSR-SERVER" | iptables-restore -c - iptables-restore -n <<-EOT - $(extract_rules) - EOT - EOF - -} -start_server() { - SERVER_ENABLE=$(uci_get_by_type server_global enable_server) - [ "$SERVER_ENABLE" = 0 ] && return 0 - mkdir -p /var/run /var/etc - - config_load $NAME - config_foreach start_service server_config - gen_serv_include - return 0 -} - -start_local() { - local socks_server=$(uci_get_by_type socks5_proxy enable_server) - local http_server=$(uci_get_by_type http_proxy enable_server) - - if [ "$socks_server" = "0" -a "$http_server" = "0" ]; then - return 1 - fi - mkdir -p /var/run /var/etc - - lua /usr/share/vssr/genconfig_v2ray_s.lua >$CONFIG_SOCK5_FILE - sed -i 's/\\//g' $config_file - socksbin=$(find_bin "v2ray") - $socksbin -config $CONFIG_SOCK5_FILE >/dev/null 2>&1 & - local_enable=1 -} - -rules() { - [ "$GLOBAL_SERVER" = "nil" ] && return 1 - mkdir -p /var/run /var/etc - UDP_RELAY_SERVER=$(uci_get_by_type global udp_relay_server) - [ "$UDP_RELAY_SERVER" = "same" ] && UDP_RELAY_SERVER=$GLOBAL_SERVER - if start_rules; then - return 0 - else - return 1 - fi -} - -start() { - if [ -z "$switch_server" ]; then - GLOBAL_SERVER=$(uci_get_by_type global global_server) - else - GLOBAL_SERVER=$switch_server - switch_enable=1 - fi - if rules; then - if start_redir; then - if [ -f "/tmp/dnsmasq.ssr" ]; then - rm -rf /tmp/dnsmasq.ssr - fi - if [ -f "/tmp/dnsmasq.oversea" ]; then - rm -rf /tmp/dnsmasq.oversea - fi - mkdir -p /tmp/dnsmasq.d - if ! [ "$run_mode" = "oversea" ]; then - mkdir -p /tmp/dnsmasq.ssr - cp -rf /etc/vssr/gfw_list.conf /tmp/dnsmasq.ssr/ - cp -rf /etc/vssr/gfw_base.conf /tmp/dnsmasq.ssr/ - cp -rf /etc/vssr/ad.conf /tmp/dnsmasq.ssr/ - cat >/tmp/dnsmasq.d/dnsmasq-ssr.conf </tmp/dnsmasq.d/dnsmasq-ssr.conf </dev/null 2>&1 - start_server - start_local - scount=$(count_shunt) - if [ $scount != "0" ]; then - start_shunt - fi - if [ $(uci_get_by_type global monitor_enable) = 1 ]; then - let total_count=server_count+redir_tcp+redir_udp+tunnel_enable+kcp_enable_flag+local_enable+pdnsd_enable_flag+switch_enable - if [ $total_count -gt 0 ]; then - #param:server(count) redir_tcp(0:no,1:yes) redir_udp tunnel kcp local gfw - service_start /usr/bin/vssr-monitor $server_count $redir_tcp $redir_udp $tunnel_enable $kcp_enable_flag $local_enable $pdnsd_enable_flag $switch_enable - fi - fi - - ENABLE_SERVER=$(uci_get_by_type global global_server) - [ "$ENABLE_SERVER" = "nil" ] && return 1 -} - -boot() { - (/usr/share/vssr/chinaipset.sh && sleep 5 && start >/dev/null 2>&1) & -} - -stop() { - echo "stop" - /usr/bin/vssr-rules -f - srulecount=$(iptables -L | grep SSR-SERVER-RULE | wc -l) - if [ $srulecount -gt 0 ]; then - iptables -F SSR-SERVER-RULE - iptables -t filter -D INPUT -j SSR-SERVER-RULE - iptables -X SSR-SERVER-RULE 2>/dev/null - fi - if [ -z "$switch_server" ]; then - kill -9 $(busybox ps -w | grep vssr-switch | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi - if [ $(uci_get_by_type global monitor_enable) = 1 ]; then - kill -9 $(busybox ps -w | grep vssr-monitor | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi - killall -q -9 ss-redir ss-local obfs-local ssr-redir ssr-local ssr-server xray-plugin xray trojan microsocks ipt2socks dns2socks pdnsd - - if [ -f "/tmp/dnsmasq.d/dnsmasq-ssr.conf" ]; then - rm -rf /tmp/dnsmasq.d/dnsmasq-ssr.conf /tmp/dnsmasq.ssr /tmp/dnsmasq.oversea - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - fi - del_cron -} diff --git a/package/ctcgfw/luci-app-vssr/root/etc/uci-defaults/luci-vssr b/package/ctcgfw/luci-app-vssr/root/etc/uci-defaults/luci-vssr deleted file mode 100644 index 136d0b029c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/uci-defaults/luci-vssr +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@vssr[-1] - add ucitrack vssr - set ucitrack.@vssr[-1].init=vssr - commit ucitrack - delete firewall.vssr - set firewall.vssr=include - set firewall.vssr.type=script - set firewall.vssr.path=/var/etc/vssr.include - set firewall.vssr.reload=1 - commit firewall -EOF - -/usr/share/vssr/gfw2ipset.sh -rm -f /tmp/luci-indexcache -exit 0 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/ad.conf b/package/ctcgfw/luci-app-vssr/root/etc/vssr/ad.conf deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/black.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/black.list deleted file mode 100644 index dd852d6fb5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/black.list +++ /dev/null @@ -1,4 +0,0 @@ -api.ipify.org -v2fly.org -github.com -raw.githubusercontent.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/china_ssr.txt b/package/ctcgfw/luci-app-vssr/root/etc/vssr/china_ssr.txt deleted file mode 100644 index b85f568ab7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/china_ssr.txt +++ /dev/null @@ -1,8575 +0,0 @@ -1.0.1.0/24 -1.0.2.0/23 -1.0.8.0/21 -1.0.32.0/19 -1.1.0.0/24 -1.1.2.0/23 -1.1.4.0/22 -1.1.8.0/24 -1.1.9.0/24 -1.1.10.0/23 -1.1.12.0/22 -1.1.16.0/20 -1.1.32.0/19 -1.2.0.0/23 -1.2.2.0/24 -1.2.4.0/24 -1.2.5.0/24 -1.2.6.0/23 -1.2.8.0/24 -1.2.9.0/24 -1.2.10.0/23 -1.2.12.0/22 -1.2.16.0/20 -1.2.32.0/19 -1.2.64.0/18 -1.3.0.0/16 -1.4.1.0/24 -1.4.2.0/23 -1.4.4.0/24 -1.4.5.0/24 -1.4.6.0/23 -1.4.8.0/21 -1.4.16.0/20 -1.4.32.0/19 -1.4.64.0/18 -1.8.0.0/16 -1.10.0.0/21 -1.10.8.0/23 -1.10.11.0/24 -1.10.12.0/22 -1.10.16.0/20 -1.10.32.0/19 -1.10.64.0/18 -1.12.0.0/14 -1.24.0.0/13 -1.45.0.0/16 -1.48.0.0/15 -1.50.0.0/16 -1.51.0.0/16 -1.56.0.0/13 -1.68.0.0/14 -1.80.0.0/13 -1.88.0.0/14 -1.92.0.0/15 -1.94.0.0/15 -1.116.0.0/15 -1.118.0.0/16 -1.119.0.0/17 -1.119.128.0/17 -1.180.0.0/14 -1.184.0.0/15 -1.188.0.0/14 -1.192.0.0/13 -1.202.0.0/15 -1.204.0.0/14 -14.0.0.0/21 -14.0.12.0/22 -14.1.0.0/22 -14.1.24.0/22 -14.1.96.0/22 -14.1.108.0/22 -14.16.0.0/12 -14.102.128.0/22 -14.102.156.0/22 -14.102.180.0/22 -14.103.0.0/16 -14.104.0.0/13 -14.112.0.0/12 -14.130.0.0/15 -14.134.0.0/15 -14.144.0.0/12 -14.192.60.0/22 -14.192.76.0/22 -14.196.0.0/15 -14.204.0.0/15 -14.208.0.0/12 -27.0.128.0/22 -27.0.132.0/22 -27.0.160.0/22 -27.0.164.0/22 -27.0.188.0/22 -27.0.204.0/22 -27.0.208.0/22 -27.0.212.0/22 -27.8.0.0/13 -27.16.0.0/12 -27.34.232.0/21 -27.36.0.0/14 -27.40.0.0/13 -27.50.40.0/21 -27.50.128.0/17 -27.54.72.0/21 -27.54.152.0/21 -27.54.192.0/18 -27.98.208.0/20 -27.98.224.0/19 -27.99.128.0/17 -27.103.0.0/16 -27.106.128.0/18 -27.106.204.0/22 -27.109.32.0/19 -27.109.124.0/22 -27.112.0.0/18 -27.112.80.0/20 -27.112.112.0/22 -27.112.116.0/22 -27.113.128.0/18 -27.115.0.0/17 -27.116.44.0/22 -27.121.72.0/21 -27.121.120.0/21 -27.128.0.0/15 -27.131.220.0/22 -27.144.0.0/16 -27.148.0.0/14 -27.152.0.0/13 -27.184.0.0/13 -27.192.0.0/11 -27.224.0.0/14 -36.0.0.0/22 -36.0.8.0/21 -36.0.16.0/20 -36.0.32.0/19 -36.0.64.0/18 -36.0.128.0/17 -36.1.0.0/16 -36.4.0.0/14 -36.16.0.0/12 -36.32.0.0/14 -36.36.0.0/16 -36.37.0.0/19 -36.37.36.0/23 -36.37.39.0/24 -36.37.40.0/21 -36.37.48.0/20 -36.40.0.0/13 -36.48.0.0/15 -36.51.0.0/16 -36.56.0.0/13 -36.96.0.0/11 -36.128.0.0/10 -36.192.0.0/11 -36.248.0.0/14 -36.254.0.0/16 -36.255.116.0/22 -36.255.128.0/22 -36.255.164.0/22 -36.255.172.0/22 -36.255.176.0/22 -39.0.0.0/24 -39.0.2.0/23 -39.0.4.0/22 -39.0.8.0/21 -39.0.16.0/20 -39.0.32.0/19 -39.0.64.0/18 -39.0.128.0/17 -39.64.0.0/11 -39.96.0.0/13 -39.104.0.0/14 -39.108.0.0/16 -39.128.0.0/10 -40.72.0.0/15 -40.125.128.0/17 -40.126.64.0/18 -42.0.0.0/22 -42.0.8.0/21 -42.0.16.0/21 -42.0.24.0/22 -42.0.32.0/19 -42.0.128.0/17 -42.1.0.0/19 -42.1.32.0/20 -42.1.48.0/21 -42.1.56.0/22 -42.1.128.0/17 -42.4.0.0/14 -42.48.0.0/15 -42.50.0.0/16 -42.51.0.0/16 -42.52.0.0/14 -42.56.0.0/14 -42.62.0.0/17 -42.62.128.0/19 -42.62.160.0/20 -42.62.180.0/22 -42.62.184.0/21 -42.63.0.0/16 -42.80.0.0/15 -42.83.64.0/20 -42.83.80.0/22 -42.83.88.0/21 -42.83.96.0/19 -42.83.128.0/17 -42.84.0.0/14 -42.88.0.0/13 -42.96.64.0/19 -42.96.96.0/21 -42.96.108.0/22 -42.96.112.0/20 -42.96.128.0/17 -42.97.0.0/16 -42.99.0.0/18 -42.99.64.0/19 -42.99.96.0/20 -42.99.112.0/22 -42.99.120.0/21 -42.100.0.0/14 -42.120.0.0/15 -42.122.0.0/16 -42.123.0.0/19 -42.123.36.0/22 -42.123.40.0/21 -42.123.48.0/20 -42.123.64.0/18 -42.123.128.0/17 -42.128.0.0/12 -42.156.0.0/19 -42.156.36.0/22 -42.156.40.0/21 -42.156.48.0/20 -42.156.64.0/18 -42.156.128.0/17 -42.157.0.0/16 -42.158.0.0/16 -42.159.0.0/16 -42.160.0.0/12 -42.176.0.0/13 -42.184.0.0/15 -42.186.0.0/16 -42.187.0.0/18 -42.187.64.0/19 -42.187.96.0/20 -42.187.112.0/21 -42.187.120.0/22 -42.187.128.0/17 -42.192.0.0/15 -42.194.0.0/21 -42.194.8.0/22 -42.194.12.0/22 -42.194.16.0/20 -42.194.32.0/19 -42.194.64.0/18 -42.194.128.0/17 -42.195.0.0/16 -42.196.0.0/14 -42.201.0.0/17 -42.202.0.0/15 -42.204.0.0/14 -42.208.0.0/12 -42.224.0.0/12 -42.240.0.0/17 -42.240.128.0/17 -42.242.0.0/15 -42.244.0.0/14 -42.248.0.0/13 -43.128.0.0/10 -43.224.12.0/22 -43.224.24.0/22 -43.224.44.0/22 -43.224.52.0/22 -43.224.56.0/22 -43.224.64.0/22 -43.224.68.0/22 -43.224.72.0/22 -43.224.80.0/22 -43.224.100.0/22 -43.224.144.0/22 -43.224.160.0/22 -43.224.176.0/22 -43.224.184.0/22 -43.224.200.0/22 -43.224.204.0/22 -43.224.208.0/22 -43.224.212.0/22 -43.224.216.0/22 -43.224.240.0/22 -43.225.76.0/22 -43.225.84.0/22 -43.225.120.0/22 -43.225.124.0/22 -43.225.140.0/22 -43.225.172.0/22 -43.225.180.0/22 -43.225.208.0/22 -43.225.216.0/22 -43.225.220.0/22 -43.225.224.0/22 -43.225.228.0/22 -43.225.232.0/22 -43.225.236.0/22 -43.225.240.0/22 -43.225.244.0/22 -43.225.252.0/22 -43.226.32.0/22 -43.226.36.0/22 -43.226.40.0/22 -43.226.44.0/22 -43.226.48.0/22 -43.226.52.0/22 -43.226.56.0/22 -43.226.60.0/22 -43.226.64.0/22 -43.226.68.0/22 -43.226.72.0/22 -43.226.76.0/22 -43.226.80.0/22 -43.226.84.0/22 -43.226.88.0/22 -43.226.92.0/22 -43.226.96.0/22 -43.226.100.0/22 -43.226.104.0/22 -43.226.108.0/22 -43.226.112.0/22 -43.226.116.0/22 -43.226.120.0/22 -43.226.128.0/22 -43.226.132.0/22 -43.226.136.0/22 -43.226.140.0/22 -43.226.144.0/22 -43.226.148.0/22 -43.226.152.0/22 -43.226.156.0/22 -43.226.160.0/22 -43.226.164.0/22 -43.226.168.0/22 -43.226.172.0/22 -43.226.176.0/22 -43.226.180.0/22 -43.226.184.0/22 -43.226.188.0/22 -43.226.192.0/22 -43.226.196.0/22 -43.226.200.0/22 -43.226.204.0/22 -43.226.208.0/22 -43.226.212.0/22 -43.226.236.0/22 -43.226.240.0/22 -43.226.244.0/22 -43.226.248.0/22 -43.226.252.0/22 -43.227.0.0/22 -43.227.4.0/22 -43.227.8.0/22 -43.227.32.0/22 -43.227.36.0/22 -43.227.40.0/22 -43.227.44.0/22 -43.227.48.0/22 -43.227.52.0/22 -43.227.56.0/22 -43.227.60.0/22 -43.227.64.0/22 -43.227.68.0/22 -43.227.72.0/22 -43.227.76.0/22 -43.227.80.0/22 -43.227.84.0/22 -43.227.88.0/22 -43.227.92.0/22 -43.227.96.0/22 -43.227.100.0/22 -43.227.104.0/22 -43.227.136.0/22 -43.227.140.0/22 -43.227.144.0/22 -43.227.152.0/22 -43.227.156.0/22 -43.227.160.0/22 -43.227.164.0/22 -43.227.168.0/22 -43.227.172.0/22 -43.227.176.0/22 -43.227.180.0/22 -43.227.188.0/22 -43.227.192.0/22 -43.227.196.0/22 -43.227.200.0/22 -43.227.204.0/22 -43.227.208.0/22 -43.227.212.0/22 -43.227.216.0/22 -43.227.220.0/22 -43.227.232.0/22 -43.227.248.0/22 -43.227.252.0/22 -43.228.0.0/22 -43.228.4.0/22 -43.228.8.0/22 -43.228.12.0/22 -43.228.16.0/22 -43.228.20.0/22 -43.228.24.0/22 -43.228.28.0/22 -43.228.32.0/22 -43.228.36.0/22 -43.228.40.0/22 -43.228.44.0/22 -43.228.48.0/22 -43.228.52.0/22 -43.228.56.0/22 -43.228.60.0/22 -43.228.64.0/22 -43.228.68.0/22 -43.228.76.0/22 -43.228.100.0/22 -43.228.116.0/22 -43.228.120.0/22 -43.228.132.0/22 -43.228.136.0/22 -43.228.148.0/22 -43.228.152.0/22 -43.228.188.0/22 -43.229.40.0/22 -43.229.48.0/22 -43.229.56.0/22 -43.229.96.0/22 -43.229.120.0/22 -43.229.136.0/22 -43.229.140.0/22 -43.229.144.0/22 -43.229.168.0/22 -43.229.172.0/22 -43.229.176.0/22 -43.229.180.0/22 -43.229.184.0/22 -43.229.188.0/22 -43.229.192.0/22 -43.229.196.0/22 -43.229.216.0/22 -43.229.220.0/22 -43.229.232.0/22 -43.229.236.0/22 -43.230.20.0/22 -43.230.32.0/22 -43.230.68.0/22 -43.230.72.0/22 -43.230.84.0/22 -43.230.124.0/22 -43.230.136.0/22 -43.230.220.0/22 -43.230.224.0/22 -43.230.228.0/22 -43.230.232.0/22 -43.230.236.0/22 -43.230.240.0/22 -43.230.244.0/22 -43.230.248.0/22 -43.230.252.0/22 -43.231.32.0/22 -43.231.36.0/22 -43.231.40.0/22 -43.231.44.0/22 -43.231.80.0/22 -43.231.84.0/22 -43.231.88.0/22 -43.231.92.0/22 -43.231.96.0/22 -43.231.100.0/22 -43.231.104.0/22 -43.231.108.0/22 -43.231.136.0/22 -43.231.140.0/22 -43.231.144.0/22 -43.231.148.0/22 -43.231.152.0/22 -43.231.156.0/22 -43.231.160.0/22 -43.231.164.0/22 -43.231.168.0/22 -43.231.172.0/22 -43.231.176.0/22 -43.231.180.0/22 -43.236.0.0/22 -43.236.4.0/22 -43.236.8.0/22 -43.236.12.0/22 -43.236.16.0/22 -43.236.20.0/22 -43.236.24.0/22 -43.236.28.0/22 -43.236.32.0/22 -43.236.36.0/22 -43.236.40.0/22 -43.236.44.0/22 -43.236.48.0/22 -43.236.52.0/22 -43.236.56.0/22 -43.236.60.0/22 -43.236.64.0/22 -43.236.68.0/22 -43.236.72.0/22 -43.236.76.0/22 -43.236.80.0/22 -43.236.84.0/22 -43.236.88.0/22 -43.236.92.0/22 -43.236.96.0/22 -43.236.100.0/22 -43.236.104.0/22 -43.236.108.0/22 -43.236.112.0/22 -43.236.116.0/22 -43.236.120.0/22 -43.236.124.0/22 -43.236.128.0/22 -43.236.132.0/22 -43.236.136.0/22 -43.236.140.0/22 -43.236.144.0/22 -43.236.148.0/22 -43.236.152.0/22 -43.236.156.0/22 -43.236.160.0/22 -43.236.164.0/22 -43.236.168.0/22 -43.236.172.0/22 -43.236.176.0/22 -43.236.180.0/22 -43.236.184.0/22 -43.236.188.0/22 -43.236.192.0/22 -43.236.196.0/22 -43.236.200.0/22 -43.236.204.0/22 -43.236.208.0/22 -43.236.212.0/22 -43.236.216.0/22 -43.236.220.0/22 -43.236.224.0/22 -43.236.228.0/22 -43.236.232.0/22 -43.236.236.0/22 -43.236.240.0/22 -43.236.244.0/22 -43.236.248.0/22 -43.236.252.0/22 -43.237.0.0/22 -43.237.4.0/22 -43.237.8.0/22 -43.237.12.0/22 -43.237.16.0/22 -43.237.20.0/22 -43.237.24.0/22 -43.237.28.0/22 -43.237.32.0/22 -43.237.36.0/22 -43.237.40.0/22 -43.237.44.0/22 -43.237.48.0/22 -43.237.52.0/22 -43.237.56.0/22 -43.237.60.0/22 -43.237.64.0/22 -43.237.68.0/22 -43.237.72.0/22 -43.237.76.0/22 -43.237.80.0/22 -43.237.84.0/22 -43.237.88.0/22 -43.237.92.0/22 -43.237.96.0/22 -43.237.100.0/22 -43.237.104.0/22 -43.237.108.0/22 -43.237.112.0/22 -43.237.116.0/22 -43.237.120.0/22 -43.237.124.0/22 -43.237.128.0/22 -43.237.132.0/22 -43.237.136.0/22 -43.237.140.0/22 -43.237.144.0/22 -43.237.148.0/22 -43.237.152.0/22 -43.237.156.0/22 -43.237.160.0/22 -43.237.164.0/22 -43.237.168.0/22 -43.237.172.0/22 -43.237.176.0/22 -43.237.180.0/22 -43.237.184.0/22 -43.237.188.0/22 -43.237.192.0/22 -43.237.196.0/22 -43.237.200.0/22 -43.237.204.0/22 -43.237.208.0/22 -43.237.212.0/22 -43.237.216.0/22 -43.237.220.0/22 -43.237.224.0/22 -43.237.228.0/22 -43.237.232.0/22 -43.237.236.0/22 -43.237.240.0/22 -43.237.244.0/22 -43.237.248.0/22 -43.237.252.0/22 -43.238.0.0/22 -43.238.4.0/22 -43.238.8.0/22 -43.238.12.0/22 -43.238.16.0/22 -43.238.20.0/22 -43.238.24.0/22 -43.238.28.0/22 -43.238.32.0/22 -43.238.36.0/22 -43.238.40.0/22 -43.238.44.0/22 -43.238.48.0/22 -43.238.52.0/22 -43.238.56.0/22 -43.238.60.0/22 -43.238.64.0/22 -43.238.68.0/22 -43.238.72.0/22 -43.238.76.0/22 -43.238.80.0/22 -43.238.84.0/22 -43.238.88.0/22 -43.238.92.0/22 -43.238.96.0/22 -43.238.100.0/22 -43.238.104.0/22 -43.238.108.0/22 -43.238.112.0/22 -43.238.116.0/22 -43.238.120.0/22 -43.238.124.0/22 -43.238.128.0/22 -43.238.132.0/22 -43.238.136.0/22 -43.238.140.0/22 -43.238.144.0/22 -43.238.148.0/22 -43.238.152.0/22 -43.238.156.0/22 -43.238.160.0/22 -43.238.164.0/22 -43.238.168.0/22 -43.238.172.0/22 -43.238.176.0/22 -43.238.180.0/22 -43.238.184.0/22 -43.238.188.0/22 -43.238.192.0/22 -43.238.196.0/22 -43.238.200.0/22 -43.238.204.0/22 -43.238.208.0/22 -43.238.212.0/22 -43.238.216.0/22 -43.238.220.0/22 -43.238.224.0/22 -43.238.228.0/22 -43.238.232.0/22 -43.238.236.0/22 -43.238.240.0/22 -43.238.244.0/22 -43.238.248.0/22 -43.238.252.0/22 -43.239.0.0/22 -43.239.4.0/22 -43.239.8.0/21 -43.239.16.0/22 -43.239.20.0/22 -43.239.24.0/22 -43.239.28.0/22 -43.239.32.0/22 -43.239.36.0/22 -43.239.40.0/22 -43.239.44.0/22 -43.239.48.0/22 -43.239.116.0/22 -43.239.120.0/22 -43.239.172.0/22 -43.239.176.0/22 -43.240.0.0/22 -43.240.56.0/22 -43.240.60.0/22 -43.240.68.0/22 -43.240.72.0/22 -43.240.76.0/22 -43.240.84.0/22 -43.240.124.0/22 -43.240.128.0/22 -43.240.132.0/22 -43.240.136.0/22 -43.240.144.0/22 -43.240.156.0/22 -43.240.160.0/22 -43.240.164.0/22 -43.240.168.0/22 -43.240.172.0/22 -43.240.176.0/22 -43.240.180.0/22 -43.240.184.0/22 -43.240.188.0/22 -43.240.192.0/22 -43.240.196.0/22 -43.240.200.0/22 -43.240.204.0/22 -43.240.208.0/22 -43.240.212.0/22 -43.240.216.0/22 -43.240.220.0/22 -43.240.236.0/22 -43.240.240.0/22 -43.240.244.0/22 -43.240.248.0/22 -43.240.252.0/22 -43.241.0.0/22 -43.241.4.0/22 -43.241.8.0/22 -43.241.12.0/22 -43.241.16.0/22 -43.241.20.0/22 -43.241.48.0/22 -43.241.76.0/22 -43.241.80.0/22 -43.241.84.0/22 -43.241.88.0/22 -43.241.92.0/22 -43.241.112.0/22 -43.241.168.0/22 -43.241.172.0/22 -43.241.176.0/22 -43.241.180.0/22 -43.241.184.0/22 -43.241.196.0/22 -43.241.208.0/22 -43.241.212.0/22 -43.241.216.0/22 -43.241.220.0/22 -43.241.224.0/22 -43.241.228.0/22 -43.241.232.0/22 -43.241.236.0/22 -43.241.240.0/22 -43.241.248.0/22 -43.241.252.0/22 -43.242.8.0/22 -43.242.12.0/22 -43.242.16.0/22 -43.242.20.0/22 -43.242.24.0/22 -43.242.28.0/22 -43.242.44.0/22 -43.242.48.0/22 -43.242.52.0/22 -43.242.56.0/22 -43.242.60.0/22 -43.242.64.0/22 -43.242.72.0/22 -43.242.76.0/22 -43.242.80.0/22 -43.242.84.0/22 -43.242.88.0/22 -43.242.92.0/22 -43.242.96.0/22 -43.242.144.0/22 -43.242.148.0/22 -43.242.152.0/22 -43.242.156.0/22 -43.242.160.0/22 -43.242.164.0/22 -43.242.168.0/22 -43.242.180.0/22 -43.242.188.0/22 -43.242.192.0/22 -43.242.196.0/22 -43.242.204.0/22 -43.242.216.0/22 -43.242.220.0/22 -43.242.252.0/22 -43.243.4.0/22 -43.243.8.0/22 -43.243.12.0/22 -43.243.16.0/22 -43.243.24.0/22 -43.243.88.0/22 -43.243.128.0/22 -43.243.136.0/22 -43.243.144.0/22 -43.243.148.0/22 -43.243.156.0/22 -43.243.180.0/22 -43.243.188.0/22 -43.243.228.0/22 -43.243.232.0/22 -43.243.244.0/22 -43.246.0.0/22 -43.246.4.0/22 -43.246.8.0/22 -43.246.12.0/22 -43.246.16.0/22 -43.246.20.0/22 -43.246.24.0/22 -43.246.28.0/22 -43.246.32.0/22 -43.246.36.0/22 -43.246.40.0/22 -43.246.44.0/22 -43.246.48.0/22 -43.246.52.0/22 -43.246.56.0/22 -43.246.60.0/22 -43.246.64.0/22 -43.246.68.0/22 -43.246.72.0/22 -43.246.76.0/22 -43.246.80.0/22 -43.246.84.0/22 -43.246.88.0/22 -43.246.92.0/22 -43.246.96.0/22 -43.246.112.0/22 -43.246.212.0/22 -43.246.228.0/22 -43.247.4.0/22 -43.247.8.0/22 -43.247.44.0/22 -43.247.48.0/22 -43.247.68.0/22 -43.247.76.0/22 -43.247.84.0/22 -43.247.88.0/22 -43.247.92.0/22 -43.247.96.0/22 -43.247.100.0/22 -43.247.108.0/22 -43.247.112.0/22 -43.247.148.0/22 -43.247.152.0/22 -43.247.176.0/22 -43.247.180.0/22 -43.247.184.0/22 -43.247.188.0/22 -43.247.196.0/22 -43.247.200.0/22 -43.247.204.0/22 -43.247.208.0/22 -43.247.212.0/22 -43.247.216.0/22 -43.247.220.0/22 -43.247.224.0/22 -43.247.228.0/22 -43.247.232.0/22 -43.247.236.0/22 -43.247.240.0/22 -43.247.244.0/22 -43.247.248.0/22 -43.247.252.0/22 -43.248.0.0/22 -43.248.4.0/22 -43.248.20.0/22 -43.248.28.0/22 -43.248.48.0/22 -43.248.76.0/22 -43.248.80.0/22 -43.248.84.0/22 -43.248.88.0/22 -43.248.92.0/22 -43.248.96.0/22 -43.248.100.0/22 -43.248.104.0/22 -43.248.108.0/22 -43.248.112.0/22 -43.248.116.0/22 -43.248.120.0/22 -43.248.124.0/22 -43.248.128.0/22 -43.248.132.0/22 -43.248.136.0/22 -43.248.140.0/22 -43.248.144.0/22 -43.248.148.0/22 -43.248.176.0/22 -43.248.180.0/22 -43.248.184.0/22 -43.248.188.0/22 -43.248.192.0/22 -43.248.196.0/22 -43.248.200.0/22 -43.248.204.0/22 -43.248.208.0/22 -43.248.228.0/22 -43.248.232.0/22 -43.248.244.0/22 -43.249.4.0/22 -43.249.8.0/22 -43.249.120.0/22 -43.249.132.0/22 -43.249.136.0/22 -43.249.144.0/22 -43.249.148.0/22 -43.249.152.0/22 -43.249.156.0/22 -43.249.160.0/22 -43.249.164.0/22 -43.249.168.0/22 -43.249.192.0/22 -43.249.236.0/22 -43.250.4.0/22 -43.250.12.0/22 -43.250.16.0/22 -43.250.20.0/22 -43.250.28.0/22 -43.250.32.0/22 -43.250.36.0/22 -43.250.72.0/22 -43.250.96.0/22 -43.250.100.0/22 -43.250.104.0/22 -43.250.108.0/22 -43.250.112.0/22 -43.250.116.0/22 -43.250.128.0/22 -43.250.144.0/22 -43.250.148.0/22 -43.250.160.0/22 -43.250.168.0/22 -43.250.172.0/22 -43.250.176.0/22 -43.250.200.0/22 -43.250.212.0/22 -43.250.216.0/22 -43.250.220.0/22 -43.250.236.0/22 -43.250.244.0/22 -43.251.4.0/22 -43.251.8.0/22 -43.251.36.0/22 -43.251.100.0/22 -43.251.116.0/22 -43.251.192.0/22 -43.251.232.0/22 -43.251.236.0/22 -43.251.244.0/22 -43.252.48.0/22 -43.252.56.0/22 -43.252.224.0/22 -43.254.0.0/22 -43.254.4.0/22 -43.254.8.0/22 -43.254.24.0/22 -43.254.36.0/22 -43.254.44.0/22 -43.254.52.0/22 -43.254.64.0/22 -43.254.72.0/22 -43.254.84.0/22 -43.254.88.0/22 -43.254.92.0/22 -43.254.100.0/22 -43.254.104.0/22 -43.254.112.0/22 -43.254.116.0/22 -43.254.128.0/22 -43.254.136.0/22 -43.254.140.0/22 -43.254.144.0/22 -43.254.148.0/22 -43.254.152.0/22 -43.254.156.0/22 -43.254.168.0/22 -43.254.172.0/22 -43.254.180.0/22 -43.254.184.0/22 -43.254.188.0/22 -43.254.192.0/22 -43.254.196.0/22 -43.254.200.0/22 -43.254.208.0/22 -43.254.220.0/22 -43.254.224.0/22 -43.254.228.0/22 -43.254.232.0/22 -43.254.236.0/22 -43.254.240.0/22 -43.254.248.0/22 -43.254.252.0/22 -43.255.0.0/22 -43.255.4.0/22 -43.255.8.0/22 -43.255.16.0/22 -43.255.48.0/22 -43.255.64.0/22 -43.255.68.0/22 -43.255.72.0/22 -43.255.76.0/22 -43.255.84.0/22 -43.255.96.0/22 -43.255.108.0/22 -43.255.144.0/22 -43.255.168.0/22 -43.255.176.0/22 -43.255.184.0/22 -43.255.192.0/22 -43.255.200.0/22 -43.255.204.0/22 -43.255.208.0/22 -43.255.212.0/22 -43.255.224.0/22 -43.255.228.0/22 -43.255.232.0/22 -43.255.244.0/22 -45.40.192.0/18 -45.65.16.0/22 -45.65.20.0/22 -45.65.24.0/22 -45.65.28.0/22 -45.112.132.0/22 -45.112.188.0/22 -45.112.208.0/22 -45.112.212.0/22 -45.112.216.0/22 -45.112.220.0/22 -45.112.228.0/22 -45.112.232.0/22 -45.112.236.0/22 -45.113.12.0/22 -45.113.16.0/22 -45.113.20.0/22 -45.113.24.0/22 -45.113.28.0/22 -45.113.40.0/22 -45.113.52.0/22 -45.113.56.0/22 -45.113.72.0/22 -45.113.144.0/22 -45.113.148.0/22 -45.113.168.0/22 -45.113.176.0/22 -45.113.184.0/22 -45.113.200.0/22 -45.113.204.0/22 -45.113.208.0/22 -45.113.212.0/22 -45.113.216.0/22 -45.113.220.0/22 -45.113.240.0/22 -45.113.252.0/22 -45.114.0.0/22 -45.114.12.0/22 -45.114.32.0/22 -45.114.40.0/22 -45.114.52.0/22 -45.114.96.0/22 -45.114.104.0/22 -45.114.124.0/22 -45.114.136.0/22 -45.114.196.0/22 -45.114.200.0/22 -45.114.228.0/22 -45.114.252.0/22 -45.115.44.0/22 -45.115.100.0/22 -45.115.120.0/22 -45.115.132.0/22 -45.115.144.0/22 -45.115.156.0/22 -45.115.164.0/22 -45.115.200.0/22 -45.115.212.0/22 -45.115.228.0/22 -45.115.236.0/22 -45.115.244.0/22 -45.115.248.0/22 -45.116.16.0/22 -45.116.24.0/22 -45.116.32.0/22 -45.116.36.0/22 -45.116.52.0/22 -45.116.96.0/22 -45.116.100.0/22 -45.116.140.0/22 -45.116.152.0/22 -45.116.208.0/22 -45.117.8.0/22 -45.117.20.0/22 -45.117.68.0/22 -45.117.124.0/22 -45.117.252.0/22 -45.119.52.0/22 -45.119.60.0/22 -45.119.64.0/22 -45.119.68.0/22 -45.119.72.0/22 -45.119.104.0/22 -45.119.116.0/22 -45.119.232.0/22 -45.120.100.0/22 -45.120.140.0/22 -45.120.164.0/22 -45.120.220.0/22 -45.120.240.0/22 -45.121.52.0/22 -45.121.64.0/22 -45.121.68.0/22 -45.121.72.0/22 -45.121.92.0/22 -45.121.96.0/22 -45.121.172.0/22 -45.121.176.0/22 -45.121.212.0/22 -45.121.240.0/22 -45.121.244.0/22 -45.121.248.0/22 -45.121.252.0/22 -45.122.0.0/22 -45.122.4.0/22 -45.122.8.0/22 -45.122.12.0/22 -45.122.16.0/22 -45.122.20.0/22 -45.122.24.0/22 -45.122.28.0/22 -45.122.32.0/22 -45.122.36.0/22 -45.122.40.0/22 -45.122.60.0/22 -45.122.64.0/22 -45.122.68.0/22 -45.122.72.0/22 -45.122.76.0/22 -45.122.80.0/22 -45.122.84.0/22 -45.122.88.0/22 -45.122.92.0/22 -45.122.96.0/21 -45.122.104.0/22 -45.122.108.0/22 -45.122.112.0/22 -45.122.116.0/22 -45.122.160.0/22 -45.122.164.0/22 -45.122.168.0/22 -45.122.172.0/22 -45.122.176.0/22 -45.122.180.0/22 -45.122.184.0/22 -45.122.188.0/22 -45.122.192.0/22 -45.122.196.0/22 -45.122.200.0/22 -45.122.204.0/22 -45.122.208.0/22 -45.122.212.0/22 -45.122.216.0/22 -45.123.28.0/22 -45.123.32.0/22 -45.123.36.0/22 -45.123.44.0/22 -45.123.48.0/22 -45.123.52.0/22 -45.123.56.0/22 -45.123.60.0/22 -45.123.64.0/22 -45.123.68.0/22 -45.123.72.0/22 -45.123.76.0/22 -45.123.80.0/22 -45.123.84.0/22 -45.123.88.0/22 -45.123.120.0/22 -45.123.128.0/22 -45.123.132.0/22 -45.123.136.0/22 -45.123.148.0/22 -45.123.152.0/22 -45.123.156.0/22 -45.123.164.0/22 -45.123.168.0/22 -45.123.172.0/22 -45.123.176.0/22 -45.123.180.0/22 -45.123.184.0/22 -45.123.204.0/22 -45.123.212.0/22 -45.123.224.0/22 -45.123.228.0/22 -45.123.232.0/22 -45.123.236.0/22 -45.123.240.0/22 -45.123.244.0/22 -45.123.248.0/22 -45.123.252.0/22 -45.124.0.0/22 -45.124.20.0/22 -45.124.28.0/22 -45.124.32.0/22 -45.124.36.0/22 -45.124.44.0/22 -45.124.68.0/22 -45.124.76.0/22 -45.124.80.0/22 -45.124.100.0/22 -45.124.124.0/22 -45.124.172.0/22 -45.124.176.0/22 -45.124.208.0/22 -45.124.248.0/22 -45.125.12.0/22 -45.125.16.0/22 -45.125.24.0/22 -45.125.28.0/22 -45.125.44.0/22 -45.125.52.0/22 -45.125.56.0/22 -45.125.76.0/22 -45.125.80.0/22 -45.125.84.0/22 -45.125.88.0/22 -45.125.92.0/22 -45.125.96.0/22 -45.125.100.0/22 -45.125.104.0/22 -45.125.136.0/22 -45.126.48.0/22 -45.126.52.0/22 -45.126.100.0/22 -45.126.108.0/22 -45.126.112.0/22 -45.126.116.0/22 -45.126.120.0/22 -45.126.212.0/22 -45.126.220.0/22 -45.127.8.0/22 -45.127.12.0/22 -45.127.96.0/22 -45.127.116.0/22 -45.127.128.0/22 -45.127.144.0/22 -45.127.148.0/22 -45.127.156.0/22 -45.127.216.0/22 -45.248.8.0/22 -45.248.80.0/22 -45.248.84.0/22 -45.248.88.0/22 -45.248.96.0/22 -45.248.100.0/22 -45.248.104.0/22 -45.248.108.0/22 -45.248.128.0/22 -45.248.132.0/22 -45.248.204.0/22 -45.248.208.0/22 -45.248.212.0/22 -45.248.216.0/22 -45.248.220.0/22 -45.248.224.0/22 -45.248.228.0/22 -45.248.232.0/22 -45.248.236.0/22 -45.248.240.0/22 -45.248.244.0/22 -45.248.248.0/22 -45.248.252.0/22 -45.249.0.0/22 -45.249.4.0/22 -45.249.12.0/22 -45.249.16.0/22 -45.249.20.0/22 -45.249.24.0/22 -45.249.28.0/22 -45.249.32.0/22 -45.249.36.0/22 -45.249.92.0/22 -45.249.112.0/22 -45.249.188.0/22 -45.249.192.0/22 -45.249.196.0/22 -45.249.200.0/22 -45.249.204.0/22 -45.249.208.0/22 -45.249.212.0/22 -45.250.12.0/22 -45.250.16.0/22 -45.250.28.0/22 -45.250.32.0/22 -45.250.36.0/22 -45.250.40.0/22 -45.250.76.0/22 -45.250.80.0/22 -45.250.84.0/22 -45.250.88.0/22 -45.250.92.0/22 -45.250.96.0/22 -45.250.104.0/22 -45.250.108.0/22 -45.250.112.0/22 -45.250.116.0/22 -45.250.120.0/22 -45.250.124.0/22 -45.250.128.0/22 -45.250.132.0/22 -45.250.136.0/22 -45.250.140.0/22 -45.250.144.0/22 -45.250.148.0/22 -45.250.152.0/22 -45.250.164.0/22 -45.250.180.0/22 -45.250.184.0/22 -45.250.188.0/22 -45.250.192.0/22 -45.251.0.0/22 -45.251.8.0/22 -45.251.16.0/22 -45.251.20.0/22 -45.251.52.0/22 -45.251.84.0/22 -45.251.88.0/22 -45.251.92.0/22 -45.251.96.0/22 -45.251.100.0/22 -45.251.120.0/22 -45.251.124.0/22 -45.251.136.0/22 -45.251.140.0/22 -45.251.144.0/22 -45.251.148.0/22 -45.251.152.0/22 -45.251.156.0/22 -45.251.160.0/22 -45.251.164.0/22 -45.251.168.0/22 -45.251.172.0/22 -45.251.176.0/22 -45.251.180.0/22 -45.251.184.0/22 -45.251.188.0/22 -45.251.192.0/22 -45.251.196.0/22 -45.251.200.0/22 -45.251.204.0/22 -45.251.208.0/22 -45.251.212.0/22 -45.251.216.0/22 -45.251.220.0/22 -45.251.224.0/22 -45.251.240.0/22 -45.252.0.0/22 -45.252.4.0/22 -45.252.8.0/22 -45.252.12.0/22 -45.252.16.0/22 -45.252.20.0/22 -45.252.24.0/22 -45.252.28.0/22 -45.252.32.0/22 -45.252.36.0/22 -45.252.40.0/22 -45.252.44.0/22 -45.252.48.0/22 -45.252.60.0/22 -45.252.84.0/22 -45.252.88.0/22 -45.252.92.0/22 -45.252.96.0/22 -45.252.100.0/22 -45.252.104.0/22 -45.252.108.0/22 -45.252.112.0/22 -45.252.116.0/22 -45.252.120.0/22 -45.252.124.0/22 -45.252.128.0/22 -45.252.132.0/22 -45.252.136.0/22 -45.252.140.0/22 -45.252.144.0/22 -45.252.148.0/22 -45.252.152.0/22 -45.252.156.0/22 -45.252.160.0/22 -45.252.164.0/22 -45.252.168.0/22 -45.252.172.0/22 -45.252.176.0/22 -45.252.192.0/22 -45.252.196.0/22 -45.252.200.0/22 -45.252.204.0/22 -45.252.208.0/22 -45.252.212.0/22 -45.252.216.0/22 -45.252.220.0/22 -45.252.224.0/22 -45.252.228.0/22 -45.252.232.0/22 -45.253.0.0/22 -45.253.4.0/22 -45.253.8.0/22 -45.253.12.0/22 -45.253.16.0/22 -45.253.20.0/22 -45.253.24.0/22 -45.253.28.0/22 -45.253.32.0/22 -45.253.36.0/22 -45.253.40.0/22 -45.253.44.0/22 -45.253.48.0/22 -45.253.52.0/22 -45.253.56.0/22 -45.253.60.0/22 -45.253.64.0/22 -45.253.68.0/22 -45.253.72.0/22 -45.253.76.0/22 -45.253.80.0/22 -45.253.84.0/22 -45.253.92.0/22 -45.253.96.0/22 -45.253.100.0/22 -45.253.104.0/22 -45.253.108.0/22 -45.253.112.0/22 -45.253.116.0/22 -45.253.120.0/22 -45.253.132.0/22 -45.253.136.0/22 -45.253.140.0/22 -45.253.144.0/22 -45.253.148.0/22 -45.253.152.0/22 -45.253.156.0/22 -45.253.160.0/22 -45.253.164.0/22 -45.253.168.0/22 -45.253.172.0/22 -45.253.176.0/22 -45.253.180.0/22 -45.253.184.0/22 -45.253.188.0/22 -45.253.192.0/22 -45.253.196.0/22 -45.253.200.0/22 -45.253.204.0/22 -45.253.208.0/22 -45.253.212.0/22 -45.253.216.0/22 -45.253.220.0/22 -45.253.224.0/22 -45.253.228.0/22 -45.253.232.0/22 -45.253.236.0/22 -45.253.240.0/22 -45.253.244.0/22 -45.254.0.0/22 -45.254.4.0/22 -45.254.8.0/22 -45.254.12.0/22 -45.254.16.0/22 -45.254.20.0/22 -45.254.24.0/22 -45.254.28.0/22 -45.254.40.0/22 -45.254.48.0/22 -45.254.52.0/22 -45.254.56.0/22 -45.254.60.0/22 -45.254.64.0/22 -45.254.68.0/22 -45.254.72.0/22 -45.254.76.0/22 -45.254.80.0/22 -45.254.84.0/22 -45.254.88.0/22 -45.254.92.0/22 -45.254.96.0/22 -45.254.100.0/22 -45.254.104.0/22 -45.254.108.0/22 -45.254.112.0/22 -45.254.116.0/22 -45.254.120.0/22 -45.254.124.0/22 -45.254.128.0/22 -45.254.132.0/22 -45.254.136.0/22 -45.254.140.0/22 -45.254.144.0/22 -45.254.148.0/22 -45.254.152.0/22 -45.254.156.0/22 -45.254.160.0/22 -45.254.164.0/22 -45.254.168.0/22 -45.254.172.0/22 -45.254.176.0/22 -45.254.180.0/22 -45.254.184.0/22 -45.254.188.0/22 -45.254.192.0/22 -45.254.196.0/22 -45.254.200.0/22 -45.254.204.0/22 -45.254.208.0/22 -45.254.212.0/22 -45.254.216.0/22 -45.254.220.0/22 -45.254.224.0/22 -45.254.228.0/22 -45.254.236.0/22 -45.254.240.0/22 -45.254.248.0/22 -45.255.0.0/22 -45.255.4.0/22 -45.255.8.0/22 -45.255.12.0/22 -45.255.16.0/22 -45.255.20.0/22 -45.255.24.0/22 -45.255.28.0/22 -45.255.32.0/22 -45.255.36.0/22 -45.255.40.0/22 -45.255.44.0/22 -45.255.48.0/22 -45.255.52.0/22 -45.255.56.0/22 -45.255.60.0/22 -45.255.64.0/22 -45.255.68.0/22 -45.255.72.0/22 -45.255.76.0/22 -45.255.80.0/22 -45.255.84.0/22 -45.255.88.0/22 -45.255.92.0/22 -45.255.96.0/22 -45.255.100.0/22 -45.255.104.0/22 -45.255.108.0/22 -45.255.112.0/22 -45.255.116.0/22 -45.255.120.0/22 -45.255.124.0/22 -45.255.132.0/22 -45.255.136.0/22 -45.255.140.0/22 -45.255.144.0/22 -45.255.148.0/22 -45.255.152.0/22 -45.255.156.0/22 -45.255.160.0/22 -45.255.164.0/22 -45.255.168.0/22 -45.255.172.0/22 -45.255.176.0/22 -45.255.180.0/22 -45.255.184.0/22 -45.255.188.0/22 -45.255.192.0/22 -45.255.196.0/22 -45.255.200.0/22 -45.255.204.0/22 -45.255.208.0/22 -45.255.212.0/22 -45.255.216.0/22 -45.255.220.0/22 -45.255.224.0/22 -45.255.228.0/22 -45.255.232.0/22 -45.255.236.0/22 -45.255.240.0/22 -45.255.244.0/22 -45.255.248.0/22 -47.92.0.0/14 -47.96.0.0/11 -49.4.0.0/14 -49.51.0.0/16 -49.52.0.0/14 -49.64.0.0/11 -49.112.0.0/13 -49.120.0.0/14 -49.128.0.0/24 -49.128.2.0/23 -49.128.4.0/22 -49.140.0.0/15 -49.152.0.0/14 -49.208.0.0/15 -49.210.0.0/15 -49.220.0.0/14 -49.232.0.0/14 -49.239.0.0/18 -49.239.192.0/18 -49.246.224.0/19 -52.80.0.0/15 -52.82.0.0/15 -52.130.0.0/15 -54.222.0.0/15 -58.14.0.0/15 -58.16.0.0/16 -58.17.0.0/17 -58.17.128.0/17 -58.18.0.0/16 -58.19.0.0/16 -58.20.0.0/16 -58.21.0.0/16 -58.22.0.0/15 -58.24.0.0/15 -58.30.0.0/15 -58.32.0.0/13 -58.40.0.0/15 -58.42.0.0/16 -58.43.0.0/16 -58.44.0.0/14 -58.48.0.0/13 -58.56.0.0/15 -58.58.0.0/16 -58.59.0.0/17 -58.59.128.0/17 -58.60.0.0/14 -58.65.232.0/21 -58.66.0.0/15 -58.68.128.0/17 -58.82.0.0/17 -58.83.0.0/17 -58.83.128.0/17 -58.87.64.0/18 -58.99.128.0/17 -58.100.0.0/15 -58.116.0.0/14 -58.128.0.0/13 -58.144.0.0/16 -58.154.0.0/15 -58.192.0.0/15 -58.194.0.0/15 -58.196.0.0/15 -58.198.0.0/15 -58.200.0.0/13 -58.208.0.0/12 -58.240.0.0/15 -58.242.0.0/15 -58.244.0.0/15 -58.246.0.0/15 -58.248.0.0/13 -59.32.0.0/13 -59.40.0.0/15 -59.42.0.0/16 -59.43.0.0/16 -59.44.0.0/14 -59.48.0.0/16 -59.49.0.0/17 -59.49.128.0/17 -59.50.0.0/16 -59.51.0.0/17 -59.51.128.0/17 -59.52.0.0/14 -59.56.0.0/14 -59.60.0.0/15 -59.62.0.0/15 -59.64.0.0/14 -59.68.0.0/14 -59.72.0.0/15 -59.74.0.0/15 -59.76.0.0/16 -59.77.0.0/16 -59.78.0.0/15 -59.80.0.0/15 -59.82.0.0/15 -59.107.0.0/17 -59.107.128.0/17 -59.108.0.0/15 -59.110.0.0/15 -59.151.0.0/17 -59.152.16.0/22 -59.152.20.0/22 -59.152.24.0/22 -59.152.28.0/22 -59.152.32.0/22 -59.152.36.0/22 -59.152.64.0/22 -59.152.68.0/22 -59.152.72.0/22 -59.152.76.0/22 -59.152.112.0/22 -59.152.116.0/22 -59.153.4.0/22 -59.153.32.0/22 -59.153.60.0/22 -59.153.64.0/22 -59.153.68.0/22 -59.153.72.0/22 -59.153.92.0/22 -59.153.116.0/22 -59.153.136.0/22 -59.153.152.0/22 -59.153.156.0/22 -59.153.164.0/22 -59.153.168.0/22 -59.153.172.0/22 -59.153.176.0/22 -59.153.180.0/22 -59.153.184.0/22 -59.153.188.0/22 -59.153.192.0/22 -59.155.0.0/16 -59.172.0.0/15 -59.174.0.0/15 -59.191.0.0/17 -59.191.240.0/20 -59.192.0.0/10 -60.0.0.0/13 -60.8.0.0/15 -60.10.0.0/16 -60.11.0.0/16 -60.12.0.0/16 -60.13.0.0/18 -60.13.64.0/18 -60.13.128.0/17 -60.14.0.0/15 -60.16.0.0/13 -60.24.0.0/14 -60.28.0.0/15 -60.30.0.0/16 -60.31.0.0/16 -60.55.0.0/16 -60.63.0.0/16 -60.160.0.0/15 -60.162.0.0/15 -60.164.0.0/15 -60.166.0.0/15 -60.168.0.0/13 -60.176.0.0/12 -60.194.0.0/15 -60.200.0.0/14 -60.204.0.0/16 -60.205.0.0/16 -60.206.0.0/15 -60.208.0.0/13 -60.216.0.0/15 -60.218.0.0/15 -60.220.0.0/14 -60.232.0.0/15 -60.235.0.0/16 -60.245.128.0/17 -60.247.0.0/16 -60.252.0.0/16 -60.253.128.0/17 -60.255.0.0/16 -61.4.80.0/22 -61.4.84.0/22 -61.4.88.0/21 -61.4.176.0/20 -61.8.160.0/20 -61.14.212.0/22 -61.14.216.0/22 -61.14.220.0/22 -61.14.240.0/22 -61.14.244.0/22 -61.28.0.0/20 -61.28.16.0/20 -61.28.32.0/19 -61.28.64.0/18 -61.29.128.0/18 -61.29.192.0/19 -61.29.224.0/20 -61.29.240.0/21 -61.29.248.0/22 -61.29.254.0/23 -61.45.128.0/18 -61.45.224.0/20 -61.47.128.0/18 -61.48.0.0/14 -61.52.0.0/15 -61.54.0.0/16 -61.55.0.0/16 -61.87.192.0/18 -61.128.0.0/15 -61.130.0.0/15 -61.132.0.0/16 -61.133.0.0/17 -61.133.128.0/17 -61.134.0.0/18 -61.134.64.0/19 -61.134.96.0/19 -61.134.128.0/18 -61.134.192.0/18 -61.135.0.0/16 -61.136.0.0/18 -61.136.64.0/18 -61.136.128.0/17 -61.137.0.0/17 -61.137.128.0/17 -61.138.0.0/18 -61.138.64.0/18 -61.138.128.0/18 -61.138.192.0/18 -61.139.0.0/17 -61.139.128.0/18 -61.139.192.0/18 -61.140.0.0/14 -61.144.0.0/14 -61.148.0.0/15 -61.150.0.0/15 -61.152.0.0/16 -61.153.0.0/16 -61.154.0.0/15 -61.156.0.0/16 -61.157.0.0/16 -61.158.0.0/17 -61.158.128.0/17 -61.159.0.0/18 -61.159.64.0/18 -61.159.128.0/17 -61.160.0.0/16 -61.161.0.0/18 -61.161.64.0/18 -61.161.128.0/17 -61.162.0.0/16 -61.163.0.0/16 -61.164.0.0/16 -61.165.0.0/16 -61.166.0.0/16 -61.167.0.0/16 -61.168.0.0/16 -61.169.0.0/16 -61.170.0.0/15 -61.172.0.0/14 -61.176.0.0/16 -61.177.0.0/16 -61.178.0.0/16 -61.179.0.0/16 -61.180.0.0/17 -61.180.128.0/17 -61.181.0.0/16 -61.182.0.0/16 -61.183.0.0/16 -61.184.0.0/14 -61.188.0.0/16 -61.189.0.0/17 -61.189.128.0/17 -61.190.0.0/15 -61.232.0.0/14 -61.236.0.0/15 -61.240.0.0/14 -62.234.0.0/16 -68.79.0.0/18 -69.230.192.0/18 -69.231.128.0/18 -69.234.192.0/18 -69.235.128.0/18 -71.131.192.0/18 -71.132.0.0/18 -71.136.64.0/18 -71.137.0.0/18 -81.68.0.0/14 -82.156.0.0/15 -94.191.0.0/17 -101.0.0.0/22 -101.1.0.0/22 -101.2.172.0/22 -101.4.0.0/14 -101.16.0.0/12 -101.33.128.0/17 -101.34.0.0/15 -101.36.0.0/18 -101.36.64.0/19 -101.36.128.0/17 -101.37.0.0/16 -101.38.0.0/15 -101.40.0.0/15 -101.42.0.0/15 -101.44.0.0/14 -101.48.0.0/15 -101.50.8.0/22 -101.50.12.0/22 -101.50.56.0/22 -101.52.0.0/16 -101.53.100.0/22 -101.54.0.0/16 -101.55.224.0/21 -101.64.0.0/13 -101.72.0.0/14 -101.76.0.0/15 -101.78.0.0/22 -101.78.32.0/19 -101.80.0.0/12 -101.96.0.0/21 -101.96.8.0/22 -101.96.16.0/20 -101.96.128.0/17 -101.99.96.0/19 -101.101.64.0/19 -101.101.100.0/24 -101.101.102.0/23 -101.101.104.0/21 -101.101.112.0/20 -101.102.64.0/19 -101.102.100.0/23 -101.102.102.0/24 -101.102.104.0/21 -101.102.112.0/20 -101.104.0.0/14 -101.110.64.0/19 -101.110.96.0/20 -101.110.116.0/22 -101.110.120.0/21 -101.120.0.0/14 -101.124.0.0/15 -101.126.0.0/16 -101.128.0.0/22 -101.128.8.0/21 -101.128.16.0/20 -101.128.32.0/19 -101.129.0.0/16 -101.130.0.0/15 -101.132.0.0/14 -101.144.0.0/12 -101.192.0.0/14 -101.196.0.0/16 -101.197.0.0/16 -101.198.0.0/15 -101.200.0.0/15 -101.203.128.0/19 -101.203.160.0/21 -101.203.172.0/22 -101.203.176.0/20 -101.204.0.0/14 -101.224.0.0/13 -101.232.0.0/15 -101.234.64.0/21 -101.234.76.0/22 -101.234.80.0/20 -101.234.96.0/19 -101.236.0.0/14 -101.240.0.0/14 -101.244.0.0/14 -101.248.0.0/15 -101.251.0.0/22 -101.251.8.0/21 -101.251.16.0/20 -101.251.32.0/19 -101.251.64.0/18 -101.251.128.0/17 -101.252.0.0/15 -101.254.0.0/16 -103.1.8.0/22 -103.1.20.0/22 -103.1.24.0/22 -103.1.72.0/22 -103.1.88.0/22 -103.1.168.0/22 -103.2.108.0/22 -103.2.156.0/22 -103.2.164.0/22 -103.2.200.0/22 -103.2.204.0/22 -103.2.208.0/22 -103.2.212.0/22 -103.3.84.0/22 -103.3.88.0/22 -103.3.92.0/22 -103.3.96.0/22 -103.3.100.0/22 -103.3.104.0/22 -103.3.108.0/22 -103.3.112.0/22 -103.3.116.0/22 -103.3.120.0/22 -103.3.124.0/22 -103.3.128.0/22 -103.3.132.0/22 -103.3.136.0/22 -103.3.140.0/22 -103.3.148.0/22 -103.3.152.0/22 -103.3.156.0/22 -103.4.56.0/22 -103.4.168.0/22 -103.4.184.0/22 -103.4.224.0/22 -103.5.36.0/22 -103.5.52.0/22 -103.5.56.0/22 -103.5.152.0/22 -103.5.168.0/22 -103.5.192.0/22 -103.5.252.0/22 -103.6.76.0/22 -103.6.108.0/22 -103.6.220.0/22 -103.6.228.0/22 -103.7.4.0/22 -103.7.28.0/22 -103.7.140.0/22 -103.7.212.0/22 -103.7.216.0/22 -103.7.220.0/22 -103.8.0.0/22 -103.8.4.0/22 -103.8.8.0/22 -103.8.32.0/22 -103.8.52.0/22 -103.8.68.0/22 -103.8.108.0/22 -103.8.156.0/22 -103.8.200.0/22 -103.8.204.0/22 -103.8.220.0/22 -103.9.8.0/22 -103.9.24.0/22 -103.9.108.0/22 -103.9.152.0/22 -103.9.192.0/22 -103.9.248.0/22 -103.9.252.0/22 -103.10.0.0/22 -103.10.16.0/22 -103.10.84.0/22 -103.10.140.0/22 -103.11.16.0/22 -103.11.168.0/22 -103.11.180.0/22 -103.12.32.0/22 -103.12.68.0/22 -103.12.92.0/22 -103.12.136.0/22 -103.12.184.0/22 -103.12.232.0/22 -103.13.12.0/22 -103.13.124.0/22 -103.13.144.0/22 -103.13.196.0/22 -103.13.220.0/22 -103.13.244.0/22 -103.14.32.0/22 -103.14.84.0/22 -103.14.100.0/22 -103.14.132.0/22 -103.14.136.0/22 -103.14.156.0/22 -103.14.240.0/22 -103.15.4.0/22 -103.15.8.0/22 -103.15.16.0/22 -103.15.96.0/22 -103.15.200.0/22 -103.16.52.0/22 -103.16.80.0/22 -103.16.84.0/22 -103.16.88.0/22 -103.16.108.0/22 -103.16.124.0/22 -103.17.40.0/22 -103.17.64.0/22 -103.17.120.0/22 -103.17.136.0/22 -103.17.160.0/22 -103.17.204.0/22 -103.17.228.0/22 -103.18.192.0/22 -103.18.208.0/22 -103.18.212.0/22 -103.18.224.0/22 -103.19.0.0/22 -103.19.12.0/22 -103.19.40.0/22 -103.19.44.0/22 -103.19.64.0/22 -103.19.68.0/22 -103.19.72.0/22 -103.19.232.0/22 -103.20.12.0/22 -103.20.32.0/22 -103.20.44.0/22 -103.20.68.0/22 -103.20.112.0/22 -103.20.128.0/22 -103.20.160.0/22 -103.20.248.0/22 -103.21.112.0/22 -103.21.116.0/22 -103.21.136.0/22 -103.21.140.0/22 -103.21.176.0/22 -103.21.208.0/22 -103.21.240.0/22 -103.22.0.0/22 -103.22.4.0/22 -103.22.8.0/22 -103.22.12.0/22 -103.22.16.0/22 -103.22.20.0/22 -103.22.24.0/22 -103.22.28.0/22 -103.22.32.0/22 -103.22.36.0/22 -103.22.40.0/22 -103.22.44.0/22 -103.22.48.0/22 -103.22.52.0/22 -103.22.56.0/22 -103.22.60.0/22 -103.22.64.0/22 -103.22.68.0/22 -103.22.72.0/22 -103.22.76.0/22 -103.22.80.0/22 -103.22.84.0/22 -103.22.88.0/22 -103.22.92.0/22 -103.22.100.0/22 -103.22.104.0/22 -103.22.108.0/22 -103.22.112.0/22 -103.22.116.0/22 -103.22.120.0/22 -103.22.124.0/22 -103.22.188.0/22 -103.22.228.0/22 -103.22.252.0/22 -103.23.8.0/22 -103.23.56.0/22 -103.23.160.0/22 -103.23.164.0/22 -103.23.176.0/22 -103.23.228.0/22 -103.24.24.0/22 -103.24.116.0/22 -103.24.128.0/22 -103.24.144.0/22 -103.24.176.0/22 -103.24.184.0/22 -103.24.220.0/22 -103.24.228.0/22 -103.24.248.0/22 -103.24.252.0/22 -103.25.8.0/23 -103.25.20.0/22 -103.25.24.0/22 -103.25.28.0/22 -103.25.32.0/22 -103.25.36.0/22 -103.25.40.0/22 -103.25.48.0/22 -103.25.64.0/22 -103.25.68.0/22 -103.25.148.0/22 -103.25.156.0/22 -103.25.216.0/22 -103.26.0.0/22 -103.26.64.0/22 -103.26.76.0/22 -103.26.132.0/22 -103.26.156.0/22 -103.26.160.0/22 -103.26.228.0/22 -103.26.240.0/22 -103.27.4.0/22 -103.27.12.0/22 -103.27.24.0/22 -103.27.56.0/22 -103.27.96.0/22 -103.27.184.0/22 -103.27.208.0/22 -103.27.212.0/22 -103.27.240.0/22 -103.28.4.0/22 -103.28.8.0/22 -103.28.184.0/22 -103.28.204.0/22 -103.28.212.0/22 -103.29.16.0/22 -103.29.128.0/22 -103.29.132.0/22 -103.29.136.0/22 -103.30.20.0/22 -103.30.96.0/22 -103.30.148.0/22 -103.30.200.0/22 -103.30.228.0/22 -103.30.236.0/22 -103.31.0.0/22 -103.31.48.0/22 -103.31.52.0/22 -103.31.56.0/22 -103.31.60.0/22 -103.31.64.0/22 -103.31.68.0/22 -103.31.148.0/22 -103.31.160.0/22 -103.31.168.0/22 -103.31.200.0/22 -103.31.236.0/22 -103.32.0.0/22 -103.32.4.0/22 -103.32.8.0/22 -103.32.12.0/22 -103.32.16.0/22 -103.32.20.0/22 -103.32.24.0/22 -103.32.28.0/22 -103.32.32.0/22 -103.32.36.0/22 -103.32.40.0/22 -103.32.44.0/22 -103.32.48.0/22 -103.32.52.0/22 -103.32.56.0/22 -103.32.60.0/22 -103.32.64.0/22 -103.32.68.0/22 -103.32.72.0/22 -103.32.76.0/22 -103.32.80.0/22 -103.32.84.0/22 -103.32.88.0/22 -103.32.92.0/22 -103.32.96.0/22 -103.32.100.0/22 -103.32.104.0/22 -103.32.108.0/22 -103.32.112.0/22 -103.32.116.0/22 -103.32.120.0/22 -103.32.124.0/22 -103.32.128.0/22 -103.32.132.0/22 -103.32.136.0/22 -103.32.140.0/22 -103.32.144.0/22 -103.32.148.0/22 -103.32.152.0/22 -103.32.156.0/22 -103.32.160.0/22 -103.32.164.0/22 -103.32.168.0/22 -103.32.172.0/22 -103.32.176.0/22 -103.32.180.0/22 -103.32.184.0/22 -103.32.188.0/22 -103.32.192.0/22 -103.32.196.0/22 -103.32.200.0/22 -103.32.204.0/22 -103.32.208.0/22 -103.32.212.0/22 -103.32.216.0/22 -103.32.220.0/22 -103.32.224.0/22 -103.32.228.0/22 -103.32.232.0/22 -103.32.236.0/22 -103.32.240.0/22 -103.32.244.0/22 -103.32.248.0/22 -103.32.252.0/22 -103.33.0.0/22 -103.33.4.0/22 -103.33.8.0/22 -103.33.12.0/22 -103.33.16.0/22 -103.33.20.0/22 -103.33.24.0/22 -103.33.28.0/22 -103.33.32.0/22 -103.33.36.0/22 -103.33.40.0/22 -103.33.44.0/22 -103.33.48.0/22 -103.33.52.0/22 -103.33.56.0/22 -103.33.60.0/22 -103.33.64.0/22 -103.33.68.0/22 -103.33.72.0/22 -103.33.76.0/22 -103.33.80.0/22 -103.33.84.0/22 -103.33.88.0/22 -103.33.92.0/22 -103.33.96.0/22 -103.33.100.0/22 -103.33.104.0/22 -103.33.108.0/22 -103.33.112.0/22 -103.33.116.0/22 -103.33.120.0/22 -103.33.124.0/22 -103.33.128.0/22 -103.33.132.0/22 -103.33.136.0/22 -103.33.140.0/22 -103.33.144.0/22 -103.33.148.0/22 -103.33.152.0/22 -103.33.156.0/22 -103.33.160.0/22 -103.33.164.0/22 -103.33.168.0/22 -103.33.172.0/22 -103.33.176.0/22 -103.33.180.0/22 -103.33.184.0/22 -103.33.188.0/22 -103.33.192.0/22 -103.33.196.0/22 -103.33.200.0/22 -103.33.204.0/22 -103.33.208.0/22 -103.33.212.0/22 -103.33.216.0/22 -103.33.220.0/22 -103.33.224.0/22 -103.33.228.0/22 -103.33.232.0/22 -103.33.236.0/22 -103.33.240.0/22 -103.33.244.0/22 -103.33.248.0/22 -103.33.252.0/22 -103.34.0.0/22 -103.34.4.0/22 -103.34.8.0/22 -103.34.12.0/22 -103.34.16.0/22 -103.34.20.0/22 -103.34.24.0/22 -103.34.28.0/22 -103.34.32.0/22 -103.34.36.0/22 -103.34.40.0/22 -103.34.44.0/22 -103.34.48.0/22 -103.34.52.0/22 -103.34.56.0/22 -103.34.60.0/22 -103.34.64.0/22 -103.34.68.0/22 -103.34.72.0/22 -103.34.76.0/22 -103.34.80.0/22 -103.34.84.0/22 -103.34.88.0/22 -103.34.92.0/22 -103.34.96.0/22 -103.34.100.0/22 -103.34.104.0/22 -103.34.108.0/22 -103.34.112.0/22 -103.34.116.0/22 -103.34.120.0/22 -103.34.124.0/22 -103.34.128.0/22 -103.34.132.0/22 -103.34.136.0/22 -103.34.140.0/22 -103.34.144.0/22 -103.34.148.0/22 -103.34.152.0/22 -103.34.156.0/22 -103.34.160.0/22 -103.34.164.0/22 -103.34.168.0/22 -103.34.172.0/22 -103.34.176.0/22 -103.34.180.0/22 -103.34.184.0/22 -103.34.188.0/22 -103.34.192.0/22 -103.34.196.0/22 -103.34.200.0/22 -103.34.204.0/22 -103.34.208.0/22 -103.34.212.0/22 -103.34.216.0/22 -103.34.220.0/22 -103.34.224.0/22 -103.34.228.0/22 -103.34.232.0/22 -103.34.236.0/22 -103.34.240.0/22 -103.34.244.0/22 -103.34.248.0/22 -103.34.252.0/22 -103.35.0.0/22 -103.35.4.0/22 -103.35.8.0/22 -103.35.12.0/22 -103.35.16.0/22 -103.35.20.0/22 -103.35.24.0/22 -103.35.28.0/22 -103.35.32.0/22 -103.35.36.0/22 -103.35.40.0/22 -103.35.44.0/22 -103.35.48.0/22 -103.35.104.0/22 -103.35.116.0/22 -103.35.180.0/22 -103.35.200.0/22 -103.35.220.0/22 -103.36.28.0/22 -103.36.36.0/22 -103.36.56.0/22 -103.36.60.0/22 -103.36.64.0/22 -103.36.72.0/22 -103.36.96.0/22 -103.36.132.0/22 -103.36.136.0/22 -103.36.160.0/22 -103.36.164.0/22 -103.36.168.0/22 -103.36.172.0/22 -103.36.176.0/22 -103.36.180.0/22 -103.36.184.0/22 -103.36.188.0/22 -103.36.192.0/22 -103.36.196.0/22 -103.36.200.0/22 -103.36.204.0/22 -103.36.208.0/22 -103.36.212.0/22 -103.36.216.0/22 -103.36.220.0/22 -103.36.224.0/22 -103.36.228.0/22 -103.36.232.0/22 -103.36.236.0/22 -103.36.240.0/22 -103.36.244.0/22 -103.37.0.0/22 -103.37.12.0/22 -103.37.16.0/22 -103.37.24.0/22 -103.37.44.0/22 -103.37.52.0/22 -103.37.56.0/22 -103.37.72.0/22 -103.37.100.0/22 -103.37.104.0/22 -103.37.124.0/22 -103.37.136.0/22 -103.37.140.0/22 -103.37.144.0/22 -103.37.148.0/22 -103.37.152.0/22 -103.37.156.0/22 -103.37.160.0/22 -103.37.164.0/22 -103.37.172.0/22 -103.37.176.0/22 -103.37.188.0/22 -103.37.208.0/22 -103.37.212.0/22 -103.37.216.0/22 -103.37.220.0/22 -103.37.248.0/22 -103.37.252.0/22 -103.38.0.0/22 -103.38.32.0/22 -103.38.40.0/22 -103.38.44.0/22 -103.38.56.0/22 -103.38.76.0/22 -103.38.84.0/22 -103.38.92.0/22 -103.38.96.0/22 -103.38.116.0/22 -103.38.132.0/22 -103.38.140.0/22 -103.38.224.0/22 -103.38.228.0/22 -103.38.232.0/22 -103.39.16.0/22 -103.39.64.0/22 -103.39.88.0/22 -103.39.100.0/22 -103.39.104.0/22 -103.39.108.0/22 -103.39.160.0/22 -103.39.164.0/22 -103.39.168.0/22 -103.39.172.0/22 -103.39.176.0/22 -103.39.180.0/22 -103.39.184.0/22 -103.39.188.0/22 -103.39.200.0/22 -103.39.204.0/22 -103.39.208.0/22 -103.39.212.0/22 -103.39.216.0/22 -103.39.220.0/22 -103.39.224.0/22 -103.39.228.0/22 -103.39.232.0/22 -103.40.12.0/22 -103.40.16.0/22 -103.40.20.0/22 -103.40.24.0/22 -103.40.28.0/22 -103.40.32.0/22 -103.40.36.0/22 -103.40.40.0/22 -103.40.44.0/22 -103.40.88.0/22 -103.40.100.0/22 -103.40.192.0/22 -103.40.212.0/22 -103.40.220.0/22 -103.40.228.0/22 -103.40.232.0/22 -103.40.236.0/22 -103.40.240.0/22 -103.40.244.0/22 -103.40.248.0/22 -103.40.252.0/22 -103.41.0.0/22 -103.41.16.0/22 -103.41.52.0/22 -103.41.140.0/22 -103.41.148.0/22 -103.41.152.0/22 -103.41.160.0/22 -103.41.164.0/22 -103.41.220.0/22 -103.41.224.0/22 -103.41.228.0/22 -103.41.232.0/22 -103.42.8.0/22 -103.42.24.0/22 -103.42.28.0/22 -103.42.32.0/22 -103.42.64.0/22 -103.42.68.0/22 -103.42.76.0/22 -103.42.104.0/22 -103.42.180.0/22 -103.42.232.0/22 -103.43.16.0/22 -103.43.84.0/22 -103.43.96.0/22 -103.43.100.0/22 -103.43.104.0/22 -103.43.124.0/22 -103.43.184.0/22 -103.43.192.0/22 -103.43.196.0/22 -103.43.208.0/22 -103.43.220.0/22 -103.43.224.0/22 -103.43.240.0/22 -103.44.56.0/22 -103.44.80.0/22 -103.44.88.0/22 -103.44.120.0/22 -103.44.124.0/22 -103.44.132.0/22 -103.44.144.0/22 -103.44.168.0/22 -103.44.176.0/22 -103.44.180.0/22 -103.44.184.0/22 -103.44.188.0/22 -103.44.192.0/22 -103.44.196.0/22 -103.44.200.0/22 -103.44.204.0/22 -103.44.224.0/22 -103.44.236.0/22 -103.44.240.0/22 -103.44.244.0/22 -103.44.248.0/22 -103.44.252.0/22 -103.45.0.0/22 -103.45.4.0/22 -103.45.8.0/22 -103.45.12.0/22 -103.45.16.0/22 -103.45.20.0/22 -103.45.24.0/22 -103.45.28.0/22 -103.45.32.0/22 -103.45.36.0/22 -103.45.40.0/22 -103.45.44.0/22 -103.45.48.0/22 -103.45.52.0/22 -103.45.56.0/22 -103.45.60.0/22 -103.45.72.0/22 -103.45.76.0/22 -103.45.80.0/22 -103.45.84.0/22 -103.45.88.0/22 -103.45.92.0/22 -103.45.96.0/22 -103.45.100.0/22 -103.45.104.0/22 -103.45.108.0/22 -103.45.112.0/22 -103.45.116.0/22 -103.45.120.0/22 -103.45.124.0/22 -103.45.128.0/22 -103.45.132.0/22 -103.45.136.0/22 -103.45.140.0/22 -103.45.144.0/22 -103.45.148.0/22 -103.45.152.0/22 -103.45.156.0/22 -103.45.160.0/22 -103.45.164.0/22 -103.45.168.0/22 -103.45.172.0/22 -103.45.176.0/22 -103.45.180.0/22 -103.45.184.0/22 -103.45.188.0/22 -103.45.192.0/22 -103.45.196.0/22 -103.45.200.0/22 -103.45.204.0/22 -103.45.208.0/22 -103.45.212.0/22 -103.45.216.0/22 -103.45.220.0/22 -103.45.224.0/22 -103.45.248.0/22 -103.46.0.0/22 -103.46.12.0/22 -103.46.16.0/22 -103.46.20.0/22 -103.46.24.0/22 -103.46.28.0/22 -103.46.32.0/22 -103.46.36.0/22 -103.46.40.0/22 -103.46.44.0/22 -103.46.48.0/22 -103.46.52.0/22 -103.46.56.0/22 -103.46.60.0/22 -103.46.64.0/22 -103.46.68.0/22 -103.46.72.0/22 -103.46.76.0/22 -103.46.80.0/22 -103.46.84.0/22 -103.46.88.0/22 -103.46.92.0/22 -103.46.96.0/22 -103.46.100.0/22 -103.46.104.0/22 -103.46.108.0/22 -103.46.112.0/22 -103.46.116.0/22 -103.46.120.0/22 -103.46.124.0/22 -103.46.128.0/22 -103.46.132.0/22 -103.46.136.0/22 -103.46.152.0/22 -103.46.156.0/22 -103.46.160.0/22 -103.46.164.0/22 -103.46.168.0/22 -103.46.172.0/22 -103.46.176.0/22 -103.46.180.0/22 -103.46.244.0/22 -103.46.248.0/22 -103.47.4.0/22 -103.47.20.0/22 -103.47.36.0/22 -103.47.40.0/22 -103.47.48.0/22 -103.47.80.0/22 -103.47.96.0/22 -103.47.108.0/22 -103.47.116.0/22 -103.47.120.0/22 -103.47.136.0/22 -103.47.140.0/22 -103.47.212.0/22 -103.48.52.0/22 -103.48.92.0/22 -103.48.144.0/22 -103.48.148.0/22 -103.48.152.0/22 -103.48.156.0/22 -103.48.202.0/23 -103.48.216.0/22 -103.48.220.0/22 -103.48.224.0/22 -103.48.228.0/22 -103.48.232.0/22 -103.48.236.0/22 -103.48.240.0/22 -103.48.244.0/22 -103.49.12.0/22 -103.49.20.0/22 -103.49.72.0/22 -103.49.76.0/22 -103.49.92.0/22 -103.49.96.0/22 -103.49.108.0/22 -103.49.128.0/22 -103.49.176.0/22 -103.49.180.0/22 -103.49.196.0/22 -103.50.36.0/22 -103.50.44.0/22 -103.50.48.0/22 -103.50.52.0/22 -103.50.56.0/22 -103.50.60.0/22 -103.50.64.0/22 -103.50.68.0/22 -103.50.72.0/22 -103.50.108.0/22 -103.50.112.0/22 -103.50.116.0/22 -103.50.120.0/22 -103.50.124.0/22 -103.50.132.0/22 -103.50.136.0/22 -103.50.140.0/22 -103.50.172.0/22 -103.50.176.0/22 -103.50.180.0/22 -103.50.184.0/22 -103.50.188.0/22 -103.50.192.0/22 -103.50.196.0/22 -103.50.200.0/22 -103.50.220.0/22 -103.50.224.0/22 -103.50.228.0/22 -103.50.232.0/22 -103.50.236.0/22 -103.50.240.0/22 -103.50.244.0/22 -103.50.248.0/22 -103.52.40.0/22 -103.52.72.0/22 -103.52.76.0/22 -103.52.80.0/22 -103.52.84.0/22 -103.52.96.0/22 -103.52.100.0/22 -103.52.104.0/22 -103.52.160.0/22 -103.52.164.0/22 -103.52.172.0/22 -103.52.176.0/22 -103.52.184.0/22 -103.52.196.0/22 -103.53.64.0/22 -103.53.68.0/22 -103.53.92.0/22 -103.53.100.0/22 -103.53.124.0/22 -103.53.128.0/22 -103.53.132.0/22 -103.53.136.0/22 -103.53.140.0/22 -103.53.144.0/22 -103.53.180.0/22 -103.53.204.0/22 -103.53.208.0/22 -103.53.212.0/22 -103.53.216.0/22 -103.53.236.0/22 -103.53.248.0/22 -103.54.8.0/22 -103.54.48.0/22 -103.54.60.0/22 -103.54.160.0/22 -103.54.164.0/22 -103.54.212.0/22 -103.54.240.0/22 -103.55.24.0/22 -103.55.80.0/22 -103.55.120.0/22 -103.55.152.0/22 -103.55.172.0/22 -103.55.204.0/22 -103.55.208.0/22 -103.55.228.0/22 -103.55.236.0/22 -103.56.8.0/22 -103.56.16.0/22 -103.56.20.0/22 -103.56.32.0/22 -103.56.56.0/22 -103.56.60.0/22 -103.56.72.0/22 -103.56.76.0/22 -103.56.140.0/22 -103.56.152.0/22 -103.56.184.0/22 -103.56.200.0/22 -103.57.12.0/22 -103.57.52.0/22 -103.57.56.0/22 -103.57.76.0/22 -103.57.136.0/22 -103.57.196.0/22 -103.58.24.0/22 -103.59.76.0/22 -103.59.100.0/22 -103.59.112.0/22 -103.59.116.0/22 -103.59.120.0/22 -103.59.124.0/22 -103.59.128.0/22 -103.59.148.0/22 -103.59.164.0/22 -103.60.32.0/22 -103.60.44.0/22 -103.60.164.0/22 -103.60.228.0/22 -103.60.236.0/22 -103.61.60.0/22 -103.61.104.0/22 -103.61.140.0/22 -103.61.152.0/22 -103.61.156.0/22 -103.61.160.0/22 -103.61.172.0/22 -103.61.176.0/22 -103.61.188.0/22 -103.62.24.0/22 -103.62.52.0/22 -103.62.72.0/22 -103.62.76.0/22 -103.62.80.0/22 -103.62.84.0/22 -103.62.88.0/22 -103.62.96.0/22 -103.62.100.0/22 -103.62.104.0/22 -103.62.108.0/22 -103.62.112.0/22 -103.62.116.0/22 -103.62.120.0/22 -103.62.124.0/22 -103.62.128.0/22 -103.62.132.0/22 -103.62.156.0/22 -103.62.160.0/22 -103.62.164.0/22 -103.62.168.0/22 -103.62.172.0/22 -103.62.176.0/22 -103.62.180.0/22 -103.62.184.0/22 -103.62.188.0/22 -103.62.192.0/22 -103.62.204.0/22 -103.62.208.0/22 -103.62.212.0/22 -103.62.216.0/22 -103.62.220.0/22 -103.62.224.0/22 -103.63.32.0/22 -103.63.36.0/22 -103.63.40.0/22 -103.63.44.0/22 -103.63.48.0/22 -103.63.52.0/22 -103.63.56.0/22 -103.63.60.0/22 -103.63.64.0/22 -103.63.68.0/22 -103.63.72.0/22 -103.63.76.0/22 -103.63.80.0/22 -103.63.84.0/22 -103.63.88.0/22 -103.63.140.0/22 -103.63.144.0/22 -103.63.152.0/22 -103.63.160.0/22 -103.63.164.0/22 -103.63.168.0/22 -103.63.172.0/22 -103.63.176.0/22 -103.63.180.0/22 -103.63.184.0/22 -103.63.192.0/22 -103.63.196.0/22 -103.63.200.0/22 -103.63.204.0/22 -103.63.208.0/22 -103.63.240.0/22 -103.63.244.0/22 -103.63.248.0/22 -103.63.252.0/22 -103.64.0.0/22 -103.64.4.0/22 -103.64.24.0/22 -103.64.28.0/22 -103.64.32.0/22 -103.64.36.0/22 -103.64.40.0/22 -103.64.44.0/22 -103.64.48.0/22 -103.64.52.0/22 -103.64.56.0/22 -103.64.60.0/22 -103.64.64.0/22 -103.64.68.0/22 -103.64.72.0/22 -103.64.76.0/22 -103.64.80.0/22 -103.64.84.0/22 -103.64.88.0/22 -103.64.92.0/22 -103.64.96.0/22 -103.64.100.0/22 -103.64.104.0/22 -103.64.108.0/22 -103.64.112.0/22 -103.64.116.0/22 -103.64.120.0/22 -103.64.124.0/22 -103.64.140.0/22 -103.64.144.0/22 -103.64.152.0/22 -103.64.156.0/22 -103.64.160.0/22 -103.64.164.0/22 -103.64.168.0/22 -103.64.172.0/22 -103.64.176.0/22 -103.64.180.0/22 -103.64.184.0/22 -103.64.188.0/22 -103.64.192.0/22 -103.64.196.0/22 -103.64.200.0/22 -103.64.204.0/22 -103.64.208.0/22 -103.64.212.0/22 -103.64.216.0/22 -103.64.220.0/22 -103.64.224.0/22 -103.64.228.0/22 -103.64.232.0/22 -103.64.236.0/22 -103.64.240.0/22 -103.64.244.0/22 -103.64.248.0/22 -103.64.252.0/22 -103.65.0.0/22 -103.65.4.0/22 -103.65.8.0/22 -103.65.12.0/22 -103.65.16.0/22 -103.65.36.0/22 -103.65.40.0/22 -103.65.48.0/22 -103.65.52.0/22 -103.65.56.0/22 -103.65.60.0/22 -103.65.64.0/22 -103.65.68.0/22 -103.65.72.0/22 -103.65.76.0/22 -103.65.80.0/22 -103.65.84.0/22 -103.65.88.0/22 -103.65.92.0/22 -103.65.100.0/22 -103.65.104.0/22 -103.65.108.0/22 -103.65.112.0/22 -103.65.144.0/22 -103.65.148.0/22 -103.65.152.0/22 -103.65.156.0/22 -103.65.160.0/22 -103.65.164.0/22 -103.65.168.0/22 -103.65.172.0/22 -103.66.32.0/22 -103.66.40.0/22 -103.66.92.0/22 -103.66.108.0/22 -103.66.200.0/22 -103.66.216.0/22 -103.66.240.0/22 -103.66.244.0/22 -103.66.248.0/22 -103.66.252.0/22 -103.67.0.0/22 -103.67.4.0/22 -103.67.8.0/22 -103.67.100.0/22 -103.67.104.0/22 -103.67.108.0/22 -103.67.112.0/22 -103.67.116.0/22 -103.67.120.0/22 -103.67.124.0/22 -103.67.128.0/22 -103.67.132.0/22 -103.67.136.0/22 -103.67.140.0/22 -103.67.144.0/22 -103.67.148.0/22 -103.67.172.0/22 -103.67.192.0/22 -103.67.212.0/22 -103.67.252.0/22 -103.68.64.0/22 -103.68.88.0/22 -103.68.100.0/22 -103.68.128.0/22 -103.68.192.0/22 -103.69.16.0/22 -103.69.116.0/22 -103.69.132.0/22 -103.69.152.0/22 -103.69.212.0/22 -103.70.8.0/22 -103.70.148.0/22 -103.70.184.0/22 -103.70.220.0/22 -103.70.224.0/22 -103.70.236.0/22 -103.70.252.0/22 -103.71.0.0/22 -103.71.32.0/22 -103.71.48.0/22 -103.71.68.0/22 -103.71.72.0/22 -103.71.80.0/22 -103.71.84.0/22 -103.71.88.0/22 -103.71.120.0/22 -103.71.124.0/22 -103.71.128.0/22 -103.71.144.0/22 -103.71.196.0/22 -103.71.200.0/22 -103.71.232.0/22 -103.72.12.0/22 -103.72.16.0/22 -103.72.20.0/22 -103.72.24.0/22 -103.72.28.0/22 -103.72.32.0/22 -103.72.36.0/22 -103.72.40.0/22 -103.72.44.0/22 -103.72.48.0/22 -103.72.52.0/22 -103.72.112.0/22 -103.72.116.0/22 -103.72.120.0/22 -103.72.124.0/22 -103.72.128.0/22 -103.72.132.0/22 -103.72.144.0/22 -103.72.148.0/22 -103.72.172.0/22 -103.72.180.0/22 -103.72.224.0/22 -103.72.228.0/22 -103.72.232.0/22 -103.72.236.0/22 -103.72.240.0/22 -103.72.244.0/22 -103.72.248.0/22 -103.72.252.0/22 -103.73.0.0/22 -103.73.4.0/22 -103.73.8.0/22 -103.73.12.0/22 -103.73.16.0/22 -103.73.20.0/22 -103.73.24.0/22 -103.73.28.0/22 -103.73.48.0/22 -103.73.88.0/22 -103.73.96.0/22 -103.73.116.0/22 -103.73.120.0/22 -103.73.128.0/22 -103.73.132.0/22 -103.73.136.0/22 -103.73.140.0/22 -103.73.144.0/22 -103.73.168.0/22 -103.73.176.0/22 -103.73.204.0/22 -103.73.208.0/22 -103.73.240.0/22 -103.73.244.0/22 -103.73.248.0/22 -103.74.24.0/22 -103.74.28.0/22 -103.74.32.0/22 -103.74.36.0/22 -103.74.40.0/22 -103.74.44.0/22 -103.74.48.0/22 -103.74.56.0/22 -103.74.60.0/22 -103.74.80.0/22 -103.74.124.0/22 -103.74.148.0/22 -103.74.152.0/22 -103.74.156.0/22 -103.74.204.0/22 -103.74.232.0/22 -103.75.16.0/22 -103.75.88.0/22 -103.75.92.0/22 -103.75.104.0/22 -103.75.108.0/22 -103.75.112.0/22 -103.75.120.0/22 -103.75.128.0/22 -103.75.144.0/22 -103.75.152.0/22 -103.75.236.0/24 -103.76.60.0/22 -103.76.64.0/22 -103.76.68.0/22 -103.76.72.0/22 -103.76.84.0/22 -103.76.92.0/22 -103.76.216.0/22 -103.76.220.0/22 -103.76.224.0/22 -103.77.28.0/22 -103.77.52.0/22 -103.77.56.0/22 -103.77.72.0/22 -103.77.88.0/22 -103.77.92.0/22 -103.77.132.0/22 -103.77.148.0/22 -103.77.220.0/22 -103.78.56.0/22 -103.78.60.0/22 -103.78.64.0/22 -103.78.68.0/22 -103.78.124.0/22 -103.78.172.0/22 -103.78.176.0/22 -103.78.196.0/22 -103.78.228.0/22 -103.79.24.0/22 -103.79.28.0/22 -103.79.36.0/22 -103.79.40.0/22 -103.79.44.0/22 -103.79.52.0/22 -103.79.56.0/22 -103.79.60.0/22 -103.79.64.0/22 -103.79.68.0/22 -103.79.80.0/22 -103.79.84.0/22 -103.79.120.0/22 -103.79.136.0/22 -103.79.188.0/22 -103.79.192.0/22 -103.79.196.0/22 -103.79.200.0/22 -103.79.204.0/22 -103.79.208.0/22 -103.79.212.0/22 -103.79.240.0/22 -103.80.24.0/22 -103.80.28.0/22 -103.80.44.0/22 -103.80.72.0/22 -103.80.176.0/22 -103.80.180.0/22 -103.80.184.0/22 -103.80.192.0/22 -103.80.200.0/22 -103.80.232.0/22 -103.81.4.0/22 -103.81.8.0/22 -103.81.16.0/22 -103.81.20.0/22 -103.81.44.0/22 -103.81.48.0/22 -103.81.96.0/22 -103.81.120.0/22 -103.81.148.0/22 -103.81.164.0/22 -103.81.168.0/22 -103.81.183.0/24 -103.81.184.0/22 -103.81.200.0/22 -103.81.232.0/22 -103.82.52.0/22 -103.82.60.0/22 -103.82.68.0/22 -103.82.84.0/22 -103.82.104.0/22 -103.82.224.0/22 -103.82.236.0/22 -103.83.44.0/22 -103.83.52.0/22 -103.83.60.0/22 -103.83.64.0/22 -103.83.72.0/22 -103.83.112.0/22 -103.83.120.0/22 -103.83.180.0/22 -103.84.0.0/22 -103.84.12.0/22 -103.84.16.0/22 -103.84.20.0/22 -103.84.24.0/22 -103.84.28.0/22 -103.84.48.0/22 -103.84.64.0/22 -103.84.72.0/22 -103.84.92.0/22 -103.84.108.0/22 -103.84.136.0/22 -103.85.20.0/22 -103.85.24.0/22 -103.85.44.0/22 -103.85.48.0/22 -103.85.84.0/22 -103.85.136.0/22 -103.85.144.0/22 -103.85.164.0/22 -103.85.168.0/22 -103.85.172.0/22 -103.85.176.0/22 -103.85.224.0/22 -103.86.28.0/22 -103.86.32.0/22 -103.86.44.0/22 -103.86.60.0/22 -103.86.68.0/22 -103.86.80.0/22 -103.86.84.0/22 -103.86.88.0/22 -103.86.204.0/22 -103.86.208.0/22 -103.86.212.0/22 -103.86.216.0/22 -103.86.220.0/22 -103.86.224.0/22 -103.86.228.0/22 -103.86.232.0/22 -103.86.236.0/22 -103.86.240.0/22 -103.86.244.0/22 -103.86.248.0/22 -103.86.252.0/22 -103.87.0.0/22 -103.87.4.0/22 -103.87.20.0/22 -103.87.32.0/22 -103.87.72.0/22 -103.87.96.0/22 -103.87.132.0/22 -103.87.180.0/22 -103.87.224.0/22 -103.88.4.0/22 -103.88.8.0/22 -103.88.12.0/22 -103.88.16.0/22 -103.88.20.0/22 -103.88.32.0/22 -103.88.36.0/22 -103.88.60.0/22 -103.88.64.0/22 -103.88.72.0/22 -103.88.96.0/22 -103.88.100.0/22 -103.88.164.0/22 -103.88.176.0/22 -103.88.184.0/22 -103.88.188.0/22 -103.88.212.0/22 -103.89.28.0/22 -103.89.96.0/22 -103.89.100.0/22 -103.89.104.0/22 -103.89.108.0/22 -103.89.112.0/22 -103.89.116.0/22 -103.89.148.0/22 -103.89.172.0/22 -103.89.184.0/22 -103.89.188.0/22 -103.89.192.0/22 -103.89.196.0/22 -103.89.200.0/22 -103.89.204.0/22 -103.89.208.0/22 -103.89.212.0/22 -103.89.216.0/22 -103.89.220.0/22 -103.89.224.0/22 -103.89.228.0/22 -103.90.52.0/22 -103.90.92.0/22 -103.90.100.0/22 -103.90.104.0/22 -103.90.108.0/22 -103.90.112.0/22 -103.90.116.0/22 -103.90.120.0/22 -103.90.124.0/22 -103.90.128.0/22 -103.90.132.0/22 -103.90.152.0/22 -103.90.168.0/22 -103.90.173.0/24 -103.90.176.0/22 -103.90.188.0/22 -103.90.192.0/22 -103.91.36.0/22 -103.91.40.0/22 -103.91.108.0/22 -103.91.152.0/22 -103.91.176.0/22 -103.91.200.0/22 -103.91.208.0/22 -103.91.212.0/22 -103.91.219.0/24 -103.91.236.0/22 -103.91.252.0/22 -103.92.0.0/22 -103.92.4.0/22 -103.92.8.0/22 -103.92.12.0/22 -103.92.48.0/22 -103.92.52.0/22 -103.92.56.0/22 -103.92.60.0/22 -103.92.64.0/22 -103.92.68.0/22 -103.92.72.0/22 -103.92.76.0/22 -103.92.80.0/22 -103.92.86.0/24 -103.92.88.0/22 -103.92.108.0/22 -103.92.124.0/22 -103.92.128.0/24 -103.92.132.0/22 -103.92.156.0/22 -103.92.164.0/22 -103.92.168.0/22 -103.92.172.0/22 -103.92.176.0/22 -103.92.180.0/22 -103.92.184.0/22 -103.92.188.0/22 -103.92.192.0/22 -103.92.236.0/22 -103.92.240.0/22 -103.92.244.0/22 -103.92.248.0/22 -103.92.252.0/22 -103.93.0.0/22 -103.93.4.0/22 -103.93.28.0/22 -103.93.76.0/22 -103.93.84.0/22 -103.93.121.0/24 -103.93.152.0/22 -103.93.180.0/22 -103.93.204.0/22 -103.94.12.0/22 -103.94.20.0/22 -103.94.28.0/22 -103.94.32.0/22 -103.94.36.0/22 -103.94.40.0/22 -103.94.44.0/22 -103.94.72.0/22 -103.94.88.0/22 -103.94.116.0/22 -103.94.160.0/22 -103.94.180.0/22 -103.94.200.0/22 -103.95.28.0/22 -103.95.52.0/22 -103.95.64.0/22 -103.95.68.0/22 -103.95.88.0/22 -103.95.92.0/22 -103.95.116.0/22 -103.95.128.0/22 -103.95.136.0/22 -103.95.140.0/22 -103.95.144.0/22 -103.95.152.0/22 -103.95.207.0/24 -103.95.216.0/22 -103.95.220.0/22 -103.95.224.0/22 -103.95.236.0/22 -103.95.240.0/22 -103.95.244.0/22 -103.95.248.0/22 -103.95.252.0/22 -103.96.0.0/22 -103.96.8.0/22 -103.96.80.0/22 -103.96.124.0/22 -103.96.136.0/22 -103.96.140.0/24 -103.96.148.0/22 -103.96.152.0/22 -103.96.156.0/22 -103.96.160.0/22 -103.96.164.0/22 -103.96.168.0/22 -103.96.172.0/22 -103.96.176.0/22 -103.96.180.0/22 -103.96.184.0/22 -103.96.188.0/22 -103.96.192.0/22 -103.96.196.0/22 -103.96.200.0/22 -103.96.204.0/22 -103.96.208.0/22 -103.96.212.0/22 -103.96.216.0/22 -103.97.8.0/22 -103.97.12.0/22 -103.97.16.0/22 -103.97.20.0/22 -103.97.24.0/22 -103.97.28.0/22 -103.97.32.0/22 -103.97.36.0/22 -103.97.40.0/22 -103.97.56.0/22 -103.97.60.0/22 -103.97.64.0/22 -103.97.68.0/22 -103.97.72.0/22 -103.97.80.0/22 -103.97.112.0/22 -103.97.116.0/22 -103.97.128.0/22 -103.97.144.0/22 -103.97.148.0/22 -103.97.188.0/22 -103.97.192.0/22 -103.97.224.0/22 -103.97.228.0/23 -103.98.28.0/23 -103.98.40.0/22 -103.98.44.0/22 -103.98.48.0/22 -103.98.56.0/22 -103.98.80.0/22 -103.98.88.0/22 -103.98.92.0/22 -103.98.96.0/22 -103.98.100.0/22 -103.98.124.0/22 -103.98.136.0/22 -103.98.140.0/22 -103.98.144.0/22 -103.98.164.0/22 -103.98.168.0/22 -103.98.180.0/22 -103.98.196.0/22 -103.98.216.0/22 -103.98.220.0/22 -103.98.224.0/22 -103.98.228.0/22 -103.98.232.0/22 -103.98.240.0/22 -103.98.244.0/22 -103.98.248.0/22 -103.98.252.0/22 -103.99.40.0/23 -103.99.52.0/22 -103.99.56.0/22 -103.99.60.0/22 -103.99.76.0/22 -103.99.104.0/22 -103.99.116.0/22 -103.99.120.0/22 -103.99.152.0/22 -103.99.220.0/22 -103.99.232.0/22 -103.99.236.0/22 -103.100.0.0/22 -103.100.32.0/22 -103.100.40.0/22 -103.100.48.0/22 -103.100.52.0/22 -103.100.56.0/22 -103.100.60.0/22 -103.100.64.0/22 -103.100.68.0/22 -103.100.88.0/22 -103.100.116.0/22 -103.100.140.0/22 -103.100.144.0/22 -103.100.236.0/22 -103.100.240.0/22 -103.100.248.0/22 -103.100.252.0/22 -103.101.4.0/22 -103.101.8.0/22 -103.101.12.0/22 -103.101.28.0/22 -103.101.60.0/22 -103.101.120.0/22 -103.101.124.0/22 -103.101.144.0/22 -103.101.148.0/22 -103.101.153.0/24 -103.101.180.0/22 -103.101.184.0/22 -103.102.76.0/22 -103.102.80.0/22 -103.102.168.0/22 -103.102.172.0/22 -103.102.180.0/22 -103.102.184.0/22 -103.102.188.0/22 -103.102.192.0/22 -103.102.196.0/22 -103.102.200.0/22 -103.102.208.0/22 -103.102.212.0/22 -103.103.12.0/22 -103.103.16.0/22 -103.103.36.0/22 -103.103.68.0/22 -103.103.72.0/22 -103.103.176.0/22 -103.103.188.0/22 -103.103.200.0/22 -103.103.204.0/22 -103.103.220.0/22 -103.103.224.0/22 -103.103.228.0/22 -103.103.232.0/22 -103.103.248.0/22 -103.103.252.0/22 -103.104.0.0/22 -103.104.4.0/22 -103.104.36.0/22 -103.104.40.0/22 -103.104.64.0/22 -103.104.104.0/22 -103.104.152.0/22 -103.104.168.0/22 -103.104.172.0/22 -103.104.188.0/22 -103.104.198.0/23 -103.104.252.0/22 -103.105.0.0/22 -103.105.4.0/22 -103.105.12.0/22 -103.105.16.0/22 -103.105.23.0/24 -103.105.56.0/22 -103.105.60.0/22 -103.105.116.0/22 -103.105.132.0/22 -103.105.180.0/22 -103.105.184.0/22 -103.105.200.0/22 -103.105.204.0/22 -103.105.220.0/22 -103.106.36.0/22 -103.106.40.0/22 -103.106.44.0/22 -103.106.60.0/22 -103.106.68.0/22 -103.106.96.0/22 -103.106.120.0/22 -103.106.128.0/22 -103.106.132.0/22 -103.106.160.0/22 -103.106.188.0/22 -103.106.196.0/22 -103.106.202.0/23 -103.106.212.0/22 -103.106.244.0/22 -103.106.252.0/22 -103.107.0.0/22 -103.107.8.0/24 -103.107.28.0/22 -103.107.32.0/22 -103.107.44.0/22 -103.107.72.0/22 -103.107.108.0/22 -103.107.164.0/22 -103.107.168.0/22 -103.107.188.0/22 -103.107.192.0/22 -103.107.208.0/22 -103.107.212.0/22 -103.107.216.0/22 -103.107.220.0/22 -103.108.52.0/22 -103.108.64.0/22 -103.108.160.0/22 -103.108.164.0/22 -103.108.184.0/23 -103.108.188.0/23 -103.108.192.0/22 -103.108.196.0/22 -103.108.208.0/22 -103.108.212.0/22 -103.108.224.0/22 -103.108.244.0/22 -103.108.251.0/24 -103.109.20.0/22 -103.109.48.0/22 -103.109.88.0/22 -103.109.106.0/23 -103.109.248.0/22 -103.110.32.0/22 -103.110.80.0/23 -103.110.92.0/22 -103.110.100.0/22 -103.110.116.0/22 -103.110.127.0/24 -103.110.128.0/23 -103.110.131.0/24 -103.110.132.0/22 -103.110.136.0/22 -103.110.152.0/22 -103.110.156.0/22 -103.110.188.0/22 -103.110.204.0/22 -103.111.64.0/22 -103.111.172.0/22 -103.111.252.0/22 -103.112.28.0/22 -103.112.68.0/22 -103.112.72.0/22 -103.112.88.0/22 -103.112.92.0/22 -103.112.96.0/22 -103.112.108.0/22 -103.112.112.0/22 -103.112.116.0/22 -103.112.140.0/22 -103.112.172.0/22 -103.112.184.0/22 -103.112.208.0/22 -103.113.4.0/22 -103.113.92.0/22 -103.113.144.0/22 -103.113.220.0/22 -103.113.232.0/22 -103.113.236.0/22 -103.114.4.0/22 -103.114.28.0/22 -103.114.68.0/22 -103.114.72.0/22 -103.114.100.0/22 -103.114.132.0/22 -103.114.148.0/22 -103.114.156.0/22 -103.114.176.0/22 -103.114.212.0/22 -103.114.236.0/22 -103.114.240.0/22 -103.115.16.0/22 -103.115.40.0/22 -103.115.44.0/22 -103.115.48.0/22 -103.115.52.0/22 -103.115.56.0/22 -103.115.60.0/22 -103.115.64.0/22 -103.115.68.0/22 -103.115.92.0/22 -103.115.120.0/22 -103.115.148.0/22 -103.115.204.0/23 -103.115.248.0/22 -103.116.20.0/22 -103.116.40.0/22 -103.116.64.0/22 -103.116.72.0/22 -103.116.76.0/22 -103.116.92.0/22 -103.116.120.0/22 -103.116.128.0/22 -103.116.132.0/23 -103.116.148.0/22 -103.116.184.0/22 -103.116.206.0/23 -103.116.220.0/22 -103.116.224.0/22 -103.116.228.0/22 -103.117.16.0/22 -103.117.72.0/22 -103.117.88.0/22 -103.117.132.0/22 -103.117.136.0/22 -103.117.188.0/22 -103.117.220.0/22 -103.118.19.0/24 -103.118.36.0/22 -103.118.52.0/22 -103.118.56.0/22 -103.118.60.0/22 -103.118.64.0/22 -103.118.68.0/22 -103.118.72.0/22 -103.118.88.0/22 -103.118.173.0/24 -103.118.192.0/22 -103.118.196.0/22 -103.118.200.0/22 -103.118.204.0/22 -103.118.208.0/22 -103.118.212.0/22 -103.118.216.0/22 -103.118.220.0/22 -103.118.240.0/22 -103.118.244.0/22 -103.118.248.0/22 -103.118.252.0/22 -103.119.0.0/22 -103.119.12.0/22 -103.119.16.0/22 -103.119.28.0/22 -103.119.44.0/22 -103.119.104.0/22 -103.119.115.0/24 -103.119.156.0/22 -103.119.180.0/22 -103.119.200.0/22 -103.119.224.0/22 -103.120.52.0/22 -103.120.72.0/22 -103.120.88.0/22 -103.120.96.0/22 -103.120.100.0/22 -103.120.140.0/22 -103.120.196.0/22 -103.120.224.0/22 -103.121.52.0/22 -103.121.92.0/22 -103.121.160.0/22 -103.121.164.0/22 -103.121.250.0/24 -103.121.252.0/22 -103.122.48.0/22 -103.122.176.0/22 -103.122.192.0/22 -103.122.240.0/22 -103.123.4.0/22 -103.123.56.0/22 -103.123.88.0/22 -103.123.92.0/22 -103.123.116.0/22 -103.123.160.0/22 -103.123.176.0/22 -103.123.200.0/22 -103.123.204.0/22 -103.123.208.0/22 -103.123.212.0/22 -103.124.24.0/22 -103.124.48.0/22 -103.124.64.0/22 -103.124.212.0/22 -103.124.216.0/22 -103.125.20.0/22 -103.125.44.0/22 -103.125.132.0/22 -103.125.164.0/22 -103.125.196.0/22 -103.125.236.0/22 -103.125.248.0/22 -103.126.0.0/22 -103.126.16.0/22 -103.126.44.0/22 -103.126.100.0/22 -103.126.124.0/22 -103.126.128.0/22 -103.126.132.0/22 -103.126.208.0/22 -103.126.241.0/24 -103.129.52.0/22 -103.130.132.0/22 -103.130.152.0/24 -103.130.160.0/22 -103.130.228.0/22 -103.131.20.0/22 -103.131.36.0/22 -103.131.152.0/22 -103.131.168.0/22 -103.131.176.0/22 -103.131.224.0/22 -103.131.228.0/22 -103.131.240.0/22 -103.132.60.0/22 -103.132.64.0/22 -103.132.68.0/22 -103.132.72.0/22 -103.132.76.0/22 -103.132.80.0/22 -103.132.104.0/22 -103.132.108.0/22 -103.132.112.0/22 -103.132.116.0/22 -103.132.120.0/22 -103.132.160.0/22 -103.132.164.0/22 -103.132.188.0/22 -103.132.208.0/22 -103.132.212.0/22 -103.132.234.0/23 -103.133.12.0/22 -103.133.40.0/22 -103.133.128.0/22 -103.133.136.0/22 -103.133.176.0/22 -103.133.232.0/22 -103.134.12.0/24 -103.134.196.0/22 -103.135.80.0/22 -103.135.124.0/22 -103.135.148.0/22 -103.135.156.0/22 -103.135.160.0/22 -103.135.164.0/22 -103.135.176.0/22 -103.135.184.0/22 -103.135.192.0/22 -103.135.196.0/22 -103.135.236.0/22 -103.136.128.0/22 -103.136.232.0/22 -103.137.58.0/23 -103.137.60.0/24 -103.137.76.0/22 -103.137.136.0/23 -103.137.149.0/24 -103.137.180.0/22 -103.137.236.0/22 -103.138.2.0/23 -103.138.12.0/23 -103.138.80.0/22 -103.138.134.0/23 -103.138.156.0/23 -103.138.208.0/23 -103.138.220.0/23 -103.138.246.0/23 -103.138.248.0/23 -103.139.0.0/23 -103.139.2.0/23 -103.139.22.0/23 -103.139.113.0/24 -103.139.134.0/23 -103.139.136.0/23 -103.139.172.0/23 -103.139.200.0/23 -103.139.204.0/23 -103.139.212.0/23 -103.140.8.0/23 -103.140.14.0/23 -103.140.70.0/23 -103.140.126.0/23 -103.140.140.0/23 -103.140.144.0/23 -103.140.152.0/23 -103.140.192.0/23 -103.140.194.0/23 -103.140.228.0/23 -103.141.10.0/23 -103.141.36.0/23 -103.141.58.0/23 -103.141.128.0/23 -103.141.186.0/23 -103.141.242.0/23 -103.142.0.0/23 -103.142.28.0/23 -103.142.58.0/23 -103.142.82.0/23 -103.142.96.0/23 -103.142.102.0/23 -103.142.122.0/23 -103.142.126.0/24 -103.142.128.0/23 -103.142.140.0/23 -103.142.154.0/23 -103.142.156.0/23 -103.142.172.0/23 -103.142.180.0/23 -103.142.186.0/23 -103.142.190.0/23 -103.142.220.0/23 -103.142.230.0/24 -103.142.234.0/23 -103.142.238.0/23 -103.142.248.0/23 -103.143.16.0/23 -103.143.18.0/23 -103.143.31.0/24 -103.143.74.0/23 -103.143.120.0/23 -103.143.124.0/23 -103.143.132.0/23 -103.143.134.0/23 -103.143.174.0/23 -103.143.228.0/23 -103.144.40.0/23 -103.144.52.0/23 -103.144.66.0/23 -103.144.70.0/23 -103.144.72.0/23 -103.144.88.0/24 -103.144.108.0/23 -103.144.136.0/23 -103.144.148.0/23 -103.144.158.0/23 -103.144.240.0/23 -103.145.38.0/23 -103.145.40.0/23 -103.145.42.0/23 -103.145.60.0/23 -103.145.72.0/23 -103.145.80.0/23 -103.145.86.0/23 -103.145.92.0/23 -103.145.94.0/23 -103.145.98.0/23 -103.145.106.0/23 -103.145.122.0/23 -103.145.188.0/23 -103.145.190.0/23 -103.146.6.0/23 -103.146.72.0/23 -103.146.88.0/23 -103.146.90.0/23 -103.146.124.0/23 -103.146.126.0/23 -103.146.138.0/23 -103.146.147.0/24 -103.146.230.0/23 -103.146.236.0/23 -103.146.252.0/23 -103.147.12.0/23 -103.147.124.0/23 -103.147.198.0/23 -103.147.206.0/23 -103.147.211.0/24 -103.148.174.0/23 -103.149.6.0/23 -103.149.17.0/24 -103.149.44.0/23 -103.149.110.0/23 -103.149.132.0/23 -103.149.144.0/23 -103.149.156.0/23 -103.149.181.0/24 -103.149.190.0/23 -103.149.210.0/23 -103.149.214.0/23 -103.149.220.0/23 -103.149.242.0/23 -103.149.244.0/23 -103.149.246.0/23 -103.149.248.0/23 -103.150.24.0/23 -103.150.66.0/23 -103.150.72.0/23 -103.150.122.0/23 -103.150.126.0/23 -103.150.128.0/23 -103.150.130.0/23 -103.150.146.0/23 -103.150.164.0/23 -103.150.172.0/23 -103.150.180.0/23 -103.150.200.0/23 -103.150.210.0/23 -103.150.214.0/23 -103.150.216.0/23 -103.150.244.0/23 -103.151.4.0/23 -103.151.44.0/23 -103.151.138.0/23 -103.151.142.0/23 -103.151.148.0/23 -103.151.150.0/23 -103.151.158.0/23 -103.151.178.0/23 -103.151.206.0/23 -103.151.216.0/23 -103.151.228.0/23 -103.152.14.0/23 -103.152.24.0/23 -103.152.28.0/23 -103.152.30.0/23 -103.152.56.0/23 -103.152.76.0/23 -103.152.80.0/23 -103.152.98.0/23 -103.152.112.0/23 -103.152.120.0/23 -103.152.122.0/23 -103.152.132.0/23 -103.152.152.0/23 -103.152.168.0/23 -103.152.170.0/23 -103.152.186.0/23 -103.152.190.0/23 -103.152.192.0/23 -103.152.200.0/23 -103.152.208.0/23 -103.152.224.0/23 -103.152.226.0/23 -103.152.246.0/23 -103.152.250.0/23 -103.153.4.0/23 -103.153.36.0/23 -103.153.98.0/23 -103.153.100.0/23 -103.153.114.0/23 -103.153.122.0/23 -103.153.128.0/23 -103.153.132.0/23 -103.153.138.0/23 -103.153.146.0/23 -103.153.160.0/23 -103.154.18.0/23 -103.154.30.0/23 -103.154.32.0/23 -103.154.40.0/23 -103.154.66.0/23 -103.154.162.0/23 -103.154.164.0/23 -103.154.168.0/23 -103.154.242.0/23 -103.155.14.0/23 -103.155.16.0/23 -103.155.34.0/23 -103.155.48.0/23 -103.155.76.0/23 -103.155.100.0/23 -103.155.110.0/23 -103.155.120.0/23 -103.155.214.0/23 -103.155.248.0/23 -103.156.24.0/23 -103.156.28.0/23 -103.156.68.0/23 -103.156.78.0/23 -103.156.104.0/23 -103.156.158.0/23 -103.156.166.0/23 -103.156.174.0/23 -103.156.186.0/23 -103.156.228.0/23 -103.157.30.0/23 -103.157.138.0/23 -103.157.174.0/23 -103.157.212.0/23 -103.157.234.0/23 -103.157.254.0/23 -103.158.0.0/23 -103.158.8.0/23 -103.158.13.0/24 -103.158.16.0/23 -103.192.0.0/22 -103.192.4.0/22 -103.192.8.0/22 -103.192.12.0/22 -103.192.16.0/22 -103.192.20.0/22 -103.192.24.0/22 -103.192.28.0/22 -103.192.48.0/22 -103.192.52.0/22 -103.192.56.0/22 -103.192.84.0/22 -103.192.88.0/22 -103.192.92.0/22 -103.192.96.0/22 -103.192.100.0/22 -103.192.104.0/22 -103.192.108.0/22 -103.192.112.0/22 -103.192.128.0/22 -103.192.132.0/22 -103.192.136.0/22 -103.192.140.0/22 -103.192.144.0/22 -103.192.164.0/22 -103.192.188.0/22 -103.192.208.0/22 -103.192.212.0/22 -103.192.216.0/22 -103.192.252.0/22 -103.193.40.0/22 -103.193.44.0/22 -103.193.120.0/22 -103.193.124.0/22 -103.193.140.0/22 -103.193.144.0/22 -103.193.160.0/22 -103.193.188.0/22 -103.193.192.0/22 -103.193.212.0/22 -103.193.216.0/22 -103.193.220.0/22 -103.193.224.0/22 -103.193.228.0/22 -103.193.232.0/22 -103.193.236.0/22 -103.193.240.0/22 -103.194.16.0/22 -103.195.104.0/22 -103.195.112.0/22 -103.195.136.0/22 -103.195.148.0/22 -103.195.152.0/22 -103.195.160.0/22 -103.196.64.0/22 -103.196.72.0/22 -103.196.88.0/22 -103.196.92.0/22 -103.196.96.0/22 -103.196.168.0/22 -103.196.204.0/22 -103.197.180.0/22 -103.197.228.0/22 -103.198.20.0/22 -103.198.60.0/22 -103.198.64.0/22 -103.198.72.0/22 -103.198.124.0/22 -103.198.156.0/22 -103.198.180.0/22 -103.198.196.0/22 -103.198.200.0/22 -103.198.216.0/22 -103.198.220.0/22 -103.198.224.0/22 -103.198.228.0/22 -103.198.232.0/22 -103.198.236.0/22 -103.198.240.0/22 -103.198.244.0/22 -103.199.164.0/22 -103.199.196.0/22 -103.199.228.0/22 -103.199.248.0/22 -103.199.252.0/22 -103.200.28.0/22 -103.200.32.0/22 -103.200.52.0/22 -103.200.64.0/22 -103.200.68.0/22 -103.200.136.0/22 -103.200.140.0/22 -103.200.144.0/22 -103.200.148.0/22 -103.200.152.0/22 -103.200.156.0/22 -103.200.160.0/22 -103.200.164.0/22 -103.200.168.0/22 -103.200.172.0/22 -103.200.176.0/22 -103.200.180.0/22 -103.200.184.0/22 -103.200.188.0/22 -103.200.192.0/22 -103.200.220.0/22 -103.200.224.0/22 -103.200.228.0/22 -103.200.232.0/22 -103.200.236.0/22 -103.200.240.0/22 -103.200.244.0/22 -103.200.248.0/22 -103.200.252.0/22 -103.201.0.0/22 -103.201.4.0/22 -103.201.8.0/22 -103.201.12.0/22 -103.201.16.0/22 -103.201.20.0/22 -103.201.28.0/22 -103.201.32.0/22 -103.201.36.0/22 -103.201.40.0/22 -103.201.44.0/22 -103.201.48.0/22 -103.201.52.0/22 -103.201.56.0/22 -103.201.60.0/22 -103.201.64.0/22 -103.201.76.0/22 -103.201.80.0/22 -103.201.84.0/22 -103.201.88.0/22 -103.201.92.0/22 -103.201.96.0/22 -103.201.100.0/22 -103.201.104.0/22 -103.201.108.0/22 -103.201.112.0/22 -103.201.116.0/22 -103.201.120.0/22 -103.201.152.0/22 -103.201.156.0/22 -103.201.160.0/22 -103.201.164.0/22 -103.201.168.0/22 -103.201.172.0/22 -103.201.176.0/22 -103.201.180.0/22 -103.201.184.0/22 -103.201.188.0/22 -103.201.192.0/22 -103.201.196.0/22 -103.201.200.0/22 -103.201.204.0/22 -103.201.208.0/22 -103.201.212.0/22 -103.201.216.0/22 -103.201.220.0/22 -103.201.224.0/22 -103.201.228.0/22 -103.201.232.0/22 -103.201.236.0/22 -103.201.240.0/22 -103.201.244.0/22 -103.201.248.0/22 -103.201.252.0/22 -103.202.0.0/22 -103.202.4.0/22 -103.202.8.0/22 -103.202.12.0/22 -103.202.16.0/22 -103.202.20.0/22 -103.202.24.0/22 -103.202.28.0/22 -103.202.32.0/22 -103.202.36.0/22 -103.202.40.0/22 -103.202.44.0/22 -103.202.56.0/22 -103.202.60.0/22 -103.202.64.0/22 -103.202.68.0/22 -103.202.72.0/22 -103.202.76.0/22 -103.202.80.0/22 -103.202.84.0/22 -103.202.88.0/22 -103.202.92.0/22 -103.202.96.0/22 -103.202.100.0/22 -103.202.104.0/22 -103.202.108.0/22 -103.202.112.0/22 -103.202.116.0/22 -103.202.120.0/22 -103.202.124.0/22 -103.202.128.0/22 -103.202.132.0/22 -103.202.136.0/22 -103.202.140.0/22 -103.202.144.0/22 -103.202.152.0/22 -103.202.156.0/22 -103.202.160.0/22 -103.202.164.0/22 -103.202.168.0/22 -103.202.172.0/22 -103.202.176.0/22 -103.202.180.0/22 -103.202.184.0/22 -103.202.188.0/22 -103.202.192.0/22 -103.202.196.0/22 -103.202.200.0/21 -103.202.212.0/22 -103.202.228.0/22 -103.202.236.0/22 -103.202.240.0/22 -103.202.244.0/22 -103.202.248.0/22 -103.202.252.0/22 -103.203.0.0/22 -103.203.4.0/22 -103.203.8.0/22 -103.203.12.0/22 -103.203.16.0/22 -103.203.20.0/22 -103.203.24.0/22 -103.203.28.0/22 -103.203.32.0/22 -103.203.52.0/22 -103.203.56.0/22 -103.203.96.0/22 -103.203.100.0/22 -103.203.104.0/22 -103.203.108.0/22 -103.203.112.0/22 -103.203.116.0/22 -103.203.120.0/22 -103.203.124.0/22 -103.203.128.0/22 -103.203.140.0/22 -103.203.164.0/22 -103.203.168.0/22 -103.203.192.0/22 -103.203.200.0/22 -103.203.212.0/22 -103.203.216.0/22 -103.204.24.0/22 -103.204.72.0/22 -103.204.88.0/22 -103.204.112.0/22 -103.204.136.0/22 -103.204.140.0/22 -103.204.144.0/22 -103.204.148.0/22 -103.204.152.0/22 -103.204.196.0/22 -103.204.232.0/22 -103.204.236.0/22 -103.205.4.0/22 -103.205.8.0/22 -103.205.40.0/22 -103.205.44.0/22 -103.205.52.0/22 -103.205.108.0/22 -103.205.116.0/22 -103.205.120.0/22 -103.205.136.0/22 -103.205.162.0/24 -103.205.188.0/22 -103.205.192.0/22 -103.205.196.0/22 -103.205.200.0/22 -103.205.236.0/22 -103.205.248.0/22 -103.205.252.0/22 -103.206.0.0/22 -103.206.44.0/22 -103.206.108.0/22 -103.206.148.0/22 -103.207.48.0/22 -103.207.104.0/22 -103.207.164.0/22 -103.207.184.0/22 -103.207.188.0/22 -103.207.192.0/22 -103.207.196.0/22 -103.207.200.0/22 -103.207.204.0/22 -103.207.208.0/22 -103.207.212.0/22 -103.207.220.0/22 -103.207.228.0/22 -103.207.232.0/22 -103.208.12.0/22 -103.208.16.0/22 -103.208.28.0/22 -103.208.40.0/22 -103.208.44.0/22 -103.208.48.0/22 -103.208.148.0/22 -103.209.112.0/22 -103.209.136.0/22 -103.209.200.0/22 -103.209.208.0/22 -103.209.216.0/22 -103.210.0.0/22 -103.210.20.0/22 -103.210.96.0/22 -103.210.156.0/22 -103.210.160.0/22 -103.210.164.0/22 -103.210.168.0/22 -103.210.172.0/22 -103.210.176.0/22 -103.210.180.0/22 -103.210.184.0/22 -103.210.188.0/22 -103.210.216.0/22 -103.211.44.0/22 -103.211.96.0/22 -103.211.100.0/22 -103.211.156.0/22 -103.211.164.0/22 -103.211.192.0/22 -103.211.220.0/22 -103.211.224.0/22 -103.211.248.0/22 -103.212.0.0/22 -103.212.4.0/22 -103.212.8.0/22 -103.212.12.0/22 -103.212.32.0/22 -103.212.44.0/22 -103.212.48.0/22 -103.212.84.0/22 -103.212.100.0/22 -103.212.104.0/22 -103.212.108.0/22 -103.212.148.0/22 -103.212.164.0/22 -103.212.196.0/22 -103.212.200.0/22 -103.212.228.0/22 -103.212.252.0/22 -103.213.40.0/22 -103.213.44.0/22 -103.213.48.0/22 -103.213.52.0/22 -103.213.56.0/22 -103.213.60.0/22 -103.213.64.0/22 -103.213.68.0/22 -103.213.72.0/22 -103.213.76.0/22 -103.213.80.0/22 -103.213.84.0/22 -103.213.88.0/22 -103.213.92.0/22 -103.213.96.0/22 -103.213.132.0/22 -103.213.136.0/22 -103.213.140.0/22 -103.213.144.0/22 -103.213.148.0/22 -103.213.152.0/22 -103.213.156.0/22 -103.213.160.0/22 -103.213.164.0/22 -103.213.168.0/22 -103.213.172.0/22 -103.213.176.0/22 -103.213.180.0/22 -103.213.184.0/22 -103.213.188.0/22 -103.213.248.0/22 -103.214.32.0/22 -103.214.48.0/22 -103.214.84.0/22 -103.214.168.0/22 -103.214.212.0/22 -103.214.240.0/22 -103.214.244.0/22 -103.215.28.0/22 -103.215.32.0/22 -103.215.36.0/22 -103.215.44.0/22 -103.215.48.0/22 -103.215.100.0/22 -103.215.104.0/22 -103.215.108.0/22 -103.215.116.0/22 -103.215.120.0/22 -103.215.140.0/22 -103.215.228.0/22 -103.216.4.0/22 -103.216.8.0/22 -103.216.12.0/22 -103.216.16.0/22 -103.216.20.0/22 -103.216.24.0/22 -103.216.28.0/22 -103.216.32.0/22 -103.216.36.0/22 -103.216.40.0/22 -103.216.44.0/22 -103.216.64.0/22 -103.216.108.0/22 -103.216.136.0/22 -103.216.152.0/22 -103.216.224.0/22 -103.216.228.0/22 -103.216.240.0/22 -103.216.244.0/22 -103.216.248.0/22 -103.216.252.0/22 -103.217.0.0/22 -103.217.4.0/22 -103.217.8.0/22 -103.217.12.0/22 -103.217.16.0/22 -103.217.20.0/22 -103.217.24.0/22 -103.217.28.0/22 -103.217.32.0/22 -103.217.36.0/22 -103.217.40.0/22 -103.217.44.0/22 -103.217.48.0/22 -103.217.52.0/22 -103.217.56.0/22 -103.217.60.0/22 -103.217.168.0/22 -103.217.180.0/22 -103.217.184.0/22 -103.217.188.0/22 -103.217.192.0/22 -103.217.196.0/22 -103.217.200.0/22 -103.217.204.0/22 -103.218.0.0/22 -103.218.8.0/22 -103.218.12.0/22 -103.218.16.0/22 -103.218.20.0/22 -103.218.28.0/22 -103.218.32.0/22 -103.218.36.0/22 -103.218.40.0/22 -103.218.44.0/22 -103.218.48.0/22 -103.218.52.0/22 -103.218.56.0/22 -103.218.60.0/22 -103.218.64.0/22 -103.218.68.0/22 -103.218.72.0/22 -103.218.76.0/22 -103.218.80.0/22 -103.218.84.0/22 -103.218.88.0/22 -103.218.92.0/22 -103.218.192.0/22 -103.218.196.0/22 -103.218.200.0/22 -103.218.204.0/22 -103.218.208.0/22 -103.218.212.0/22 -103.218.216.0/22 -103.219.24.0/22 -103.219.28.0/22 -103.219.32.0/22 -103.219.36.0/22 -103.219.64.0/22 -103.219.84.0/22 -103.219.88.0/22 -103.219.92.0/22 -103.219.96.0/22 -103.219.100.0/22 -103.219.176.0/22 -103.219.184.0/22 -103.220.48.0/22 -103.220.52.0/22 -103.220.56.0/22 -103.220.60.0/22 -103.220.64.0/22 -103.220.92.0/22 -103.220.96.0/22 -103.220.100.0/22 -103.220.104.0/22 -103.220.108.0/22 -103.220.116.0/22 -103.220.120.0/22 -103.220.124.0/22 -103.220.128.0/22 -103.220.132.0/22 -103.220.136.0/22 -103.220.140.0/22 -103.220.144.0/22 -103.220.148.0/22 -103.220.152.0/22 -103.220.160.0/22 -103.220.164.0/22 -103.220.168.0/22 -103.220.172.0/22 -103.220.176.0/22 -103.220.180.0/22 -103.220.184.0/22 -103.220.188.0/22 -103.220.192.0/22 -103.220.196.0/22 -103.220.200.0/22 -103.220.240.0/22 -103.220.244.0/22 -103.220.248.0/22 -103.220.252.0/22 -103.221.0.0/22 -103.221.4.0/22 -103.221.8.0/22 -103.221.12.0/22 -103.221.16.0/22 -103.221.20.0/22 -103.221.24.0/22 -103.221.28.0/22 -103.221.32.0/22 -103.221.36.0/22 -103.221.40.0/22 -103.221.44.0/22 -103.221.48.0/22 -103.221.88.0/22 -103.221.92.0/22 -103.221.96.0/22 -103.221.100.0/22 -103.221.104.0/22 -103.221.108.0/22 -103.221.112.0/22 -103.221.116.0/22 -103.221.120.0/22 -103.221.124.0/22 -103.221.128.0/22 -103.221.132.0/22 -103.221.136.0/22 -103.221.140.0/22 -103.221.144.0/22 -103.221.148.0/22 -103.221.152.0/22 -103.221.156.0/22 -103.221.160.0/22 -103.221.164.0/22 -103.221.168.0/22 -103.221.172.0/22 -103.221.176.0/22 -103.221.180.0/22 -103.221.184.0/22 -103.221.188.0/22 -103.221.192.0/22 -103.221.196.0/22 -103.221.200.0/22 -103.221.204.0/22 -103.222.0.0/22 -103.222.4.0/22 -103.222.8.0/22 -103.222.12.0/22 -103.222.16.0/22 -103.222.24.0/22 -103.222.28.0/22 -103.222.32.0/22 -103.222.36.0/22 -103.222.40.0/22 -103.222.44.0/22 -103.222.48.0/22 -103.222.52.0/22 -103.222.56.0/22 -103.222.60.0/22 -103.222.64.0/22 -103.222.68.0/22 -103.222.72.0/22 -103.222.76.0/22 -103.222.80.0/22 -103.222.84.0/22 -103.222.88.0/22 -103.222.92.0/22 -103.222.96.0/22 -103.222.100.0/22 -103.222.104.0/22 -103.222.108.0/22 -103.222.112.0/22 -103.222.116.0/22 -103.222.120.0/22 -103.222.124.0/22 -103.222.128.0/22 -103.222.132.0/22 -103.222.136.0/22 -103.222.140.0/22 -103.222.144.0/22 -103.222.148.0/22 -103.222.152.0/22 -103.222.156.0/22 -103.222.160.0/22 -103.222.164.0/22 -103.222.168.0/22 -103.222.172.0/22 -103.222.176.0/22 -103.222.180.0/22 -103.222.184.0/22 -103.222.188.0/22 -103.222.192.0/22 -103.222.196.0/22 -103.222.200.0/22 -103.222.204.0/22 -103.222.208.0/22 -103.222.212.0/22 -103.222.216.0/22 -103.222.220.0/22 -103.222.224.0/22 -103.222.228.0/22 -103.222.232.0/22 -103.222.240.0/22 -103.222.244.0/22 -103.223.16.0/22 -103.223.20.0/22 -103.223.24.0/22 -103.223.28.0/22 -103.223.32.0/22 -103.223.36.0/22 -103.223.40.0/22 -103.223.44.0/22 -103.223.48.0/22 -103.223.52.0/22 -103.223.56.0/22 -103.223.60.0/22 -103.223.64.0/22 -103.223.68.0/22 -103.223.72.0/22 -103.223.76.0/22 -103.223.80.0/22 -103.223.84.0/22 -103.223.88.0/22 -103.223.92.0/22 -103.223.96.0/22 -103.223.100.0/22 -103.223.104.0/22 -103.223.108.0/22 -103.223.112.0/22 -103.223.116.0/22 -103.223.120.0/22 -103.223.124.0/22 -103.223.128.0/22 -103.223.132.0/22 -103.223.140.0/22 -103.223.144.0/22 -103.223.148.0/22 -103.223.152.0/22 -103.223.156.0/22 -103.223.160.0/22 -103.223.164.0/22 -103.223.168.0/22 -103.223.172.0/22 -103.223.176.0/22 -103.223.180.0/22 -103.223.188.0/22 -103.223.192.0/22 -103.223.196.0/22 -103.223.200.0/22 -103.223.204.0/22 -103.223.208.0/22 -103.223.212.0/22 -103.223.216.0/22 -103.223.220.0/22 -103.223.224.0/22 -103.223.228.0/22 -103.223.232.0/22 -103.223.236.0/22 -103.223.240.0/22 -103.223.244.0/22 -103.223.248.0/22 -103.223.252.0/22 -103.224.0.0/22 -103.224.40.0/22 -103.224.44.0/22 -103.224.60.0/22 -103.224.80.0/22 -103.224.220.0/22 -103.224.224.0/22 -103.224.228.0/22 -103.224.232.0/22 -103.225.84.0/22 -103.226.16.0/22 -103.226.40.0/22 -103.226.56.0/22 -103.226.60.0/22 -103.226.80.0/22 -103.226.132.0/22 -103.226.156.0/22 -103.226.180.0/22 -103.226.196.0/22 -103.227.48.0/22 -103.227.72.0/22 -103.227.76.0/22 -103.227.80.0/22 -103.227.100.0/22 -103.227.120.0/22 -103.227.132.0/22 -103.227.136.0/22 -103.227.196.0/22 -103.227.204.0/22 -103.227.212.0/22 -103.227.228.0/22 -103.228.12.0/22 -103.228.88.0/22 -103.228.128.0/22 -103.228.136.0/22 -103.228.160.0/22 -103.228.176.0/22 -103.228.204.0/22 -103.228.208.0/22 -103.228.228.0/22 -103.228.232.0/22 -103.229.20.0/22 -103.229.60.0/22 -103.229.136.0/22 -103.229.148.0/22 -103.229.172.0/22 -103.229.212.0/22 -103.229.216.0/22 -103.229.220.0/22 -103.229.228.0/22 -103.229.236.0/22 -103.229.240.0/22 -103.230.0.0/22 -103.230.28.0/22 -103.230.44.0/22 -103.230.96.0/22 -103.230.196.0/22 -103.230.200.0/22 -103.230.204.0/22 -103.230.212.0/22 -103.230.236.0/22 -103.231.16.0/22 -103.231.20.0/22 -103.231.64.0/22 -103.231.68.0/22 -103.231.144.0/22 -103.231.180.0/22 -103.231.184.0/22 -103.231.244.0/22 -103.232.4.0/22 -103.232.144.0/22 -103.232.188.0/22 -103.232.212.0/22 -103.233.4.0/22 -103.233.44.0/22 -103.233.52.0/22 -103.233.104.0/22 -103.233.128.0/22 -103.233.136.0/22 -103.233.228.0/22 -103.234.0.0/22 -103.234.20.0/22 -103.234.56.0/22 -103.234.128.0/22 -103.234.172.0/22 -103.234.180.0/22 -103.234.244.0/22 -103.235.16.0/22 -103.235.48.0/22 -103.235.56.0/22 -103.235.60.0/22 -103.235.80.0/22 -103.235.84.0/22 -103.235.128.0/22 -103.235.132.0/22 -103.235.136.0/22 -103.235.140.0/22 -103.235.144.0/22 -103.235.148.0/22 -103.235.184.0/22 -103.235.192.0/22 -103.235.200.0/22 -103.235.220.0/22 -103.235.224.0/22 -103.235.228.0/22 -103.235.232.0/22 -103.235.236.0/22 -103.235.240.0/22 -103.235.244.0/22 -103.235.248.0/22 -103.235.252.0/22 -103.236.0.0/22 -103.236.4.0/22 -103.236.8.0/22 -103.236.12.0/22 -103.236.16.0/22 -103.236.20.0/22 -103.236.24.0/22 -103.236.28.0/22 -103.236.32.0/22 -103.236.36.0/22 -103.236.40.0/22 -103.236.44.0/22 -103.236.48.0/22 -103.236.52.0/22 -103.236.56.0/22 -103.236.60.0/22 -103.236.64.0/22 -103.236.68.0/22 -103.236.72.0/22 -103.236.76.0/22 -103.236.80.0/22 -103.236.84.0/22 -103.236.88.0/22 -103.236.92.0/22 -103.236.96.0/22 -103.236.120.0/22 -103.236.184.0/22 -103.236.220.0/22 -103.236.232.0/22 -103.236.240.0/22 -103.236.244.0/22 -103.236.248.0/22 -103.236.252.0/22 -103.237.0.0/22 -103.237.4.0/22 -103.237.8.0/22 -103.237.12.0/22 -103.237.24.0/22 -103.237.28.0/22 -103.237.68.0/22 -103.237.88.0/22 -103.237.152.0/22 -103.237.176.0/22 -103.237.180.0/22 -103.237.184.0/22 -103.237.188.0/22 -103.237.192.0/22 -103.237.196.0/22 -103.237.200.0/22 -103.237.204.0/22 -103.237.208.0/22 -103.237.212.0/22 -103.237.216.0/22 -103.237.220.0/22 -103.237.224.0/22 -103.237.228.0/22 -103.237.232.0/22 -103.237.236.0/22 -103.237.240.0/22 -103.237.244.0/22 -103.237.248.0/22 -103.237.252.0/22 -103.238.0.0/22 -103.238.4.0/22 -103.238.16.0/22 -103.238.20.0/22 -103.238.24.0/22 -103.238.28.0/22 -103.238.32.0/22 -103.238.36.0/22 -103.238.40.0/22 -103.238.44.0/22 -103.238.48.0/22 -103.238.52.0/22 -103.238.56.0/22 -103.238.88.0/22 -103.238.92.0/22 -103.238.96.0/22 -103.238.132.0/22 -103.238.140.0/22 -103.238.144.0/22 -103.238.160.0/22 -103.238.164.0/22 -103.238.168.0/22 -103.238.172.0/22 -103.238.176.0/22 -103.238.180.0/22 -103.238.184.0/22 -103.238.188.0/22 -103.238.196.0/22 -103.238.204.0/22 -103.238.252.0/22 -103.239.0.0/22 -103.239.44.0/22 -103.239.68.0/22 -103.239.96.0/22 -103.239.152.0/22 -103.239.156.0/22 -103.239.176.0/22 -103.239.180.0/22 -103.239.184.0/22 -103.239.192.0/22 -103.239.196.0/22 -103.239.204.0/22 -103.239.208.0/22 -103.239.224.0/22 -103.239.244.0/22 -103.240.16.0/22 -103.240.36.0/22 -103.240.72.0/22 -103.240.84.0/22 -103.240.124.0/22 -103.240.156.0/22 -103.240.172.0/22 -103.240.188.0/22 -103.240.244.0/22 -103.241.12.0/22 -103.241.72.0/22 -103.241.92.0/22 -103.241.96.0/22 -103.241.160.0/22 -103.241.184.0/22 -103.241.188.0/22 -103.241.220.0/22 -103.242.64.0/22 -103.242.128.0/22 -103.242.132.0/22 -103.242.160.0/22 -103.242.168.0/22 -103.242.172.0/22 -103.242.176.0/22 -103.242.200.0/22 -103.242.212.0/22 -103.242.220.0/22 -103.242.240.0/22 -103.243.136.0/22 -103.243.252.0/22 -103.244.16.0/22 -103.244.58.0/23 -103.244.60.0/22 -103.244.64.0/22 -103.244.68.0/22 -103.244.72.0/22 -103.244.76.0/22 -103.244.80.0/22 -103.244.84.0/22 -103.244.116.0/22 -103.244.164.0/22 -103.244.232.0/22 -103.244.252.0/22 -103.245.23.0/24 -103.245.52.0/22 -103.245.60.0/22 -103.245.80.0/22 -103.245.124.0/22 -103.245.128.0/22 -103.246.8.0/22 -103.246.12.0/22 -103.246.120.0/22 -103.246.124.0/22 -103.246.132.0/22 -103.246.152.0/22 -103.246.156.0/22 -103.247.168.0/22 -103.247.172.0/22 -103.247.176.0/22 -103.247.200.0/22 -103.247.212.0/22 -103.248.0.0/23 -103.248.64.0/22 -103.248.100.0/22 -103.248.124.0/22 -103.248.152.0/22 -103.248.168.0/22 -103.248.192.0/22 -103.248.212.0/22 -103.248.220.0/22 -103.248.224.0/22 -103.249.8.0/22 -103.249.12.0/22 -103.249.52.0/22 -103.249.104.0/22 -103.249.128.0/22 -103.249.136.0/22 -103.249.144.0/22 -103.249.164.0/22 -103.249.168.0/22 -103.249.172.0/22 -103.249.176.0/22 -103.249.188.0/22 -103.249.192.0/22 -103.249.244.0/22 -103.249.252.0/22 -103.250.32.0/22 -103.250.104.0/22 -103.250.124.0/22 -103.250.180.0/22 -103.250.192.0/22 -103.250.216.0/22 -103.250.224.0/22 -103.250.236.0/22 -103.250.248.0/22 -103.250.252.0/22 -103.251.32.0/22 -103.251.84.0/22 -103.251.96.0/22 -103.251.124.0/22 -103.251.128.0/22 -103.251.160.0/22 -103.251.192.0/22 -103.251.204.0/22 -103.251.240.0/22 -103.252.28.0/22 -103.252.36.0/22 -103.252.64.0/22 -103.252.96.0/22 -103.252.104.0/22 -103.252.172.0/22 -103.252.204.0/22 -103.252.208.0/22 -103.252.232.0/22 -103.252.248.0/22 -103.253.4.0/22 -103.253.60.0/22 -103.253.204.0/22 -103.253.220.0/22 -103.253.224.0/22 -103.253.232.0/22 -103.254.8.0/22 -103.254.20.0/22 -103.254.64.0/22 -103.254.68.0/22 -103.254.72.0/22 -103.254.76.0/22 -103.254.112.0/22 -103.254.176.0/22 -103.254.188.0/22 -103.254.196.0/24 -103.254.220.0/22 -103.255.56.0/22 -103.255.68.0/22 -103.255.88.0/22 -103.255.92.0/22 -103.255.136.0/22 -103.255.140.0/22 -103.255.184.0/22 -103.255.200.0/22 -103.255.212.0/22 -103.255.228.0/22 -106.0.0.0/24 -106.0.2.0/23 -106.0.4.0/22 -106.0.8.0/21 -106.0.16.0/20 -106.0.44.0/22 -106.0.64.0/18 -106.2.0.0/15 -106.4.0.0/14 -106.8.0.0/15 -106.11.0.0/16 -106.12.0.0/14 -106.16.0.0/12 -106.32.0.0/12 -106.48.0.0/15 -106.50.0.0/16 -106.52.0.0/14 -106.56.0.0/13 -106.74.0.0/16 -106.75.0.0/16 -106.80.0.0/12 -106.108.0.0/14 -106.112.0.0/13 -106.120.0.0/13 -106.224.0.0/12 -109.244.0.0/16 -110.6.0.0/15 -110.16.0.0/14 -110.34.40.0/22 -110.34.44.0/22 -110.40.0.0/14 -110.44.12.0/22 -110.44.144.0/20 -110.48.0.0/16 -110.51.0.0/16 -110.52.0.0/15 -110.56.0.0/13 -110.64.0.0/15 -110.72.0.0/15 -110.75.0.0/17 -110.75.128.0/19 -110.75.160.0/19 -110.75.192.0/18 -110.76.0.0/19 -110.76.32.0/19 -110.76.132.0/22 -110.76.156.0/22 -110.76.184.0/22 -110.76.192.0/18 -110.77.0.0/17 -110.80.0.0/13 -110.88.0.0/14 -110.92.68.0/22 -110.93.32.0/19 -110.94.0.0/15 -110.96.0.0/11 -110.152.0.0/14 -110.156.0.0/15 -110.165.32.0/19 -110.166.0.0/15 -110.172.192.0/18 -110.173.0.0/19 -110.173.32.0/20 -110.173.64.0/19 -110.173.96.0/19 -110.173.192.0/19 -110.176.0.0/13 -110.184.0.0/13 -110.192.0.0/11 -110.228.0.0/14 -110.232.32.0/19 -110.236.0.0/15 -110.240.0.0/12 -111.0.0.0/10 -111.66.0.0/16 -111.67.192.0/20 -111.68.64.0/19 -111.72.0.0/13 -111.85.0.0/16 -111.91.192.0/19 -111.92.248.0/22 -111.92.252.0/22 -111.112.0.0/15 -111.114.0.0/15 -111.116.0.0/15 -111.118.200.0/21 -111.119.64.0/18 -111.119.128.0/19 -111.120.0.0/14 -111.124.0.0/16 -111.126.0.0/15 -111.128.0.0/11 -111.160.0.0/13 -111.170.0.0/16 -111.172.0.0/14 -111.176.0.0/13 -111.186.0.0/15 -111.192.0.0/12 -111.208.0.0/14 -111.212.0.0/14 -111.221.28.0/24 -111.221.128.0/17 -111.222.0.0/16 -111.223.4.0/22 -111.223.8.0/22 -111.223.12.0/22 -111.223.16.0/22 -111.223.240.0/22 -111.223.248.0/22 -111.224.0.0/14 -111.228.0.0/14 -111.235.96.0/19 -111.235.156.0/22 -111.235.160.0/19 -112.0.0.0/10 -112.64.0.0/15 -112.66.0.0/15 -112.73.0.0/16 -112.74.0.0/15 -112.80.0.0/13 -112.88.0.0/13 -112.96.0.0/15 -112.98.0.0/15 -112.100.0.0/14 -112.109.128.0/17 -112.111.0.0/16 -112.112.0.0/14 -112.116.0.0/15 -112.122.0.0/15 -112.124.0.0/14 -112.128.0.0/14 -112.132.0.0/16 -112.137.48.0/21 -112.192.0.0/14 -112.224.0.0/11 -113.0.0.0/13 -113.8.0.0/15 -113.11.192.0/19 -113.12.0.0/14 -113.16.0.0/15 -113.18.0.0/16 -113.21.232.0/22 -113.21.236.0/22 -113.24.0.0/14 -113.31.0.0/16 -113.44.0.0/14 -113.48.0.0/14 -113.52.160.0/19 -113.52.228.0/22 -113.54.0.0/15 -113.56.0.0/15 -113.58.0.0/16 -113.59.0.0/17 -113.59.224.0/22 -113.62.0.0/15 -113.64.0.0/11 -113.96.0.0/12 -113.112.0.0/13 -113.120.0.0/13 -113.128.0.0/15 -113.130.96.0/20 -113.130.112.0/21 -113.132.0.0/14 -113.136.0.0/13 -113.194.0.0/15 -113.197.100.0/22 -113.200.0.0/15 -113.202.0.0/16 -113.204.0.0/14 -113.208.96.0/19 -113.208.128.0/17 -113.209.0.0/16 -113.212.0.0/18 -113.212.88.0/22 -113.212.100.0/22 -113.212.184.0/21 -113.213.0.0/17 -113.214.0.0/15 -113.218.0.0/15 -113.220.0.0/14 -113.224.0.0/12 -113.240.0.0/13 -113.248.0.0/14 -114.28.0.0/16 -114.31.64.0/22 -114.31.68.0/22 -114.54.0.0/15 -114.60.0.0/14 -114.64.0.0/14 -114.68.0.0/16 -114.79.64.0/18 -114.80.0.0/12 -114.96.0.0/13 -114.104.0.0/14 -114.110.0.0/20 -114.110.64.0/18 -114.111.0.0/19 -114.111.160.0/19 -114.112.0.0/14 -114.116.0.0/16 -114.117.0.0/17 -114.117.128.0/17 -114.118.0.0/16 -114.119.0.0/17 -114.119.192.0/21 -114.119.200.0/22 -114.119.204.0/22 -114.119.208.0/20 -114.119.224.0/19 -114.132.0.0/16 -114.135.0.0/16 -114.138.0.0/15 -114.141.64.0/21 -114.141.80.0/22 -114.141.84.0/22 -114.141.128.0/18 -114.196.0.0/15 -114.198.248.0/21 -114.208.0.0/14 -114.212.0.0/15 -114.214.0.0/16 -114.215.0.0/16 -114.216.0.0/13 -114.224.0.0/12 -114.240.0.0/12 -115.24.0.0/14 -115.28.0.0/15 -115.31.64.0/22 -115.31.68.0/22 -115.31.72.0/22 -115.31.76.0/22 -115.32.0.0/14 -115.42.56.0/22 -115.44.0.0/15 -115.46.0.0/16 -115.47.0.0/16 -115.48.0.0/12 -115.69.64.0/20 -115.84.0.0/18 -115.84.192.0/19 -115.85.192.0/18 -115.100.0.0/14 -115.104.0.0/14 -115.120.0.0/14 -115.124.16.0/20 -115.148.0.0/14 -115.152.0.0/15 -115.154.0.0/15 -115.156.0.0/15 -115.158.0.0/16 -115.159.0.0/16 -115.166.64.0/19 -115.168.0.0/14 -115.172.0.0/14 -115.180.0.0/15 -115.182.0.0/16 -115.183.0.0/16 -115.187.0.0/22 -115.187.4.0/22 -115.187.8.0/22 -115.187.12.0/22 -115.190.0.0/15 -115.192.0.0/11 -115.224.0.0/12 -116.0.8.0/21 -116.0.24.0/21 -116.1.0.0/16 -116.2.0.0/15 -116.4.0.0/14 -116.8.0.0/14 -116.13.0.0/16 -116.16.0.0/12 -116.50.0.0/20 -116.52.0.0/14 -116.56.0.0/15 -116.58.128.0/20 -116.58.208.0/20 -116.60.0.0/14 -116.66.0.0/17 -116.66.176.0/22 -116.68.136.0/22 -116.68.140.0/22 -116.68.176.0/22 -116.68.180.0/22 -116.69.0.0/16 -116.70.0.0/17 -116.76.0.0/15 -116.78.0.0/15 -116.85.0.0/16 -116.89.144.0/20 -116.89.240.0/22 -116.90.80.0/20 -116.90.184.0/21 -116.95.0.0/16 -116.112.0.0/14 -116.116.0.0/15 -116.128.0.0/10 -116.192.0.0/16 -116.193.16.0/20 -116.193.32.0/19 -116.193.152.0/22 -116.193.164.0/22 -116.193.176.0/21 -116.194.0.0/15 -116.196.0.0/16 -116.197.160.0/22 -116.197.164.0/22 -116.198.0.0/16 -116.199.0.0/17 -116.199.128.0/19 -116.204.0.0/17 -116.204.132.0/22 -116.204.168.0/22 -116.204.216.0/22 -116.204.232.0/22 -116.204.236.0/22 -116.205.0.0/16 -116.206.92.0/22 -116.206.176.0/22 -116.207.0.0/16 -116.208.0.0/14 -116.212.160.0/20 -116.213.44.0/22 -116.213.64.0/18 -116.213.128.0/17 -116.214.32.0/19 -116.214.64.0/20 -116.214.128.0/17 -116.215.0.0/16 -116.216.0.0/14 -116.224.0.0/12 -116.242.0.0/15 -116.244.0.0/15 -116.246.0.0/15 -116.248.0.0/15 -116.251.64.0/18 -116.252.0.0/15 -116.254.104.0/22 -116.254.108.0/22 -116.254.128.0/17 -116.255.128.0/17 -117.8.0.0/13 -117.21.0.0/16 -117.22.0.0/15 -117.24.0.0/13 -117.32.0.0/13 -117.40.0.0/14 -117.44.0.0/15 -117.48.0.0/14 -117.53.48.0/20 -117.53.176.0/20 -117.57.0.0/16 -117.58.0.0/17 -117.59.0.0/16 -117.60.0.0/14 -117.64.0.0/13 -117.72.0.0/15 -117.74.64.0/20 -117.74.80.0/20 -117.74.128.0/17 -117.75.0.0/16 -117.76.0.0/14 -117.80.0.0/12 -117.100.0.0/15 -117.103.16.0/20 -117.103.40.0/21 -117.103.72.0/21 -117.103.128.0/20 -117.104.168.0/21 -117.106.0.0/15 -117.112.0.0/13 -117.120.64.0/18 -117.120.128.0/17 -117.121.0.0/17 -117.121.128.0/18 -117.121.192.0/21 -117.122.128.0/17 -117.124.0.0/14 -117.128.0.0/10 -118.24.0.0/15 -118.26.0.0/19 -118.26.32.0/22 -118.26.40.0/21 -118.26.48.0/21 -118.26.56.0/21 -118.26.64.0/19 -118.26.96.0/21 -118.26.112.0/21 -118.26.120.0/21 -118.26.128.0/17 -118.28.0.0/15 -118.30.0.0/16 -118.31.0.0/16 -118.64.0.0/15 -118.66.0.0/16 -118.67.112.0/20 -118.72.0.0/13 -118.80.0.0/15 -118.84.0.0/15 -118.88.32.0/19 -118.88.64.0/18 -118.88.128.0/17 -118.89.0.0/16 -118.91.240.0/20 -118.102.16.0/20 -118.102.32.0/21 -118.103.164.0/22 -118.103.168.0/22 -118.103.172.0/22 -118.103.176.0/22 -118.107.180.0/22 -118.112.0.0/13 -118.120.0.0/14 -118.124.0.0/15 -118.126.0.0/16 -118.127.128.0/19 -118.132.0.0/14 -118.144.0.0/14 -118.178.0.0/16 -118.180.0.0/14 -118.184.0.0/17 -118.184.128.0/17 -118.186.0.0/15 -118.188.0.0/16 -118.190.0.0/16 -118.191.0.0/21 -118.191.8.0/22 -118.191.12.0/24 -118.191.16.0/21 -118.191.64.0/20 -118.191.80.0/22 -118.191.128.0/19 -118.191.176.0/20 -118.191.192.0/20 -118.191.208.0/24 -118.191.216.0/22 -118.191.223.0/24 -118.191.224.0/24 -118.191.240.0/20 -118.192.0.0/16 -118.193.0.0/21 -118.193.8.0/21 -118.193.48.0/21 -118.193.96.0/19 -118.193.128.0/17 -118.194.0.0/17 -118.194.128.0/18 -118.194.192.0/19 -118.194.224.0/22 -118.194.240.0/21 -118.195.0.0/17 -118.195.128.0/17 -118.196.0.0/14 -118.202.0.0/15 -118.204.0.0/14 -118.212.0.0/16 -118.213.0.0/16 -118.215.192.0/18 -118.224.0.0/14 -118.228.0.0/15 -118.230.0.0/16 -118.239.0.0/16 -118.242.0.0/16 -118.244.0.0/14 -118.248.0.0/13 -119.0.0.0/15 -119.2.0.0/19 -119.2.128.0/17 -119.3.0.0/16 -119.4.0.0/14 -119.10.0.0/17 -119.15.136.0/21 -119.16.0.0/16 -119.18.192.0/20 -119.18.208.0/21 -119.18.224.0/20 -119.18.240.0/20 -119.19.0.0/16 -119.20.0.0/14 -119.27.64.0/18 -119.27.128.0/19 -119.27.160.0/19 -119.27.192.0/18 -119.28.0.0/15 -119.30.48.0/20 -119.31.192.0/19 -119.32.0.0/14 -119.36.0.0/16 -119.37.0.0/17 -119.37.128.0/18 -119.37.192.0/18 -119.38.0.0/17 -119.38.128.0/18 -119.38.192.0/20 -119.38.208.0/20 -119.38.224.0/19 -119.39.0.0/16 -119.40.0.0/18 -119.40.64.0/20 -119.40.128.0/17 -119.41.0.0/16 -119.42.0.0/19 -119.42.52.0/22 -119.42.128.0/21 -119.42.136.0/21 -119.42.224.0/19 -119.44.0.0/15 -119.48.0.0/13 -119.57.0.0/16 -119.58.0.0/16 -119.59.128.0/17 -119.60.0.0/16 -119.61.0.0/16 -119.62.0.0/16 -119.63.32.0/19 -119.75.208.0/20 -119.78.0.0/15 -119.80.0.0/16 -119.82.208.0/20 -119.84.0.0/14 -119.88.0.0/14 -119.96.0.0/13 -119.108.0.0/15 -119.112.0.0/13 -119.120.0.0/13 -119.128.0.0/12 -119.144.0.0/14 -119.148.160.0/20 -119.148.176.0/20 -119.151.192.0/18 -119.160.200.0/21 -119.161.120.0/22 -119.161.124.0/22 -119.161.128.0/17 -119.162.0.0/15 -119.164.0.0/14 -119.176.0.0/12 -119.232.0.0/15 -119.235.128.0/18 -119.248.0.0/14 -119.252.96.0/21 -119.252.240.0/20 -119.253.0.0/16 -119.254.0.0/15 -120.0.0.0/12 -120.24.0.0/14 -120.30.0.0/16 -120.31.0.0/16 -120.32.0.0/13 -120.40.0.0/14 -120.44.0.0/15 -120.46.0.0/16 -120.47.0.0/16 -120.48.0.0/15 -120.52.0.0/16 -120.53.0.0/16 -120.54.0.0/15 -120.64.0.0/14 -120.68.0.0/14 -120.72.32.0/19 -120.72.128.0/17 -120.76.0.0/14 -120.80.0.0/13 -120.88.8.0/21 -120.90.0.0/15 -120.92.0.0/16 -120.94.0.0/16 -120.95.0.0/16 -120.128.0.0/14 -120.132.0.0/17 -120.132.128.0/17 -120.133.0.0/16 -120.134.0.0/15 -120.136.16.0/22 -120.136.20.0/22 -120.136.128.0/18 -120.137.0.0/17 -120.143.128.0/19 -120.192.0.0/10 -121.0.8.0/21 -121.0.16.0/20 -121.4.0.0/15 -121.8.0.0/13 -121.16.0.0/13 -121.24.0.0/14 -121.28.0.0/15 -121.30.0.0/16 -121.31.0.0/16 -121.32.0.0/14 -121.36.0.0/16 -121.37.0.0/16 -121.38.0.0/15 -121.40.0.0/14 -121.46.0.0/18 -121.46.76.0/22 -121.46.128.0/17 -121.47.0.0/16 -121.48.0.0/15 -121.50.8.0/21 -121.51.0.0/16 -121.52.160.0/19 -121.52.208.0/20 -121.52.224.0/19 -121.54.176.0/21 -121.54.188.0/22 -121.55.0.0/18 -121.56.0.0/15 -121.58.0.0/17 -121.58.136.0/21 -121.58.144.0/20 -121.58.160.0/21 -121.59.0.0/16 -121.60.0.0/14 -121.68.0.0/14 -121.76.0.0/15 -121.79.128.0/18 -121.89.0.0/16 -121.100.128.0/17 -121.101.0.0/18 -121.101.208.0/20 -121.192.0.0/16 -121.193.0.0/16 -121.194.0.0/15 -121.196.0.0/14 -121.200.192.0/21 -121.201.0.0/16 -121.204.0.0/14 -121.224.0.0/12 -121.248.0.0/14 -121.255.0.0/16 -122.0.64.0/18 -122.0.128.0/17 -122.4.0.0/14 -122.8.0.0/16 -122.9.0.0/16 -122.10.128.0/22 -122.10.132.0/23 -122.10.136.0/23 -122.10.164.0/22 -122.10.168.0/21 -122.10.176.0/20 -122.10.192.0/22 -122.10.200.0/21 -122.10.208.0/21 -122.10.216.0/22 -122.10.228.0/22 -122.10.232.0/21 -122.10.240.0/22 -122.11.0.0/17 -122.12.0.0/16 -122.13.0.0/16 -122.14.0.0/17 -122.14.128.0/18 -122.14.192.0/18 -122.48.0.0/16 -122.49.0.0/18 -122.51.0.0/16 -122.64.0.0/11 -122.96.0.0/15 -122.102.0.0/20 -122.102.64.0/20 -122.102.80.0/20 -122.112.0.0/18 -122.112.64.0/18 -122.112.128.0/17 -122.113.0.0/16 -122.114.0.0/16 -122.115.0.0/17 -122.115.128.0/19 -122.115.160.0/19 -122.115.192.0/19 -122.115.224.0/19 -122.119.0.0/16 -122.128.100.0/22 -122.128.120.0/21 -122.136.0.0/13 -122.144.128.0/17 -122.152.192.0/18 -122.156.0.0/14 -122.188.0.0/14 -122.192.0.0/14 -122.198.0.0/16 -122.200.40.0/22 -122.200.44.0/22 -122.200.64.0/18 -122.201.48.0/20 -122.204.0.0/14 -122.224.0.0/12 -122.240.0.0/13 -122.248.24.0/21 -122.248.48.0/20 -122.255.64.0/21 -123.0.128.0/18 -123.4.0.0/14 -123.8.0.0/13 -123.49.128.0/17 -123.50.160.0/19 -123.52.0.0/14 -123.56.0.0/15 -123.58.0.0/20 -123.58.16.0/20 -123.58.32.0/19 -123.58.64.0/19 -123.58.96.0/19 -123.58.128.0/18 -123.58.224.0/20 -123.58.240.0/20 -123.59.0.0/16 -123.60.0.0/16 -123.61.0.0/16 -123.62.0.0/16 -123.64.0.0/11 -123.96.0.0/15 -123.98.0.0/17 -123.99.128.0/17 -123.100.0.0/19 -123.101.0.0/16 -123.103.0.0/17 -123.108.128.0/20 -123.108.208.0/20 -123.112.0.0/12 -123.128.0.0/13 -123.136.80.0/20 -123.137.0.0/16 -123.138.0.0/15 -123.144.0.0/14 -123.148.0.0/16 -123.149.0.0/16 -123.150.0.0/15 -123.152.0.0/13 -123.160.0.0/14 -123.164.0.0/14 -123.168.0.0/14 -123.172.0.0/15 -123.174.0.0/15 -123.176.60.0/22 -123.176.80.0/20 -123.177.0.0/16 -123.178.0.0/15 -123.180.0.0/14 -123.184.0.0/14 -123.188.0.0/14 -123.196.0.0/15 -123.199.128.0/17 -123.206.0.0/15 -123.232.0.0/14 -123.242.0.0/17 -123.242.192.0/22 -123.242.196.0/22 -123.244.0.0/14 -123.249.0.0/16 -123.253.108.0/22 -123.253.240.0/22 -123.254.96.0/22 -123.254.100.0/22 -124.6.64.0/18 -124.14.0.0/15 -124.16.0.0/15 -124.20.0.0/16 -124.21.0.0/20 -124.21.16.0/20 -124.21.32.0/19 -124.21.64.0/18 -124.21.128.0/17 -124.22.0.0/15 -124.28.192.0/18 -124.29.0.0/17 -124.31.0.0/16 -124.40.112.0/20 -124.40.128.0/18 -124.40.192.0/19 -124.40.240.0/22 -124.42.0.0/17 -124.42.128.0/17 -124.47.0.0/18 -124.64.0.0/15 -124.66.0.0/17 -124.67.0.0/16 -124.68.0.0/14 -124.72.0.0/16 -124.73.0.0/16 -124.74.0.0/15 -124.76.0.0/14 -124.88.0.0/16 -124.89.0.0/17 -124.89.128.0/17 -124.90.0.0/15 -124.92.0.0/14 -124.108.8.0/21 -124.108.40.0/21 -124.109.96.0/21 -124.112.0.0/15 -124.114.0.0/15 -124.116.0.0/16 -124.117.0.0/16 -124.118.0.0/15 -124.126.0.0/15 -124.128.0.0/13 -124.147.128.0/17 -124.150.137.0/24 -124.151.0.0/16 -124.152.0.0/16 -124.160.0.0/16 -124.161.0.0/16 -124.162.0.0/16 -124.163.0.0/16 -124.164.0.0/14 -124.172.0.0/15 -124.174.0.0/15 -124.192.0.0/15 -124.196.0.0/16 -124.200.0.0/13 -124.220.0.0/14 -124.224.0.0/16 -124.225.0.0/16 -124.226.0.0/15 -124.228.0.0/14 -124.232.0.0/15 -124.234.0.0/15 -124.236.0.0/14 -124.240.0.0/17 -124.240.128.0/18 -124.242.0.0/16 -124.243.192.0/18 -124.248.0.0/17 -124.249.0.0/16 -124.250.0.0/15 -124.254.0.0/18 -125.31.192.0/18 -125.32.0.0/16 -125.33.0.0/16 -125.34.0.0/16 -125.35.0.0/17 -125.35.128.0/17 -125.36.0.0/14 -125.40.0.0/13 -125.58.128.0/17 -125.61.128.0/17 -125.62.0.0/18 -125.64.0.0/13 -125.72.0.0/16 -125.73.0.0/16 -125.74.0.0/15 -125.76.0.0/17 -125.76.128.0/17 -125.77.0.0/16 -125.78.0.0/15 -125.80.0.0/13 -125.88.0.0/13 -125.96.0.0/15 -125.98.0.0/16 -125.104.0.0/13 -125.112.0.0/12 -125.169.0.0/16 -125.171.0.0/16 -125.208.0.0/18 -125.210.0.0/16 -125.211.0.0/16 -125.213.0.0/17 -125.214.96.0/19 -125.215.0.0/18 -125.216.0.0/15 -125.218.0.0/16 -125.219.0.0/16 -125.220.0.0/15 -125.222.0.0/15 -125.254.128.0/18 -125.254.192.0/18 -128.108.0.0/16 -129.28.0.0/16 -129.204.0.0/16 -129.211.0.0/16 -132.232.0.0/16 -134.175.0.0/16 -137.59.59.0/24 -137.59.88.0/22 -139.5.56.0/22 -139.5.60.0/22 -139.5.80.0/22 -139.5.92.0/22 -139.5.108.0/22 -139.5.128.0/22 -139.5.160.0/22 -139.5.192.0/22 -139.5.204.0/22 -139.5.208.0/22 -139.5.212.0/22 -139.5.244.0/22 -139.9.0.0/16 -139.129.0.0/16 -139.148.0.0/16 -139.155.0.0/16 -139.159.0.0/16 -139.170.0.0/16 -139.176.0.0/16 -139.183.0.0/16 -139.186.0.0/16 -139.189.0.0/16 -139.196.0.0/14 -139.200.0.0/13 -139.208.0.0/13 -139.217.0.0/16 -139.219.0.0/16 -139.220.0.0/15 -139.224.0.0/16 -139.226.0.0/15 -140.75.0.0/16 -140.143.0.0/16 -140.179.0.0/16 -140.205.0.0/16 -140.206.0.0/15 -140.210.0.0/16 -140.224.0.0/16 -140.237.0.0/16 -140.240.0.0/16 -140.243.0.0/16 -140.246.0.0/16 -140.249.0.0/16 -140.250.0.0/16 -140.255.0.0/16 -142.70.0.0/16 -142.86.0.0/16 -144.0.0.0/16 -144.7.0.0/16 -144.12.0.0/16 -144.48.8.0/22 -144.48.64.0/22 -144.48.88.0/22 -144.48.156.0/22 -144.48.180.0/22 -144.48.184.0/22 -144.48.204.0/22 -144.48.208.0/22 -144.48.212.0/22 -144.48.220.0/22 -144.48.252.0/22 -144.52.0.0/16 -144.123.0.0/16 -144.255.0.0/16 -146.56.192.0/18 -146.196.56.0/22 -146.196.68.0/22 -146.196.72.0/22 -146.196.92.0/22 -146.196.112.0/22 -146.196.116.0/22 -146.196.124.0/22 -148.70.0.0/16 -149.41.0.0/16 -150.0.0.0/16 -150.115.0.0/16 -150.121.0.0/16 -150.122.0.0/16 -150.129.136.0/22 -150.129.192.0/22 -150.129.216.0/22 -150.129.252.0/22 -150.138.0.0/15 -150.158.0.0/16 -150.223.0.0/16 -150.242.0.0/22 -150.242.4.0/22 -150.242.8.0/22 -150.242.28.0/22 -150.242.44.0/22 -150.242.48.0/22 -150.242.52.0/22 -150.242.56.0/22 -150.242.76.0/22 -150.242.80.0/22 -150.242.92.0/22 -150.242.96.0/22 -150.242.112.0/22 -150.242.116.0/22 -150.242.120.0/22 -150.242.152.0/22 -150.242.156.0/22 -150.242.160.0/22 -150.242.164.0/22 -150.242.168.0/22 -150.242.184.0/22 -150.242.188.0/22 -150.242.192.0/22 -150.242.212.0/22 -150.242.224.0/22 -150.242.232.0/22 -150.242.236.0/22 -150.242.240.0/22 -150.242.244.0/22 -150.242.248.0/22 -150.248.0.0/16 -150.255.0.0/16 -152.104.128.0/17 -152.136.0.0/16 -153.0.0.0/16 -153.3.0.0/16 -153.34.0.0/15 -153.36.0.0/15 -153.99.0.0/16 -153.101.0.0/16 -153.118.0.0/15 -154.8.128.0/17 -156.59.0.0/16 -157.0.0.0/16 -157.18.0.0/16 -157.61.0.0/16 -157.119.0.0/22 -157.119.8.0/22 -157.119.12.0/22 -157.119.16.0/22 -157.119.28.0/22 -157.119.132.0/22 -157.119.136.0/22 -157.119.140.0/22 -157.119.144.0/22 -157.119.148.0/22 -157.119.152.0/22 -157.119.156.0/22 -157.119.160.0/22 -157.119.164.0/22 -157.119.172.0/22 -157.119.192.0/22 -157.119.196.0/22 -157.119.240.0/22 -157.119.252.0/22 -157.122.0.0/16 -157.148.0.0/16 -157.156.0.0/16 -157.255.0.0/16 -158.79.0.0/16 -159.75.0.0/16 -159.226.0.0/16 -160.19.208.0/22 -160.19.212.0/22 -160.19.216.0/22 -160.20.48.0/22 -160.202.60.0/22 -160.202.148.0/22 -160.202.152.0/22 -160.202.168.0/22 -160.202.212.0/22 -160.202.216.0/22 -160.202.220.0/22 -160.202.224.0/22 -160.202.228.0/22 -160.202.232.0/22 -160.202.236.0/22 -160.202.240.0/22 -160.202.244.0/22 -160.202.248.0/22 -160.202.252.0/22 -160.238.64.0/22 -161.120.0.0/16 -161.189.0.0/16 -161.207.0.0/16 -162.14.0.0/16 -162.105.0.0/16 -163.0.0.0/16 -163.47.4.0/22 -163.53.0.0/22 -163.53.4.0/22 -163.53.8.0/22 -163.53.12.0/22 -163.53.36.0/22 -163.53.40.0/22 -163.53.44.0/22 -163.53.48.0/22 -163.53.52.0/22 -163.53.56.0/22 -163.53.60.0/22 -163.53.64.0/22 -163.53.88.0/22 -163.53.92.0/22 -163.53.96.0/22 -163.53.100.0/22 -163.53.104.0/22 -163.53.108.0/22 -163.53.112.0/22 -163.53.116.0/22 -163.53.120.0/22 -163.53.124.0/22 -163.53.128.0/22 -163.53.132.0/22 -163.53.136.0/22 -163.53.160.0/22 -163.53.164.0/22 -163.53.168.0/22 -163.53.172.0/22 -163.53.188.0/22 -163.53.220.0/22 -163.53.240.0/22 -163.125.0.0/16 -163.142.0.0/16 -163.177.0.0/16 -163.179.0.0/16 -163.204.0.0/16 -164.52.0.0/17 -166.111.0.0/16 -167.139.0.0/16 -167.189.0.0/16 -167.220.244.0/22 -168.160.0.0/16 -170.179.0.0/16 -171.8.0.0/13 -171.34.0.0/15 -171.36.0.0/14 -171.40.0.0/13 -171.80.0.0/14 -171.84.0.0/14 -171.88.0.0/13 -171.104.0.0/13 -171.112.0.0/14 -171.116.0.0/14 -171.120.0.0/13 -171.208.0.0/12 -172.81.192.0/18 -175.0.0.0/12 -175.16.0.0/13 -175.24.0.0/16 -175.25.0.0/16 -175.26.0.0/16 -175.27.0.0/16 -175.30.0.0/15 -175.42.0.0/15 -175.44.0.0/16 -175.46.0.0/15 -175.48.0.0/12 -175.64.0.0/11 -175.102.0.0/16 -175.106.128.0/17 -175.111.144.0/22 -175.111.148.0/22 -175.111.152.0/22 -175.111.156.0/22 -175.111.160.0/22 -175.111.164.0/22 -175.111.168.0/22 -175.111.172.0/22 -175.111.184.0/22 -175.146.0.0/15 -175.148.0.0/14 -175.152.0.0/14 -175.158.96.0/22 -175.160.0.0/12 -175.176.156.0/22 -175.176.176.0/22 -175.176.188.0/22 -175.176.192.0/22 -175.178.0.0/16 -175.184.128.0/18 -175.185.0.0/16 -175.186.0.0/15 -175.188.0.0/14 -180.76.0.0/16 -180.77.0.0/16 -180.78.0.0/15 -180.84.0.0/15 -180.86.0.0/16 -180.88.0.0/14 -180.94.56.0/21 -180.94.96.0/20 -180.94.120.0/22 -180.94.124.0/22 -180.95.128.0/17 -180.96.0.0/11 -180.129.128.0/17 -180.130.0.0/16 -180.136.0.0/13 -180.148.16.0/21 -180.148.152.0/21 -180.148.216.0/21 -180.148.224.0/19 -180.149.128.0/19 -180.149.236.0/22 -180.150.160.0/19 -180.152.0.0/13 -180.160.0.0/12 -180.178.112.0/22 -180.178.116.0/22 -180.178.192.0/18 -180.184.0.0/15 -180.186.0.0/16 -180.187.0.0/16 -180.188.0.0/17 -180.189.148.0/22 -180.200.252.0/22 -180.201.0.0/16 -180.202.0.0/15 -180.208.0.0/15 -180.210.212.0/22 -180.210.224.0/19 -180.212.0.0/15 -180.222.224.0/19 -180.223.0.0/16 -180.233.0.0/18 -180.233.64.0/19 -180.233.144.0/22 -180.235.64.0/19 -180.235.112.0/22 -182.16.144.0/22 -182.16.148.0/22 -182.16.192.0/19 -182.18.0.0/17 -182.23.184.0/21 -182.23.200.0/21 -182.32.0.0/12 -182.48.96.0/19 -182.49.0.0/16 -182.50.0.0/20 -182.50.112.0/20 -182.51.0.0/16 -182.54.0.0/17 -182.54.244.0/22 -182.61.0.0/16 -182.80.0.0/14 -182.84.0.0/14 -182.88.0.0/14 -182.92.0.0/16 -182.96.0.0/12 -182.112.0.0/12 -182.128.0.0/12 -182.144.0.0/13 -182.157.0.0/16 -182.160.64.0/19 -182.174.0.0/15 -182.200.0.0/13 -182.236.128.0/17 -182.237.24.0/22 -182.237.28.0/22 -182.238.0.0/16 -182.239.0.0/19 -182.240.0.0/13 -182.254.0.0/16 -182.255.32.0/22 -182.255.36.0/22 -182.255.60.0/22 -183.0.0.0/10 -183.64.0.0/13 -183.78.160.0/22 -183.78.164.0/22 -183.78.180.0/22 -183.81.172.0/22 -183.81.180.0/22 -183.84.0.0/15 -183.91.128.0/22 -183.91.136.0/21 -183.91.144.0/20 -183.92.0.0/14 -183.128.0.0/11 -183.160.0.0/13 -183.168.0.0/15 -183.170.0.0/16 -183.172.0.0/14 -183.182.0.0/19 -183.184.0.0/13 -183.192.0.0/10 -185.203.36.0/22 -188.131.128.0/17 -192.51.188.0/24 -192.55.46.0/24 -192.55.68.0/22 -192.102.204.0/23 -192.124.154.0/24 -192.140.128.0/22 -192.140.132.0/22 -192.140.136.0/22 -192.140.156.0/22 -192.140.160.0/22 -192.140.164.0/22 -192.140.168.0/22 -192.140.172.0/22 -192.140.176.0/22 -192.140.180.0/22 -192.140.184.0/22 -192.140.188.0/22 -192.140.192.0/22 -192.140.196.0/22 -192.140.200.0/22 -192.140.204.0/22 -192.140.208.0/22 -192.140.212.0/22 -192.144.128.0/17 -192.197.113.0/24 -193.112.0.0/16 -198.175.100.0/22 -199.212.57.0/24 -202.0.100.0/23 -202.0.122.0/23 -202.0.176.0/22 -202.3.128.0/23 -202.3.134.0/24 -202.4.128.0/19 -202.4.252.0/22 -202.5.208.0/22 -202.5.212.0/22 -202.5.216.0/22 -202.6.6.0/23 -202.6.66.0/23 -202.6.72.0/23 -202.6.87.0/24 -202.6.88.0/23 -202.6.92.0/23 -202.6.103.0/24 -202.6.108.0/24 -202.6.110.0/23 -202.6.114.0/24 -202.6.176.0/20 -202.8.0.0/24 -202.8.2.0/23 -202.8.4.0/23 -202.8.12.0/24 -202.8.24.0/24 -202.8.77.0/24 -202.8.120.0/22 -202.8.128.0/19 -202.8.192.0/20 -202.9.32.0/24 -202.9.34.0/23 -202.9.48.0/23 -202.9.51.0/24 -202.9.52.0/23 -202.9.54.0/24 -202.9.57.0/24 -202.9.58.0/23 -202.10.64.0/20 -202.10.112.0/22 -202.10.116.0/22 -202.10.120.0/22 -202.10.124.0/22 -202.12.1.0/24 -202.12.2.0/24 -202.12.17.0/24 -202.12.18.0/24 -202.12.19.0/24 -202.12.72.0/24 -202.12.84.0/23 -202.12.96.0/24 -202.12.98.0/23 -202.12.106.0/24 -202.12.111.0/24 -202.12.116.0/24 -202.14.64.0/23 -202.14.69.0/24 -202.14.73.0/24 -202.14.74.0/23 -202.14.76.0/24 -202.14.78.0/23 -202.14.88.0/24 -202.14.97.0/24 -202.14.104.0/23 -202.14.108.0/23 -202.14.111.0/24 -202.14.114.0/23 -202.14.118.0/23 -202.14.124.0/23 -202.14.127.0/24 -202.14.129.0/24 -202.14.135.0/24 -202.14.136.0/24 -202.14.149.0/24 -202.14.151.0/24 -202.14.157.0/24 -202.14.158.0/23 -202.14.169.0/24 -202.14.170.0/23 -202.14.172.0/22 -202.14.176.0/24 -202.14.184.0/23 -202.14.208.0/23 -202.14.213.0/24 -202.14.219.0/24 -202.14.220.0/24 -202.14.222.0/23 -202.14.225.0/24 -202.14.226.0/23 -202.14.231.0/24 -202.14.235.0/24 -202.14.236.0/23 -202.14.238.0/24 -202.14.239.0/24 -202.14.246.0/24 -202.14.251.0/24 -202.20.66.0/24 -202.20.79.0/24 -202.20.87.0/24 -202.20.88.0/23 -202.20.90.0/24 -202.20.94.0/23 -202.20.114.0/24 -202.20.117.0/24 -202.20.120.0/24 -202.20.125.0/24 -202.20.126.0/24 -202.20.127.0/24 -202.21.48.0/22 -202.21.52.0/22 -202.21.56.0/22 -202.21.60.0/22 -202.21.131.0/24 -202.21.132.0/24 -202.21.141.0/24 -202.21.142.0/24 -202.21.147.0/24 -202.21.148.0/24 -202.21.150.0/23 -202.21.152.0/23 -202.21.154.0/24 -202.21.156.0/24 -202.22.248.0/22 -202.22.252.0/22 -202.27.12.0/24 -202.27.14.0/24 -202.27.136.0/23 -202.36.226.0/24 -202.38.0.0/23 -202.38.2.0/23 -202.38.8.0/21 -202.38.48.0/20 -202.38.64.0/19 -202.38.96.0/19 -202.38.128.0/23 -202.38.130.0/23 -202.38.132.0/23 -202.38.134.0/24 -202.38.135.0/24 -202.38.136.0/23 -202.38.138.0/24 -202.38.140.0/23 -202.38.142.0/23 -202.38.146.0/23 -202.38.149.0/24 -202.38.150.0/23 -202.38.152.0/23 -202.38.154.0/23 -202.38.156.0/24 -202.38.158.0/23 -202.38.160.0/23 -202.38.164.0/22 -202.38.168.0/23 -202.38.170.0/24 -202.38.171.0/24 -202.38.176.0/23 -202.38.184.0/21 -202.38.192.0/18 -202.40.4.0/23 -202.40.7.0/24 -202.40.15.0/24 -202.40.135.0/24 -202.40.136.0/24 -202.40.140.0/24 -202.40.143.0/24 -202.40.144.0/23 -202.40.150.0/24 -202.40.155.0/24 -202.40.156.0/24 -202.40.158.0/23 -202.40.162.0/24 -202.41.8.0/23 -202.41.11.0/24 -202.41.12.0/23 -202.41.128.0/24 -202.41.130.0/23 -202.41.152.0/21 -202.41.192.0/24 -202.41.196.0/22 -202.41.200.0/22 -202.41.240.0/20 -202.43.76.0/22 -202.43.144.0/20 -202.44.16.0/20 -202.44.48.0/22 -202.44.67.0/24 -202.44.74.0/24 -202.44.97.0/24 -202.44.129.0/24 -202.44.132.0/23 -202.44.146.0/23 -202.45.0.0/23 -202.45.2.0/24 -202.45.15.0/24 -202.45.16.0/20 -202.46.16.0/23 -202.46.18.0/24 -202.46.20.0/23 -202.46.32.0/19 -202.46.128.0/24 -202.46.224.0/20 -202.47.82.0/23 -202.47.96.0/22 -202.47.100.0/22 -202.47.104.0/22 -202.47.108.0/22 -202.47.126.0/24 -202.47.128.0/24 -202.47.130.0/23 -202.52.33.0/24 -202.52.34.0/24 -202.52.47.0/24 -202.52.143.0/24 -202.52.144.0/24 -202.53.140.0/24 -202.53.143.0/24 -202.57.192.0/22 -202.57.196.0/22 -202.57.200.0/22 -202.57.204.0/22 -202.57.212.0/22 -202.57.216.0/22 -202.57.240.0/20 -202.58.0.0/24 -202.58.101.0/24 -202.58.104.0/22 -202.58.112.0/22 -202.59.0.0/24 -202.59.1.0/24 -202.59.212.0/22 -202.59.236.0/24 -202.59.240.0/24 -202.60.48.0/21 -202.60.96.0/21 -202.60.112.0/20 -202.60.132.0/22 -202.60.136.0/21 -202.60.144.0/20 -202.61.68.0/22 -202.61.76.0/22 -202.61.88.0/22 -202.61.123.0/24 -202.61.127.0/24 -202.62.112.0/22 -202.62.248.0/22 -202.62.252.0/24 -202.62.255.0/24 -202.63.80.0/24 -202.63.81.0/24 -202.63.82.0/23 -202.63.84.0/22 -202.63.88.0/21 -202.63.160.0/19 -202.63.248.0/22 -202.63.253.0/24 -202.65.0.0/21 -202.65.8.0/23 -202.65.96.0/22 -202.65.100.0/22 -202.65.104.0/22 -202.65.108.0/22 -202.66.168.0/22 -202.67.0.0/22 -202.69.4.0/22 -202.69.16.0/20 -202.70.0.0/19 -202.70.96.0/20 -202.70.192.0/20 -202.71.32.0/22 -202.71.36.0/22 -202.71.40.0/22 -202.71.44.0/22 -202.72.40.0/21 -202.72.80.0/20 -202.72.112.0/22 -202.72.116.0/22 -202.72.120.0/22 -202.72.124.0/22 -202.73.128.0/22 -202.73.240.0/22 -202.73.244.0/22 -202.73.248.0/22 -202.73.252.0/22 -202.74.8.0/21 -202.74.36.0/24 -202.74.42.0/24 -202.74.52.0/24 -202.74.80.0/20 -202.74.232.0/22 -202.74.254.0/23 -202.75.208.0/20 -202.75.252.0/22 -202.76.252.0/22 -202.77.80.0/21 -202.77.92.0/22 -202.78.8.0/21 -202.79.224.0/21 -202.79.248.0/22 -202.80.192.0/21 -202.80.200.0/21 -202.81.0.0/22 -202.81.176.0/22 -202.81.180.0/22 -202.81.184.0/22 -202.81.188.0/22 -202.83.252.0/22 -202.84.0.0/22 -202.84.4.0/22 -202.84.8.0/21 -202.84.16.0/23 -202.84.22.0/24 -202.84.24.0/21 -202.85.208.0/20 -202.86.249.0/24 -202.86.252.0/22 -202.87.80.0/20 -202.88.32.0/22 -202.89.8.0/21 -202.89.96.0/22 -202.89.108.0/22 -202.89.119.0/24 -202.89.232.0/21 -202.90.0.0/22 -202.90.16.0/22 -202.90.20.0/22 -202.90.24.0/22 -202.90.28.0/22 -202.90.37.0/24 -202.90.96.0/22 -202.90.100.0/22 -202.90.104.0/22 -202.90.108.0/22 -202.90.112.0/20 -202.90.193.0/24 -202.90.196.0/24 -202.90.205.0/24 -202.90.224.0/20 -202.91.0.0/22 -202.91.36.0/22 -202.91.96.0/20 -202.91.128.0/22 -202.91.176.0/20 -202.91.224.0/19 -202.92.0.0/22 -202.92.8.0/21 -202.92.48.0/20 -202.92.252.0/22 -202.93.0.0/22 -202.93.252.0/22 -202.94.68.0/24 -202.94.74.0/24 -202.94.81.0/24 -202.94.92.0/22 -202.95.240.0/21 -202.95.252.0/22 -202.96.0.0/18 -202.96.64.0/21 -202.96.72.0/21 -202.96.80.0/20 -202.96.96.0/21 -202.96.104.0/21 -202.96.112.0/20 -202.96.128.0/21 -202.96.136.0/21 -202.96.144.0/20 -202.96.160.0/21 -202.96.168.0/21 -202.96.176.0/20 -202.96.192.0/21 -202.96.200.0/21 -202.96.208.0/20 -202.96.224.0/21 -202.96.232.0/21 -202.96.240.0/20 -202.97.0.0/21 -202.97.8.0/21 -202.97.16.0/20 -202.97.32.0/19 -202.97.64.0/19 -202.97.96.0/20 -202.97.112.0/20 -202.97.128.0/18 -202.97.192.0/19 -202.97.224.0/21 -202.97.232.0/21 -202.97.240.0/20 -202.98.0.0/21 -202.98.8.0/21 -202.98.16.0/20 -202.98.32.0/21 -202.98.40.0/21 -202.98.48.0/20 -202.98.64.0/19 -202.98.96.0/21 -202.98.104.0/21 -202.98.112.0/20 -202.98.128.0/19 -202.98.160.0/21 -202.98.168.0/21 -202.98.176.0/20 -202.98.192.0/21 -202.98.200.0/21 -202.98.208.0/20 -202.98.224.0/21 -202.98.232.0/21 -202.98.240.0/20 -202.99.0.0/18 -202.99.64.0/19 -202.99.96.0/21 -202.99.104.0/21 -202.99.112.0/20 -202.99.128.0/19 -202.99.160.0/21 -202.99.168.0/21 -202.99.176.0/20 -202.99.192.0/21 -202.99.200.0/21 -202.99.208.0/20 -202.99.224.0/21 -202.99.232.0/21 -202.99.240.0/20 -202.100.0.0/21 -202.100.8.0/21 -202.100.16.0/20 -202.100.32.0/19 -202.100.64.0/21 -202.100.72.0/21 -202.100.80.0/20 -202.100.96.0/21 -202.100.104.0/21 -202.100.112.0/20 -202.100.128.0/21 -202.100.136.0/21 -202.100.144.0/20 -202.100.160.0/21 -202.100.168.0/21 -202.100.176.0/20 -202.100.192.0/21 -202.100.200.0/21 -202.100.208.0/20 -202.100.224.0/19 -202.101.0.0/18 -202.101.64.0/19 -202.101.96.0/19 -202.101.128.0/18 -202.101.192.0/19 -202.101.224.0/21 -202.101.232.0/21 -202.101.240.0/20 -202.102.0.0/19 -202.102.32.0/19 -202.102.64.0/18 -202.102.128.0/21 -202.102.136.0/21 -202.102.144.0/20 -202.102.160.0/19 -202.102.192.0/21 -202.102.200.0/21 -202.102.208.0/20 -202.102.224.0/21 -202.102.232.0/21 -202.102.240.0/20 -202.103.0.0/21 -202.103.8.0/21 -202.103.16.0/20 -202.103.32.0/19 -202.103.64.0/19 -202.103.96.0/21 -202.103.104.0/21 -202.103.112.0/20 -202.103.128.0/18 -202.103.192.0/19 -202.103.224.0/21 -202.103.232.0/21 -202.103.240.0/20 -202.104.0.0/15 -202.106.0.0/16 -202.107.0.0/17 -202.107.128.0/17 -202.108.0.0/16 -202.109.0.0/16 -202.110.0.0/18 -202.110.64.0/18 -202.110.128.0/18 -202.110.192.0/18 -202.111.0.0/17 -202.111.128.0/19 -202.111.160.0/19 -202.111.192.0/18 -202.112.0.0/16 -202.113.0.0/20 -202.113.16.0/20 -202.113.32.0/19 -202.113.64.0/18 -202.113.128.0/18 -202.113.192.0/19 -202.113.224.0/20 -202.113.240.0/20 -202.114.0.0/19 -202.114.32.0/19 -202.114.64.0/18 -202.114.128.0/17 -202.115.0.0/19 -202.115.32.0/19 -202.115.64.0/18 -202.115.128.0/17 -202.116.0.0/19 -202.116.32.0/20 -202.116.48.0/20 -202.116.64.0/19 -202.116.96.0/19 -202.116.128.0/17 -202.117.0.0/18 -202.117.64.0/18 -202.117.128.0/17 -202.118.0.0/19 -202.118.32.0/19 -202.118.64.0/18 -202.118.128.0/17 -202.119.0.0/19 -202.119.32.0/19 -202.119.64.0/20 -202.119.80.0/20 -202.119.96.0/19 -202.119.128.0/17 -202.120.0.0/18 -202.120.64.0/18 -202.120.128.0/17 -202.121.0.0/16 -202.122.0.0/21 -202.122.32.0/21 -202.122.64.0/19 -202.122.112.0/21 -202.122.120.0/21 -202.122.128.0/24 -202.122.132.0/24 -202.123.96.0/20 -202.123.116.0/22 -202.123.120.0/22 -202.124.16.0/21 -202.124.24.0/22 -202.125.107.0/24 -202.125.109.0/24 -202.125.112.0/20 -202.125.176.0/20 -202.127.0.0/23 -202.127.2.0/24 -202.127.3.0/24 -202.127.4.0/24 -202.127.5.0/24 -202.127.6.0/23 -202.127.12.0/22 -202.127.16.0/20 -202.127.40.0/21 -202.127.48.0/20 -202.127.112.0/20 -202.127.128.0/20 -202.127.144.0/20 -202.127.160.0/21 -202.127.192.0/23 -202.127.194.0/23 -202.127.196.0/22 -202.127.200.0/21 -202.127.208.0/24 -202.127.209.0/24 -202.127.212.0/22 -202.127.216.0/21 -202.127.224.0/19 -202.129.208.0/24 -202.130.0.0/19 -202.130.39.0/24 -202.130.224.0/19 -202.131.16.0/21 -202.131.48.0/20 -202.131.208.0/20 -202.133.32.0/20 -202.134.58.0/24 -202.134.128.0/20 -202.134.208.0/22 -202.134.212.0/22 -202.134.216.0/22 -202.134.220.0/22 -202.136.48.0/20 -202.136.208.0/20 -202.136.224.0/20 -202.136.248.0/22 -202.137.231.0/24 -202.140.140.0/22 -202.140.144.0/22 -202.140.148.0/22 -202.140.152.0/22 -202.140.156.0/22 -202.141.160.0/19 -202.142.16.0/20 -202.143.4.0/22 -202.143.16.0/20 -202.143.32.0/20 -202.143.56.0/21 -202.143.100.0/22 -202.143.104.0/22 -202.144.196.0/22 -202.146.160.0/20 -202.146.186.0/24 -202.146.188.0/22 -202.146.196.0/22 -202.146.200.0/21 -202.147.144.0/20 -202.148.32.0/20 -202.148.64.0/19 -202.148.96.0/19 -202.149.32.0/19 -202.149.160.0/19 -202.149.224.0/19 -202.150.16.0/20 -202.150.32.0/20 -202.150.56.0/22 -202.150.192.0/20 -202.150.224.0/19 -202.151.0.0/22 -202.151.33.0/24 -202.151.128.0/19 -202.152.176.0/20 -202.153.0.0/22 -202.153.7.0/24 -202.153.48.0/20 -202.157.192.0/19 -202.158.160.0/19 -202.158.242.0/24 -202.160.140.0/22 -202.160.156.0/22 -202.160.176.0/20 -202.162.67.0/24 -202.162.75.0/24 -202.164.0.0/20 -202.164.96.0/19 -202.165.176.0/20 -202.165.208.0/20 -202.165.239.0/24 -202.165.240.0/23 -202.165.243.0/24 -202.165.245.0/24 -202.165.251.0/24 -202.165.252.0/22 -202.166.224.0/19 -202.168.80.0/22 -202.168.128.0/22 -202.168.132.0/22 -202.168.136.0/22 -202.168.140.0/22 -202.168.160.0/20 -202.168.176.0/20 -202.170.128.0/19 -202.170.216.0/21 -202.170.224.0/19 -202.171.216.0/21 -202.171.232.0/24 -202.171.235.0/24 -202.172.0.0/22 -202.172.7.0/24 -202.173.0.0/22 -202.173.6.0/24 -202.173.8.0/21 -202.173.112.0/22 -202.173.224.0/19 -202.174.64.0/20 -202.174.124.0/22 -202.176.224.0/19 -202.179.160.0/22 -202.179.164.0/22 -202.179.168.0/22 -202.179.172.0/22 -202.179.240.0/20 -202.180.128.0/19 -202.180.208.0/21 -202.181.8.0/22 -202.181.28.0/22 -202.181.112.0/20 -202.182.32.0/20 -202.182.192.0/19 -202.189.0.0/18 -202.189.80.0/20 -202.189.184.0/21 -202.191.0.0/24 -202.191.68.0/22 -202.191.72.0/21 -202.191.80.0/20 -202.192.0.0/13 -202.200.0.0/14 -202.204.0.0/14 -203.0.4.0/22 -203.0.10.0/23 -203.0.18.0/24 -203.0.24.0/24 -203.0.42.0/23 -203.0.45.0/24 -203.0.46.0/23 -203.0.81.0/24 -203.0.82.0/23 -203.0.90.0/23 -203.0.96.0/23 -203.0.104.0/21 -203.0.114.0/23 -203.0.122.0/24 -203.0.128.0/24 -203.0.130.0/23 -203.0.132.0/22 -203.0.137.0/24 -203.0.142.0/24 -203.0.144.0/24 -203.0.146.0/24 -203.0.148.0/24 -203.0.150.0/23 -203.0.152.0/24 -203.0.177.0/24 -203.0.224.0/24 -203.1.4.0/22 -203.1.18.0/24 -203.1.26.0/23 -203.1.65.0/24 -203.1.66.0/23 -203.1.70.0/23 -203.1.76.0/23 -203.1.90.0/24 -203.1.97.0/24 -203.1.98.0/23 -203.1.100.0/22 -203.1.108.0/24 -203.1.253.0/24 -203.1.254.0/24 -203.2.64.0/21 -203.2.73.0/24 -203.2.112.0/21 -203.2.126.0/23 -203.2.140.0/24 -203.2.150.0/24 -203.2.152.0/22 -203.2.156.0/23 -203.2.160.0/21 -203.2.180.0/23 -203.2.196.0/23 -203.2.209.0/24 -203.2.214.0/23 -203.2.226.0/23 -203.2.229.0/24 -203.2.236.0/23 -203.3.68.0/24 -203.3.72.0/23 -203.3.75.0/24 -203.3.80.0/21 -203.3.96.0/22 -203.3.105.0/24 -203.3.112.0/21 -203.3.120.0/24 -203.3.123.0/24 -203.3.135.0/24 -203.3.139.0/24 -203.3.143.0/24 -203.4.132.0/23 -203.4.134.0/24 -203.4.151.0/24 -203.4.152.0/22 -203.4.174.0/23 -203.4.180.0/24 -203.4.186.0/24 -203.4.205.0/24 -203.4.208.0/22 -203.4.227.0/24 -203.4.230.0/23 -203.5.4.0/23 -203.5.7.0/24 -203.5.8.0/23 -203.5.11.0/24 -203.5.21.0/24 -203.5.22.0/24 -203.5.44.0/24 -203.5.46.0/23 -203.5.52.0/22 -203.5.56.0/23 -203.5.60.0/23 -203.5.114.0/23 -203.5.118.0/24 -203.5.120.0/24 -203.5.172.0/24 -203.5.180.0/23 -203.5.182.0/24 -203.5.185.0/24 -203.5.186.0/24 -203.5.188.0/23 -203.5.190.0/24 -203.5.195.0/24 -203.5.214.0/23 -203.5.218.0/23 -203.6.131.0/24 -203.6.136.0/24 -203.6.138.0/23 -203.6.142.0/24 -203.6.150.0/23 -203.6.157.0/24 -203.6.159.0/24 -203.6.224.0/20 -203.6.248.0/23 -203.7.129.0/24 -203.7.138.0/23 -203.7.147.0/24 -203.7.150.0/23 -203.7.158.0/24 -203.7.192.0/23 -203.7.200.0/24 -203.8.0.0/24 -203.8.8.0/24 -203.8.23.0/24 -203.8.70.0/24 -203.8.82.0/24 -203.8.86.0/23 -203.8.91.0/24 -203.8.110.0/23 -203.8.115.0/24 -203.8.166.0/23 -203.8.169.0/24 -203.8.173.0/24 -203.8.184.0/24 -203.8.186.0/23 -203.8.190.0/23 -203.8.192.0/24 -203.8.197.0/24 -203.8.198.0/23 -203.8.203.0/24 -203.8.209.0/24 -203.8.210.0/23 -203.8.212.0/22 -203.8.217.0/24 -203.8.220.0/24 -203.9.32.0/24 -203.9.36.0/23 -203.9.57.0/24 -203.9.63.0/24 -203.9.65.0/24 -203.9.70.0/23 -203.9.72.0/24 -203.9.75.0/24 -203.9.76.0/23 -203.9.96.0/22 -203.9.100.0/23 -203.9.108.0/24 -203.9.158.0/24 -203.10.34.0/24 -203.10.56.0/24 -203.10.74.0/23 -203.10.84.0/22 -203.10.88.0/24 -203.10.95.0/24 -203.10.125.0/24 -203.11.70.0/24 -203.11.76.0/22 -203.11.82.0/24 -203.11.84.0/22 -203.11.100.0/22 -203.11.109.0/24 -203.11.117.0/24 -203.11.122.0/24 -203.11.126.0/24 -203.11.136.0/22 -203.11.141.0/24 -203.11.142.0/23 -203.11.180.0/22 -203.11.208.0/22 -203.12.16.0/24 -203.12.19.0/24 -203.12.24.0/24 -203.12.57.0/24 -203.12.65.0/24 -203.12.66.0/24 -203.12.70.0/23 -203.12.87.0/24 -203.12.100.0/23 -203.12.103.0/24 -203.12.114.0/24 -203.12.118.0/24 -203.12.130.0/24 -203.12.137.0/24 -203.12.196.0/22 -203.12.211.0/24 -203.12.219.0/24 -203.12.226.0/24 -203.12.240.0/22 -203.13.18.0/24 -203.13.24.0/24 -203.13.44.0/23 -203.13.88.0/23 -203.13.92.0/22 -203.13.173.0/24 -203.13.224.0/23 -203.13.227.0/24 -203.13.233.0/24 -203.14.24.0/22 -203.14.33.0/24 -203.14.56.0/24 -203.14.61.0/24 -203.14.62.0/24 -203.14.104.0/24 -203.14.114.0/23 -203.14.118.0/24 -203.14.162.0/24 -203.14.192.0/24 -203.14.194.0/23 -203.14.214.0/24 -203.14.231.0/24 -203.14.246.0/24 -203.15.0.0/20 -203.15.20.0/23 -203.15.22.0/24 -203.15.87.0/24 -203.15.88.0/23 -203.15.105.0/24 -203.15.112.0/21 -203.15.130.0/23 -203.15.149.0/24 -203.15.151.0/24 -203.15.156.0/22 -203.15.174.0/24 -203.15.227.0/24 -203.15.232.0/21 -203.15.240.0/23 -203.15.246.0/24 -203.16.10.0/24 -203.16.12.0/23 -203.16.16.0/21 -203.16.27.0/24 -203.16.38.0/24 -203.16.49.0/24 -203.16.50.0/23 -203.16.58.0/24 -203.16.63.0/24 -203.16.133.0/24 -203.16.161.0/24 -203.16.162.0/24 -203.16.186.0/23 -203.16.228.0/24 -203.16.238.0/24 -203.16.240.0/24 -203.16.245.0/24 -203.17.2.0/24 -203.17.18.0/24 -203.17.28.0/24 -203.17.39.0/24 -203.17.56.0/24 -203.17.74.0/23 -203.17.88.0/23 -203.17.136.0/24 -203.17.164.0/24 -203.17.187.0/24 -203.17.190.0/23 -203.17.231.0/24 -203.17.233.0/24 -203.17.248.0/24 -203.17.249.0/24 -203.17.255.0/24 -203.18.2.0/23 -203.18.4.0/24 -203.18.7.0/24 -203.18.31.0/24 -203.18.37.0/24 -203.18.48.0/23 -203.18.52.0/24 -203.18.72.0/22 -203.18.80.0/23 -203.18.87.0/24 -203.18.100.0/23 -203.18.105.0/24 -203.18.107.0/24 -203.18.110.0/24 -203.18.129.0/24 -203.18.131.0/24 -203.18.132.0/23 -203.18.144.0/24 -203.18.153.0/24 -203.18.199.0/24 -203.18.208.0/24 -203.18.211.0/24 -203.18.215.0/24 -203.19.1.0/24 -203.19.18.0/24 -203.19.24.0/24 -203.19.30.0/24 -203.19.32.0/21 -203.19.41.0/24 -203.19.44.0/23 -203.19.46.0/24 -203.19.58.0/24 -203.19.60.0/23 -203.19.64.0/24 -203.19.68.0/24 -203.19.72.0/24 -203.19.101.0/24 -203.19.111.0/24 -203.19.131.0/24 -203.19.133.0/24 -203.19.144.0/24 -203.19.147.0/24 -203.19.149.0/24 -203.19.156.0/24 -203.19.176.0/24 -203.19.178.0/23 -203.19.208.0/24 -203.19.228.0/22 -203.19.233.0/24 -203.19.242.0/24 -203.19.248.0/23 -203.19.255.0/24 -203.20.17.0/24 -203.20.40.0/23 -203.20.44.0/24 -203.20.48.0/24 -203.20.61.0/24 -203.20.65.0/24 -203.20.84.0/23 -203.20.89.0/24 -203.20.106.0/23 -203.20.115.0/24 -203.20.117.0/24 -203.20.118.0/23 -203.20.122.0/24 -203.20.126.0/23 -203.20.135.0/24 -203.20.136.0/21 -203.20.150.0/24 -203.20.230.0/24 -203.20.232.0/24 -203.20.236.0/24 -203.21.0.0/23 -203.21.2.0/24 -203.21.8.0/24 -203.21.10.0/24 -203.21.18.0/24 -203.21.33.0/24 -203.21.34.0/24 -203.21.41.0/24 -203.21.44.0/24 -203.21.68.0/24 -203.21.82.0/24 -203.21.96.0/22 -203.21.124.0/24 -203.21.136.0/23 -203.21.145.0/24 -203.21.206.0/24 -203.22.24.0/24 -203.22.28.0/23 -203.22.31.0/24 -203.22.68.0/24 -203.22.76.0/24 -203.22.78.0/24 -203.22.84.0/24 -203.22.87.0/24 -203.22.92.0/22 -203.22.99.0/24 -203.22.106.0/24 -203.22.122.0/23 -203.22.131.0/24 -203.22.163.0/24 -203.22.166.0/24 -203.22.170.0/24 -203.22.176.0/21 -203.22.194.0/24 -203.22.242.0/23 -203.22.245.0/24 -203.22.246.0/24 -203.22.252.0/23 -203.23.0.0/24 -203.23.47.0/24 -203.23.61.0/24 -203.23.62.0/23 -203.23.73.0/24 -203.23.85.0/24 -203.23.92.0/22 -203.23.98.0/24 -203.23.107.0/24 -203.23.112.0/24 -203.23.130.0/24 -203.23.140.0/23 -203.23.172.0/24 -203.23.182.0/24 -203.23.186.0/23 -203.23.192.0/24 -203.23.197.0/24 -203.23.198.0/24 -203.23.204.0/22 -203.23.224.0/24 -203.23.226.0/23 -203.23.228.0/22 -203.23.249.0/24 -203.23.251.0/24 -203.24.13.0/24 -203.24.18.0/24 -203.24.27.0/24 -203.24.43.0/24 -203.24.56.0/24 -203.24.58.0/24 -203.24.67.0/24 -203.24.74.0/24 -203.24.79.0/24 -203.24.80.0/23 -203.24.84.0/23 -203.24.86.0/24 -203.24.90.0/24 -203.24.111.0/24 -203.24.112.0/24 -203.24.116.0/24 -203.24.122.0/23 -203.24.145.0/24 -203.24.152.0/23 -203.24.157.0/24 -203.24.161.0/24 -203.24.167.0/24 -203.24.186.0/23 -203.24.199.0/24 -203.24.202.0/24 -203.24.212.0/23 -203.24.217.0/24 -203.24.219.0/24 -203.24.244.0/24 -203.25.19.0/24 -203.25.20.0/23 -203.25.46.0/24 -203.25.48.0/21 -203.25.64.0/23 -203.25.91.0/24 -203.25.99.0/24 -203.25.100.0/24 -203.25.106.0/24 -203.25.131.0/24 -203.25.135.0/24 -203.25.138.0/24 -203.25.147.0/24 -203.25.153.0/24 -203.25.154.0/23 -203.25.164.0/24 -203.25.166.0/24 -203.25.174.0/23 -203.25.180.0/24 -203.25.182.0/24 -203.25.191.0/24 -203.25.199.0/24 -203.25.200.0/24 -203.25.202.0/23 -203.25.208.0/20 -203.25.229.0/24 -203.25.235.0/24 -203.25.236.0/24 -203.25.242.0/24 -203.26.12.0/24 -203.26.34.0/24 -203.26.49.0/24 -203.26.50.0/24 -203.26.55.0/24 -203.26.56.0/23 -203.26.60.0/24 -203.26.65.0/24 -203.26.68.0/24 -203.26.76.0/24 -203.26.80.0/24 -203.26.84.0/24 -203.26.97.0/24 -203.26.102.0/23 -203.26.115.0/24 -203.26.116.0/24 -203.26.129.0/24 -203.26.143.0/24 -203.26.144.0/24 -203.26.148.0/23 -203.26.154.0/24 -203.26.158.0/23 -203.26.170.0/24 -203.26.173.0/24 -203.26.176.0/24 -203.26.185.0/24 -203.26.202.0/23 -203.26.210.0/24 -203.26.214.0/24 -203.26.222.0/24 -203.26.224.0/24 -203.26.228.0/24 -203.26.232.0/24 -203.27.0.0/24 -203.27.10.0/24 -203.27.15.0/24 -203.27.16.0/24 -203.27.20.0/24 -203.27.22.0/23 -203.27.40.0/24 -203.27.45.0/24 -203.27.53.0/24 -203.27.65.0/24 -203.27.66.0/24 -203.27.81.0/24 -203.27.88.0/24 -203.27.102.0/24 -203.27.109.0/24 -203.27.117.0/24 -203.27.121.0/24 -203.27.122.0/23 -203.27.125.0/24 -203.27.200.0/24 -203.27.202.0/24 -203.27.233.0/24 -203.27.241.0/24 -203.27.250.0/24 -203.28.10.0/24 -203.28.12.0/24 -203.28.33.0/24 -203.28.34.0/23 -203.28.43.0/24 -203.28.44.0/24 -203.28.54.0/24 -203.28.56.0/24 -203.28.73.0/24 -203.28.74.0/24 -203.28.76.0/24 -203.28.86.0/24 -203.28.88.0/24 -203.28.112.0/24 -203.28.131.0/24 -203.28.136.0/24 -203.28.140.0/24 -203.28.145.0/24 -203.28.165.0/24 -203.28.169.0/24 -203.28.170.0/24 -203.28.178.0/23 -203.28.185.0/24 -203.28.187.0/24 -203.28.196.0/24 -203.28.226.0/23 -203.28.239.0/24 -203.29.2.0/24 -203.29.8.0/23 -203.29.13.0/24 -203.29.14.0/24 -203.29.28.0/24 -203.29.46.0/24 -203.29.57.0/24 -203.29.61.0/24 -203.29.63.0/24 -203.29.69.0/24 -203.29.73.0/24 -203.29.81.0/24 -203.29.90.0/24 -203.29.95.0/24 -203.29.100.0/24 -203.29.103.0/24 -203.29.112.0/24 -203.29.120.0/22 -203.29.182.0/23 -203.29.187.0/24 -203.29.189.0/24 -203.29.190.0/24 -203.29.205.0/24 -203.29.210.0/24 -203.29.217.0/24 -203.29.227.0/24 -203.29.231.0/24 -203.29.233.0/24 -203.29.234.0/24 -203.29.248.0/24 -203.29.254.0/23 -203.30.16.0/23 -203.30.25.0/24 -203.30.27.0/24 -203.30.29.0/24 -203.30.66.0/24 -203.30.81.0/24 -203.30.87.0/24 -203.30.111.0/24 -203.30.121.0/24 -203.30.123.0/24 -203.30.152.0/24 -203.30.156.0/24 -203.30.162.0/24 -203.30.173.0/24 -203.30.175.0/24 -203.30.187.0/24 -203.30.194.0/24 -203.30.217.0/24 -203.30.220.0/24 -203.30.222.0/24 -203.30.232.0/23 -203.30.235.0/24 -203.30.240.0/23 -203.30.246.0/24 -203.30.250.0/23 -203.31.45.0/24 -203.31.46.0/24 -203.31.49.0/24 -203.31.51.0/24 -203.31.54.0/23 -203.31.69.0/24 -203.31.72.0/24 -203.31.80.0/24 -203.31.85.0/24 -203.31.97.0/24 -203.31.105.0/24 -203.31.106.0/24 -203.31.108.0/23 -203.31.124.0/24 -203.31.162.0/24 -203.31.174.0/24 -203.31.177.0/24 -203.31.181.0/24 -203.31.187.0/24 -203.31.189.0/24 -203.31.204.0/24 -203.31.220.0/24 -203.31.222.0/23 -203.31.225.0/24 -203.31.229.0/24 -203.31.248.0/23 -203.31.253.0/24 -203.32.20.0/24 -203.32.48.0/23 -203.32.56.0/24 -203.32.60.0/24 -203.32.62.0/24 -203.32.68.0/23 -203.32.76.0/24 -203.32.81.0/24 -203.32.84.0/23 -203.32.95.0/24 -203.32.102.0/24 -203.32.105.0/24 -203.32.130.0/24 -203.32.133.0/24 -203.32.140.0/24 -203.32.152.0/24 -203.32.186.0/23 -203.32.192.0/24 -203.32.196.0/24 -203.32.203.0/24 -203.32.204.0/23 -203.32.212.0/24 -203.33.4.0/24 -203.33.7.0/24 -203.33.8.0/21 -203.33.21.0/24 -203.33.26.0/24 -203.33.32.0/24 -203.33.63.0/24 -203.33.64.0/24 -203.33.67.0/24 -203.33.68.0/24 -203.33.73.0/24 -203.33.79.0/24 -203.33.100.0/24 -203.33.122.0/24 -203.33.129.0/24 -203.33.131.0/24 -203.33.145.0/24 -203.33.156.0/24 -203.33.158.0/23 -203.33.174.0/24 -203.33.185.0/24 -203.33.200.0/24 -203.33.202.0/23 -203.33.204.0/24 -203.33.206.0/23 -203.33.214.0/23 -203.33.224.0/23 -203.33.226.0/24 -203.33.233.0/24 -203.33.243.0/24 -203.33.250.0/24 -203.34.4.0/24 -203.34.21.0/24 -203.34.27.0/24 -203.34.39.0/24 -203.34.48.0/23 -203.34.54.0/24 -203.34.56.0/23 -203.34.67.0/24 -203.34.69.0/24 -203.34.76.0/24 -203.34.92.0/24 -203.34.106.0/24 -203.34.113.0/24 -203.34.147.0/24 -203.34.150.0/24 -203.34.152.0/23 -203.34.161.0/24 -203.34.162.0/24 -203.34.187.0/24 -203.34.192.0/21 -203.34.204.0/22 -203.34.232.0/24 -203.34.240.0/24 -203.34.242.0/24 -203.34.245.0/24 -203.34.251.0/24 -203.55.2.0/23 -203.55.4.0/24 -203.55.10.0/24 -203.55.13.0/24 -203.55.22.0/24 -203.55.30.0/24 -203.55.93.0/24 -203.55.101.0/24 -203.55.109.0/24 -203.55.110.0/24 -203.55.116.0/23 -203.55.119.0/24 -203.55.128.0/23 -203.55.146.0/23 -203.55.192.0/24 -203.55.196.0/24 -203.55.218.0/23 -203.55.221.0/24 -203.55.224.0/24 -203.56.1.0/24 -203.56.4.0/24 -203.56.12.0/24 -203.56.24.0/24 -203.56.38.0/24 -203.56.40.0/24 -203.56.46.0/24 -203.56.48.0/21 -203.56.68.0/23 -203.56.82.0/23 -203.56.84.0/23 -203.56.95.0/24 -203.56.110.0/24 -203.56.121.0/24 -203.56.161.0/24 -203.56.169.0/24 -203.56.172.0/23 -203.56.175.0/24 -203.56.183.0/24 -203.56.185.0/24 -203.56.187.0/24 -203.56.192.0/24 -203.56.198.0/24 -203.56.201.0/24 -203.56.208.0/23 -203.56.210.0/24 -203.56.214.0/24 -203.56.216.0/24 -203.56.227.0/24 -203.56.228.0/24 -203.56.231.0/24 -203.56.232.0/24 -203.56.240.0/24 -203.56.252.0/24 -203.56.254.0/24 -203.57.5.0/24 -203.57.6.0/24 -203.57.12.0/23 -203.57.28.0/24 -203.57.39.0/24 -203.57.46.0/24 -203.57.58.0/24 -203.57.61.0/24 -203.57.66.0/24 -203.57.69.0/24 -203.57.70.0/23 -203.57.73.0/24 -203.57.90.0/24 -203.57.101.0/24 -203.57.109.0/24 -203.57.123.0/24 -203.57.157.0/24 -203.57.200.0/24 -203.57.202.0/24 -203.57.206.0/24 -203.57.222.0/24 -203.57.224.0/20 -203.57.246.0/23 -203.57.249.0/24 -203.57.253.0/24 -203.57.254.0/23 -203.62.2.0/24 -203.62.131.0/24 -203.62.139.0/24 -203.62.161.0/24 -203.62.197.0/24 -203.62.228.0/22 -203.62.234.0/24 -203.62.246.0/24 -203.76.160.0/22 -203.76.168.0/22 -203.76.208.0/22 -203.76.212.0/22 -203.76.216.0/22 -203.76.240.0/22 -203.76.244.0/22 -203.77.180.0/22 -203.78.48.0/20 -203.78.156.0/22 -203.79.0.0/20 -203.79.32.0/20 -203.80.4.0/23 -203.80.32.0/20 -203.80.57.0/24 -203.80.129.0/24 -203.80.132.0/22 -203.80.136.0/21 -203.80.144.0/20 -203.81.0.0/21 -203.81.16.0/20 -203.81.244.0/22 -203.82.0.0/23 -203.82.16.0/21 -203.82.112.0/22 -203.82.116.0/22 -203.82.120.0/22 -203.82.124.0/22 -203.82.224.0/22 -203.82.228.0/22 -203.82.232.0/22 -203.82.236.0/22 -203.83.0.0/22 -203.83.8.0/22 -203.83.12.0/22 -203.83.56.0/21 -203.83.224.0/20 -203.86.0.0/19 -203.86.32.0/19 -203.86.64.0/20 -203.86.80.0/20 -203.86.96.0/19 -203.86.250.0/24 -203.86.254.0/23 -203.88.32.0/19 -203.88.100.0/22 -203.88.192.0/19 -203.89.0.0/22 -203.89.8.0/21 -203.89.100.0/22 -203.89.133.0/24 -203.89.136.0/22 -203.89.144.0/24 -203.90.0.0/22 -203.90.8.0/22 -203.90.12.0/22 -203.90.128.0/19 -203.90.160.0/19 -203.90.192.0/19 -203.91.32.0/19 -203.91.96.0/20 -203.91.120.0/21 -203.92.0.0/22 -203.92.6.0/24 -203.92.160.0/19 -203.93.0.0/22 -203.93.4.0/22 -203.93.8.0/24 -203.93.9.0/24 -203.93.10.0/23 -203.93.12.0/22 -203.93.16.0/20 -203.93.32.0/19 -203.93.64.0/18 -203.93.128.0/21 -203.93.136.0/22 -203.93.140.0/24 -203.93.141.0/24 -203.93.142.0/23 -203.93.144.0/20 -203.93.160.0/19 -203.93.192.0/18 -203.94.0.0/22 -203.94.4.0/22 -203.94.8.0/21 -203.94.16.0/20 -203.95.0.0/21 -203.95.96.0/20 -203.95.112.0/20 -203.95.128.0/18 -203.95.200.0/22 -203.95.204.0/22 -203.95.208.0/22 -203.95.224.0/19 -203.99.8.0/21 -203.99.16.0/20 -203.99.80.0/20 -203.100.32.0/20 -203.100.48.0/21 -203.100.58.0/24 -203.100.60.0/24 -203.100.63.0/24 -203.100.80.0/20 -203.100.96.0/19 -203.100.192.0/20 -203.104.32.0/20 -203.105.96.0/19 -203.105.128.0/19 -203.107.0.0/17 -203.110.160.0/19 -203.110.208.0/20 -203.110.232.0/23 -203.110.234.0/24 -203.114.80.0/22 -203.114.84.0/22 -203.114.88.0/22 -203.114.92.0/22 -203.114.244.0/22 -203.118.192.0/19 -203.118.241.0/24 -203.118.248.0/22 -203.119.24.0/21 -203.119.32.0/22 -203.119.80.0/22 -203.119.85.0/24 -203.119.113.0/24 -203.119.114.0/23 -203.119.116.0/22 -203.119.120.0/21 -203.119.128.0/17 -203.123.58.0/24 -203.128.32.0/19 -203.128.96.0/19 -203.128.224.0/21 -203.129.8.0/21 -203.130.32.0/19 -203.132.32.0/19 -203.134.240.0/21 -203.135.96.0/20 -203.135.112.0/20 -203.135.160.0/20 -203.142.219.0/24 -203.142.224.0/19 -203.144.96.0/19 -203.145.0.0/19 -203.148.0.0/18 -203.148.64.0/20 -203.148.80.0/22 -203.148.86.0/23 -203.149.92.0/22 -203.152.64.0/19 -203.152.128.0/19 -203.153.0.0/22 -203.156.192.0/18 -203.158.16.0/21 -203.160.52.0/22 -203.160.104.0/21 -203.160.129.0/24 -203.160.192.0/19 -203.161.0.0/22 -203.161.180.0/24 -203.161.183.0/24 -203.161.192.0/19 -203.166.160.0/19 -203.167.28.0/22 -203.168.0.0/19 -203.170.58.0/23 -203.171.0.0/22 -203.171.208.0/24 -203.171.224.0/20 -203.174.4.0/24 -203.174.6.0/24 -203.174.7.0/24 -203.174.96.0/19 -203.175.128.0/19 -203.175.192.0/18 -203.176.0.0/18 -203.176.64.0/19 -203.176.168.0/21 -203.184.80.0/20 -203.185.189.0/24 -203.187.160.0/19 -203.189.0.0/23 -203.189.6.0/23 -203.189.112.0/22 -203.189.192.0/19 -203.189.232.0/22 -203.189.240.0/22 -203.190.96.0/20 -203.190.249.0/24 -203.191.0.0/23 -203.191.2.0/24 -203.191.5.0/24 -203.191.7.0/24 -203.191.16.0/20 -203.191.64.0/18 -203.191.133.0/24 -203.191.144.0/21 -203.191.152.0/21 -203.192.0.0/19 -203.193.224.0/19 -203.194.120.0/21 -203.195.64.0/19 -203.195.112.0/21 -203.195.128.0/17 -203.196.0.0/21 -203.196.8.0/21 -203.196.28.0/22 -203.201.181.0/24 -203.201.182.0/24 -203.202.236.0/22 -203.205.64.0/19 -203.205.128.0/17 -203.207.64.0/20 -203.207.80.0/21 -203.207.88.0/22 -203.207.92.0/22 -203.207.96.0/20 -203.207.112.0/20 -203.207.128.0/18 -203.207.192.0/21 -203.207.200.0/21 -203.207.208.0/20 -203.207.224.0/19 -203.208.0.0/20 -203.208.16.0/22 -203.208.32.0/19 -203.209.224.0/19 -203.212.0.0/20 -203.212.80.0/20 -203.215.232.0/21 -203.217.164.0/22 -203.223.0.0/20 -203.223.16.0/21 -204.52.191.0/24 -210.2.0.0/20 -210.2.16.0/20 -210.5.0.0/19 -210.5.56.0/21 -210.5.128.0/20 -210.5.144.0/20 -210.7.56.0/22 -210.7.60.0/22 -210.12.0.0/18 -210.12.64.0/18 -210.12.128.0/18 -210.12.192.0/18 -210.13.0.0/18 -210.13.64.0/18 -210.13.128.0/17 -210.14.64.0/19 -210.14.112.0/20 -210.14.128.0/19 -210.14.160.0/19 -210.14.192.0/19 -210.14.224.0/19 -210.15.0.0/19 -210.15.32.0/19 -210.15.64.0/19 -210.15.96.0/19 -210.15.128.0/18 -210.16.104.0/22 -210.16.128.0/18 -210.21.0.0/17 -210.21.128.0/17 -210.22.0.0/16 -210.23.32.0/19 -210.25.0.0/16 -210.26.0.0/15 -210.28.0.0/14 -210.32.0.0/14 -210.36.0.0/14 -210.40.0.0/13 -210.51.0.0/16 -210.52.0.0/18 -210.52.64.0/18 -210.52.128.0/17 -210.53.0.0/17 -210.53.128.0/17 -210.56.192.0/19 -210.72.0.0/17 -210.72.128.0/19 -210.72.160.0/19 -210.72.192.0/18 -210.73.0.0/19 -210.73.32.0/19 -210.73.64.0/18 -210.73.128.0/17 -210.74.0.0/19 -210.74.32.0/19 -210.74.64.0/19 -210.74.96.0/19 -210.74.128.0/19 -210.74.160.0/19 -210.74.192.0/18 -210.75.0.0/16 -210.76.0.0/19 -210.76.32.0/19 -210.76.64.0/18 -210.76.128.0/17 -210.77.0.0/16 -210.78.0.0/19 -210.78.32.0/19 -210.78.64.0/18 -210.78.128.0/19 -210.78.160.0/19 -210.78.192.0/18 -210.79.64.0/18 -210.79.224.0/19 -210.82.0.0/15 -210.87.128.0/20 -210.87.144.0/20 -210.87.160.0/19 -210.185.192.0/18 -210.192.96.0/19 -211.64.0.0/14 -211.68.0.0/15 -211.70.0.0/15 -211.80.0.0/16 -211.81.0.0/16 -211.82.0.0/16 -211.83.0.0/16 -211.84.0.0/15 -211.86.0.0/15 -211.88.0.0/16 -211.89.0.0/16 -211.90.0.0/15 -211.92.0.0/15 -211.94.0.0/15 -211.96.0.0/15 -211.98.0.0/16 -211.99.0.0/18 -211.99.64.0/19 -211.99.96.0/19 -211.99.128.0/17 -211.100.0.0/16 -211.101.0.0/18 -211.101.64.0/18 -211.101.128.0/17 -211.102.0.0/16 -211.103.0.0/17 -211.103.128.0/17 -211.136.0.0/14 -211.140.0.0/15 -211.142.0.0/17 -211.142.128.0/17 -211.143.0.0/16 -211.144.0.0/15 -211.146.0.0/16 -211.147.0.0/16 -211.148.0.0/14 -211.152.0.0/15 -211.154.0.0/16 -211.155.0.0/18 -211.155.64.0/19 -211.155.96.0/19 -211.155.128.0/17 -211.156.0.0/14 -211.160.0.0/14 -211.164.0.0/14 -212.64.0.0/17 -212.129.128.0/17 -218.0.0.0/16 -218.1.0.0/16 -218.2.0.0/15 -218.4.0.0/15 -218.6.0.0/16 -218.7.0.0/16 -218.8.0.0/15 -218.10.0.0/16 -218.11.0.0/16 -218.12.0.0/16 -218.13.0.0/16 -218.14.0.0/15 -218.16.0.0/14 -218.20.0.0/16 -218.21.0.0/17 -218.21.128.0/17 -218.22.0.0/15 -218.24.0.0/15 -218.26.0.0/16 -218.27.0.0/16 -218.28.0.0/15 -218.30.0.0/15 -218.56.0.0/14 -218.60.0.0/15 -218.62.0.0/17 -218.62.128.0/17 -218.63.0.0/16 -218.64.0.0/15 -218.66.0.0/16 -218.67.0.0/17 -218.67.128.0/17 -218.68.0.0/15 -218.70.0.0/15 -218.72.0.0/14 -218.76.0.0/15 -218.78.0.0/15 -218.80.0.0/14 -218.84.0.0/14 -218.88.0.0/13 -218.96.0.0/15 -218.98.0.0/17 -218.98.128.0/18 -218.98.192.0/19 -218.98.224.0/19 -218.99.0.0/16 -218.100.88.0/21 -218.100.96.0/19 -218.100.128.0/17 -218.104.0.0/17 -218.104.128.0/19 -218.104.160.0/19 -218.104.192.0/21 -218.104.200.0/21 -218.104.208.0/20 -218.104.224.0/19 -218.105.0.0/16 -218.106.0.0/15 -218.108.0.0/16 -218.109.0.0/16 -218.185.192.0/19 -218.185.240.0/21 -218.192.0.0/16 -218.193.0.0/16 -218.194.0.0/16 -218.195.0.0/16 -218.196.0.0/14 -218.200.0.0/14 -218.204.0.0/15 -218.206.0.0/15 -218.240.0.0/14 -218.244.0.0/15 -218.246.0.0/15 -218.249.0.0/16 -219.72.0.0/16 -219.82.0.0/16 -219.83.128.0/17 -219.90.68.0/22 -219.90.72.0/22 -219.90.76.0/22 -219.128.0.0/12 -219.144.0.0/14 -219.148.0.0/16 -219.149.0.0/17 -219.149.128.0/18 -219.149.192.0/18 -219.150.0.0/19 -219.150.32.0/19 -219.150.64.0/19 -219.150.96.0/20 -219.150.112.0/20 -219.150.128.0/17 -219.151.0.0/19 -219.151.32.0/19 -219.151.64.0/18 -219.151.128.0/17 -219.152.0.0/15 -219.154.0.0/15 -219.156.0.0/15 -219.158.0.0/17 -219.158.128.0/17 -219.159.0.0/18 -219.159.64.0/18 -219.159.128.0/17 -219.216.0.0/15 -219.218.0.0/15 -219.220.0.0/16 -219.221.0.0/16 -219.222.0.0/15 -219.224.0.0/15 -219.226.0.0/16 -219.227.0.0/16 -219.228.0.0/15 -219.230.0.0/15 -219.232.0.0/14 -219.236.0.0/15 -219.238.0.0/15 -219.242.0.0/15 -219.244.0.0/14 -220.101.192.0/18 -220.112.0.0/14 -220.152.128.0/17 -220.154.0.0/15 -220.158.240.0/22 -220.160.0.0/11 -220.192.0.0/15 -220.194.0.0/15 -220.196.0.0/14 -220.200.0.0/13 -220.231.0.0/18 -220.231.128.0/17 -220.232.64.0/18 -220.234.0.0/16 -220.242.0.0/15 -220.247.136.0/21 -220.248.0.0/14 -220.252.0.0/16 -221.0.0.0/15 -221.2.0.0/16 -221.3.0.0/17 -221.3.128.0/17 -221.4.0.0/16 -221.5.0.0/17 -221.5.128.0/17 -221.6.0.0/16 -221.7.0.0/19 -221.7.32.0/19 -221.7.64.0/19 -221.7.96.0/19 -221.7.128.0/17 -221.8.0.0/15 -221.10.0.0/16 -221.11.0.0/17 -221.11.128.0/18 -221.11.192.0/19 -221.11.224.0/19 -221.12.0.0/17 -221.12.128.0/18 -221.13.0.0/18 -221.13.64.0/19 -221.13.96.0/19 -221.13.128.0/17 -221.14.0.0/15 -221.122.0.0/15 -221.128.128.0/17 -221.129.0.0/16 -221.130.0.0/15 -221.133.224.0/19 -221.136.0.0/16 -221.137.0.0/16 -221.172.0.0/14 -221.176.0.0/13 -221.192.0.0/15 -221.194.0.0/16 -221.195.0.0/16 -221.196.0.0/15 -221.198.0.0/16 -221.199.0.0/19 -221.199.32.0/20 -221.199.48.0/20 -221.199.64.0/18 -221.199.128.0/18 -221.199.192.0/20 -221.199.224.0/19 -221.200.0.0/14 -221.204.0.0/15 -221.206.0.0/16 -221.207.0.0/18 -221.207.64.0/18 -221.207.128.0/17 -221.208.0.0/14 -221.212.0.0/16 -221.213.0.0/16 -221.214.0.0/15 -221.216.0.0/13 -221.224.0.0/13 -221.232.0.0/14 -221.236.0.0/15 -221.238.0.0/16 -221.239.0.0/17 -221.239.128.0/17 -222.16.0.0/15 -222.18.0.0/15 -222.20.0.0/15 -222.22.0.0/16 -222.23.0.0/16 -222.24.0.0/15 -222.26.0.0/15 -222.28.0.0/14 -222.32.0.0/11 -222.64.0.0/13 -222.72.0.0/15 -222.74.0.0/16 -222.75.0.0/16 -222.76.0.0/14 -222.80.0.0/15 -222.82.0.0/16 -222.83.0.0/17 -222.83.128.0/17 -222.84.0.0/16 -222.85.0.0/17 -222.85.128.0/17 -222.86.0.0/15 -222.88.0.0/15 -222.90.0.0/15 -222.92.0.0/14 -222.125.0.0/16 -222.126.128.0/17 -222.128.0.0/14 -222.132.0.0/14 -222.136.0.0/13 -222.160.0.0/15 -222.162.0.0/16 -222.163.0.0/19 -222.163.32.0/19 -222.163.64.0/18 -222.163.128.0/17 -222.168.0.0/15 -222.170.0.0/15 -222.172.0.0/17 -222.172.128.0/17 -222.173.0.0/16 -222.174.0.0/15 -222.176.0.0/13 -222.184.0.0/13 -222.192.0.0/14 -222.196.0.0/15 -222.198.0.0/16 -222.199.0.0/16 -222.200.0.0/14 -222.204.0.0/15 -222.206.0.0/15 -222.208.0.0/13 -222.216.0.0/15 -222.218.0.0/16 -222.219.0.0/16 -222.220.0.0/15 -222.222.0.0/15 -222.240.0.0/13 -222.248.0.0/16 -222.249.0.0/17 -222.249.128.0/19 -222.249.160.0/20 -222.249.176.0/20 -222.249.192.0/18 -223.0.0.0/15 -223.2.0.0/15 -223.4.0.0/14 -223.8.0.0/13 -223.20.0.0/15 -223.27.184.0/22 -223.29.208.0/22 -223.29.252.0/22 -223.64.0.0/11 -223.96.0.0/12 -223.112.0.0/14 -223.116.0.0/15 -223.120.128.0/17 -223.121.128.0/17 -223.122.0.0/15 -223.124.0.0/14 -223.128.0.0/15 -223.144.0.0/12 -223.160.0.0/14 -223.166.0.0/15 -223.192.0.0/15 -223.198.0.0/15 -223.201.0.0/16 -223.202.0.0/15 -223.208.0.0/14 -223.212.0.0/15 -223.214.0.0/15 -223.220.0.0/15 -223.223.176.0/20 -223.223.192.0/20 -223.240.0.0/13 -223.248.0.0/14 -223.252.128.0/17 -223.254.0.0/16 -223.255.0.0/17 -223.255.236.0/22 -223.255.252.0/23 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_domain.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/custom_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_domain.list deleted file mode 100644 index 08a6f52dcd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_domain.list +++ /dev/null @@ -1,6 +0,0 @@ -cdn.registerdisney.go.com -disneyplus.com -disney-plus.net -dssott.com -bamgrid.com -execute-api.us-east-1.amazonaws.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/disney_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw.list deleted file mode 100644 index b8772ba26e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw.list +++ /dev/null @@ -1,53 +0,0 @@ -91smartyun.pt -adobe.com -amazonaws.com -ampproject.org -apple.news -aws.amazon.com -azureedge.net -backpackers.com.tw -bitfinex.com -buzzfeed.com -clockwise.ee -cloudfront.net -coindesk.com -coinsquare.io -cryptocompare.com -dropboxstatic.com -eurecom.fr -gdax.com -github.com -kknews.cc -nutaq.com -openairinterface.org -skype.com -sublimetext.com -textnow.com -textnow.me -trouter.io -uploaded.net -whatsapp.com -whatsapp.net -wsj.net -google.com -google.com.hk -gstatic.com -googleusercontent.com -googlepages.com -googlevideo.com -googlecode.com -googleapis.com -googlesource.com -googledrive.com -ggpht.com -youtube.com -youtu.be -ytimg.com -twitter.com -facebook.com -fastly.net -akamai.net -akamaiedge.net -akamaihd.net -edgesuite.net -edgekey.net \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw_base.conf b/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw_base.conf deleted file mode 100644 index c447881bd5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw_base.conf +++ /dev/null @@ -1,5880 +0,0 @@ -ipset=/.h12.io/gfwlist -ipset=/.starlark.net/gfwlist -ipset=/.golang.org/gfwlist -ipset=/.honnef.co/gfwlist -ipset=/.0rz.tw/gfwlist -ipset=/.0to255.com/gfwlist -ipset=/.10musume.com/gfwlist -ipset=/.123rf.com/gfwlist -ipset=/.12bet.com/gfwlist -ipset=/.12vpn.com/gfwlist -ipset=/.141hongkong.com/gfwlist -ipset=/.173ng.com/gfwlist -ipset=/.1984bbs.com/gfwlist -ipset=/.1984bbs.org/gfwlist -ipset=/.1-apple.com.tw/gfwlist -ipset=/.1bao.org/gfwlist -ipset=/.1eew.com/gfwlist -ipset=/.1pondo.tv/gfwlist -ipset=/.2000fun.com/gfwlist -ipset=/.2008xianzhang.info/gfwlist -ipset=/.21andy.com/gfwlist -ipset=/.247realmedia.com/gfwlist -ipset=/.24smile.org/gfwlist -ipset=/.2-hand.info/gfwlist -ipset=/.2mdn.net/gfwlist -ipset=/.2shared.com/gfwlist -ipset=/.301works.org/gfwlist -ipset=/.315lz.com/gfwlist -ipset=/.32red.com/gfwlist -ipset=/.365singles.com.ar/gfwlist -ipset=/.36rain.com/gfwlist -ipset=/.4bluestones.biz/gfwlist -ipset=/.4chan.org/gfwlist -ipset=/.4pppc.gov.tw/gfwlist -ipset=/.4shared.com/gfwlist -ipset=/.4sq.com/gfwlist -ipset=/.51.ca/gfwlist -ipset=/.5i01.com/gfwlist -ipset=/.5maodang.com/gfwlist -ipset=/.64tianwang.com/gfwlist -ipset=/.64wiki.com/gfwlist -ipset=/.666kb.com/gfwlist -ipset=/.6park.com/gfwlist -ipset=/.7capture.com/gfwlist -ipset=/.881903.com/gfwlist -ipset=/.888.com/gfwlist -ipset=/.89-64.org/gfwlist -ipset=/.9001700.com/gfwlist -ipset=/.91porn.com/gfwlist -ipset=/.921.gov.tw/gfwlist -ipset=/.92ccav.com/gfwlist -ipset=/.9bis.com/gfwlist -ipset=/.9bis.net/gfwlist -ipset=/.9city.me/gfwlist -ipset=/.a5.com.ru/gfwlist -ipset=/.abc.pp.ru/gfwlist -ipset=/.abitno.linpie.com/gfwlist -ipset=/.ablwang.com/gfwlist -ipset=/.aboluowang.com/gfwlist -ipset=/.aboutgfw.com/gfwlist -ipset=/.acgkj.com/gfwlist -ipset=/.ac.jiruan.net/gfwlist -ipset=/.ac.playstation.net/gfwlist -ipset=/.actimes.com.au/gfwlist -ipset=/.aculo.us/gfwlist -ipset=/.ad1.nownews.com/gfwlist -ipset=/.addictedtocoffee.de/gfwlist -ipset=/.ads.backchina.com/gfwlist -ipset=/.adultfriendfinder.com/gfwlist -ipset=/.adultkeep.net/gfwlist -ipset=/.advanscene.com/gfwlist -ipset=/.advertfan.com/gfwlist -ipset=/.aec.gov.tw/gfwlist -ipset=/.aenhancers.com/gfwlist -ipset=/.af.mil/gfwlist -ipset=/.aftygh.gov.tw/gfwlist -ipset=/.aide.gov.tw/gfwlist -ipset=/.aiph.net/gfwlist -ipset=/.aisex.com/gfwlist -ipset=/.ait.org.tw/gfwlist -ipset=/.aiweiweiblog.com/gfwlist -ipset=/.aiweiwei.com/gfwlist -ipset=/.ajaxplorer.info/gfwlist -ipset=/.akamaihd.net/gfwlist -ipset=/.akiba-online.com/gfwlist -ipset=/.alabout.com/gfwlist -ipset=/.alasbarricadas.org/gfwlist -ipset=/.alexlur.org/gfwlist -ipset=/.aliengu.com/gfwlist -ipset=/.alkasir.com/gfwlist -ipset=/.allaboutalpha.com/gfwlist -ipset=/.allgirlsallowed.org/gfwlist -ipset=/.alliance.org.hk/gfwlist -ipset=/.allinfa.com/gfwlist -ipset=/.allinfo.com/gfwlist -ipset=/.allmovie.com/gfwlist -ipset=/.allonlinux.free.fr/gfwlist -ipset=/.all-that-is-interesting.com/gfwlist -ipset=/.al-qimmah.net/gfwlist -ipset=/.alternate-tools.com/gfwlist -ipset=/.altrec.com/gfwlist -ipset=/.alvinalexander.com/gfwlist -ipset=/.alwaysdata.com/gfwlist -ipset=/.alwaysdata.net/gfwlist -ipset=/.am730.com.hk/gfwlist -ipset=/.amazonaws.com/gfwlist -ipset=/.ameblo.jp/gfwlist -ipset=/.americangreencard.com/gfwlist -ipset=/.amiblockedornot.com/gfwlist -ipset=/.amnesty.org/gfwlist -ipset=/.amnestyusa.org/gfwlist -ipset=/.amoiist.com/gfwlist -ipset=/.amzs.me/gfwlist -ipset=/.analyze-v.com/gfwlist -ipset=/.anchorfree.com/gfwlist -ipset=/.andfaraway.net/gfwlist -ipset=/.android.com/gfwlist -ipset=/.angularjs.org/gfwlist -ipset=/.animecrazy.net/gfwlist -ipset=/.anobii.com/gfwlist -ipset=/.anontext.com/gfwlist -ipset=/.anonymizer.com/gfwlist -ipset=/.a-normal-day.com/gfwlist -ipset=/.answering-islam.org/gfwlist -ipset=/.anthonycalzadilla.com/gfwlist -ipset=/.anti.anti.cnn.googlepages.com/gfwlist -ipset=/.antidrm.hpg.ig.com.br/gfwlist -ipset=/.antiwave.net/gfwlist -ipset=/.aobo.com.au/gfwlist -ipset=/.aolchannels.aol.com/gfwlist -ipset=/.aomiwang.com/gfwlist -ipset=/.apetube.com/gfwlist -ipset=/.apiary.io/gfwlist -ipset=/.apidocs.linksalpha.com/gfwlist -ipset=/.apigee.com/gfwlist -ipset=/.api.linksalpha.com/gfwlist -ipset=/.api.proxlet.com/gfwlist -ipset=/.api.supertweet.net/gfwlist -ipset=/.app.heywire.com/gfwlist -ipset=/.app.hkatvnews.com/gfwlist -ipset=/.appledaily.com/gfwlist -ipset=/.appledaily.com.tw/gfwlist -ipset=/.apps.hloli.net/gfwlist -ipset=/.appspot.com/gfwlist -ipset=/.archive.is/gfwlist -ipset=/.archive.org/gfwlist -ipset=/.arctosia.com/gfwlist -ipset=/.areca-backup.org/gfwlist -ipset=/.army.mil/gfwlist -ipset=/.arte.gov.tw/gfwlist -ipset=/.art-or-porn.com/gfwlist -ipset=/.artsy.net/gfwlist -ipset=/.asahichinese.com/gfwlist -ipset=/.asdfg.jp/gfwlist -ipset=/.asiafriendfinder.com/gfwlist -ipset=/.asiaharvest.org/gfwlist -ipset=/.asianews.it/gfwlist -ipset=/.asianwomensfilm.de/gfwlist -ipset=/.askstudent.com/gfwlist -ipset=/.askynz.net/gfwlist -ipset=/.assembla.com/gfwlist -ipset=/.astonmartinnews.com/gfwlist -ipset=/.atchinese.com/gfwlist -ipset=/.atc.org.au/gfwlist -ipset=/.atgfw.org/gfwlist -ipset=/.atj.org.tw/gfwlist -ipset=/.atlaspost.com/gfwlist -ipset=/.atnext.com/gfwlist -ipset=/.autoproxy.org/gfwlist -ipset=/.avaaz.org/gfwlist -ipset=/.avdb.in/gfwlist -ipset=/.avidemux.org/gfwlist -ipset=/.avoision.com/gfwlist -ipset=/.awardwinningfjords.com/gfwlist -ipset=/.axureformac.com/gfwlist -ipset=/.babynet.com.hk/gfwlist -ipset=/.backchina.com/gfwlist -ipset=/.backpackers.com.tw/gfwlist -ipset=/.badassjs.com/gfwlist -ipset=/.badoo.com/gfwlist -ipset=/.baidu.jp/gfwlist -ipset=/.baixing.me/gfwlist -ipset=/.bannedbook.org/gfwlist -ipset=/.barnabu.co.uk/gfwlist -ipset=/.basetimesheightdividedby2.com/gfwlist -ipset=/.bayvoice.net/gfwlist -ipset=/.bbcchinese.com/gfwlist -ipset=/.bbc.com/gfwlist -ipset=/.bbc.co.uk/gfwlist -ipset=/.bbci.co.uk/gfwlist -ipset=/.bbcimg.co.uk/gfwlist -ipset=/.bbc.in/gfwlist -ipset=/.bbg.gov/gfwlist -ipset=/.bbs2.newsgroup.la/gfwlist -ipset=/.bbs.ecstart.com/gfwlist -ipset=/.bbsfeed.com/gfwlist -ipset=/.bbs.kimy.com.tw/gfwlist -ipset=/.bbsland.com/gfwlist -ipset=/.bbs.morbell.com/gfwlist -ipset=/.bbs.mychat.to/gfwlist -ipset=/.bbs.newsgroup.la/gfwlist -ipset=/.bbs.ozchinese.com/gfwlist -ipset=/.bbs.qmzdd.com/gfwlist -ipset=/.bbs.sina.com/gfwlist -ipset=/.bbs.skykiwi.com/gfwlist -ipset=/.bbs.tuitui.info/gfwlist -ipset=/.bb.ttv.com.tw/gfwlist -ipset=/.bcc.com.tw/gfwlist -ipset=/.bcchinese.net/gfwlist -ipset=/.bdhr.gov.tw/gfwlist -ipset=/.bd.zhe.la/gfwlist -ipset=/.bebo.com/gfwlist -ipset=/.beeg.com/gfwlist -ipset=/.beijing1989.com/gfwlist -ipset=/.beijingspring.com/gfwlist -ipset=/.benjaminste.in/gfwlist -ipset=/.berlintwitterwall.com/gfwlist -ipset=/.bestforchina.org/gfwlist -ipset=/.bestvpnservice.com/gfwlist -ipset=/.bet365.com/gfwlist -ipset=/.beta.iset.com.tw/gfwlist -ipset=/.beta.usejump.com/gfwlist -ipset=/.betfair.com/gfwlist -ipset=/.bettween.com/gfwlist -ipset=/.betvictor.com/gfwlist -ipset=/.bewww.net/gfwlist -ipset=/.beyondfirewall.com/gfwlist -ipset=/.bfnn.org/gfwlist -ipset=/.biantailajiao.com/gfwlist -ipset=/.biantailajiao.in/gfwlist -ipset=/.bigfools.com/gfwlist -ipset=/.bignews.org/gfwlist -ipset=/.bigsound.org/gfwlist -ipset=/.bill2-software.com/gfwlist -ipset=/.billywr.com/gfwlist -ipset=/.bill.zhong.pp.ru/gfwlist -ipset=/.bipic.net/gfwlist -ipset=/.bitcointalk.org/gfwlist -ipset=/.bit.ly/gfwlist -ipset=/.bitly.com/gfwlist -ipset=/.bitshare.com/gfwlist -ipset=/.bjzc.org/gfwlist -ipset=/.blinkx.com/gfwlist -ipset=/.blinw.com/gfwlist -ipset=/.blip.tv/gfwlist -ipset=/.blockcn.com/gfwlist -ipset=/.blog.birdhouseapp.com/gfwlist -ipset=/.blog.bitly.com/gfwlist -ipset=/.blogblog.com/gfwlist -ipset=/.blog.boxcar.io/gfwlist -ipset=/.blogcatalog.com/gfwlist -ipset=/.blog.davidziegler.net/gfwlist -ipset=/.blog.dayoneapp.com/gfwlist -ipset=/.blog.de/gfwlist -ipset=/.blog.dribbble.com/gfwlist -ipset=/.blog.exblog.co.jp/gfwlist -ipset=/.blog.expofutures.com/gfwlist -ipset=/.blog.fizzik.com/gfwlist -ipset=/.blog.foolsmountain.com/gfwlist -ipset=/.blogger.com/gfwlist -ipset=/.blog.gowalla.com/gfwlist -ipset=/.blog.hotpotato.com/gfwlist -ipset=/.blog.ifttt.com/gfwlist -ipset=/.blogimg.jp/gfwlist -ipset=/.blog.instagram.com/gfwlist -ipset=/.blog.instapaper.com/gfwlist -ipset=/.blog.iphone-dev.org/gfwlist -ipset=/.blog.istef.info/gfwlist -ipset=/.blog.jackjia.com/gfwlist -ipset=/.blog.joeyrobert.org/gfwlist -ipset=/.blog.kangye.org/gfwlist -ipset=/.blog.kickstarter.com/gfwlist -ipset=/.blog.kl.am/gfwlist -ipset=/.blog.klip.me/gfwlist -ipset=/.blog.lester850.info/gfwlist -ipset=/.blog.lightbox.com/gfwlist -ipset=/.bloglines.com/gfwlist -ipset=/.bloglovin.com/gfwlist -ipset=/.blog.mongodb.org/gfwlist -ipset=/.blog.openinkpot.org/gfwlist -ipset=/.blog.palm.com/gfwlist -ipset=/.blog.path.com/gfwlist -ipset=/.blog.pathtosharepoint.com/gfwlist -ipset=/.blog.pchome.com.tw/gfwlist -ipset=/.blog.pentalogic.net/gfwlist -ipset=/.blog.pikchur.com/gfwlist -ipset=/.blog.pilotmoon.com/gfwlist -ipset=/.blog.redren.com/gfwlist -ipset=/.blog.rockmelt.com/gfwlist -ipset=/.blog.romanandreg.com/gfwlist -ipset=/.blog.s135.com/gfwlist -ipset=/.blogs.icerocket.com/gfwlist -ipset=/.blog.sina.com.tw/gfwlist -ipset=/.blog.sogoo.org/gfwlist -ipset=/.blog.sparrowmailapp.com/gfwlist -ipset=/.blogspot.com/gfwlist -ipset=/.blogspot.co.uk/gfwlist -ipset=/.blogspot.de/gfwlist -ipset=/.blogspot.fr/gfwlist -ipset=/.blogspot.in/gfwlist -ipset=/.blogspot.jp/gfwlist -ipset=/.blogs.tampabay.com/gfwlist -ipset=/.blog.summify.com/gfwlist -ipset=/.blogs.yahoo.co.jp/gfwlist -ipset=/.blog.syx86.cn/gfwlist -ipset=/.blog.syx86.com/gfwlist -ipset=/.blog.taragana.com/gfwlist -ipset=/.blogtd.net/gfwlist -ipset=/.blogtd.org/gfwlist -ipset=/.blog.tiney.com/gfwlist -ipset=/.blog.topify.com/gfwlist -ipset=/.blog.usa.gov/gfwlist -ipset=/.blog.xuite.net/gfwlist -ipset=/.blog.youthwant.com.tw/gfwlist -ipset=/.blog.youxu.info/gfwlist -ipset=/.bloodshed.net/gfwlist -ipset=/.bloomberg.cn/gfwlist -ipset=/.bloomberg.com/gfwlist -ipset=/.bloomberg.de/gfwlist -ipset=/.bloomfortune.com/gfwlist -ipset=/.bmediaasia.com/gfwlist -ipset=/.bnrmetal.com/gfwlist -ipset=/.boardreader.com/gfwlist -ipset=/.bobulate.com/gfwlist -ipset=/.bolin.netfirms.com/gfwlist -ipset=/.bonbonme.com/gfwlist -ipset=/.bonjourlesgeeks.com/gfwlist -ipset=/.boobstagram.com/gfwlist -ipset=/.books.com.tw/gfwlist -ipset=/.bookshelfporn.com/gfwlist -ipset=/.botanwang.com/gfwlist -ipset=/.bot.nu/gfwlist -ipset=/.bowenpress.com/gfwlist -ipset=/.boxunblog.com/gfwlist -ipset=/.boxunclub.com/gfwlist -ipset=/.boxun.com/gfwlist -ipset=/.boxun.tv/gfwlist -ipset=/.bralio.com/gfwlist -ipset=/.branch.com/gfwlist -ipset=/.brandonhutchinson.com/gfwlist -ipset=/.braumeister.org/gfwlist -ipset=/.break.com/gfwlist -ipset=/.breakingtweets.com/gfwlist -ipset=/.briefdream.com/gfwlist -ipset=/.brightcove.com/gfwlist -ipset=/.brightkite.com/gfwlist -ipset=/.brizzly.com/gfwlist -ipset=/.broadbook.com/gfwlist -ipset=/.br.st/gfwlist -ipset=/.brucewang.net/gfwlist -ipset=/.bt95.com/gfwlist -ipset=/.btdigg.org/gfwlist -ipset=/.btrd.net/gfwlist -ipset=/.budaedu.org/gfwlist -ipset=/.bugclub.org/gfwlist -ipset=/.builtwithbootstrap.com/gfwlist -ipset=/.bullogger.com/gfwlist -ipset=/.bullog.org/gfwlist -ipset=/.businesstimes.com.cn/gfwlist -ipset=/.businessweek.com/gfwlist -ipset=/.buugaa.com/gfwlist -ipset=/.buy.yahoo.com.tw/gfwlist -ipset=/.buzzurl.jp/gfwlist -ipset=/.bwbx.io/gfwlist -ipset=/.bwsj.hk/gfwlist -ipset=/.bx.tl/gfwlist -ipset=/.c1522.mooo.com/gfwlist -ipset=/.cacnw.com/gfwlist -ipset=/.cactusvpn.com/gfwlist -ipset=/.cafepress.com/gfwlist -ipset=/.cahr.org.tw/gfwlist -ipset=/.calameo.com/gfwlist -ipset=/.calebelston.com/gfwlist -ipset=/.cams.com/gfwlist -ipset=/.cams.org.sg/gfwlist -ipset=/.canadameet.com/gfwlist -ipset=/.canyu.org/gfwlist -ipset=/.caobian.info/gfwlist -ipset=/.caochangqing.com/gfwlist -ipset=/.cao.im/gfwlist -ipset=/.cari.com.my/gfwlist -ipset=/.catch22.net/gfwlist -ipset=/.catfightpayperview.xxx/gfwlist -ipset=/.catholic.org.hk/gfwlist -ipset=/.catholic.org.tw/gfwlist -ipset=/.cbs.ntu.edu.tw/gfwlist -ipset=/.cc9007.spaces.live.com/gfwlist -ipset=/.ccavtop10.com/gfwlist -ipset=/.ccdtr.org/gfwlist -ipset=/.ccim.org/gfwlist -ipset=/.cclife.org/gfwlist -ipset=/.ccthere.com/gfwlist -ipset=/.cctongbao.com/gfwlist -ipset=/.ccue.ca/gfwlist -ipset=/.ccue.com/gfwlist -ipset=/.cdig.info/gfwlist -ipset=/.cdjp.org/gfwlist -ipset=/.cdnews.com.tw/gfwlist -ipset=/.cdn.printfriendly.com/gfwlist -ipset=/.cdp1998.org/gfwlist -ipset=/.cdp2006.org/gfwlist -ipset=/.cdp.sinica.edu.tw/gfwlist -ipset=/.cdpusa.org/gfwlist -ipset=/.cdpweb.org/gfwlist -ipset=/.cdpwu.org/gfwlist -ipset=/.cdw.com/gfwlist -ipset=/.cecc.gov/gfwlist -ipset=/.cellulo.info/gfwlist -ipset=/.cenci.tk/gfwlist -ipset=/.cenews.eu/gfwlist -ipset=/.centralnation.com/gfwlist -ipset=/.centurys.net/gfwlist -ipset=/.c-est-simple.com/gfwlist -ipset=/.cfhks.org.hk/gfwlist -ipset=/.cftfc.com/gfwlist -ipset=/.cgdepot.org/gfwlist -ipset=/.chandoo.org/gfwlist -ipset=/.change.org/gfwlist -ipset=/.changp.com/gfwlist -ipset=/.chaos.e-spacy.com/gfwlist -ipset=/.chapm25.com/gfwlist -ipset=/.chartbeat.net/gfwlist -ipset=/.chaturbate.com/gfwlist -ipset=/.chccc.gov.tw/gfwlist -ipset=/.chengmingmag.com/gfwlist -ipset=/.chenguangcheng.com/gfwlist -ipset=/.chenpokong.com/gfwlist -ipset=/.chenyehao.spaces.live.com/gfwlist -ipset=/.cherrysave.com/gfwlist -ipset=/.chevronwp7.com/gfwlist -ipset=/.chicagoncmtv.com/gfwlist -ipset=/.china101.com/gfwlist -ipset=/.china21.com/gfwlist -ipset=/.china21.org/gfwlist -ipset=/.china5000.us/gfwlist -ipset=/.chinaaffairs.org/gfwlist -ipset=/.chinaaid.me/gfwlist -ipset=/.chinaaid.net/gfwlist -ipset=/.chinaaid.org/gfwlist -ipset=/.chinaaid.us/gfwlist -ipset=/.chinachange.org/gfwlist -ipset=/.chinachannel.hk/gfwlist -ipset=/.chinacomments.org/gfwlist -ipset=/.chinadigitaltimes.net/gfwlist -ipset=/.chinaeweekly.com/gfwlist -ipset=/.chinafreepress.org/gfwlist -ipset=/.chinagate.com/gfwlist -ipset=/.chinageeks.org/gfwlist -ipset=/.chinagfw.org/gfwlist -ipset=/.chinagreenparty.org/gfwlist -ipset=/.china-green-party.spaces.live.com/gfwlist -ipset=/.chinahush.com/gfwlist -ipset=/.chinainperspective.com/gfwlist -ipset=/.chinainperspective.net/gfwlist -ipset=/.chinainperspective.org/gfwlist -ipset=/.chinainterimgov.org/gfwlist -ipset=/.chinalawandpolicy.com/gfwlist -ipset=/.chinalawtranslate.com/gfwlist -ipset=/.chinamule.com/gfwlist -ipset=/.chinamz.org/gfwlist -ipset=/.chinarightsia.org/gfwlist -ipset=/.chinasocialdemocraticparty.com/gfwlist -ipset=/.chinasoul.org/gfwlist -ipset=/.chinatimes.com/gfwlist -ipset=/.chinatweeps.com/gfwlist -ipset=/.chinaway.org/gfwlist -ipset=/.china-week.com/gfwlist -ipset=/.chinaworker.info/gfwlist -ipset=/.chinaxchina.com/gfwlist -ipset=/.chinayouth.org.hk/gfwlist -ipset=/.chinayuanmin.org/gfwlist -ipset=/.chinesedailynews.com/gfwlist -ipset=/.chinese.engadget.com/gfwlist -ipset=/.chinese-hermit.net/gfwlist -ipset=/.chinese-memorial.org/gfwlist -ipset=/.chinesen.de/gfwlist -ipset=/.chinesenewsnet.com/gfwlist -ipset=/.chinesepen.org/gfwlist -ipset=/.chinese.rnw.nl/gfwlist -ipset=/.chinese.soifind.com/gfwlist -ipset=/.chinesetalks.net/gfwlist -ipset=/.chinese.wsj.com/gfwlist -ipset=/.chingcheong.com/gfwlist -ipset=/.chn.chosun.com/gfwlist -ipset=/.chrispederick.com/gfwlist -ipset=/.chrispederick.net/gfwlist -ipset=/.christianstudy.com/gfwlist -ipset=/.christiantimes.org.hk/gfwlist -ipset=/.christusrex.org/gfwlist -ipset=/.chrlawyers.hk/gfwlist -ipset=/.chrlcg-hk.org/gfwlist -ipset=/.chromeadblock.com/gfwlist -ipset=/.chrome.com/gfwlist -ipset=/.ch.shvoong.com/gfwlist -ipset=/.chubun.com/gfwlist -ipset=/.chuizi.net/gfwlist -ipset=/.chukuang.gov.tw/gfwlist -ipset=/.circlethebayfortibet.org/gfwlist -ipset=/.citizenlab.org/gfwlist -ipset=/.citizensradio.org/gfwlist -ipset=/.city9x.com/gfwlist -ipset=/.civicparty.hk/gfwlist -ipset=/.civilhrfront.org/gfwlist -ipset=/.civilmedia.tw/gfwlist -ipset=/.cjb.net/gfwlist -ipset=/.ck101.com/gfwlist -ipset=/.classicalguitarblog.net/gfwlist -ipset=/.clb.org.hk/gfwlist -ipset=/.cl.d0z.net/gfwlist -ipset=/.clientsfromhell.net/gfwlist -ipset=/.clipfish.de/gfwlist -ipset=/.cl.ly/gfwlist -ipset=/.cloudfront.net/gfwlist -ipset=/.club.backchina.com/gfwlist -ipset=/.cms.gov/gfwlist -ipset=/.cmule.com/gfwlist -ipset=/.cn2.streetvoice.com/gfwlist -ipset=/.cna.com.tw/gfwlist -ipset=/.cnavista.com.tw/gfwlist -ipset=/.cn.calameo.com/gfwlist -ipset=/.cn.dayabook.com/gfwlist -ipset=/.cnd.org/gfwlist -ipset=/.cn.fmnnow.com/gfwlist -ipset=/.cn.ibtimes.com/gfwlist -ipset=/.cnn.com/gfwlist -ipset=/.cn.news.cnyes.com/gfwlist -ipset=/.cn.streetvoice.com/gfwlist -ipset=/.cn.uncyclopedia.wikia.com/gfwlist -ipset=/.cn.voa.mobi/gfwlist -ipset=/.cochina.org/gfwlist -ipset=/.cocoapods.org/gfwlist -ipset=/.cocoa.zonble.net/gfwlist -ipset=/.code1984.com/gfwlist -ipset=/.codeboxapp.com/gfwlist -ipset=/.codeshare.io/gfwlist -ipset=/.collateralmurder.com/gfwlist -ipset=/.collateralmurder.org/gfwlist -ipset=/.comefromchina.com/gfwlist -ipset=/.comnews.gio.gov.tw/gfwlist -ipset=/.compileheart.com/gfwlist -ipset=/.connectedchina.reuters.com/gfwlist -ipset=/.connect.facebook.net/gfwlist -ipset=/.conoyo.com/gfwlist -ipset=/.contactmagazine.net/gfwlist -ipset=/.contests.twilio.com/gfwlist -ipset=/.conviva.com/gfwlist -ipset=/.cookingtothegoodlife.com/gfwlist -ipset=/.coolaler.com/gfwlist -ipset=/.coolder.com/gfwlist -ipset=/.coolloud.org.tw/gfwlist -ipset=/.corpus4u.org/gfwlist -ipset=/.corumcollege.com/gfwlist -ipset=/.cotweet.com/gfwlist -ipset=/.couchdbwiki.com/gfwlist -ipset=/.coveringweb.com/gfwlist -ipset=/.cp-house.gov.tw/gfwlist -ipset=/.cpj.org/gfwlist -ipset=/.crackle.com/gfwlist -ipset=/.crd-net.org/gfwlist -ipset=/.creaders.net/gfwlist -ipset=/.cromotc.nat.gov.tw/gfwlist -ipset=/.crossthewall.net/gfwlist -ipset=/.csdparty.com/gfwlist -ipset=/.c-spanvideo.org/gfwlist -ipset=/.css.pixnet.in/gfwlist -ipset=/.csuchen.de/gfwlist -ipset=/.cts.com.tw/gfwlist -ipset=/.cubicle17.com/gfwlist -ipset=/.cuhkacs.org/gfwlist -ipset=/.cuihua.org/gfwlist -ipset=/.cuiweiping.net/gfwlist -ipset=/.culture.tw/gfwlist -ipset=/.curvefish.com/gfwlist -ipset=/.cwb.gov.tw/gfwlist -ipset=/.cyanogenmod.org/gfwlist -ipset=/.cyberghost.natado.com/gfwlist -ipset=/.cyberghostvpn.com/gfwlist -ipset=/.cycab.gov.tw/gfwlist -ipset=/.cydia.ifuckgfw.com/gfwlist -ipset=/.cynscribe.com/gfwlist -ipset=/.cytode.us/gfwlist -ipset=/.dabr.co.uk/gfwlist -ipset=/.dabr.me/gfwlist -ipset=/.dabr.mobi/gfwlist -ipset=/.dadazim.com/gfwlist -ipset=/.dadi360.com/gfwlist -ipset=/.dafagood.com/gfwlist -ipset=/.dafahao.com/gfwlist -ipset=/.dailidaili.com/gfwlist -ipset=/.dailymotion.com/gfwlist -ipset=/.dailynews.sina.com/gfwlist -ipset=/.dajiyuan.com/gfwlist -ipset=/.dajiyuan.eu/gfwlist -ipset=/.dajusha.baywords.com/gfwlist -ipset=/.dalailama.com/gfwlist -ipset=/.dalailama.ru/gfwlist -ipset=/.dalailamaworld.com/gfwlist -ipset=/.dalianmeng.org/gfwlist -ipset=/.danke4china.net/gfwlist -ipset=/.danwei.org/gfwlist -ipset=/.daolan.net/gfwlist -ipset=/.dapu-house.gov.tw/gfwlist -ipset=/.darpa.mil/gfwlist -ipset=/.date.fm/gfwlist -ipset=/.davidslog.com/gfwlist -ipset=/.daxa.cn/gfwlist -ipset=/.dayaarmongol.ning.com/gfwlist -ipset=/.daylife.com/gfwlist -ipset=/.ddc.com.tw/gfwlist -ipset=/.deck.ly/gfwlist -ipset=/.default.secureserver.net/gfwlist -ipset=/.delcamp.net/gfwlist -ipset=/.delicious.com/gfwlist -ipset=/.democrats.org/gfwlist -ipset=/.demo.opera-mini.net/gfwlist -ipset=/.derekhsu.homeip.net/gfwlist -ipset=/.de-sci.org/gfwlist -ipset=/.designerol.com/gfwlist -ipset=/.destiny.xfiles.to/gfwlist -ipset=/.deutsche-welle.de/gfwlist -ipset=/.dev102.com/gfwlist -ipset=/.developers.box.net/gfwlist -ipset=/.deviantart.com/gfwlist -ipset=/.deviantart.net/gfwlist -ipset=/.devio.us/gfwlist -ipset=/.devpn.com/gfwlist -ipset=/.dfas.mil/gfwlist -ipset=/.df.gov.tw/gfwlist -ipset=/.diaoyuislands.org/gfwlist -ipset=/.digitalnomadsproject.org/gfwlist -ipset=/.diigo.com/gfwlist -ipset=/.dimitrik.free.fr/gfwlist -ipset=/.dipity.com/gfwlist -ipset=/.directcreative.com/gfwlist -ipset=/.discuss.com.hk/gfwlist -ipset=/.disp.cc/gfwlist -ipset=/.dit-inc.us/gfwlist -ipset=/.dizhidizhi.com/gfwlist -ipset=/.djangosnippets.org/gfwlist -ipset=/.dl.box.net/gfwlist -ipset=/.dl-laby.jp/gfwlist -ipset=/.dl.playstation.net/gfwlist -ipset=/.dlsite.com/gfwlist -ipset=/.dmcdn.net/gfwlist -ipset=/.dmtip.gov.tw/gfwlist -ipset=/.dns2go.com/gfwlist -ipset=/.dnscrypt.org/gfwlist -ipset=/.docstoc.com/gfwlist -ipset=/.dojin.com/gfwlist -ipset=/.dok-forum.net/gfwlist -ipset=/.dolc.de/gfwlist -ipset=/.dollf.com/gfwlist -ipset=/.domain.club.tw/gfwlist -ipset=/.domainhelp.search.com/gfwlist -ipset=/.dongde.com/gfwlist -ipset=/.dongtaiwang.com/gfwlist -ipset=/.dongtaiwang.net/gfwlist -ipset=/.dongyangjing.com/gfwlist -ipset=/.dontfilter.us/gfwlist -ipset=/.dontmovetochina.com/gfwlist -ipset=/.dotheyfolloweachother.com/gfwlist -ipset=/.dotplane.com/gfwlist -ipset=/.dotsub.com/gfwlist -ipset=/.doubleaf.com/gfwlist -ipset=/.doubleclick.net/gfwlist -ipset=/.dougscripts.com/gfwlist -ipset=/.dowei.org/gfwlist -ipset=/.download.syniumsoftware.com/gfwlist -ipset=/.doxygen.org/gfwlist -ipset=/.dphk.org/gfwlist -ipset=/.dpp.org.tw/gfwlist -ipset=/.drewolanoff.com/gfwlist -ipset=/.drgan.net/gfwlist -ipset=/.dropbox.com/gfwlist -ipset=/.dropboxusercontent.com/gfwlist -ipset=/.drsunacademy.com/gfwlist -ipset=/.drtuber.com/gfwlist -ipset=/.dscn.info/gfwlist -ipset=/.dtiblog.com/gfwlist -ipset=/.dtic.mil/gfwlist -ipset=/.dtiserv2.com/gfwlist -ipset=/.duckduckgo.com/gfwlist -ipset=/.duckload.com/gfwlist -ipset=/.duckmylife.com/gfwlist -ipset=/.duihuahrjournal.org/gfwlist -ipset=/.duihua.org/gfwlist -ipset=/.duoweitimes.com/gfwlist -ipset=/.duping.net/gfwlist -ipset=/.duplicati.com/gfwlist -ipset=/.dupola.com/gfwlist -ipset=/.dupola.net/gfwlist -ipset=/.dvorak.org/gfwlist -ipset=/.dw.de/gfwlist -ipset=/.dwnews.com/gfwlist -ipset=/.dwnews.net/gfwlist -ipset=/.dw-world.com/gfwlist -ipset=/.dw-world.de/gfwlist -ipset=/.dy24k.info/gfwlist -ipset=/.dynawebinc.com/gfwlist -ipset=/.dyndns.org/gfwlist -ipset=/.dzze.com/gfwlist -ipset=/.e123.hk/gfwlist -ipset=/.eamonnbrennan.com/gfwlist -ipset=/.earthquake.usgs.gov/gfwlist -ipset=/.easy-share.com/gfwlist -ipset=/.ebookbrowse.com/gfwlist -ipset=/.ebookee.com/gfwlist -ipset=/.echofon.com/gfwlist -ipset=/.ecministry.net/gfwlist -ipset=/.edicypages.com/gfwlist -ipset=/.edoors.com/gfwlist -ipset=/.edubridge.com/gfwlist -ipset=/.eevpn.com/gfwlist -ipset=/.efcc.org.hk/gfwlist -ipset=/.efksoft.com/gfwlist -ipset=/.efmoe.com/gfwlist -ipset=/.e-gold.com/gfwlist -ipset=/.eic-av.com/gfwlist -ipset=/.e-info.org.tw/gfwlist -ipset=/.electionsmeter.com/gfwlist -ipset=/.elpais.com/gfwlist -ipset=/.eltondisney.com/gfwlist -ipset=/.emacsblog.org/gfwlist -ipset=/.embr.in/gfwlist -ipset=/.emory.edu/gfwlist -ipset=/.emule-ed2k.com/gfwlist -ipset=/.emuparadise.me/gfwlist -ipset=/.enewstree.com/gfwlist -ipset=/.en.favotter.net/gfwlist -ipset=/.englishfromengland.co.uk/gfwlist -ipset=/.entermap.com/gfwlist -ipset=/.en.wikipedia.org/gfwlist -ipset=/.epochtimes-bg.com/gfwlist -ipset=/.epochtimes.co.il/gfwlist -ipset=/.epochtimes.co.kr/gfwlist -ipset=/.epochtimes.com/gfwlist -ipset=/.epochtimes.de/gfwlist -ipset=/.epochtimes.fr/gfwlist -ipset=/.epochtimes.ie/gfwlist -ipset=/.epochtimes.jp/gfwlist -ipset=/.epochtimes-romania.com/gfwlist -ipset=/.epochtimes.ru/gfwlist -ipset=/.epochtimes.se/gfwlist -ipset=/.epochtimestr.com/gfwlist -ipset=/.epochweekly.com/gfwlist -ipset=/.erabaru.net/gfwlist -ipset=/.erepublik.com/gfwlist -ipset=/.erepublik.net/gfwlist -ipset=/.erights.net/gfwlist -ipset=/.eriversoft.com/gfwlist -ipset=/.ernestmandel.org/gfwlist -ipset=/.etaiwannews.com/gfwlist -ipset=/.etizer.org/gfwlist -ipset=/.etools.ncol.com/gfwlist -ipset=/.e-traderland.net/gfwlist -ipset=/.etraining.gov.tw/gfwlist -ipset=/.ettoday.net/gfwlist -ipset=/.evchk.wikia.com/gfwlist -ipset=/.eventful.com/gfwlist -ipset=/.everyday-carry.com/gfwlist -ipset=/.exblog.jp/gfwlist -ipset=/.expatshield.com/gfwlist -ipset=/.exploader.net/gfwlist -ipset=/.extremetube.com/gfwlist -ipset=/.eyespirit.info/gfwlist -ipset=/.eyevio.jp/gfwlist -ipset=/.eyny.com/gfwlist -ipset=/.ezpc.tk/gfwlist -ipset=/.ezpeer.com/gfwlist -ipset=/.facebook.com/gfwlist -ipset=/.facebook.net/gfwlist -ipset=/.facesofnyfw.com/gfwlist -ipset=/.fail.hk/gfwlist -ipset=/.faiththedog.info/gfwlist -ipset=/.fakku.net/gfwlist -ipset=/.falsefire.com/gfwlist -ipset=/.falunart.org/gfwlist -ipset=/.falundafamuseum.org/gfwlist -ipset=/.falundafa.org/gfwlist -ipset=/.falunhr.org/gfwlist -ipset=/.famunion.com/gfwlist -ipset=/.fangbinxing.com/gfwlist -ipset=/.fangeming.com/gfwlist -ipset=/.fanglizhi.info/gfwlist -ipset=/.fangongheike.com/gfwlist -ipset=/.fangong.org/gfwlist -ipset=/.fan-qiang.com/gfwlist -ipset=/.fanqianghou.com/gfwlist -ipset=/.fanqiangyakexi.net/gfwlist -ipset=/.fanswong.com/gfwlist -ipset=/.fanyue.info/gfwlist -ipset=/.fapdu.com/gfwlist -ipset=/.farwestchina.com/gfwlist -ipset=/.farxian.com/gfwlist -ipset=/.fastpic.ru/gfwlist -ipset=/.faststone.org/gfwlist -ipset=/.favorious.com/gfwlist -ipset=/.favstar.fm/gfwlist -ipset=/.fawanghuihui.org/gfwlist -ipset=/.faydao.com/gfwlist -ipset=/.fbcdn.net/gfwlist -ipset=/.fb.com/gfwlist -ipset=/.fb.me/gfwlist -ipset=/.fbsbx.com/gfwlist -ipset=/.fc2china.com/gfwlist -ipset=/.fc2.com/gfwlist -ipset=/.f.cl.ly/gfwlist -ipset=/.fdc89.jp/gfwlist -ipset=/.feedbooks.mobi/gfwlist -ipset=/.feedburner.com/gfwlist -ipset=/.feeds2.feedburner.com/gfwlist -ipset=/.feeds.feedburner.com/gfwlist -ipset=/.feedzshare.com/gfwlist -ipset=/.feelssh.com/gfwlist -ipset=/.feer.com/gfwlist -ipset=/.felixcat.net/gfwlist -ipset=/.feministteacher.com/gfwlist -ipset=/.fengzhenghu.com/gfwlist -ipset=/.fetchvideo.com/gfwlist -ipset=/.ff.im/gfwlist -ipset=/.fflick.com/gfwlist -ipset=/.fgmtv.net/gfwlist -ipset=/.fgmtv.org/gfwlist -ipset=/.filefactory.com/gfwlist -ipset=/.files2me.com/gfwlist -ipset=/.fileserve.com/gfwlist -ipset=/.fillthesquare.org/gfwlist -ipset=/.finalion.jp/gfwlist -ipset=/.findbook.tw/gfwlist -ipset=/.finler.net/gfwlist -ipset=/.fireofliberty.org/gfwlist -ipset=/.firstfivefollowers.com/gfwlist -ipset=/.flecheinthepeche.fr/gfwlist -ipset=/.fleshbot.com/gfwlist -ipset=/.flickr.com/gfwlist -ipset=/.flickrhivemind.net/gfwlist -ipset=/.flightcaster.com/gfwlist -ipset=/.flowerofhappiness.spaces.live.com/gfwlist -ipset=/.focustaiwan.tw/gfwlist -ipset=/.focusvpn.com/gfwlist -ipset=/.fofg.org/gfwlist -ipset=/.fooooo.com/gfwlist -ipset=/.footwiball.com/gfwlist -ipset=/.forum.baby-kingdom.com/gfwlist -ipset=/.forum.cyberctm.com/gfwlist -ipset=/.forum.idsam.com/gfwlist -ipset=/.forum.iset.com.tw/gfwlist -ipset=/.forum.my903.com/gfwlist -ipset=/.forum.mymaji.com/gfwlist -ipset=/.forum.newsgroup.la/gfwlist -ipset=/.forum.nownews.com/gfwlist -ipset=/.forum.omy.sg/gfwlist -ipset=/.forum.palmislife.com/gfwlist -ipset=/.forum.pchome.com.tw/gfwlist -ipset=/.forum.setty.com.tw/gfwlist -ipset=/.forum.sina.com.hk/gfwlist -ipset=/.forum.slime.com.tw/gfwlist -ipset=/.forum.tvb.com/gfwlist -ipset=/.forum.yorkbbs.ca/gfwlist -ipset=/.fotop.net/gfwlist -ipset=/.fourface.nodesnoop.com/gfwlist -ipset=/.fourthinternational.org/gfwlist -ipset=/.foxdie.us/gfwlist -ipset=/.foxsub.com/gfwlist -ipset=/.foxtang.com/gfwlist -ipset=/.fqrouter.com/gfwlist -ipset=/.franklc.com/gfwlist -ipset=/.freakshare.com/gfwlist -ipset=/.fredwilson.vc/gfwlist -ipset=/.free4u.com.ar/gfwlist -ipset=/.freealim.com/gfwlist -ipset=/.freechal.com/gfwlist -ipset=/.freedomhouse.org/gfwlist -ipset=/.free.fr/gfwlist -ipset=/.freegao.com/gfwlist -ipset=/.freegateget.googlepages.com/gfwlist -ipset=/.free-gate.org/gfwlist -ipset=/.free-hada-now.org/gfwlist -ipset=/.freelotto.com/gfwlist -ipset=/.freeman2.com/gfwlist -ipset=/.freemoren.com/gfwlist -ipset=/.freemorenews.com/gfwlist -ipset=/.freenet-china.org/gfwlist -ipset=/.freenetproject.org/gfwlist -ipset=/.freenewscn.com/gfwlist -ipset=/.freeopenvpn.com/gfwlist -ipset=/.freeoz.org/gfwlist -ipset=/.free-ssh.com/gfwlist -ipset=/.freessh.us/gfwlist -ipset=/.freetibet.org/gfwlist -ipset=/.freevpn.nl/gfwlist -ipset=/.freewallpaper4.me/gfwlist -ipset=/.freewebs.com/gfwlist -ipset=/.freeweibo.com/gfwlist -ipset=/.freexinwen.com/gfwlist -ipset=/.freeyoutubeproxy.net/gfwlist -ipset=/.friendfeed.com/gfwlist -ipset=/.friendfeed-media.com/gfwlist -ipset=/.fring.com/gfwlist -ipset=/.fringenetwork.com/gfwlist -ipset=/.frommel.net/gfwlist -ipset=/.frontlinedefenders.org/gfwlist -ipset=/.fscked.org/gfwlist -ipset=/.fsurf.com/gfwlist -ipset=/.ftchinese.com/gfwlist -ipset=/.fuckcnnic.net/gfwlist -ipset=/.fuckgfw.com/gfwlist -ipset=/.fuckgfw.org/gfwlist -ipset=/.fulue.com/gfwlist -ipset=/.funf.tw/gfwlist -ipset=/.funp.com/gfwlist -ipset=/.furinkan.com/gfwlist -ipset=/.furl.net/gfwlist -ipset=/.futurechinaforum.org/gfwlist -ipset=/.futureme.org/gfwlist -ipset=/.futuremessage.org/gfwlist -ipset=/.fuyin.net/gfwlist -ipset=/.fw.cm/gfwlist -ipset=/.fxnetworks.com/gfwlist -ipset=/.fzh999.com/gfwlist -ipset=/.fzh999.net/gfwlist -ipset=/.gabocorp.com/gfwlist -ipset=/.gaeproxy.com/gfwlist -ipset=/.gaeproxy.googlecode.com/gfwlist -ipset=/.galenwu.com/gfwlist -ipset=/.game735.com/gfwlist -ipset=/.gamebase.com.tw/gfwlist -ipset=/.gamer.com.tw/gfwlist -ipset=/.gamez.com.tw/gfwlist -ipset=/.ganges.com/gfwlist -ipset=/.gaoming.net/gfwlist -ipset=/.gaopi.net/gfwlist -ipset=/.gaozhisheng.net/gfwlist -ipset=/.gaozhisheng.org/gfwlist -ipset=/.gardennetworks.com/gfwlist -ipset=/.gardennetworks.org/gfwlist -ipset=/.gartlive.com/gfwlist -ipset=/.gather.com/gfwlist -ipset=/.gaymap.cc/gfwlist -ipset=/.gazotube.com/gfwlist -ipset=/.gcc.org.hk/gfwlist -ipset=/.gclooney.com/gfwlist -ipset=/.g.co/gfwlist -ipset=/.gcpnews.com/gfwlist -ipset=/.gdbt.net/gfwlist -ipset=/.gdzf.org/gfwlist -ipset=/.geek-art.net/gfwlist -ipset=/.geekerhome.com/gfwlist -ipset=/.geekmade.co.uk/gfwlist -ipset=/.geekmanuals.com/gfwlist -ipset=/.generesis.com/gfwlist -ipset=/.genuitec.com/gfwlist -ipset=/.geocities.co.jp/gfwlist -ipset=/.geocities.com/gfwlist -ipset=/.geocities.jp/gfwlist -ipset=/.geohot.com/gfwlist -ipset=/.geometrictools.com/gfwlist -ipset=/.getchu.com/gfwlist -ipset=/.getcloudapp.com/gfwlist -ipset=/.get-digital-help.com/gfwlist -ipset=/.getfoxyproxy.org/gfwlist -ipset=/.getfreedur.com/gfwlist -ipset=/.getiton.com/gfwlist -ipset=/.getjetso.com/gfwlist -ipset=/.getlantern.org/gfwlist -ipset=/.getsmartlinks.com/gfwlist -ipset=/.getsocialscope.com/gfwlist -ipset=/.gfwinterceptor.googlecode.com/gfwlist -ipset=/.gfw.org.ua/gfwlist -ipset=/.ggpht.com/gfwlist -ipset=/.ggssl.com/gfwlist -ipset=/.ghost.org/gfwlist -ipset=/.ghut.org/gfwlist -ipset=/.giga-web.jp/gfwlist -ipset=/.gigporno.ru/gfwlist -ipset=/.gimpshop.com/gfwlist -ipset=/.girlbanker.com/gfwlist -ipset=/.github.com/gfwlist -ipset=/.git-scm.com/gfwlist -ipset=/.givemesomethingtoread.com/gfwlist -ipset=/.glennhilton.com/gfwlist -ipset=/.globaljihad.net/gfwlist -ipset=/.globalmuseumoncommunism.org/gfwlist -ipset=/.globalrescue.net/gfwlist -ipset=/.globalvoicesonline.org/gfwlist -ipset=/.gmail.com/gfwlist -ipset=/.gmbd.cn/gfwlist -ipset=/.gmhz.org/gfwlist -ipset=/.gmodules.com/gfwlist -ipset=/.gmozomg.izihost.org/gfwlist -ipset=/.gnci.org.hk/gfwlist -ipset=/.goagent.biz/gfwlist -ipset=/.goagent.googlecode.com/gfwlist -ipset=/.goagentplus.com/gfwlist -ipset=/.godfootsteps.org/gfwlist -ipset=/.golang.org/gfwlist -ipset=/.goldbetsports.com/gfwlist -ipset=/.goldwave.com/gfwlist -ipset=/.gongmeng.info/gfwlist -ipset=/.gongm.in/gfwlist -ipset=/.gongminliliang.com/gfwlist -ipset=/.gongwt.com/gfwlist -ipset=/.goodreaders.com/gfwlist -ipset=/.goodreads.com/gfwlist -ipset=/.goofind.com/gfwlist -ipset=/.goo.gl/gfwlist -ipset=/.googleadservices.com/gfwlist -ipset=/.google-analytics.com/gfwlist -ipset=/.googleapis.com/gfwlist -ipset=/.googlecode.com/gfwlist -ipset=/.google.co.jp/gfwlist -ipset=/.google.com/gfwlist -ipset=/.google.com.hk/gfwlist -ipset=/.google.com.sg/gfwlist -ipset=/.google.com.tw/gfwlist -ipset=/.google.com.uk/gfwlist -ipset=/.googledomains.com/gfwlist -ipset=/.googledrive.com/gfwlist -ipset=/.googleearth.com/gfwlist -ipset=/.googlehosted.com/gfwlist -ipset=/.googlelabs.com/gfwlist -ipset=/.googlemail.com/gfwlist -ipset=/.googleplus.com/gfwlist -ipset=/.googlesile.com/gfwlist -ipset=/.googlesource.com/gfwlist -ipset=/.googlesyndication.com/gfwlist -ipset=/.googletagmanager.com/gfwlist -ipset=/.googletagservices.com/gfwlist -ipset=/.googleusercontent.com/gfwlist -ipset=/.googlevideo.com/gfwlist -ipset=/.gopetition.com/gfwlist -ipset=/.gospelherald.com/gfwlist -ipset=/.gov.tw/gfwlist -ipset=/.gpass1.com/gfwlist -ipset=/.grandtrial.org/gfwlist -ipset=/.graphis.ne.jp/gfwlist -ipset=/.gravatar.com/gfwlist -ipset=/.graylog2.org/gfwlist -ipset=/.grb.gov.tw/gfwlist -ipset=/.greatfire.org/gfwlist -ipset=/.greatfirewall.biz/gfwlist -ipset=/.great-firewall.com/gfwlist -ipset=/.greatfirewallofchina.net/gfwlist -ipset=/.greatfirewallofchina.org/gfwlist -ipset=/.great-roc.org/gfwlist -ipset=/.greatroc.org/gfwlist -ipset=/.greatroc.tw/gfwlist -ipset=/.greatzhonghua.org/gfwlist -ipset=/.greenparty.org.tw/gfwlist -ipset=/.greenvpn.net/gfwlist -ipset=/.gs-discuss.com/gfwlist -ipset=/.gseeker.com/gfwlist -ipset=/.gsn-cert.nat.gov.tw/gfwlist -ipset=/.gstatic.com/gfwlist -ipset=/.gtap.googlecode.com/gfwlist -ipset=/.gtricks.com/gfwlist -ipset=/.guancha.org/gfwlist -ipset=/.gufeng521.spaces.live.com/gfwlist -ipset=/.guishan.org/gfwlist -ipset=/.gunsamerica.com/gfwlist -ipset=/.gun-world.net/gfwlist -ipset=/.guomin.us/gfwlist -ipset=/.gutteruncensored.com/gfwlist -ipset=/.gvm.com.tw/gfwlist -ipset=/.gyalwarinpoche.com/gfwlist -ipset=/.gysd.nyc.gov.tw/gfwlist -ipset=/.gzm.tv/gfwlist -ipset=/.gzone-anime.info/gfwlist -ipset=/.h1n1china.org/gfwlist -ipset=/.hacken.cc/gfwlist -ipset=/.hackthatphone.net/gfwlist -ipset=/.hahlo.com/gfwlist -ipset=/.hakkatv.org.tw/gfwlist -ipset=/.hanunyi.com/gfwlist -ipset=/.hardsextube.com/gfwlist -ipset=/.hasaowall.com/gfwlist -ipset=/.have8.com/gfwlist -ipset=/.haygo.com/gfwlist -ipset=/.hcc.gov.tw/gfwlist -ipset=/.hchcc.gov.tw/gfwlist -ipset=/.h-china.org/gfwlist -ipset=/.hdtvb.net/gfwlist -ipset=/.heartyit.com/gfwlist -ipset=/.hecaitou.net/gfwlist -ipset=/.hechaji.com/gfwlist -ipset=/.heix.pp.ru/gfwlist -ipset=/.heiyo.info/gfwlist -ipset=/.helloandroid.com/gfwlist -ipset=/.hellonewyork.us/gfwlist -ipset=/.helloqueer.com/gfwlist -ipset=/.hellotxt.com/gfwlist -ipset=/.hellouk.org/gfwlist -ipset=/.helpeachpeople.com/gfwlist -ipset=/.helplinfen.com/gfwlist -ipset=/.help.linksalpha.com/gfwlist -ipset=/.help.opera.com/gfwlist -ipset=/.helpzhuling.org/gfwlist -ipset=/.hen.bao.li/gfwlist -ipset=/.hengchuen.gov.tw/gfwlist -ipset=/.heqinglian.net/gfwlist -ipset=/.here4news.com/gfwlist -ipset=/.heungkongdiscuss.com/gfwlist -ipset=/.hgseav.com/gfwlist -ipset=/.hidden-advent.org/gfwlist -ipset=/.hidecloud.com/gfwlist -ipset=/.hideipvpn.com/gfwlist -ipset=/.hidemyass.com/gfwlist -ipset=/.higfw.com/gfwlist -ipset=/.highrockmedia.com/gfwlist -ipset=/.hihiforum.com/gfwlist -ipset=/.hihistory.net/gfwlist -ipset=/.hiitch.com/gfwlist -ipset=/.hikinggfw.org/gfwlist -ipset=/.himemix.com/gfwlist -ipset=/.himemix.net/gfwlist -ipset=/.hjclub.info/gfwlist -ipset=/.hk32168.com/gfwlist -ipset=/.hkbc.net/gfwlist -ipset=/.hkbf.org/gfwlist -ipset=/.hkchurch.org/gfwlist -ipset=/.hkdailynews.com.hk/gfwlist -ipset=/.hkday.net/gfwlist -ipset=/.hkej.com/gfwlist -ipset=/.hkepc.com/gfwlist -ipset=/.hkfront.org/gfwlist -ipset=/.hk.geocities.com/gfwlist -ipset=/.hkgolden.com/gfwlist -ipset=/.hkgreenradio.org/gfwlist -ipset=/.hkg.westkit.net/gfwlist -ipset=/.hkheadline.com/gfwlist -ipset=/.hkhkhk.com/gfwlist -ipset=/.hkjc.com/gfwlist -ipset=/.hk.jiepang.com/gfwlist -ipset=/.hkjp.easyweb.hk/gfwlist -ipset=/.hkjp.org/gfwlist -ipset=/.hk.knowledge.yahoo.com/gfwlist -ipset=/.hk.myblog.yahoo.com/gfwlist -ipset=/.hk.news.yahoo.com/gfwlist -ipset=/.hkptu.org/gfwlist -ipset=/.hk-pub.com/gfwlist -ipset=/.hk.rd.yahoo.com/gfwlist -ipset=/.hkreporter.com/gfwlist -ipset=/.hkreporter.loved.hk/gfwlist -ipset=/.hk.search.yahoo.com/gfwlist -ipset=/.hk.video.news.yahoo.com/gfwlist -ipset=/.hkwcc.org.hk/gfwlist -ipset=/.hk.yahoo.com/gfwlist -ipset=/.hkzone.org/gfwlist -ipset=/.hnjhj.com/gfwlist -ipset=/.hola.com/gfwlist -ipset=/.holyspiritspeaks.org/gfwlist -ipset=/.holz.byethost8.com/gfwlist -ipset=/.homeservershow.com/gfwlist -ipset=/.home.sina.com/gfwlist -ipset=/.home.so-net.net.tw/gfwlist -ipset=/.honeonet.spaces.live.com/gfwlist -ipset=/.hongmeimei.com/gfwlist -ipset=/.hongzhi.li/gfwlist -ipset=/.hootsuite.com/gfwlist -ipset=/.hotpot.hk/gfwlist -ipset=/.hotshame.com/gfwlist -ipset=/.hotspotshield.com/gfwlist -ipset=/.hougaige.com/gfwlist -ipset=/.howtoforge.com/gfwlist -ipset=/.hqcdp.org/gfwlist -ipset=/.hrcir.com/gfwlist -ipset=/.hrichina.org/gfwlist -ipset=/.hrw.org/gfwlist -ipset=/.hsinchu-cc.gov.tw/gfwlist -ipset=/.hsjp.net/gfwlist -ipset=/.hsselite.com/gfwlist -ipset=/.htkou.net/gfwlist -ipset=/.htl.li/gfwlist -ipset=/.ht.ly/gfwlist -ipset=/.htmldog.com/gfwlist -ipset=/.huaglad.com/gfwlist -ipset=/.huajiadi.spaces.live.com/gfwlist -ipset=/.huanghuagang.org/gfwlist -ipset=/.huaren.us/gfwlist -ipset=/.huaxia-news.com/gfwlist -ipset=/.huaxin.ph/gfwlist -ipset=/.hua-yue.net/gfwlist -ipset=/.hudatoriq.web.id/gfwlist -ipset=/.hugoroy.eu/gfwlist -ipset=/.huhamhire.com/gfwlist -ipset=/.hujiachina.spaces.live.com/gfwlist -ipset=/.hulu.com/gfwlist -ipset=/.huluim.com/gfwlist -ipset=/.humanities.uchicago.edu/gfwlist -ipset=/.hungerstrikeforaids.org/gfwlist -ipset=/.hung-ya.com/gfwlist -ipset=/.huping.net/gfwlist -ipset=/.hutianyi.net/gfwlist -ipset=/.hutong9.net/gfwlist -ipset=/.hwinfo.com/gfwlist -ipset=/.hyperrate.com/gfwlist -ipset=/.hypeshell.com/gfwlist -ipset=/.i1.hk/gfwlist -ipset=/.i2runner.com/gfwlist -ipset=/.ialmostlaugh.com/gfwlist -ipset=/.iask.bz/gfwlist -ipset=/.iask.ca/gfwlist -ipset=/.ibiblio.org/gfwlist -ipset=/.iblogserv-f.net/gfwlist -ipset=/.ibros.org/gfwlist -ipset=/.icij.org/gfwlist -ipset=/.icl-fi.org/gfwlist -ipset=/.iconpaper.org/gfwlist -ipset=/.icu-project.org/gfwlist -ipset=/.idemocracy.asia/gfwlist -ipset=/.identi.ca/gfwlist -ipset=/.idiomconnection.com/gfwlist -ipset=/.idouga.com/gfwlist -ipset=/.idv.tw/gfwlist -ipset=/.ieasynews.net/gfwlist -ipset=/.ied2k.net/gfwlist -ipset=/.ieemdai.spaces.live.com/gfwlist -ipset=/.ifan.cz.cc/gfwlist -ipset=/.ifanqiang.com/gfwlist -ipset=/.ifanr.com/gfwlist -ipset=/.ifcss.org/gfwlist -ipset=/.ifjc.org/gfwlist -ipset=/.igfw.net/gfwlist -ipset=/.ignitedetroit.net/gfwlist -ipset=/.igvita.com/gfwlist -ipset=/.ihakka.net/gfwlist -ipset=/.iicns.com/gfwlist -ipset=/.illusionfactory.com/gfwlist -ipset=/.ilove80.be/gfwlist -ipset=/.im88.tw/gfwlist -ipset=/.imageflea.com/gfwlist -ipset=/.imagesblog.gio.gov.tw/gfwlist -ipset=/.imageshack.us/gfwlist -ipset=/.imagevenue.com/gfwlist -ipset=/.imagezilla.net/gfwlist -ipset=/.ime.baidu.jp/gfwlist -ipset=/.img.ly/gfwlist -ipset=/.imkev.com/gfwlist -ipset=/.imlive.com/gfwlist -ipset=/.immigration.gov.tw/gfwlist -ipset=/.imrworldwide.com/gfwlist -ipset=/.im.tv/gfwlist -ipset=/.incredibox.fr/gfwlist -ipset=/.iner.gov.tw/gfwlist -ipset=/.initiativesforchina.org/gfwlist -ipset=/.inmediahk.net/gfwlist -ipset=/.innermongolia.org/gfwlist -ipset=/.instagram.com/gfwlist -ipset=/.interestinglaugh.com/gfwlist -ipset=/.interfaceaddiction.com/gfwlist -ipset=/.internationalrivers.org/gfwlist -ipset=/.internetdefenseleague.org/gfwlist -ipset=/.internetfreedom.org/gfwlist -ipset=/.internetpopculture.com/gfwlist -ipset=/.inxian.com/gfwlist -ipset=/.iphone4hongkong.com/gfwlist -ipset=/.iphonehacks.com/gfwlist -ipset=/.iphonix.fr/gfwlist -ipset=/.ipicture.ru/gfwlist -ipset=/.ipobar.com/gfwlist -ipset=/.ippotv.com/gfwlist -ipset=/.iptorrents.com/gfwlist -ipset=/.ipvanish.com/gfwlist -ipset=/.iredmail.org/gfwlist -ipset=/.ironbigfools.compython.net/gfwlist -ipset=/.ironicsoftware.com/gfwlist -ipset=/.ironpython.net/gfwlist -ipset=/.isaacmao.com/gfwlist -ipset=/.isgreat.org/gfwlist -ipset=/.islamicity.com/gfwlist -ipset=/.islam.org.hk/gfwlist -ipset=/.ismprofessional.net/gfwlist -ipset=/.isohunt.com/gfwlist -ipset=/.israbox.com/gfwlist -ipset=/.istockphoto.com/gfwlist -ipset=/.isunaffairs.com/gfwlist -ipset=/.isuntv.com/gfwlist -ipset=/.itaboo.info/gfwlist -ipset=/.ithelp.ithome.com.tw/gfwlist -ipset=/.itrc.gov.tw/gfwlist -ipset=/.itshidden.com/gfwlist -ipset=/.itweet.net/gfwlist -ipset=/.iu45.com/gfwlist -ipset=/.iverycd.com/gfwlist -ipset=/.ixquick.com/gfwlist -ipset=/.izaobao.us/gfwlist -ipset=/.izles.net/gfwlist -ipset=/.japan-whores.com/gfwlist -ipset=/.jayparkinsonmd.com/gfwlist -ipset=/.jbtalks.cc/gfwlist -ipset=/.jbtalks.com/gfwlist -ipset=/.jbtalks.my/gfwlist -ipset=/.jeanyim.com/gfwlist -ipset=/.jgoodies.com/gfwlist -ipset=/.jiaoyou8.com/gfwlist -ipset=/.jiehua.cz/gfwlist -ipset=/.jieshibaobao.com/gfwlist -ipset=/.jike.com/gfwlist -ipset=/.jimoparty.com/gfwlist -ipset=/.jinbushe.org/gfwlist -ipset=/.jingpin.org/gfwlist -ipset=/.jitouch.com/gfwlist -ipset=/.jkforum.net/gfwlist -ipset=/.j.mp/gfwlist -ipset=/.joachims.org/gfwlist -ipset=/.jobso.tv/gfwlist -ipset=/.joeedelman.com/gfwlist -ipset=/.journalofdemocracy.org/gfwlist -ipset=/.jpopforum.net/gfwlist -ipset=/.juliereyc.com/gfwlist -ipset=/.junauza.com/gfwlist -ipset=/.junefourth-20.net/gfwlist -ipset=/.justfreevpn.com/gfwlist -ipset=/.justtristan.com/gfwlist -ipset=/.juziyue.com/gfwlist -ipset=/.jwmusic.org/gfwlist -ipset=/.jyxf.net/gfwlist -ipset=/.jyzj.waqn.com/gfwlist -ipset=/.k2.xrea.com/gfwlist -ipset=/.kagyuoffice.org.tw/gfwlist -ipset=/.kaiyuan.de/gfwlist -ipset=/.kakao.com/gfwlist -ipset=/.kanzhongguo.com/gfwlist -ipset=/.kanzhongguo.eu/gfwlist -ipset=/.karayou.com/gfwlist -ipset=/.ka-wai.com/gfwlist -ipset=/.kcsoftwares.com/gfwlist -ipset=/.kechara.com/gfwlist -ipset=/.keepandshare.com/gfwlist -ipset=/.kendincos.net/gfwlist -ipset=/.kenengba.com/gfwlist -ipset=/.keontech.net/gfwlist -ipset=/.khcc.gov.tw/gfwlist -ipset=/.khms.gov.tw/gfwlist -ipset=/.khmusic.com.tw/gfwlist -ipset=/.killwall.com/gfwlist -ipset=/.kineox.free.fr/gfwlist -ipset=/.kingdomsalvation.org/gfwlist -ipset=/.kinghost.com/gfwlist -ipset=/.kingstone.com.tw/gfwlist -ipset=/.kissbbao.cn/gfwlist -ipset=/.kissyoutube.com/gfwlist -ipset=/.kk.gov.tw/gfwlist -ipset=/.klccab.gov.tw/gfwlist -ipset=/.klra.gov.tw/gfwlist -ipset=/.klsio.gov.tw/gfwlist -ipset=/.kmh.gov.tw/gfwlist -ipset=/.kmseh.gov.tw/gfwlist -ipset=/.knowledgerush.com/gfwlist -ipset=/.kodingen.com/gfwlist -ipset=/.kompozer.net/gfwlist -ipset=/.koolsolutions.com/gfwlist -ipset=/.koornk.com/gfwlist -ipset=/.kt.kcome.org/gfwlist -ipset=/.kui.name/gfwlist -ipset=/.kun.im/gfwlist -ipset=/.kurtmunger.com/gfwlist -ipset=/.kusocity.com/gfwlist -ipset=/.kwongwah.com.my/gfwlist -ipset=/.kyohk.net/gfwlist -ipset=/.kzeng.info/gfwlist -ipset=/.labiennale.org/gfwlist -ipset=/.ladbrokes.com/gfwlist -ipset=/.la-forum.org/gfwlist -ipset=/.lagranepoca.com/gfwlist -ipset=/.lalulalu.com/gfwlist -ipset=/.laogai.org/gfwlist -ipset=/.laomiu.com/gfwlist -ipset=/.laoyang.info/gfwlist -ipset=/.laptoplockdown.com/gfwlist -ipset=/.laqingdan.net/gfwlist -ipset=/.larsgeorge.com/gfwlist -ipset=/.lastfm.es/gfwlist -ipset=/.latelinenews.com/gfwlist -ipset=/.latimesblogs.latimes.com/gfwlist -ipset=/.lazarsearlymusic.com/gfwlist -ipset=/.leecheukyan.org/gfwlist -ipset=/.legaltech.law.com/gfwlist -ipset=/.lematin.ch/gfwlist -ipset=/.lemonde.fr/gfwlist -ipset=/.lenwhite.com/gfwlist -ipset=/.lerosua.org/gfwlist -ipset=/.lesoir.be/gfwlist -ipset=/.lesscss.org/gfwlist -ipset=/.letscorp.net/gfwlist -ipset=/.liansi.org/gfwlist -ipset=/.lianyue.net/gfwlist -ipset=/.liaowangxizang.net/gfwlist -ipset=/.liberal.org.hk/gfwlist -ipset=/.libertytimes.com.tw/gfwlist -ipset=/.lich355.megabyet.net/gfwlist -ipset=/.lidecheng.com/gfwlist -ipset=/.life.fly4ever.me/gfwlist -ipset=/.limiao.net/gfwlist -ipset=/.line.me/gfwlist -ipset=/.linglingfa.com/gfwlist -ipset=/.lingvodics.com/gfwlist -ipset=/.linkideo.com/gfwlist -ipset=/.linuxconfig.org/gfwlist -ipset=/.linux-engineer.net/gfwlist -ipset=/.linuxreviews.org/gfwlist -ipset=/.linuxtoy.org/gfwlist -ipset=/.lipuman.com/gfwlist -ipset=/.listentoyoutube.com/gfwlist -ipset=/.list.ly/gfwlist -ipset=/.listorious.com/gfwlist -ipset=/.lists.debian.org/gfwlist -ipset=/.lists.w3.org/gfwlist -ipset=/.littlebigdetails.com/gfwlist -ipset=/.liudejun.com/gfwlist -ipset=/.liuhanyu.com/gfwlist -ipset=/.liujianshu.com/gfwlist -ipset=/.liu.lu/gfwlist -ipset=/.liuxiaotong.com/gfwlist -ipset=/.liveleak.com/gfwlist -ipset=/.livestation.com/gfwlist -ipset=/.livestream.com/gfwlist -ipset=/.livevideo.com/gfwlist -ipset=/.livingonline.us/gfwlist -ipset=/.livingstream.com/gfwlist -ipset=/.lizhizhuangbi.com/gfwlist -ipset=/.lkcn.net/gfwlist -ipset=/.localpresshk.com/gfwlist -ipset=/.lockdown.com/gfwlist -ipset=/.lockestek.com/gfwlist -ipset=/.logbot.net/gfwlist -ipset=/.logiqx.com/gfwlist -ipset=/.logmike.com/gfwlist -ipset=/.log.riku.me/gfwlist -ipset=/.london.neighborhoodr.com/gfwlist -ipset=/.longhair.hk/gfwlist -ipset=/.longtermly.net/gfwlist -ipset=/.lookatgame.com/gfwlist -ipset=/.lookingglasstheatre.org/gfwlist -ipset=/.lookpic.com/gfwlist -ipset=/.lotuslight.org.tw/gfwlist -ipset=/.lovequicksilver.com/gfwlist -ipset=/.lovesphinx.tk/gfwlist -ipset=/.lrfz.com/gfwlist -ipset=/.lsd.org.hk/gfwlist -ipset=/.lsforum.net/gfwlist -ipset=/.lsmchinese.org/gfwlist -ipset=/.lsmkorean.org/gfwlist -ipset=/.lsm.org/gfwlist -ipset=/.lsxszzg.com/gfwlist -ipset=/.lua.org/gfwlist -ipset=/.lua-users.org/gfwlist -ipset=/.lungtanhr.gov.tw/gfwlist -ipset=/.luntan.zaobao.com/gfwlist -ipset=/.lupm.org/gfwlist -ipset=/.lushstories.com/gfwlist -ipset=/.lvhai.org/gfwlist -ipset=/.lyricsquote.com/gfwlist -ipset=/.mad-ar.ch/gfwlist -ipset=/.madmenunbuttoned.com/gfwlist -ipset=/.magazines.sina.com.tw/gfwlist -ipset=/.maiio.net/gfwlist -ipset=/.mail-archive.com/gfwlist -ipset=/.maiplus.com/gfwlist -ipset=/.makemymood.com/gfwlist -ipset=/.makzhou.warehouse333.com/gfwlist -ipset=/.malaysiakini.com/gfwlist -ipset=/.marc.info/gfwlist -ipset=/.marco.org/gfwlist -ipset=/.marguerite.su/gfwlist -ipset=/.marines.mil/gfwlist -ipset=/.markmilian.com/gfwlist -ipset=/.martau.com/gfwlist -ipset=/.martincartoons.com/gfwlist -ipset=/.maruta.be/gfwlist -ipset=/.marxist.com/gfwlist -ipset=/.marxist.net/gfwlist -ipset=/.marxists.org/gfwlist -ipset=/.mashable.com/gfwlist -ipset=/.mash.to/gfwlist -ipset=/.matainja.com/gfwlist -ipset=/.mathiew-badimon.com/gfwlist -ipset=/.matsu-news.gov.tw/gfwlist -ipset=/.matsushimakaede.com/gfwlist -ipset=/.maxgif.com/gfwlist -ipset=/.mayimayi.com/gfwlist -ipset=/.mcadforums.com/gfwlist -ipset=/.mcfog.com/gfwlist -ipset=/.md-t.org/gfwlist -ipset=/.mediafire.com/gfwlist -ipset=/.meetup.com/gfwlist -ipset=/.mefeedia.com/gfwlist -ipset=/.megaporn.com/gfwlist -ipset=/.megarotic.com/gfwlist -ipset=/.megavideo.com/gfwlist -ipset=/.megurineluka.com/gfwlist -ipset=/.meirixiaochao.com/gfwlist -ipset=/.melon-peach.com/gfwlist -ipset=/.memedia.cn/gfwlist -ipset=/.meme.yahoo.com/gfwlist -ipset=/.memrijttm.org/gfwlist -ipset=/.merit-times.com.tw/gfwlist -ipset=/.mesotw.com/gfwlist -ipset=/.metacafe.com/gfwlist -ipset=/.meteorshowersonline.com/gfwlist -ipset=/.metrolife.ca/gfwlist -ipset=/.mgoon.com/gfwlist -ipset=/.mgstage.com/gfwlist -ipset=/.mh4u.org/gfwlist -ipset=/.mhradio.org/gfwlist -ipset=/.michaelanti.com/gfwlist -ipset=/.michaelmarketl.com/gfwlist -ipset=/.middle-way.net/gfwlist -ipset=/.mihk.hk/gfwlist -ipset=/.mihua.org/gfwlist -ipset=/.mike.cz.cc/gfwlist -ipset=/.mimivip.com/gfwlist -ipset=/.minghui.org/gfwlist -ipset=/.minghui-school.org/gfwlist -ipset=/.mingjinglishi.com/gfwlist -ipset=/.mingjingnews.com/gfwlist -ipset=/.mingpaocanada.com/gfwlist -ipset=/.mingpao.com/gfwlist -ipset=/.mingpaomonthly.com/gfwlist -ipset=/.mingpaonews.com/gfwlist -ipset=/.mingpaony.com/gfwlist -ipset=/.mingpaosf.com/gfwlist -ipset=/.mingpaotor.com/gfwlist -ipset=/.mingpaovan.com/gfwlist -ipset=/.minimalmac.com/gfwlist -ipset=/.mininova.org/gfwlist -ipset=/.minzhuhua.net/gfwlist -ipset=/.minzhuzhongguo.org/gfwlist -ipset=/.miroguide.com/gfwlist -ipset=/.mirrorbooks.com/gfwlist -ipset=/.mitbbs.com/gfwlist -ipset=/.mixedmedialabs.com/gfwlist -ipset=/.mixero.com/gfwlist -ipset=/.mixpod.com/gfwlist -ipset=/.mixx.com/gfwlist -ipset=/.mizzmona.com/gfwlist -ipset=/.mk5000.com/gfwlist -ipset=/.mlcool.com/gfwlist -ipset=/.mmaaxx.com/gfwlist -ipset=/.mmmca.com/gfwlist -ipset=/.mobatek.net/gfwlist -ipset=/.mobile01.com/gfwlist -ipset=/.mobileways.de/gfwlist -ipset=/.mobypicture.com/gfwlist -ipset=/.moby.to/gfwlist -ipset=/.modfetish.com/gfwlist -ipset=/.moe.gov.tw/gfwlist -ipset=/.mog.com/gfwlist -ipset=/.molihua.org/gfwlist -ipset=/.mondex.org/gfwlist -ipset=/.monitorchina.org/gfwlist -ipset=/.moonriver7.files.wordpress.com/gfwlist -ipset=/.morningsun.org/gfwlist -ipset=/.m.oulove.org/gfwlist -ipset=/.movabletype.com/gfwlist -ipset=/.moviefap.com/gfwlist -ipset=/.mp3ye.eu/gfwlist -ipset=/.mpettis.com/gfwlist -ipset=/.mpfinance.com/gfwlist -ipset=/.mpinews.com/gfwlist -ipset=/.m.plixi.com/gfwlist -ipset=/.mrdoob.com/gfwlist -ipset=/.mrtweet.com/gfwlist -ipset=/.msguancha.com/gfwlist -ipset=/.m.slandr.net/gfwlist -ipset=/.mthruf.com/gfwlist -ipset=/.m.tweete.net/gfwlist -ipset=/.mtw.tl/gfwlist -ipset=/.multiply.com/gfwlist -ipset=/.multiproxy.org/gfwlist -ipset=/.multiupload.com/gfwlist -ipset=/.muouju.com/gfwlist -ipset=/.muselinks.co.jp/gfwlist -ipset=/.music.jwmusic.org/gfwlist -ipset=/.muzi.com/gfwlist -ipset=/.muzi.net/gfwlist -ipset=/.muzu.tv/gfwlist -ipset=/.mvdis.gov.tw/gfwlist -ipset=/.mx981.com/gfwlist -ipset=/.myactimes.com/gfwlist -ipset=/.my-addr.com/gfwlist -ipset=/.myaudiocast.com/gfwlist -ipset=/.myav.com.tw/gfwlist -ipset=/.my.backchina.com/gfwlist -ipset=/.myboooks.googlepages.com/gfwlist -ipset=/.mychinamyhome.com/gfwlist -ipset=/.myeclipseide.com/gfwlist -ipset=/.myforum.com.hk/gfwlist -ipset=/.myforum.com.uk/gfwlist -ipset=/.myfreshnet.com/gfwlist -ipset=/.my.keso.cn/gfwlist -ipset=/.myopenid.com/gfwlist -ipset=/.my.opera.com/gfwlist -ipset=/.mypaper.pchome.com.tw/gfwlist -ipset=/.myparagliding.com/gfwlist -ipset=/.mypopescu.com/gfwlist -ipset=/.my-proxy.com/gfwlist -ipset=/.myshare.url.com.tw/gfwlist -ipset=/.mysinablog.com/gfwlist -ipset=/.myspace.com/gfwlist -ipset=/.myvlog.im.tv/gfwlist -ipset=/.naacoalition.org/gfwlist -ipset=/.naitik.net/gfwlist -ipset=/.nakido.com/gfwlist -ipset=/.namsisi.com/gfwlist -ipset=/.nanyang.com/gfwlist -ipset=/.nanyangpost.com/gfwlist -ipset=/.nanzao.com/gfwlist -ipset=/.naol.ca/gfwlist -ipset=/.national-lottery.co.uk/gfwlist -ipset=/.navicat.com/gfwlist -ipset=/.navigeaters.com/gfwlist -ipset=/.navy.mil/gfwlist -ipset=/.nccwatch.org.tw/gfwlist -ipset=/.ncdr.nat.gov.tw/gfwlist -ipset=/.nch.com.tw/gfwlist -ipset=/.ncn.org/gfwlist -ipset=/.ncree.gov.tw/gfwlist -ipset=/.nde.de/gfwlist -ipset=/.ndr.de/gfwlist -ipset=/.nekoslovakia.net/gfwlist -ipset=/.nerch.gov.tw/gfwlist -ipset=/.ner.gov.tw/gfwlist -ipset=/.nerhl.gov.tw/gfwlist -ipset=/.nertt.gov.tw/gfwlist -ipset=/.netcolony.com/gfwlist -ipset=/.netflix.com/gfwlist -ipset=/.netme.cc/gfwlist -ipset=/.networkedblogs.com/gfwlist -ipset=/.neverforget8964.org/gfwlist -ipset=/.new-3lunch.net/gfwlist -ipset=/.new-akiba.com/gfwlist -ipset=/.newcenturymc.com/gfwlist -ipset=/.newcenturynews.com/gfwlist -ipset=/.newchen.com/gfwlist -ipset=/.newgrounds.com/gfwlist -ipset=/.newlandmagazine.com.au/gfwlist -ipset=/.news100.com.tw/gfwlist -ipset=/.newsancai.com/gfwlist -ipset=/.news.atebits.com/gfwlist -ipset=/.news.backchina.com/gfwlist -ipset=/.news.bbc.co.uk/gfwlist -ipset=/.newscn.org/gfwlist -ipset=/.news.cnyes.com/gfwlist -ipset=/.newsforums.bbc.co.uk/gfwlist -ipset=/.news.ghostery.com/gfwlist -ipset=/.news.google.com.hk/gfwlist -ipset=/.newsminer.com/gfwlist -ipset=/.news.msn.com.tw/gfwlist -ipset=/.news.omy.sg/gfwlist -ipset=/.news.pchome.com.tw/gfwlist -ipset=/.newspeak.cc/gfwlist -ipset=/.newspp.org/gfwlist -ipset=/.news.sina.com.hk/gfwlist -ipset=/.news.sina.com.tw/gfwlist -ipset=/.news.singtao.ca/gfwlist -ipset=/.newstapa.org/gfwlist -ipset=/.newtaiwan.com.tw/gfwlist -ipset=/.newtalk.tw/gfwlist -ipset=/.newyorktimes.com/gfwlist -ipset=/.nexton-net.jp/gfwlist -ipset=/.nexttv.com.tw/gfwlist -ipset=/.nf.id.au/gfwlist -ipset=/.nga.mil/gfwlist -ipset=/.ngensis.com/gfwlist -ipset=/.nhri.gov.tw/gfwlist -ipset=/.nic.cz.cc/gfwlist -ipset=/.nici.nat.gov.tw/gfwlist -ipset=/.nicovideo.tw/gfwlist -ipset=/.nict.gov.tw/gfwlist -ipset=/.nighost.org/gfwlist -ipset=/.nintendium.com/gfwlist -ipset=/.nintendowifi.net/gfwlist -ipset=/.njactb.org/gfwlist -ipset=/.njuice.com/gfwlist -ipset=/.nlfreevpn.com/gfwlist -ipset=/.nmh.gov.tw/gfwlist -ipset=/.nmmba.gov.tw/gfwlist -ipset=/.nmp.gov.tw/gfwlist -ipset=/.nmtl.gov.tw/gfwlist -ipset=/.nmvttc.gov.tw/gfwlist -ipset=/.nobelprize.org/gfwlist -ipset=/.nobel.se/gfwlist -ipset=/.nobodycanstop.us/gfwlist -ipset=/.nokogiri.org/gfwlist -ipset=/.nokola.com/gfwlist -ipset=/.noobbox.com/gfwlist -ipset=/.notes.alexdong.com/gfwlist -ipset=/.novelasia.com/gfwlist -ipset=/.nownews.com/gfwlist -ipset=/.nowtorrents.com/gfwlist -ipset=/.noypf.com/gfwlist -ipset=/.npa.go.jp/gfwlist -ipset=/.npm.gov.tw/gfwlist -ipset=/.nps.gov/gfwlist -ipset=/.nrk.no/gfwlist -ipset=/.nsc.gov.tw/gfwlist -ipset=/.nspo.gov.tw/gfwlist -ipset=/.nstm.gov.tw/gfwlist -ipset=/.ntdmh.gov.tw/gfwlist -ipset=/.ntdtv.ca/gfwlist -ipset=/.ntdtv.co/gfwlist -ipset=/.ntdtv.com/gfwlist -ipset=/.ntdtv.org/gfwlist -ipset=/.ntdtv.ru/gfwlist -ipset=/.ntl.gov.tw/gfwlist -ipset=/.ntsec.gov.tw/gfwlist -ipset=/.ntuh.gov.tw/gfwlist -ipset=/.nuexpo.com/gfwlist -ipset=/.nurgo-software.com/gfwlist -ipset=/.nuvid.com/gfwlist -ipset=/.nuzcom.com/gfwlist -ipset=/.nvquan.org/gfwlist -ipset=/.nvri.gov.tw/gfwlist -ipset=/.nydus.ca/gfwlist -ipset=/.nysingtao.com/gfwlist -ipset=/.nytco.com/gfwlist -ipset=/.nyt.com/gfwlist -ipset=/.nytimes.com/gfwlist -ipset=/.nytimg.com/gfwlist -ipset=/.nzchinese.net.nz/gfwlist -ipset=/.observechina.net/gfwlist -ipset=/.oclp.hk/gfwlist -ipset=/.october-review.org/gfwlist -ipset=/.offbeatchina.com/gfwlist -ipset=/.ogaoga.org/gfwlist -ipset=/.oikos.com.tw/gfwlist -ipset=/.oiktv.com/gfwlist -ipset=/.oizoblog.com/gfwlist -ipset=/.okayfreedom.com/gfwlist -ipset=/.old-cat.net/gfwlist -ipset=/.old.nabble.com/gfwlist -ipset=/.olumpo.com/gfwlist -ipset=/.olympicwatch.org/gfwlist -ipset=/.omgili.com/gfwlist -ipset=/.omnitalk.com/gfwlist -ipset=/.on.cc/gfwlist -ipset=/.one.xthost.info/gfwlist -ipset=/.onlylady.cn/gfwlist -ipset=/.onmoon.com/gfwlist -ipset=/.onmoon.net/gfwlist -ipset=/.oopsforum.com/gfwlist -ipset=/.ooyala.com/gfwlist -ipset=/.open.com.hk/gfwlist -ipset=/.opendemocracy.net/gfwlist -ipset=/.openid.net/gfwlist -ipset=/.openleaks.org/gfwlist -ipset=/.openvpn.net/gfwlist -ipset=/.openvpn.org/gfwlist -ipset=/.openwebster.com/gfwlist -ipset=/.opml.radiotime.com/gfwlist -ipset=/.opnir.com/gfwlist -ipset=/.orientaldaily.com.my/gfwlist -ipset=/.orient-doll.com/gfwlist -ipset=/.orn.jp/gfwlist -ipset=/.orzistic.org/gfwlist -ipset=/.osfoora.com/gfwlist -ipset=/.ourdearamy.com/gfwlist -ipset=/.oursogo.com/gfwlist -ipset=/.oursteps.com.au/gfwlist -ipset=/.overlapr.com/gfwlist -ipset=/.owl.li/gfwlist -ipset=/.ow.ly/gfwlist -ipset=/.oyax.com/gfwlist -ipset=/.ozchinese.com/gfwlist -ipset=/.ozyoyo.com/gfwlist -ipset=/.pabp.gov.tw/gfwlist -ipset=/.pacificpoker.com/gfwlist -ipset=/.packages.debian.org/gfwlist -ipset=/.packetix.net/gfwlist -ipset=/.page2rss.com/gfwlist -ipset=/.page.bid.yahoo.com/gfwlist -ipset=/.pagodabox.com/gfwlist -ipset=/.paint.net/gfwlist -ipset=/.palacemoon.com/gfwlist -ipset=/.pandora.com/gfwlist -ipset=/.pandora.tv/gfwlist -ipset=/.panluan.net/gfwlist -ipset=/.panoramio.com/gfwlist -ipset=/.pao-pao.net/gfwlist -ipset=/.paperb.us/gfwlist -ipset=/.paper.li/gfwlist -ipset=/.paper-replika.com/gfwlist -ipset=/.parade.com/gfwlist -ipset=/.parislemon.com/gfwlist -ipset=/.pastebin.com/gfwlist -ipset=/.pastie.org/gfwlist -ipset=/.patehr.gov.tw/gfwlist -ipset=/.pbs.org/gfwlist -ipset=/.pbwiki.com/gfwlist -ipset=/.pbworks.com/gfwlist -ipset=/.pbxes.com/gfwlist -ipset=/.pbxes.org/gfwlist -ipset=/.pcdiscuss.com/gfwlist -ipset=/.pcdvd.com.tw/gfwlist -ipset=/.pchome.com.tw/gfwlist -ipset=/.pct.org.tw/gfwlist -ipset=/.pcworld.com/gfwlist -ipset=/.pdetails.com/gfwlist -ipset=/.pdproxy.com/gfwlist -ipset=/.peacefire.org/gfwlist -ipset=/.peacehall.com/gfwlist -ipset=/.peeasian.com/gfwlist -ipset=/.peerpong.com/gfwlist -ipset=/.pekingduck.org/gfwlist -ipset=/.penchinese.com/gfwlist -ipset=/.penchinese.net/gfwlist -ipset=/.pengyulong.com/gfwlist -ipset=/.penthouse.com/gfwlist -ipset=/.peopo.org/gfwlist -ipset=/.percy.in/gfwlist -ipset=/.perfectgirls.net/gfwlist -ipset=/.perfectvpn.net/gfwlist -ipset=/.perfspot.com/gfwlist -ipset=/.perlhowto.com/gfwlist -ipset=/.pet.gov.tw/gfwlist -ipset=/.philly.com/gfwlist -ipset=/.photofocus.com/gfwlist -ipset=/.photos.dailyme.com/gfwlist -ipset=/.photo.utom.us/gfwlist -ipset=/.phuquocservices.com/gfwlist -ipset=/.picasaweb.google.com/gfwlist -ipset=/.picidae.net/gfwlist -ipset=/.picturesocial.com/gfwlist -ipset=/.pictures.playboy.com/gfwlist -ipset=/.pidown.com/gfwlist -ipset=/.pign.net/gfwlist -ipset=/.pimg.tw/gfwlist -ipset=/.pin6.com/gfwlist -ipset=/.ping.fm/gfwlist -ipset=/.pinoy-n.com/gfwlist -ipset=/.pioneer-worker.forums-free.com/gfwlist -ipset=/.piring.com/gfwlist -ipset=/.pixanalytics.com/gfwlist -ipset=/.pixelqi.com/gfwlist -ipset=/.pixfs.net/gfwlist -ipset=/.pixnet.cc/gfwlist -ipset=/.pixnet.net/gfwlist -ipset=/.pixplug.in/gfwlist -ipset=/.pk.com/gfwlist -ipset=/.placemix.com/gfwlist -ipset=/.planetsuzy.org/gfwlist -ipset=/.playboy.com/gfwlist -ipset=/.plays.com.tw/gfwlist -ipset=/.plm.org.hk/gfwlist -ipset=/.plunder.com/gfwlist -ipset=/.plurk.com/gfwlist -ipset=/.plurktop.mmdays.com/gfwlist -ipset=/.plus28.com/gfwlist -ipset=/.plusbb.com/gfwlist -ipset=/.pmates.com/gfwlist -ipset=/.po2b.com/gfwlist -ipset=/.podictionary.com/gfwlist -ipset=/.pokerstars.com/gfwlist -ipset=/.politicalchina.org/gfwlist -ipset=/.popvote.hk/gfwlist -ipset=/.popyard.com/gfwlist -ipset=/.popyard.org/gfwlist -ipset=/.porn2.com/gfwlist -ipset=/.pornbase.org/gfwlist -ipset=/.porn.com/gfwlist -ipset=/.pornhub.com/gfwlist -ipset=/.pornmm.net/gfwlist -ipset=/.pornoxo.com/gfwlist -ipset=/.pornrapidshare.com/gfwlist -ipset=/.pornstarclub.com/gfwlist -ipset=/.porntube.com/gfwlist -ipset=/.pornvisit.com/gfwlist -ipset=/.portis21.spaces.live.com/gfwlist -ipset=/.pose.com/gfwlist -ipset=/.postadult.com/gfwlist -ipset=/.post.anyu.org/gfwlist -ipset=/.posterous.com/gfwlist -ipset=/.post.ly/gfwlist -ipset=/.powerapple.com/gfwlist -ipset=/.power.com/gfwlist -ipset=/.powercx.com/gfwlist -ipset=/.prayforchina.net/gfwlist -ipset=/.premeforwindows7.com/gfwlist -ipset=/.presentationzen.com/gfwlist -ipset=/.president.gov.tw/gfwlist -ipset=/.prestige-av.com/gfwlist -ipset=/.previewshots.com/gfwlist -ipset=/.privacybox.de/gfwlist -ipset=/.privateinternetaccess.com/gfwlist -ipset=/.privatepaste.com/gfwlist -ipset=/.privatetunnel.com/gfwlist -ipset=/.procopytips.com/gfwlist -ipset=/.program-think.spaces.live.com/gfwlist -ipset=/.prosiben.de/gfwlist -ipset=/.provideocoalition.com/gfwlist -ipset=/.proxifier.com/gfwlist -ipset=/.proxomitron.info/gfwlist -ipset=/.proxy.org/gfwlist -ipset=/.proxypy.net/gfwlist -ipset=/.proxyroad.com/gfwlist -ipset=/.prozz.net/gfwlist -ipset=/.psblog.name/gfwlist -ipset=/.psiphon.ca/gfwlist -ipset=/.psiphon.civisec.org/gfwlist -ipset=/.pts.org.tw/gfwlist -ipset=/.ptt.cc/gfwlist -ipset=/.pubu.com.tw/gfwlist -ipset=/.puffinbrowser.com/gfwlist -ipset=/.puffstore.com/gfwlist -ipset=/.pullfolio.com/gfwlist -ipset=/.pulse.yahoo.com/gfwlist -ipset=/.pure18.com/gfwlist -ipset=/.pureconcepts.net/gfwlist -ipset=/.purepdf.com/gfwlist -ipset=/.purevpn.com/gfwlist -ipset=/.putlocker.com/gfwlist -ipset=/.puttycm.free.fr/gfwlist -ipset=/.pwned.com/gfwlist -ipset=/.python.com/gfwlist -ipset=/.python.com.tw/gfwlist -ipset=/.qanote.com/gfwlist -ipset=/.qidian.ca/gfwlist -ipset=/.qienkuen.org/gfwlist -ipset=/.qi-gong.me/gfwlist -ipset=/.qiwen.lu/gfwlist -ipset=/.qixianglu.cn/gfwlist -ipset=/.qkshare.com/gfwlist -ipset=/.qoos.com/gfwlist -ipset=/.qq.co.za/gfwlist -ipset=/.qstatus.com/gfwlist -ipset=/.qtrac.eu/gfwlist -ipset=/.qtweeter.com/gfwlist -ipset=/.quadedge.com/gfwlist -ipset=/.qusi8.net/gfwlist -ipset=/.qvodzy.org/gfwlist -ipset=/.qxbbs.org/gfwlist -ipset=/.radicalparty.org/gfwlist -ipset=/.radioaustralia.net.au/gfwlist -ipset=/.radiovaticana.org/gfwlist -ipset=/.radiovncr.com/gfwlist -ipset=/.raidcall.com.tw/gfwlist -ipset=/.rangzen.org/gfwlist -ipset=/.ranyunfei.com/gfwlist -ipset=/.rapbull.net/gfwlist -ipset=/.rapidshare8.com/gfwlist -ipset=/.rapidsharedata.com/gfwlist -ipset=/.rayfme.com/gfwlist -ipset=/.rcinet.ca/gfwlist -ipset=/.rconversation.blogs.com/gfwlist -ipset=/.rdio.com/gfwlist -ipset=/.read100.com/gfwlist -ipset=/.readingtimes.com.tw/gfwlist -ipset=/.readmoo.com/gfwlist -ipset=/.realraptalk.com/gfwlist -ipset=/.recordhistory.org/gfwlist -ipset=/.redchinacn.org/gfwlist -ipset=/.redtube.com/gfwlist -ipset=/.referer.us/gfwlist -ipset=/.reflectivecode.com/gfwlist -ipset=/.relaxbbs.com/gfwlist -ipset=/.renminbao.com/gfwlist -ipset=/.renyurenquan.org/gfwlist -ipset=/.retweeteffect.com/gfwlist -ipset=/.retweetist.com/gfwlist -ipset=/.retweetrank.com/gfwlist -ipset=/.revleft.com/gfwlist -ipset=/.revsci.net/gfwlist -ipset=/.revver.com/gfwlist -ipset=/.rfachina.com/gfwlist -ipset=/.rfamobile.org/gfwlist -ipset=/.rfa.org/gfwlist -ipset=/.rferl.org/gfwlist -ipset=/.rfi.fr/gfwlist -ipset=/.rhcloud.com/gfwlist -ipset=/.riku.me/gfwlist -ipset=/.rileyguide.com/gfwlist -ipset=/.rlwlw.com/gfwlist -ipset=/.rmjdw.com/gfwlist -ipset=/.rnw.nl/gfwlist -ipset=/.robtex.com/gfwlist -ipset=/.robustnessiskey.com/gfwlist -ipset=/.rocmp.org/gfwlist -ipset=/.rojo.com/gfwlist -ipset=/.ronjoneswriter.com/gfwlist -ipset=/.roodo.com/gfwlist -ipset=/.rotten.com/gfwlist -ipset=/.rsf-chinese.org/gfwlist -ipset=/.rsf.org/gfwlist -ipset=/.rssmeme.com/gfwlist -ipset=/.rthk.hk/gfwlist -ipset=/.rthk.org.hk/gfwlist -ipset=/.rti.org.tw/gfwlist -ipset=/.ruanyifeng.com/gfwlist -ipset=/.rushbee.com/gfwlist -ipset=/.rutube.ru/gfwlist -ipset=/.ruyiseek.com/gfwlist -ipset=/.rxhj.net/gfwlist -ipset=/.s1heng.com/gfwlist -ipset=/.s8forum.com/gfwlist -ipset=/.sacom.hk/gfwlist -ipset=/.sadpanda.us/gfwlist -ipset=/.saiq.me/gfwlist -ipset=/.salvation.org.hk/gfwlist -ipset=/.samair.ru/gfwlist -ipset=/.sammyjs.org/gfwlist -ipset=/.samsoff.es/gfwlist -ipset=/.sandnoble.com/gfwlist -ipset=/.sankaizok.com/gfwlist -ipset=/.sanmin.com.tw/gfwlist -ipset=/.sapikachu.net/gfwlist -ipset=/.savemedia.com/gfwlist -ipset=/.savetibet.de/gfwlist -ipset=/.savetibet.fr/gfwlist -ipset=/.savetibet.nl/gfwlist -ipset=/.savetibet.org/gfwlist -ipset=/.savetibet.ru/gfwlist -ipset=/.savevid.com/gfwlist -ipset=/.say2.info/gfwlist -ipset=/.scanscout.com/gfwlist -ipset=/.scmpchinese.com/gfwlist -ipset=/.scmp.com/gfwlist -ipset=/.scorecardresearch.com/gfwlist -ipset=/.scribd.com/gfwlist -ipset=/.scriptspot.com/gfwlist -ipset=/.seapuff.com/gfwlist -ipset=/.secretchina.com/gfwlist -ipset=/.secretgarden.no/gfwlist -ipset=/.secure.wikimedia.org/gfwlist -ipset=/.securitykiss.com/gfwlist -ipset=/.seesmic.com/gfwlist -ipset=/.seevpn.com/gfwlist -ipset=/.seezone.net/gfwlist -ipset=/.sejie.com/gfwlist -ipset=/.sendoid.com/gfwlist -ipset=/.sendspace.com/gfwlist -ipset=/.sesawe.net/gfwlist -ipset=/.sesawe.org/gfwlist -ipset=/.sethwklein.net/gfwlist -ipset=/.sevenload.com/gfwlist -ipset=/.sex-11.com/gfwlist -ipset=/.sex3.com/gfwlist -ipset=/.sex8.cc/gfwlist -ipset=/.sexandsubmission.com/gfwlist -ipset=/.sex.com/gfwlist -ipset=/.sexhuang.com/gfwlist -ipset=/.sexhu.com/gfwlist -ipset=/.sexinsex.net/gfwlist -ipset=/.sfileydy.com/gfwlist -ipset=/.shadow.ma/gfwlist -ipset=/.shadowsocks.org/gfwlist -ipset=/.shahamat-english.com/gfwlist -ipset=/.shangfang.org/gfwlist -ipset=/.shapeservices.com/gfwlist -ipset=/.sharebee.com/gfwlist -ipset=/.sharecool.org/gfwlist -ipset=/.share.ovi.com/gfwlist -ipset=/.share.skype.com/gfwlist -ipset=/.share.youthwant.com.tw/gfwlist -ipset=/.sharkdolphin.com/gfwlist -ipset=/.sharpdaily.com.hk/gfwlist -ipset=/.sharpdaily.hk/gfwlist -ipset=/.shaunthesheep.com/gfwlist -ipset=/.sheikyermami.com/gfwlist -ipset=/.shellmix.com/gfwlist -ipset=/.shenshou.org/gfwlist -ipset=/.shenyunperformingarts.org/gfwlist -ipset=/.shenzhoufilm.com/gfwlist -ipset=/.shifeike.blog125.fc2blog.net/gfwlist -ipset=/.shinychan.com/gfwlist -ipset=/.shitaotv.org/gfwlist -ipset=/.shixiao.org/gfwlist -ipset=/.shizhao.org/gfwlist -ipset=/.shkspr.mobi/gfwlist -ipset=/.shodanhq.com/gfwlist -ipset=/.shopping.com/gfwlist -ipset=/.showbiz.omy.sg/gfwlist -ipset=/.showtime.jp/gfwlist -ipset=/.shwchurch3.com/gfwlist -ipset=/.sidelinesnews.com/gfwlist -ipset=/.sidelinessportseatery.com/gfwlist -ipset=/.simplecd.me/gfwlist -ipset=/.simplecd.org/gfwlist -ipset=/.simpleproductivityblog.com/gfwlist -ipset=/.sina.com.tw/gfwlist -ipset=/.singtao.com/gfwlist -ipset=/.singularitys.spaces.live.com/gfwlist -ipset=/.sinoants.com/gfwlist -ipset=/.sinocast.com/gfwlist -ipset=/.sinocism.com/gfwlist -ipset=/.sino-monthly.com/gfwlist -ipset=/.sinomontreal.ca/gfwlist -ipset=/.sinonet.ca/gfwlist -ipset=/.sinopitt.info/gfwlist -ipset=/.sinoquebec.com/gfwlist -ipset=/.sis001.com/gfwlist -ipset=/.sis001.us/gfwlist -ipset=/.sis.xxx/gfwlist -ipset=/.site90.net/gfwlist -ipset=/.sitebro.tw/gfwlist -ipset=/.siteks.uk.to/gfwlist -ipset=/.site.locql.com/gfwlist -ipset=/.sitemaps.org/gfwlist -ipset=/.sites.google.com/gfwlist -ipset=/.sitetag.us/gfwlist -ipset=/.siyi123123123.spaces.live.com/gfwlist -ipset=/.skimtube.com/gfwlist -ipset=/.skybet.com/gfwlist -ipset=/.skyvegas.com/gfwlist -ipset=/.slacker.com/gfwlist -ipset=/.slavasoft.com/gfwlist -ipset=/.slheng.com/gfwlist -ipset=/.slickvpn.com/gfwlist -ipset=/.slideshare.net/gfwlist -ipset=/.slinkset.com/gfwlist -ipset=/.slutload.com/gfwlist -ipset=/.smhric.org/gfwlist -ipset=/.snapchat.com/gfwlist -ipset=/.snaptu.com/gfwlist -ipset=/.sndcdn.com/gfwlist -ipset=/.sneakme.net/gfwlist -ipset=/.snooper.co.uk/gfwlist -ipset=/.sobees.com/gfwlist -ipset=/.socialwhale.com/gfwlist -ipset=/.sockslist.net/gfwlist -ipset=/.sod.co.jp/gfwlist -ipset=/.softether.co.jp/gfwlist -ipset=/.softether-download.com/gfwlist -ipset=/.softether.org/gfwlist -ipset=/.softwarebychuck.com/gfwlist -ipset=/.so-ga.net/gfwlist -ipset=/.sogclub.com/gfwlist -ipset=/.sogou.com/gfwlist -ipset=/.sogrady.me/gfwlist -ipset=/.sohcradio.com/gfwlist -ipset=/.sohfrance.org/gfwlist -ipset=/.soh.tw/gfwlist -ipset=/.sokamonline.com/gfwlist -ipset=/.solozorro.tk/gfwlist -ipset=/.somee.com/gfwlist -ipset=/.so-news.com/gfwlist -ipset=/.songjianjun.com/gfwlist -ipset=/.sonidodelaesperanza.org/gfwlist -ipset=/.sopcast.com/gfwlist -ipset=/.sopcast.org/gfwlist -ipset=/.sorting-algorithms.com/gfwlist -ipset=/.soumo.info/gfwlist -ipset=/.soundcloud.com/gfwlist -ipset=/.soundofhope.kr/gfwlist -ipset=/.soundofhope.org/gfwlist -ipset=/.soupofmedia.com/gfwlist -ipset=/.sourceforge.net/gfwlist -ipset=/.southnews.com.tw/gfwlist -ipset=/.sowers.org.hk/gfwlist -ipset=/.space-scape.com/gfwlist -ipset=/.spankwire.com/gfwlist -ipset=/.spb.com/gfwlist -ipset=/.speckleapp.com/gfwlist -ipset=/.speedpluss.org/gfwlist -ipset=/.spencertipping.com/gfwlist -ipset=/.spinejs.com/gfwlist -ipset=/.sports.williamhill.com/gfwlist -ipset=/.spotify.com/gfwlist -ipset=/.sproutcore.com/gfwlist -ipset=/.squarespace.com/gfwlist -ipset=/.srcf.ucam.org/gfwlist -ipset=/.ssh91.com/gfwlist -ipset=/.sshtunnel.googlecode.com/gfwlist -ipset=/.sstatic.net/gfwlist -ipset=/.stag.gov.tw/gfwlist -ipset=/.standupfortibet.org/gfwlist -ipset=/.starp2p.com/gfwlist -ipset=/.startpage.com/gfwlist -ipset=/.statcounter.com/gfwlist -ipset=/.state168.com/gfwlist -ipset=/.static.apple.nextmedia.com/gfwlist -ipset=/.static.digg.com/gfwlist -ipset=/.staticflickr.com/gfwlist -ipset=/.static.nownews.com/gfwlist -ipset=/.static.soup.io/gfwlist -ipset=/.static.typepad.com/gfwlist -ipset=/.status.twhirl.org/gfwlist -ipset=/.stdtime.gov.tw/gfwlist -ipset=/.steel-storm.com/gfwlist -ipset=/.sthoo.com/gfwlist -ipset=/.stickam.com/gfwlist -ipset=/.stickeraction.com/gfwlist -ipset=/.stonegames.net/gfwlist -ipset=/.stoneip.info/gfwlist -ipset=/.stoptibetcrisis.net/gfwlist -ipset=/.storagenewsletter.com/gfwlist -ipset=/.stoweboyd.com/gfwlist -ipset=/.streamingthe.net/gfwlist -ipset=/.strongvpn.com/gfwlist -ipset=/.student.tw/gfwlist -ipset=/.stuffimreading.com/gfwlist -ipset=/.stuffimreading.net/gfwlist -ipset=/.stupidvideos.com/gfwlist -ipset=/.subacme.rerouted.org/gfwlist -ipset=/.sublexical.spaces.live.com/gfwlist -ipset=/.sufeng.org/gfwlist -ipset=/.sugarsync.com/gfwlist -ipset=/.summify.com/gfwlist -ipset=/.sun1911.com/gfwlist -ipset=/.suoluo.org/gfwlist -ipset=/.surfeasy.com.au/gfwlist -ipset=/.svwind.com/gfwlist -ipset=/.sweux.com/gfwlist -ipset=/.swift-tools.net/gfwlist -ipset=/.s.xiaod.in/gfwlist -ipset=/.sydneytoday.com/gfwlist -ipset=/.sylfoundation.org/gfwlist -ipset=/.syncback.com/gfwlist -ipset=/.sysadmin1138.net/gfwlist -ipset=/.sysresccd.org/gfwlist -ipset=/.sytes.net/gfwlist -ipset=/.szbbs.net/gfwlist -ipset=/.szetowah.org.hk/gfwlist -ipset=/.t35.com/gfwlist -ipset=/.t66y.com/gfwlist -ipset=/.taa-usa.org/gfwlist -ipset=/.tabtter.jp/gfwlist -ipset=/.tacem.org/gfwlist -ipset=/.tafaward.com/gfwlist -ipset=/.tagwalk.com/gfwlist -ipset=/.taipei.gov.tw/gfwlist -ipset=/.taipeisociety.org/gfwlist -ipset=/.taitung-house.gov.tw/gfwlist -ipset=/.taiwandaily.net/gfwlist -ipset=/.taiwankiss.com/gfwlist -ipset=/.taiwannation.50webs.com/gfwlist -ipset=/.taiwannation.com/gfwlist -ipset=/.taiwannation.com.tw/gfwlist -ipset=/.taiwannews.com.tw/gfwlist -ipset=/.taiwan-sex.com/gfwlist -ipset=/.taiwantt.org.tw/gfwlist -ipset=/.taiwanus.net/gfwlist -ipset=/.taiwanyes.com/gfwlist -ipset=/.taiwanyes.ning.com/gfwlist -ipset=/.tamiaode.tk/gfwlist -ipset=/.tanc.org/gfwlist -ipset=/.tangben.com/gfwlist -ipset=/.taolun.info/gfwlist -ipset=/.taoyuan.gov.tw/gfwlist -ipset=/.tap11.com/gfwlist -ipset=/.target.com/gfwlist -ipset=/.taweet.com/gfwlist -ipset=/.tax.nat.gov.tw/gfwlist -ipset=/.tbpic.info/gfwlist -ipset=/.tbsec.org/gfwlist -ipset=/.tbsn.org/gfwlist -ipset=/.tbsseattle.org/gfwlist -ipset=/.tchb.gov.tw/gfwlist -ipset=/.tchrd.org/gfwlist -ipset=/.t.co/gfwlist -ipset=/.tcsac.gov.tw/gfwlist -ipset=/.teamseesmic.com/gfwlist -ipset=/.teashark.com/gfwlist -ipset=/.techlifeweb.com/gfwlist -ipset=/.techparaiso.com/gfwlist -ipset=/.telecomspace.com/gfwlist -ipset=/.telegraph.co.uk/gfwlist -ipset=/.tenacy.com/gfwlist -ipset=/.thbstc.gov.tw/gfwlist -ipset=/.theampfactory.com/gfwlist -ipset=/.theappleblog.com/gfwlist -ipset=/.theatrum-belli.com/gfwlist -ipset=/.thebcomplex.com/gfwlist -ipset=/.theblemish.com/gfwlist -ipset=/.thebodyshop-usa.com/gfwlist -ipset=/.thechinabeat.org/gfwlist -ipset=/.thedailywh.at/gfwlist -ipset=/.thedieline.com/gfwlist -ipset=/.thedw.us/gfwlist -ipset=/.thegatesnotes.com/gfwlist -ipset=/.thehots.info/gfwlist -ipset=/.thehousenews.com/gfwlist -ipset=/.thehungrydudes.com/gfwlist -ipset=/.thehun.net/gfwlist -ipset=/.theinternetwishlist.com/gfwlist -ipset=/.thelifeyoucansave.com/gfwlist -ipset=/.thelius.org/gfwlist -ipset=/.thepiratebay.org/gfwlist -ipset=/.thepiratebay.se/gfwlist -ipset=/.theqii.info/gfwlist -ipset=/.thereallove.kr/gfwlist -ipset=/.thesartorialist.com/gfwlist -ipset=/.thespeeder.com/gfwlist -ipset=/.the-sun.on.cc/gfwlist -ipset=/.thetibetpost.com/gfwlist -ipset=/.thetrotskymovie.com/gfwlist -ipset=/.thevivekspot.com/gfwlist -ipset=/.thewgo.org/gfwlist -ipset=/.thisav.com/gfwlist -ipset=/.thisiswhyyouarefat.com/gfwlist -ipset=/.thkphoto.com/gfwlist -ipset=/.thomasbernhard.org/gfwlist -ipset=/.threatchaos.com/gfwlist -ipset=/.throughnightsfire.com/gfwlist -ipset=/.t.huhaitai.com/gfwlist -ipset=/.thumbzilla.com/gfwlist -ipset=/.thywords.com/gfwlist -ipset=/.tiananmenmother.org/gfwlist -ipset=/.tiananmenuniv.com/gfwlist -ipset=/.tiananmenuniv.net/gfwlist -ipset=/.tiandixing.org/gfwlist -ipset=/.tianhuayuan.com/gfwlist -ipset=/.tiantibooks.org/gfwlist -ipset=/.tianzhu.org/gfwlist -ipset=/.tibetalk.com/gfwlist -ipset=/.tibetanyouthcongress.org/gfwlist -ipset=/.tibet.at/gfwlist -ipset=/.tibet.com/gfwlist -ipset=/.tibetcorps.org/gfwlist -ipset=/.tibetfund.org/gfwlist -ipset=/.tibetjustice.org/gfwlist -ipset=/.tibet.net/gfwlist -ipset=/.tibetoffice.org/gfwlist -ipset=/.tibetonline.com/gfwlist -ipset=/.tibetonline.tv/gfwlist -ipset=/.tibet.org.tw/gfwlist -ipset=/.tibetsun.com/gfwlist -ipset=/.tibetwrites.org/gfwlist -ipset=/.tidyread.com/gfwlist -ipset=/.time.com/gfwlist -ipset=/.times.hinet.net/gfwlist -ipset=/.tinychat.com/gfwlist -ipset=/.tinypaste.com/gfwlist -ipset=/.tinypng.com/gfwlist -ipset=/.tistory.com/gfwlist -ipset=/.tjholowaychuk.com/gfwlist -ipset=/.tkcs-collins.com/gfwlist -ipset=/.tkforum.tk/gfwlist -ipset=/.t.kun.im/gfwlist -ipset=/.tmagazine.com/gfwlist -ipset=/.tmi.me/gfwlist -ipset=/.tnaflix.com/gfwlist -ipset=/.tncsec.gov.tw/gfwlist -ipset=/.t.neolee.cn/gfwlist -ipset=/.togetter.com/gfwlist -ipset=/.tokyo-247.com/gfwlist -ipset=/.tokyocn.com/gfwlist -ipset=/.tokyo-hot.com/gfwlist -ipset=/.tomayko.com/gfwlist -ipset=/.tomsc.com/gfwlist -ipset=/.tono-oka.jp/gfwlist -ipset=/.tonyyan.net/gfwlist -ipset=/.toodoc.com/gfwlist -ipset=/.toonel.net/gfwlist -ipset=/.topic.youthwant.com.tw/gfwlist -ipset=/.topnews.in/gfwlist -ipset=/.topshare.us/gfwlist -ipset=/.topshareware.com/gfwlist -ipset=/.topstyle4.com/gfwlist -ipset=/.topsy.com/gfwlist -ipset=/.tora.to/gfwlist -ipset=/.tor.blingblingsquad.net/gfwlist -ipset=/.torproject.org/gfwlist -ipset=/.torrentcrazy.com/gfwlist -ipset=/.torrentproject.se/gfwlist -ipset=/.tor.updatestar.com/gfwlist -ipset=/.torvpn.com/gfwlist -ipset=/.t.orzdream.com/gfwlist -ipset=/.tosh.comedycentral.com/gfwlist -ipset=/.touch99.com/gfwlist -ipset=/.toutfr.com/gfwlist -ipset=/.tpde.aide.gov.tw/gfwlist -ipset=/.tphcc.gov.tw/gfwlist -ipset=/.tpi.org.tw/gfwlist -ipset=/.transgressionism.org/gfwlist -ipset=/.transparency.org/gfwlist -ipset=/.travelinlocal.com/gfwlist -ipset=/.trendsmap.com/gfwlist -ipset=/.trialofccp.org/gfwlist -ipset=/.tripod.com/gfwlist -ipset=/.trouw.nl/gfwlist -ipset=/.trtc.com.tw/gfwlist -ipset=/.trt.net.tr/gfwlist -ipset=/.trulyergonomic.com/gfwlist -ipset=/.trustedbi.com/gfwlist -ipset=/.truth101.co.tv/gfwlist -ipset=/.truthcn.com/gfwlist -ipset=/.truveo.com/gfwlist -ipset=/.tsctv.net/gfwlist -ipset=/.tsemtulku.com/gfwlist -ipset=/.tsquare.tv/gfwlist -ipset=/.tsunagarumon.com/gfwlist -ipset=/.tt1069.com/gfwlist -ipset=/.tttan.com/gfwlist -ipset=/.tuanzt.com/gfwlist -ipset=/.tube8.com/gfwlist -ipset=/.tubecao.com/gfwlist -ipset=/.tube.com/gfwlist -ipset=/.tubewolf.com/gfwlist -ipset=/.tuidang.net/gfwlist -ipset=/.tuidang.org/gfwlist -ipset=/.tui.orzdream.com/gfwlist -ipset=/.tuite.googlecode.com/gfwlist -ipset=/.tumblr.awflasher.com/gfwlist -ipset=/.tumblweed.org/gfwlist -ipset=/.tumutanzi.com/gfwlist -ipset=/.tunein.com/gfwlist -ipset=/.tunnelbear.com/gfwlist -ipset=/.turbobit.net/gfwlist -ipset=/.turbotwitter.com/gfwlist -ipset=/.turningtorso.com/gfwlist -ipset=/.turntable.fm/gfwlist -ipset=/.tuxtraining.com/gfwlist -ipset=/.tvants.com/gfwlist -ipset=/.tvboxnow.com/gfwlist -ipset=/.tv.com/gfwlist -ipset=/.tvider.com/gfwlist -ipset=/.tv-intros.com/gfwlist -ipset=/.tv.on.cc/gfwlist -ipset=/.tvunetworks.com/gfwlist -ipset=/.twapperkeeper.com/gfwlist -ipset=/.twa.sh/gfwlist -ipset=/.twaud.io/gfwlist -ipset=/.twbbs.net.tw/gfwlist -ipset=/.twbbs.org/gfwlist -ipset=/.twbbs.tw/gfwlist -ipset=/.twblogger.com/gfwlist -ipset=/.tweepguide.com/gfwlist -ipset=/.tweeplike.me/gfwlist -ipset=/.tweepmag.com/gfwlist -ipset=/.tweepml.org/gfwlist -ipset=/.tweetbackup.com/gfwlist -ipset=/.tweetboard.com/gfwlist -ipset=/.tweetboner.biz/gfwlist -ipset=/.tweetdeck.com/gfwlist -ipset=/.tweetedtimes.com/gfwlist -ipset=/.tweetmeme.com/gfwlist -ipset=/.tweetmylast.fm/gfwlist -ipset=/.tweetphoto.com/gfwlist -ipset=/.tweetrans.com/gfwlist -ipset=/.tweetree.com/gfwlist -ipset=/.tweetwally.com/gfwlist -ipset=/.tweetymail.com/gfwlist -ipset=/.twftp.org/gfwlist -ipset=/.twibase.com/gfwlist -ipset=/.twibble.de/gfwlist -ipset=/.twibbon.com/gfwlist -ipset=/.twibs.com/gfwlist -ipset=/.twicsy.com/gfwlist -ipset=/.twifan.com/gfwlist -ipset=/.twiffo.com/gfwlist -ipset=/.twiggit.org/gfwlist -ipset=/.twilog.org/gfwlist -ipset=/.twimbow.com/gfwlist -ipset=/.twimg.com/gfwlist -ipset=/.twimg.edgesuite.net/gfwlist -ipset=/.tw.img.nextmedia.com/gfwlist -ipset=/.twindexx.com/gfwlist -ipset=/.twipple.jp/gfwlist -ipset=/.twistar.cc/gfwlist -ipset=/.twisternow.com/gfwlist -ipset=/.twistory.net/gfwlist -ipset=/.twit2d.com/gfwlist -ipset=/.twitbrowser.net/gfwlist -ipset=/.twitcause.com/gfwlist -ipset=/.twitese.spaces.live.com/gfwlist -ipset=/.twitgether.com/gfwlist -ipset=/.twitgoo.com/gfwlist -ipset=/.twitiq.com/gfwlist -ipset=/.twitlonger.com/gfwlist -ipset=/.twitoaster.com/gfwlist -ipset=/.twitonmsn.com/gfwlist -ipset=/.twitpic.com/gfwlist -ipset=/.twitreferral.com/gfwlist -ipset=/.twitstat.com/gfwlist -ipset=/.twittbot.net/gfwlist -ipset=/.twitter4j.org/gfwlist -ipset=/.twitter.com/gfwlist -ipset=/.twittercounter.com/gfwlist -ipset=/.twitterfeed.com/gfwlist -ipset=/.twittergadget.com/gfwlist -ipset=/.twitter.jp/gfwlist -ipset=/.twitterkr.com/gfwlist -ipset=/.twittermail.com/gfwlist -ipset=/.twittertim.es/gfwlist -ipset=/.twitthat.com/gfwlist -ipset=/.twitturk.com/gfwlist -ipset=/.twitturly.com/gfwlist -ipset=/.twitvid.com/gfwlist -ipset=/.twitzap.com/gfwlist -ipset=/.twiyia.com/gfwlist -ipset=/.tw.jiepang.com/gfwlist -ipset=/.tw.myblog.yahoo.com/gfwlist -ipset=/.tw.news.yahoo.com/gfwlist -ipset=/.tw-npo.org/gfwlist -ipset=/.tw.rd.yahoo.com/gfwlist -ipset=/.twreg.info/gfwlist -ipset=/.twstar.net/gfwlist -ipset=/.tw.streetvoice.com/gfwlist -ipset=/.twt.fm/gfwlist -ipset=/.twtkr.com/gfwlist -ipset=/.twtr2src.ogaoga.org/gfwlist -ipset=/.twtrland.com/gfwlist -ipset=/.twt.tl/gfwlist -ipset=/.twttr.com/gfwlist -ipset=/.twurl.nl/gfwlist -ipset=/.tw.voa.mobi/gfwlist -ipset=/.twyac.org/gfwlist -ipset=/.tw.yahoo.com/gfwlist -ipset=/.tycool.com/gfwlist -ipset=/.tynsoe.org/gfwlist -ipset=/.typepad.com/gfwlist -ipset=/.tzangms.com/gfwlist -ipset=/.ub0.cc/gfwlist -ipset=/.uberproxy.net/gfwlist -ipset=/.ucdc1998.org/gfwlist -ipset=/.uderzo.it/gfwlist -ipset=/.udn.com/gfwlist -ipset=/.ufreevpn.com/gfwlist -ipset=/.ugo.com/gfwlist -ipset=/.uhrp.org/gfwlist -ipset=/.uighurbiz.net/gfwlist -ipset=/.ukliferadio.co.uk/gfwlist -ipset=/.ulike.net/gfwlist -ipset=/.ultravpn.fr/gfwlist -ipset=/.ultraxs.com/gfwlist -ipset=/.unblock.cn.com/gfwlist -ipset=/.unblocksit.es/gfwlist -ipset=/.uncyclomedia.org/gfwlist -ipset=/.uncyclopedia.info/gfwlist -ipset=/.uncyclopedia.tw/gfwlist -ipset=/.unholyknight.com/gfwlist -ipset=/.uni.cc/gfwlist -ipset=/.unicode.org/gfwlist -ipset=/.uniteddaily.com.my/gfwlist -ipset=/.unix100.com/gfwlist -ipset=/.unknownspace.org/gfwlist -ipset=/.unpo.org/gfwlist -ipset=/.uocn.org/gfwlist -ipset=/.upcoming.yahoo.com/gfwlist -ipset=/.update.playstation.net/gfwlist -ipset=/.upload4u.info/gfwlist -ipset=/.upload.backchina.com/gfwlist -ipset=/.uploaded.to/gfwlist -ipset=/.uploadstation.com/gfwlist -ipset=/.upload.wikimedia.org/gfwlist -ipset=/.urlborg.com/gfwlist -ipset=/.urlparser.com/gfwlist -ipset=/.usacn.com/gfwlist -ipset=/.usfk.mil/gfwlist -ipset=/.usinfo.state.gov/gfwlist -ipset=/.usmc.mil/gfwlist -ipset=/.us.to/gfwlist -ipset=/.ustream.tv/gfwlist -ipset=/.usus.cc/gfwlist -ipset=/.uushare.com/gfwlist -ipset=/.uwants.com/gfwlist -ipset=/.uwants.net/gfwlist -ipset=/.uyghurcongress.org/gfwlist -ipset=/.uygur.org/gfwlist -ipset=/.v70.us/gfwlist -ipset=/.vaayoo.com/gfwlist -ipset=/.value-domain.com/gfwlist -ipset=/.van698.com/gfwlist -ipset=/.vanemu.cn/gfwlist -ipset=/.vanilla-jp.com/gfwlist -ipset=/.vansky.com/gfwlist -ipset=/.vapurl.com/gfwlist -ipset=/.vatn.org/gfwlist -ipset=/.vcfbuilder.org/gfwlist -ipset=/.vcf-online.org/gfwlist -ipset=/.veempiire.com/gfwlist -ipset=/.velkaepocha.sk/gfwlist -ipset=/.venbbs.com/gfwlist -ipset=/.venchina.com/gfwlist -ipset=/.ventureswell.com/gfwlist -ipset=/.veoh.com/gfwlist -ipset=/.verizon.net/gfwlist -ipset=/.verybs.com/gfwlist -ipset=/.vevo.com/gfwlist -ipset=/.vft.com.tw/gfwlist -ipset=/.vghks.gov.tw/gfwlist -ipset=/.vghtc.gov.tw/gfwlist -ipset=/.vghtpe.gov.tw/gfwlist -ipset=/.video.aol.ca/gfwlist -ipset=/.video.aol.com/gfwlist -ipset=/.video.aol.co.uk/gfwlist -ipset=/.video.ap.org/gfwlist -ipset=/.videobam.com/gfwlist -ipset=/.video.fdbox.com/gfwlist -ipset=/.video.foxbusiness.com/gfwlist -ipset=/.videomo.com/gfwlist -ipset=/.video.tiscali.it/gfwlist -ipset=/.video.yahoo.com/gfwlist -ipset=/.vidoemo.com/gfwlist -ipset=/.views.fm/gfwlist -ipset=/.viki.com/gfwlist -ipset=/.vimeocdn.com/gfwlist -ipset=/.vimeo.com/gfwlist -ipset=/.vimgolf.com/gfwlist -ipset=/.vimperator.org/gfwlist -ipset=/.vincnd.com/gfwlist -ipset=/.vinniev.com/gfwlist -ipset=/.vllcs.org/gfwlist -ipset=/.vlog.xuite.net/gfwlist -ipset=/.vmixcore.com/gfwlist -ipset=/.voacantonese.com/gfwlist -ipset=/.voachineseblog.com/gfwlist -ipset=/.voachinese.com/gfwlist -ipset=/.voagd.com/gfwlist -ipset=/.voanews.com/gfwlist -ipset=/.voatibetan.com/gfwlist -ipset=/.vocn.tv/gfwlist -ipset=/.vot.org/gfwlist -ipset=/.vpnbook.com/gfwlist -ipset=/.vpnfire.com/gfwlist -ipset=/.vpngate.jp/gfwlist -ipset=/.vpngate.net/gfwlist -ipset=/.vpnpop.com/gfwlist -ipset=/.vpnpronet.com/gfwlist -ipset=/.v-state.org/gfwlist -ipset=/.vtunnel.com/gfwlist -ipset=/.w3schools.com/gfwlist -ipset=/.waffle1999.com/gfwlist -ipset=/.wahas.com/gfwlist -ipset=/.waigaobu.com/gfwlist -ipset=/.waikeung.org/gfwlist -ipset=/.waiwaier.com/gfwlist -ipset=/.wallornot.org/gfwlist -ipset=/.wallpapercasa.com/gfwlist -ipset=/.wanderinghorse.net/gfwlist -ipset=/.wanfang.gov.tw/gfwlist -ipset=/.wangafu.net/gfwlist -ipset=/.wangjinbo.org/gfwlist -ipset=/.wanglixiong.com/gfwlist -ipset=/.wangruoshui.net/gfwlist -ipset=/.wangyi64.spaces.live.com/gfwlist -ipset=/.want-daily.com/gfwlist -ipset=/.wapedia.mobi/gfwlist -ipset=/.washeng.net/gfwlist -ipset=/.watchmygf.net/gfwlist -ipset=/.wattpad.com/gfwlist -ipset=/.wdf5.com/gfwlist -ipset=/.wearn.com/gfwlist -ipset=/.web2project.net/gfwlist -ipset=/.webbang.net/gfwlist -ipset=/.webfee.tk/gfwlist -ipset=/.weblagu.com/gfwlist -ipset=/.webmproject.org/gfwlist -ipset=/.webshots.com/gfwlist -ipset=/.websitepulse.com/gfwlist -ipset=/.webs-tv.net/gfwlist -ipset=/.webworkerdaily.com/gfwlist -ipset=/.weeewooo.net/gfwlist -ipset=/.weekmag.info/gfwlist -ipset=/.wefong.com/gfwlist -ipset=/.weiboleak.com/gfwlist -ipset=/.weigegebyc.dreamhosters.com/gfwlist -ipset=/.weijingsheng.org/gfwlist -ipset=/.weiming.info/gfwlist -ipset=/.weiquanwang.org/gfwlist -ipset=/.weisuo.ws/gfwlist -ipset=/.wellplacedpixels.com/gfwlist -ipset=/.wengewang.com/gfwlist -ipset=/.wengewang.org/gfwlist -ipset=/.wenhui.ch/gfwlist -ipset=/.wenku.com/gfwlist -ipset=/.wenxuecity.com/gfwlist -ipset=/.wenyunchao.com/gfwlist -ipset=/.wenyunchao.spaces.live.com/gfwlist -ipset=/.wepn.info/gfwlist -ipset=/.westca.com/gfwlist -ipset=/.westernwolves.com/gfwlist -ipset=/.wetplace.com/gfwlist -ipset=/.wetpussygames.com/gfwlist -ipset=/.wexiaobo.org/gfwlist -ipset=/.wezhiyong.org/gfwlist -ipset=/.wezone.net/gfwlist -ipset=/.wforum.com/gfwlist -ipset=/.whatblocked.com/gfwlist -ipset=/.whereiswerner.com/gfwlist -ipset=/.whippedass.com/gfwlist -ipset=/.whitebear.freebearblog.org/gfwlist -ipset=/.whydidyoubuymethat.com/gfwlist -ipset=/.whylover.com/gfwlist -ipset=/.whyx.org/gfwlist -ipset=/.w.idaiwan.com/gfwlist -ipset=/.wiki.cnitter.com/gfwlist -ipset=/.wiki.jqueryui.com/gfwlist -ipset=/.wiki.keso.cn/gfwlist -ipset=/.wikileaks.ch/gfwlist -ipset=/.wikileaks.de/gfwlist -ipset=/.wikileaks.eu/gfwlist -ipset=/.wikileaks.lu/gfwlist -ipset=/.wikileaks.org/gfwlist -ipset=/.wikileaks.pl/gfwlist -ipset=/.wikilivres.info/gfwlist -ipset=/.wikimapia.org/gfwlist -ipset=/.wikimedia.org.mo/gfwlist -ipset=/.wiki.moegirl.org/gfwlist -ipset=/.wikinet.org/gfwlist -ipset=/.wiki.oauth.net/gfwlist -ipset=/.wikipedia.org/gfwlist -ipset=/.wiki.phonegap.com/gfwlist -ipset=/.wikiwiki.jp/gfwlist -ipset=/.wikkii.com/gfwlist -ipset=/.williamlong.spaces.live.com/gfwlist -ipset=/.willw.net/gfwlist -ipset=/.windowsphoneme.com/gfwlist -ipset=/.winwhispers.info/gfwlist -ipset=/.wiredbytes.com/gfwlist -ipset=/.wiredpen.com/gfwlist -ipset=/.wireshark.org/gfwlist -ipset=/.wisevid.com/gfwlist -ipset=/.witnessleeteaching.com/gfwlist -ipset=/.witopia.net/gfwlist -ipset=/.wlx.sowiki.net/gfwlist -ipset=/.woeser.com/gfwlist -ipset=/.wolfax.com/gfwlist -ipset=/.womenbusiness.nyc.gov.tw/gfwlist -ipset=/.womensrightsofchina.org/gfwlist -ipset=/.woopie.jp/gfwlist -ipset=/.woopie.tv/gfwlist -ipset=/.wordboner.com/gfwlist -ipset=/.wordpress.com/gfwlist -ipset=/.wordsandturds.com/gfwlist -ipset=/.w.org/gfwlist -ipset=/.workatruna.com/gfwlist -ipset=/.worldcat.org/gfwlist -ipset=/.worldjournal.com/gfwlist -ipset=/.worstthingieverate.com/gfwlist -ipset=/.wo.tc/gfwlist -ipset=/.wowlegacy.ml/gfwlist -ipset=/.wow-life.net/gfwlist -ipset=/.woxinghuiguo.com/gfwlist -ipset=/.wozy.in/gfwlist -ipset=/.wp.com/gfwlist -ipset=/.wpoforum.com/gfwlist -ipset=/.wqlhw.com/gfwlist -ipset=/.wqyd.org/gfwlist -ipset=/.wrchina.org/gfwlist -ipset=/.wretch.cc/gfwlist -ipset=/.writer.zoho.com/gfwlist -ipset=/.wsj.com/gfwlist -ipset=/.wsj.net/gfwlist -ipset=/.wtfpeople.com/gfwlist -ipset=/.wuala.com/gfwlist -ipset=/.wuerkaixi.com/gfwlist -ipset=/.wufi.org.tw/gfwlist -ipset=/.wuguoguang.com/gfwlist -ipset=/.wujieliulan.com/gfwlist -ipset=/.wujie.net/gfwlist -ipset=/.wukangrui.net/gfwlist -ipset=/.wwitv.com/gfwlist -ipset=/.www.6v6dota.com/gfwlist -ipset=/.www.ajsands.com/gfwlist -ipset=/.www.antd.org/gfwlist -ipset=/.www.aolnews.com/gfwlist -ipset=/.www.bulbous.freeserve.co.uk/gfwlist -ipset=/.www.cmoinc.org/gfwlist -ipset=/.www.dfanning.com/gfwlist -ipset=/.www.dwheeler.com/gfwlist -ipset=/.www.eulam.com/gfwlist -ipset=/.www.exblog.jp/gfwlist -ipset=/.www.forum4hk.com/gfwlist -ipset=/.www.freetibet.org/gfwlist -ipset=/.www.getyouram.com/gfwlist -ipset=/.www.goldenmelody.com.tw/gfwlist -ipset=/.www.idlcoyote.com/gfwlist -ipset=/.www.immigration.gov.tw/gfwlist -ipset=/.www.klip.me/gfwlist -ipset=/.www.kodingen.com/gfwlist -ipset=/.www.linksalpha.com/gfwlist -ipset=/.www.loiclemeur.com/gfwlist -ipset=/.www.macrovpn.com/gfwlist -ipset=/.www.monlamit.org/gfwlist -ipset=/.www.moztw.org/gfwlist -ipset=/.www.mycould.com/gfwlist -ipset=/.www.ned.org/gfwlist -ipset=/.www.nownews.com/gfwlist -ipset=/.www.orchidbbs.com/gfwlist -ipset=/.www.owind.com/gfwlist -ipset=/.www.oxid.it/gfwlist -ipset=/.www.parkansky.com/gfwlist -ipset=/.www.powerpointninja.com/gfwlist -ipset=/.www.rnw.nl/gfwlist -ipset=/.www.somee.com/gfwlist -ipset=/.www.stackfile.com/gfwlist -ipset=/.www.supertweet.net/gfwlist -ipset=/.www.tiffanyarment.com/gfwlist -ipset=/.www.tripod.com/gfwlist -ipset=/.www.tv.com/gfwlist -ipset=/.www.twtrland.com/gfwlist -ipset=/.www.typepad.com/gfwlist -ipset=/.www.urbanoutfitters.com/gfwlist -ipset=/.www.vegorpedersen.com/gfwlist -ipset=/.www.voy.com/gfwlist -ipset=/.www.vpncup.com/gfwlist -ipset=/.www.wangruowang.org/gfwlist -ipset=/.www.wan-press.org/gfwlist -ipset=/.www.wet123.com/gfwlist -ipset=/.www.zaurus.org.uk/gfwlist -ipset=/.wzyboy.im/gfwlist -ipset=/.x1949x.com/gfwlist -ipset=/.x365x.com/gfwlist -ipset=/.xanga.com/gfwlist -ipset=/.x-art.com/gfwlist -ipset=/.xa.yimg.com/gfwlist -ipset=/.xbabe.com/gfwlist -ipset=/.xbookcn.com/gfwlist -ipset=/.xcafe.in/gfwlist -ipset=/.xcritic.com/gfwlist -ipset=/.xfm.pp.ru/gfwlist -ipset=/.xgmyd.com/gfwlist -ipset=/.xh4n.cn/gfwlist -ipset=/.xhamster.com/gfwlist -ipset=/.xiaochuncnjp.com/gfwlist -ipset=/.xiaohexie.com/gfwlist -ipset=/.xiaoma.org/gfwlist -ipset=/.xiezhua.com/gfwlist -ipset=/.xing.com/gfwlist -ipset=/.xinhuanet.org/gfwlist -ipset=/.xinmiao.com.hk/gfwlist -ipset=/.xinqimeng.over-blog.com/gfwlist -ipset=/.xinsheng.net/gfwlist -ipset=/.xinshijue.com/gfwlist -ipset=/.xinyubbs.net/gfwlist -ipset=/.xizang-zhiye.org/gfwlist -ipset=/.xjp.cc/gfwlist -ipset=/.xml-training-guide.com/gfwlist -ipset=/.xmovies.com/gfwlist -ipset=/.xmusic.fm/gfwlist -ipset=/.xnxx.com/gfwlist -ipset=/.xpdo.net/gfwlist -ipset=/.xpud.org/gfwlist -ipset=/.xskywalker.com/gfwlist -ipset=/.xtube.com/gfwlist -ipset=/.xuchao.net/gfwlist -ipset=/.xuchao.org/gfwlist -ipset=/.xuzhiyong.net/gfwlist -ipset=/.xuzhuoer.com/gfwlist -ipset=/.xvedios.com/gfwlist -ipset=/.xvideos.com/gfwlist -ipset=/.x-wall.org/gfwlist -ipset=/.xxbbx.com/gfwlist -ipset=/.x.xcity.jp/gfwlist -ipset=/.xxxx.com.au/gfwlist -ipset=/.xysblogs.org/gfwlist -ipset=/.xys.dxiong.com/gfwlist -ipset=/.xys.org/gfwlist -ipset=/.xyy69.com/gfwlist -ipset=/.xyy69.info/gfwlist -ipset=/.yahoo.cn/gfwlist -ipset=/.yahoo.com.hk/gfwlist -ipset=/.yam.com/gfwlist -ipset=/.yanghengjun.spaces.live.com/gfwlist -ipset=/.yasni.co.uk/gfwlist -ipset=/.yasukuni.or.jp/gfwlist -ipset=/.yatsen.gov.tw/gfwlist -ipset=/.ydy.com/gfwlist -ipset=/.yeelou.com/gfwlist -ipset=/.yeeyi.com/gfwlist -ipset=/.yegle.net/gfwlist -ipset=/.yezimary.spaces.live.com/gfwlist -ipset=/.yfrog.com/gfwlist -ipset=/.yhcw.net/gfwlist -ipset=/.yidio.com/gfwlist -ipset=/.yilubbs.com/gfwlist -ipset=/.yi.org/gfwlist -ipset=/.yipub.com/gfwlist -ipset=/.ym.backchina.com/gfwlist -ipset=/.yogichen.org/gfwlist -ipset=/.yong.hu/gfwlist -ipset=/.yorkbbs.ca/gfwlist -ipset=/.youdao.com/gfwlist -ipset=/.youjizz.com/gfwlist -ipset=/.youmaker.com/gfwlist -ipset=/.youpai.org/gfwlist -ipset=/.youporn.com/gfwlist -ipset=/.your-freedom.net/gfwlist -ipset=/.yousendit.com/gfwlist -ipset=/.youthbao.com/gfwlist -ipset=/.youthnetradio.org/gfwlist -ipset=/.youtu.be/gfwlist -ipset=/.youtubecn.com/gfwlist -ipset=/.youtube.com/gfwlist -ipset=/.youtube-nocookie.com/gfwlist -ipset=/.youversion.com/gfwlist -ipset=/.youxu.info/gfwlist -ipset=/.ytht.net/gfwlist -ipset=/.ytimg.com/gfwlist -ipset=/.yuanming.net/gfwlist -ipset=/.yuming.flnet.org/gfwlist -ipset=/.yunchao.net/gfwlist -ipset=/.yvesgeleyn.com/gfwlist -ipset=/.yvtc.gov.tw/gfwlist -ipset=/.yx51.net/gfwlist -ipset=/.yyii.org/gfwlist -ipset=/.yymaya.com/gfwlist -ipset=/.yzzk.com/gfwlist -ipset=/.zacebook.com/gfwlist -ipset=/.zannel.com/gfwlist -ipset=/.zaobao.com/gfwlist -ipset=/.zaobao.com.sg/gfwlist -ipset=/.zaozon.com/gfwlist -ipset=/.zarias.com/gfwlist -ipset=/.zattoo.com/gfwlist -ipset=/.zdnet.com.tw/gfwlist -ipset=/.zengjinyan.org/gfwlist -ipset=/.zengjinyan.spaces.live.com/gfwlist -ipset=/.zeutch.com/gfwlist -ipset=/.zgzcjj.net/gfwlist -ipset=/.zhanbin.net/gfwlist -ipset=/.zhao.jinhai.de/gfwlist -ipset=/.zhenghui.org/gfwlist -ipset=/.zhenlibu.info/gfwlist -ipset=/.zhinengluyou.com/gfwlist -ipset=/.zhllg.spaces.live.com/gfwlist -ipset=/.zh.m.wikipedia.org/gfwlist -ipset=/.zh.netlog.com/gfwlist -ipset=/.zhonggtuotese.net/gfwlist -ipset=/.zhongguotese.net/gfwlist -ipset=/.zhongmeng.org/gfwlist -ipset=/.zhongsou.com/gfwlist -ipset=/.zh.pokerstrategy.com/gfwlist -ipset=/.zhreader.com/gfwlist -ipset=/.zh-tw.justin.tv/gfwlist -ipset=/.zhuichaguoji.org/gfwlist -ipset=/.zh.uncyclopedia.wikia.com/gfwlist -ipset=/.zh.wikinews.org/gfwlist -ipset=/.zh.wikipedia.org/gfwlist -ipset=/.zh.wikisource.org/gfwlist -ipset=/.ziddu.com/gfwlist -ipset=/.zillionk.com/gfwlist -ipset=/.zinio.com/gfwlist -ipset=/.ziplib.com/gfwlist -ipset=/.zkaip.com/gfwlist -ipset=/.zmw.cn/gfwlist -ipset=/.zomobo.net/gfwlist -ipset=/.zonaeuropa.com/gfwlist -ipset=/.zootool.com/gfwlist -ipset=/.zoozle.net/gfwlist -ipset=/.zozotown.com/gfwlist -ipset=/.zshare.net/gfwlist -ipset=/.zsrhao.com/gfwlist -ipset=/.zuo.la/gfwlist -ipset=/.zuola.com/gfwlist -ipset=/.zvereff.com/gfwlist -ipset=/.zyzc9.com/gfwlist -ipset=/.zyzg.us/gfwlist -server=/.h12.io/127.0.0.1#5335 -server=/.starlark.net/127.0.0.1#5335 -server=/.golang.org/127.0.0.1#5335 -server=/.honnef.co/127.0.0.1#5335 -server=/.0rz.tw/127.0.0.1#5335 -server=/.0to255.com/127.0.0.1#5335 -server=/.10musume.com/127.0.0.1#5335 -server=/.123rf.com/127.0.0.1#5335 -server=/.12bet.com/127.0.0.1#5335 -server=/.12vpn.com/127.0.0.1#5335 -server=/.141hongkong.com/127.0.0.1#5335 -server=/.173ng.com/127.0.0.1#5335 -server=/.1984bbs.com/127.0.0.1#5335 -server=/.1984bbs.org/127.0.0.1#5335 -server=/.1-apple.com.tw/127.0.0.1#5335 -server=/.1bao.org/127.0.0.1#5335 -server=/.1eew.com/127.0.0.1#5335 -server=/.1pondo.tv/127.0.0.1#5335 -server=/.2000fun.com/127.0.0.1#5335 -server=/.2008xianzhang.info/127.0.0.1#5335 -server=/.21andy.com/127.0.0.1#5335 -server=/.247realmedia.com/127.0.0.1#5335 -server=/.24smile.org/127.0.0.1#5335 -server=/.2-hand.info/127.0.0.1#5335 -server=/.2mdn.net/127.0.0.1#5335 -server=/.2shared.com/127.0.0.1#5335 -server=/.301works.org/127.0.0.1#5335 -server=/.315lz.com/127.0.0.1#5335 -server=/.32red.com/127.0.0.1#5335 -server=/.365singles.com.ar/127.0.0.1#5335 -server=/.36rain.com/127.0.0.1#5335 -server=/.4bluestones.biz/127.0.0.1#5335 -server=/.4chan.org/127.0.0.1#5335 -server=/.4pppc.gov.tw/127.0.0.1#5335 -server=/.4shared.com/127.0.0.1#5335 -server=/.4sq.com/127.0.0.1#5335 -server=/.51.ca/127.0.0.1#5335 -server=/.5i01.com/127.0.0.1#5335 -server=/.5maodang.com/127.0.0.1#5335 -server=/.64tianwang.com/127.0.0.1#5335 -server=/.64wiki.com/127.0.0.1#5335 -server=/.666kb.com/127.0.0.1#5335 -server=/.6park.com/127.0.0.1#5335 -server=/.7capture.com/127.0.0.1#5335 -server=/.881903.com/127.0.0.1#5335 -server=/.888.com/127.0.0.1#5335 -server=/.89-64.org/127.0.0.1#5335 -server=/.9001700.com/127.0.0.1#5335 -server=/.91porn.com/127.0.0.1#5335 -server=/.921.gov.tw/127.0.0.1#5335 -server=/.92ccav.com/127.0.0.1#5335 -server=/.9bis.com/127.0.0.1#5335 -server=/.9bis.net/127.0.0.1#5335 -server=/.9city.me/127.0.0.1#5335 -server=/.a5.com.ru/127.0.0.1#5335 -server=/.abc.pp.ru/127.0.0.1#5335 -server=/.abitno.linpie.com/127.0.0.1#5335 -server=/.ablwang.com/127.0.0.1#5335 -server=/.aboluowang.com/127.0.0.1#5335 -server=/.aboutgfw.com/127.0.0.1#5335 -server=/.acgkj.com/127.0.0.1#5335 -server=/.ac.jiruan.net/127.0.0.1#5335 -server=/.ac.playstation.net/127.0.0.1#5335 -server=/.actimes.com.au/127.0.0.1#5335 -server=/.aculo.us/127.0.0.1#5335 -server=/.ad1.nownews.com/127.0.0.1#5335 -server=/.addictedtocoffee.de/127.0.0.1#5335 -server=/.ads.backchina.com/127.0.0.1#5335 -server=/.adultfriendfinder.com/127.0.0.1#5335 -server=/.adultkeep.net/127.0.0.1#5335 -server=/.advanscene.com/127.0.0.1#5335 -server=/.advertfan.com/127.0.0.1#5335 -server=/.aec.gov.tw/127.0.0.1#5335 -server=/.aenhancers.com/127.0.0.1#5335 -server=/.af.mil/127.0.0.1#5335 -server=/.aftygh.gov.tw/127.0.0.1#5335 -server=/.aide.gov.tw/127.0.0.1#5335 -server=/.aiph.net/127.0.0.1#5335 -server=/.aisex.com/127.0.0.1#5335 -server=/.ait.org.tw/127.0.0.1#5335 -server=/.aiweiweiblog.com/127.0.0.1#5335 -server=/.aiweiwei.com/127.0.0.1#5335 -server=/.ajaxplorer.info/127.0.0.1#5335 -server=/.akamaihd.net/127.0.0.1#5335 -server=/.akiba-online.com/127.0.0.1#5335 -server=/.alabout.com/127.0.0.1#5335 -server=/.alasbarricadas.org/127.0.0.1#5335 -server=/.alexlur.org/127.0.0.1#5335 -server=/.aliengu.com/127.0.0.1#5335 -server=/.alkasir.com/127.0.0.1#5335 -server=/.allaboutalpha.com/127.0.0.1#5335 -server=/.allgirlsallowed.org/127.0.0.1#5335 -server=/.alliance.org.hk/127.0.0.1#5335 -server=/.allinfa.com/127.0.0.1#5335 -server=/.allinfo.com/127.0.0.1#5335 -server=/.allmovie.com/127.0.0.1#5335 -server=/.allonlinux.free.fr/127.0.0.1#5335 -server=/.all-that-is-interesting.com/127.0.0.1#5335 -server=/.al-qimmah.net/127.0.0.1#5335 -server=/.alternate-tools.com/127.0.0.1#5335 -server=/.altrec.com/127.0.0.1#5335 -server=/.alvinalexander.com/127.0.0.1#5335 -server=/.alwaysdata.com/127.0.0.1#5335 -server=/.alwaysdata.net/127.0.0.1#5335 -server=/.am730.com.hk/127.0.0.1#5335 -server=/.amazonaws.com/127.0.0.1#5335 -server=/.ameblo.jp/127.0.0.1#5335 -server=/.americangreencard.com/127.0.0.1#5335 -server=/.amiblockedornot.com/127.0.0.1#5335 -server=/.amnesty.org/127.0.0.1#5335 -server=/.amnestyusa.org/127.0.0.1#5335 -server=/.amoiist.com/127.0.0.1#5335 -server=/.amzs.me/127.0.0.1#5335 -server=/.analyze-v.com/127.0.0.1#5335 -server=/.anchorfree.com/127.0.0.1#5335 -server=/.andfaraway.net/127.0.0.1#5335 -server=/.android.com/127.0.0.1#5335 -server=/.angularjs.org/127.0.0.1#5335 -server=/.animecrazy.net/127.0.0.1#5335 -server=/.anobii.com/127.0.0.1#5335 -server=/.anontext.com/127.0.0.1#5335 -server=/.anonymizer.com/127.0.0.1#5335 -server=/.a-normal-day.com/127.0.0.1#5335 -server=/.answering-islam.org/127.0.0.1#5335 -server=/.anthonycalzadilla.com/127.0.0.1#5335 -server=/.anti.anti.cnn.googlepages.com/127.0.0.1#5335 -server=/.antidrm.hpg.ig.com.br/127.0.0.1#5335 -server=/.antiwave.net/127.0.0.1#5335 -server=/.aobo.com.au/127.0.0.1#5335 -server=/.aolchannels.aol.com/127.0.0.1#5335 -server=/.aomiwang.com/127.0.0.1#5335 -server=/.apetube.com/127.0.0.1#5335 -server=/.apiary.io/127.0.0.1#5335 -server=/.apidocs.linksalpha.com/127.0.0.1#5335 -server=/.apigee.com/127.0.0.1#5335 -server=/.api.linksalpha.com/127.0.0.1#5335 -server=/.api.proxlet.com/127.0.0.1#5335 -server=/.api.supertweet.net/127.0.0.1#5335 -server=/.app.heywire.com/127.0.0.1#5335 -server=/.app.hkatvnews.com/127.0.0.1#5335 -server=/.appledaily.com/127.0.0.1#5335 -server=/.appledaily.com.tw/127.0.0.1#5335 -server=/.apps.hloli.net/127.0.0.1#5335 -server=/.appspot.com/127.0.0.1#5335 -server=/.archive.is/127.0.0.1#5335 -server=/.archive.org/127.0.0.1#5335 -server=/.arctosia.com/127.0.0.1#5335 -server=/.areca-backup.org/127.0.0.1#5335 -server=/.army.mil/127.0.0.1#5335 -server=/.arte.gov.tw/127.0.0.1#5335 -server=/.art-or-porn.com/127.0.0.1#5335 -server=/.artsy.net/127.0.0.1#5335 -server=/.asahichinese.com/127.0.0.1#5335 -server=/.asdfg.jp/127.0.0.1#5335 -server=/.asiafriendfinder.com/127.0.0.1#5335 -server=/.asiaharvest.org/127.0.0.1#5335 -server=/.asianews.it/127.0.0.1#5335 -server=/.asianwomensfilm.de/127.0.0.1#5335 -server=/.askstudent.com/127.0.0.1#5335 -server=/.askynz.net/127.0.0.1#5335 -server=/.assembla.com/127.0.0.1#5335 -server=/.astonmartinnews.com/127.0.0.1#5335 -server=/.atchinese.com/127.0.0.1#5335 -server=/.atc.org.au/127.0.0.1#5335 -server=/.atgfw.org/127.0.0.1#5335 -server=/.atj.org.tw/127.0.0.1#5335 -server=/.atlaspost.com/127.0.0.1#5335 -server=/.atnext.com/127.0.0.1#5335 -server=/.autoproxy.org/127.0.0.1#5335 -server=/.avaaz.org/127.0.0.1#5335 -server=/.avdb.in/127.0.0.1#5335 -server=/.avidemux.org/127.0.0.1#5335 -server=/.avoision.com/127.0.0.1#5335 -server=/.awardwinningfjords.com/127.0.0.1#5335 -server=/.axureformac.com/127.0.0.1#5335 -server=/.babynet.com.hk/127.0.0.1#5335 -server=/.backchina.com/127.0.0.1#5335 -server=/.backpackers.com.tw/127.0.0.1#5335 -server=/.badassjs.com/127.0.0.1#5335 -server=/.badoo.com/127.0.0.1#5335 -server=/.baidu.jp/127.0.0.1#5335 -server=/.baixing.me/127.0.0.1#5335 -server=/.bannedbook.org/127.0.0.1#5335 -server=/.barnabu.co.uk/127.0.0.1#5335 -server=/.basetimesheightdividedby2.com/127.0.0.1#5335 -server=/.bayvoice.net/127.0.0.1#5335 -server=/.bbcchinese.com/127.0.0.1#5335 -server=/.bbc.com/127.0.0.1#5335 -server=/.bbc.co.uk/127.0.0.1#5335 -server=/.bbci.co.uk/127.0.0.1#5335 -server=/.bbcimg.co.uk/127.0.0.1#5335 -server=/.bbc.in/127.0.0.1#5335 -server=/.bbg.gov/127.0.0.1#5335 -server=/.bbs2.newsgroup.la/127.0.0.1#5335 -server=/.bbs.ecstart.com/127.0.0.1#5335 -server=/.bbsfeed.com/127.0.0.1#5335 -server=/.bbs.kimy.com.tw/127.0.0.1#5335 -server=/.bbsland.com/127.0.0.1#5335 -server=/.bbs.morbell.com/127.0.0.1#5335 -server=/.bbs.mychat.to/127.0.0.1#5335 -server=/.bbs.newsgroup.la/127.0.0.1#5335 -server=/.bbs.ozchinese.com/127.0.0.1#5335 -server=/.bbs.qmzdd.com/127.0.0.1#5335 -server=/.bbs.sina.com/127.0.0.1#5335 -server=/.bbs.skykiwi.com/127.0.0.1#5335 -server=/.bbs.tuitui.info/127.0.0.1#5335 -server=/.bb.ttv.com.tw/127.0.0.1#5335 -server=/.bcc.com.tw/127.0.0.1#5335 -server=/.bcchinese.net/127.0.0.1#5335 -server=/.bdhr.gov.tw/127.0.0.1#5335 -server=/.bd.zhe.la/127.0.0.1#5335 -server=/.bebo.com/127.0.0.1#5335 -server=/.beeg.com/127.0.0.1#5335 -server=/.beijing1989.com/127.0.0.1#5335 -server=/.beijingspring.com/127.0.0.1#5335 -server=/.benjaminste.in/127.0.0.1#5335 -server=/.berlintwitterwall.com/127.0.0.1#5335 -server=/.bestforchina.org/127.0.0.1#5335 -server=/.bestvpnservice.com/127.0.0.1#5335 -server=/.bet365.com/127.0.0.1#5335 -server=/.beta.iset.com.tw/127.0.0.1#5335 -server=/.beta.usejump.com/127.0.0.1#5335 -server=/.betfair.com/127.0.0.1#5335 -server=/.bettween.com/127.0.0.1#5335 -server=/.betvictor.com/127.0.0.1#5335 -server=/.bewww.net/127.0.0.1#5335 -server=/.beyondfirewall.com/127.0.0.1#5335 -server=/.bfnn.org/127.0.0.1#5335 -server=/.biantailajiao.com/127.0.0.1#5335 -server=/.biantailajiao.in/127.0.0.1#5335 -server=/.bigfools.com/127.0.0.1#5335 -server=/.bignews.org/127.0.0.1#5335 -server=/.bigsound.org/127.0.0.1#5335 -server=/.bill2-software.com/127.0.0.1#5335 -server=/.billywr.com/127.0.0.1#5335 -server=/.bill.zhong.pp.ru/127.0.0.1#5335 -server=/.bipic.net/127.0.0.1#5335 -server=/.bitcointalk.org/127.0.0.1#5335 -server=/.bit.ly/127.0.0.1#5335 -server=/.bitly.com/127.0.0.1#5335 -server=/.bitshare.com/127.0.0.1#5335 -server=/.bjzc.org/127.0.0.1#5335 -server=/.blinkx.com/127.0.0.1#5335 -server=/.blinw.com/127.0.0.1#5335 -server=/.blip.tv/127.0.0.1#5335 -server=/.blockcn.com/127.0.0.1#5335 -server=/.blog.birdhouseapp.com/127.0.0.1#5335 -server=/.blog.bitly.com/127.0.0.1#5335 -server=/.blogblog.com/127.0.0.1#5335 -server=/.blog.boxcar.io/127.0.0.1#5335 -server=/.blogcatalog.com/127.0.0.1#5335 -server=/.blog.davidziegler.net/127.0.0.1#5335 -server=/.blog.dayoneapp.com/127.0.0.1#5335 -server=/.blog.de/127.0.0.1#5335 -server=/.blog.dribbble.com/127.0.0.1#5335 -server=/.blog.exblog.co.jp/127.0.0.1#5335 -server=/.blog.expofutures.com/127.0.0.1#5335 -server=/.blog.fizzik.com/127.0.0.1#5335 -server=/.blog.foolsmountain.com/127.0.0.1#5335 -server=/.blogger.com/127.0.0.1#5335 -server=/.blog.gowalla.com/127.0.0.1#5335 -server=/.blog.hotpotato.com/127.0.0.1#5335 -server=/.blog.ifttt.com/127.0.0.1#5335 -server=/.blogimg.jp/127.0.0.1#5335 -server=/.blog.instagram.com/127.0.0.1#5335 -server=/.blog.instapaper.com/127.0.0.1#5335 -server=/.blog.iphone-dev.org/127.0.0.1#5335 -server=/.blog.istef.info/127.0.0.1#5335 -server=/.blog.jackjia.com/127.0.0.1#5335 -server=/.blog.joeyrobert.org/127.0.0.1#5335 -server=/.blog.kangye.org/127.0.0.1#5335 -server=/.blog.kickstarter.com/127.0.0.1#5335 -server=/.blog.kl.am/127.0.0.1#5335 -server=/.blog.klip.me/127.0.0.1#5335 -server=/.blog.lester850.info/127.0.0.1#5335 -server=/.blog.lightbox.com/127.0.0.1#5335 -server=/.bloglines.com/127.0.0.1#5335 -server=/.bloglovin.com/127.0.0.1#5335 -server=/.blog.mongodb.org/127.0.0.1#5335 -server=/.blog.openinkpot.org/127.0.0.1#5335 -server=/.blog.palm.com/127.0.0.1#5335 -server=/.blog.path.com/127.0.0.1#5335 -server=/.blog.pathtosharepoint.com/127.0.0.1#5335 -server=/.blog.pchome.com.tw/127.0.0.1#5335 -server=/.blog.pentalogic.net/127.0.0.1#5335 -server=/.blog.pikchur.com/127.0.0.1#5335 -server=/.blog.pilotmoon.com/127.0.0.1#5335 -server=/.blog.redren.com/127.0.0.1#5335 -server=/.blog.rockmelt.com/127.0.0.1#5335 -server=/.blog.romanandreg.com/127.0.0.1#5335 -server=/.blog.s135.com/127.0.0.1#5335 -server=/.blogs.icerocket.com/127.0.0.1#5335 -server=/.blog.sina.com.tw/127.0.0.1#5335 -server=/.blog.sogoo.org/127.0.0.1#5335 -server=/.blog.sparrowmailapp.com/127.0.0.1#5335 -server=/.blogspot.com/127.0.0.1#5335 -server=/.blogspot.co.uk/127.0.0.1#5335 -server=/.blogspot.de/127.0.0.1#5335 -server=/.blogspot.fr/127.0.0.1#5335 -server=/.blogspot.in/127.0.0.1#5335 -server=/.blogspot.jp/127.0.0.1#5335 -server=/.blogs.tampabay.com/127.0.0.1#5335 -server=/.blog.summify.com/127.0.0.1#5335 -server=/.blogs.yahoo.co.jp/127.0.0.1#5335 -server=/.blog.syx86.cn/127.0.0.1#5335 -server=/.blog.syx86.com/127.0.0.1#5335 -server=/.blog.taragana.com/127.0.0.1#5335 -server=/.blogtd.net/127.0.0.1#5335 -server=/.blogtd.org/127.0.0.1#5335 -server=/.blog.tiney.com/127.0.0.1#5335 -server=/.blog.topify.com/127.0.0.1#5335 -server=/.blog.usa.gov/127.0.0.1#5335 -server=/.blog.xuite.net/127.0.0.1#5335 -server=/.blog.youthwant.com.tw/127.0.0.1#5335 -server=/.blog.youxu.info/127.0.0.1#5335 -server=/.bloodshed.net/127.0.0.1#5335 -server=/.bloomberg.cn/127.0.0.1#5335 -server=/.bloomberg.com/127.0.0.1#5335 -server=/.bloomberg.de/127.0.0.1#5335 -server=/.bloomfortune.com/127.0.0.1#5335 -server=/.bmediaasia.com/127.0.0.1#5335 -server=/.bnrmetal.com/127.0.0.1#5335 -server=/.boardreader.com/127.0.0.1#5335 -server=/.bobulate.com/127.0.0.1#5335 -server=/.bolin.netfirms.com/127.0.0.1#5335 -server=/.bonbonme.com/127.0.0.1#5335 -server=/.bonjourlesgeeks.com/127.0.0.1#5335 -server=/.boobstagram.com/127.0.0.1#5335 -server=/.books.com.tw/127.0.0.1#5335 -server=/.bookshelfporn.com/127.0.0.1#5335 -server=/.botanwang.com/127.0.0.1#5335 -server=/.bot.nu/127.0.0.1#5335 -server=/.bowenpress.com/127.0.0.1#5335 -server=/.boxunblog.com/127.0.0.1#5335 -server=/.boxunclub.com/127.0.0.1#5335 -server=/.boxun.com/127.0.0.1#5335 -server=/.boxun.tv/127.0.0.1#5335 -server=/.bralio.com/127.0.0.1#5335 -server=/.branch.com/127.0.0.1#5335 -server=/.brandonhutchinson.com/127.0.0.1#5335 -server=/.braumeister.org/127.0.0.1#5335 -server=/.break.com/127.0.0.1#5335 -server=/.breakingtweets.com/127.0.0.1#5335 -server=/.briefdream.com/127.0.0.1#5335 -server=/.brightcove.com/127.0.0.1#5335 -server=/.brightkite.com/127.0.0.1#5335 -server=/.brizzly.com/127.0.0.1#5335 -server=/.broadbook.com/127.0.0.1#5335 -server=/.br.st/127.0.0.1#5335 -server=/.brucewang.net/127.0.0.1#5335 -server=/.bt95.com/127.0.0.1#5335 -server=/.btdigg.org/127.0.0.1#5335 -server=/.btrd.net/127.0.0.1#5335 -server=/.budaedu.org/127.0.0.1#5335 -server=/.bugclub.org/127.0.0.1#5335 -server=/.builtwithbootstrap.com/127.0.0.1#5335 -server=/.bullogger.com/127.0.0.1#5335 -server=/.bullog.org/127.0.0.1#5335 -server=/.businesstimes.com.cn/127.0.0.1#5335 -server=/.businessweek.com/127.0.0.1#5335 -server=/.buugaa.com/127.0.0.1#5335 -server=/.buy.yahoo.com.tw/127.0.0.1#5335 -server=/.buzzurl.jp/127.0.0.1#5335 -server=/.bwbx.io/127.0.0.1#5335 -server=/.bwsj.hk/127.0.0.1#5335 -server=/.bx.tl/127.0.0.1#5335 -server=/.c1522.mooo.com/127.0.0.1#5335 -server=/.cacnw.com/127.0.0.1#5335 -server=/.cactusvpn.com/127.0.0.1#5335 -server=/.cafepress.com/127.0.0.1#5335 -server=/.cahr.org.tw/127.0.0.1#5335 -server=/.calameo.com/127.0.0.1#5335 -server=/.calebelston.com/127.0.0.1#5335 -server=/.cams.com/127.0.0.1#5335 -server=/.cams.org.sg/127.0.0.1#5335 -server=/.canadameet.com/127.0.0.1#5335 -server=/.canyu.org/127.0.0.1#5335 -server=/.caobian.info/127.0.0.1#5335 -server=/.caochangqing.com/127.0.0.1#5335 -server=/.cao.im/127.0.0.1#5335 -server=/.cari.com.my/127.0.0.1#5335 -server=/.catch22.net/127.0.0.1#5335 -server=/.catfightpayperview.xxx/127.0.0.1#5335 -server=/.catholic.org.hk/127.0.0.1#5335 -server=/.catholic.org.tw/127.0.0.1#5335 -server=/.cbs.ntu.edu.tw/127.0.0.1#5335 -server=/.cc9007.spaces.live.com/127.0.0.1#5335 -server=/.ccavtop10.com/127.0.0.1#5335 -server=/.ccdtr.org/127.0.0.1#5335 -server=/.ccim.org/127.0.0.1#5335 -server=/.cclife.org/127.0.0.1#5335 -server=/.ccthere.com/127.0.0.1#5335 -server=/.cctongbao.com/127.0.0.1#5335 -server=/.ccue.ca/127.0.0.1#5335 -server=/.ccue.com/127.0.0.1#5335 -server=/.cdig.info/127.0.0.1#5335 -server=/.cdjp.org/127.0.0.1#5335 -server=/.cdnews.com.tw/127.0.0.1#5335 -server=/.cdn.printfriendly.com/127.0.0.1#5335 -server=/.cdp1998.org/127.0.0.1#5335 -server=/.cdp2006.org/127.0.0.1#5335 -server=/.cdp.sinica.edu.tw/127.0.0.1#5335 -server=/.cdpusa.org/127.0.0.1#5335 -server=/.cdpweb.org/127.0.0.1#5335 -server=/.cdpwu.org/127.0.0.1#5335 -server=/.cdw.com/127.0.0.1#5335 -server=/.cecc.gov/127.0.0.1#5335 -server=/.cellulo.info/127.0.0.1#5335 -server=/.cenci.tk/127.0.0.1#5335 -server=/.cenews.eu/127.0.0.1#5335 -server=/.centralnation.com/127.0.0.1#5335 -server=/.centurys.net/127.0.0.1#5335 -server=/.c-est-simple.com/127.0.0.1#5335 -server=/.cfhks.org.hk/127.0.0.1#5335 -server=/.cftfc.com/127.0.0.1#5335 -server=/.cgdepot.org/127.0.0.1#5335 -server=/.chandoo.org/127.0.0.1#5335 -server=/.change.org/127.0.0.1#5335 -server=/.changp.com/127.0.0.1#5335 -server=/.chaos.e-spacy.com/127.0.0.1#5335 -server=/.chapm25.com/127.0.0.1#5335 -server=/.chartbeat.net/127.0.0.1#5335 -server=/.chaturbate.com/127.0.0.1#5335 -server=/.chccc.gov.tw/127.0.0.1#5335 -server=/.chengmingmag.com/127.0.0.1#5335 -server=/.chenguangcheng.com/127.0.0.1#5335 -server=/.chenpokong.com/127.0.0.1#5335 -server=/.chenyehao.spaces.live.com/127.0.0.1#5335 -server=/.cherrysave.com/127.0.0.1#5335 -server=/.chevronwp7.com/127.0.0.1#5335 -server=/.chicagoncmtv.com/127.0.0.1#5335 -server=/.china101.com/127.0.0.1#5335 -server=/.china21.com/127.0.0.1#5335 -server=/.china21.org/127.0.0.1#5335 -server=/.china5000.us/127.0.0.1#5335 -server=/.chinaaffairs.org/127.0.0.1#5335 -server=/.chinaaid.me/127.0.0.1#5335 -server=/.chinaaid.net/127.0.0.1#5335 -server=/.chinaaid.org/127.0.0.1#5335 -server=/.chinaaid.us/127.0.0.1#5335 -server=/.chinachange.org/127.0.0.1#5335 -server=/.chinachannel.hk/127.0.0.1#5335 -server=/.chinacomments.org/127.0.0.1#5335 -server=/.chinadigitaltimes.net/127.0.0.1#5335 -server=/.chinaeweekly.com/127.0.0.1#5335 -server=/.chinafreepress.org/127.0.0.1#5335 -server=/.chinagate.com/127.0.0.1#5335 -server=/.chinageeks.org/127.0.0.1#5335 -server=/.chinagfw.org/127.0.0.1#5335 -server=/.chinagreenparty.org/127.0.0.1#5335 -server=/.china-green-party.spaces.live.com/127.0.0.1#5335 -server=/.chinahush.com/127.0.0.1#5335 -server=/.chinainperspective.com/127.0.0.1#5335 -server=/.chinainperspective.net/127.0.0.1#5335 -server=/.chinainperspective.org/127.0.0.1#5335 -server=/.chinainterimgov.org/127.0.0.1#5335 -server=/.chinalawandpolicy.com/127.0.0.1#5335 -server=/.chinalawtranslate.com/127.0.0.1#5335 -server=/.chinamule.com/127.0.0.1#5335 -server=/.chinamz.org/127.0.0.1#5335 -server=/.chinarightsia.org/127.0.0.1#5335 -server=/.chinasocialdemocraticparty.com/127.0.0.1#5335 -server=/.chinasoul.org/127.0.0.1#5335 -server=/.chinatimes.com/127.0.0.1#5335 -server=/.chinatweeps.com/127.0.0.1#5335 -server=/.chinaway.org/127.0.0.1#5335 -server=/.china-week.com/127.0.0.1#5335 -server=/.chinaworker.info/127.0.0.1#5335 -server=/.chinaxchina.com/127.0.0.1#5335 -server=/.chinayouth.org.hk/127.0.0.1#5335 -server=/.chinayuanmin.org/127.0.0.1#5335 -server=/.chinesedailynews.com/127.0.0.1#5335 -server=/.chinese.engadget.com/127.0.0.1#5335 -server=/.chinese-hermit.net/127.0.0.1#5335 -server=/.chinese-memorial.org/127.0.0.1#5335 -server=/.chinesen.de/127.0.0.1#5335 -server=/.chinesenewsnet.com/127.0.0.1#5335 -server=/.chinesepen.org/127.0.0.1#5335 -server=/.chinese.rnw.nl/127.0.0.1#5335 -server=/.chinese.soifind.com/127.0.0.1#5335 -server=/.chinesetalks.net/127.0.0.1#5335 -server=/.chinese.wsj.com/127.0.0.1#5335 -server=/.chingcheong.com/127.0.0.1#5335 -server=/.chn.chosun.com/127.0.0.1#5335 -server=/.chrispederick.com/127.0.0.1#5335 -server=/.chrispederick.net/127.0.0.1#5335 -server=/.christianstudy.com/127.0.0.1#5335 -server=/.christiantimes.org.hk/127.0.0.1#5335 -server=/.christusrex.org/127.0.0.1#5335 -server=/.chrlawyers.hk/127.0.0.1#5335 -server=/.chrlcg-hk.org/127.0.0.1#5335 -server=/.chromeadblock.com/127.0.0.1#5335 -server=/.chrome.com/127.0.0.1#5335 -server=/.ch.shvoong.com/127.0.0.1#5335 -server=/.chubun.com/127.0.0.1#5335 -server=/.chuizi.net/127.0.0.1#5335 -server=/.chukuang.gov.tw/127.0.0.1#5335 -server=/.circlethebayfortibet.org/127.0.0.1#5335 -server=/.citizenlab.org/127.0.0.1#5335 -server=/.citizensradio.org/127.0.0.1#5335 -server=/.city9x.com/127.0.0.1#5335 -server=/.civicparty.hk/127.0.0.1#5335 -server=/.civilhrfront.org/127.0.0.1#5335 -server=/.civilmedia.tw/127.0.0.1#5335 -server=/.cjb.net/127.0.0.1#5335 -server=/.ck101.com/127.0.0.1#5335 -server=/.classicalguitarblog.net/127.0.0.1#5335 -server=/.clb.org.hk/127.0.0.1#5335 -server=/.cl.d0z.net/127.0.0.1#5335 -server=/.clientsfromhell.net/127.0.0.1#5335 -server=/.clipfish.de/127.0.0.1#5335 -server=/.cl.ly/127.0.0.1#5335 -server=/.cloudfront.net/127.0.0.1#5335 -server=/.club.backchina.com/127.0.0.1#5335 -server=/.cms.gov/127.0.0.1#5335 -server=/.cmule.com/127.0.0.1#5335 -server=/.cn2.streetvoice.com/127.0.0.1#5335 -server=/.cna.com.tw/127.0.0.1#5335 -server=/.cnavista.com.tw/127.0.0.1#5335 -server=/.cn.calameo.com/127.0.0.1#5335 -server=/.cn.dayabook.com/127.0.0.1#5335 -server=/.cnd.org/127.0.0.1#5335 -server=/.cn.fmnnow.com/127.0.0.1#5335 -server=/.cn.ibtimes.com/127.0.0.1#5335 -server=/.cnn.com/127.0.0.1#5335 -server=/.cn.news.cnyes.com/127.0.0.1#5335 -server=/.cn.streetvoice.com/127.0.0.1#5335 -server=/.cn.uncyclopedia.wikia.com/127.0.0.1#5335 -server=/.cn.voa.mobi/127.0.0.1#5335 -server=/.cochina.org/127.0.0.1#5335 -server=/.cocoapods.org/127.0.0.1#5335 -server=/.cocoa.zonble.net/127.0.0.1#5335 -server=/.code1984.com/127.0.0.1#5335 -server=/.codeboxapp.com/127.0.0.1#5335 -server=/.codeshare.io/127.0.0.1#5335 -server=/.collateralmurder.com/127.0.0.1#5335 -server=/.collateralmurder.org/127.0.0.1#5335 -server=/.comefromchina.com/127.0.0.1#5335 -server=/.comnews.gio.gov.tw/127.0.0.1#5335 -server=/.compileheart.com/127.0.0.1#5335 -server=/.connectedchina.reuters.com/127.0.0.1#5335 -server=/.connect.facebook.net/127.0.0.1#5335 -server=/.conoyo.com/127.0.0.1#5335 -server=/.contactmagazine.net/127.0.0.1#5335 -server=/.contests.twilio.com/127.0.0.1#5335 -server=/.conviva.com/127.0.0.1#5335 -server=/.cookingtothegoodlife.com/127.0.0.1#5335 -server=/.coolaler.com/127.0.0.1#5335 -server=/.coolder.com/127.0.0.1#5335 -server=/.coolloud.org.tw/127.0.0.1#5335 -server=/.corpus4u.org/127.0.0.1#5335 -server=/.corumcollege.com/127.0.0.1#5335 -server=/.cotweet.com/127.0.0.1#5335 -server=/.couchdbwiki.com/127.0.0.1#5335 -server=/.coveringweb.com/127.0.0.1#5335 -server=/.cp-house.gov.tw/127.0.0.1#5335 -server=/.cpj.org/127.0.0.1#5335 -server=/.crackle.com/127.0.0.1#5335 -server=/.crd-net.org/127.0.0.1#5335 -server=/.creaders.net/127.0.0.1#5335 -server=/.cromotc.nat.gov.tw/127.0.0.1#5335 -server=/.crossthewall.net/127.0.0.1#5335 -server=/.csdparty.com/127.0.0.1#5335 -server=/.c-spanvideo.org/127.0.0.1#5335 -server=/.css.pixnet.in/127.0.0.1#5335 -server=/.csuchen.de/127.0.0.1#5335 -server=/.cts.com.tw/127.0.0.1#5335 -server=/.cubicle17.com/127.0.0.1#5335 -server=/.cuhkacs.org/127.0.0.1#5335 -server=/.cuihua.org/127.0.0.1#5335 -server=/.cuiweiping.net/127.0.0.1#5335 -server=/.culture.tw/127.0.0.1#5335 -server=/.curvefish.com/127.0.0.1#5335 -server=/.cwb.gov.tw/127.0.0.1#5335 -server=/.cyanogenmod.org/127.0.0.1#5335 -server=/.cyberghost.natado.com/127.0.0.1#5335 -server=/.cyberghostvpn.com/127.0.0.1#5335 -server=/.cycab.gov.tw/127.0.0.1#5335 -server=/.cydia.ifuckgfw.com/127.0.0.1#5335 -server=/.cynscribe.com/127.0.0.1#5335 -server=/.cytode.us/127.0.0.1#5335 -server=/.dabr.co.uk/127.0.0.1#5335 -server=/.dabr.me/127.0.0.1#5335 -server=/.dabr.mobi/127.0.0.1#5335 -server=/.dadazim.com/127.0.0.1#5335 -server=/.dadi360.com/127.0.0.1#5335 -server=/.dafagood.com/127.0.0.1#5335 -server=/.dafahao.com/127.0.0.1#5335 -server=/.dailidaili.com/127.0.0.1#5335 -server=/.dailymotion.com/127.0.0.1#5335 -server=/.dailynews.sina.com/127.0.0.1#5335 -server=/.dajiyuan.com/127.0.0.1#5335 -server=/.dajiyuan.eu/127.0.0.1#5335 -server=/.dajusha.baywords.com/127.0.0.1#5335 -server=/.dalailama.com/127.0.0.1#5335 -server=/.dalailama.ru/127.0.0.1#5335 -server=/.dalailamaworld.com/127.0.0.1#5335 -server=/.dalianmeng.org/127.0.0.1#5335 -server=/.danke4china.net/127.0.0.1#5335 -server=/.danwei.org/127.0.0.1#5335 -server=/.daolan.net/127.0.0.1#5335 -server=/.dapu-house.gov.tw/127.0.0.1#5335 -server=/.darpa.mil/127.0.0.1#5335 -server=/.date.fm/127.0.0.1#5335 -server=/.davidslog.com/127.0.0.1#5335 -server=/.daxa.cn/127.0.0.1#5335 -server=/.dayaarmongol.ning.com/127.0.0.1#5335 -server=/.daylife.com/127.0.0.1#5335 -server=/.ddc.com.tw/127.0.0.1#5335 -server=/.deck.ly/127.0.0.1#5335 -server=/.default.secureserver.net/127.0.0.1#5335 -server=/.delcamp.net/127.0.0.1#5335 -server=/.delicious.com/127.0.0.1#5335 -server=/.democrats.org/127.0.0.1#5335 -server=/.demo.opera-mini.net/127.0.0.1#5335 -server=/.derekhsu.homeip.net/127.0.0.1#5335 -server=/.de-sci.org/127.0.0.1#5335 -server=/.designerol.com/127.0.0.1#5335 -server=/.destiny.xfiles.to/127.0.0.1#5335 -server=/.deutsche-welle.de/127.0.0.1#5335 -server=/.dev102.com/127.0.0.1#5335 -server=/.developers.box.net/127.0.0.1#5335 -server=/.deviantart.com/127.0.0.1#5335 -server=/.deviantart.net/127.0.0.1#5335 -server=/.devio.us/127.0.0.1#5335 -server=/.devpn.com/127.0.0.1#5335 -server=/.dfas.mil/127.0.0.1#5335 -server=/.df.gov.tw/127.0.0.1#5335 -server=/.diaoyuislands.org/127.0.0.1#5335 -server=/.digitalnomadsproject.org/127.0.0.1#5335 -server=/.diigo.com/127.0.0.1#5335 -server=/.dimitrik.free.fr/127.0.0.1#5335 -server=/.dipity.com/127.0.0.1#5335 -server=/.directcreative.com/127.0.0.1#5335 -server=/.discuss.com.hk/127.0.0.1#5335 -server=/.disp.cc/127.0.0.1#5335 -server=/.dit-inc.us/127.0.0.1#5335 -server=/.dizhidizhi.com/127.0.0.1#5335 -server=/.djangosnippets.org/127.0.0.1#5335 -server=/.dl.box.net/127.0.0.1#5335 -server=/.dl-laby.jp/127.0.0.1#5335 -server=/.dl.playstation.net/127.0.0.1#5335 -server=/.dlsite.com/127.0.0.1#5335 -server=/.dmcdn.net/127.0.0.1#5335 -server=/.dmtip.gov.tw/127.0.0.1#5335 -server=/.dns2go.com/127.0.0.1#5335 -server=/.dnscrypt.org/127.0.0.1#5335 -server=/.docstoc.com/127.0.0.1#5335 -server=/.dojin.com/127.0.0.1#5335 -server=/.dok-forum.net/127.0.0.1#5335 -server=/.dolc.de/127.0.0.1#5335 -server=/.dollf.com/127.0.0.1#5335 -server=/.domain.club.tw/127.0.0.1#5335 -server=/.domainhelp.search.com/127.0.0.1#5335 -server=/.dongde.com/127.0.0.1#5335 -server=/.dongtaiwang.com/127.0.0.1#5335 -server=/.dongtaiwang.net/127.0.0.1#5335 -server=/.dongyangjing.com/127.0.0.1#5335 -server=/.dontfilter.us/127.0.0.1#5335 -server=/.dontmovetochina.com/127.0.0.1#5335 -server=/.dotheyfolloweachother.com/127.0.0.1#5335 -server=/.dotplane.com/127.0.0.1#5335 -server=/.dotsub.com/127.0.0.1#5335 -server=/.doubleaf.com/127.0.0.1#5335 -server=/.doubleclick.net/127.0.0.1#5335 -server=/.dougscripts.com/127.0.0.1#5335 -server=/.dowei.org/127.0.0.1#5335 -server=/.download.syniumsoftware.com/127.0.0.1#5335 -server=/.doxygen.org/127.0.0.1#5335 -server=/.dphk.org/127.0.0.1#5335 -server=/.dpp.org.tw/127.0.0.1#5335 -server=/.drewolanoff.com/127.0.0.1#5335 -server=/.drgan.net/127.0.0.1#5335 -server=/.dropbox.com/127.0.0.1#5335 -server=/.dropboxusercontent.com/127.0.0.1#5335 -server=/.drsunacademy.com/127.0.0.1#5335 -server=/.drtuber.com/127.0.0.1#5335 -server=/.dscn.info/127.0.0.1#5335 -server=/.dtiblog.com/127.0.0.1#5335 -server=/.dtic.mil/127.0.0.1#5335 -server=/.dtiserv2.com/127.0.0.1#5335 -server=/.duckduckgo.com/127.0.0.1#5335 -server=/.duckload.com/127.0.0.1#5335 -server=/.duckmylife.com/127.0.0.1#5335 -server=/.duihuahrjournal.org/127.0.0.1#5335 -server=/.duihua.org/127.0.0.1#5335 -server=/.duoweitimes.com/127.0.0.1#5335 -server=/.duping.net/127.0.0.1#5335 -server=/.duplicati.com/127.0.0.1#5335 -server=/.dupola.com/127.0.0.1#5335 -server=/.dupola.net/127.0.0.1#5335 -server=/.dvorak.org/127.0.0.1#5335 -server=/.dw.de/127.0.0.1#5335 -server=/.dwnews.com/127.0.0.1#5335 -server=/.dwnews.net/127.0.0.1#5335 -server=/.dw-world.com/127.0.0.1#5335 -server=/.dw-world.de/127.0.0.1#5335 -server=/.dy24k.info/127.0.0.1#5335 -server=/.dynawebinc.com/127.0.0.1#5335 -server=/.dyndns.org/127.0.0.1#5335 -server=/.dzze.com/127.0.0.1#5335 -server=/.e123.hk/127.0.0.1#5335 -server=/.eamonnbrennan.com/127.0.0.1#5335 -server=/.earthquake.usgs.gov/127.0.0.1#5335 -server=/.easy-share.com/127.0.0.1#5335 -server=/.ebookbrowse.com/127.0.0.1#5335 -server=/.ebookee.com/127.0.0.1#5335 -server=/.echofon.com/127.0.0.1#5335 -server=/.ecministry.net/127.0.0.1#5335 -server=/.edicypages.com/127.0.0.1#5335 -server=/.edoors.com/127.0.0.1#5335 -server=/.edubridge.com/127.0.0.1#5335 -server=/.eevpn.com/127.0.0.1#5335 -server=/.efcc.org.hk/127.0.0.1#5335 -server=/.efksoft.com/127.0.0.1#5335 -server=/.efmoe.com/127.0.0.1#5335 -server=/.e-gold.com/127.0.0.1#5335 -server=/.eic-av.com/127.0.0.1#5335 -server=/.e-info.org.tw/127.0.0.1#5335 -server=/.electionsmeter.com/127.0.0.1#5335 -server=/.elpais.com/127.0.0.1#5335 -server=/.eltondisney.com/127.0.0.1#5335 -server=/.emacsblog.org/127.0.0.1#5335 -server=/.embr.in/127.0.0.1#5335 -server=/.emory.edu/127.0.0.1#5335 -server=/.emule-ed2k.com/127.0.0.1#5335 -server=/.emuparadise.me/127.0.0.1#5335 -server=/.enewstree.com/127.0.0.1#5335 -server=/.en.favotter.net/127.0.0.1#5335 -server=/.englishfromengland.co.uk/127.0.0.1#5335 -server=/.entermap.com/127.0.0.1#5335 -server=/.en.wikipedia.org/127.0.0.1#5335 -server=/.epochtimes-bg.com/127.0.0.1#5335 -server=/.epochtimes.co.il/127.0.0.1#5335 -server=/.epochtimes.co.kr/127.0.0.1#5335 -server=/.epochtimes.com/127.0.0.1#5335 -server=/.epochtimes.de/127.0.0.1#5335 -server=/.epochtimes.fr/127.0.0.1#5335 -server=/.epochtimes.ie/127.0.0.1#5335 -server=/.epochtimes.jp/127.0.0.1#5335 -server=/.epochtimes-romania.com/127.0.0.1#5335 -server=/.epochtimes.ru/127.0.0.1#5335 -server=/.epochtimes.se/127.0.0.1#5335 -server=/.epochtimestr.com/127.0.0.1#5335 -server=/.epochweekly.com/127.0.0.1#5335 -server=/.erabaru.net/127.0.0.1#5335 -server=/.erepublik.com/127.0.0.1#5335 -server=/.erepublik.net/127.0.0.1#5335 -server=/.erights.net/127.0.0.1#5335 -server=/.eriversoft.com/127.0.0.1#5335 -server=/.ernestmandel.org/127.0.0.1#5335 -server=/.etaiwannews.com/127.0.0.1#5335 -server=/.etizer.org/127.0.0.1#5335 -server=/.etools.ncol.com/127.0.0.1#5335 -server=/.e-traderland.net/127.0.0.1#5335 -server=/.etraining.gov.tw/127.0.0.1#5335 -server=/.ettoday.net/127.0.0.1#5335 -server=/.evchk.wikia.com/127.0.0.1#5335 -server=/.eventful.com/127.0.0.1#5335 -server=/.everyday-carry.com/127.0.0.1#5335 -server=/.exblog.jp/127.0.0.1#5335 -server=/.expatshield.com/127.0.0.1#5335 -server=/.exploader.net/127.0.0.1#5335 -server=/.extremetube.com/127.0.0.1#5335 -server=/.eyespirit.info/127.0.0.1#5335 -server=/.eyevio.jp/127.0.0.1#5335 -server=/.eyny.com/127.0.0.1#5335 -server=/.ezpc.tk/127.0.0.1#5335 -server=/.ezpeer.com/127.0.0.1#5335 -server=/.facebook.com/127.0.0.1#5335 -server=/.facebook.net/127.0.0.1#5335 -server=/.facesofnyfw.com/127.0.0.1#5335 -server=/.fail.hk/127.0.0.1#5335 -server=/.faiththedog.info/127.0.0.1#5335 -server=/.fakku.net/127.0.0.1#5335 -server=/.falsefire.com/127.0.0.1#5335 -server=/.falunart.org/127.0.0.1#5335 -server=/.falundafamuseum.org/127.0.0.1#5335 -server=/.falundafa.org/127.0.0.1#5335 -server=/.falunhr.org/127.0.0.1#5335 -server=/.famunion.com/127.0.0.1#5335 -server=/.fangbinxing.com/127.0.0.1#5335 -server=/.fangeming.com/127.0.0.1#5335 -server=/.fanglizhi.info/127.0.0.1#5335 -server=/.fangongheike.com/127.0.0.1#5335 -server=/.fangong.org/127.0.0.1#5335 -server=/.fan-qiang.com/127.0.0.1#5335 -server=/.fanqianghou.com/127.0.0.1#5335 -server=/.fanqiangyakexi.net/127.0.0.1#5335 -server=/.fanswong.com/127.0.0.1#5335 -server=/.fanyue.info/127.0.0.1#5335 -server=/.fapdu.com/127.0.0.1#5335 -server=/.farwestchina.com/127.0.0.1#5335 -server=/.farxian.com/127.0.0.1#5335 -server=/.fastpic.ru/127.0.0.1#5335 -server=/.faststone.org/127.0.0.1#5335 -server=/.favorious.com/127.0.0.1#5335 -server=/.favstar.fm/127.0.0.1#5335 -server=/.fawanghuihui.org/127.0.0.1#5335 -server=/.faydao.com/127.0.0.1#5335 -server=/.fbcdn.net/127.0.0.1#5335 -server=/.fb.com/127.0.0.1#5335 -server=/.fb.me/127.0.0.1#5335 -server=/.fbsbx.com/127.0.0.1#5335 -server=/.fc2china.com/127.0.0.1#5335 -server=/.fc2.com/127.0.0.1#5335 -server=/.f.cl.ly/127.0.0.1#5335 -server=/.fdc89.jp/127.0.0.1#5335 -server=/.feedbooks.mobi/127.0.0.1#5335 -server=/.feedburner.com/127.0.0.1#5335 -server=/.feeds2.feedburner.com/127.0.0.1#5335 -server=/.feeds.feedburner.com/127.0.0.1#5335 -server=/.feedzshare.com/127.0.0.1#5335 -server=/.feelssh.com/127.0.0.1#5335 -server=/.feer.com/127.0.0.1#5335 -server=/.felixcat.net/127.0.0.1#5335 -server=/.feministteacher.com/127.0.0.1#5335 -server=/.fengzhenghu.com/127.0.0.1#5335 -server=/.fetchvideo.com/127.0.0.1#5335 -server=/.ff.im/127.0.0.1#5335 -server=/.fflick.com/127.0.0.1#5335 -server=/.fgmtv.net/127.0.0.1#5335 -server=/.fgmtv.org/127.0.0.1#5335 -server=/.filefactory.com/127.0.0.1#5335 -server=/.files2me.com/127.0.0.1#5335 -server=/.fileserve.com/127.0.0.1#5335 -server=/.fillthesquare.org/127.0.0.1#5335 -server=/.finalion.jp/127.0.0.1#5335 -server=/.findbook.tw/127.0.0.1#5335 -server=/.finler.net/127.0.0.1#5335 -server=/.fireofliberty.org/127.0.0.1#5335 -server=/.firstfivefollowers.com/127.0.0.1#5335 -server=/.flecheinthepeche.fr/127.0.0.1#5335 -server=/.fleshbot.com/127.0.0.1#5335 -server=/.flickr.com/127.0.0.1#5335 -server=/.flickrhivemind.net/127.0.0.1#5335 -server=/.flightcaster.com/127.0.0.1#5335 -server=/.flowerofhappiness.spaces.live.com/127.0.0.1#5335 -server=/.focustaiwan.tw/127.0.0.1#5335 -server=/.focusvpn.com/127.0.0.1#5335 -server=/.fofg.org/127.0.0.1#5335 -server=/.fooooo.com/127.0.0.1#5335 -server=/.footwiball.com/127.0.0.1#5335 -server=/.forum.baby-kingdom.com/127.0.0.1#5335 -server=/.forum.cyberctm.com/127.0.0.1#5335 -server=/.forum.idsam.com/127.0.0.1#5335 -server=/.forum.iset.com.tw/127.0.0.1#5335 -server=/.forum.my903.com/127.0.0.1#5335 -server=/.forum.mymaji.com/127.0.0.1#5335 -server=/.forum.newsgroup.la/127.0.0.1#5335 -server=/.forum.nownews.com/127.0.0.1#5335 -server=/.forum.omy.sg/127.0.0.1#5335 -server=/.forum.palmislife.com/127.0.0.1#5335 -server=/.forum.pchome.com.tw/127.0.0.1#5335 -server=/.forum.setty.com.tw/127.0.0.1#5335 -server=/.forum.sina.com.hk/127.0.0.1#5335 -server=/.forum.slime.com.tw/127.0.0.1#5335 -server=/.forum.tvb.com/127.0.0.1#5335 -server=/.forum.yorkbbs.ca/127.0.0.1#5335 -server=/.fotop.net/127.0.0.1#5335 -server=/.fourface.nodesnoop.com/127.0.0.1#5335 -server=/.fourthinternational.org/127.0.0.1#5335 -server=/.foxdie.us/127.0.0.1#5335 -server=/.foxsub.com/127.0.0.1#5335 -server=/.foxtang.com/127.0.0.1#5335 -server=/.fqrouter.com/127.0.0.1#5335 -server=/.franklc.com/127.0.0.1#5335 -server=/.freakshare.com/127.0.0.1#5335 -server=/.fredwilson.vc/127.0.0.1#5335 -server=/.free4u.com.ar/127.0.0.1#5335 -server=/.freealim.com/127.0.0.1#5335 -server=/.freechal.com/127.0.0.1#5335 -server=/.freedomhouse.org/127.0.0.1#5335 -server=/.free.fr/127.0.0.1#5335 -server=/.freegao.com/127.0.0.1#5335 -server=/.freegateget.googlepages.com/127.0.0.1#5335 -server=/.free-gate.org/127.0.0.1#5335 -server=/.free-hada-now.org/127.0.0.1#5335 -server=/.freelotto.com/127.0.0.1#5335 -server=/.freeman2.com/127.0.0.1#5335 -server=/.freemoren.com/127.0.0.1#5335 -server=/.freemorenews.com/127.0.0.1#5335 -server=/.freenet-china.org/127.0.0.1#5335 -server=/.freenetproject.org/127.0.0.1#5335 -server=/.freenewscn.com/127.0.0.1#5335 -server=/.freeopenvpn.com/127.0.0.1#5335 -server=/.freeoz.org/127.0.0.1#5335 -server=/.free-ssh.com/127.0.0.1#5335 -server=/.freessh.us/127.0.0.1#5335 -server=/.freetibet.org/127.0.0.1#5335 -server=/.freevpn.nl/127.0.0.1#5335 -server=/.freewallpaper4.me/127.0.0.1#5335 -server=/.freewebs.com/127.0.0.1#5335 -server=/.freeweibo.com/127.0.0.1#5335 -server=/.freexinwen.com/127.0.0.1#5335 -server=/.freeyoutubeproxy.net/127.0.0.1#5335 -server=/.friendfeed.com/127.0.0.1#5335 -server=/.friendfeed-media.com/127.0.0.1#5335 -server=/.fring.com/127.0.0.1#5335 -server=/.fringenetwork.com/127.0.0.1#5335 -server=/.frommel.net/127.0.0.1#5335 -server=/.frontlinedefenders.org/127.0.0.1#5335 -server=/.fscked.org/127.0.0.1#5335 -server=/.fsurf.com/127.0.0.1#5335 -server=/.ftchinese.com/127.0.0.1#5335 -server=/.fuckcnnic.net/127.0.0.1#5335 -server=/.fuckgfw.com/127.0.0.1#5335 -server=/.fuckgfw.org/127.0.0.1#5335 -server=/.fulue.com/127.0.0.1#5335 -server=/.funf.tw/127.0.0.1#5335 -server=/.funp.com/127.0.0.1#5335 -server=/.furinkan.com/127.0.0.1#5335 -server=/.furl.net/127.0.0.1#5335 -server=/.futurechinaforum.org/127.0.0.1#5335 -server=/.futureme.org/127.0.0.1#5335 -server=/.futuremessage.org/127.0.0.1#5335 -server=/.fuyin.net/127.0.0.1#5335 -server=/.fw.cm/127.0.0.1#5335 -server=/.fxnetworks.com/127.0.0.1#5335 -server=/.fzh999.com/127.0.0.1#5335 -server=/.fzh999.net/127.0.0.1#5335 -server=/.gabocorp.com/127.0.0.1#5335 -server=/.gaeproxy.com/127.0.0.1#5335 -server=/.gaeproxy.googlecode.com/127.0.0.1#5335 -server=/.galenwu.com/127.0.0.1#5335 -server=/.game735.com/127.0.0.1#5335 -server=/.gamebase.com.tw/127.0.0.1#5335 -server=/.gamer.com.tw/127.0.0.1#5335 -server=/.gamez.com.tw/127.0.0.1#5335 -server=/.ganges.com/127.0.0.1#5335 -server=/.gaoming.net/127.0.0.1#5335 -server=/.gaopi.net/127.0.0.1#5335 -server=/.gaozhisheng.net/127.0.0.1#5335 -server=/.gaozhisheng.org/127.0.0.1#5335 -server=/.gardennetworks.com/127.0.0.1#5335 -server=/.gardennetworks.org/127.0.0.1#5335 -server=/.gartlive.com/127.0.0.1#5335 -server=/.gather.com/127.0.0.1#5335 -server=/.gaymap.cc/127.0.0.1#5335 -server=/.gazotube.com/127.0.0.1#5335 -server=/.gcc.org.hk/127.0.0.1#5335 -server=/.gclooney.com/127.0.0.1#5335 -server=/.g.co/127.0.0.1#5335 -server=/.gcpnews.com/127.0.0.1#5335 -server=/.gdbt.net/127.0.0.1#5335 -server=/.gdzf.org/127.0.0.1#5335 -server=/.geek-art.net/127.0.0.1#5335 -server=/.geekerhome.com/127.0.0.1#5335 -server=/.geekmade.co.uk/127.0.0.1#5335 -server=/.geekmanuals.com/127.0.0.1#5335 -server=/.generesis.com/127.0.0.1#5335 -server=/.genuitec.com/127.0.0.1#5335 -server=/.geocities.co.jp/127.0.0.1#5335 -server=/.geocities.com/127.0.0.1#5335 -server=/.geocities.jp/127.0.0.1#5335 -server=/.geohot.com/127.0.0.1#5335 -server=/.geometrictools.com/127.0.0.1#5335 -server=/.getchu.com/127.0.0.1#5335 -server=/.getcloudapp.com/127.0.0.1#5335 -server=/.get-digital-help.com/127.0.0.1#5335 -server=/.getfoxyproxy.org/127.0.0.1#5335 -server=/.getfreedur.com/127.0.0.1#5335 -server=/.getiton.com/127.0.0.1#5335 -server=/.getjetso.com/127.0.0.1#5335 -server=/.getlantern.org/127.0.0.1#5335 -server=/.getsmartlinks.com/127.0.0.1#5335 -server=/.getsocialscope.com/127.0.0.1#5335 -server=/.gfwinterceptor.googlecode.com/127.0.0.1#5335 -server=/.gfw.org.ua/127.0.0.1#5335 -server=/.ggpht.com/127.0.0.1#5335 -server=/.ggssl.com/127.0.0.1#5335 -server=/.ghost.org/127.0.0.1#5335 -server=/.ghut.org/127.0.0.1#5335 -server=/.giga-web.jp/127.0.0.1#5335 -server=/.gigporno.ru/127.0.0.1#5335 -server=/.gimpshop.com/127.0.0.1#5335 -server=/.girlbanker.com/127.0.0.1#5335 -server=/.github.com/127.0.0.1#5335 -server=/.git-scm.com/127.0.0.1#5335 -server=/.givemesomethingtoread.com/127.0.0.1#5335 -server=/.glennhilton.com/127.0.0.1#5335 -server=/.globaljihad.net/127.0.0.1#5335 -server=/.globalmuseumoncommunism.org/127.0.0.1#5335 -server=/.globalrescue.net/127.0.0.1#5335 -server=/.globalvoicesonline.org/127.0.0.1#5335 -server=/.gmail.com/127.0.0.1#5335 -server=/.gmbd.cn/127.0.0.1#5335 -server=/.gmhz.org/127.0.0.1#5335 -server=/.gmodules.com/127.0.0.1#5335 -server=/.gmozomg.izihost.org/127.0.0.1#5335 -server=/.gnci.org.hk/127.0.0.1#5335 -server=/.goagent.biz/127.0.0.1#5335 -server=/.goagent.googlecode.com/127.0.0.1#5335 -server=/.goagentplus.com/127.0.0.1#5335 -server=/.godfootsteps.org/127.0.0.1#5335 -server=/.golang.org/127.0.0.1#5335 -server=/.goldbetsports.com/127.0.0.1#5335 -server=/.goldwave.com/127.0.0.1#5335 -server=/.gongmeng.info/127.0.0.1#5335 -server=/.gongm.in/127.0.0.1#5335 -server=/.gongminliliang.com/127.0.0.1#5335 -server=/.gongwt.com/127.0.0.1#5335 -server=/.goodreaders.com/127.0.0.1#5335 -server=/.goodreads.com/127.0.0.1#5335 -server=/.goofind.com/127.0.0.1#5335 -server=/.goo.gl/127.0.0.1#5335 -server=/.googleadservices.com/127.0.0.1#5335 -server=/.google-analytics.com/127.0.0.1#5335 -server=/.googleapis.com/127.0.0.1#5335 -server=/.googlecode.com/127.0.0.1#5335 -server=/.google.co.jp/127.0.0.1#5335 -server=/.google.com/127.0.0.1#5335 -server=/.google.com.hk/127.0.0.1#5335 -server=/.google.com.sg/127.0.0.1#5335 -server=/.google.com.tw/127.0.0.1#5335 -server=/.google.com.uk/127.0.0.1#5335 -server=/.googledomains.com/127.0.0.1#5335 -server=/.googledrive.com/127.0.0.1#5335 -server=/.googleearth.com/127.0.0.1#5335 -server=/.googlehosted.com/127.0.0.1#5335 -server=/.googlelabs.com/127.0.0.1#5335 -server=/.googlemail.com/127.0.0.1#5335 -server=/.googleplus.com/127.0.0.1#5335 -server=/.googlesile.com/127.0.0.1#5335 -server=/.googlesource.com/127.0.0.1#5335 -server=/.googlesyndication.com/127.0.0.1#5335 -server=/.googletagmanager.com/127.0.0.1#5335 -server=/.googletagservices.com/127.0.0.1#5335 -server=/.googleusercontent.com/127.0.0.1#5335 -server=/.googlevideo.com/127.0.0.1#5335 -server=/.gopetition.com/127.0.0.1#5335 -server=/.gospelherald.com/127.0.0.1#5335 -server=/.gov.tw/127.0.0.1#5335 -server=/.gpass1.com/127.0.0.1#5335 -server=/.grandtrial.org/127.0.0.1#5335 -server=/.graphis.ne.jp/127.0.0.1#5335 -server=/.gravatar.com/127.0.0.1#5335 -server=/.graylog2.org/127.0.0.1#5335 -server=/.grb.gov.tw/127.0.0.1#5335 -server=/.greatfire.org/127.0.0.1#5335 -server=/.greatfirewall.biz/127.0.0.1#5335 -server=/.great-firewall.com/127.0.0.1#5335 -server=/.greatfirewallofchina.net/127.0.0.1#5335 -server=/.greatfirewallofchina.org/127.0.0.1#5335 -server=/.great-roc.org/127.0.0.1#5335 -server=/.greatroc.org/127.0.0.1#5335 -server=/.greatroc.tw/127.0.0.1#5335 -server=/.greatzhonghua.org/127.0.0.1#5335 -server=/.greenparty.org.tw/127.0.0.1#5335 -server=/.greenvpn.net/127.0.0.1#5335 -server=/.gs-discuss.com/127.0.0.1#5335 -server=/.gseeker.com/127.0.0.1#5335 -server=/.gsn-cert.nat.gov.tw/127.0.0.1#5335 -server=/.gstatic.com/127.0.0.1#5335 -server=/.gtap.googlecode.com/127.0.0.1#5335 -server=/.gtricks.com/127.0.0.1#5335 -server=/.guancha.org/127.0.0.1#5335 -server=/.gufeng521.spaces.live.com/127.0.0.1#5335 -server=/.guishan.org/127.0.0.1#5335 -server=/.gunsamerica.com/127.0.0.1#5335 -server=/.gun-world.net/127.0.0.1#5335 -server=/.guomin.us/127.0.0.1#5335 -server=/.gutteruncensored.com/127.0.0.1#5335 -server=/.gvm.com.tw/127.0.0.1#5335 -server=/.gyalwarinpoche.com/127.0.0.1#5335 -server=/.gysd.nyc.gov.tw/127.0.0.1#5335 -server=/.gzm.tv/127.0.0.1#5335 -server=/.gzone-anime.info/127.0.0.1#5335 -server=/.h1n1china.org/127.0.0.1#5335 -server=/.hacken.cc/127.0.0.1#5335 -server=/.hackthatphone.net/127.0.0.1#5335 -server=/.hahlo.com/127.0.0.1#5335 -server=/.hakkatv.org.tw/127.0.0.1#5335 -server=/.hanunyi.com/127.0.0.1#5335 -server=/.hardsextube.com/127.0.0.1#5335 -server=/.hasaowall.com/127.0.0.1#5335 -server=/.have8.com/127.0.0.1#5335 -server=/.haygo.com/127.0.0.1#5335 -server=/.hcc.gov.tw/127.0.0.1#5335 -server=/.hchcc.gov.tw/127.0.0.1#5335 -server=/.h-china.org/127.0.0.1#5335 -server=/.hdtvb.net/127.0.0.1#5335 -server=/.heartyit.com/127.0.0.1#5335 -server=/.hecaitou.net/127.0.0.1#5335 -server=/.hechaji.com/127.0.0.1#5335 -server=/.heix.pp.ru/127.0.0.1#5335 -server=/.heiyo.info/127.0.0.1#5335 -server=/.helloandroid.com/127.0.0.1#5335 -server=/.hellonewyork.us/127.0.0.1#5335 -server=/.helloqueer.com/127.0.0.1#5335 -server=/.hellotxt.com/127.0.0.1#5335 -server=/.hellouk.org/127.0.0.1#5335 -server=/.helpeachpeople.com/127.0.0.1#5335 -server=/.helplinfen.com/127.0.0.1#5335 -server=/.help.linksalpha.com/127.0.0.1#5335 -server=/.help.opera.com/127.0.0.1#5335 -server=/.helpzhuling.org/127.0.0.1#5335 -server=/.hen.bao.li/127.0.0.1#5335 -server=/.hengchuen.gov.tw/127.0.0.1#5335 -server=/.heqinglian.net/127.0.0.1#5335 -server=/.here4news.com/127.0.0.1#5335 -server=/.heungkongdiscuss.com/127.0.0.1#5335 -server=/.hgseav.com/127.0.0.1#5335 -server=/.hidden-advent.org/127.0.0.1#5335 -server=/.hidecloud.com/127.0.0.1#5335 -server=/.hideipvpn.com/127.0.0.1#5335 -server=/.hidemyass.com/127.0.0.1#5335 -server=/.higfw.com/127.0.0.1#5335 -server=/.highrockmedia.com/127.0.0.1#5335 -server=/.hihiforum.com/127.0.0.1#5335 -server=/.hihistory.net/127.0.0.1#5335 -server=/.hiitch.com/127.0.0.1#5335 -server=/.hikinggfw.org/127.0.0.1#5335 -server=/.himemix.com/127.0.0.1#5335 -server=/.himemix.net/127.0.0.1#5335 -server=/.hjclub.info/127.0.0.1#5335 -server=/.hk32168.com/127.0.0.1#5335 -server=/.hkbc.net/127.0.0.1#5335 -server=/.hkbf.org/127.0.0.1#5335 -server=/.hkchurch.org/127.0.0.1#5335 -server=/.hkdailynews.com.hk/127.0.0.1#5335 -server=/.hkday.net/127.0.0.1#5335 -server=/.hkej.com/127.0.0.1#5335 -server=/.hkepc.com/127.0.0.1#5335 -server=/.hkfront.org/127.0.0.1#5335 -server=/.hk.geocities.com/127.0.0.1#5335 -server=/.hkgolden.com/127.0.0.1#5335 -server=/.hkgreenradio.org/127.0.0.1#5335 -server=/.hkg.westkit.net/127.0.0.1#5335 -server=/.hkheadline.com/127.0.0.1#5335 -server=/.hkhkhk.com/127.0.0.1#5335 -server=/.hkjc.com/127.0.0.1#5335 -server=/.hk.jiepang.com/127.0.0.1#5335 -server=/.hkjp.easyweb.hk/127.0.0.1#5335 -server=/.hkjp.org/127.0.0.1#5335 -server=/.hk.knowledge.yahoo.com/127.0.0.1#5335 -server=/.hk.myblog.yahoo.com/127.0.0.1#5335 -server=/.hk.news.yahoo.com/127.0.0.1#5335 -server=/.hkptu.org/127.0.0.1#5335 -server=/.hk-pub.com/127.0.0.1#5335 -server=/.hk.rd.yahoo.com/127.0.0.1#5335 -server=/.hkreporter.com/127.0.0.1#5335 -server=/.hkreporter.loved.hk/127.0.0.1#5335 -server=/.hk.search.yahoo.com/127.0.0.1#5335 -server=/.hk.video.news.yahoo.com/127.0.0.1#5335 -server=/.hkwcc.org.hk/127.0.0.1#5335 -server=/.hk.yahoo.com/127.0.0.1#5335 -server=/.hkzone.org/127.0.0.1#5335 -server=/.hnjhj.com/127.0.0.1#5335 -server=/.hola.com/127.0.0.1#5335 -server=/.holyspiritspeaks.org/127.0.0.1#5335 -server=/.holz.byethost8.com/127.0.0.1#5335 -server=/.homeservershow.com/127.0.0.1#5335 -server=/.home.sina.com/127.0.0.1#5335 -server=/.home.so-net.net.tw/127.0.0.1#5335 -server=/.honeonet.spaces.live.com/127.0.0.1#5335 -server=/.hongmeimei.com/127.0.0.1#5335 -server=/.hongzhi.li/127.0.0.1#5335 -server=/.hootsuite.com/127.0.0.1#5335 -server=/.hotpot.hk/127.0.0.1#5335 -server=/.hotshame.com/127.0.0.1#5335 -server=/.hotspotshield.com/127.0.0.1#5335 -server=/.hougaige.com/127.0.0.1#5335 -server=/.howtoforge.com/127.0.0.1#5335 -server=/.hqcdp.org/127.0.0.1#5335 -server=/.hrcir.com/127.0.0.1#5335 -server=/.hrichina.org/127.0.0.1#5335 -server=/.hrw.org/127.0.0.1#5335 -server=/.hsinchu-cc.gov.tw/127.0.0.1#5335 -server=/.hsjp.net/127.0.0.1#5335 -server=/.hsselite.com/127.0.0.1#5335 -server=/.htkou.net/127.0.0.1#5335 -server=/.htl.li/127.0.0.1#5335 -server=/.ht.ly/127.0.0.1#5335 -server=/.htmldog.com/127.0.0.1#5335 -server=/.huaglad.com/127.0.0.1#5335 -server=/.huajiadi.spaces.live.com/127.0.0.1#5335 -server=/.huanghuagang.org/127.0.0.1#5335 -server=/.huaren.us/127.0.0.1#5335 -server=/.huaxia-news.com/127.0.0.1#5335 -server=/.huaxin.ph/127.0.0.1#5335 -server=/.hua-yue.net/127.0.0.1#5335 -server=/.hudatoriq.web.id/127.0.0.1#5335 -server=/.hugoroy.eu/127.0.0.1#5335 -server=/.huhamhire.com/127.0.0.1#5335 -server=/.hujiachina.spaces.live.com/127.0.0.1#5335 -server=/.hulu.com/127.0.0.1#5335 -server=/.huluim.com/127.0.0.1#5335 -server=/.humanities.uchicago.edu/127.0.0.1#5335 -server=/.hungerstrikeforaids.org/127.0.0.1#5335 -server=/.hung-ya.com/127.0.0.1#5335 -server=/.huping.net/127.0.0.1#5335 -server=/.hutianyi.net/127.0.0.1#5335 -server=/.hutong9.net/127.0.0.1#5335 -server=/.hwinfo.com/127.0.0.1#5335 -server=/.hyperrate.com/127.0.0.1#5335 -server=/.hypeshell.com/127.0.0.1#5335 -server=/.i1.hk/127.0.0.1#5335 -server=/.i2runner.com/127.0.0.1#5335 -server=/.ialmostlaugh.com/127.0.0.1#5335 -server=/.iask.bz/127.0.0.1#5335 -server=/.iask.ca/127.0.0.1#5335 -server=/.ibiblio.org/127.0.0.1#5335 -server=/.iblogserv-f.net/127.0.0.1#5335 -server=/.ibros.org/127.0.0.1#5335 -server=/.icij.org/127.0.0.1#5335 -server=/.icl-fi.org/127.0.0.1#5335 -server=/.iconpaper.org/127.0.0.1#5335 -server=/.icu-project.org/127.0.0.1#5335 -server=/.idemocracy.asia/127.0.0.1#5335 -server=/.identi.ca/127.0.0.1#5335 -server=/.idiomconnection.com/127.0.0.1#5335 -server=/.idouga.com/127.0.0.1#5335 -server=/.idv.tw/127.0.0.1#5335 -server=/.ieasynews.net/127.0.0.1#5335 -server=/.ied2k.net/127.0.0.1#5335 -server=/.ieemdai.spaces.live.com/127.0.0.1#5335 -server=/.ifan.cz.cc/127.0.0.1#5335 -server=/.ifanqiang.com/127.0.0.1#5335 -server=/.ifanr.com/127.0.0.1#5335 -server=/.ifcss.org/127.0.0.1#5335 -server=/.ifjc.org/127.0.0.1#5335 -server=/.igfw.net/127.0.0.1#5335 -server=/.ignitedetroit.net/127.0.0.1#5335 -server=/.igvita.com/127.0.0.1#5335 -server=/.ihakka.net/127.0.0.1#5335 -server=/.iicns.com/127.0.0.1#5335 -server=/.illusionfactory.com/127.0.0.1#5335 -server=/.ilove80.be/127.0.0.1#5335 -server=/.im88.tw/127.0.0.1#5335 -server=/.imageflea.com/127.0.0.1#5335 -server=/.imagesblog.gio.gov.tw/127.0.0.1#5335 -server=/.imageshack.us/127.0.0.1#5335 -server=/.imagevenue.com/127.0.0.1#5335 -server=/.imagezilla.net/127.0.0.1#5335 -server=/.ime.baidu.jp/127.0.0.1#5335 -server=/.img.ly/127.0.0.1#5335 -server=/.imkev.com/127.0.0.1#5335 -server=/.imlive.com/127.0.0.1#5335 -server=/.immigration.gov.tw/127.0.0.1#5335 -server=/.imrworldwide.com/127.0.0.1#5335 -server=/.im.tv/127.0.0.1#5335 -server=/.incredibox.fr/127.0.0.1#5335 -server=/.iner.gov.tw/127.0.0.1#5335 -server=/.initiativesforchina.org/127.0.0.1#5335 -server=/.inmediahk.net/127.0.0.1#5335 -server=/.innermongolia.org/127.0.0.1#5335 -server=/.instagram.com/127.0.0.1#5335 -server=/.interestinglaugh.com/127.0.0.1#5335 -server=/.interfaceaddiction.com/127.0.0.1#5335 -server=/.internationalrivers.org/127.0.0.1#5335 -server=/.internetdefenseleague.org/127.0.0.1#5335 -server=/.internetfreedom.org/127.0.0.1#5335 -server=/.internetpopculture.com/127.0.0.1#5335 -server=/.inxian.com/127.0.0.1#5335 -server=/.iphone4hongkong.com/127.0.0.1#5335 -server=/.iphonehacks.com/127.0.0.1#5335 -server=/.iphonix.fr/127.0.0.1#5335 -server=/.ipicture.ru/127.0.0.1#5335 -server=/.ipobar.com/127.0.0.1#5335 -server=/.ippotv.com/127.0.0.1#5335 -server=/.iptorrents.com/127.0.0.1#5335 -server=/.ipvanish.com/127.0.0.1#5335 -server=/.iredmail.org/127.0.0.1#5335 -server=/.ironbigfools.compython.net/127.0.0.1#5335 -server=/.ironicsoftware.com/127.0.0.1#5335 -server=/.ironpython.net/127.0.0.1#5335 -server=/.isaacmao.com/127.0.0.1#5335 -server=/.isgreat.org/127.0.0.1#5335 -server=/.islamicity.com/127.0.0.1#5335 -server=/.islam.org.hk/127.0.0.1#5335 -server=/.ismprofessional.net/127.0.0.1#5335 -server=/.isohunt.com/127.0.0.1#5335 -server=/.israbox.com/127.0.0.1#5335 -server=/.istockphoto.com/127.0.0.1#5335 -server=/.isunaffairs.com/127.0.0.1#5335 -server=/.isuntv.com/127.0.0.1#5335 -server=/.itaboo.info/127.0.0.1#5335 -server=/.ithelp.ithome.com.tw/127.0.0.1#5335 -server=/.itrc.gov.tw/127.0.0.1#5335 -server=/.itshidden.com/127.0.0.1#5335 -server=/.itweet.net/127.0.0.1#5335 -server=/.iu45.com/127.0.0.1#5335 -server=/.iverycd.com/127.0.0.1#5335 -server=/.ixquick.com/127.0.0.1#5335 -server=/.izaobao.us/127.0.0.1#5335 -server=/.izles.net/127.0.0.1#5335 -server=/.japan-whores.com/127.0.0.1#5335 -server=/.jayparkinsonmd.com/127.0.0.1#5335 -server=/.jbtalks.cc/127.0.0.1#5335 -server=/.jbtalks.com/127.0.0.1#5335 -server=/.jbtalks.my/127.0.0.1#5335 -server=/.jeanyim.com/127.0.0.1#5335 -server=/.jgoodies.com/127.0.0.1#5335 -server=/.jiaoyou8.com/127.0.0.1#5335 -server=/.jiehua.cz/127.0.0.1#5335 -server=/.jieshibaobao.com/127.0.0.1#5335 -server=/.jike.com/127.0.0.1#5335 -server=/.jimoparty.com/127.0.0.1#5335 -server=/.jinbushe.org/127.0.0.1#5335 -server=/.jingpin.org/127.0.0.1#5335 -server=/.jitouch.com/127.0.0.1#5335 -server=/.jkforum.net/127.0.0.1#5335 -server=/.j.mp/127.0.0.1#5335 -server=/.joachims.org/127.0.0.1#5335 -server=/.jobso.tv/127.0.0.1#5335 -server=/.joeedelman.com/127.0.0.1#5335 -server=/.journalofdemocracy.org/127.0.0.1#5335 -server=/.jpopforum.net/127.0.0.1#5335 -server=/.juliereyc.com/127.0.0.1#5335 -server=/.junauza.com/127.0.0.1#5335 -server=/.junefourth-20.net/127.0.0.1#5335 -server=/.justfreevpn.com/127.0.0.1#5335 -server=/.justtristan.com/127.0.0.1#5335 -server=/.juziyue.com/127.0.0.1#5335 -server=/.jwmusic.org/127.0.0.1#5335 -server=/.jyxf.net/127.0.0.1#5335 -server=/.jyzj.waqn.com/127.0.0.1#5335 -server=/.k2.xrea.com/127.0.0.1#5335 -server=/.kagyuoffice.org.tw/127.0.0.1#5335 -server=/.kaiyuan.de/127.0.0.1#5335 -server=/.kakao.com/127.0.0.1#5335 -server=/.kanzhongguo.com/127.0.0.1#5335 -server=/.kanzhongguo.eu/127.0.0.1#5335 -server=/.karayou.com/127.0.0.1#5335 -server=/.ka-wai.com/127.0.0.1#5335 -server=/.kcsoftwares.com/127.0.0.1#5335 -server=/.kechara.com/127.0.0.1#5335 -server=/.keepandshare.com/127.0.0.1#5335 -server=/.kendincos.net/127.0.0.1#5335 -server=/.kenengba.com/127.0.0.1#5335 -server=/.keontech.net/127.0.0.1#5335 -server=/.khcc.gov.tw/127.0.0.1#5335 -server=/.khms.gov.tw/127.0.0.1#5335 -server=/.khmusic.com.tw/127.0.0.1#5335 -server=/.killwall.com/127.0.0.1#5335 -server=/.kineox.free.fr/127.0.0.1#5335 -server=/.kingdomsalvation.org/127.0.0.1#5335 -server=/.kinghost.com/127.0.0.1#5335 -server=/.kingstone.com.tw/127.0.0.1#5335 -server=/.kissbbao.cn/127.0.0.1#5335 -server=/.kissyoutube.com/127.0.0.1#5335 -server=/.kk.gov.tw/127.0.0.1#5335 -server=/.klccab.gov.tw/127.0.0.1#5335 -server=/.klra.gov.tw/127.0.0.1#5335 -server=/.klsio.gov.tw/127.0.0.1#5335 -server=/.kmh.gov.tw/127.0.0.1#5335 -server=/.kmseh.gov.tw/127.0.0.1#5335 -server=/.knowledgerush.com/127.0.0.1#5335 -server=/.kodingen.com/127.0.0.1#5335 -server=/.kompozer.net/127.0.0.1#5335 -server=/.koolsolutions.com/127.0.0.1#5335 -server=/.koornk.com/127.0.0.1#5335 -server=/.kt.kcome.org/127.0.0.1#5335 -server=/.kui.name/127.0.0.1#5335 -server=/.kun.im/127.0.0.1#5335 -server=/.kurtmunger.com/127.0.0.1#5335 -server=/.kusocity.com/127.0.0.1#5335 -server=/.kwongwah.com.my/127.0.0.1#5335 -server=/.kyohk.net/127.0.0.1#5335 -server=/.kzeng.info/127.0.0.1#5335 -server=/.labiennale.org/127.0.0.1#5335 -server=/.ladbrokes.com/127.0.0.1#5335 -server=/.la-forum.org/127.0.0.1#5335 -server=/.lagranepoca.com/127.0.0.1#5335 -server=/.lalulalu.com/127.0.0.1#5335 -server=/.laogai.org/127.0.0.1#5335 -server=/.laomiu.com/127.0.0.1#5335 -server=/.laoyang.info/127.0.0.1#5335 -server=/.laptoplockdown.com/127.0.0.1#5335 -server=/.laqingdan.net/127.0.0.1#5335 -server=/.larsgeorge.com/127.0.0.1#5335 -server=/.lastfm.es/127.0.0.1#5335 -server=/.latelinenews.com/127.0.0.1#5335 -server=/.latimesblogs.latimes.com/127.0.0.1#5335 -server=/.lazarsearlymusic.com/127.0.0.1#5335 -server=/.leecheukyan.org/127.0.0.1#5335 -server=/.legaltech.law.com/127.0.0.1#5335 -server=/.lematin.ch/127.0.0.1#5335 -server=/.lemonde.fr/127.0.0.1#5335 -server=/.lenwhite.com/127.0.0.1#5335 -server=/.lerosua.org/127.0.0.1#5335 -server=/.lesoir.be/127.0.0.1#5335 -server=/.lesscss.org/127.0.0.1#5335 -server=/.letscorp.net/127.0.0.1#5335 -server=/.liansi.org/127.0.0.1#5335 -server=/.lianyue.net/127.0.0.1#5335 -server=/.liaowangxizang.net/127.0.0.1#5335 -server=/.liberal.org.hk/127.0.0.1#5335 -server=/.libertytimes.com.tw/127.0.0.1#5335 -server=/.lich355.megabyet.net/127.0.0.1#5335 -server=/.lidecheng.com/127.0.0.1#5335 -server=/.life.fly4ever.me/127.0.0.1#5335 -server=/.limiao.net/127.0.0.1#5335 -server=/.line.me/127.0.0.1#5335 -server=/.linglingfa.com/127.0.0.1#5335 -server=/.lingvodics.com/127.0.0.1#5335 -server=/.linkideo.com/127.0.0.1#5335 -server=/.linuxconfig.org/127.0.0.1#5335 -server=/.linux-engineer.net/127.0.0.1#5335 -server=/.linuxreviews.org/127.0.0.1#5335 -server=/.linuxtoy.org/127.0.0.1#5335 -server=/.lipuman.com/127.0.0.1#5335 -server=/.listentoyoutube.com/127.0.0.1#5335 -server=/.list.ly/127.0.0.1#5335 -server=/.listorious.com/127.0.0.1#5335 -server=/.lists.debian.org/127.0.0.1#5335 -server=/.lists.w3.org/127.0.0.1#5335 -server=/.littlebigdetails.com/127.0.0.1#5335 -server=/.liudejun.com/127.0.0.1#5335 -server=/.liuhanyu.com/127.0.0.1#5335 -server=/.liujianshu.com/127.0.0.1#5335 -server=/.liu.lu/127.0.0.1#5335 -server=/.liuxiaotong.com/127.0.0.1#5335 -server=/.liveleak.com/127.0.0.1#5335 -server=/.livestation.com/127.0.0.1#5335 -server=/.livestream.com/127.0.0.1#5335 -server=/.livevideo.com/127.0.0.1#5335 -server=/.livingonline.us/127.0.0.1#5335 -server=/.livingstream.com/127.0.0.1#5335 -server=/.lizhizhuangbi.com/127.0.0.1#5335 -server=/.lkcn.net/127.0.0.1#5335 -server=/.localpresshk.com/127.0.0.1#5335 -server=/.lockdown.com/127.0.0.1#5335 -server=/.lockestek.com/127.0.0.1#5335 -server=/.logbot.net/127.0.0.1#5335 -server=/.logiqx.com/127.0.0.1#5335 -server=/.logmike.com/127.0.0.1#5335 -server=/.log.riku.me/127.0.0.1#5335 -server=/.london.neighborhoodr.com/127.0.0.1#5335 -server=/.longhair.hk/127.0.0.1#5335 -server=/.longtermly.net/127.0.0.1#5335 -server=/.lookatgame.com/127.0.0.1#5335 -server=/.lookingglasstheatre.org/127.0.0.1#5335 -server=/.lookpic.com/127.0.0.1#5335 -server=/.lotuslight.org.tw/127.0.0.1#5335 -server=/.lovequicksilver.com/127.0.0.1#5335 -server=/.lovesphinx.tk/127.0.0.1#5335 -server=/.lrfz.com/127.0.0.1#5335 -server=/.lsd.org.hk/127.0.0.1#5335 -server=/.lsforum.net/127.0.0.1#5335 -server=/.lsmchinese.org/127.0.0.1#5335 -server=/.lsmkorean.org/127.0.0.1#5335 -server=/.lsm.org/127.0.0.1#5335 -server=/.lsxszzg.com/127.0.0.1#5335 -server=/.lua.org/127.0.0.1#5335 -server=/.lua-users.org/127.0.0.1#5335 -server=/.lungtanhr.gov.tw/127.0.0.1#5335 -server=/.luntan.zaobao.com/127.0.0.1#5335 -server=/.lupm.org/127.0.0.1#5335 -server=/.lushstories.com/127.0.0.1#5335 -server=/.lvhai.org/127.0.0.1#5335 -server=/.lyricsquote.com/127.0.0.1#5335 -server=/.mad-ar.ch/127.0.0.1#5335 -server=/.madmenunbuttoned.com/127.0.0.1#5335 -server=/.magazines.sina.com.tw/127.0.0.1#5335 -server=/.maiio.net/127.0.0.1#5335 -server=/.mail-archive.com/127.0.0.1#5335 -server=/.maiplus.com/127.0.0.1#5335 -server=/.makemymood.com/127.0.0.1#5335 -server=/.makzhou.warehouse333.com/127.0.0.1#5335 -server=/.malaysiakini.com/127.0.0.1#5335 -server=/.marc.info/127.0.0.1#5335 -server=/.marco.org/127.0.0.1#5335 -server=/.marguerite.su/127.0.0.1#5335 -server=/.marines.mil/127.0.0.1#5335 -server=/.markmilian.com/127.0.0.1#5335 -server=/.martau.com/127.0.0.1#5335 -server=/.martincartoons.com/127.0.0.1#5335 -server=/.maruta.be/127.0.0.1#5335 -server=/.marxist.com/127.0.0.1#5335 -server=/.marxist.net/127.0.0.1#5335 -server=/.marxists.org/127.0.0.1#5335 -server=/.mashable.com/127.0.0.1#5335 -server=/.mash.to/127.0.0.1#5335 -server=/.matainja.com/127.0.0.1#5335 -server=/.mathiew-badimon.com/127.0.0.1#5335 -server=/.matsu-news.gov.tw/127.0.0.1#5335 -server=/.matsushimakaede.com/127.0.0.1#5335 -server=/.maxgif.com/127.0.0.1#5335 -server=/.mayimayi.com/127.0.0.1#5335 -server=/.mcadforums.com/127.0.0.1#5335 -server=/.mcfog.com/127.0.0.1#5335 -server=/.md-t.org/127.0.0.1#5335 -server=/.mediafire.com/127.0.0.1#5335 -server=/.meetup.com/127.0.0.1#5335 -server=/.mefeedia.com/127.0.0.1#5335 -server=/.megaporn.com/127.0.0.1#5335 -server=/.megarotic.com/127.0.0.1#5335 -server=/.megavideo.com/127.0.0.1#5335 -server=/.megurineluka.com/127.0.0.1#5335 -server=/.meirixiaochao.com/127.0.0.1#5335 -server=/.melon-peach.com/127.0.0.1#5335 -server=/.memedia.cn/127.0.0.1#5335 -server=/.meme.yahoo.com/127.0.0.1#5335 -server=/.memrijttm.org/127.0.0.1#5335 -server=/.merit-times.com.tw/127.0.0.1#5335 -server=/.mesotw.com/127.0.0.1#5335 -server=/.metacafe.com/127.0.0.1#5335 -server=/.meteorshowersonline.com/127.0.0.1#5335 -server=/.metrolife.ca/127.0.0.1#5335 -server=/.mgoon.com/127.0.0.1#5335 -server=/.mgstage.com/127.0.0.1#5335 -server=/.mh4u.org/127.0.0.1#5335 -server=/.mhradio.org/127.0.0.1#5335 -server=/.michaelanti.com/127.0.0.1#5335 -server=/.michaelmarketl.com/127.0.0.1#5335 -server=/.middle-way.net/127.0.0.1#5335 -server=/.mihk.hk/127.0.0.1#5335 -server=/.mihua.org/127.0.0.1#5335 -server=/.mike.cz.cc/127.0.0.1#5335 -server=/.mimivip.com/127.0.0.1#5335 -server=/.minghui.org/127.0.0.1#5335 -server=/.minghui-school.org/127.0.0.1#5335 -server=/.mingjinglishi.com/127.0.0.1#5335 -server=/.mingjingnews.com/127.0.0.1#5335 -server=/.mingpaocanada.com/127.0.0.1#5335 -server=/.mingpao.com/127.0.0.1#5335 -server=/.mingpaomonthly.com/127.0.0.1#5335 -server=/.mingpaonews.com/127.0.0.1#5335 -server=/.mingpaony.com/127.0.0.1#5335 -server=/.mingpaosf.com/127.0.0.1#5335 -server=/.mingpaotor.com/127.0.0.1#5335 -server=/.mingpaovan.com/127.0.0.1#5335 -server=/.minimalmac.com/127.0.0.1#5335 -server=/.mininova.org/127.0.0.1#5335 -server=/.minzhuhua.net/127.0.0.1#5335 -server=/.minzhuzhongguo.org/127.0.0.1#5335 -server=/.miroguide.com/127.0.0.1#5335 -server=/.mirrorbooks.com/127.0.0.1#5335 -server=/.mitbbs.com/127.0.0.1#5335 -server=/.mixedmedialabs.com/127.0.0.1#5335 -server=/.mixero.com/127.0.0.1#5335 -server=/.mixpod.com/127.0.0.1#5335 -server=/.mixx.com/127.0.0.1#5335 -server=/.mizzmona.com/127.0.0.1#5335 -server=/.mk5000.com/127.0.0.1#5335 -server=/.mlcool.com/127.0.0.1#5335 -server=/.mmaaxx.com/127.0.0.1#5335 -server=/.mmmca.com/127.0.0.1#5335 -server=/.mobatek.net/127.0.0.1#5335 -server=/.mobile01.com/127.0.0.1#5335 -server=/.mobileways.de/127.0.0.1#5335 -server=/.mobypicture.com/127.0.0.1#5335 -server=/.moby.to/127.0.0.1#5335 -server=/.modfetish.com/127.0.0.1#5335 -server=/.moe.gov.tw/127.0.0.1#5335 -server=/.mog.com/127.0.0.1#5335 -server=/.molihua.org/127.0.0.1#5335 -server=/.mondex.org/127.0.0.1#5335 -server=/.monitorchina.org/127.0.0.1#5335 -server=/.moonriver7.files.wordpress.com/127.0.0.1#5335 -server=/.morningsun.org/127.0.0.1#5335 -server=/.m.oulove.org/127.0.0.1#5335 -server=/.movabletype.com/127.0.0.1#5335 -server=/.moviefap.com/127.0.0.1#5335 -server=/.mp3ye.eu/127.0.0.1#5335 -server=/.mpettis.com/127.0.0.1#5335 -server=/.mpfinance.com/127.0.0.1#5335 -server=/.mpinews.com/127.0.0.1#5335 -server=/.m.plixi.com/127.0.0.1#5335 -server=/.mrdoob.com/127.0.0.1#5335 -server=/.mrtweet.com/127.0.0.1#5335 -server=/.msguancha.com/127.0.0.1#5335 -server=/.m.slandr.net/127.0.0.1#5335 -server=/.mthruf.com/127.0.0.1#5335 -server=/.m.tweete.net/127.0.0.1#5335 -server=/.mtw.tl/127.0.0.1#5335 -server=/.multiply.com/127.0.0.1#5335 -server=/.multiproxy.org/127.0.0.1#5335 -server=/.multiupload.com/127.0.0.1#5335 -server=/.muouju.com/127.0.0.1#5335 -server=/.muselinks.co.jp/127.0.0.1#5335 -server=/.music.jwmusic.org/127.0.0.1#5335 -server=/.muzi.com/127.0.0.1#5335 -server=/.muzi.net/127.0.0.1#5335 -server=/.muzu.tv/127.0.0.1#5335 -server=/.mvdis.gov.tw/127.0.0.1#5335 -server=/.mx981.com/127.0.0.1#5335 -server=/.myactimes.com/127.0.0.1#5335 -server=/.my-addr.com/127.0.0.1#5335 -server=/.myaudiocast.com/127.0.0.1#5335 -server=/.myav.com.tw/127.0.0.1#5335 -server=/.my.backchina.com/127.0.0.1#5335 -server=/.myboooks.googlepages.com/127.0.0.1#5335 -server=/.mychinamyhome.com/127.0.0.1#5335 -server=/.myeclipseide.com/127.0.0.1#5335 -server=/.myforum.com.hk/127.0.0.1#5335 -server=/.myforum.com.uk/127.0.0.1#5335 -server=/.myfreshnet.com/127.0.0.1#5335 -server=/.my.keso.cn/127.0.0.1#5335 -server=/.myopenid.com/127.0.0.1#5335 -server=/.my.opera.com/127.0.0.1#5335 -server=/.mypaper.pchome.com.tw/127.0.0.1#5335 -server=/.myparagliding.com/127.0.0.1#5335 -server=/.mypopescu.com/127.0.0.1#5335 -server=/.my-proxy.com/127.0.0.1#5335 -server=/.myshare.url.com.tw/127.0.0.1#5335 -server=/.mysinablog.com/127.0.0.1#5335 -server=/.myspace.com/127.0.0.1#5335 -server=/.myvlog.im.tv/127.0.0.1#5335 -server=/.naacoalition.org/127.0.0.1#5335 -server=/.naitik.net/127.0.0.1#5335 -server=/.nakido.com/127.0.0.1#5335 -server=/.namsisi.com/127.0.0.1#5335 -server=/.nanyang.com/127.0.0.1#5335 -server=/.nanyangpost.com/127.0.0.1#5335 -server=/.nanzao.com/127.0.0.1#5335 -server=/.naol.ca/127.0.0.1#5335 -server=/.national-lottery.co.uk/127.0.0.1#5335 -server=/.navicat.com/127.0.0.1#5335 -server=/.navigeaters.com/127.0.0.1#5335 -server=/.navy.mil/127.0.0.1#5335 -server=/.nccwatch.org.tw/127.0.0.1#5335 -server=/.ncdr.nat.gov.tw/127.0.0.1#5335 -server=/.nch.com.tw/127.0.0.1#5335 -server=/.ncn.org/127.0.0.1#5335 -server=/.ncree.gov.tw/127.0.0.1#5335 -server=/.nde.de/127.0.0.1#5335 -server=/.ndr.de/127.0.0.1#5335 -server=/.nekoslovakia.net/127.0.0.1#5335 -server=/.nerch.gov.tw/127.0.0.1#5335 -server=/.ner.gov.tw/127.0.0.1#5335 -server=/.nerhl.gov.tw/127.0.0.1#5335 -server=/.nertt.gov.tw/127.0.0.1#5335 -server=/.netcolony.com/127.0.0.1#5335 -server=/.netflix.com/127.0.0.1#5335 -server=/.netme.cc/127.0.0.1#5335 -server=/.networkedblogs.com/127.0.0.1#5335 -server=/.neverforget8964.org/127.0.0.1#5335 -server=/.new-3lunch.net/127.0.0.1#5335 -server=/.new-akiba.com/127.0.0.1#5335 -server=/.newcenturymc.com/127.0.0.1#5335 -server=/.newcenturynews.com/127.0.0.1#5335 -server=/.newchen.com/127.0.0.1#5335 -server=/.newgrounds.com/127.0.0.1#5335 -server=/.newlandmagazine.com.au/127.0.0.1#5335 -server=/.news100.com.tw/127.0.0.1#5335 -server=/.newsancai.com/127.0.0.1#5335 -server=/.news.atebits.com/127.0.0.1#5335 -server=/.news.backchina.com/127.0.0.1#5335 -server=/.news.bbc.co.uk/127.0.0.1#5335 -server=/.newscn.org/127.0.0.1#5335 -server=/.news.cnyes.com/127.0.0.1#5335 -server=/.newsforums.bbc.co.uk/127.0.0.1#5335 -server=/.news.ghostery.com/127.0.0.1#5335 -server=/.news.google.com.hk/127.0.0.1#5335 -server=/.newsminer.com/127.0.0.1#5335 -server=/.news.msn.com.tw/127.0.0.1#5335 -server=/.news.omy.sg/127.0.0.1#5335 -server=/.news.pchome.com.tw/127.0.0.1#5335 -server=/.newspeak.cc/127.0.0.1#5335 -server=/.newspp.org/127.0.0.1#5335 -server=/.news.sina.com.hk/127.0.0.1#5335 -server=/.news.sina.com.tw/127.0.0.1#5335 -server=/.news.singtao.ca/127.0.0.1#5335 -server=/.newstapa.org/127.0.0.1#5335 -server=/.newtaiwan.com.tw/127.0.0.1#5335 -server=/.newtalk.tw/127.0.0.1#5335 -server=/.newyorktimes.com/127.0.0.1#5335 -server=/.nexton-net.jp/127.0.0.1#5335 -server=/.nexttv.com.tw/127.0.0.1#5335 -server=/.nf.id.au/127.0.0.1#5335 -server=/.nga.mil/127.0.0.1#5335 -server=/.ngensis.com/127.0.0.1#5335 -server=/.nhri.gov.tw/127.0.0.1#5335 -server=/.nic.cz.cc/127.0.0.1#5335 -server=/.nici.nat.gov.tw/127.0.0.1#5335 -server=/.nicovideo.tw/127.0.0.1#5335 -server=/.nict.gov.tw/127.0.0.1#5335 -server=/.nighost.org/127.0.0.1#5335 -server=/.nintendium.com/127.0.0.1#5335 -server=/.nintendowifi.net/127.0.0.1#5335 -server=/.njactb.org/127.0.0.1#5335 -server=/.njuice.com/127.0.0.1#5335 -server=/.nlfreevpn.com/127.0.0.1#5335 -server=/.nmh.gov.tw/127.0.0.1#5335 -server=/.nmmba.gov.tw/127.0.0.1#5335 -server=/.nmp.gov.tw/127.0.0.1#5335 -server=/.nmtl.gov.tw/127.0.0.1#5335 -server=/.nmvttc.gov.tw/127.0.0.1#5335 -server=/.nobelprize.org/127.0.0.1#5335 -server=/.nobel.se/127.0.0.1#5335 -server=/.nobodycanstop.us/127.0.0.1#5335 -server=/.nokogiri.org/127.0.0.1#5335 -server=/.nokola.com/127.0.0.1#5335 -server=/.noobbox.com/127.0.0.1#5335 -server=/.notes.alexdong.com/127.0.0.1#5335 -server=/.novelasia.com/127.0.0.1#5335 -server=/.nownews.com/127.0.0.1#5335 -server=/.nowtorrents.com/127.0.0.1#5335 -server=/.noypf.com/127.0.0.1#5335 -server=/.npa.go.jp/127.0.0.1#5335 -server=/.npm.gov.tw/127.0.0.1#5335 -server=/.nps.gov/127.0.0.1#5335 -server=/.nrk.no/127.0.0.1#5335 -server=/.nsc.gov.tw/127.0.0.1#5335 -server=/.nspo.gov.tw/127.0.0.1#5335 -server=/.nstm.gov.tw/127.0.0.1#5335 -server=/.ntdmh.gov.tw/127.0.0.1#5335 -server=/.ntdtv.ca/127.0.0.1#5335 -server=/.ntdtv.co/127.0.0.1#5335 -server=/.ntdtv.com/127.0.0.1#5335 -server=/.ntdtv.org/127.0.0.1#5335 -server=/.ntdtv.ru/127.0.0.1#5335 -server=/.ntl.gov.tw/127.0.0.1#5335 -server=/.ntsec.gov.tw/127.0.0.1#5335 -server=/.ntuh.gov.tw/127.0.0.1#5335 -server=/.nuexpo.com/127.0.0.1#5335 -server=/.nurgo-software.com/127.0.0.1#5335 -server=/.nuvid.com/127.0.0.1#5335 -server=/.nuzcom.com/127.0.0.1#5335 -server=/.nvquan.org/127.0.0.1#5335 -server=/.nvri.gov.tw/127.0.0.1#5335 -server=/.nydus.ca/127.0.0.1#5335 -server=/.nysingtao.com/127.0.0.1#5335 -server=/.nytco.com/127.0.0.1#5335 -server=/.nyt.com/127.0.0.1#5335 -server=/.nytimes.com/127.0.0.1#5335 -server=/.nytimg.com/127.0.0.1#5335 -server=/.nzchinese.net.nz/127.0.0.1#5335 -server=/.observechina.net/127.0.0.1#5335 -server=/.oclp.hk/127.0.0.1#5335 -server=/.october-review.org/127.0.0.1#5335 -server=/.offbeatchina.com/127.0.0.1#5335 -server=/.ogaoga.org/127.0.0.1#5335 -server=/.oikos.com.tw/127.0.0.1#5335 -server=/.oiktv.com/127.0.0.1#5335 -server=/.oizoblog.com/127.0.0.1#5335 -server=/.okayfreedom.com/127.0.0.1#5335 -server=/.old-cat.net/127.0.0.1#5335 -server=/.old.nabble.com/127.0.0.1#5335 -server=/.olumpo.com/127.0.0.1#5335 -server=/.olympicwatch.org/127.0.0.1#5335 -server=/.omgili.com/127.0.0.1#5335 -server=/.omnitalk.com/127.0.0.1#5335 -server=/.on.cc/127.0.0.1#5335 -server=/.one.xthost.info/127.0.0.1#5335 -server=/.onlylady.cn/127.0.0.1#5335 -server=/.onmoon.com/127.0.0.1#5335 -server=/.onmoon.net/127.0.0.1#5335 -server=/.oopsforum.com/127.0.0.1#5335 -server=/.ooyala.com/127.0.0.1#5335 -server=/.open.com.hk/127.0.0.1#5335 -server=/.opendemocracy.net/127.0.0.1#5335 -server=/.openid.net/127.0.0.1#5335 -server=/.openleaks.org/127.0.0.1#5335 -server=/.openvpn.net/127.0.0.1#5335 -server=/.openvpn.org/127.0.0.1#5335 -server=/.openwebster.com/127.0.0.1#5335 -server=/.opml.radiotime.com/127.0.0.1#5335 -server=/.opnir.com/127.0.0.1#5335 -server=/.orientaldaily.com.my/127.0.0.1#5335 -server=/.orient-doll.com/127.0.0.1#5335 -server=/.orn.jp/127.0.0.1#5335 -server=/.orzistic.org/127.0.0.1#5335 -server=/.osfoora.com/127.0.0.1#5335 -server=/.ourdearamy.com/127.0.0.1#5335 -server=/.oursogo.com/127.0.0.1#5335 -server=/.oursteps.com.au/127.0.0.1#5335 -server=/.overlapr.com/127.0.0.1#5335 -server=/.owl.li/127.0.0.1#5335 -server=/.ow.ly/127.0.0.1#5335 -server=/.oyax.com/127.0.0.1#5335 -server=/.ozchinese.com/127.0.0.1#5335 -server=/.ozyoyo.com/127.0.0.1#5335 -server=/.pabp.gov.tw/127.0.0.1#5335 -server=/.pacificpoker.com/127.0.0.1#5335 -server=/.packages.debian.org/127.0.0.1#5335 -server=/.packetix.net/127.0.0.1#5335 -server=/.page2rss.com/127.0.0.1#5335 -server=/.page.bid.yahoo.com/127.0.0.1#5335 -server=/.pagodabox.com/127.0.0.1#5335 -server=/.paint.net/127.0.0.1#5335 -server=/.palacemoon.com/127.0.0.1#5335 -server=/.pandora.com/127.0.0.1#5335 -server=/.pandora.tv/127.0.0.1#5335 -server=/.panluan.net/127.0.0.1#5335 -server=/.panoramio.com/127.0.0.1#5335 -server=/.pao-pao.net/127.0.0.1#5335 -server=/.paperb.us/127.0.0.1#5335 -server=/.paper.li/127.0.0.1#5335 -server=/.paper-replika.com/127.0.0.1#5335 -server=/.parade.com/127.0.0.1#5335 -server=/.parislemon.com/127.0.0.1#5335 -server=/.pastebin.com/127.0.0.1#5335 -server=/.pastie.org/127.0.0.1#5335 -server=/.patehr.gov.tw/127.0.0.1#5335 -server=/.pbs.org/127.0.0.1#5335 -server=/.pbwiki.com/127.0.0.1#5335 -server=/.pbworks.com/127.0.0.1#5335 -server=/.pbxes.com/127.0.0.1#5335 -server=/.pbxes.org/127.0.0.1#5335 -server=/.pcdiscuss.com/127.0.0.1#5335 -server=/.pcdvd.com.tw/127.0.0.1#5335 -server=/.pchome.com.tw/127.0.0.1#5335 -server=/.pct.org.tw/127.0.0.1#5335 -server=/.pcworld.com/127.0.0.1#5335 -server=/.pdetails.com/127.0.0.1#5335 -server=/.pdproxy.com/127.0.0.1#5335 -server=/.peacefire.org/127.0.0.1#5335 -server=/.peacehall.com/127.0.0.1#5335 -server=/.peeasian.com/127.0.0.1#5335 -server=/.peerpong.com/127.0.0.1#5335 -server=/.pekingduck.org/127.0.0.1#5335 -server=/.penchinese.com/127.0.0.1#5335 -server=/.penchinese.net/127.0.0.1#5335 -server=/.pengyulong.com/127.0.0.1#5335 -server=/.penthouse.com/127.0.0.1#5335 -server=/.peopo.org/127.0.0.1#5335 -server=/.percy.in/127.0.0.1#5335 -server=/.perfectgirls.net/127.0.0.1#5335 -server=/.perfectvpn.net/127.0.0.1#5335 -server=/.perfspot.com/127.0.0.1#5335 -server=/.perlhowto.com/127.0.0.1#5335 -server=/.pet.gov.tw/127.0.0.1#5335 -server=/.philly.com/127.0.0.1#5335 -server=/.photofocus.com/127.0.0.1#5335 -server=/.photos.dailyme.com/127.0.0.1#5335 -server=/.photo.utom.us/127.0.0.1#5335 -server=/.phuquocservices.com/127.0.0.1#5335 -server=/.picasaweb.google.com/127.0.0.1#5335 -server=/.picidae.net/127.0.0.1#5335 -server=/.picturesocial.com/127.0.0.1#5335 -server=/.pictures.playboy.com/127.0.0.1#5335 -server=/.pidown.com/127.0.0.1#5335 -server=/.pign.net/127.0.0.1#5335 -server=/.pimg.tw/127.0.0.1#5335 -server=/.pin6.com/127.0.0.1#5335 -server=/.ping.fm/127.0.0.1#5335 -server=/.pinoy-n.com/127.0.0.1#5335 -server=/.pioneer-worker.forums-free.com/127.0.0.1#5335 -server=/.piring.com/127.0.0.1#5335 -server=/.pixanalytics.com/127.0.0.1#5335 -server=/.pixelqi.com/127.0.0.1#5335 -server=/.pixfs.net/127.0.0.1#5335 -server=/.pixnet.cc/127.0.0.1#5335 -server=/.pixnet.net/127.0.0.1#5335 -server=/.pixplug.in/127.0.0.1#5335 -server=/.pk.com/127.0.0.1#5335 -server=/.placemix.com/127.0.0.1#5335 -server=/.planetsuzy.org/127.0.0.1#5335 -server=/.playboy.com/127.0.0.1#5335 -server=/.plays.com.tw/127.0.0.1#5335 -server=/.plm.org.hk/127.0.0.1#5335 -server=/.plunder.com/127.0.0.1#5335 -server=/.plurk.com/127.0.0.1#5335 -server=/.plurktop.mmdays.com/127.0.0.1#5335 -server=/.plus28.com/127.0.0.1#5335 -server=/.plusbb.com/127.0.0.1#5335 -server=/.pmates.com/127.0.0.1#5335 -server=/.po2b.com/127.0.0.1#5335 -server=/.podictionary.com/127.0.0.1#5335 -server=/.pokerstars.com/127.0.0.1#5335 -server=/.politicalchina.org/127.0.0.1#5335 -server=/.popvote.hk/127.0.0.1#5335 -server=/.popyard.com/127.0.0.1#5335 -server=/.popyard.org/127.0.0.1#5335 -server=/.porn2.com/127.0.0.1#5335 -server=/.pornbase.org/127.0.0.1#5335 -server=/.porn.com/127.0.0.1#5335 -server=/.pornhub.com/127.0.0.1#5335 -server=/.pornmm.net/127.0.0.1#5335 -server=/.pornoxo.com/127.0.0.1#5335 -server=/.pornrapidshare.com/127.0.0.1#5335 -server=/.pornstarclub.com/127.0.0.1#5335 -server=/.porntube.com/127.0.0.1#5335 -server=/.pornvisit.com/127.0.0.1#5335 -server=/.portis21.spaces.live.com/127.0.0.1#5335 -server=/.pose.com/127.0.0.1#5335 -server=/.postadult.com/127.0.0.1#5335 -server=/.post.anyu.org/127.0.0.1#5335 -server=/.posterous.com/127.0.0.1#5335 -server=/.post.ly/127.0.0.1#5335 -server=/.powerapple.com/127.0.0.1#5335 -server=/.power.com/127.0.0.1#5335 -server=/.powercx.com/127.0.0.1#5335 -server=/.prayforchina.net/127.0.0.1#5335 -server=/.premeforwindows7.com/127.0.0.1#5335 -server=/.presentationzen.com/127.0.0.1#5335 -server=/.president.gov.tw/127.0.0.1#5335 -server=/.prestige-av.com/127.0.0.1#5335 -server=/.previewshots.com/127.0.0.1#5335 -server=/.privacybox.de/127.0.0.1#5335 -server=/.privateinternetaccess.com/127.0.0.1#5335 -server=/.privatepaste.com/127.0.0.1#5335 -server=/.privatetunnel.com/127.0.0.1#5335 -server=/.procopytips.com/127.0.0.1#5335 -server=/.program-think.spaces.live.com/127.0.0.1#5335 -server=/.prosiben.de/127.0.0.1#5335 -server=/.provideocoalition.com/127.0.0.1#5335 -server=/.proxifier.com/127.0.0.1#5335 -server=/.proxomitron.info/127.0.0.1#5335 -server=/.proxy.org/127.0.0.1#5335 -server=/.proxypy.net/127.0.0.1#5335 -server=/.proxyroad.com/127.0.0.1#5335 -server=/.prozz.net/127.0.0.1#5335 -server=/.psblog.name/127.0.0.1#5335 -server=/.psiphon.ca/127.0.0.1#5335 -server=/.psiphon.civisec.org/127.0.0.1#5335 -server=/.pts.org.tw/127.0.0.1#5335 -server=/.ptt.cc/127.0.0.1#5335 -server=/.pubu.com.tw/127.0.0.1#5335 -server=/.puffinbrowser.com/127.0.0.1#5335 -server=/.puffstore.com/127.0.0.1#5335 -server=/.pullfolio.com/127.0.0.1#5335 -server=/.pulse.yahoo.com/127.0.0.1#5335 -server=/.pure18.com/127.0.0.1#5335 -server=/.pureconcepts.net/127.0.0.1#5335 -server=/.purepdf.com/127.0.0.1#5335 -server=/.purevpn.com/127.0.0.1#5335 -server=/.putlocker.com/127.0.0.1#5335 -server=/.puttycm.free.fr/127.0.0.1#5335 -server=/.pwned.com/127.0.0.1#5335 -server=/.python.com/127.0.0.1#5335 -server=/.python.com.tw/127.0.0.1#5335 -server=/.qanote.com/127.0.0.1#5335 -server=/.qidian.ca/127.0.0.1#5335 -server=/.qienkuen.org/127.0.0.1#5335 -server=/.qi-gong.me/127.0.0.1#5335 -server=/.qiwen.lu/127.0.0.1#5335 -server=/.qixianglu.cn/127.0.0.1#5335 -server=/.qkshare.com/127.0.0.1#5335 -server=/.qoos.com/127.0.0.1#5335 -server=/.qq.co.za/127.0.0.1#5335 -server=/.qstatus.com/127.0.0.1#5335 -server=/.qtrac.eu/127.0.0.1#5335 -server=/.qtweeter.com/127.0.0.1#5335 -server=/.quadedge.com/127.0.0.1#5335 -server=/.qusi8.net/127.0.0.1#5335 -server=/.qvodzy.org/127.0.0.1#5335 -server=/.qxbbs.org/127.0.0.1#5335 -server=/.radicalparty.org/127.0.0.1#5335 -server=/.radioaustralia.net.au/127.0.0.1#5335 -server=/.radiovaticana.org/127.0.0.1#5335 -server=/.radiovncr.com/127.0.0.1#5335 -server=/.raidcall.com.tw/127.0.0.1#5335 -server=/.rangzen.org/127.0.0.1#5335 -server=/.ranyunfei.com/127.0.0.1#5335 -server=/.rapbull.net/127.0.0.1#5335 -server=/.rapidshare8.com/127.0.0.1#5335 -server=/.rapidsharedata.com/127.0.0.1#5335 -server=/.rayfme.com/127.0.0.1#5335 -server=/.rcinet.ca/127.0.0.1#5335 -server=/.rconversation.blogs.com/127.0.0.1#5335 -server=/.rdio.com/127.0.0.1#5335 -server=/.read100.com/127.0.0.1#5335 -server=/.readingtimes.com.tw/127.0.0.1#5335 -server=/.readmoo.com/127.0.0.1#5335 -server=/.realraptalk.com/127.0.0.1#5335 -server=/.recordhistory.org/127.0.0.1#5335 -server=/.redchinacn.org/127.0.0.1#5335 -server=/.redtube.com/127.0.0.1#5335 -server=/.referer.us/127.0.0.1#5335 -server=/.reflectivecode.com/127.0.0.1#5335 -server=/.relaxbbs.com/127.0.0.1#5335 -server=/.renminbao.com/127.0.0.1#5335 -server=/.renyurenquan.org/127.0.0.1#5335 -server=/.retweeteffect.com/127.0.0.1#5335 -server=/.retweetist.com/127.0.0.1#5335 -server=/.retweetrank.com/127.0.0.1#5335 -server=/.revleft.com/127.0.0.1#5335 -server=/.revsci.net/127.0.0.1#5335 -server=/.revver.com/127.0.0.1#5335 -server=/.rfachina.com/127.0.0.1#5335 -server=/.rfamobile.org/127.0.0.1#5335 -server=/.rfa.org/127.0.0.1#5335 -server=/.rferl.org/127.0.0.1#5335 -server=/.rfi.fr/127.0.0.1#5335 -server=/.rhcloud.com/127.0.0.1#5335 -server=/.riku.me/127.0.0.1#5335 -server=/.rileyguide.com/127.0.0.1#5335 -server=/.rlwlw.com/127.0.0.1#5335 -server=/.rmjdw.com/127.0.0.1#5335 -server=/.rnw.nl/127.0.0.1#5335 -server=/.robtex.com/127.0.0.1#5335 -server=/.robustnessiskey.com/127.0.0.1#5335 -server=/.rocmp.org/127.0.0.1#5335 -server=/.rojo.com/127.0.0.1#5335 -server=/.ronjoneswriter.com/127.0.0.1#5335 -server=/.roodo.com/127.0.0.1#5335 -server=/.rotten.com/127.0.0.1#5335 -server=/.rsf-chinese.org/127.0.0.1#5335 -server=/.rsf.org/127.0.0.1#5335 -server=/.rssmeme.com/127.0.0.1#5335 -server=/.rthk.hk/127.0.0.1#5335 -server=/.rthk.org.hk/127.0.0.1#5335 -server=/.rti.org.tw/127.0.0.1#5335 -server=/.ruanyifeng.com/127.0.0.1#5335 -server=/.rushbee.com/127.0.0.1#5335 -server=/.rutube.ru/127.0.0.1#5335 -server=/.ruyiseek.com/127.0.0.1#5335 -server=/.rxhj.net/127.0.0.1#5335 -server=/.s1heng.com/127.0.0.1#5335 -server=/.s8forum.com/127.0.0.1#5335 -server=/.sacom.hk/127.0.0.1#5335 -server=/.sadpanda.us/127.0.0.1#5335 -server=/.saiq.me/127.0.0.1#5335 -server=/.salvation.org.hk/127.0.0.1#5335 -server=/.samair.ru/127.0.0.1#5335 -server=/.sammyjs.org/127.0.0.1#5335 -server=/.samsoff.es/127.0.0.1#5335 -server=/.sandnoble.com/127.0.0.1#5335 -server=/.sankaizok.com/127.0.0.1#5335 -server=/.sanmin.com.tw/127.0.0.1#5335 -server=/.sapikachu.net/127.0.0.1#5335 -server=/.savemedia.com/127.0.0.1#5335 -server=/.savetibet.de/127.0.0.1#5335 -server=/.savetibet.fr/127.0.0.1#5335 -server=/.savetibet.nl/127.0.0.1#5335 -server=/.savetibet.org/127.0.0.1#5335 -server=/.savetibet.ru/127.0.0.1#5335 -server=/.savevid.com/127.0.0.1#5335 -server=/.say2.info/127.0.0.1#5335 -server=/.scanscout.com/127.0.0.1#5335 -server=/.scmpchinese.com/127.0.0.1#5335 -server=/.scmp.com/127.0.0.1#5335 -server=/.scorecardresearch.com/127.0.0.1#5335 -server=/.scribd.com/127.0.0.1#5335 -server=/.scriptspot.com/127.0.0.1#5335 -server=/.seapuff.com/127.0.0.1#5335 -server=/.secretchina.com/127.0.0.1#5335 -server=/.secretgarden.no/127.0.0.1#5335 -server=/.secure.wikimedia.org/127.0.0.1#5335 -server=/.securitykiss.com/127.0.0.1#5335 -server=/.seesmic.com/127.0.0.1#5335 -server=/.seevpn.com/127.0.0.1#5335 -server=/.seezone.net/127.0.0.1#5335 -server=/.sejie.com/127.0.0.1#5335 -server=/.sendoid.com/127.0.0.1#5335 -server=/.sendspace.com/127.0.0.1#5335 -server=/.sesawe.net/127.0.0.1#5335 -server=/.sesawe.org/127.0.0.1#5335 -server=/.sethwklein.net/127.0.0.1#5335 -server=/.sevenload.com/127.0.0.1#5335 -server=/.sex-11.com/127.0.0.1#5335 -server=/.sex3.com/127.0.0.1#5335 -server=/.sex8.cc/127.0.0.1#5335 -server=/.sexandsubmission.com/127.0.0.1#5335 -server=/.sex.com/127.0.0.1#5335 -server=/.sexhuang.com/127.0.0.1#5335 -server=/.sexhu.com/127.0.0.1#5335 -server=/.sexinsex.net/127.0.0.1#5335 -server=/.sfileydy.com/127.0.0.1#5335 -server=/.shadow.ma/127.0.0.1#5335 -server=/.shadowsocks.org/127.0.0.1#5335 -server=/.shahamat-english.com/127.0.0.1#5335 -server=/.shangfang.org/127.0.0.1#5335 -server=/.shapeservices.com/127.0.0.1#5335 -server=/.sharebee.com/127.0.0.1#5335 -server=/.sharecool.org/127.0.0.1#5335 -server=/.share.ovi.com/127.0.0.1#5335 -server=/.share.skype.com/127.0.0.1#5335 -server=/.share.youthwant.com.tw/127.0.0.1#5335 -server=/.sharkdolphin.com/127.0.0.1#5335 -server=/.sharpdaily.com.hk/127.0.0.1#5335 -server=/.sharpdaily.hk/127.0.0.1#5335 -server=/.shaunthesheep.com/127.0.0.1#5335 -server=/.sheikyermami.com/127.0.0.1#5335 -server=/.shellmix.com/127.0.0.1#5335 -server=/.shenshou.org/127.0.0.1#5335 -server=/.shenyunperformingarts.org/127.0.0.1#5335 -server=/.shenzhoufilm.com/127.0.0.1#5335 -server=/.shifeike.blog125.fc2blog.net/127.0.0.1#5335 -server=/.shinychan.com/127.0.0.1#5335 -server=/.shitaotv.org/127.0.0.1#5335 -server=/.shixiao.org/127.0.0.1#5335 -server=/.shizhao.org/127.0.0.1#5335 -server=/.shkspr.mobi/127.0.0.1#5335 -server=/.shodanhq.com/127.0.0.1#5335 -server=/.shopping.com/127.0.0.1#5335 -server=/.showbiz.omy.sg/127.0.0.1#5335 -server=/.showtime.jp/127.0.0.1#5335 -server=/.shwchurch3.com/127.0.0.1#5335 -server=/.sidelinesnews.com/127.0.0.1#5335 -server=/.sidelinessportseatery.com/127.0.0.1#5335 -server=/.simplecd.me/127.0.0.1#5335 -server=/.simplecd.org/127.0.0.1#5335 -server=/.simpleproductivityblog.com/127.0.0.1#5335 -server=/.sina.com.tw/127.0.0.1#5335 -server=/.singtao.com/127.0.0.1#5335 -server=/.singularitys.spaces.live.com/127.0.0.1#5335 -server=/.sinoants.com/127.0.0.1#5335 -server=/.sinocast.com/127.0.0.1#5335 -server=/.sinocism.com/127.0.0.1#5335 -server=/.sino-monthly.com/127.0.0.1#5335 -server=/.sinomontreal.ca/127.0.0.1#5335 -server=/.sinonet.ca/127.0.0.1#5335 -server=/.sinopitt.info/127.0.0.1#5335 -server=/.sinoquebec.com/127.0.0.1#5335 -server=/.sis001.com/127.0.0.1#5335 -server=/.sis001.us/127.0.0.1#5335 -server=/.sis.xxx/127.0.0.1#5335 -server=/.site90.net/127.0.0.1#5335 -server=/.sitebro.tw/127.0.0.1#5335 -server=/.siteks.uk.to/127.0.0.1#5335 -server=/.site.locql.com/127.0.0.1#5335 -server=/.sitemaps.org/127.0.0.1#5335 -server=/.sites.google.com/127.0.0.1#5335 -server=/.sitetag.us/127.0.0.1#5335 -server=/.siyi123123123.spaces.live.com/127.0.0.1#5335 -server=/.skimtube.com/127.0.0.1#5335 -server=/.skybet.com/127.0.0.1#5335 -server=/.skyvegas.com/127.0.0.1#5335 -server=/.slacker.com/127.0.0.1#5335 -server=/.slavasoft.com/127.0.0.1#5335 -server=/.slheng.com/127.0.0.1#5335 -server=/.slickvpn.com/127.0.0.1#5335 -server=/.slideshare.net/127.0.0.1#5335 -server=/.slinkset.com/127.0.0.1#5335 -server=/.slutload.com/127.0.0.1#5335 -server=/.smhric.org/127.0.0.1#5335 -server=/.snapchat.com/127.0.0.1#5335 -server=/.snaptu.com/127.0.0.1#5335 -server=/.sndcdn.com/127.0.0.1#5335 -server=/.sneakme.net/127.0.0.1#5335 -server=/.snooper.co.uk/127.0.0.1#5335 -server=/.sobees.com/127.0.0.1#5335 -server=/.socialwhale.com/127.0.0.1#5335 -server=/.sockslist.net/127.0.0.1#5335 -server=/.sod.co.jp/127.0.0.1#5335 -server=/.softether.co.jp/127.0.0.1#5335 -server=/.softether-download.com/127.0.0.1#5335 -server=/.softether.org/127.0.0.1#5335 -server=/.softwarebychuck.com/127.0.0.1#5335 -server=/.so-ga.net/127.0.0.1#5335 -server=/.sogclub.com/127.0.0.1#5335 -server=/.sogou.com/127.0.0.1#5335 -server=/.sogrady.me/127.0.0.1#5335 -server=/.sohcradio.com/127.0.0.1#5335 -server=/.sohfrance.org/127.0.0.1#5335 -server=/.soh.tw/127.0.0.1#5335 -server=/.sokamonline.com/127.0.0.1#5335 -server=/.solozorro.tk/127.0.0.1#5335 -server=/.somee.com/127.0.0.1#5335 -server=/.so-news.com/127.0.0.1#5335 -server=/.songjianjun.com/127.0.0.1#5335 -server=/.sonidodelaesperanza.org/127.0.0.1#5335 -server=/.sopcast.com/127.0.0.1#5335 -server=/.sopcast.org/127.0.0.1#5335 -server=/.sorting-algorithms.com/127.0.0.1#5335 -server=/.soumo.info/127.0.0.1#5335 -server=/.soundcloud.com/127.0.0.1#5335 -server=/.soundofhope.kr/127.0.0.1#5335 -server=/.soundofhope.org/127.0.0.1#5335 -server=/.soupofmedia.com/127.0.0.1#5335 -server=/.sourceforge.net/127.0.0.1#5335 -server=/.southnews.com.tw/127.0.0.1#5335 -server=/.sowers.org.hk/127.0.0.1#5335 -server=/.space-scape.com/127.0.0.1#5335 -server=/.spankwire.com/127.0.0.1#5335 -server=/.spb.com/127.0.0.1#5335 -server=/.speckleapp.com/127.0.0.1#5335 -server=/.speedpluss.org/127.0.0.1#5335 -server=/.spencertipping.com/127.0.0.1#5335 -server=/.spinejs.com/127.0.0.1#5335 -server=/.sports.williamhill.com/127.0.0.1#5335 -server=/.spotify.com/127.0.0.1#5335 -server=/.sproutcore.com/127.0.0.1#5335 -server=/.squarespace.com/127.0.0.1#5335 -server=/.srcf.ucam.org/127.0.0.1#5335 -server=/.ssh91.com/127.0.0.1#5335 -server=/.sshtunnel.googlecode.com/127.0.0.1#5335 -server=/.sstatic.net/127.0.0.1#5335 -server=/.stag.gov.tw/127.0.0.1#5335 -server=/.standupfortibet.org/127.0.0.1#5335 -server=/.starp2p.com/127.0.0.1#5335 -server=/.startpage.com/127.0.0.1#5335 -server=/.statcounter.com/127.0.0.1#5335 -server=/.state168.com/127.0.0.1#5335 -server=/.static.apple.nextmedia.com/127.0.0.1#5335 -server=/.static.digg.com/127.0.0.1#5335 -server=/.staticflickr.com/127.0.0.1#5335 -server=/.static.nownews.com/127.0.0.1#5335 -server=/.static.soup.io/127.0.0.1#5335 -server=/.static.typepad.com/127.0.0.1#5335 -server=/.status.twhirl.org/127.0.0.1#5335 -server=/.stdtime.gov.tw/127.0.0.1#5335 -server=/.steel-storm.com/127.0.0.1#5335 -server=/.sthoo.com/127.0.0.1#5335 -server=/.stickam.com/127.0.0.1#5335 -server=/.stickeraction.com/127.0.0.1#5335 -server=/.stonegames.net/127.0.0.1#5335 -server=/.stoneip.info/127.0.0.1#5335 -server=/.stoptibetcrisis.net/127.0.0.1#5335 -server=/.storagenewsletter.com/127.0.0.1#5335 -server=/.stoweboyd.com/127.0.0.1#5335 -server=/.streamingthe.net/127.0.0.1#5335 -server=/.strongvpn.com/127.0.0.1#5335 -server=/.student.tw/127.0.0.1#5335 -server=/.stuffimreading.com/127.0.0.1#5335 -server=/.stuffimreading.net/127.0.0.1#5335 -server=/.stupidvideos.com/127.0.0.1#5335 -server=/.subacme.rerouted.org/127.0.0.1#5335 -server=/.sublexical.spaces.live.com/127.0.0.1#5335 -server=/.sufeng.org/127.0.0.1#5335 -server=/.sugarsync.com/127.0.0.1#5335 -server=/.summify.com/127.0.0.1#5335 -server=/.sun1911.com/127.0.0.1#5335 -server=/.suoluo.org/127.0.0.1#5335 -server=/.surfeasy.com.au/127.0.0.1#5335 -server=/.svwind.com/127.0.0.1#5335 -server=/.sweux.com/127.0.0.1#5335 -server=/.swift-tools.net/127.0.0.1#5335 -server=/.s.xiaod.in/127.0.0.1#5335 -server=/.sydneytoday.com/127.0.0.1#5335 -server=/.sylfoundation.org/127.0.0.1#5335 -server=/.syncback.com/127.0.0.1#5335 -server=/.sysadmin1138.net/127.0.0.1#5335 -server=/.sysresccd.org/127.0.0.1#5335 -server=/.sytes.net/127.0.0.1#5335 -server=/.szbbs.net/127.0.0.1#5335 -server=/.szetowah.org.hk/127.0.0.1#5335 -server=/.t35.com/127.0.0.1#5335 -server=/.t66y.com/127.0.0.1#5335 -server=/.taa-usa.org/127.0.0.1#5335 -server=/.tabtter.jp/127.0.0.1#5335 -server=/.tacem.org/127.0.0.1#5335 -server=/.tafaward.com/127.0.0.1#5335 -server=/.tagwalk.com/127.0.0.1#5335 -server=/.taipei.gov.tw/127.0.0.1#5335 -server=/.taipeisociety.org/127.0.0.1#5335 -server=/.taitung-house.gov.tw/127.0.0.1#5335 -server=/.taiwandaily.net/127.0.0.1#5335 -server=/.taiwankiss.com/127.0.0.1#5335 -server=/.taiwannation.50webs.com/127.0.0.1#5335 -server=/.taiwannation.com/127.0.0.1#5335 -server=/.taiwannation.com.tw/127.0.0.1#5335 -server=/.taiwannews.com.tw/127.0.0.1#5335 -server=/.taiwan-sex.com/127.0.0.1#5335 -server=/.taiwantt.org.tw/127.0.0.1#5335 -server=/.taiwanus.net/127.0.0.1#5335 -server=/.taiwanyes.com/127.0.0.1#5335 -server=/.taiwanyes.ning.com/127.0.0.1#5335 -server=/.tamiaode.tk/127.0.0.1#5335 -server=/.tanc.org/127.0.0.1#5335 -server=/.tangben.com/127.0.0.1#5335 -server=/.taolun.info/127.0.0.1#5335 -server=/.taoyuan.gov.tw/127.0.0.1#5335 -server=/.tap11.com/127.0.0.1#5335 -server=/.target.com/127.0.0.1#5335 -server=/.taweet.com/127.0.0.1#5335 -server=/.tax.nat.gov.tw/127.0.0.1#5335 -server=/.tbpic.info/127.0.0.1#5335 -server=/.tbsec.org/127.0.0.1#5335 -server=/.tbsn.org/127.0.0.1#5335 -server=/.tbsseattle.org/127.0.0.1#5335 -server=/.tchb.gov.tw/127.0.0.1#5335 -server=/.tchrd.org/127.0.0.1#5335 -server=/.t.co/127.0.0.1#5335 -server=/.tcsac.gov.tw/127.0.0.1#5335 -server=/.teamseesmic.com/127.0.0.1#5335 -server=/.teashark.com/127.0.0.1#5335 -server=/.techlifeweb.com/127.0.0.1#5335 -server=/.techparaiso.com/127.0.0.1#5335 -server=/.telecomspace.com/127.0.0.1#5335 -server=/.telegraph.co.uk/127.0.0.1#5335 -server=/.tenacy.com/127.0.0.1#5335 -server=/.thbstc.gov.tw/127.0.0.1#5335 -server=/.theampfactory.com/127.0.0.1#5335 -server=/.theappleblog.com/127.0.0.1#5335 -server=/.theatrum-belli.com/127.0.0.1#5335 -server=/.thebcomplex.com/127.0.0.1#5335 -server=/.theblemish.com/127.0.0.1#5335 -server=/.thebodyshop-usa.com/127.0.0.1#5335 -server=/.thechinabeat.org/127.0.0.1#5335 -server=/.thedailywh.at/127.0.0.1#5335 -server=/.thedieline.com/127.0.0.1#5335 -server=/.thedw.us/127.0.0.1#5335 -server=/.thegatesnotes.com/127.0.0.1#5335 -server=/.thehots.info/127.0.0.1#5335 -server=/.thehousenews.com/127.0.0.1#5335 -server=/.thehungrydudes.com/127.0.0.1#5335 -server=/.thehun.net/127.0.0.1#5335 -server=/.theinternetwishlist.com/127.0.0.1#5335 -server=/.thelifeyoucansave.com/127.0.0.1#5335 -server=/.thelius.org/127.0.0.1#5335 -server=/.thepiratebay.org/127.0.0.1#5335 -server=/.thepiratebay.se/127.0.0.1#5335 -server=/.theqii.info/127.0.0.1#5335 -server=/.thereallove.kr/127.0.0.1#5335 -server=/.thesartorialist.com/127.0.0.1#5335 -server=/.thespeeder.com/127.0.0.1#5335 -server=/.the-sun.on.cc/127.0.0.1#5335 -server=/.thetibetpost.com/127.0.0.1#5335 -server=/.thetrotskymovie.com/127.0.0.1#5335 -server=/.thevivekspot.com/127.0.0.1#5335 -server=/.thewgo.org/127.0.0.1#5335 -server=/.thisav.com/127.0.0.1#5335 -server=/.thisiswhyyouarefat.com/127.0.0.1#5335 -server=/.thkphoto.com/127.0.0.1#5335 -server=/.thomasbernhard.org/127.0.0.1#5335 -server=/.threatchaos.com/127.0.0.1#5335 -server=/.throughnightsfire.com/127.0.0.1#5335 -server=/.t.huhaitai.com/127.0.0.1#5335 -server=/.thumbzilla.com/127.0.0.1#5335 -server=/.thywords.com/127.0.0.1#5335 -server=/.tiananmenmother.org/127.0.0.1#5335 -server=/.tiananmenuniv.com/127.0.0.1#5335 -server=/.tiananmenuniv.net/127.0.0.1#5335 -server=/.tiandixing.org/127.0.0.1#5335 -server=/.tianhuayuan.com/127.0.0.1#5335 -server=/.tiantibooks.org/127.0.0.1#5335 -server=/.tianzhu.org/127.0.0.1#5335 -server=/.tibetalk.com/127.0.0.1#5335 -server=/.tibetanyouthcongress.org/127.0.0.1#5335 -server=/.tibet.at/127.0.0.1#5335 -server=/.tibet.com/127.0.0.1#5335 -server=/.tibetcorps.org/127.0.0.1#5335 -server=/.tibetfund.org/127.0.0.1#5335 -server=/.tibetjustice.org/127.0.0.1#5335 -server=/.tibet.net/127.0.0.1#5335 -server=/.tibetoffice.org/127.0.0.1#5335 -server=/.tibetonline.com/127.0.0.1#5335 -server=/.tibetonline.tv/127.0.0.1#5335 -server=/.tibet.org.tw/127.0.0.1#5335 -server=/.tibetsun.com/127.0.0.1#5335 -server=/.tibetwrites.org/127.0.0.1#5335 -server=/.tidyread.com/127.0.0.1#5335 -server=/.time.com/127.0.0.1#5335 -server=/.times.hinet.net/127.0.0.1#5335 -server=/.tinychat.com/127.0.0.1#5335 -server=/.tinypaste.com/127.0.0.1#5335 -server=/.tinypng.com/127.0.0.1#5335 -server=/.tistory.com/127.0.0.1#5335 -server=/.tjholowaychuk.com/127.0.0.1#5335 -server=/.tkcs-collins.com/127.0.0.1#5335 -server=/.tkforum.tk/127.0.0.1#5335 -server=/.t.kun.im/127.0.0.1#5335 -server=/.tmagazine.com/127.0.0.1#5335 -server=/.tmi.me/127.0.0.1#5335 -server=/.tnaflix.com/127.0.0.1#5335 -server=/.tncsec.gov.tw/127.0.0.1#5335 -server=/.t.neolee.cn/127.0.0.1#5335 -server=/.togetter.com/127.0.0.1#5335 -server=/.tokyo-247.com/127.0.0.1#5335 -server=/.tokyocn.com/127.0.0.1#5335 -server=/.tokyo-hot.com/127.0.0.1#5335 -server=/.tomayko.com/127.0.0.1#5335 -server=/.tomsc.com/127.0.0.1#5335 -server=/.tono-oka.jp/127.0.0.1#5335 -server=/.tonyyan.net/127.0.0.1#5335 -server=/.toodoc.com/127.0.0.1#5335 -server=/.toonel.net/127.0.0.1#5335 -server=/.topic.youthwant.com.tw/127.0.0.1#5335 -server=/.topnews.in/127.0.0.1#5335 -server=/.topshare.us/127.0.0.1#5335 -server=/.topshareware.com/127.0.0.1#5335 -server=/.topstyle4.com/127.0.0.1#5335 -server=/.topsy.com/127.0.0.1#5335 -server=/.tora.to/127.0.0.1#5335 -server=/.tor.blingblingsquad.net/127.0.0.1#5335 -server=/.torproject.org/127.0.0.1#5335 -server=/.torrentcrazy.com/127.0.0.1#5335 -server=/.torrentproject.se/127.0.0.1#5335 -server=/.tor.updatestar.com/127.0.0.1#5335 -server=/.torvpn.com/127.0.0.1#5335 -server=/.t.orzdream.com/127.0.0.1#5335 -server=/.tosh.comedycentral.com/127.0.0.1#5335 -server=/.touch99.com/127.0.0.1#5335 -server=/.toutfr.com/127.0.0.1#5335 -server=/.tpde.aide.gov.tw/127.0.0.1#5335 -server=/.tphcc.gov.tw/127.0.0.1#5335 -server=/.tpi.org.tw/127.0.0.1#5335 -server=/.transgressionism.org/127.0.0.1#5335 -server=/.transparency.org/127.0.0.1#5335 -server=/.travelinlocal.com/127.0.0.1#5335 -server=/.trendsmap.com/127.0.0.1#5335 -server=/.trialofccp.org/127.0.0.1#5335 -server=/.tripod.com/127.0.0.1#5335 -server=/.trouw.nl/127.0.0.1#5335 -server=/.trtc.com.tw/127.0.0.1#5335 -server=/.trt.net.tr/127.0.0.1#5335 -server=/.trulyergonomic.com/127.0.0.1#5335 -server=/.trustedbi.com/127.0.0.1#5335 -server=/.truth101.co.tv/127.0.0.1#5335 -server=/.truthcn.com/127.0.0.1#5335 -server=/.truveo.com/127.0.0.1#5335 -server=/.tsctv.net/127.0.0.1#5335 -server=/.tsemtulku.com/127.0.0.1#5335 -server=/.tsquare.tv/127.0.0.1#5335 -server=/.tsunagarumon.com/127.0.0.1#5335 -server=/.tt1069.com/127.0.0.1#5335 -server=/.tttan.com/127.0.0.1#5335 -server=/.tuanzt.com/127.0.0.1#5335 -server=/.tube8.com/127.0.0.1#5335 -server=/.tubecao.com/127.0.0.1#5335 -server=/.tube.com/127.0.0.1#5335 -server=/.tubewolf.com/127.0.0.1#5335 -server=/.tuidang.net/127.0.0.1#5335 -server=/.tuidang.org/127.0.0.1#5335 -server=/.tui.orzdream.com/127.0.0.1#5335 -server=/.tuite.googlecode.com/127.0.0.1#5335 -server=/.tumblr.awflasher.com/127.0.0.1#5335 -server=/.tumblweed.org/127.0.0.1#5335 -server=/.tumutanzi.com/127.0.0.1#5335 -server=/.tunein.com/127.0.0.1#5335 -server=/.tunnelbear.com/127.0.0.1#5335 -server=/.turbobit.net/127.0.0.1#5335 -server=/.turbotwitter.com/127.0.0.1#5335 -server=/.turningtorso.com/127.0.0.1#5335 -server=/.turntable.fm/127.0.0.1#5335 -server=/.tuxtraining.com/127.0.0.1#5335 -server=/.tvants.com/127.0.0.1#5335 -server=/.tvboxnow.com/127.0.0.1#5335 -server=/.tv.com/127.0.0.1#5335 -server=/.tvider.com/127.0.0.1#5335 -server=/.tv-intros.com/127.0.0.1#5335 -server=/.tv.on.cc/127.0.0.1#5335 -server=/.tvunetworks.com/127.0.0.1#5335 -server=/.twapperkeeper.com/127.0.0.1#5335 -server=/.twa.sh/127.0.0.1#5335 -server=/.twaud.io/127.0.0.1#5335 -server=/.twbbs.net.tw/127.0.0.1#5335 -server=/.twbbs.org/127.0.0.1#5335 -server=/.twbbs.tw/127.0.0.1#5335 -server=/.twblogger.com/127.0.0.1#5335 -server=/.tweepguide.com/127.0.0.1#5335 -server=/.tweeplike.me/127.0.0.1#5335 -server=/.tweepmag.com/127.0.0.1#5335 -server=/.tweepml.org/127.0.0.1#5335 -server=/.tweetbackup.com/127.0.0.1#5335 -server=/.tweetboard.com/127.0.0.1#5335 -server=/.tweetboner.biz/127.0.0.1#5335 -server=/.tweetdeck.com/127.0.0.1#5335 -server=/.tweetedtimes.com/127.0.0.1#5335 -server=/.tweetmeme.com/127.0.0.1#5335 -server=/.tweetmylast.fm/127.0.0.1#5335 -server=/.tweetphoto.com/127.0.0.1#5335 -server=/.tweetrans.com/127.0.0.1#5335 -server=/.tweetree.com/127.0.0.1#5335 -server=/.tweetwally.com/127.0.0.1#5335 -server=/.tweetymail.com/127.0.0.1#5335 -server=/.twftp.org/127.0.0.1#5335 -server=/.twibase.com/127.0.0.1#5335 -server=/.twibble.de/127.0.0.1#5335 -server=/.twibbon.com/127.0.0.1#5335 -server=/.twibs.com/127.0.0.1#5335 -server=/.twicsy.com/127.0.0.1#5335 -server=/.twifan.com/127.0.0.1#5335 -server=/.twiffo.com/127.0.0.1#5335 -server=/.twiggit.org/127.0.0.1#5335 -server=/.twilog.org/127.0.0.1#5335 -server=/.twimbow.com/127.0.0.1#5335 -server=/.twimg.com/127.0.0.1#5335 -server=/.twimg.edgesuite.net/127.0.0.1#5335 -server=/.tw.img.nextmedia.com/127.0.0.1#5335 -server=/.twindexx.com/127.0.0.1#5335 -server=/.twipple.jp/127.0.0.1#5335 -server=/.twistar.cc/127.0.0.1#5335 -server=/.twisternow.com/127.0.0.1#5335 -server=/.twistory.net/127.0.0.1#5335 -server=/.twit2d.com/127.0.0.1#5335 -server=/.twitbrowser.net/127.0.0.1#5335 -server=/.twitcause.com/127.0.0.1#5335 -server=/.twitese.spaces.live.com/127.0.0.1#5335 -server=/.twitgether.com/127.0.0.1#5335 -server=/.twitgoo.com/127.0.0.1#5335 -server=/.twitiq.com/127.0.0.1#5335 -server=/.twitlonger.com/127.0.0.1#5335 -server=/.twitoaster.com/127.0.0.1#5335 -server=/.twitonmsn.com/127.0.0.1#5335 -server=/.twitpic.com/127.0.0.1#5335 -server=/.twitreferral.com/127.0.0.1#5335 -server=/.twitstat.com/127.0.0.1#5335 -server=/.twittbot.net/127.0.0.1#5335 -server=/.twitter4j.org/127.0.0.1#5335 -server=/.twitter.com/127.0.0.1#5335 -server=/.twittercounter.com/127.0.0.1#5335 -server=/.twitterfeed.com/127.0.0.1#5335 -server=/.twittergadget.com/127.0.0.1#5335 -server=/.twitter.jp/127.0.0.1#5335 -server=/.twitterkr.com/127.0.0.1#5335 -server=/.twittermail.com/127.0.0.1#5335 -server=/.twittertim.es/127.0.0.1#5335 -server=/.twitthat.com/127.0.0.1#5335 -server=/.twitturk.com/127.0.0.1#5335 -server=/.twitturly.com/127.0.0.1#5335 -server=/.twitvid.com/127.0.0.1#5335 -server=/.twitzap.com/127.0.0.1#5335 -server=/.twiyia.com/127.0.0.1#5335 -server=/.tw.jiepang.com/127.0.0.1#5335 -server=/.tw.myblog.yahoo.com/127.0.0.1#5335 -server=/.tw.news.yahoo.com/127.0.0.1#5335 -server=/.tw-npo.org/127.0.0.1#5335 -server=/.tw.rd.yahoo.com/127.0.0.1#5335 -server=/.twreg.info/127.0.0.1#5335 -server=/.twstar.net/127.0.0.1#5335 -server=/.tw.streetvoice.com/127.0.0.1#5335 -server=/.twt.fm/127.0.0.1#5335 -server=/.twtkr.com/127.0.0.1#5335 -server=/.twtr2src.ogaoga.org/127.0.0.1#5335 -server=/.twtrland.com/127.0.0.1#5335 -server=/.twt.tl/127.0.0.1#5335 -server=/.twttr.com/127.0.0.1#5335 -server=/.twurl.nl/127.0.0.1#5335 -server=/.tw.voa.mobi/127.0.0.1#5335 -server=/.twyac.org/127.0.0.1#5335 -server=/.tw.yahoo.com/127.0.0.1#5335 -server=/.tycool.com/127.0.0.1#5335 -server=/.tynsoe.org/127.0.0.1#5335 -server=/.typepad.com/127.0.0.1#5335 -server=/.tzangms.com/127.0.0.1#5335 -server=/.ub0.cc/127.0.0.1#5335 -server=/.uberproxy.net/127.0.0.1#5335 -server=/.ucdc1998.org/127.0.0.1#5335 -server=/.uderzo.it/127.0.0.1#5335 -server=/.udn.com/127.0.0.1#5335 -server=/.ufreevpn.com/127.0.0.1#5335 -server=/.ugo.com/127.0.0.1#5335 -server=/.uhrp.org/127.0.0.1#5335 -server=/.uighurbiz.net/127.0.0.1#5335 -server=/.ukliferadio.co.uk/127.0.0.1#5335 -server=/.ulike.net/127.0.0.1#5335 -server=/.ultravpn.fr/127.0.0.1#5335 -server=/.ultraxs.com/127.0.0.1#5335 -server=/.unblock.cn.com/127.0.0.1#5335 -server=/.unblocksit.es/127.0.0.1#5335 -server=/.uncyclomedia.org/127.0.0.1#5335 -server=/.uncyclopedia.info/127.0.0.1#5335 -server=/.uncyclopedia.tw/127.0.0.1#5335 -server=/.unholyknight.com/127.0.0.1#5335 -server=/.uni.cc/127.0.0.1#5335 -server=/.unicode.org/127.0.0.1#5335 -server=/.uniteddaily.com.my/127.0.0.1#5335 -server=/.unix100.com/127.0.0.1#5335 -server=/.unknownspace.org/127.0.0.1#5335 -server=/.unpo.org/127.0.0.1#5335 -server=/.uocn.org/127.0.0.1#5335 -server=/.upcoming.yahoo.com/127.0.0.1#5335 -server=/.update.playstation.net/127.0.0.1#5335 -server=/.upload4u.info/127.0.0.1#5335 -server=/.upload.backchina.com/127.0.0.1#5335 -server=/.uploaded.to/127.0.0.1#5335 -server=/.uploadstation.com/127.0.0.1#5335 -server=/.upload.wikimedia.org/127.0.0.1#5335 -server=/.urlborg.com/127.0.0.1#5335 -server=/.urlparser.com/127.0.0.1#5335 -server=/.usacn.com/127.0.0.1#5335 -server=/.usfk.mil/127.0.0.1#5335 -server=/.usinfo.state.gov/127.0.0.1#5335 -server=/.usmc.mil/127.0.0.1#5335 -server=/.us.to/127.0.0.1#5335 -server=/.ustream.tv/127.0.0.1#5335 -server=/.usus.cc/127.0.0.1#5335 -server=/.uushare.com/127.0.0.1#5335 -server=/.uwants.com/127.0.0.1#5335 -server=/.uwants.net/127.0.0.1#5335 -server=/.uyghurcongress.org/127.0.0.1#5335 -server=/.uygur.org/127.0.0.1#5335 -server=/.v70.us/127.0.0.1#5335 -server=/.vaayoo.com/127.0.0.1#5335 -server=/.value-domain.com/127.0.0.1#5335 -server=/.van698.com/127.0.0.1#5335 -server=/.vanemu.cn/127.0.0.1#5335 -server=/.vanilla-jp.com/127.0.0.1#5335 -server=/.vansky.com/127.0.0.1#5335 -server=/.vapurl.com/127.0.0.1#5335 -server=/.vatn.org/127.0.0.1#5335 -server=/.vcfbuilder.org/127.0.0.1#5335 -server=/.vcf-online.org/127.0.0.1#5335 -server=/.veempiire.com/127.0.0.1#5335 -server=/.velkaepocha.sk/127.0.0.1#5335 -server=/.venbbs.com/127.0.0.1#5335 -server=/.venchina.com/127.0.0.1#5335 -server=/.ventureswell.com/127.0.0.1#5335 -server=/.veoh.com/127.0.0.1#5335 -server=/.verizon.net/127.0.0.1#5335 -server=/.verybs.com/127.0.0.1#5335 -server=/.vevo.com/127.0.0.1#5335 -server=/.vft.com.tw/127.0.0.1#5335 -server=/.vghks.gov.tw/127.0.0.1#5335 -server=/.vghtc.gov.tw/127.0.0.1#5335 -server=/.vghtpe.gov.tw/127.0.0.1#5335 -server=/.video.aol.ca/127.0.0.1#5335 -server=/.video.aol.com/127.0.0.1#5335 -server=/.video.aol.co.uk/127.0.0.1#5335 -server=/.video.ap.org/127.0.0.1#5335 -server=/.videobam.com/127.0.0.1#5335 -server=/.video.fdbox.com/127.0.0.1#5335 -server=/.video.foxbusiness.com/127.0.0.1#5335 -server=/.videomo.com/127.0.0.1#5335 -server=/.video.tiscali.it/127.0.0.1#5335 -server=/.video.yahoo.com/127.0.0.1#5335 -server=/.vidoemo.com/127.0.0.1#5335 -server=/.views.fm/127.0.0.1#5335 -server=/.viki.com/127.0.0.1#5335 -server=/.vimeocdn.com/127.0.0.1#5335 -server=/.vimeo.com/127.0.0.1#5335 -server=/.vimgolf.com/127.0.0.1#5335 -server=/.vimperator.org/127.0.0.1#5335 -server=/.vincnd.com/127.0.0.1#5335 -server=/.vinniev.com/127.0.0.1#5335 -server=/.vllcs.org/127.0.0.1#5335 -server=/.vlog.xuite.net/127.0.0.1#5335 -server=/.vmixcore.com/127.0.0.1#5335 -server=/.voacantonese.com/127.0.0.1#5335 -server=/.voachineseblog.com/127.0.0.1#5335 -server=/.voachinese.com/127.0.0.1#5335 -server=/.voagd.com/127.0.0.1#5335 -server=/.voanews.com/127.0.0.1#5335 -server=/.voatibetan.com/127.0.0.1#5335 -server=/.vocn.tv/127.0.0.1#5335 -server=/.vot.org/127.0.0.1#5335 -server=/.vpnbook.com/127.0.0.1#5335 -server=/.vpnfire.com/127.0.0.1#5335 -server=/.vpngate.jp/127.0.0.1#5335 -server=/.vpngate.net/127.0.0.1#5335 -server=/.vpnpop.com/127.0.0.1#5335 -server=/.vpnpronet.com/127.0.0.1#5335 -server=/.v-state.org/127.0.0.1#5335 -server=/.vtunnel.com/127.0.0.1#5335 -server=/.w3schools.com/127.0.0.1#5335 -server=/.waffle1999.com/127.0.0.1#5335 -server=/.wahas.com/127.0.0.1#5335 -server=/.waigaobu.com/127.0.0.1#5335 -server=/.waikeung.org/127.0.0.1#5335 -server=/.waiwaier.com/127.0.0.1#5335 -server=/.wallornot.org/127.0.0.1#5335 -server=/.wallpapercasa.com/127.0.0.1#5335 -server=/.wanderinghorse.net/127.0.0.1#5335 -server=/.wanfang.gov.tw/127.0.0.1#5335 -server=/.wangafu.net/127.0.0.1#5335 -server=/.wangjinbo.org/127.0.0.1#5335 -server=/.wanglixiong.com/127.0.0.1#5335 -server=/.wangruoshui.net/127.0.0.1#5335 -server=/.wangyi64.spaces.live.com/127.0.0.1#5335 -server=/.want-daily.com/127.0.0.1#5335 -server=/.wapedia.mobi/127.0.0.1#5335 -server=/.washeng.net/127.0.0.1#5335 -server=/.watchmygf.net/127.0.0.1#5335 -server=/.wattpad.com/127.0.0.1#5335 -server=/.wdf5.com/127.0.0.1#5335 -server=/.wearn.com/127.0.0.1#5335 -server=/.web2project.net/127.0.0.1#5335 -server=/.webbang.net/127.0.0.1#5335 -server=/.webfee.tk/127.0.0.1#5335 -server=/.weblagu.com/127.0.0.1#5335 -server=/.webmproject.org/127.0.0.1#5335 -server=/.webshots.com/127.0.0.1#5335 -server=/.websitepulse.com/127.0.0.1#5335 -server=/.webs-tv.net/127.0.0.1#5335 -server=/.webworkerdaily.com/127.0.0.1#5335 -server=/.weeewooo.net/127.0.0.1#5335 -server=/.weekmag.info/127.0.0.1#5335 -server=/.wefong.com/127.0.0.1#5335 -server=/.weiboleak.com/127.0.0.1#5335 -server=/.weigegebyc.dreamhosters.com/127.0.0.1#5335 -server=/.weijingsheng.org/127.0.0.1#5335 -server=/.weiming.info/127.0.0.1#5335 -server=/.weiquanwang.org/127.0.0.1#5335 -server=/.weisuo.ws/127.0.0.1#5335 -server=/.wellplacedpixels.com/127.0.0.1#5335 -server=/.wengewang.com/127.0.0.1#5335 -server=/.wengewang.org/127.0.0.1#5335 -server=/.wenhui.ch/127.0.0.1#5335 -server=/.wenku.com/127.0.0.1#5335 -server=/.wenxuecity.com/127.0.0.1#5335 -server=/.wenyunchao.com/127.0.0.1#5335 -server=/.wenyunchao.spaces.live.com/127.0.0.1#5335 -server=/.wepn.info/127.0.0.1#5335 -server=/.westca.com/127.0.0.1#5335 -server=/.westernwolves.com/127.0.0.1#5335 -server=/.wetplace.com/127.0.0.1#5335 -server=/.wetpussygames.com/127.0.0.1#5335 -server=/.wexiaobo.org/127.0.0.1#5335 -server=/.wezhiyong.org/127.0.0.1#5335 -server=/.wezone.net/127.0.0.1#5335 -server=/.wforum.com/127.0.0.1#5335 -server=/.whatblocked.com/127.0.0.1#5335 -server=/.whereiswerner.com/127.0.0.1#5335 -server=/.whippedass.com/127.0.0.1#5335 -server=/.whitebear.freebearblog.org/127.0.0.1#5335 -server=/.whydidyoubuymethat.com/127.0.0.1#5335 -server=/.whylover.com/127.0.0.1#5335 -server=/.whyx.org/127.0.0.1#5335 -server=/.w.idaiwan.com/127.0.0.1#5335 -server=/.wiki.cnitter.com/127.0.0.1#5335 -server=/.wiki.jqueryui.com/127.0.0.1#5335 -server=/.wiki.keso.cn/127.0.0.1#5335 -server=/.wikileaks.ch/127.0.0.1#5335 -server=/.wikileaks.de/127.0.0.1#5335 -server=/.wikileaks.eu/127.0.0.1#5335 -server=/.wikileaks.lu/127.0.0.1#5335 -server=/.wikileaks.org/127.0.0.1#5335 -server=/.wikileaks.pl/127.0.0.1#5335 -server=/.wikilivres.info/127.0.0.1#5335 -server=/.wikimapia.org/127.0.0.1#5335 -server=/.wikimedia.org.mo/127.0.0.1#5335 -server=/.wiki.moegirl.org/127.0.0.1#5335 -server=/.wikinet.org/127.0.0.1#5335 -server=/.wiki.oauth.net/127.0.0.1#5335 -server=/.wikipedia.org/127.0.0.1#5335 -server=/.wiki.phonegap.com/127.0.0.1#5335 -server=/.wikiwiki.jp/127.0.0.1#5335 -server=/.wikkii.com/127.0.0.1#5335 -server=/.williamlong.spaces.live.com/127.0.0.1#5335 -server=/.willw.net/127.0.0.1#5335 -server=/.windowsphoneme.com/127.0.0.1#5335 -server=/.winwhispers.info/127.0.0.1#5335 -server=/.wiredbytes.com/127.0.0.1#5335 -server=/.wiredpen.com/127.0.0.1#5335 -server=/.wireshark.org/127.0.0.1#5335 -server=/.wisevid.com/127.0.0.1#5335 -server=/.witnessleeteaching.com/127.0.0.1#5335 -server=/.witopia.net/127.0.0.1#5335 -server=/.wlx.sowiki.net/127.0.0.1#5335 -server=/.woeser.com/127.0.0.1#5335 -server=/.wolfax.com/127.0.0.1#5335 -server=/.womenbusiness.nyc.gov.tw/127.0.0.1#5335 -server=/.womensrightsofchina.org/127.0.0.1#5335 -server=/.woopie.jp/127.0.0.1#5335 -server=/.woopie.tv/127.0.0.1#5335 -server=/.wordboner.com/127.0.0.1#5335 -server=/.wordpress.com/127.0.0.1#5335 -server=/.wordsandturds.com/127.0.0.1#5335 -server=/.w.org/127.0.0.1#5335 -server=/.workatruna.com/127.0.0.1#5335 -server=/.worldcat.org/127.0.0.1#5335 -server=/.worldjournal.com/127.0.0.1#5335 -server=/.worstthingieverate.com/127.0.0.1#5335 -server=/.wo.tc/127.0.0.1#5335 -server=/.wowlegacy.ml/127.0.0.1#5335 -server=/.wow-life.net/127.0.0.1#5335 -server=/.woxinghuiguo.com/127.0.0.1#5335 -server=/.wozy.in/127.0.0.1#5335 -server=/.wp.com/127.0.0.1#5335 -server=/.wpoforum.com/127.0.0.1#5335 -server=/.wqlhw.com/127.0.0.1#5335 -server=/.wqyd.org/127.0.0.1#5335 -server=/.wrchina.org/127.0.0.1#5335 -server=/.wretch.cc/127.0.0.1#5335 -server=/.writer.zoho.com/127.0.0.1#5335 -server=/.wsj.com/127.0.0.1#5335 -server=/.wsj.net/127.0.0.1#5335 -server=/.wtfpeople.com/127.0.0.1#5335 -server=/.wuala.com/127.0.0.1#5335 -server=/.wuerkaixi.com/127.0.0.1#5335 -server=/.wufi.org.tw/127.0.0.1#5335 -server=/.wuguoguang.com/127.0.0.1#5335 -server=/.wujieliulan.com/127.0.0.1#5335 -server=/.wujie.net/127.0.0.1#5335 -server=/.wukangrui.net/127.0.0.1#5335 -server=/.wwitv.com/127.0.0.1#5335 -server=/.www.6v6dota.com/127.0.0.1#5335 -server=/.www.ajsands.com/127.0.0.1#5335 -server=/.www.antd.org/127.0.0.1#5335 -server=/.www.aolnews.com/127.0.0.1#5335 -server=/.www.bulbous.freeserve.co.uk/127.0.0.1#5335 -server=/.www.cmoinc.org/127.0.0.1#5335 -server=/.www.dfanning.com/127.0.0.1#5335 -server=/.www.dwheeler.com/127.0.0.1#5335 -server=/.www.eulam.com/127.0.0.1#5335 -server=/.www.exblog.jp/127.0.0.1#5335 -server=/.www.forum4hk.com/127.0.0.1#5335 -server=/.www.freetibet.org/127.0.0.1#5335 -server=/.www.getyouram.com/127.0.0.1#5335 -server=/.www.goldenmelody.com.tw/127.0.0.1#5335 -server=/.www.idlcoyote.com/127.0.0.1#5335 -server=/.www.immigration.gov.tw/127.0.0.1#5335 -server=/.www.klip.me/127.0.0.1#5335 -server=/.www.kodingen.com/127.0.0.1#5335 -server=/.www.linksalpha.com/127.0.0.1#5335 -server=/.www.loiclemeur.com/127.0.0.1#5335 -server=/.www.macrovpn.com/127.0.0.1#5335 -server=/.www.monlamit.org/127.0.0.1#5335 -server=/.www.moztw.org/127.0.0.1#5335 -server=/.www.mycould.com/127.0.0.1#5335 -server=/.www.ned.org/127.0.0.1#5335 -server=/.www.nownews.com/127.0.0.1#5335 -server=/.www.orchidbbs.com/127.0.0.1#5335 -server=/.www.owind.com/127.0.0.1#5335 -server=/.www.oxid.it/127.0.0.1#5335 -server=/.www.parkansky.com/127.0.0.1#5335 -server=/.www.powerpointninja.com/127.0.0.1#5335 -server=/.www.rnw.nl/127.0.0.1#5335 -server=/.www.somee.com/127.0.0.1#5335 -server=/.www.stackfile.com/127.0.0.1#5335 -server=/.www.supertweet.net/127.0.0.1#5335 -server=/.www.tiffanyarment.com/127.0.0.1#5335 -server=/.www.tripod.com/127.0.0.1#5335 -server=/.www.tv.com/127.0.0.1#5335 -server=/.www.twtrland.com/127.0.0.1#5335 -server=/.www.typepad.com/127.0.0.1#5335 -server=/.www.urbanoutfitters.com/127.0.0.1#5335 -server=/.www.vegorpedersen.com/127.0.0.1#5335 -server=/.www.voy.com/127.0.0.1#5335 -server=/.www.vpncup.com/127.0.0.1#5335 -server=/.www.wangruowang.org/127.0.0.1#5335 -server=/.www.wan-press.org/127.0.0.1#5335 -server=/.www.wet123.com/127.0.0.1#5335 -server=/.www.zaurus.org.uk/127.0.0.1#5335 -server=/.wzyboy.im/127.0.0.1#5335 -server=/.x1949x.com/127.0.0.1#5335 -server=/.x365x.com/127.0.0.1#5335 -server=/.xanga.com/127.0.0.1#5335 -server=/.x-art.com/127.0.0.1#5335 -server=/.xa.yimg.com/127.0.0.1#5335 -server=/.xbabe.com/127.0.0.1#5335 -server=/.xbookcn.com/127.0.0.1#5335 -server=/.xcafe.in/127.0.0.1#5335 -server=/.xcritic.com/127.0.0.1#5335 -server=/.xfm.pp.ru/127.0.0.1#5335 -server=/.xgmyd.com/127.0.0.1#5335 -server=/.xh4n.cn/127.0.0.1#5335 -server=/.xhamster.com/127.0.0.1#5335 -server=/.xiaochuncnjp.com/127.0.0.1#5335 -server=/.xiaohexie.com/127.0.0.1#5335 -server=/.xiaoma.org/127.0.0.1#5335 -server=/.xiezhua.com/127.0.0.1#5335 -server=/.xing.com/127.0.0.1#5335 -server=/.xinhuanet.org/127.0.0.1#5335 -server=/.xinmiao.com.hk/127.0.0.1#5335 -server=/.xinqimeng.over-blog.com/127.0.0.1#5335 -server=/.xinsheng.net/127.0.0.1#5335 -server=/.xinshijue.com/127.0.0.1#5335 -server=/.xinyubbs.net/127.0.0.1#5335 -server=/.xizang-zhiye.org/127.0.0.1#5335 -server=/.xjp.cc/127.0.0.1#5335 -server=/.xml-training-guide.com/127.0.0.1#5335 -server=/.xmovies.com/127.0.0.1#5335 -server=/.xmusic.fm/127.0.0.1#5335 -server=/.xnxx.com/127.0.0.1#5335 -server=/.xpdo.net/127.0.0.1#5335 -server=/.xpud.org/127.0.0.1#5335 -server=/.xskywalker.com/127.0.0.1#5335 -server=/.xtube.com/127.0.0.1#5335 -server=/.xuchao.net/127.0.0.1#5335 -server=/.xuchao.org/127.0.0.1#5335 -server=/.xuzhiyong.net/127.0.0.1#5335 -server=/.xuzhuoer.com/127.0.0.1#5335 -server=/.xvedios.com/127.0.0.1#5335 -server=/.xvideos.com/127.0.0.1#5335 -server=/.x-wall.org/127.0.0.1#5335 -server=/.xxbbx.com/127.0.0.1#5335 -server=/.x.xcity.jp/127.0.0.1#5335 -server=/.xxxx.com.au/127.0.0.1#5335 -server=/.xysblogs.org/127.0.0.1#5335 -server=/.xys.dxiong.com/127.0.0.1#5335 -server=/.xys.org/127.0.0.1#5335 -server=/.xyy69.com/127.0.0.1#5335 -server=/.xyy69.info/127.0.0.1#5335 -server=/.yahoo.cn/127.0.0.1#5335 -server=/.yahoo.com.hk/127.0.0.1#5335 -server=/.yam.com/127.0.0.1#5335 -server=/.yanghengjun.spaces.live.com/127.0.0.1#5335 -server=/.yasni.co.uk/127.0.0.1#5335 -server=/.yasukuni.or.jp/127.0.0.1#5335 -server=/.yatsen.gov.tw/127.0.0.1#5335 -server=/.ydy.com/127.0.0.1#5335 -server=/.yeelou.com/127.0.0.1#5335 -server=/.yeeyi.com/127.0.0.1#5335 -server=/.yegle.net/127.0.0.1#5335 -server=/.yezimary.spaces.live.com/127.0.0.1#5335 -server=/.yfrog.com/127.0.0.1#5335 -server=/.yhcw.net/127.0.0.1#5335 -server=/.yidio.com/127.0.0.1#5335 -server=/.yilubbs.com/127.0.0.1#5335 -server=/.yi.org/127.0.0.1#5335 -server=/.yipub.com/127.0.0.1#5335 -server=/.ym.backchina.com/127.0.0.1#5335 -server=/.yogichen.org/127.0.0.1#5335 -server=/.yong.hu/127.0.0.1#5335 -server=/.yorkbbs.ca/127.0.0.1#5335 -server=/.youdao.com/127.0.0.1#5335 -server=/.youjizz.com/127.0.0.1#5335 -server=/.youmaker.com/127.0.0.1#5335 -server=/.youpai.org/127.0.0.1#5335 -server=/.youporn.com/127.0.0.1#5335 -server=/.your-freedom.net/127.0.0.1#5335 -server=/.yousendit.com/127.0.0.1#5335 -server=/.youthbao.com/127.0.0.1#5335 -server=/.youthnetradio.org/127.0.0.1#5335 -server=/.youtu.be/127.0.0.1#5335 -server=/.youtubecn.com/127.0.0.1#5335 -server=/.youtube.com/127.0.0.1#5335 -server=/.youtube-nocookie.com/127.0.0.1#5335 -server=/.youversion.com/127.0.0.1#5335 -server=/.youxu.info/127.0.0.1#5335 -server=/.ytht.net/127.0.0.1#5335 -server=/.ytimg.com/127.0.0.1#5335 -server=/.yuanming.net/127.0.0.1#5335 -server=/.yuming.flnet.org/127.0.0.1#5335 -server=/.yunchao.net/127.0.0.1#5335 -server=/.yvesgeleyn.com/127.0.0.1#5335 -server=/.yvtc.gov.tw/127.0.0.1#5335 -server=/.yx51.net/127.0.0.1#5335 -server=/.yyii.org/127.0.0.1#5335 -server=/.yymaya.com/127.0.0.1#5335 -server=/.yzzk.com/127.0.0.1#5335 -server=/.zacebook.com/127.0.0.1#5335 -server=/.zannel.com/127.0.0.1#5335 -server=/.zaobao.com/127.0.0.1#5335 -server=/.zaobao.com.sg/127.0.0.1#5335 -server=/.zaozon.com/127.0.0.1#5335 -server=/.zarias.com/127.0.0.1#5335 -server=/.zattoo.com/127.0.0.1#5335 -server=/.zdnet.com.tw/127.0.0.1#5335 -server=/.zengjinyan.org/127.0.0.1#5335 -server=/.zengjinyan.spaces.live.com/127.0.0.1#5335 -server=/.zeutch.com/127.0.0.1#5335 -server=/.zgzcjj.net/127.0.0.1#5335 -server=/.zhanbin.net/127.0.0.1#5335 -server=/.zhao.jinhai.de/127.0.0.1#5335 -server=/.zhenghui.org/127.0.0.1#5335 -server=/.zhenlibu.info/127.0.0.1#5335 -server=/.zhinengluyou.com/127.0.0.1#5335 -server=/.zhllg.spaces.live.com/127.0.0.1#5335 -server=/.zh.m.wikipedia.org/127.0.0.1#5335 -server=/.zh.netlog.com/127.0.0.1#5335 -server=/.zhonggtuotese.net/127.0.0.1#5335 -server=/.zhongguotese.net/127.0.0.1#5335 -server=/.zhongmeng.org/127.0.0.1#5335 -server=/.zhongsou.com/127.0.0.1#5335 -server=/.zh.pokerstrategy.com/127.0.0.1#5335 -server=/.zhreader.com/127.0.0.1#5335 -server=/.zh-tw.justin.tv/127.0.0.1#5335 -server=/.zhuichaguoji.org/127.0.0.1#5335 -server=/.zh.uncyclopedia.wikia.com/127.0.0.1#5335 -server=/.zh.wikinews.org/127.0.0.1#5335 -server=/.zh.wikipedia.org/127.0.0.1#5335 -server=/.zh.wikisource.org/127.0.0.1#5335 -server=/.ziddu.com/127.0.0.1#5335 -server=/.zillionk.com/127.0.0.1#5335 -server=/.zinio.com/127.0.0.1#5335 -server=/.ziplib.com/127.0.0.1#5335 -server=/.zkaip.com/127.0.0.1#5335 -server=/.zmw.cn/127.0.0.1#5335 -server=/.zomobo.net/127.0.0.1#5335 -server=/.zonaeuropa.com/127.0.0.1#5335 -server=/.zootool.com/127.0.0.1#5335 -server=/.zoozle.net/127.0.0.1#5335 -server=/.zozotown.com/127.0.0.1#5335 -server=/.zshare.net/127.0.0.1#5335 -server=/.zsrhao.com/127.0.0.1#5335 -server=/.zuo.la/127.0.0.1#5335 -server=/.zuola.com/127.0.0.1#5335 -server=/.zvereff.com/127.0.0.1#5335 -server=/.zyzc9.com/127.0.0.1#5335 -server=/.zyzg.us/127.0.0.1#5335 \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw_list.conf b/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw_list.conf deleted file mode 100644 index 4064a1344a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/gfw_list.conf +++ /dev/null @@ -1,10476 +0,0 @@ -server=/.030buy.com/127.0.0.1#5335 -ipset=/.030buy.com/gfwlist -server=/.0rz.tw/127.0.0.1#5335 -ipset=/.0rz.tw/gfwlist -server=/.10.tt/127.0.0.1#5335 -ipset=/.10.tt/gfwlist -server=/.1000giri.net/127.0.0.1#5335 -ipset=/.1000giri.net/gfwlist -server=/.100ke.org/127.0.0.1#5335 -ipset=/.100ke.org/gfwlist -server=/.10conditionsoflove.com/127.0.0.1#5335 -ipset=/.10conditionsoflove.com/gfwlist -server=/.10musume.com/127.0.0.1#5335 -ipset=/.10musume.com/gfwlist -server=/.123rf.com/127.0.0.1#5335 -ipset=/.123rf.com/gfwlist -server=/.12bet.com/127.0.0.1#5335 -ipset=/.12bet.com/gfwlist -server=/.12vpn.com/127.0.0.1#5335 -ipset=/.12vpn.com/gfwlist -server=/.12vpn.net/127.0.0.1#5335 -ipset=/.12vpn.net/gfwlist -server=/.138.com/127.0.0.1#5335 -ipset=/.138.com/gfwlist -server=/.141jj.com/127.0.0.1#5335 -ipset=/.141jj.com/gfwlist -server=/.141tube.com/127.0.0.1#5335 -ipset=/.141tube.com/gfwlist -server=/.1688.com.au/127.0.0.1#5335 -ipset=/.1688.com.au/gfwlist -server=/.173ng.com/127.0.0.1#5335 -ipset=/.173ng.com/gfwlist -server=/.177pic.info/127.0.0.1#5335 -ipset=/.177pic.info/gfwlist -server=/.17t17p.com/127.0.0.1#5335 -ipset=/.17t17p.com/gfwlist -server=/.18board.com/127.0.0.1#5335 -ipset=/.18board.com/gfwlist -server=/.18board.info/127.0.0.1#5335 -ipset=/.18board.info/gfwlist -server=/.18onlygirls.com/127.0.0.1#5335 -ipset=/.18onlygirls.com/gfwlist -server=/.18p2p.com/127.0.0.1#5335 -ipset=/.18p2p.com/gfwlist -server=/.18virginsex.com/127.0.0.1#5335 -ipset=/.18virginsex.com/gfwlist -server=/.1949er.org/127.0.0.1#5335 -ipset=/.1949er.org/gfwlist -server=/.1984bbs.com/127.0.0.1#5335 -ipset=/.1984bbs.com/gfwlist -server=/.1984bbs.org/127.0.0.1#5335 -ipset=/.1984bbs.org/gfwlist -server=/.1989report.hkja.org.hk/127.0.0.1#5335 -ipset=/.1989report.hkja.org.hk/gfwlist -server=/.1991way.com/127.0.0.1#5335 -ipset=/.1991way.com/gfwlist -server=/.1998cdp.org/127.0.0.1#5335 -ipset=/.1998cdp.org/gfwlist -server=/.1bao.org/127.0.0.1#5335 -ipset=/.1bao.org/gfwlist -server=/.1dumb.com/127.0.0.1#5335 -ipset=/.1dumb.com/gfwlist -server=/.1e100.net/127.0.0.1#5335 -ipset=/.1e100.net/gfwlist -server=/.1eew.com/127.0.0.1#5335 -ipset=/.1eew.com/gfwlist -server=/.1mobile.com/127.0.0.1#5335 -ipset=/.1mobile.com/gfwlist -server=/.1pondo.tv/127.0.0.1#5335 -ipset=/.1pondo.tv/gfwlist -server=/.2-hand.info/127.0.0.1#5335 -ipset=/.2-hand.info/gfwlist -server=/.2008xianzhang.info/127.0.0.1#5335 -ipset=/.2008xianzhang.info/gfwlist -server=/.2017.hk/127.0.0.1#5335 -ipset=/.2017.hk/gfwlist -server=/.21join.com/127.0.0.1#5335 -ipset=/.21join.com/gfwlist -server=/.21pron.com/127.0.0.1#5335 -ipset=/.21pron.com/gfwlist -server=/.21sextury.com/127.0.0.1#5335 -ipset=/.21sextury.com/gfwlist -server=/.228.net.tw/127.0.0.1#5335 -ipset=/.228.net.tw/gfwlist -server=/.233abc.com/127.0.0.1#5335 -ipset=/.233abc.com/gfwlist -server=/.24hrs.ca/127.0.0.1#5335 -ipset=/.24hrs.ca/gfwlist -server=/.24smile.org/127.0.0.1#5335 -ipset=/.24smile.org/gfwlist -server=/.25u.com/127.0.0.1#5335 -ipset=/.25u.com/gfwlist -server=/.2lipstube.com/127.0.0.1#5335 -ipset=/.2lipstube.com/gfwlist -server=/.2shared.com/127.0.0.1#5335 -ipset=/.2shared.com/gfwlist -server=/.2waky.com/127.0.0.1#5335 -ipset=/.2waky.com/gfwlist -server=/.3-a.net/127.0.0.1#5335 -ipset=/.3-a.net/gfwlist -server=/.30boxes.com/127.0.0.1#5335 -ipset=/.30boxes.com/gfwlist -server=/.315lz.com/127.0.0.1#5335 -ipset=/.315lz.com/gfwlist -server=/.32red.com/127.0.0.1#5335 -ipset=/.32red.com/gfwlist -server=/.36rain.com/127.0.0.1#5335 -ipset=/.36rain.com/gfwlist -server=/.3a5a.com/127.0.0.1#5335 -ipset=/.3a5a.com/gfwlist -server=/.3arabtv.com/127.0.0.1#5335 -ipset=/.3arabtv.com/gfwlist -server=/.3boys2girls.com/127.0.0.1#5335 -ipset=/.3boys2girls.com/gfwlist -server=/.3d-game.com/127.0.0.1#5335 -ipset=/.3d-game.com/gfwlist -server=/.3proxy.ru/127.0.0.1#5335 -ipset=/.3proxy.ru/gfwlist -server=/.3ren.ca/127.0.0.1#5335 -ipset=/.3ren.ca/gfwlist -server=/.3tui.net/127.0.0.1#5335 -ipset=/.3tui.net/gfwlist -server=/.43110.cf/127.0.0.1#5335 -ipset=/.43110.cf/gfwlist -server=/.466453.com/127.0.0.1#5335 -ipset=/.466453.com/gfwlist -server=/.4bluestones.biz/127.0.0.1#5335 -ipset=/.4bluestones.biz/gfwlist -server=/.4chan.com/127.0.0.1#5335 -ipset=/.4chan.com/gfwlist -server=/.4dq.com/127.0.0.1#5335 -ipset=/.4dq.com/gfwlist -server=/.4everproxy.com/127.0.0.1#5335 -ipset=/.4everproxy.com/gfwlist -server=/.4irc.com/127.0.0.1#5335 -ipset=/.4irc.com/gfwlist -server=/.4mydomain.com/127.0.0.1#5335 -ipset=/.4mydomain.com/gfwlist -server=/.4pu.com/127.0.0.1#5335 -ipset=/.4pu.com/gfwlist -server=/.4rbtv.com/127.0.0.1#5335 -ipset=/.4rbtv.com/gfwlist -server=/.4shared.com/127.0.0.1#5335 -ipset=/.4shared.com/gfwlist -server=/.51.ca/127.0.0.1#5335 -ipset=/.51.ca/gfwlist -server=/.51jav.org/127.0.0.1#5335 -ipset=/.51jav.org/gfwlist -server=/.51luoben.com/127.0.0.1#5335 -ipset=/.51luoben.com/gfwlist -server=/.5278.cc/127.0.0.1#5335 -ipset=/.5278.cc/gfwlist -server=/.5299.tv/127.0.0.1#5335 -ipset=/.5299.tv/gfwlist -server=/.56cun04.jigsy.com/127.0.0.1#5335 -ipset=/.56cun04.jigsy.com/gfwlist -server=/.5aimiku.com/127.0.0.1#5335 -ipset=/.5aimiku.com/gfwlist -server=/.5i01.com/127.0.0.1#5335 -ipset=/.5i01.com/gfwlist -server=/.5isotoi5.org/127.0.0.1#5335 -ipset=/.5isotoi5.org/gfwlist -server=/.5maodang.com/127.0.0.1#5335 -ipset=/.5maodang.com/gfwlist -server=/.63i.com/127.0.0.1#5335 -ipset=/.63i.com/gfwlist -server=/.64museum.org/127.0.0.1#5335 -ipset=/.64museum.org/gfwlist -server=/.64tianwang.com/127.0.0.1#5335 -ipset=/.64tianwang.com/gfwlist -server=/.64wiki.com/127.0.0.1#5335 -ipset=/.64wiki.com/gfwlist -server=/.66.ca/127.0.0.1#5335 -ipset=/.66.ca/gfwlist -server=/.666kb.com/127.0.0.1#5335 -ipset=/.666kb.com/gfwlist -server=/.6park.com/127.0.0.1#5335 -ipset=/.6park.com/gfwlist -server=/.6parker.com/127.0.0.1#5335 -ipset=/.6parker.com/gfwlist -server=/.6parknews.com/127.0.0.1#5335 -ipset=/.6parknews.com/gfwlist -server=/.7capture.com/127.0.0.1#5335 -ipset=/.7capture.com/gfwlist -server=/.7cow.com/127.0.0.1#5335 -ipset=/.7cow.com/gfwlist -server=/.8-d.com/127.0.0.1#5335 -ipset=/.8-d.com/gfwlist -server=/.85cc.net/127.0.0.1#5335 -ipset=/.85cc.net/gfwlist -server=/.85cc.us/127.0.0.1#5335 -ipset=/.85cc.us/gfwlist -server=/.85st.com/127.0.0.1#5335 -ipset=/.85st.com/gfwlist -server=/.881903.com/127.0.0.1#5335 -ipset=/.881903.com/gfwlist -server=/.888.com/127.0.0.1#5335 -ipset=/.888.com/gfwlist -server=/.888poker.com/127.0.0.1#5335 -ipset=/.888poker.com/gfwlist -server=/.89-64.org/127.0.0.1#5335 -ipset=/.89-64.org/gfwlist -server=/.89.64.charter.constitutionalism.solutions/127.0.0.1#5335 -ipset=/.89.64.charter.constitutionalism.solutions/gfwlist -server=/.8news.com.tw/127.0.0.1#5335 -ipset=/.8news.com.tw/gfwlist -server=/.8z1.net/127.0.0.1#5335 -ipset=/.8z1.net/gfwlist -server=/.9001700.com/127.0.0.1#5335 -ipset=/.9001700.com/gfwlist -server=/.91porn.com/127.0.0.1#5335 -ipset=/.91porn.com/gfwlist -server=/.91vps.club/127.0.0.1#5335 -ipset=/.91vps.club/gfwlist -server=/.92ccav.com/127.0.0.1#5335 -ipset=/.92ccav.com/gfwlist -server=/.991.com/127.0.0.1#5335 -ipset=/.991.com/gfwlist -server=/.99btgc01.com/127.0.0.1#5335 -ipset=/.99btgc01.com/gfwlist -server=/.99cn.info/127.0.0.1#5335 -ipset=/.99cn.info/gfwlist -server=/.9bis.com/127.0.0.1#5335 -ipset=/.9bis.com/gfwlist -server=/.9bis.net/127.0.0.1#5335 -ipset=/.9bis.net/gfwlist -server=/.9gag.com/127.0.0.1#5335 -ipset=/.9gag.com/gfwlist -server=/.a-normal-day.com/127.0.0.1#5335 -ipset=/.a-normal-day.com/gfwlist -server=/.a248.e.akamai.net/127.0.0.1#5335 -ipset=/.a248.e.akamai.net/gfwlist -server=/.a5.com.ru/127.0.0.1#5335 -ipset=/.a5.com.ru/gfwlist -server=/.aamacau.com/127.0.0.1#5335 -ipset=/.aamacau.com/gfwlist -server=/.abc.com/127.0.0.1#5335 -ipset=/.abc.com/gfwlist -server=/.abc.net.au/127.0.0.1#5335 -ipset=/.abc.net.au/gfwlist -server=/.abc.pp.ru/127.0.0.1#5335 -ipset=/.abc.pp.ru/gfwlist -server=/.abc.xyz/127.0.0.1#5335 -ipset=/.abc.xyz/gfwlist -server=/.abchinese.com/127.0.0.1#5335 -ipset=/.abchinese.com/gfwlist -server=/.abclite.net/127.0.0.1#5335 -ipset=/.abclite.net/gfwlist -server=/.abebooks.com/127.0.0.1#5335 -ipset=/.abebooks.com/gfwlist -server=/.abematv.akamaized.net/127.0.0.1#5335 -ipset=/.abematv.akamaized.net/gfwlist -server=/.ablwang.com/127.0.0.1#5335 -ipset=/.ablwang.com/gfwlist -server=/.aboluowang.com/127.0.0.1#5335 -ipset=/.aboluowang.com/gfwlist -server=/.about.google/127.0.0.1#5335 -ipset=/.about.google/gfwlist -server=/.aboutgfw.com/127.0.0.1#5335 -ipset=/.aboutgfw.com/gfwlist -server=/.abs.edu/127.0.0.1#5335 -ipset=/.abs.edu/gfwlist -server=/.ac.jiruan.net/127.0.0.1#5335 -ipset=/.ac.jiruan.net/gfwlist -server=/.accim.org/127.0.0.1#5335 -ipset=/.accim.org/gfwlist -server=/.aceros-de-hispania.com/127.0.0.1#5335 -ipset=/.aceros-de-hispania.com/gfwlist -server=/.acevpn.com/127.0.0.1#5335 -ipset=/.acevpn.com/gfwlist -server=/.acg18.me/127.0.0.1#5335 -ipset=/.acg18.me/gfwlist -server=/.acgkj.com/127.0.0.1#5335 -ipset=/.acgkj.com/gfwlist -server=/.acmedia365.com/127.0.0.1#5335 -ipset=/.acmedia365.com/gfwlist -server=/.acmetoy.com/127.0.0.1#5335 -ipset=/.acmetoy.com/gfwlist -server=/.acnw.com.au/127.0.0.1#5335 -ipset=/.acnw.com.au/gfwlist -server=/.actfortibet.org/127.0.0.1#5335 -ipset=/.actfortibet.org/gfwlist -server=/.actimes.com.au/127.0.0.1#5335 -ipset=/.actimes.com.au/gfwlist -server=/.activpn.com/127.0.0.1#5335 -ipset=/.activpn.com/gfwlist -server=/.aculo.us/127.0.0.1#5335 -ipset=/.aculo.us/gfwlist -server=/.adcex.com/127.0.0.1#5335 -ipset=/.adcex.com/gfwlist -server=/.addictedtocoffee.de/127.0.0.1#5335 -ipset=/.addictedtocoffee.de/gfwlist -server=/.admin.recaptcha.net/127.0.0.1#5335 -ipset=/.admin.recaptcha.net/gfwlist -server=/.admob.com/127.0.0.1#5335 -ipset=/.admob.com/gfwlist -server=/.adpl.org.hk/127.0.0.1#5335 -ipset=/.adpl.org.hk/gfwlist -server=/.ads-twitter.com/127.0.0.1#5335 -ipset=/.ads-twitter.com/gfwlist -server=/.adsense.com/127.0.0.1#5335 -ipset=/.adsense.com/gfwlist -server=/.adult-sex-games.com/127.0.0.1#5335 -ipset=/.adult-sex-games.com/gfwlist -server=/.adultfriendfinder.com/127.0.0.1#5335 -ipset=/.adultfriendfinder.com/gfwlist -server=/.advanscene.com/127.0.0.1#5335 -ipset=/.advanscene.com/gfwlist -server=/.advertfan.com/127.0.0.1#5335 -ipset=/.advertfan.com/gfwlist -server=/.ae.hao123.com/127.0.0.1#5335 -ipset=/.ae.hao123.com/gfwlist -server=/.ae.org/127.0.0.1#5335 -ipset=/.ae.org/gfwlist -server=/.aenhancers.com/127.0.0.1#5335 -ipset=/.aenhancers.com/gfwlist -server=/.aex.com/127.0.0.1#5335 -ipset=/.aex.com/gfwlist -server=/.af.mil/127.0.0.1#5335 -ipset=/.af.mil/gfwlist -server=/.afantibbs.com/127.0.0.1#5335 -ipset=/.afantibbs.com/gfwlist -server=/.agnesb.fr/127.0.0.1#5335 -ipset=/.agnesb.fr/gfwlist -server=/.agoogleaday.com/127.0.0.1#5335 -ipset=/.agoogleaday.com/gfwlist -server=/.agro.hk/127.0.0.1#5335 -ipset=/.agro.hk/gfwlist -server=/.ai-kan.net/127.0.0.1#5335 -ipset=/.ai-kan.net/gfwlist -server=/.ai-wen.net/127.0.0.1#5335 -ipset=/.ai-wen.net/gfwlist -server=/.ai.google/127.0.0.1#5335 -ipset=/.ai.google/gfwlist -server=/.aiph.net/127.0.0.1#5335 -ipset=/.aiph.net/gfwlist -server=/.airasia.com/127.0.0.1#5335 -ipset=/.airasia.com/gfwlist -server=/.airconsole.com/127.0.0.1#5335 -ipset=/.airconsole.com/gfwlist -server=/.airvpn.org/127.0.0.1#5335 -ipset=/.airvpn.org/gfwlist -server=/.aisex.com/127.0.0.1#5335 -ipset=/.aisex.com/gfwlist -server=/.aiss.anws.gov.tw/127.0.0.1#5335 -ipset=/.aiss.anws.gov.tw/gfwlist -server=/.ait.org.tw/127.0.0.1#5335 -ipset=/.ait.org.tw/gfwlist -server=/.aiweiwei.com/127.0.0.1#5335 -ipset=/.aiweiwei.com/gfwlist -server=/.aiweiweiblog.com/127.0.0.1#5335 -ipset=/.aiweiweiblog.com/gfwlist -server=/.akiba-online.com/127.0.0.1#5335 -ipset=/.akiba-online.com/gfwlist -server=/.akiba-web.com/127.0.0.1#5335 -ipset=/.akiba-web.com/gfwlist -server=/.akow.org/127.0.0.1#5335 -ipset=/.akow.org/gfwlist -server=/.al-islam.com/127.0.0.1#5335 -ipset=/.al-islam.com/gfwlist -server=/.al-qimmah.net/127.0.0.1#5335 -ipset=/.al-qimmah.net/gfwlist -server=/.alabout.com/127.0.0.1#5335 -ipset=/.alabout.com/gfwlist -server=/.alanhou.com/127.0.0.1#5335 -ipset=/.alanhou.com/gfwlist -server=/.alarab.qa/127.0.0.1#5335 -ipset=/.alarab.qa/gfwlist -server=/.alasbarricadas.org/127.0.0.1#5335 -ipset=/.alasbarricadas.org/gfwlist -server=/.alexlur.org/127.0.0.1#5335 -ipset=/.alexlur.org/gfwlist -server=/.alforattv.net/127.0.0.1#5335 -ipset=/.alforattv.net/gfwlist -server=/.alhayat.com/127.0.0.1#5335 -ipset=/.alhayat.com/gfwlist -server=/.alicejapan.co.jp/127.0.0.1#5335 -ipset=/.alicejapan.co.jp/gfwlist -server=/.aliengu.com/127.0.0.1#5335 -ipset=/.aliengu.com/gfwlist -server=/.alkasir.com/127.0.0.1#5335 -ipset=/.alkasir.com/gfwlist -server=/.all4mom.org/127.0.0.1#5335 -ipset=/.all4mom.org/gfwlist -server=/.allcoin.com/127.0.0.1#5335 -ipset=/.allcoin.com/gfwlist -server=/.allconnected.co/127.0.0.1#5335 -ipset=/.allconnected.co/gfwlist -server=/.alldrawnsex.com/127.0.0.1#5335 -ipset=/.alldrawnsex.com/gfwlist -server=/.allervpn.com/127.0.0.1#5335 -ipset=/.allervpn.com/gfwlist -server=/.allfinegirls.com/127.0.0.1#5335 -ipset=/.allfinegirls.com/gfwlist -server=/.allgirlmassage.com/127.0.0.1#5335 -ipset=/.allgirlmassage.com/gfwlist -server=/.allgirlsallowed.org/127.0.0.1#5335 -ipset=/.allgirlsallowed.org/gfwlist -server=/.allgravure.com/127.0.0.1#5335 -ipset=/.allgravure.com/gfwlist -server=/.alliance.org.hk/127.0.0.1#5335 -ipset=/.alliance.org.hk/gfwlist -server=/.allinfa.com/127.0.0.1#5335 -ipset=/.allinfa.com/gfwlist -server=/.alljackpotscasino.com/127.0.0.1#5335 -ipset=/.alljackpotscasino.com/gfwlist -server=/.allmovie.com/127.0.0.1#5335 -ipset=/.allmovie.com/gfwlist -server=/.allowed.org/127.0.0.1#5335 -ipset=/.allowed.org/gfwlist -server=/.almasdarnews.com/127.0.0.1#5335 -ipset=/.almasdarnews.com/gfwlist -server=/.almostmy.com/127.0.0.1#5335 -ipset=/.almostmy.com/gfwlist -server=/.alphaporno.com/127.0.0.1#5335 -ipset=/.alphaporno.com/gfwlist -server=/.alternate-tools.com/127.0.0.1#5335 -ipset=/.alternate-tools.com/gfwlist -server=/.altrec.com/127.0.0.1#5335 -ipset=/.altrec.com/gfwlist -server=/.alvinalexander.com/127.0.0.1#5335 -ipset=/.alvinalexander.com/gfwlist -server=/.alwaysdata.com/127.0.0.1#5335 -ipset=/.alwaysdata.com/gfwlist -server=/.alwaysdata.net/127.0.0.1#5335 -ipset=/.alwaysdata.net/gfwlist -server=/.alwaysvpn.com/127.0.0.1#5335 -ipset=/.alwaysvpn.com/gfwlist -server=/.am730.com.hk/127.0.0.1#5335 -ipset=/.am730.com.hk/gfwlist -server=/.amazon.co.jp/127.0.0.1#5335 -ipset=/.amazon.co.jp/gfwlist -server=/.ameblo.jp/127.0.0.1#5335 -ipset=/.ameblo.jp/gfwlist -server=/.americangreencard.com/127.0.0.1#5335 -ipset=/.americangreencard.com/gfwlist -server=/.americanunfinished.com/127.0.0.1#5335 -ipset=/.americanunfinished.com/gfwlist -server=/.amiblockedornot.com/127.0.0.1#5335 -ipset=/.amiblockedornot.com/gfwlist -server=/.amigobbs.net/127.0.0.1#5335 -ipset=/.amigobbs.net/gfwlist -server=/.amitabhafoundation.us/127.0.0.1#5335 -ipset=/.amitabhafoundation.us/gfwlist -server=/.amnesty.org/127.0.0.1#5335 -ipset=/.amnesty.org/gfwlist -server=/.amnesty.tw/127.0.0.1#5335 -ipset=/.amnesty.tw/gfwlist -server=/.amnestyusa.org/127.0.0.1#5335 -ipset=/.amnestyusa.org/gfwlist -server=/.amnyemachen.org/127.0.0.1#5335 -ipset=/.amnyemachen.org/gfwlist -server=/.amoiist.com/127.0.0.1#5335 -ipset=/.amoiist.com/gfwlist -server=/.ampproject.org/127.0.0.1#5335 -ipset=/.ampproject.org/gfwlist -server=/.amtb-taipei.org/127.0.0.1#5335 -ipset=/.amtb-taipei.org/gfwlist -server=/.anchorfree.com/127.0.0.1#5335 -ipset=/.anchorfree.com/gfwlist -server=/.ancsconf.org/127.0.0.1#5335 -ipset=/.ancsconf.org/gfwlist -server=/.andfaraway.net/127.0.0.1#5335 -ipset=/.andfaraway.net/gfwlist -server=/.android-x86.org/127.0.0.1#5335 -ipset=/.android-x86.org/gfwlist -server=/.android.com/127.0.0.1#5335 -ipset=/.android.com/gfwlist -server=/.androidify.com/127.0.0.1#5335 -ipset=/.androidify.com/gfwlist -server=/.androidtv.com/127.0.0.1#5335 -ipset=/.androidtv.com/gfwlist -server=/.andygod.com/127.0.0.1#5335 -ipset=/.andygod.com/gfwlist -server=/.angela-merkel.de/127.0.0.1#5335 -ipset=/.angela-merkel.de/gfwlist -server=/.angola.org/127.0.0.1#5335 -ipset=/.angola.org/gfwlist -server=/.angularjs.org/127.0.0.1#5335 -ipset=/.angularjs.org/gfwlist -server=/.animecrazy.net/127.0.0.1#5335 -ipset=/.animecrazy.net/gfwlist -server=/.animeshippuuden.com/127.0.0.1#5335 -ipset=/.animeshippuuden.com/gfwlist -server=/.aniscartujo.com/127.0.0.1#5335 -ipset=/.aniscartujo.com/gfwlist -server=/.anobii.com/127.0.0.1#5335 -ipset=/.anobii.com/gfwlist -server=/.anontext.com/127.0.0.1#5335 -ipset=/.anontext.com/gfwlist -server=/.anonymise.us/127.0.0.1#5335 -ipset=/.anonymise.us/gfwlist -server=/.anonymitynetwork.com/127.0.0.1#5335 -ipset=/.anonymitynetwork.com/gfwlist -server=/.anonymizer.com/127.0.0.1#5335 -ipset=/.anonymizer.com/gfwlist -server=/.anonymouse.org/127.0.0.1#5335 -ipset=/.anonymouse.org/gfwlist -server=/.anpopo.com/127.0.0.1#5335 -ipset=/.anpopo.com/gfwlist -server=/.answering-islam.org/127.0.0.1#5335 -ipset=/.answering-islam.org/gfwlist -server=/.anthonycalzadilla.com/127.0.0.1#5335 -ipset=/.anthonycalzadilla.com/gfwlist -server=/.anti1984.com/127.0.0.1#5335 -ipset=/.anti1984.com/gfwlist -server=/.antichristendom.com/127.0.0.1#5335 -ipset=/.antichristendom.com/gfwlist -server=/.antiwave.net/127.0.0.1#5335 -ipset=/.antiwave.net/gfwlist -server=/.anyporn.com/127.0.0.1#5335 -ipset=/.anyporn.com/gfwlist -server=/.anysex.com/127.0.0.1#5335 -ipset=/.anysex.com/gfwlist -server=/.ao3.org/127.0.0.1#5335 -ipset=/.ao3.org/gfwlist -server=/.aobo.com.au/127.0.0.1#5335 -ipset=/.aobo.com.au/gfwlist -server=/.aofriend.com/127.0.0.1#5335 -ipset=/.aofriend.com/gfwlist -server=/.aojiao.org/127.0.0.1#5335 -ipset=/.aojiao.org/gfwlist -server=/.aolchannels.aol.com/127.0.0.1#5335 -ipset=/.aolchannels.aol.com/gfwlist -server=/.aomiwang.com/127.0.0.1#5335 -ipset=/.aomiwang.com/gfwlist -server=/.apartmentratings.com/127.0.0.1#5335 -ipset=/.apartmentratings.com/gfwlist -server=/.apartments.com/127.0.0.1#5335 -ipset=/.apartments.com/gfwlist -server=/.apetube.com/127.0.0.1#5335 -ipset=/.apetube.com/gfwlist -server=/.api-secure.recaptcha.net/127.0.0.1#5335 -ipset=/.api-secure.recaptcha.net/gfwlist -server=/.api-verify.recaptcha.net/127.0.0.1#5335 -ipset=/.api-verify.recaptcha.net/gfwlist -server=/.api.ai/127.0.0.1#5335 -ipset=/.api.ai/gfwlist -server=/.api.dropboxapi.com/127.0.0.1#5335 -ipset=/.api.dropboxapi.com/gfwlist -server=/.api.linksalpha.com/127.0.0.1#5335 -ipset=/.api.linksalpha.com/gfwlist -server=/.api.proxlet.com/127.0.0.1#5335 -ipset=/.api.proxlet.com/gfwlist -server=/.api.pureapk.com/127.0.0.1#5335 -ipset=/.api.pureapk.com/gfwlist -server=/.api.recaptcha.net/127.0.0.1#5335 -ipset=/.api.recaptcha.net/gfwlist -server=/.apiary.io/127.0.0.1#5335 -ipset=/.apiary.io/gfwlist -server=/.apidocs.linksalpha.com/127.0.0.1#5335 -ipset=/.apidocs.linksalpha.com/gfwlist -server=/.apigee.com/127.0.0.1#5335 -ipset=/.apigee.com/gfwlist -server=/.apk-dl.com/127.0.0.1#5335 -ipset=/.apk-dl.com/gfwlist -server=/.apkcombo.com/127.0.0.1#5335 -ipset=/.apkcombo.com/gfwlist -server=/.apkmirror.com/127.0.0.1#5335 -ipset=/.apkmirror.com/gfwlist -server=/.apkplz.com/127.0.0.1#5335 -ipset=/.apkplz.com/gfwlist -server=/.apkpure.com/127.0.0.1#5335 -ipset=/.apkpure.com/gfwlist -server=/.aplusvpn.com/127.0.0.1#5335 -ipset=/.aplusvpn.com/gfwlist -server=/.app.box.com/127.0.0.1#5335 -ipset=/.app.box.com/gfwlist -server=/.app.heywire.com/127.0.0.1#5335 -ipset=/.app.heywire.com/gfwlist -server=/.app.smartmailcloud.com/127.0.0.1#5335 -ipset=/.app.smartmailcloud.com/gfwlist -server=/.app.tutanota.com/127.0.0.1#5335 -ipset=/.app.tutanota.com/gfwlist -server=/.appledaily.com/127.0.0.1#5335 -ipset=/.appledaily.com/gfwlist -server=/.appshopper.com/127.0.0.1#5335 -ipset=/.appshopper.com/gfwlist -server=/.appsocks.net/127.0.0.1#5335 -ipset=/.appsocks.net/gfwlist -server=/.appspot.com/127.0.0.1#5335 -ipset=/.appspot.com/gfwlist -server=/.appsto.re/127.0.0.1#5335 -ipset=/.appsto.re/gfwlist -server=/.aptoide.com/127.0.0.1#5335 -ipset=/.aptoide.com/gfwlist -server=/.ar.hao123.com/127.0.0.1#5335 -ipset=/.ar.hao123.com/gfwlist -server=/.archive.fo/127.0.0.1#5335 -ipset=/.archive.fo/gfwlist -server=/.archive.is/127.0.0.1#5335 -ipset=/.archive.is/gfwlist -server=/.archive.li/127.0.0.1#5335 -ipset=/.archive.li/gfwlist -server=/.archive.org/127.0.0.1#5335 -ipset=/.archive.org/gfwlist -server=/.archive.ph/127.0.0.1#5335 -ipset=/.archive.ph/gfwlist -server=/.archive.today/127.0.0.1#5335 -ipset=/.archive.today/gfwlist -server=/.archiveofourown.com/127.0.0.1#5335 -ipset=/.archiveofourown.com/gfwlist -server=/.archiveofourown.org/127.0.0.1#5335 -ipset=/.archiveofourown.org/gfwlist -server=/.archives.gov/127.0.0.1#5335 -ipset=/.archives.gov/gfwlist -server=/.arctosia.com/127.0.0.1#5335 -ipset=/.arctosia.com/gfwlist -server=/.areca-backup.org/127.0.0.1#5335 -ipset=/.areca-backup.org/gfwlist -server=/.arena.taipei/127.0.0.1#5335 -ipset=/.arena.taipei/gfwlist -server=/.arethusa.su/127.0.0.1#5335 -ipset=/.arethusa.su/gfwlist -server=/.arlingtoncemetery.mil/127.0.0.1#5335 -ipset=/.arlingtoncemetery.mil/gfwlist -server=/.army.mil/127.0.0.1#5335 -ipset=/.army.mil/gfwlist -server=/.art4tibet1998.org/127.0.0.1#5335 -ipset=/.art4tibet1998.org/gfwlist -server=/.arte.tv/127.0.0.1#5335 -ipset=/.arte.tv/gfwlist -server=/.artofpeacefoundation.org/127.0.0.1#5335 -ipset=/.artofpeacefoundation.org/gfwlist -server=/.artstation.com/127.0.0.1#5335 -ipset=/.artstation.com/gfwlist -server=/.artsy.net/127.0.0.1#5335 -ipset=/.artsy.net/gfwlist -server=/.asacp.org/127.0.0.1#5335 -ipset=/.asacp.org/gfwlist -server=/.asg.to/127.0.0.1#5335 -ipset=/.asg.to/gfwlist -server=/.asia-gaming.com/127.0.0.1#5335 -ipset=/.asia-gaming.com/gfwlist -server=/.asiaharvest.org/127.0.0.1#5335 -ipset=/.asiaharvest.org/gfwlist -server=/.asianews.it/127.0.0.1#5335 -ipset=/.asianews.it/gfwlist -server=/.asiansexdiary.com/127.0.0.1#5335 -ipset=/.asiansexdiary.com/gfwlist -server=/.asianspiss.com/127.0.0.1#5335 -ipset=/.asianspiss.com/gfwlist -server=/.asianwomensfilm.de/127.0.0.1#5335 -ipset=/.asianwomensfilm.de/gfwlist -server=/.asiatgp.com/127.0.0.1#5335 -ipset=/.asiatgp.com/gfwlist -server=/.asiatoday.us/127.0.0.1#5335 -ipset=/.asiatoday.us/gfwlist -server=/.askstudent.com/127.0.0.1#5335 -ipset=/.askstudent.com/gfwlist -server=/.askynz.net/127.0.0.1#5335 -ipset=/.askynz.net/gfwlist -server=/.assembla.com/127.0.0.1#5335 -ipset=/.assembla.com/gfwlist -server=/.assets.bwbx.io/127.0.0.1#5335 -ipset=/.assets.bwbx.io/gfwlist -server=/.assimp.org/127.0.0.1#5335 -ipset=/.assimp.org/gfwlist -server=/.astrill.com/127.0.0.1#5335 -ipset=/.astrill.com/gfwlist -server=/.atc.org.au/127.0.0.1#5335 -ipset=/.atc.org.au/gfwlist -server=/.atchinese.com/127.0.0.1#5335 -ipset=/.atchinese.com/gfwlist -server=/.atdmt.com/127.0.0.1#5335 -ipset=/.atdmt.com/gfwlist -server=/.atgfw.org/127.0.0.1#5335 -ipset=/.atgfw.org/gfwlist -server=/.athenaeizou.com/127.0.0.1#5335 -ipset=/.athenaeizou.com/gfwlist -server=/.atlaspost.com/127.0.0.1#5335 -ipset=/.atlaspost.com/gfwlist -server=/.atnext.com/127.0.0.1#5335 -ipset=/.atnext.com/gfwlist -server=/.authorizeddns.net/127.0.0.1#5335 -ipset=/.authorizeddns.net/gfwlist -server=/.authorizeddns.org/127.0.0.1#5335 -ipset=/.authorizeddns.org/gfwlist -server=/.authorizeddns.us/127.0.0.1#5335 -ipset=/.authorizeddns.us/gfwlist -server=/.autodraw.com/127.0.0.1#5335 -ipset=/.autodraw.com/gfwlist -server=/.av-e-body.com/127.0.0.1#5335 -ipset=/.av-e-body.com/gfwlist -server=/.av.com/127.0.0.1#5335 -ipset=/.av.com/gfwlist -server=/.av.movie/127.0.0.1#5335 -ipset=/.av.movie/gfwlist -server=/.av.nightlife141.com/127.0.0.1#5335 -ipset=/.av.nightlife141.com/gfwlist -server=/.avaaz.org/127.0.0.1#5335 -ipset=/.avaaz.org/gfwlist -server=/.avbody.tv/127.0.0.1#5335 -ipset=/.avbody.tv/gfwlist -server=/.avcity.tv/127.0.0.1#5335 -ipset=/.avcity.tv/gfwlist -server=/.avcool.com/127.0.0.1#5335 -ipset=/.avcool.com/gfwlist -server=/.avdb.in/127.0.0.1#5335 -ipset=/.avdb.in/gfwlist -server=/.avdb.tv/127.0.0.1#5335 -ipset=/.avdb.tv/gfwlist -server=/.avfantasy.com/127.0.0.1#5335 -ipset=/.avfantasy.com/gfwlist -server=/.avg.com/127.0.0.1#5335 -ipset=/.avg.com/gfwlist -server=/.avgle.com/127.0.0.1#5335 -ipset=/.avgle.com/gfwlist -server=/.avidemux.org/127.0.0.1#5335 -ipset=/.avidemux.org/gfwlist -server=/.avmo.pw/127.0.0.1#5335 -ipset=/.avmo.pw/gfwlist -server=/.avmoo.com/127.0.0.1#5335 -ipset=/.avmoo.com/gfwlist -server=/.avmoo.net/127.0.0.1#5335 -ipset=/.avmoo.net/gfwlist -server=/.avmoo.pw/127.0.0.1#5335 -ipset=/.avmoo.pw/gfwlist -server=/.avoision.com/127.0.0.1#5335 -ipset=/.avoision.com/gfwlist -server=/.avyahoo.com/127.0.0.1#5335 -ipset=/.avyahoo.com/gfwlist -server=/.axureformac.com/127.0.0.1#5335 -ipset=/.axureformac.com/gfwlist -server=/.azerbaycan.tv/127.0.0.1#5335 -ipset=/.azerbaycan.tv/gfwlist -server=/.azerimix.com/127.0.0.1#5335 -ipset=/.azerimix.com/gfwlist -server=/.azubu.tv/127.0.0.1#5335 -ipset=/.azubu.tv/gfwlist -server=/.b0ne.com/127.0.0.1#5335 -ipset=/.b0ne.com/gfwlist -server=/.babynet.com.hk/127.0.0.1#5335 -ipset=/.babynet.com.hk/gfwlist -server=/.backchina.com/127.0.0.1#5335 -ipset=/.backchina.com/gfwlist -server=/.backtotiananmen.com/127.0.0.1#5335 -ipset=/.backtotiananmen.com/gfwlist -server=/.badiucao.com/127.0.0.1#5335 -ipset=/.badiucao.com/gfwlist -server=/.badjojo.com/127.0.0.1#5335 -ipset=/.badjojo.com/gfwlist -server=/.badoo.com/127.0.0.1#5335 -ipset=/.badoo.com/gfwlist -server=/.baidu.jp/127.0.0.1#5335 -ipset=/.baidu.jp/gfwlist -server=/.baijie.org/127.0.0.1#5335 -ipset=/.baijie.org/gfwlist -server=/.bailandaily.com/127.0.0.1#5335 -ipset=/.bailandaily.com/gfwlist -server=/.baixing.me/127.0.0.1#5335 -ipset=/.baixing.me/gfwlist -server=/.bakgeekhome.tk/127.0.0.1#5335 -ipset=/.bakgeekhome.tk/gfwlist -server=/.banana-vpn.com/127.0.0.1#5335 -ipset=/.banana-vpn.com/gfwlist -server=/.band.us/127.0.0.1#5335 -ipset=/.band.us/gfwlist -server=/.bandwagonhost.com/127.0.0.1#5335 -ipset=/.bandwagonhost.com/gfwlist -server=/.bangbrosnetwork.com/127.0.0.1#5335 -ipset=/.bangbrosnetwork.com/gfwlist -server=/.bangchen.net/127.0.0.1#5335 -ipset=/.bangchen.net/gfwlist -server=/.bangdream.space/127.0.0.1#5335 -ipset=/.bangdream.space/gfwlist -server=/.bangyoulater.com/127.0.0.1#5335 -ipset=/.bangyoulater.com/gfwlist -server=/.bankmobilevibe.com/127.0.0.1#5335 -ipset=/.bankmobilevibe.com/gfwlist -server=/.bannedbook.org/127.0.0.1#5335 -ipset=/.bannedbook.org/gfwlist -server=/.bannednews.org/127.0.0.1#5335 -ipset=/.bannednews.org/gfwlist -server=/.banorte.com/127.0.0.1#5335 -ipset=/.banorte.com/gfwlist -server=/.baramangaonline.com/127.0.0.1#5335 -ipset=/.baramangaonline.com/gfwlist -server=/.barenakedislam.com/127.0.0.1#5335 -ipset=/.barenakedislam.com/gfwlist -server=/.barnabu.co.uk/127.0.0.1#5335 -ipset=/.barnabu.co.uk/gfwlist -server=/.barton.de/127.0.0.1#5335 -ipset=/.barton.de/gfwlist -server=/.bartvpn.com/127.0.0.1#5335 -ipset=/.bartvpn.com/gfwlist -server=/.bash-hackers.org/127.0.0.1#5335 -ipset=/.bash-hackers.org/gfwlist -server=/.bastillepost.com/127.0.0.1#5335 -ipset=/.bastillepost.com/gfwlist -server=/.bayvoice.net/127.0.0.1#5335 -ipset=/.bayvoice.net/gfwlist -server=/.bb-chat.tv/127.0.0.1#5335 -ipset=/.bb-chat.tv/gfwlist -server=/.bbc.co.uk/127.0.0.1#5335 -ipset=/.bbc.co.uk/gfwlist -server=/.bbc.com/127.0.0.1#5335 -ipset=/.bbc.com/gfwlist -server=/.bbc.in/127.0.0.1#5335 -ipset=/.bbc.in/gfwlist -server=/.bbcchinese.com/127.0.0.1#5335 -ipset=/.bbcchinese.com/gfwlist -server=/.bbchat.tv/127.0.0.1#5335 -ipset=/.bbchat.tv/gfwlist -server=/.bbci.co.uk/127.0.0.1#5335 -ipset=/.bbci.co.uk/gfwlist -server=/.bbg.gov/127.0.0.1#5335 -ipset=/.bbg.gov/gfwlist -server=/.bbnradio.org/127.0.0.1#5335 -ipset=/.bbnradio.org/gfwlist -server=/.bbs-tw.com/127.0.0.1#5335 -ipset=/.bbs-tw.com/gfwlist -server=/.bbs.brockbbs.com/127.0.0.1#5335 -ipset=/.bbs.brockbbs.com/gfwlist -server=/.bbs.ecstart.com/127.0.0.1#5335 -ipset=/.bbs.ecstart.com/gfwlist -server=/.bbs.hasi.wang/127.0.0.1#5335 -ipset=/.bbs.hasi.wang/gfwlist -server=/.bbs.huasing.org/127.0.0.1#5335 -ipset=/.bbs.huasing.org/gfwlist -server=/.bbs.junglobal.net/127.0.0.1#5335 -ipset=/.bbs.junglobal.net/gfwlist -server=/.bbs.kimy.com.tw/127.0.0.1#5335 -ipset=/.bbs.kimy.com.tw/gfwlist -server=/.bbs.mikocon.com/127.0.0.1#5335 -ipset=/.bbs.mikocon.com/gfwlist -server=/.bbs.morbell.com/127.0.0.1#5335 -ipset=/.bbs.morbell.com/gfwlist -server=/.bbs.mychat.to/127.0.0.1#5335 -ipset=/.bbs.mychat.to/gfwlist -server=/.bbs.netbig.com/127.0.0.1#5335 -ipset=/.bbs.netbig.com/gfwlist -server=/.bbs.ozchinese.com/127.0.0.1#5335 -ipset=/.bbs.ozchinese.com/gfwlist -server=/.bbs.qmzdd.com/127.0.0.1#5335 -ipset=/.bbs.qmzdd.com/gfwlist -server=/.bbs.skykiwi.com/127.0.0.1#5335 -ipset=/.bbs.skykiwi.com/gfwlist -server=/.bbs.sou-tong.org/127.0.0.1#5335 -ipset=/.bbs.sou-tong.org/gfwlist -server=/.bbs.tuitui.info/127.0.0.1#5335 -ipset=/.bbs.tuitui.info/gfwlist -server=/.bbsfeed.com/127.0.0.1#5335 -ipset=/.bbsfeed.com/gfwlist -server=/.bbsland.com/127.0.0.1#5335 -ipset=/.bbsland.com/gfwlist -server=/.bbsmo.com/127.0.0.1#5335 -ipset=/.bbsmo.com/gfwlist -server=/.bbsone.com/127.0.0.1#5335 -ipset=/.bbsone.com/gfwlist -server=/.bbtoystore.com/127.0.0.1#5335 -ipset=/.bbtoystore.com/gfwlist -server=/.bcast.co.nz/127.0.0.1#5335 -ipset=/.bcast.co.nz/gfwlist -server=/.bcchinese.net/127.0.0.1#5335 -ipset=/.bcchinese.net/gfwlist -server=/.bcex.ca/127.0.0.1#5335 -ipset=/.bcex.ca/gfwlist -server=/.bcmorning.com/127.0.0.1#5335 -ipset=/.bcmorning.com/gfwlist -server=/.bdsmvideos.net/127.0.0.1#5335 -ipset=/.bdsmvideos.net/gfwlist -server=/.beaconevents.com/127.0.0.1#5335 -ipset=/.beaconevents.com/gfwlist -server=/.bebo.com/127.0.0.1#5335 -ipset=/.bebo.com/gfwlist -server=/.beeg.com/127.0.0.1#5335 -ipset=/.beeg.com/gfwlist -server=/.beevpn.com/127.0.0.1#5335 -ipset=/.beevpn.com/gfwlist -server=/.behance.net/127.0.0.1#5335 -ipset=/.behance.net/gfwlist -server=/.behindkink.com/127.0.0.1#5335 -ipset=/.behindkink.com/gfwlist -server=/.beijing1989.com/127.0.0.1#5335 -ipset=/.beijing1989.com/gfwlist -server=/.beijingspring.com/127.0.0.1#5335 -ipset=/.beijingspring.com/gfwlist -server=/.beijingzx.org/127.0.0.1#5335 -ipset=/.beijingzx.org/gfwlist -server=/.belamionline.com/127.0.0.1#5335 -ipset=/.belamionline.com/gfwlist -server=/.bell.wiki/127.0.0.1#5335 -ipset=/.bell.wiki/gfwlist -server=/.bemywife.cc/127.0.0.1#5335 -ipset=/.bemywife.cc/gfwlist -server=/.beric.me/127.0.0.1#5335 -ipset=/.beric.me/gfwlist -server=/.berlintwitterwall.com/127.0.0.1#5335 -ipset=/.berlintwitterwall.com/gfwlist -server=/.berm.co.nz/127.0.0.1#5335 -ipset=/.berm.co.nz/gfwlist -server=/.bestforchina.org/127.0.0.1#5335 -ipset=/.bestforchina.org/gfwlist -server=/.bestgore.com/127.0.0.1#5335 -ipset=/.bestgore.com/gfwlist -server=/.bestpornstardb.com/127.0.0.1#5335 -ipset=/.bestpornstardb.com/gfwlist -server=/.bestvpn.com/127.0.0.1#5335 -ipset=/.bestvpn.com/gfwlist -server=/.bestvpnanalysis.com/127.0.0.1#5335 -ipset=/.bestvpnanalysis.com/gfwlist -server=/.bestvpnserver.com/127.0.0.1#5335 -ipset=/.bestvpnserver.com/gfwlist -server=/.bestvpnservice.com/127.0.0.1#5335 -ipset=/.bestvpnservice.com/gfwlist -server=/.bestvpnusa.com/127.0.0.1#5335 -ipset=/.bestvpnusa.com/gfwlist -server=/.bet365.com/127.0.0.1#5335 -ipset=/.bet365.com/gfwlist -server=/.betfair.com/127.0.0.1#5335 -ipset=/.betfair.com/gfwlist -server=/.betternet.co/127.0.0.1#5335 -ipset=/.betternet.co/gfwlist -server=/.bettervpn.com/127.0.0.1#5335 -ipset=/.bettervpn.com/gfwlist -server=/.bettween.com/127.0.0.1#5335 -ipset=/.bettween.com/gfwlist -server=/.betvictor.com/127.0.0.1#5335 -ipset=/.betvictor.com/gfwlist -server=/.bewww.net/127.0.0.1#5335 -ipset=/.bewww.net/gfwlist -server=/.beyondfirewall.com/127.0.0.1#5335 -ipset=/.beyondfirewall.com/gfwlist -server=/.bfnn.org/127.0.0.1#5335 -ipset=/.bfnn.org/gfwlist -server=/.bfsh.hk/127.0.0.1#5335 -ipset=/.bfsh.hk/gfwlist -server=/.bgvpn.com/127.0.0.1#5335 -ipset=/.bgvpn.com/gfwlist -server=/.bianlei.com/127.0.0.1#5335 -ipset=/.bianlei.com/gfwlist -server=/.biantailajiao.com/127.0.0.1#5335 -ipset=/.biantailajiao.com/gfwlist -server=/.biantailajiao.in/127.0.0.1#5335 -ipset=/.biantailajiao.in/gfwlist -server=/.biblesforamerica.org/127.0.0.1#5335 -ipset=/.biblesforamerica.org/gfwlist -server=/.bibox.com/127.0.0.1#5335 -ipset=/.bibox.com/gfwlist -server=/.bic2011.org/127.0.0.1#5335 -ipset=/.bic2011.org/gfwlist -server=/.big.one/127.0.0.1#5335 -ipset=/.big.one/gfwlist -server=/.bigfools.com/127.0.0.1#5335 -ipset=/.bigfools.com/gfwlist -server=/.bigjapanesesex.com/127.0.0.1#5335 -ipset=/.bigjapanesesex.com/gfwlist -server=/.bigmoney.biz/127.0.0.1#5335 -ipset=/.bigmoney.biz/gfwlist -server=/.bignews.org/127.0.0.1#5335 -ipset=/.bignews.org/gfwlist -server=/.bigsound.org/127.0.0.1#5335 -ipset=/.bigsound.org/gfwlist -server=/.biliworld.com/127.0.0.1#5335 -ipset=/.biliworld.com/gfwlist -server=/.binance.com/127.0.0.1#5335 -ipset=/.binance.com/gfwlist -server=/.binux.me/127.0.0.1#5335 -ipset=/.binux.me/gfwlist -server=/.bipic.net/127.0.0.1#5335 -ipset=/.bipic.net/gfwlist -server=/.bird.so/127.0.0.1#5335 -ipset=/.bird.so/gfwlist -server=/.bit-z.com/127.0.0.1#5335 -ipset=/.bit-z.com/gfwlist -server=/.bit.do/127.0.0.1#5335 -ipset=/.bit.do/gfwlist -server=/.bit.ly/127.0.0.1#5335 -ipset=/.bit.ly/gfwlist -server=/.bitcointalk.org/127.0.0.1#5335 -ipset=/.bitcointalk.org/gfwlist -server=/.bitcoinworld.com/127.0.0.1#5335 -ipset=/.bitcoinworld.com/gfwlist -server=/.bitfinex.com/127.0.0.1#5335 -ipset=/.bitfinex.com/gfwlist -server=/.bithumb.com/127.0.0.1#5335 -ipset=/.bithumb.com/gfwlist -server=/.bitinka.com.ar/127.0.0.1#5335 -ipset=/.bitinka.com.ar/gfwlist -server=/.bitmex.com/127.0.0.1#5335 -ipset=/.bitmex.com/gfwlist -server=/.bitshare.com/127.0.0.1#5335 -ipset=/.bitshare.com/gfwlist -server=/.bitsnoop.com/127.0.0.1#5335 -ipset=/.bitsnoop.com/gfwlist -server=/.bitvise.com/127.0.0.1#5335 -ipset=/.bitvise.com/gfwlist -server=/.bizhat.com/127.0.0.1#5335 -ipset=/.bizhat.com/gfwlist -server=/.bjnewlife.org/127.0.0.1#5335 -ipset=/.bjnewlife.org/gfwlist -server=/.bjs.org/127.0.0.1#5335 -ipset=/.bjs.org/gfwlist -server=/.bjzc.org/127.0.0.1#5335 -ipset=/.bjzc.org/gfwlist -server=/.bl-doujinsouko.com/127.0.0.1#5335 -ipset=/.bl-doujinsouko.com/gfwlist -server=/.blacklogic.com/127.0.0.1#5335 -ipset=/.blacklogic.com/gfwlist -server=/.blackvpn.com/127.0.0.1#5335 -ipset=/.blackvpn.com/gfwlist -server=/.blewpass.com/127.0.0.1#5335 -ipset=/.blewpass.com/gfwlist -server=/.blinkx.com/127.0.0.1#5335 -ipset=/.blinkx.com/gfwlist -server=/.blinw.com/127.0.0.1#5335 -ipset=/.blinw.com/gfwlist -server=/.blip.tv/127.0.0.1#5335 -ipset=/.blip.tv/gfwlist -server=/.blockcn.com/127.0.0.1#5335 -ipset=/.blockcn.com/gfwlist -server=/.blockless.com/127.0.0.1#5335 -ipset=/.blockless.com/gfwlist -server=/.blog.calibre-ebook.com/127.0.0.1#5335 -ipset=/.blog.calibre-ebook.com/gfwlist -server=/.blog.cnyes.com/127.0.0.1#5335 -ipset=/.blog.cnyes.com/gfwlist -server=/.blog.de/127.0.0.1#5335 -ipset=/.blog.de/gfwlist -server=/.blog.exblog.co.jp/127.0.0.1#5335 -ipset=/.blog.exblog.co.jp/gfwlist -server=/.blog.excite.co.jp/127.0.0.1#5335 -ipset=/.blog.excite.co.jp/gfwlist -server=/.blog.expofutures.com/127.0.0.1#5335 -ipset=/.blog.expofutures.com/gfwlist -server=/.blog.fizzik.com/127.0.0.1#5335 -ipset=/.blog.fizzik.com/gfwlist -server=/.blog.foolsmountain.com/127.0.0.1#5335 -ipset=/.blog.foolsmountain.com/gfwlist -server=/.blog.fuckgfw233.org/127.0.0.1#5335 -ipset=/.blog.fuckgfw233.org/gfwlist -server=/.blog.google/127.0.0.1#5335 -ipset=/.blog.google/gfwlist -server=/.blog.inoreader.com/127.0.0.1#5335 -ipset=/.blog.inoreader.com/gfwlist -server=/.blog.jackjia.com/127.0.0.1#5335 -ipset=/.blog.jackjia.com/gfwlist -server=/.blog.jp/127.0.0.1#5335 -ipset=/.blog.jp/gfwlist -server=/.blog.kangye.org/127.0.0.1#5335 -ipset=/.blog.kangye.org/gfwlist -server=/.blog.lester850.info/127.0.0.1#5335 -ipset=/.blog.lester850.info/gfwlist -server=/.blog.martinoei.com/127.0.0.1#5335 -ipset=/.blog.martinoei.com/gfwlist -server=/.blog.pathtosharepoint.com/127.0.0.1#5335 -ipset=/.blog.pathtosharepoint.com/gfwlist -server=/.blog.pentalogic.net/127.0.0.1#5335 -ipset=/.blog.pentalogic.net/gfwlist -server=/.blog.sina.com.tw/127.0.0.1#5335 -ipset=/.blog.sina.com.tw/gfwlist -server=/.blog.sogoo.org/127.0.0.1#5335 -ipset=/.blog.sogoo.org/gfwlist -server=/.blog.soylent.com/127.0.0.1#5335 -ipset=/.blog.soylent.com/gfwlist -server=/.blog.taragana.com/127.0.0.1#5335 -ipset=/.blog.taragana.com/gfwlist -server=/.blog.tiney.com/127.0.0.1#5335 -ipset=/.blog.tiney.com/gfwlist -server=/.blog.workflow.is/127.0.0.1#5335 -ipset=/.blog.workflow.is/gfwlist -server=/.blog.xuite.net/127.0.0.1#5335 -ipset=/.blog.xuite.net/gfwlist -server=/.blog.youthwant.com.tw/127.0.0.1#5335 -ipset=/.blog.youthwant.com.tw/gfwlist -server=/.blogblog.com/127.0.0.1#5335 -ipset=/.blogblog.com/gfwlist -server=/.blogcatalog.com/127.0.0.1#5335 -ipset=/.blogcatalog.com/gfwlist -server=/.blogcity.me/127.0.0.1#5335 -ipset=/.blogcity.me/gfwlist -server=/.blogdns.org/127.0.0.1#5335 -ipset=/.blogdns.org/gfwlist -server=/.blogger.com/127.0.0.1#5335 -ipset=/.blogger.com/gfwlist -server=/.blogimg.jp/127.0.0.1#5335 -ipset=/.blogimg.jp/gfwlist -server=/.bloglines.com/127.0.0.1#5335 -ipset=/.bloglines.com/gfwlist -server=/.bloglovin.com/127.0.0.1#5335 -ipset=/.bloglovin.com/gfwlist -server=/.blogs.tampabay.com/127.0.0.1#5335 -ipset=/.blogs.tampabay.com/gfwlist -server=/.blogs.yahoo.co.jp/127.0.0.1#5335 -ipset=/.blogs.yahoo.co.jp/gfwlist -server=/.blogspot.com/127.0.0.1#5335 -ipset=/.blogspot.com/gfwlist -server=/.blogspot.hk/127.0.0.1#5335 -ipset=/.blogspot.hk/gfwlist -server=/.blogspot.jp/127.0.0.1#5335 -ipset=/.blogspot.jp/gfwlist -server=/.blogspot.tw/127.0.0.1#5335 -ipset=/.blogspot.tw/gfwlist -server=/.blogtd.net/127.0.0.1#5335 -ipset=/.blogtd.net/gfwlist -server=/.blogtd.org/127.0.0.1#5335 -ipset=/.blogtd.org/gfwlist -server=/.bloodshed.net/127.0.0.1#5335 -ipset=/.bloodshed.net/gfwlist -server=/.bloomberg.cn/127.0.0.1#5335 -ipset=/.bloomberg.cn/gfwlist -server=/.bloomberg.com/127.0.0.1#5335 -ipset=/.bloomberg.com/gfwlist -server=/.bloomberg.de/127.0.0.1#5335 -ipset=/.bloomberg.de/gfwlist -server=/.bloombergview.com/127.0.0.1#5335 -ipset=/.bloombergview.com/gfwlist -server=/.bloomfortune.com/127.0.0.1#5335 -ipset=/.bloomfortune.com/gfwlist -server=/.blueangellive.com/127.0.0.1#5335 -ipset=/.blueangellive.com/gfwlist -server=/.bmfinn.com/127.0.0.1#5335 -ipset=/.bmfinn.com/gfwlist -server=/.bnews.co/127.0.0.1#5335 -ipset=/.bnews.co/gfwlist -server=/.bnn.co/127.0.0.1#5335 -ipset=/.bnn.co/gfwlist -server=/.bnrmetal.com/127.0.0.1#5335 -ipset=/.bnrmetal.com/gfwlist -server=/.boardreader.com/127.0.0.1#5335 -ipset=/.boardreader.com/gfwlist -server=/.bod.asia/127.0.0.1#5335 -ipset=/.bod.asia/gfwlist -server=/.bodog88.com/127.0.0.1#5335 -ipset=/.bodog88.com/gfwlist -server=/.bolehvpn.net/127.0.0.1#5335 -ipset=/.bolehvpn.net/gfwlist -server=/.bolin.netfirms.com/127.0.0.1#5335 -ipset=/.bolin.netfirms.com/gfwlist -server=/.bonbonme.com/127.0.0.1#5335 -ipset=/.bonbonme.com/gfwlist -server=/.bonbonsex.com/127.0.0.1#5335 -ipset=/.bonbonsex.com/gfwlist -server=/.bonfoundation.org/127.0.0.1#5335 -ipset=/.bonfoundation.org/gfwlist -server=/.bongacams.com/127.0.0.1#5335 -ipset=/.bongacams.com/gfwlist -server=/.boobstagram.com/127.0.0.1#5335 -ipset=/.boobstagram.com/gfwlist -server=/.book.com.tw/127.0.0.1#5335 -ipset=/.book.com.tw/gfwlist -server=/.book.zi5.me/127.0.0.1#5335 -ipset=/.book.zi5.me/gfwlist -server=/.bookepub.com/127.0.0.1#5335 -ipset=/.bookepub.com/gfwlist -server=/.books.com.tw/127.0.0.1#5335 -ipset=/.books.com.tw/gfwlist -server=/.booktopia.com.au/127.0.0.1#5335 -ipset=/.booktopia.com.au/gfwlist -server=/.boomssr.com/127.0.0.1#5335 -ipset=/.boomssr.com/gfwlist -server=/.bot.nu/127.0.0.1#5335 -ipset=/.bot.nu/gfwlist -server=/.botanwang.com/127.0.0.1#5335 -ipset=/.botanwang.com/gfwlist -server=/.bowenpress.com/127.0.0.1#5335 -ipset=/.bowenpress.com/gfwlist -server=/.boxpn.com/127.0.0.1#5335 -ipset=/.boxpn.com/gfwlist -server=/.boxun.com/127.0.0.1#5335 -ipset=/.boxun.com/gfwlist -server=/.boxun.tv/127.0.0.1#5335 -ipset=/.boxun.tv/gfwlist -server=/.boxunblog.com/127.0.0.1#5335 -ipset=/.boxunblog.com/gfwlist -server=/.boxunclub.com/127.0.0.1#5335 -ipset=/.boxunclub.com/gfwlist -server=/.boyangu.com/127.0.0.1#5335 -ipset=/.boyangu.com/gfwlist -server=/.boyfriendtv.com/127.0.0.1#5335 -ipset=/.boyfriendtv.com/gfwlist -server=/.boysfood.com/127.0.0.1#5335 -ipset=/.boysfood.com/gfwlist -server=/.boysmaster.com/127.0.0.1#5335 -ipset=/.boysmaster.com/gfwlist -server=/.br.hao123.com/127.0.0.1#5335 -ipset=/.br.hao123.com/gfwlist -server=/.br.st/127.0.0.1#5335 -ipset=/.br.st/gfwlist -server=/.brandonhutchinson.com/127.0.0.1#5335 -ipset=/.brandonhutchinson.com/gfwlist -server=/.braumeister.org/127.0.0.1#5335 -ipset=/.braumeister.org/gfwlist -server=/.bravotube.net/127.0.0.1#5335 -ipset=/.bravotube.net/gfwlist -server=/.brazzers.com/127.0.0.1#5335 -ipset=/.brazzers.com/gfwlist -server=/.break.com/127.0.0.1#5335 -ipset=/.break.com/gfwlist -server=/.breakgfw.com/127.0.0.1#5335 -ipset=/.breakgfw.com/gfwlist -server=/.breaking911.com/127.0.0.1#5335 -ipset=/.breaking911.com/gfwlist -server=/.breakingtweets.com/127.0.0.1#5335 -ipset=/.breakingtweets.com/gfwlist -server=/.breakwall.net/127.0.0.1#5335 -ipset=/.breakwall.net/gfwlist -server=/.brizzly.com/127.0.0.1#5335 -ipset=/.brizzly.com/gfwlist -server=/.brkmd.com/127.0.0.1#5335 -ipset=/.brkmd.com/gfwlist -server=/.broadbook.com/127.0.0.1#5335 -ipset=/.broadbook.com/gfwlist -server=/.broadpressinc.com/127.0.0.1#5335 -ipset=/.broadpressinc.com/gfwlist -server=/.brucewang.net/127.0.0.1#5335 -ipset=/.brucewang.net/gfwlist -server=/.brutaltgp.com/127.0.0.1#5335 -ipset=/.brutaltgp.com/gfwlist -server=/.bt2mag.com/127.0.0.1#5335 -ipset=/.bt2mag.com/gfwlist -server=/.bt95.com/127.0.0.1#5335 -ipset=/.bt95.com/gfwlist -server=/.btaia.com/127.0.0.1#5335 -ipset=/.btaia.com/gfwlist -server=/.btbtav.com/127.0.0.1#5335 -ipset=/.btbtav.com/gfwlist -server=/.btc98.com/127.0.0.1#5335 -ipset=/.btc98.com/gfwlist -server=/.btcbank.bank/127.0.0.1#5335 -ipset=/.btcbank.bank/gfwlist -server=/.btctrade.im/127.0.0.1#5335 -ipset=/.btctrade.im/gfwlist -server=/.btdigg.org/127.0.0.1#5335 -ipset=/.btdigg.org/gfwlist -server=/.btku.me/127.0.0.1#5335 -ipset=/.btku.me/gfwlist -server=/.btku.org/127.0.0.1#5335 -ipset=/.btku.org/gfwlist -server=/.btspread.com/127.0.0.1#5335 -ipset=/.btspread.com/gfwlist -server=/.btsynckeys.com/127.0.0.1#5335 -ipset=/.btsynckeys.com/gfwlist -server=/.budaedu.org/127.0.0.1#5335 -ipset=/.budaedu.org/gfwlist -server=/.buddhistchannel.tv/127.0.0.1#5335 -ipset=/.buddhistchannel.tv/gfwlist -server=/.buffered.com/127.0.0.1#5335 -ipset=/.buffered.com/gfwlist -server=/.bullog.org/127.0.0.1#5335 -ipset=/.bullog.org/gfwlist -server=/.bullogger.com/127.0.0.1#5335 -ipset=/.bullogger.com/gfwlist -server=/.bunbunhk.com/127.0.0.1#5335 -ipset=/.bunbunhk.com/gfwlist -server=/.busayari.com/127.0.0.1#5335 -ipset=/.busayari.com/gfwlist -server=/.businessinsider.com/127.0.0.1#5335 -ipset=/.businessinsider.com/gfwlist -server=/.businesstoday.com.tw/127.0.0.1#5335 -ipset=/.businesstoday.com.tw/gfwlist -server=/.businessweek.com/127.0.0.1#5335 -ipset=/.businessweek.com/gfwlist -server=/.busytrade.com/127.0.0.1#5335 -ipset=/.busytrade.com/gfwlist -server=/.buugaa.com/127.0.0.1#5335 -ipset=/.buugaa.com/gfwlist -server=/.buzzhand.com/127.0.0.1#5335 -ipset=/.buzzhand.com/gfwlist -server=/.buzzhand.net/127.0.0.1#5335 -ipset=/.buzzhand.net/gfwlist -server=/.buzzorange.com/127.0.0.1#5335 -ipset=/.buzzorange.com/gfwlist -server=/.bvpn.com/127.0.0.1#5335 -ipset=/.bvpn.com/gfwlist -server=/.bwgyhw.com/127.0.0.1#5335 -ipset=/.bwgyhw.com/gfwlist -server=/.bwh1.net/127.0.0.1#5335 -ipset=/.bwh1.net/gfwlist -server=/.bwsj.hk/127.0.0.1#5335 -ipset=/.bwsj.hk/gfwlist -server=/.bx.in.th/127.0.0.1#5335 -ipset=/.bx.in.th/gfwlist -server=/.bx.tl/127.0.0.1#5335 -ipset=/.bx.tl/gfwlist -server=/.bynet.co.il/127.0.0.1#5335 -ipset=/.bynet.co.il/gfwlist -server=/.c-est-simple.com/127.0.0.1#5335 -ipset=/.c-est-simple.com/gfwlist -server=/.c-spanvideo.org/127.0.0.1#5335 -ipset=/.c-spanvideo.org/gfwlist -server=/.c100tibet.org/127.0.0.1#5335 -ipset=/.c100tibet.org/gfwlist -server=/.c1522.mooo.com/127.0.0.1#5335 -ipset=/.c1522.mooo.com/gfwlist -server=/.c2cx.com/127.0.0.1#5335 -ipset=/.c2cx.com/gfwlist -server=/.cablegatesearch.net/127.0.0.1#5335 -ipset=/.cablegatesearch.net/gfwlist -server=/.cachinese.com/127.0.0.1#5335 -ipset=/.cachinese.com/gfwlist -server=/.cacnw.com/127.0.0.1#5335 -ipset=/.cacnw.com/gfwlist -server=/.cactusvpn.com/127.0.0.1#5335 -ipset=/.cactusvpn.com/gfwlist -server=/.cafepress.com/127.0.0.1#5335 -ipset=/.cafepress.com/gfwlist -server=/.cahr.org.tw/127.0.0.1#5335 -ipset=/.cahr.org.tw/gfwlist -server=/.caijinglengyan.com/127.0.0.1#5335 -ipset=/.caijinglengyan.com/gfwlist -server=/.calebelston.com/127.0.0.1#5335 -ipset=/.calebelston.com/gfwlist -server=/.calgarychinese.ca/127.0.0.1#5335 -ipset=/.calgarychinese.ca/gfwlist -server=/.calgarychinese.com/127.0.0.1#5335 -ipset=/.calgarychinese.com/gfwlist -server=/.calgarychinese.net/127.0.0.1#5335 -ipset=/.calgarychinese.net/gfwlist -server=/.cam4.com/127.0.0.1#5335 -ipset=/.cam4.com/gfwlist -server=/.cam4.jp/127.0.0.1#5335 -ipset=/.cam4.jp/gfwlist -server=/.cam4.sg/127.0.0.1#5335 -ipset=/.cam4.sg/gfwlist -server=/.camfrog.com/127.0.0.1#5335 -ipset=/.camfrog.com/gfwlist -server=/.campaignforuyghurs.org/127.0.0.1#5335 -ipset=/.campaignforuyghurs.org/gfwlist -server=/.cams.com/127.0.0.1#5335 -ipset=/.cams.com/gfwlist -server=/.cams.org.sg/127.0.0.1#5335 -ipset=/.cams.org.sg/gfwlist -server=/.canadameet.com/127.0.0.1#5335 -ipset=/.canadameet.com/gfwlist -server=/.canalporno.com/127.0.0.1#5335 -ipset=/.canalporno.com/gfwlist -server=/.canyu.org/127.0.0.1#5335 -ipset=/.canyu.org/gfwlist -server=/.cao.im/127.0.0.1#5335 -ipset=/.cao.im/gfwlist -server=/.caobian.info/127.0.0.1#5335 -ipset=/.caobian.info/gfwlist -server=/.caochangqing.com/127.0.0.1#5335 -ipset=/.caochangqing.com/gfwlist -server=/.cap.org.hk/127.0.0.1#5335 -ipset=/.cap.org.hk/gfwlist -server=/.carabinasypistolas.com/127.0.0.1#5335 -ipset=/.carabinasypistolas.com/gfwlist -server=/.cardinalkungfoundation.org/127.0.0.1#5335 -ipset=/.cardinalkungfoundation.org/gfwlist -server=/.carfax.com/127.0.0.1#5335 -ipset=/.carfax.com/gfwlist -server=/.cari.com.my/127.0.0.1#5335 -ipset=/.cari.com.my/gfwlist -server=/.caribbeancom.com/127.0.0.1#5335 -ipset=/.caribbeancom.com/gfwlist -server=/.carmotorshow.com/127.0.0.1#5335 -ipset=/.carmotorshow.com/gfwlist -server=/.cartoonmovement.com/127.0.0.1#5335 -ipset=/.cartoonmovement.com/gfwlist -server=/.casadeltibetbcn.org/127.0.0.1#5335 -ipset=/.casadeltibetbcn.org/gfwlist -server=/.casatibet.org.mx/127.0.0.1#5335 -ipset=/.casatibet.org.mx/gfwlist -server=/.casino.williamhill.com/127.0.0.1#5335 -ipset=/.casino.williamhill.com/gfwlist -server=/.casinobellini.com/127.0.0.1#5335 -ipset=/.casinobellini.com/gfwlist -server=/.casinoking.com/127.0.0.1#5335 -ipset=/.casinoking.com/gfwlist -server=/.casinoriva.com/127.0.0.1#5335 -ipset=/.casinoriva.com/gfwlist -server=/.castbox.fm/127.0.0.1#5335 -ipset=/.castbox.fm/gfwlist -server=/.catch22.net/127.0.0.1#5335 -ipset=/.catch22.net/gfwlist -server=/.catchgod.com/127.0.0.1#5335 -ipset=/.catchgod.com/gfwlist -server=/.catfightpayperview.xxx/127.0.0.1#5335 -ipset=/.catfightpayperview.xxx/gfwlist -server=/.catholic.org.hk/127.0.0.1#5335 -ipset=/.catholic.org.hk/gfwlist -server=/.catholic.org.tw/127.0.0.1#5335 -ipset=/.catholic.org.tw/gfwlist -server=/.cathvoice.org.tw/127.0.0.1#5335 -ipset=/.cathvoice.org.tw/gfwlist -server=/.cattt.com/127.0.0.1#5335 -ipset=/.cattt.com/gfwlist -server=/.cbc.ca/127.0.0.1#5335 -ipset=/.cbc.ca/gfwlist -server=/.cbs.ntu.edu.tw/127.0.0.1#5335 -ipset=/.cbs.ntu.edu.tw/gfwlist -server=/.cbtc.org.hk/127.0.0.1#5335 -ipset=/.cbtc.org.hk/gfwlist -server=/.cccat.cc/127.0.0.1#5335 -ipset=/.cccat.cc/gfwlist -server=/.cccat.co/127.0.0.1#5335 -ipset=/.cccat.co/gfwlist -server=/.ccdtr.org/127.0.0.1#5335 -ipset=/.ccdtr.org/gfwlist -server=/.cchere.com/127.0.0.1#5335 -ipset=/.cchere.com/gfwlist -server=/.ccim.org/127.0.0.1#5335 -ipset=/.ccim.org/gfwlist -server=/.cclife.ca/127.0.0.1#5335 -ipset=/.cclife.ca/gfwlist -server=/.cclife.org/127.0.0.1#5335 -ipset=/.cclife.org/gfwlist -server=/.cclifefl.org/127.0.0.1#5335 -ipset=/.cclifefl.org/gfwlist -server=/.ccthere.com/127.0.0.1#5335 -ipset=/.ccthere.com/gfwlist -server=/.ccthere.net/127.0.0.1#5335 -ipset=/.ccthere.net/gfwlist -server=/.cctmweb.net/127.0.0.1#5335 -ipset=/.cctmweb.net/gfwlist -server=/.ccue.ca/127.0.0.1#5335 -ipset=/.ccue.ca/gfwlist -server=/.ccue.com/127.0.0.1#5335 -ipset=/.ccue.com/gfwlist -server=/.ccvoice.ca/127.0.0.1#5335 -ipset=/.ccvoice.ca/gfwlist -server=/.ccw.org.tw/127.0.0.1#5335 -ipset=/.ccw.org.tw/gfwlist -server=/.cdbook.org/127.0.0.1#5335 -ipset=/.cdbook.org/gfwlist -server=/.cdcparty.com/127.0.0.1#5335 -ipset=/.cdcparty.com/gfwlist -server=/.cdef.org/127.0.0.1#5335 -ipset=/.cdef.org/gfwlist -server=/.cdig.info/127.0.0.1#5335 -ipset=/.cdig.info/gfwlist -server=/.cdjp.org/127.0.0.1#5335 -ipset=/.cdjp.org/gfwlist -server=/.cdn-images.mailchimp.com/127.0.0.1#5335 -ipset=/.cdn-images.mailchimp.com/gfwlist -server=/.cdn.assets.lfpcontent.com/127.0.0.1#5335 -ipset=/.cdn.assets.lfpcontent.com/gfwlist -server=/.cdn.helixstudios.net/127.0.0.1#5335 -ipset=/.cdn.helixstudios.net/gfwlist -server=/.cdn.printfriendly.com/127.0.0.1#5335 -ipset=/.cdn.printfriendly.com/gfwlist -server=/.cdn.seatguru.com/127.0.0.1#5335 -ipset=/.cdn.seatguru.com/gfwlist -server=/.cdn.softlayer.net/127.0.0.1#5335 -ipset=/.cdn.softlayer.net/gfwlist -server=/.cdn1.lp.saboom.com/127.0.0.1#5335 -ipset=/.cdn1.lp.saboom.com/gfwlist -server=/.cdnews.com.tw/127.0.0.1#5335 -ipset=/.cdnews.com.tw/gfwlist -server=/.cdninstagram.com/127.0.0.1#5335 -ipset=/.cdninstagram.com/gfwlist -server=/.cdp1989.org/127.0.0.1#5335 -ipset=/.cdp1989.org/gfwlist -server=/.cdp1998.org/127.0.0.1#5335 -ipset=/.cdp1998.org/gfwlist -server=/.cdp2006.org/127.0.0.1#5335 -ipset=/.cdp2006.org/gfwlist -server=/.cdpa.url.tw/127.0.0.1#5335 -ipset=/.cdpa.url.tw/gfwlist -server=/.cdpeu.org/127.0.0.1#5335 -ipset=/.cdpeu.org/gfwlist -server=/.cdpusa.org/127.0.0.1#5335 -ipset=/.cdpusa.org/gfwlist -server=/.cdpweb.org/127.0.0.1#5335 -ipset=/.cdpweb.org/gfwlist -server=/.cdpwu.org/127.0.0.1#5335 -ipset=/.cdpwu.org/gfwlist -server=/.cdw.com/127.0.0.1#5335 -ipset=/.cdw.com/gfwlist -server=/.cecc.gov/127.0.0.1#5335 -ipset=/.cecc.gov/gfwlist -server=/.cellulo.info/127.0.0.1#5335 -ipset=/.cellulo.info/gfwlist -server=/.cenews.eu/127.0.0.1#5335 -ipset=/.cenews.eu/gfwlist -server=/.centauro.com.br/127.0.0.1#5335 -ipset=/.centauro.com.br/gfwlist -server=/.centerforhumanreprod.com/127.0.0.1#5335 -ipset=/.centerforhumanreprod.com/gfwlist -server=/.centralnation.com/127.0.0.1#5335 -ipset=/.centralnation.com/gfwlist -server=/.centurys.net/127.0.0.1#5335 -ipset=/.centurys.net/gfwlist -server=/.certificate-transparency.org/127.0.0.1#5335 -ipset=/.certificate-transparency.org/gfwlist -server=/.certificate.revocationcheck.com/127.0.0.1#5335 -ipset=/.certificate.revocationcheck.com/gfwlist -server=/.cfhks.org.hk/127.0.0.1#5335 -ipset=/.cfhks.org.hk/gfwlist -server=/.cfos.de/127.0.0.1#5335 -ipset=/.cfos.de/gfwlist -server=/.cftfc.com/127.0.0.1#5335 -ipset=/.cftfc.com/gfwlist -server=/.cgdepot.org/127.0.0.1#5335 -ipset=/.cgdepot.org/gfwlist -server=/.cgst.edu/127.0.0.1#5335 -ipset=/.cgst.edu/gfwlist -server=/.ch.shvoong.com/127.0.0.1#5335 -ipset=/.ch.shvoong.com/gfwlist -server=/.change.org/127.0.0.1#5335 -ipset=/.change.org/gfwlist -server=/.changeip.name/127.0.0.1#5335 -ipset=/.changeip.name/gfwlist -server=/.changeip.net/127.0.0.1#5335 -ipset=/.changeip.net/gfwlist -server=/.changeip.org/127.0.0.1#5335 -ipset=/.changeip.org/gfwlist -server=/.changp.com/127.0.0.1#5335 -ipset=/.changp.com/gfwlist -server=/.changsa.net/127.0.0.1#5335 -ipset=/.changsa.net/gfwlist -server=/.chaoex.com/127.0.0.1#5335 -ipset=/.chaoex.com/gfwlist -server=/.chapm25.com/127.0.0.1#5335 -ipset=/.chapm25.com/gfwlist -server=/.chatnook.com/127.0.0.1#5335 -ipset=/.chatnook.com/gfwlist -server=/.chaturbate.com/127.0.0.1#5335 -ipset=/.chaturbate.com/gfwlist -server=/.chengmingmag.com/127.0.0.1#5335 -ipset=/.chengmingmag.com/gfwlist -server=/.chenguangcheng.com/127.0.0.1#5335 -ipset=/.chenguangcheng.com/gfwlist -server=/.chenpokong.com/127.0.0.1#5335 -ipset=/.chenpokong.com/gfwlist -server=/.chenpokong.net/127.0.0.1#5335 -ipset=/.chenpokong.net/gfwlist -server=/.chenshan20042005.wordpress.com/127.0.0.1#5335 -ipset=/.chenshan20042005.wordpress.com/gfwlist -server=/.cherrysave.com/127.0.0.1#5335 -ipset=/.cherrysave.com/gfwlist -server=/.chhongbi.org/127.0.0.1#5335 -ipset=/.chhongbi.org/gfwlist -server=/.chicagoncmtv.com/127.0.0.1#5335 -ipset=/.chicagoncmtv.com/gfwlist -server=/.china-mmm.jp.net/127.0.0.1#5335 -ipset=/.china-mmm.jp.net/gfwlist -server=/.china-mmm.net/127.0.0.1#5335 -ipset=/.china-mmm.net/gfwlist -server=/.china-mmm.sa.com/127.0.0.1#5335 -ipset=/.china-mmm.sa.com/gfwlist -server=/.china-review.com.ua/127.0.0.1#5335 -ipset=/.china-review.com.ua/gfwlist -server=/.china-week.com/127.0.0.1#5335 -ipset=/.china-week.com/gfwlist -server=/.china.hket.com/127.0.0.1#5335 -ipset=/.china.hket.com/gfwlist -server=/.china101.com/127.0.0.1#5335 -ipset=/.china101.com/gfwlist -server=/.china18.org/127.0.0.1#5335 -ipset=/.china18.org/gfwlist -server=/.china21.com/127.0.0.1#5335 -ipset=/.china21.com/gfwlist -server=/.china21.org/127.0.0.1#5335 -ipset=/.china21.org/gfwlist -server=/.china5000.us/127.0.0.1#5335 -ipset=/.china5000.us/gfwlist -server=/.chinaaffairs.org/127.0.0.1#5335 -ipset=/.chinaaffairs.org/gfwlist -server=/.chinaaid.me/127.0.0.1#5335 -ipset=/.chinaaid.me/gfwlist -server=/.chinaaid.net/127.0.0.1#5335 -ipset=/.chinaaid.net/gfwlist -server=/.chinaaid.org/127.0.0.1#5335 -ipset=/.chinaaid.org/gfwlist -server=/.chinaaid.us/127.0.0.1#5335 -ipset=/.chinaaid.us/gfwlist -server=/.chinachange.org/127.0.0.1#5335 -ipset=/.chinachange.org/gfwlist -server=/.chinachannel.hk/127.0.0.1#5335 -ipset=/.chinachannel.hk/gfwlist -server=/.chinacitynews.be/127.0.0.1#5335 -ipset=/.chinacitynews.be/gfwlist -server=/.chinacomments.org/127.0.0.1#5335 -ipset=/.chinacomments.org/gfwlist -server=/.chinadialogue.net/127.0.0.1#5335 -ipset=/.chinadialogue.net/gfwlist -server=/.chinadigitaltimes.net/127.0.0.1#5335 -ipset=/.chinadigitaltimes.net/gfwlist -server=/.chinaelections.org/127.0.0.1#5335 -ipset=/.chinaelections.org/gfwlist -server=/.chinaeweekly.com/127.0.0.1#5335 -ipset=/.chinaeweekly.com/gfwlist -server=/.chinafreepress.org/127.0.0.1#5335 -ipset=/.chinafreepress.org/gfwlist -server=/.chinagate.com/127.0.0.1#5335 -ipset=/.chinagate.com/gfwlist -server=/.chinageeks.org/127.0.0.1#5335 -ipset=/.chinageeks.org/gfwlist -server=/.chinagfw.org/127.0.0.1#5335 -ipset=/.chinagfw.org/gfwlist -server=/.chinagonet.com/127.0.0.1#5335 -ipset=/.chinagonet.com/gfwlist -server=/.chinagreenparty.org/127.0.0.1#5335 -ipset=/.chinagreenparty.org/gfwlist -server=/.chinahorizon.org/127.0.0.1#5335 -ipset=/.chinahorizon.org/gfwlist -server=/.chinahush.com/127.0.0.1#5335 -ipset=/.chinahush.com/gfwlist -server=/.chinainperspective.com/127.0.0.1#5335 -ipset=/.chinainperspective.com/gfwlist -server=/.chinainterimgov.org/127.0.0.1#5335 -ipset=/.chinainterimgov.org/gfwlist -server=/.chinalaborwatch.org/127.0.0.1#5335 -ipset=/.chinalaborwatch.org/gfwlist -server=/.chinalawandpolicy.com/127.0.0.1#5335 -ipset=/.chinalawandpolicy.com/gfwlist -server=/.chinalawtranslate.com/127.0.0.1#5335 -ipset=/.chinalawtranslate.com/gfwlist -server=/.chinamule.com/127.0.0.1#5335 -ipset=/.chinamule.com/gfwlist -server=/.chinamz.org/127.0.0.1#5335 -ipset=/.chinamz.org/gfwlist -server=/.chinanewscenter.com/127.0.0.1#5335 -ipset=/.chinanewscenter.com/gfwlist -server=/.chinapress.com.my/127.0.0.1#5335 -ipset=/.chinapress.com.my/gfwlist -server=/.chinarightsia.org/127.0.0.1#5335 -ipset=/.chinarightsia.org/gfwlist -server=/.chinasocialdemocraticparty.com/127.0.0.1#5335 -ipset=/.chinasocialdemocraticparty.com/gfwlist -server=/.chinasoul.org/127.0.0.1#5335 -ipset=/.chinasoul.org/gfwlist -server=/.chinasucks.net/127.0.0.1#5335 -ipset=/.chinasucks.net/gfwlist -server=/.chinatimes.com/127.0.0.1#5335 -ipset=/.chinatimes.com/gfwlist -server=/.chinatopsex.com/127.0.0.1#5335 -ipset=/.chinatopsex.com/gfwlist -server=/.chinatown.com.au/127.0.0.1#5335 -ipset=/.chinatown.com.au/gfwlist -server=/.chinatweeps.com/127.0.0.1#5335 -ipset=/.chinatweeps.com/gfwlist -server=/.chinaview.wordpress.com/127.0.0.1#5335 -ipset=/.chinaview.wordpress.com/gfwlist -server=/.chinaway.org/127.0.0.1#5335 -ipset=/.chinaway.org/gfwlist -server=/.chinaworker.info/127.0.0.1#5335 -ipset=/.chinaworker.info/gfwlist -server=/.chinayouth.org.hk/127.0.0.1#5335 -ipset=/.chinayouth.org.hk/gfwlist -server=/.chinayuanmin.org/127.0.0.1#5335 -ipset=/.chinayuanmin.org/gfwlist -server=/.chinese-hermit.net/127.0.0.1#5335 -ipset=/.chinese-hermit.net/gfwlist -server=/.chinese-leaders.org/127.0.0.1#5335 -ipset=/.chinese-leaders.org/gfwlist -server=/.chinese-memorial.org/127.0.0.1#5335 -ipset=/.chinese-memorial.org/gfwlist -server=/.chinese.donga.com/127.0.0.1#5335 -ipset=/.chinese.donga.com/gfwlist -server=/.chinese.engadget.com/127.0.0.1#5335 -ipset=/.chinese.engadget.com/gfwlist -server=/.chinese.irib.ir/127.0.0.1#5335 -ipset=/.chinese.irib.ir/gfwlist -server=/.chinese.soifind.com/127.0.0.1#5335 -ipset=/.chinese.soifind.com/gfwlist -server=/.chinesedaily.com/127.0.0.1#5335 -ipset=/.chinesedaily.com/gfwlist -server=/.chinesedailynews.com/127.0.0.1#5335 -ipset=/.chinesedailynews.com/gfwlist -server=/.chinesedemocracy.com/127.0.0.1#5335 -ipset=/.chinesedemocracy.com/gfwlist -server=/.chinesegay.org/127.0.0.1#5335 -ipset=/.chinesegay.org/gfwlist -server=/.chinesen.de/127.0.0.1#5335 -ipset=/.chinesen.de/gfwlist -server=/.chinesepen.org/127.0.0.1#5335 -ipset=/.chinesepen.org/gfwlist -server=/.chineseupress.com/127.0.0.1#5335 -ipset=/.chineseupress.com/gfwlist -server=/.chingcheong.com/127.0.0.1#5335 -ipset=/.chingcheong.com/gfwlist -server=/.chinman.net/127.0.0.1#5335 -ipset=/.chinman.net/gfwlist -server=/.chithu.org/127.0.0.1#5335 -ipset=/.chithu.org/gfwlist -server=/.chn.chosun.com/127.0.0.1#5335 -ipset=/.chn.chosun.com/gfwlist -server=/.chobit.cc/127.0.0.1#5335 -ipset=/.chobit.cc/gfwlist -server=/.chrdnet.com/127.0.0.1#5335 -ipset=/.chrdnet.com/gfwlist -server=/.christianfreedom.org/127.0.0.1#5335 -ipset=/.christianfreedom.org/gfwlist -server=/.christianstudy.com/127.0.0.1#5335 -ipset=/.christianstudy.com/gfwlist -server=/.christiantimes.org.hk/127.0.0.1#5335 -ipset=/.christiantimes.org.hk/gfwlist -server=/.chrlawyers.hk/127.0.0.1#5335 -ipset=/.chrlawyers.hk/gfwlist -server=/.chrome.com/127.0.0.1#5335 -ipset=/.chrome.com/gfwlist -server=/.chromecast.com/127.0.0.1#5335 -ipset=/.chromecast.com/gfwlist -server=/.chromeexperiments.com/127.0.0.1#5335 -ipset=/.chromeexperiments.com/gfwlist -server=/.chromercise.com/127.0.0.1#5335 -ipset=/.chromercise.com/gfwlist -server=/.chromestatus.com/127.0.0.1#5335 -ipset=/.chromestatus.com/gfwlist -server=/.chromium.org/127.0.0.1#5335 -ipset=/.chromium.org/gfwlist -server=/.chuang-yen.org/127.0.0.1#5335 -ipset=/.chuang-yen.org/gfwlist -server=/.chubold.com/127.0.0.1#5335 -ipset=/.chubold.com/gfwlist -server=/.chubun.com/127.0.0.1#5335 -ipset=/.chubun.com/gfwlist -server=/.chuizi.net/127.0.0.1#5335 -ipset=/.chuizi.net/gfwlist -server=/.chushigangdrug.ch/127.0.0.1#5335 -ipset=/.chushigangdrug.ch/gfwlist -server=/.cienen.com/127.0.0.1#5335 -ipset=/.cienen.com/gfwlist -server=/.cineastentreff.de/127.0.0.1#5335 -ipset=/.cineastentreff.de/gfwlist -server=/.cipfg.org/127.0.0.1#5335 -ipset=/.cipfg.org/gfwlist -server=/.circlethebayfortibet.org/127.0.0.1#5335 -ipset=/.circlethebayfortibet.org/gfwlist -server=/.cirosantilli.com/127.0.0.1#5335 -ipset=/.cirosantilli.com/gfwlist -server=/.citizencn.com/127.0.0.1#5335 -ipset=/.citizencn.com/gfwlist -server=/.citizenlab.org/127.0.0.1#5335 -ipset=/.citizenlab.org/gfwlist -server=/.citizenscommission.hk/127.0.0.1#5335 -ipset=/.citizenscommission.hk/gfwlist -server=/.citizensradio.org/127.0.0.1#5335 -ipset=/.citizensradio.org/gfwlist -server=/.city365.ca/127.0.0.1#5335 -ipset=/.city365.ca/gfwlist -server=/.city9x.com/127.0.0.1#5335 -ipset=/.city9x.com/gfwlist -server=/.citypopulation.de/127.0.0.1#5335 -ipset=/.citypopulation.de/gfwlist -server=/.civicparty.hk/127.0.0.1#5335 -ipset=/.civicparty.hk/gfwlist -server=/.civildisobediencemovement.org/127.0.0.1#5335 -ipset=/.civildisobediencemovement.org/gfwlist -server=/.civilhrfront.org/127.0.0.1#5335 -ipset=/.civilhrfront.org/gfwlist -server=/.civiliangunner.com/127.0.0.1#5335 -ipset=/.civiliangunner.com/gfwlist -server=/.civilmedia.tw/127.0.0.1#5335 -ipset=/.civilmedia.tw/gfwlist -server=/.ck101.com/127.0.0.1#5335 -ipset=/.ck101.com/gfwlist -server=/.cl.d0z.net/127.0.0.1#5335 -ipset=/.cl.d0z.net/gfwlist -server=/.classicalguitarblog.net/127.0.0.1#5335 -ipset=/.classicalguitarblog.net/gfwlist -server=/.clb.org.hk/127.0.0.1#5335 -ipset=/.clb.org.hk/gfwlist -server=/.cldr.unicode.org/127.0.0.1#5335 -ipset=/.cldr.unicode.org/gfwlist -server=/.cleansite.biz/127.0.0.1#5335 -ipset=/.cleansite.biz/gfwlist -server=/.cleansite.info/127.0.0.1#5335 -ipset=/.cleansite.info/gfwlist -server=/.cleansite.us/127.0.0.1#5335 -ipset=/.cleansite.us/gfwlist -server=/.clearharmony.net/127.0.0.1#5335 -ipset=/.clearharmony.net/gfwlist -server=/.clearsurance.com/127.0.0.1#5335 -ipset=/.clearsurance.com/gfwlist -server=/.clearwisdom.net/127.0.0.1#5335 -ipset=/.clearwisdom.net/gfwlist -server=/.clementine-player.org/127.0.0.1#5335 -ipset=/.clementine-player.org/gfwlist -server=/.cling.omy.sg/127.0.0.1#5335 -ipset=/.cling.omy.sg/gfwlist -server=/.clinica-tibet.ru/127.0.0.1#5335 -ipset=/.clinica-tibet.ru/gfwlist -server=/.clipfish.de/127.0.0.1#5335 -ipset=/.clipfish.de/gfwlist -server=/.cloakpoint.com/127.0.0.1#5335 -ipset=/.cloakpoint.com/gfwlist -server=/.cloud.mail.ru/127.0.0.1#5335 -ipset=/.cloud.mail.ru/gfwlist -server=/.club1069.com/127.0.0.1#5335 -ipset=/.club1069.com/gfwlist -server=/.clyp.it/127.0.0.1#5335 -ipset=/.clyp.it/gfwlist -server=/.cmcn.org/127.0.0.1#5335 -ipset=/.cmcn.org/gfwlist -server=/.cmi.org.tw/127.0.0.1#5335 -ipset=/.cmi.org.tw/gfwlist -server=/.cmp.hku.hk/127.0.0.1#5335 -ipset=/.cmp.hku.hk/gfwlist -server=/.cms.gov/127.0.0.1#5335 -ipset=/.cms.gov/gfwlist -server=/.cmule.com/127.0.0.1#5335 -ipset=/.cmule.com/gfwlist -server=/.cmule.org/127.0.0.1#5335 -ipset=/.cmule.org/gfwlist -server=/.cmx.im/127.0.0.1#5335 -ipset=/.cmx.im/gfwlist -server=/.cn-proxy.com/127.0.0.1#5335 -ipset=/.cn-proxy.com/gfwlist -server=/.cn.calameo.com/127.0.0.1#5335 -ipset=/.cn.calameo.com/gfwlist -server=/.cn.dayabook.com/127.0.0.1#5335 -ipset=/.cn.dayabook.com/gfwlist -server=/.cn.fmnnow.com/127.0.0.1#5335 -ipset=/.cn.fmnnow.com/gfwlist -server=/.cn.freeones.com/127.0.0.1#5335 -ipset=/.cn.freeones.com/gfwlist -server=/.cn.ibtimes.com/127.0.0.1#5335 -ipset=/.cn.ibtimes.com/gfwlist -server=/.cn.nytstyle.com/127.0.0.1#5335 -ipset=/.cn.nytstyle.com/gfwlist -server=/.cn.sandscotaicentral.com/127.0.0.1#5335 -ipset=/.cn.sandscotaicentral.com/gfwlist -server=/.cn.shafaqna.com/127.0.0.1#5335 -ipset=/.cn.shafaqna.com/gfwlist -server=/.cn.thegay.com/127.0.0.1#5335 -ipset=/.cn.thegay.com/gfwlist -server=/.cn.uncyclopedia.wikia.com/127.0.0.1#5335 -ipset=/.cn.uncyclopedia.wikia.com/gfwlist -server=/.cn.uptodown.com/127.0.0.1#5335 -ipset=/.cn.uptodown.com/gfwlist -server=/.cn.voa.mobi/127.0.0.1#5335 -ipset=/.cn.voa.mobi/gfwlist -server=/.cn2.streetvoice.com/127.0.0.1#5335 -ipset=/.cn2.streetvoice.com/gfwlist -server=/.cn6.eu/127.0.0.1#5335 -ipset=/.cn6.eu/gfwlist -server=/.cna.com.tw/127.0.0.1#5335 -ipset=/.cna.com.tw/gfwlist -server=/.cnabc.com/127.0.0.1#5335 -ipset=/.cnabc.com/gfwlist -server=/.cnbbnews.wordpress.com/127.0.0.1#5335 -ipset=/.cnbbnews.wordpress.com/gfwlist -server=/.cnd.org/127.0.0.1#5335 -ipset=/.cnd.org/gfwlist -server=/.cnex.org.cn/127.0.0.1#5335 -ipset=/.cnex.org.cn/gfwlist -server=/.cnineu.com/127.0.0.1#5335 -ipset=/.cnineu.com/gfwlist -server=/.cnpolitics.org/127.0.0.1#5335 -ipset=/.cnpolitics.org/gfwlist -server=/.cnproxy.com/127.0.0.1#5335 -ipset=/.cnproxy.com/gfwlist -server=/.co.ng.mil/127.0.0.1#5335 -ipset=/.co.ng.mil/gfwlist -server=/.coat.co.jp/127.0.0.1#5335 -ipset=/.coat.co.jp/gfwlist -server=/.cobinhood.com/127.0.0.1#5335 -ipset=/.cobinhood.com/gfwlist -server=/.cochina.co/127.0.0.1#5335 -ipset=/.cochina.co/gfwlist -server=/.cochina.org/127.0.0.1#5335 -ipset=/.cochina.org/gfwlist -server=/.codeshare.io/127.0.0.1#5335 -ipset=/.codeshare.io/gfwlist -server=/.codeskulptor.org/127.0.0.1#5335 -ipset=/.codeskulptor.org/gfwlist -server=/.coin2co.in/127.0.0.1#5335 -ipset=/.coin2co.in/gfwlist -server=/.coinbene.com/127.0.0.1#5335 -ipset=/.coinbene.com/gfwlist -server=/.coinegg.com/127.0.0.1#5335 -ipset=/.coinegg.com/gfwlist -server=/.coinex.com/127.0.0.1#5335 -ipset=/.coinex.com/gfwlist -server=/.coingi.com/127.0.0.1#5335 -ipset=/.coingi.com/gfwlist -server=/.coinrail.co.kr/127.0.0.1#5335 -ipset=/.coinrail.co.kr/gfwlist -server=/.cointiger.com/127.0.0.1#5335 -ipset=/.cointiger.com/gfwlist -server=/.cointobe.com/127.0.0.1#5335 -ipset=/.cointobe.com/gfwlist -server=/.coinut.com/127.0.0.1#5335 -ipset=/.coinut.com/gfwlist -server=/.collateralmurder.com/127.0.0.1#5335 -ipset=/.collateralmurder.com/gfwlist -server=/.collateralmurder.org/127.0.0.1#5335 -ipset=/.collateralmurder.org/gfwlist -server=/.com.google/127.0.0.1#5335 -ipset=/.com.google/gfwlist -server=/.comefromchina.com/127.0.0.1#5335 -ipset=/.comefromchina.com/gfwlist -server=/.comic-mega.me/127.0.0.1#5335 -ipset=/.comic-mega.me/gfwlist -server=/.commandarms.com/127.0.0.1#5335 -ipset=/.commandarms.com/gfwlist -server=/.commentshk.com/127.0.0.1#5335 -ipset=/.commentshk.com/gfwlist -server=/.communistcrimes.org/127.0.0.1#5335 -ipset=/.communistcrimes.org/gfwlist -server=/.community.windy.com/127.0.0.1#5335 -ipset=/.community.windy.com/gfwlist -server=/.communitychoicecu.com/127.0.0.1#5335 -ipset=/.communitychoicecu.com/gfwlist -server=/.compileheart.com/127.0.0.1#5335 -ipset=/.compileheart.com/gfwlist -server=/.compress.to/127.0.0.1#5335 -ipset=/.compress.to/gfwlist -server=/.connect.facebook.net/127.0.0.1#5335 -ipset=/.connect.facebook.net/gfwlist -server=/.conoha.jp/127.0.0.1#5335 -ipset=/.conoha.jp/gfwlist -server=/.contactmagazine.net/127.0.0.1#5335 -ipset=/.contactmagazine.net/gfwlist -server=/.contests.twilio.com/127.0.0.1#5335 -ipset=/.contests.twilio.com/gfwlist -server=/.convio.net/127.0.0.1#5335 -ipset=/.convio.net/gfwlist -server=/.coobay.com/127.0.0.1#5335 -ipset=/.coobay.com/gfwlist -server=/.coolaler.com/127.0.0.1#5335 -ipset=/.coolaler.com/gfwlist -server=/.coolder.com/127.0.0.1#5335 -ipset=/.coolder.com/gfwlist -server=/.coolloud.org.tw/127.0.0.1#5335 -ipset=/.coolloud.org.tw/gfwlist -server=/.coolncute.com/127.0.0.1#5335 -ipset=/.coolncute.com/gfwlist -server=/.coolstuffinc.com/127.0.0.1#5335 -ipset=/.coolstuffinc.com/gfwlist -server=/.corumcollege.com/127.0.0.1#5335 -ipset=/.corumcollege.com/gfwlist -server=/.cos-moe.com/127.0.0.1#5335 -ipset=/.cos-moe.com/gfwlist -server=/.cosmic.monar.ch/127.0.0.1#5335 -ipset=/.cosmic.monar.ch/gfwlist -server=/.cosplayjav.pl/127.0.0.1#5335 -ipset=/.cosplayjav.pl/gfwlist -server=/.costco.com/127.0.0.1#5335 -ipset=/.costco.com/gfwlist -server=/.cotweet.com/127.0.0.1#5335 -ipset=/.cotweet.com/gfwlist -server=/.counter.social/127.0.0.1#5335 -ipset=/.counter.social/gfwlist -server=/.coursehero.com/127.0.0.1#5335 -ipset=/.coursehero.com/gfwlist -server=/.cpj.org/127.0.0.1#5335 -ipset=/.cpj.org/gfwlist -server=/.cq99.us/127.0.0.1#5335 -ipset=/.cq99.us/gfwlist -server=/.crackle.com/127.0.0.1#5335 -ipset=/.crackle.com/gfwlist -server=/.crazys.cc/127.0.0.1#5335 -ipset=/.crazys.cc/gfwlist -server=/.crazyshit.com/127.0.0.1#5335 -ipset=/.crazyshit.com/gfwlist -server=/.crbug.com/127.0.0.1#5335 -ipset=/.crbug.com/gfwlist -server=/.crchina.org/127.0.0.1#5335 -ipset=/.crchina.org/gfwlist -server=/.crd-net.org/127.0.0.1#5335 -ipset=/.crd-net.org/gfwlist -server=/.creaders.net/127.0.0.1#5335 -ipset=/.creaders.net/gfwlist -server=/.creadersnet.com/127.0.0.1#5335 -ipset=/.creadersnet.com/gfwlist -server=/.creativelab5.com/127.0.0.1#5335 -ipset=/.creativelab5.com/gfwlist -server=/.crisisresponse.google/127.0.0.1#5335 -ipset=/.crisisresponse.google/gfwlist -server=/.cristyli.com/127.0.0.1#5335 -ipset=/.cristyli.com/gfwlist -server=/.crocotube.com/127.0.0.1#5335 -ipset=/.crocotube.com/gfwlist -server=/.crossfire.co.kr/127.0.0.1#5335 -ipset=/.crossfire.co.kr/gfwlist -server=/.crossthewall.net/127.0.0.1#5335 -ipset=/.crossthewall.net/gfwlist -server=/.crossvpn.net/127.0.0.1#5335 -ipset=/.crossvpn.net/gfwlist -server=/.crrev.com/127.0.0.1#5335 -ipset=/.crrev.com/gfwlist -server=/.crucial.com/127.0.0.1#5335 -ipset=/.crucial.com/gfwlist -server=/.csdparty.com/127.0.0.1#5335 -ipset=/.csdparty.com/gfwlist -server=/.css.pixnet.in/127.0.0.1#5335 -ipset=/.css.pixnet.in/gfwlist -server=/.csuchen.de/127.0.0.1#5335 -ipset=/.csuchen.de/gfwlist -server=/.csw.org.uk/127.0.0.1#5335 -ipset=/.csw.org.uk/gfwlist -server=/.ct.org.tw/127.0.0.1#5335 -ipset=/.ct.org.tw/gfwlist -server=/.ctao.org/127.0.0.1#5335 -ipset=/.ctao.org/gfwlist -server=/.ctfriend.net/127.0.0.1#5335 -ipset=/.ctfriend.net/gfwlist -server=/.ctitv.com.tw/127.0.0.1#5335 -ipset=/.ctitv.com.tw/gfwlist -server=/.cts.com.tw/127.0.0.1#5335 -ipset=/.cts.com.tw/gfwlist -server=/.cuihua.org/127.0.0.1#5335 -ipset=/.cuihua.org/gfwlist -server=/.cuiweiping.net/127.0.0.1#5335 -ipset=/.cuiweiping.net/gfwlist -server=/.culture.tw/127.0.0.1#5335 -ipset=/.culture.tw/gfwlist -server=/.cumlouder.com/127.0.0.1#5335 -ipset=/.cumlouder.com/gfwlist -server=/.curvefish.com/127.0.0.1#5335 -ipset=/.curvefish.com/gfwlist -server=/.cusu.hk/127.0.0.1#5335 -ipset=/.cusu.hk/gfwlist -server=/.cutscenes.net/127.0.0.1#5335 -ipset=/.cutscenes.net/gfwlist -server=/.cw.com.tw/127.0.0.1#5335 -ipset=/.cw.com.tw/gfwlist -server=/.cyberghost.natado.com/127.0.0.1#5335 -ipset=/.cyberghost.natado.com/gfwlist -server=/.cyberghostvpn.com/127.0.0.1#5335 -ipset=/.cyberghostvpn.com/gfwlist -server=/.cynscribe.com/127.0.0.1#5335 -ipset=/.cynscribe.com/gfwlist -server=/.cytode.us/127.0.0.1#5335 -ipset=/.cytode.us/gfwlist -server=/.d-fukyu.com/127.0.0.1#5335 -ipset=/.d-fukyu.com/gfwlist -server=/.d100.net/127.0.0.1#5335 -ipset=/.d100.net/gfwlist -server=/.d1b183sg0nvnuh.cloudfront.net/127.0.0.1#5335 -ipset=/.d1b183sg0nvnuh.cloudfront.net/gfwlist -server=/.d1c37gjwa26taa.cloudfront.net/127.0.0.1#5335 -ipset=/.d1c37gjwa26taa.cloudfront.net/gfwlist -server=/.d2bay.com/127.0.0.1#5335 -ipset=/.d2bay.com/gfwlist -server=/.d2pass.com/127.0.0.1#5335 -ipset=/.d2pass.com/gfwlist -server=/.d3c33hcgiwev3.cloudfront.net/127.0.0.1#5335 -ipset=/.d3c33hcgiwev3.cloudfront.net/gfwlist -server=/.d3rhr7kgmtrq1v.cloudfront.net/127.0.0.1#5335 -ipset=/.d3rhr7kgmtrq1v.cloudfront.net/gfwlist -server=/.dabr.co.uk/127.0.0.1#5335 -ipset=/.dabr.co.uk/gfwlist -server=/.dabr.eu/127.0.0.1#5335 -ipset=/.dabr.eu/gfwlist -server=/.dabr.me/127.0.0.1#5335 -ipset=/.dabr.me/gfwlist -server=/.dabr.mobi/127.0.0.1#5335 -ipset=/.dabr.mobi/gfwlist -server=/.dadazim.com/127.0.0.1#5335 -ipset=/.dadazim.com/gfwlist -server=/.dadi360.com/127.0.0.1#5335 -ipset=/.dadi360.com/gfwlist -server=/.dafabet.com/127.0.0.1#5335 -ipset=/.dafabet.com/gfwlist -server=/.dafagood.com/127.0.0.1#5335 -ipset=/.dafagood.com/gfwlist -server=/.dafahao.com/127.0.0.1#5335 -ipset=/.dafahao.com/gfwlist -server=/.dafoh.org/127.0.0.1#5335 -ipset=/.dafoh.org/gfwlist -server=/.daftporn.com/127.0.0.1#5335 -ipset=/.daftporn.com/gfwlist -server=/.dagelijksestandaard.nl/127.0.0.1#5335 -ipset=/.dagelijksestandaard.nl/gfwlist -server=/.daidostup.ru/127.0.0.1#5335 -ipset=/.daidostup.ru/gfwlist -server=/.dailidaili.com/127.0.0.1#5335 -ipset=/.dailidaili.com/gfwlist -server=/.dailymotion.com/127.0.0.1#5335 -ipset=/.dailymotion.com/gfwlist -server=/.dailyview.tw/127.0.0.1#5335 -ipset=/.dailyview.tw/gfwlist -server=/.daiphapinfo.net/127.0.0.1#5335 -ipset=/.daiphapinfo.net/gfwlist -server=/.dajiyuan.com/127.0.0.1#5335 -ipset=/.dajiyuan.com/gfwlist -server=/.dajiyuan.de/127.0.0.1#5335 -ipset=/.dajiyuan.de/gfwlist -server=/.dajiyuan.eu/127.0.0.1#5335 -ipset=/.dajiyuan.eu/gfwlist -server=/.dajusha.baywords.com/127.0.0.1#5335 -ipset=/.dajusha.baywords.com/gfwlist -server=/.dalailama-archives.org/127.0.0.1#5335 -ipset=/.dalailama-archives.org/gfwlist -server=/.dalailama.com/127.0.0.1#5335 -ipset=/.dalailama.com/gfwlist -server=/.dalailama.mn/127.0.0.1#5335 -ipset=/.dalailama.mn/gfwlist -server=/.dalailama.ru/127.0.0.1#5335 -ipset=/.dalailama.ru/gfwlist -server=/.dalailama.usc.edu/127.0.0.1#5335 -ipset=/.dalailama.usc.edu/gfwlist -server=/.dalailama80.org/127.0.0.1#5335 -ipset=/.dalailama80.org/gfwlist -server=/.dalailamacenter.org/127.0.0.1#5335 -ipset=/.dalailamacenter.org/gfwlist -server=/.dalailamafellows.org/127.0.0.1#5335 -ipset=/.dalailamafellows.org/gfwlist -server=/.dalailamafilm.com/127.0.0.1#5335 -ipset=/.dalailamafilm.com/gfwlist -server=/.dalailamafoundation.org/127.0.0.1#5335 -ipset=/.dalailamafoundation.org/gfwlist -server=/.dalailamahindi.com/127.0.0.1#5335 -ipset=/.dalailamahindi.com/gfwlist -server=/.dalailamainaustralia.org/127.0.0.1#5335 -ipset=/.dalailamainaustralia.org/gfwlist -server=/.dalailamajapanese.com/127.0.0.1#5335 -ipset=/.dalailamajapanese.com/gfwlist -server=/.dalailamaprotesters.info/127.0.0.1#5335 -ipset=/.dalailamaprotesters.info/gfwlist -server=/.dalailamaquotes.org/127.0.0.1#5335 -ipset=/.dalailamaquotes.org/gfwlist -server=/.dalailamatrust.org/127.0.0.1#5335 -ipset=/.dalailamatrust.org/gfwlist -server=/.dalailamavisit.org.nz/127.0.0.1#5335 -ipset=/.dalailamavisit.org.nz/gfwlist -server=/.dalailamaworld.com/127.0.0.1#5335 -ipset=/.dalailamaworld.com/gfwlist -server=/.dalianmeng.org/127.0.0.1#5335 -ipset=/.dalianmeng.org/gfwlist -server=/.daliulian.org/127.0.0.1#5335 -ipset=/.daliulian.org/gfwlist -server=/.danbooru.donmai.us/127.0.0.1#5335 -ipset=/.danbooru.donmai.us/gfwlist -server=/.danke4china.net/127.0.0.1#5335 -ipset=/.danke4china.net/gfwlist -server=/.danwei.org/127.0.0.1#5335 -ipset=/.danwei.org/gfwlist -server=/.daodu14.jigsy.com/127.0.0.1#5335 -ipset=/.daodu14.jigsy.com/gfwlist -server=/.daolan.net/127.0.0.1#5335 -ipset=/.daolan.net/gfwlist -server=/.daozhongxing.org/127.0.0.1#5335 -ipset=/.daozhongxing.org/gfwlist -server=/.darktech.org/127.0.0.1#5335 -ipset=/.darktech.org/gfwlist -server=/.darktoy.net/127.0.0.1#5335 -ipset=/.darktoy.net/gfwlist -server=/.darpa.mil/127.0.0.1#5335 -ipset=/.darpa.mil/gfwlist -server=/.dastrassi.org/127.0.0.1#5335 -ipset=/.dastrassi.org/gfwlist -server=/.data-vocabulary.org/127.0.0.1#5335 -ipset=/.data-vocabulary.org/gfwlist -server=/.data.flurry.com/127.0.0.1#5335 -ipset=/.data.flurry.com/gfwlist -server=/.data.gov.tw/127.0.0.1#5335 -ipset=/.data.gov.tw/gfwlist -server=/.daum.net/127.0.0.1#5335 -ipset=/.daum.net/gfwlist -server=/.david-kilgour.com/127.0.0.1#5335 -ipset=/.david-kilgour.com/gfwlist -server=/.dawangidc.com/127.0.0.1#5335 -ipset=/.dawangidc.com/gfwlist -server=/.daxa.cn/127.0.0.1#5335 -ipset=/.daxa.cn/gfwlist -server=/.db.tt/127.0.0.1#5335 -ipset=/.db.tt/gfwlist -server=/.dcard.tw/127.0.0.1#5335 -ipset=/.dcard.tw/gfwlist -server=/.dcmilitary.com/127.0.0.1#5335 -ipset=/.dcmilitary.com/gfwlist -server=/.ddc.com.tw/127.0.0.1#5335 -ipset=/.ddc.com.tw/gfwlist -server=/.ddhw.info/127.0.0.1#5335 -ipset=/.ddhw.info/gfwlist -server=/.ddns.info/127.0.0.1#5335 -ipset=/.ddns.info/gfwlist -server=/.ddns.me.uk/127.0.0.1#5335 -ipset=/.ddns.me.uk/gfwlist -server=/.ddns.mobi/127.0.0.1#5335 -ipset=/.ddns.mobi/gfwlist -server=/.ddns.ms/127.0.0.1#5335 -ipset=/.ddns.ms/gfwlist -server=/.ddns.name/127.0.0.1#5335 -ipset=/.ddns.name/gfwlist -server=/.ddns.us/127.0.0.1#5335 -ipset=/.ddns.us/gfwlist -server=/.de-sci.org/127.0.0.1#5335 -ipset=/.de-sci.org/gfwlist -server=/.deaftone.com/127.0.0.1#5335 -ipset=/.deaftone.com/gfwlist -server=/.debug.com/127.0.0.1#5335 -ipset=/.debug.com/gfwlist -server=/.deck.ly/127.0.0.1#5335 -ipset=/.deck.ly/gfwlist -server=/.decodet.co/127.0.0.1#5335 -ipset=/.decodet.co/gfwlist -server=/.deepmind.com/127.0.0.1#5335 -ipset=/.deepmind.com/gfwlist -server=/.deezer.com/127.0.0.1#5335 -ipset=/.deezer.com/gfwlist -server=/.definebabe.com/127.0.0.1#5335 -ipset=/.definebabe.com/gfwlist -server=/.deja.com/127.0.0.1#5335 -ipset=/.deja.com/gfwlist -server=/.delcamp.net/127.0.0.1#5335 -ipset=/.delcamp.net/gfwlist -server=/.demo.opera-mini.net/127.0.0.1#5335 -ipset=/.demo.opera-mini.net/gfwlist -server=/.democrats.org/127.0.0.1#5335 -ipset=/.democrats.org/gfwlist -server=/.demosisto.hk/127.0.0.1#5335 -ipset=/.demosisto.hk/gfwlist -server=/.depositphotos.com/127.0.0.1#5335 -ipset=/.depositphotos.com/gfwlist -server=/.derekhsu.homeip.net/127.0.0.1#5335 -ipset=/.derekhsu.homeip.net/gfwlist -server=/.desc.se/127.0.0.1#5335 -ipset=/.desc.se/gfwlist -server=/.design.google/127.0.0.1#5335 -ipset=/.design.google/gfwlist -server=/.desipro.de/127.0.0.1#5335 -ipset=/.desipro.de/gfwlist -server=/.dessci.com/127.0.0.1#5335 -ipset=/.dessci.com/gfwlist -server=/.destroy-china.jp/127.0.0.1#5335 -ipset=/.destroy-china.jp/gfwlist -server=/.deutsche-welle.de/127.0.0.1#5335 -ipset=/.deutsche-welle.de/gfwlist -server=/.developers.box.net/127.0.0.1#5335 -ipset=/.developers.box.net/gfwlist -server=/.devio.us/127.0.0.1#5335 -ipset=/.devio.us/gfwlist -server=/.devpn.com/127.0.0.1#5335 -ipset=/.devpn.com/gfwlist -server=/.dfas.mil/127.0.0.1#5335 -ipset=/.dfas.mil/gfwlist -server=/.dfn.org/127.0.0.1#5335 -ipset=/.dfn.org/gfwlist -server=/.dharamsalanet.com/127.0.0.1#5335 -ipset=/.dharamsalanet.com/gfwlist -server=/.dharmakara.net/127.0.0.1#5335 -ipset=/.dharmakara.net/gfwlist -server=/.dhcp.biz/127.0.0.1#5335 -ipset=/.dhcp.biz/gfwlist -server=/.diaoyuislands.org/127.0.0.1#5335 -ipset=/.diaoyuislands.org/gfwlist -server=/.dictionary.goo.ne.jp/127.0.0.1#5335 -ipset=/.dictionary.goo.ne.jp/gfwlist -server=/.difangwenge.org/127.0.0.1#5335 -ipset=/.difangwenge.org/gfwlist -server=/.digisfera.com/127.0.0.1#5335 -ipset=/.digisfera.com/gfwlist -server=/.digitalnomadsproject.org/127.0.0.1#5335 -ipset=/.digitalnomadsproject.org/gfwlist -server=/.diigo.com/127.0.0.1#5335 -ipset=/.diigo.com/gfwlist -server=/.dilber.se/127.0.0.1#5335 -ipset=/.dilber.se/gfwlist -server=/.dingchin.com.tw/127.0.0.1#5335 -ipset=/.dingchin.com.tw/gfwlist -server=/.dipity.com/127.0.0.1#5335 -ipset=/.dipity.com/gfwlist -server=/.directcreative.com/127.0.0.1#5335 -ipset=/.directcreative.com/gfwlist -server=/.discoins.com/127.0.0.1#5335 -ipset=/.discoins.com/gfwlist -server=/.disconnect.me/127.0.0.1#5335 -ipset=/.disconnect.me/gfwlist -server=/.discord.com/127.0.0.1#5335 -ipset=/.discord.com/gfwlist -server=/.discord.gg/127.0.0.1#5335 -ipset=/.discord.gg/gfwlist -server=/.discordapp.com/127.0.0.1#5335 -ipset=/.discordapp.com/gfwlist -server=/.discordapp.net/127.0.0.1#5335 -ipset=/.discordapp.net/gfwlist -server=/.discuss.com.hk/127.0.0.1#5335 -ipset=/.discuss.com.hk/gfwlist -server=/.discuss4u.com/127.0.0.1#5335 -ipset=/.discuss4u.com/gfwlist -server=/.dish.com/127.0.0.1#5335 -ipset=/.dish.com/gfwlist -server=/.disp.cc/127.0.0.1#5335 -ipset=/.disp.cc/gfwlist -server=/.disqus.com/127.0.0.1#5335 -ipset=/.disqus.com/gfwlist -server=/.dit-inc.us/127.0.0.1#5335 -ipset=/.dit-inc.us/gfwlist -server=/.dizhidizhi.com/127.0.0.1#5335 -ipset=/.dizhidizhi.com/gfwlist -server=/.dizhuzhishang.com/127.0.0.1#5335 -ipset=/.dizhuzhishang.com/gfwlist -server=/.djangosnippets.org/127.0.0.1#5335 -ipset=/.djangosnippets.org/gfwlist -server=/.djorz.com/127.0.0.1#5335 -ipset=/.djorz.com/gfwlist -server=/.dl-laby.jp/127.0.0.1#5335 -ipset=/.dl-laby.jp/gfwlist -server=/.dl.box.net/127.0.0.1#5335 -ipset=/.dl.box.net/gfwlist -server=/.dlsite.com/127.0.0.1#5335 -ipset=/.dlsite.com/gfwlist -server=/.dlyoutube.com/127.0.0.1#5335 -ipset=/.dlyoutube.com/gfwlist -server=/.dm530.net/127.0.0.1#5335 -ipset=/.dm530.net/gfwlist -server=/.dmcdn.net/127.0.0.1#5335 -ipset=/.dmcdn.net/gfwlist -server=/.dmhy.org/127.0.0.1#5335 -ipset=/.dmhy.org/gfwlist -server=/.dmm.co.jp/127.0.0.1#5335 -ipset=/.dmm.co.jp/gfwlist -server=/.dns-dns.com/127.0.0.1#5335 -ipset=/.dns-dns.com/gfwlist -server=/.dns-stuff.com/127.0.0.1#5335 -ipset=/.dns-stuff.com/gfwlist -server=/.dns.google/127.0.0.1#5335 -ipset=/.dns.google/gfwlist -server=/.dns04.com/127.0.0.1#5335 -ipset=/.dns04.com/gfwlist -server=/.dns05.com/127.0.0.1#5335 -ipset=/.dns05.com/gfwlist -server=/.dns1.us/127.0.0.1#5335 -ipset=/.dns1.us/gfwlist -server=/.dns2.us/127.0.0.1#5335 -ipset=/.dns2.us/gfwlist -server=/.dns2go.com/127.0.0.1#5335 -ipset=/.dns2go.com/gfwlist -server=/.dnscrypt.org/127.0.0.1#5335 -ipset=/.dnscrypt.org/gfwlist -server=/.dnset.com/127.0.0.1#5335 -ipset=/.dnset.com/gfwlist -server=/.dnsrd.com/127.0.0.1#5335 -ipset=/.dnsrd.com/gfwlist -server=/.dnssec.net/127.0.0.1#5335 -ipset=/.dnssec.net/gfwlist -server=/.dnvod.tv/127.0.0.1#5335 -ipset=/.dnvod.tv/gfwlist -server=/.doctorvoice.org/127.0.0.1#5335 -ipset=/.doctorvoice.org/gfwlist -server=/.documentingreality.com/127.0.0.1#5335 -ipset=/.documentingreality.com/gfwlist -server=/.dojin.com/127.0.0.1#5335 -ipset=/.dojin.com/gfwlist -server=/.dok-forum.net/127.0.0.1#5335 -ipset=/.dok-forum.net/gfwlist -server=/.dolc.de/127.0.0.1#5335 -ipset=/.dolc.de/gfwlist -server=/.dolf.org.hk/127.0.0.1#5335 -ipset=/.dolf.org.hk/gfwlist -server=/.dollf.com/127.0.0.1#5335 -ipset=/.dollf.com/gfwlist -server=/.domain.club.tw/127.0.0.1#5335 -ipset=/.domain.club.tw/gfwlist -server=/.domainhelp.search.com/127.0.0.1#5335 -ipset=/.domainhelp.search.com/gfwlist -server=/.domains.google/127.0.0.1#5335 -ipset=/.domains.google/gfwlist -server=/.domaintoday.com.au/127.0.0.1#5335 -ipset=/.domaintoday.com.au/gfwlist -server=/.dongtaiwang.com/127.0.0.1#5335 -ipset=/.dongtaiwang.com/gfwlist -server=/.dongtaiwang.net/127.0.0.1#5335 -ipset=/.dongtaiwang.net/gfwlist -server=/.dongyangjing.com/127.0.0.1#5335 -ipset=/.dongyangjing.com/gfwlist -server=/.dontfilter.us/127.0.0.1#5335 -ipset=/.dontfilter.us/gfwlist -server=/.dontmovetochina.com/127.0.0.1#5335 -ipset=/.dontmovetochina.com/gfwlist -server=/.dorjeshugden.com/127.0.0.1#5335 -ipset=/.dorjeshugden.com/gfwlist -server=/.dotplane.com/127.0.0.1#5335 -ipset=/.dotplane.com/gfwlist -server=/.dotsub.com/127.0.0.1#5335 -ipset=/.dotsub.com/gfwlist -server=/.dotvpn.com/127.0.0.1#5335 -ipset=/.dotvpn.com/gfwlist -server=/.doub.io/127.0.0.1#5335 -ipset=/.doub.io/gfwlist -server=/.doubibackup.com/127.0.0.1#5335 -ipset=/.doubibackup.com/gfwlist -server=/.doubmirror.cf/127.0.0.1#5335 -ipset=/.doubmirror.cf/gfwlist -server=/.dougscripts.com/127.0.0.1#5335 -ipset=/.dougscripts.com/gfwlist -server=/.douhokanko.net/127.0.0.1#5335 -ipset=/.douhokanko.net/gfwlist -server=/.doujincafe.com/127.0.0.1#5335 -ipset=/.doujincafe.com/gfwlist -server=/.dowei.org/127.0.0.1#5335 -ipset=/.dowei.org/gfwlist -server=/.download.aircrack-ng.org/127.0.0.1#5335 -ipset=/.download.aircrack-ng.org/gfwlist -server=/.download.cnet.com/127.0.0.1#5335 -ipset=/.download.cnet.com/gfwlist -server=/.download.ithome.com.tw/127.0.0.1#5335 -ipset=/.download.ithome.com.tw/gfwlist -server=/.dphk.org/127.0.0.1#5335 -ipset=/.dphk.org/gfwlist -server=/.dpp.org.tw/127.0.0.1#5335 -ipset=/.dpp.org.tw/gfwlist -server=/.dpr.info/127.0.0.1#5335 -ipset=/.dpr.info/gfwlist -server=/.dragonex.io/127.0.0.1#5335 -ipset=/.dragonex.io/gfwlist -server=/.dragonsprings.org/127.0.0.1#5335 -ipset=/.dragonsprings.org/gfwlist -server=/.dreamamateurs.com/127.0.0.1#5335 -ipset=/.dreamamateurs.com/gfwlist -server=/.drepung.org/127.0.0.1#5335 -ipset=/.drepung.org/gfwlist -server=/.drgan.net/127.0.0.1#5335 -ipset=/.drgan.net/gfwlist -server=/.drmingxia.org/127.0.0.1#5335 -ipset=/.drmingxia.org/gfwlist -server=/.dropbooks.tv/127.0.0.1#5335 -ipset=/.dropbooks.tv/gfwlist -server=/.dropbox.com/127.0.0.1#5335 -ipset=/.dropbox.com/gfwlist -server=/.dropboxusercontent.com/127.0.0.1#5335 -ipset=/.dropboxusercontent.com/gfwlist -server=/.drsunacademy.com/127.0.0.1#5335 -ipset=/.drsunacademy.com/gfwlist -server=/.drtuber.com/127.0.0.1#5335 -ipset=/.drtuber.com/gfwlist -server=/.dscn.info/127.0.0.1#5335 -ipset=/.dscn.info/gfwlist -server=/.dsmtp.com/127.0.0.1#5335 -ipset=/.dsmtp.com/gfwlist -server=/.dstk.dk/127.0.0.1#5335 -ipset=/.dstk.dk/gfwlist -server=/.dtdns.net/127.0.0.1#5335 -ipset=/.dtdns.net/gfwlist -server=/.dtiblog.com/127.0.0.1#5335 -ipset=/.dtiblog.com/gfwlist -server=/.dtic.mil/127.0.0.1#5335 -ipset=/.dtic.mil/gfwlist -server=/.dtwang.org/127.0.0.1#5335 -ipset=/.dtwang.org/gfwlist -server=/.duanzhihu.com/127.0.0.1#5335 -ipset=/.duanzhihu.com/gfwlist -server=/.dubox.com/127.0.0.1#5335 -ipset=/.dubox.com/gfwlist -server=/.duck.com/127.0.0.1#5335 -ipset=/.duck.com/gfwlist -server=/.duckdns.org/127.0.0.1#5335 -ipset=/.duckdns.org/gfwlist -server=/.duckduckgo-owned-server.yahoo.net/127.0.0.1#5335 -ipset=/.duckduckgo-owned-server.yahoo.net/gfwlist -server=/.duckduckgo.com/127.0.0.1#5335 -ipset=/.duckduckgo.com/gfwlist -server=/.duckmylife.com/127.0.0.1#5335 -ipset=/.duckmylife.com/gfwlist -server=/.duga.jp/127.0.0.1#5335 -ipset=/.duga.jp/gfwlist -server=/.duihua.org/127.0.0.1#5335 -ipset=/.duihua.org/gfwlist -server=/.duihuahrjournal.org/127.0.0.1#5335 -ipset=/.duihuahrjournal.org/gfwlist -server=/.dumb1.com/127.0.0.1#5335 -ipset=/.dumb1.com/gfwlist -server=/.dunyabulteni.net/127.0.0.1#5335 -ipset=/.dunyabulteni.net/gfwlist -server=/.duoweitimes.com/127.0.0.1#5335 -ipset=/.duoweitimes.com/gfwlist -server=/.duping.net/127.0.0.1#5335 -ipset=/.duping.net/gfwlist -server=/.duplicati.com/127.0.0.1#5335 -ipset=/.duplicati.com/gfwlist -server=/.dupola.com/127.0.0.1#5335 -ipset=/.dupola.com/gfwlist -server=/.dupola.net/127.0.0.1#5335 -ipset=/.dupola.net/gfwlist -server=/.dushi.ca/127.0.0.1#5335 -ipset=/.dushi.ca/gfwlist -server=/.dvdpac.com/127.0.0.1#5335 -ipset=/.dvdpac.com/gfwlist -server=/.dvorak.org/127.0.0.1#5335 -ipset=/.dvorak.org/gfwlist -server=/.dw-world.com/127.0.0.1#5335 -ipset=/.dw-world.com/gfwlist -server=/.dw-world.de/127.0.0.1#5335 -ipset=/.dw-world.de/gfwlist -server=/.dw.com/127.0.0.1#5335 -ipset=/.dw.com/gfwlist -server=/.dw.de/127.0.0.1#5335 -ipset=/.dw.de/gfwlist -server=/.dwnews.com/127.0.0.1#5335 -ipset=/.dwnews.com/gfwlist -server=/.dwnews.net/127.0.0.1#5335 -ipset=/.dwnews.net/gfwlist -server=/.dynamic-dns.net/127.0.0.1#5335 -ipset=/.dynamic-dns.net/gfwlist -server=/.dynamicdns.biz/127.0.0.1#5335 -ipset=/.dynamicdns.biz/gfwlist -server=/.dynamicdns.co.uk/127.0.0.1#5335 -ipset=/.dynamicdns.co.uk/gfwlist -server=/.dynamicdns.me.uk/127.0.0.1#5335 -ipset=/.dynamicdns.me.uk/gfwlist -server=/.dynamicdns.org.uk/127.0.0.1#5335 -ipset=/.dynamicdns.org.uk/gfwlist -server=/.dynawebinc.com/127.0.0.1#5335 -ipset=/.dynawebinc.com/gfwlist -server=/.dyndns-ip.com/127.0.0.1#5335 -ipset=/.dyndns-ip.com/gfwlist -server=/.dyndns-pics.com/127.0.0.1#5335 -ipset=/.dyndns-pics.com/gfwlist -server=/.dyndns.org/127.0.0.1#5335 -ipset=/.dyndns.org/gfwlist -server=/.dyndns.pro/127.0.0.1#5335 -ipset=/.dyndns.pro/gfwlist -server=/.dynssl.com/127.0.0.1#5335 -ipset=/.dynssl.com/gfwlist -server=/.dynu.com/127.0.0.1#5335 -ipset=/.dynu.com/gfwlist -server=/.dynu.net/127.0.0.1#5335 -ipset=/.dynu.net/gfwlist -server=/.dysfz.cc/127.0.0.1#5335 -ipset=/.dysfz.cc/gfwlist -server=/.dzze.com/127.0.0.1#5335 -ipset=/.dzze.com/gfwlist -server=/.e-classical.com.tw/127.0.0.1#5335 -ipset=/.e-classical.com.tw/gfwlist -server=/.e-gold.com/127.0.0.1#5335 -ipset=/.e-gold.com/gfwlist -server=/.e-hentai.org/127.0.0.1#5335 -ipset=/.e-hentai.org/gfwlist -server=/.e-hentaidb.com/127.0.0.1#5335 -ipset=/.e-hentaidb.com/gfwlist -server=/.e-info.org.tw/127.0.0.1#5335 -ipset=/.e-info.org.tw/gfwlist -server=/.e123.hk/127.0.0.1#5335 -ipset=/.e123.hk/gfwlist -server=/.earlytibet.com/127.0.0.1#5335 -ipset=/.earlytibet.com/gfwlist -server=/.earthcam.com/127.0.0.1#5335 -ipset=/.earthcam.com/gfwlist -server=/.earthvpn.com/127.0.0.1#5335 -ipset=/.earthvpn.com/gfwlist -server=/.eastern-ark.com/127.0.0.1#5335 -ipset=/.eastern-ark.com/gfwlist -server=/.easternlightning.org/127.0.0.1#5335 -ipset=/.easternlightning.org/gfwlist -server=/.eastturkestan.com/127.0.0.1#5335 -ipset=/.eastturkestan.com/gfwlist -server=/.eastturkistan-gov.org/127.0.0.1#5335 -ipset=/.eastturkistan-gov.org/gfwlist -server=/.eastturkistancc.org/127.0.0.1#5335 -ipset=/.eastturkistancc.org/gfwlist -server=/.eastturkistangovernmentinexile.us/127.0.0.1#5335 -ipset=/.eastturkistangovernmentinexile.us/gfwlist -server=/.easyca.ca/127.0.0.1#5335 -ipset=/.easyca.ca/gfwlist -server=/.easypic.com/127.0.0.1#5335 -ipset=/.easypic.com/gfwlist -server=/.ebony-beauty.com/127.0.0.1#5335 -ipset=/.ebony-beauty.com/gfwlist -server=/.ebook.hyread.com.tw/127.0.0.1#5335 -ipset=/.ebook.hyread.com.tw/gfwlist -server=/.ebookbrowse.com/127.0.0.1#5335 -ipset=/.ebookbrowse.com/gfwlist -server=/.ebookee.com/127.0.0.1#5335 -ipset=/.ebookee.com/gfwlist -server=/.ebtcbank.com/127.0.0.1#5335 -ipset=/.ebtcbank.com/gfwlist -server=/.ecfa.org.tw/127.0.0.1#5335 -ipset=/.ecfa.org.tw/gfwlist -server=/.echofon.com/127.0.0.1#5335 -ipset=/.echofon.com/gfwlist -server=/.ecimg.tw/127.0.0.1#5335 -ipset=/.ecimg.tw/gfwlist -server=/.ecministry.net/127.0.0.1#5335 -ipset=/.ecministry.net/gfwlist -server=/.economist.com/127.0.0.1#5335 -ipset=/.economist.com/gfwlist -server=/.edgecastcdn.net/127.0.0.1#5335 -ipset=/.edgecastcdn.net/gfwlist -server=/.edicypages.com/127.0.0.1#5335 -ipset=/.edicypages.com/gfwlist -server=/.edmontonchina.cn/127.0.0.1#5335 -ipset=/.edmontonchina.cn/gfwlist -server=/.edmontonservice.com/127.0.0.1#5335 -ipset=/.edmontonservice.com/gfwlist -server=/.edns.biz/127.0.0.1#5335 -ipset=/.edns.biz/gfwlist -server=/.edoors.com/127.0.0.1#5335 -ipset=/.edoors.com/gfwlist -server=/.edubridge.com/127.0.0.1#5335 -ipset=/.edubridge.com/gfwlist -server=/.edupro.org/127.0.0.1#5335 -ipset=/.edupro.org/gfwlist -server=/.eesti.ee/127.0.0.1#5335 -ipset=/.eesti.ee/gfwlist -server=/.eevpn.com/127.0.0.1#5335 -ipset=/.eevpn.com/gfwlist -server=/.efcc.org.hk/127.0.0.1#5335 -ipset=/.efcc.org.hk/gfwlist -server=/.effers.com/127.0.0.1#5335 -ipset=/.effers.com/gfwlist -server=/.efksoft.com/127.0.0.1#5335 -ipset=/.efksoft.com/gfwlist -server=/.efukt.com/127.0.0.1#5335 -ipset=/.efukt.com/gfwlist -server=/.eic-av.com/127.0.0.1#5335 -ipset=/.eic-av.com/gfwlist -server=/.eireinikotaerukai.com/127.0.0.1#5335 -ipset=/.eireinikotaerukai.com/gfwlist -server=/.eisbb.com/127.0.0.1#5335 -ipset=/.eisbb.com/gfwlist -server=/.eksisozluk.com/127.0.0.1#5335 -ipset=/.eksisozluk.com/gfwlist -server=/.electionsmeter.com/127.0.0.1#5335 -ipset=/.electionsmeter.com/gfwlist -server=/.elgoog.im/127.0.0.1#5335 -ipset=/.elgoog.im/gfwlist -server=/.ellawine.org/127.0.0.1#5335 -ipset=/.ellawine.org/gfwlist -server=/.elpais.com/127.0.0.1#5335 -ipset=/.elpais.com/gfwlist -server=/.eltondisney.com/127.0.0.1#5335 -ipset=/.eltondisney.com/gfwlist -server=/.embr.in/127.0.0.1#5335 -ipset=/.embr.in/gfwlist -server=/.emilylau.org.hk/127.0.0.1#5335 -ipset=/.emilylau.org.hk/gfwlist -server=/.empfil.com/127.0.0.1#5335 -ipset=/.empfil.com/gfwlist -server=/.emule-ed2k.com/127.0.0.1#5335 -ipset=/.emule-ed2k.com/gfwlist -server=/.emulefans.com/127.0.0.1#5335 -ipset=/.emulefans.com/gfwlist -server=/.emuparadise.me/127.0.0.1#5335 -ipset=/.emuparadise.me/gfwlist -server=/.en.favotter.net/127.0.0.1#5335 -ipset=/.en.favotter.net/gfwlist -server=/.en.hao123.com/127.0.0.1#5335 -ipset=/.en.hao123.com/gfwlist -server=/.enanyang.my/127.0.0.1#5335 -ipset=/.enanyang.my/gfwlist -server=/.encyclopedia.com/127.0.0.1#5335 -ipset=/.encyclopedia.com/gfwlist -server=/.enewstree.com/127.0.0.1#5335 -ipset=/.enewstree.com/gfwlist -server=/.enfal.de/127.0.0.1#5335 -ipset=/.enfal.de/gfwlist -server=/.engagedaily.org/127.0.0.1#5335 -ipset=/.engagedaily.org/gfwlist -server=/.englishforeveryone.org/127.0.0.1#5335 -ipset=/.englishforeveryone.org/gfwlist -server=/.englishfromengland.co.uk/127.0.0.1#5335 -ipset=/.englishfromengland.co.uk/gfwlist -server=/.englishpen.org/127.0.0.1#5335 -ipset=/.englishpen.org/gfwlist -server=/.enlighten.org.tw/127.0.0.1#5335 -ipset=/.enlighten.org.tw/gfwlist -server=/.entermap.com/127.0.0.1#5335 -ipset=/.entermap.com/gfwlist -server=/.entnt.com/127.0.0.1#5335 -ipset=/.entnt.com/gfwlist -server=/.environment.google/127.0.0.1#5335 -ipset=/.environment.google/gfwlist -server=/.epa.gov.tw/127.0.0.1#5335 -ipset=/.epa.gov.tw/gfwlist -server=/.epac.to/127.0.0.1#5335 -ipset=/.epac.to/gfwlist -server=/.episcopalchurch.org/127.0.0.1#5335 -ipset=/.episcopalchurch.org/gfwlist -server=/.epochhk.com/127.0.0.1#5335 -ipset=/.epochhk.com/gfwlist -server=/.epochtimes-bg.com/127.0.0.1#5335 -ipset=/.epochtimes-bg.com/gfwlist -server=/.epochtimes-romania.com/127.0.0.1#5335 -ipset=/.epochtimes-romania.com/gfwlist -server=/.epochtimes.co.il/127.0.0.1#5335 -ipset=/.epochtimes.co.il/gfwlist -server=/.epochtimes.co.kr/127.0.0.1#5335 -ipset=/.epochtimes.co.kr/gfwlist -server=/.epochtimes.com/127.0.0.1#5335 -ipset=/.epochtimes.com/gfwlist -server=/.epochtimes.cz/127.0.0.1#5335 -ipset=/.epochtimes.cz/gfwlist -server=/.epochtimes.de/127.0.0.1#5335 -ipset=/.epochtimes.de/gfwlist -server=/.epochtimes.fr/127.0.0.1#5335 -ipset=/.epochtimes.fr/gfwlist -server=/.epochtimes.ie/127.0.0.1#5335 -ipset=/.epochtimes.ie/gfwlist -server=/.epochtimes.it/127.0.0.1#5335 -ipset=/.epochtimes.it/gfwlist -server=/.epochtimes.jp/127.0.0.1#5335 -ipset=/.epochtimes.jp/gfwlist -server=/.epochtimes.ru/127.0.0.1#5335 -ipset=/.epochtimes.ru/gfwlist -server=/.epochtimes.se/127.0.0.1#5335 -ipset=/.epochtimes.se/gfwlist -server=/.epochtimestr.com/127.0.0.1#5335 -ipset=/.epochtimestr.com/gfwlist -server=/.epochweek.com/127.0.0.1#5335 -ipset=/.epochweek.com/gfwlist -server=/.epochweekly.com/127.0.0.1#5335 -ipset=/.epochweekly.com/gfwlist -server=/.eporner.com/127.0.0.1#5335 -ipset=/.eporner.com/gfwlist -server=/.equinenow.com/127.0.0.1#5335 -ipset=/.equinenow.com/gfwlist -server=/.erabaru.net/127.0.0.1#5335 -ipset=/.erabaru.net/gfwlist -server=/.eracom.com.tw/127.0.0.1#5335 -ipset=/.eracom.com.tw/gfwlist -server=/.eraysoft.com.tr/127.0.0.1#5335 -ipset=/.eraysoft.com.tr/gfwlist -server=/.erepublik.com/127.0.0.1#5335 -ipset=/.erepublik.com/gfwlist -server=/.erights.net/127.0.0.1#5335 -ipset=/.erights.net/gfwlist -server=/.eriversoft.com/127.0.0.1#5335 -ipset=/.eriversoft.com/gfwlist -server=/.erktv.com/127.0.0.1#5335 -ipset=/.erktv.com/gfwlist -server=/.ernestmandel.org/127.0.0.1#5335 -ipset=/.ernestmandel.org/gfwlist -server=/.erodaizensyu.com/127.0.0.1#5335 -ipset=/.erodaizensyu.com/gfwlist -server=/.erodoujinlog.com/127.0.0.1#5335 -ipset=/.erodoujinlog.com/gfwlist -server=/.erodoujinworld.com/127.0.0.1#5335 -ipset=/.erodoujinworld.com/gfwlist -server=/.eromanga-kingdom.com/127.0.0.1#5335 -ipset=/.eromanga-kingdom.com/gfwlist -server=/.eromangadouzin.com/127.0.0.1#5335 -ipset=/.eromangadouzin.com/gfwlist -server=/.eromon.net/127.0.0.1#5335 -ipset=/.eromon.net/gfwlist -server=/.eroprofile.com/127.0.0.1#5335 -ipset=/.eroprofile.com/gfwlist -server=/.eroticsaloon.net/127.0.0.1#5335 -ipset=/.eroticsaloon.net/gfwlist -server=/.eslite.com/127.0.0.1#5335 -ipset=/.eslite.com/gfwlist -server=/.esmtp.biz/127.0.0.1#5335 -ipset=/.esmtp.biz/gfwlist -server=/.esurance.com/127.0.0.1#5335 -ipset=/.esurance.com/gfwlist -server=/.etaa.org.au/127.0.0.1#5335 -ipset=/.etaa.org.au/gfwlist -server=/.etadult.com/127.0.0.1#5335 -ipset=/.etadult.com/gfwlist -server=/.etaiwannews.com/127.0.0.1#5335 -ipset=/.etaiwannews.com/gfwlist -server=/.etherdelta.com/127.0.0.1#5335 -ipset=/.etherdelta.com/gfwlist -server=/.etizer.org/127.0.0.1#5335 -ipset=/.etizer.org/gfwlist -server=/.etokki.com/127.0.0.1#5335 -ipset=/.etokki.com/gfwlist -server=/.etools.ncol.com/127.0.0.1#5335 -ipset=/.etools.ncol.com/gfwlist -server=/.etowns.net/127.0.0.1#5335 -ipset=/.etowns.net/gfwlist -server=/.etowns.org/127.0.0.1#5335 -ipset=/.etowns.org/gfwlist -server=/.etvonline.hk/127.0.0.1#5335 -ipset=/.etvonline.hk/gfwlist -server=/.eu.org/127.0.0.1#5335 -ipset=/.eu.org/gfwlist -server=/.eucasino.com/127.0.0.1#5335 -ipset=/.eucasino.com/gfwlist -server=/.eulam.com/127.0.0.1#5335 -ipset=/.eulam.com/gfwlist -server=/.eurekavpt.com/127.0.0.1#5335 -ipset=/.eurekavpt.com/gfwlist -server=/.euronews.com/127.0.0.1#5335 -ipset=/.euronews.com/gfwlist -server=/.evchk.wikia.com/127.0.0.1#5335 -ipset=/.evchk.wikia.com/gfwlist -server=/.evschool.net/127.0.0.1#5335 -ipset=/.evschool.net/gfwlist -server=/.exblog.jp/127.0.0.1#5335 -ipset=/.exblog.jp/gfwlist -server=/.exchristian.hk/127.0.0.1#5335 -ipset=/.exchristian.hk/gfwlist -server=/.exmo.com/127.0.0.1#5335 -ipset=/.exmo.com/gfwlist -server=/.exmormon.org/127.0.0.1#5335 -ipset=/.exmormon.org/gfwlist -server=/.expatshield.com/127.0.0.1#5335 -ipset=/.expatshield.com/gfwlist -server=/.expecthim.com/127.0.0.1#5335 -ipset=/.expecthim.com/gfwlist -server=/.expekt.com/127.0.0.1#5335 -ipset=/.expekt.com/gfwlist -server=/.experts-univers.com/127.0.0.1#5335 -ipset=/.experts-univers.com/gfwlist -server=/.exploader.net/127.0.0.1#5335 -ipset=/.exploader.net/gfwlist -server=/.expressvpn.com/127.0.0.1#5335 -ipset=/.expressvpn.com/gfwlist -server=/.exrates.me/127.0.0.1#5335 -ipset=/.exrates.me/gfwlist -server=/.extmatrix.com/127.0.0.1#5335 -ipset=/.extmatrix.com/gfwlist -server=/.extremetube.com/127.0.0.1#5335 -ipset=/.extremetube.com/gfwlist -server=/.exx.com/127.0.0.1#5335 -ipset=/.exx.com/gfwlist -server=/.eyevio.jp/127.0.0.1#5335 -ipset=/.eyevio.jp/gfwlist -server=/.eyny.com/127.0.0.1#5335 -ipset=/.eyny.com/gfwlist -server=/.ezpeer.com/127.0.0.1#5335 -ipset=/.ezpeer.com/gfwlist -server=/.ezua.com/127.0.0.1#5335 -ipset=/.ezua.com/gfwlist -server=/.fa.gov.tw/127.0.0.1#5335 -ipset=/.fa.gov.tw/gfwlist -server=/.facebook.br/127.0.0.1#5335 -ipset=/.facebook.br/gfwlist -server=/.facebook.com/127.0.0.1#5335 -ipset=/.facebook.com/gfwlist -server=/.facebook.design/127.0.0.1#5335 -ipset=/.facebook.design/gfwlist -server=/.facebook.hu/127.0.0.1#5335 -ipset=/.facebook.hu/gfwlist -server=/.facebook.in/127.0.0.1#5335 -ipset=/.facebook.in/gfwlist -server=/.facebook.nl/127.0.0.1#5335 -ipset=/.facebook.nl/gfwlist -server=/.facebook.se/127.0.0.1#5335 -ipset=/.facebook.se/gfwlist -server=/.facebookmail.com/127.0.0.1#5335 -ipset=/.facebookmail.com/gfwlist -server=/.facebookquotes4u.com/127.0.0.1#5335 -ipset=/.facebookquotes4u.com/gfwlist -server=/.faceless.me/127.0.0.1#5335 -ipset=/.faceless.me/gfwlist -server=/.facesofnyfw.com/127.0.0.1#5335 -ipset=/.facesofnyfw.com/gfwlist -server=/.facesoftibetanselfimmolators.info/127.0.0.1#5335 -ipset=/.facesoftibetanselfimmolators.info/gfwlist -server=/.fail.hk/127.0.0.1#5335 -ipset=/.fail.hk/gfwlist -server=/.faith100.org/127.0.0.1#5335 -ipset=/.faith100.org/gfwlist -server=/.faithfuleye.com/127.0.0.1#5335 -ipset=/.faithfuleye.com/gfwlist -server=/.faiththedog.info/127.0.0.1#5335 -ipset=/.faiththedog.info/gfwlist -server=/.fakku.net/127.0.0.1#5335 -ipset=/.fakku.net/gfwlist -server=/.falsefire.com/127.0.0.1#5335 -ipset=/.falsefire.com/gfwlist -server=/.falun-co.org/127.0.0.1#5335 -ipset=/.falun-co.org/gfwlist -server=/.falun-ny.net/127.0.0.1#5335 -ipset=/.falun-ny.net/gfwlist -server=/.falun.caltech.edu/127.0.0.1#5335 -ipset=/.falun.caltech.edu/gfwlist -server=/.falunart.org/127.0.0.1#5335 -ipset=/.falunart.org/gfwlist -server=/.falunasia.info/127.0.0.1#5335 -ipset=/.falunasia.info/gfwlist -server=/.falunau.org/127.0.0.1#5335 -ipset=/.falunau.org/gfwlist -server=/.falunaz.net/127.0.0.1#5335 -ipset=/.falunaz.net/gfwlist -server=/.falundafa-dc.org/127.0.0.1#5335 -ipset=/.falundafa-dc.org/gfwlist -server=/.falundafa-florida.org/127.0.0.1#5335 -ipset=/.falundafa-florida.org/gfwlist -server=/.falundafa-nc.org/127.0.0.1#5335 -ipset=/.falundafa-nc.org/gfwlist -server=/.falundafa-pa.net/127.0.0.1#5335 -ipset=/.falundafa-pa.net/gfwlist -server=/.falundafa-sacramento.org/127.0.0.1#5335 -ipset=/.falundafa-sacramento.org/gfwlist -server=/.falundafa.org/127.0.0.1#5335 -ipset=/.falundafa.org/gfwlist -server=/.falundafaindia.org/127.0.0.1#5335 -ipset=/.falundafaindia.org/gfwlist -server=/.falundafamuseum.org/127.0.0.1#5335 -ipset=/.falundafamuseum.org/gfwlist -server=/.falungong.club/127.0.0.1#5335 -ipset=/.falungong.club/gfwlist -server=/.falungong.de/127.0.0.1#5335 -ipset=/.falungong.de/gfwlist -server=/.falungong.org.uk/127.0.0.1#5335 -ipset=/.falungong.org.uk/gfwlist -server=/.falunhr.org/127.0.0.1#5335 -ipset=/.falunhr.org/gfwlist -server=/.faluninfo.de/127.0.0.1#5335 -ipset=/.faluninfo.de/gfwlist -server=/.faluninfo.net/127.0.0.1#5335 -ipset=/.faluninfo.net/gfwlist -server=/.falunpilipinas.net/127.0.0.1#5335 -ipset=/.falunpilipinas.net/gfwlist -server=/.falunworld.net/127.0.0.1#5335 -ipset=/.falunworld.net/gfwlist -server=/.familyfed.org/127.0.0.1#5335 -ipset=/.familyfed.org/gfwlist -server=/.famunion.com/127.0.0.1#5335 -ipset=/.famunion.com/gfwlist -server=/.fan-qiang.com/127.0.0.1#5335 -ipset=/.fan-qiang.com/gfwlist -server=/.fangbinxing.com/127.0.0.1#5335 -ipset=/.fangbinxing.com/gfwlist -server=/.fangeming.com/127.0.0.1#5335 -ipset=/.fangeming.com/gfwlist -server=/.fangeqiang.com/127.0.0.1#5335 -ipset=/.fangeqiang.com/gfwlist -server=/.fanglizhi.info/127.0.0.1#5335 -ipset=/.fanglizhi.info/gfwlist -server=/.fangmincn.org/127.0.0.1#5335 -ipset=/.fangmincn.org/gfwlist -server=/.fangong.forums-free.com/127.0.0.1#5335 -ipset=/.fangong.forums-free.com/gfwlist -server=/.fangong.org/127.0.0.1#5335 -ipset=/.fangong.org/gfwlist -server=/.fangongheike.com/127.0.0.1#5335 -ipset=/.fangongheike.com/gfwlist -server=/.fanhaodang.com/127.0.0.1#5335 -ipset=/.fanhaodang.com/gfwlist -server=/.fanqiang.tk/127.0.0.1#5335 -ipset=/.fanqiang.tk/gfwlist -server=/.fanqiangdang.com/127.0.0.1#5335 -ipset=/.fanqiangdang.com/gfwlist -server=/.fanqianghou.com/127.0.0.1#5335 -ipset=/.fanqianghou.com/gfwlist -server=/.fanqiangyakexi.net/127.0.0.1#5335 -ipset=/.fanqiangyakexi.net/gfwlist -server=/.fanqiangzhe.com/127.0.0.1#5335 -ipset=/.fanqiangzhe.com/gfwlist -server=/.fanswong.com/127.0.0.1#5335 -ipset=/.fanswong.com/gfwlist -server=/.fanyue.info/127.0.0.1#5335 -ipset=/.fanyue.info/gfwlist -server=/.fapdu.com/127.0.0.1#5335 -ipset=/.fapdu.com/gfwlist -server=/.faproxy.com/127.0.0.1#5335 -ipset=/.faproxy.com/gfwlist -server=/.faqserv.com/127.0.0.1#5335 -ipset=/.faqserv.com/gfwlist -server=/.fartit.com/127.0.0.1#5335 -ipset=/.fartit.com/gfwlist -server=/.farwestchina.com/127.0.0.1#5335 -ipset=/.farwestchina.com/gfwlist -server=/.fast.wistia.com/127.0.0.1#5335 -ipset=/.fast.wistia.com/gfwlist -server=/.fastpic.ru/127.0.0.1#5335 -ipset=/.fastpic.ru/gfwlist -server=/.fastssh.com/127.0.0.1#5335 -ipset=/.fastssh.com/gfwlist -server=/.faststone.org/127.0.0.1#5335 -ipset=/.faststone.org/gfwlist -server=/.fatbtc.com/127.0.0.1#5335 -ipset=/.fatbtc.com/gfwlist -server=/.favstar.fm/127.0.0.1#5335 -ipset=/.favstar.fm/gfwlist -server=/.fawanghuihui.org/127.0.0.1#5335 -ipset=/.fawanghuihui.org/gfwlist -server=/.fb.com/127.0.0.1#5335 -ipset=/.fb.com/gfwlist -server=/.fb.me/127.0.0.1#5335 -ipset=/.fb.me/gfwlist -server=/.fbaddins.com/127.0.0.1#5335 -ipset=/.fbaddins.com/gfwlist -server=/.fbcdn.net/127.0.0.1#5335 -ipset=/.fbcdn.net/gfwlist -server=/.fbsbx.com/127.0.0.1#5335 -ipset=/.fbsbx.com/gfwlist -server=/.fbworkmail.com/127.0.0.1#5335 -ipset=/.fbworkmail.com/gfwlist -server=/.fc2.com/127.0.0.1#5335 -ipset=/.fc2.com/gfwlist -server=/.fc2blog.net/127.0.0.1#5335 -ipset=/.fc2blog.net/gfwlist -server=/.fc2china.com/127.0.0.1#5335 -ipset=/.fc2china.com/gfwlist -server=/.fc2cn.com/127.0.0.1#5335 -ipset=/.fc2cn.com/gfwlist -server=/.fda.gov.tw/127.0.0.1#5335 -ipset=/.fda.gov.tw/gfwlist -server=/.fdc64.de/127.0.0.1#5335 -ipset=/.fdc64.de/gfwlist -server=/.fdc64.org/127.0.0.1#5335 -ipset=/.fdc64.org/gfwlist -server=/.fdc89.jp/127.0.0.1#5335 -ipset=/.fdc89.jp/gfwlist -server=/.feedburner.com/127.0.0.1#5335 -ipset=/.feedburner.com/gfwlist -server=/.feedly.com/127.0.0.1#5335 -ipset=/.feedly.com/gfwlist -server=/.feeds.fileforum.com/127.0.0.1#5335 -ipset=/.feeds.fileforum.com/gfwlist -server=/.feedx.net/127.0.0.1#5335 -ipset=/.feedx.net/gfwlist -server=/.feelssh.com/127.0.0.1#5335 -ipset=/.feelssh.com/gfwlist -server=/.feer.com/127.0.0.1#5335 -ipset=/.feer.com/gfwlist -server=/.feifeiss.com/127.0.0.1#5335 -ipset=/.feifeiss.com/gfwlist -server=/.feitian-california.org/127.0.0.1#5335 -ipset=/.feitian-california.org/gfwlist -server=/.feitianacademy.org/127.0.0.1#5335 -ipset=/.feitianacademy.org/gfwlist -server=/.feministteacher.com/127.0.0.1#5335 -ipset=/.feministteacher.com/gfwlist -server=/.fengzhenghu.com/127.0.0.1#5335 -ipset=/.fengzhenghu.com/gfwlist -server=/.fengzhenghu.net/127.0.0.1#5335 -ipset=/.fengzhenghu.net/gfwlist -server=/.fevernet.com/127.0.0.1#5335 -ipset=/.fevernet.com/gfwlist -server=/.ff.im/127.0.0.1#5335 -ipset=/.ff.im/gfwlist -server=/.fffff.at/127.0.0.1#5335 -ipset=/.fffff.at/gfwlist -server=/.fflick.com/127.0.0.1#5335 -ipset=/.fflick.com/gfwlist -server=/.ffvpn.com/127.0.0.1#5335 -ipset=/.ffvpn.com/gfwlist -server=/.fgmtv.net/127.0.0.1#5335 -ipset=/.fgmtv.net/gfwlist -server=/.fgmtv.org/127.0.0.1#5335 -ipset=/.fgmtv.org/gfwlist -server=/.fhreports.net/127.0.0.1#5335 -ipset=/.fhreports.net/gfwlist -server=/.fiddle.jshell.net/127.0.0.1#5335 -ipset=/.fiddle.jshell.net/gfwlist -server=/.figprayer.com/127.0.0.1#5335 -ipset=/.figprayer.com/gfwlist -server=/.fileflyer.com/127.0.0.1#5335 -ipset=/.fileflyer.com/gfwlist -server=/.files2me.com/127.0.0.1#5335 -ipset=/.files2me.com/gfwlist -server=/.filesor.com/127.0.0.1#5335 -ipset=/.filesor.com/gfwlist -server=/.fillthesquare.org/127.0.0.1#5335 -ipset=/.fillthesquare.org/gfwlist -server=/.filmingfortibet.org/127.0.0.1#5335 -ipset=/.filmingfortibet.org/gfwlist -server=/.filthdump.com/127.0.0.1#5335 -ipset=/.filthdump.com/gfwlist -server=/.financetwitter.com/127.0.0.1#5335 -ipset=/.financetwitter.com/gfwlist -server=/.finchvpn.com/127.0.0.1#5335 -ipset=/.finchvpn.com/gfwlist -server=/.findmespot.com/127.0.0.1#5335 -ipset=/.findmespot.com/gfwlist -server=/.findyoutube.com/127.0.0.1#5335 -ipset=/.findyoutube.com/gfwlist -server=/.findyoutube.net/127.0.0.1#5335 -ipset=/.findyoutube.net/gfwlist -server=/.fingerdaily.com/127.0.0.1#5335 -ipset=/.fingerdaily.com/gfwlist -server=/.finler.net/127.0.0.1#5335 -ipset=/.finler.net/gfwlist -server=/.firearmsworld.net/127.0.0.1#5335 -ipset=/.firearmsworld.net/gfwlist -server=/.firebaseio.com/127.0.0.1#5335 -ipset=/.firebaseio.com/gfwlist -server=/.fireofliberty.org/127.0.0.1#5335 -ipset=/.fireofliberty.org/gfwlist -server=/.firetweet.io/127.0.0.1#5335 -ipset=/.firetweet.io/gfwlist -server=/.firstfivefollowers.com/127.0.0.1#5335 -ipset=/.firstfivefollowers.com/gfwlist -server=/.flagsonline.it/127.0.0.1#5335 -ipset=/.flagsonline.it/gfwlist -server=/.flecheinthepeche.fr/127.0.0.1#5335 -ipset=/.flecheinthepeche.fr/gfwlist -server=/.fleshbot.com/127.0.0.1#5335 -ipset=/.fleshbot.com/gfwlist -server=/.fleursdeslettres.com/127.0.0.1#5335 -ipset=/.fleursdeslettres.com/gfwlist -server=/.flgg.us/127.0.0.1#5335 -ipset=/.flgg.us/gfwlist -server=/.flgjustice.org/127.0.0.1#5335 -ipset=/.flgjustice.org/gfwlist -server=/.flickr.com/127.0.0.1#5335 -ipset=/.flickr.com/gfwlist -server=/.flickrhivemind.net/127.0.0.1#5335 -ipset=/.flickrhivemind.net/gfwlist -server=/.flickriver.com/127.0.0.1#5335 -ipset=/.flickriver.com/gfwlist -server=/.fling.com/127.0.0.1#5335 -ipset=/.fling.com/gfwlist -server=/.flipboard.com/127.0.0.1#5335 -ipset=/.flipboard.com/gfwlist -server=/.flipkart.com/127.0.0.1#5335 -ipset=/.flipkart.com/gfwlist -server=/.flitto.com/127.0.0.1#5335 -ipset=/.flitto.com/gfwlist -server=/.flnet.org/127.0.0.1#5335 -ipset=/.flnet.org/gfwlist -server=/.flog.tw/127.0.0.1#5335 -ipset=/.flog.tw/gfwlist -server=/.flyvpn.com/127.0.0.1#5335 -ipset=/.flyvpn.com/gfwlist -server=/.flyzy2005.com/127.0.0.1#5335 -ipset=/.flyzy2005.com/gfwlist -server=/.fnac.be/127.0.0.1#5335 -ipset=/.fnac.be/gfwlist -server=/.fnac.com/127.0.0.1#5335 -ipset=/.fnac.com/gfwlist -server=/.fochk.org/127.0.0.1#5335 -ipset=/.fochk.org/gfwlist -server=/.focustaiwan.tw/127.0.0.1#5335 -ipset=/.focustaiwan.tw/gfwlist -server=/.focusvpn.com/127.0.0.1#5335 -ipset=/.focusvpn.com/gfwlist -server=/.fofg-europe.net/127.0.0.1#5335 -ipset=/.fofg-europe.net/gfwlist -server=/.fofg.org/127.0.0.1#5335 -ipset=/.fofg.org/gfwlist -server=/.fofldfradio.org/127.0.0.1#5335 -ipset=/.fofldfradio.org/gfwlist -server=/.fooooo.com/127.0.0.1#5335 -ipset=/.fooooo.com/gfwlist -server=/.footwiball.com/127.0.0.1#5335 -ipset=/.footwiball.com/gfwlist -server=/.foreignpolicy.com/127.0.0.1#5335 -ipset=/.foreignpolicy.com/gfwlist -server=/.forum.baby-kingdom.com/127.0.0.1#5335 -ipset=/.forum.baby-kingdom.com/gfwlist -server=/.forum.cyberctm.com/127.0.0.1#5335 -ipset=/.forum.cyberctm.com/gfwlist -server=/.forum.idsam.com/127.0.0.1#5335 -ipset=/.forum.idsam.com/gfwlist -server=/.forum.my903.com/127.0.0.1#5335 -ipset=/.forum.my903.com/gfwlist -server=/.forum.mymaji.com/127.0.0.1#5335 -ipset=/.forum.mymaji.com/gfwlist -server=/.forum.omy.sg/127.0.0.1#5335 -ipset=/.forum.omy.sg/gfwlist -server=/.forum.palmislife.com/127.0.0.1#5335 -ipset=/.forum.palmislife.com/gfwlist -server=/.forum.setty.com.tw/127.0.0.1#5335 -ipset=/.forum.setty.com.tw/gfwlist -server=/.forum.sina.com.hk/127.0.0.1#5335 -ipset=/.forum.sina.com.hk/gfwlist -server=/.forum.slime.com.tw/127.0.0.1#5335 -ipset=/.forum.slime.com.tw/gfwlist -server=/.forum.tvb.com/127.0.0.1#5335 -ipset=/.forum.tvb.com/gfwlist -server=/.forum4hk.com/127.0.0.1#5335 -ipset=/.forum4hk.com/gfwlist -server=/.fotile.me/127.0.0.1#5335 -ipset=/.fotile.me/gfwlist -server=/.fourface.nodesnoop.com/127.0.0.1#5335 -ipset=/.fourface.nodesnoop.com/gfwlist -server=/.fourthinternational.org/127.0.0.1#5335 -ipset=/.fourthinternational.org/gfwlist -server=/.foxdie.us/127.0.0.1#5335 -ipset=/.foxdie.us/gfwlist -server=/.foxgay.com/127.0.0.1#5335 -ipset=/.foxgay.com/gfwlist -server=/.foxsub.com/127.0.0.1#5335 -ipset=/.foxsub.com/gfwlist -server=/.foxtang.com/127.0.0.1#5335 -ipset=/.foxtang.com/gfwlist -server=/.fpmt-osel.org/127.0.0.1#5335 -ipset=/.fpmt-osel.org/gfwlist -server=/.fpmt.org/127.0.0.1#5335 -ipset=/.fpmt.org/gfwlist -server=/.fpmt.tw/127.0.0.1#5335 -ipset=/.fpmt.tw/gfwlist -server=/.fpmtmexico.org/127.0.0.1#5335 -ipset=/.fpmtmexico.org/gfwlist -server=/.fq.wikia.com/127.0.0.1#5335 -ipset=/.fq.wikia.com/gfwlist -server=/.fqok.org/127.0.0.1#5335 -ipset=/.fqok.org/gfwlist -server=/.fqrouter.com/127.0.0.1#5335 -ipset=/.fqrouter.com/gfwlist -server=/.franklc.com/127.0.0.1#5335 -ipset=/.franklc.com/gfwlist -server=/.freakshare.com/127.0.0.1#5335 -ipset=/.freakshare.com/gfwlist -server=/.free-gate.org/127.0.0.1#5335 -ipset=/.free-gate.org/gfwlist -server=/.free-hada-now.org/127.0.0.1#5335 -ipset=/.free-hada-now.org/gfwlist -server=/.free-proxy.cz/127.0.0.1#5335 -ipset=/.free-proxy.cz/gfwlist -server=/.free-ss.site/127.0.0.1#5335 -ipset=/.free-ss.site/gfwlist -server=/.free-ssh.com/127.0.0.1#5335 -ipset=/.free-ssh.com/gfwlist -server=/.free4u.com.ar/127.0.0.1#5335 -ipset=/.free4u.com.ar/gfwlist -server=/.freealim.com/127.0.0.1#5335 -ipset=/.freealim.com/gfwlist -server=/.freebrowser.org/127.0.0.1#5335 -ipset=/.freebrowser.org/gfwlist -server=/.freechal.com/127.0.0.1#5335 -ipset=/.freechal.com/gfwlist -server=/.freechina.net/127.0.0.1#5335 -ipset=/.freechina.net/gfwlist -server=/.freechinaforum.org/127.0.0.1#5335 -ipset=/.freechinaforum.org/gfwlist -server=/.freeddns.com/127.0.0.1#5335 -ipset=/.freeddns.com/gfwlist -server=/.freeddns.org/127.0.0.1#5335 -ipset=/.freeddns.org/gfwlist -server=/.freedomchina.info/127.0.0.1#5335 -ipset=/.freedomchina.info/gfwlist -server=/.freedomhouse.org/127.0.0.1#5335 -ipset=/.freedomhouse.org/gfwlist -server=/.freedominfonetweb.wordpress.com/127.0.0.1#5335 -ipset=/.freedominfonetweb.wordpress.com/gfwlist -server=/.freedomsherald.org/127.0.0.1#5335 -ipset=/.freedomsherald.org/gfwlist -server=/.freeforums.org/127.0.0.1#5335 -ipset=/.freeforums.org/gfwlist -server=/.freefq.com/127.0.0.1#5335 -ipset=/.freefq.com/gfwlist -server=/.freefuckvids.com/127.0.0.1#5335 -ipset=/.freefuckvids.com/gfwlist -server=/.freegao.com/127.0.0.1#5335 -ipset=/.freegao.com/gfwlist -server=/.freehongkong.org/127.0.0.1#5335 -ipset=/.freehongkong.org/gfwlist -server=/.freeilhamtohti.org/127.0.0.1#5335 -ipset=/.freeilhamtohti.org/gfwlist -server=/.freekazakhs.org/127.0.0.1#5335 -ipset=/.freekazakhs.org/gfwlist -server=/.freekwonpyong.org/127.0.0.1#5335 -ipset=/.freekwonpyong.org/gfwlist -server=/.freelotto.com/127.0.0.1#5335 -ipset=/.freelotto.com/gfwlist -server=/.freeman2.com/127.0.0.1#5335 -ipset=/.freeman2.com/gfwlist -server=/.freemoren.com/127.0.0.1#5335 -ipset=/.freemoren.com/gfwlist -server=/.freemorenews.com/127.0.0.1#5335 -ipset=/.freemorenews.com/gfwlist -server=/.freenet-china.org/127.0.0.1#5335 -ipset=/.freenet-china.org/gfwlist -server=/.freenetproject.org/127.0.0.1#5335 -ipset=/.freenetproject.org/gfwlist -server=/.freenewscn.com/127.0.0.1#5335 -ipset=/.freenewscn.com/gfwlist -server=/.freeopenvpn.com/127.0.0.1#5335 -ipset=/.freeopenvpn.com/gfwlist -server=/.freeoz.org/127.0.0.1#5335 -ipset=/.freeoz.org/gfwlist -server=/.freessh.us/127.0.0.1#5335 -ipset=/.freessh.us/gfwlist -server=/.freetcp.com/127.0.0.1#5335 -ipset=/.freetcp.com/gfwlist -server=/.freetibet.net/127.0.0.1#5335 -ipset=/.freetibet.net/gfwlist -server=/.freetibet.org/127.0.0.1#5335 -ipset=/.freetibet.org/gfwlist -server=/.freetibetanheroes.org/127.0.0.1#5335 -ipset=/.freetibetanheroes.org/gfwlist -server=/.freeviewmovies.com/127.0.0.1#5335 -ipset=/.freeviewmovies.com/gfwlist -server=/.freevpn.me/127.0.0.1#5335 -ipset=/.freevpn.me/gfwlist -server=/.freevpn.nl/127.0.0.1#5335 -ipset=/.freevpn.nl/gfwlist -server=/.freewallpaper4.me/127.0.0.1#5335 -ipset=/.freewallpaper4.me/gfwlist -server=/.freewebs.com/127.0.0.1#5335 -ipset=/.freewebs.com/gfwlist -server=/.freewechat.com/127.0.0.1#5335 -ipset=/.freewechat.com/gfwlist -server=/.freewww.biz/127.0.0.1#5335 -ipset=/.freewww.biz/gfwlist -server=/.freewww.info/127.0.0.1#5335 -ipset=/.freewww.info/gfwlist -server=/.freexinwen.com/127.0.0.1#5335 -ipset=/.freexinwen.com/gfwlist -server=/.freeyellow.com/127.0.0.1#5335 -ipset=/.freeyellow.com/gfwlist -server=/.freeyoutubeproxy.net/127.0.0.1#5335 -ipset=/.freeyoutubeproxy.net/gfwlist -server=/.friendfeed.com/127.0.0.1#5335 -ipset=/.friendfeed.com/gfwlist -server=/.friends-of-tibet.org/127.0.0.1#5335 -ipset=/.friends-of-tibet.org/gfwlist -server=/.friendsoftibet.org/127.0.0.1#5335 -ipset=/.friendsoftibet.org/gfwlist -server=/.fring.com/127.0.0.1#5335 -ipset=/.fring.com/gfwlist -server=/.fringenetwork.com/127.0.0.1#5335 -ipset=/.fringenetwork.com/gfwlist -server=/.from-pr.com/127.0.0.1#5335 -ipset=/.from-pr.com/gfwlist -server=/.from-sd.com/127.0.0.1#5335 -ipset=/.from-sd.com/gfwlist -server=/.fromchinatousa.net/127.0.0.1#5335 -ipset=/.fromchinatousa.net/gfwlist -server=/.frommel.net/127.0.0.1#5335 -ipset=/.frommel.net/gfwlist -server=/.frontlinedefenders.org/127.0.0.1#5335 -ipset=/.frontlinedefenders.org/gfwlist -server=/.frootvpn.com/127.0.0.1#5335 -ipset=/.frootvpn.com/gfwlist -server=/.fscked.org/127.0.0.1#5335 -ipset=/.fscked.org/gfwlist -server=/.fsurf.com/127.0.0.1#5335 -ipset=/.fsurf.com/gfwlist -server=/.ftchinese.com/127.0.0.1#5335 -ipset=/.ftchinese.com/gfwlist -server=/.ftp1.biz/127.0.0.1#5335 -ipset=/.ftp1.biz/gfwlist -server=/.ftpserver.biz/127.0.0.1#5335 -ipset=/.ftpserver.biz/gfwlist -server=/.ftv.com.tw/127.0.0.1#5335 -ipset=/.ftv.com.tw/gfwlist -server=/.fucd.com/127.0.0.1#5335 -ipset=/.fucd.com/gfwlist -server=/.fuckcnnic.net/127.0.0.1#5335 -ipset=/.fuckcnnic.net/gfwlist -server=/.fuckgfw.org/127.0.0.1#5335 -ipset=/.fuckgfw.org/gfwlist -server=/.fulione.com/127.0.0.1#5335 -ipset=/.fulione.com/gfwlist -server=/.fullerconsideration.com/127.0.0.1#5335 -ipset=/.fullerconsideration.com/gfwlist -server=/.fulue.com/127.0.0.1#5335 -ipset=/.fulue.com/gfwlist -server=/.funf.tw/127.0.0.1#5335 -ipset=/.funf.tw/gfwlist -server=/.funkyimg.com/127.0.0.1#5335 -ipset=/.funkyimg.com/gfwlist -server=/.funp.com/127.0.0.1#5335 -ipset=/.funp.com/gfwlist -server=/.fuq.com/127.0.0.1#5335 -ipset=/.fuq.com/gfwlist -server=/.furbo.org/127.0.0.1#5335 -ipset=/.furbo.org/gfwlist -server=/.furhhdl.org/127.0.0.1#5335 -ipset=/.furhhdl.org/gfwlist -server=/.furinkan.com/127.0.0.1#5335 -ipset=/.furinkan.com/gfwlist -server=/.furl.net/127.0.0.1#5335 -ipset=/.furl.net/gfwlist -server=/.futurechinaforum.org/127.0.0.1#5335 -ipset=/.futurechinaforum.org/gfwlist -server=/.futuremessage.org/127.0.0.1#5335 -ipset=/.futuremessage.org/gfwlist -server=/.fux.com/127.0.0.1#5335 -ipset=/.fux.com/gfwlist -server=/.fuyin.net/127.0.0.1#5335 -ipset=/.fuyin.net/gfwlist -server=/.fuyindiantai.org/127.0.0.1#5335 -ipset=/.fuyindiantai.org/gfwlist -server=/.fuyu.org.tw/127.0.0.1#5335 -ipset=/.fuyu.org.tw/gfwlist -server=/.fw.cm/127.0.0.1#5335 -ipset=/.fw.cm/gfwlist -server=/.fxcm-chinese.com/127.0.0.1#5335 -ipset=/.fxcm-chinese.com/gfwlist -server=/.fxnetworks.com/127.0.0.1#5335 -ipset=/.fxnetworks.com/gfwlist -server=/.fzh999.com/127.0.0.1#5335 -ipset=/.fzh999.com/gfwlist -server=/.fzh999.net/127.0.0.1#5335 -ipset=/.fzh999.net/gfwlist -server=/.fzlm.com/127.0.0.1#5335 -ipset=/.fzlm.com/gfwlist -server=/.g-area.org/127.0.0.1#5335 -ipset=/.g-area.org/gfwlist -server=/.g-queen.com/127.0.0.1#5335 -ipset=/.g-queen.com/gfwlist -server=/.g.co/127.0.0.1#5335 -ipset=/.g.co/gfwlist -server=/.g0v.social/127.0.0.1#5335 -ipset=/.g0v.social/gfwlist -server=/.g6hentai.com/127.0.0.1#5335 -ipset=/.g6hentai.com/gfwlist -server=/.gabocorp.com/127.0.0.1#5335 -ipset=/.gabocorp.com/gfwlist -server=/.gaeproxy.com/127.0.0.1#5335 -ipset=/.gaeproxy.com/gfwlist -server=/.gaforum.org/127.0.0.1#5335 -ipset=/.gaforum.org/gfwlist -server=/.gagaoolala.com/127.0.0.1#5335 -ipset=/.gagaoolala.com/gfwlist -server=/.galaxymacau.com/127.0.0.1#5335 -ipset=/.galaxymacau.com/gfwlist -server=/.galenwu.com/127.0.0.1#5335 -ipset=/.galenwu.com/gfwlist -server=/.galstars.net/127.0.0.1#5335 -ipset=/.galstars.net/gfwlist -server=/.game735.com/127.0.0.1#5335 -ipset=/.game735.com/gfwlist -server=/.gamebase.com.tw/127.0.0.1#5335 -ipset=/.gamebase.com.tw/gfwlist -server=/.gamejolt.com/127.0.0.1#5335 -ipset=/.gamejolt.com/gfwlist -server=/.gamer-cds.cdn.hinet.net/127.0.0.1#5335 -ipset=/.gamer-cds.cdn.hinet.net/gfwlist -server=/.gamer.com.tw/127.0.0.1#5335 -ipset=/.gamer.com.tw/gfwlist -server=/.gamer2-cds.cdn.hinet.net/127.0.0.1#5335 -ipset=/.gamer2-cds.cdn.hinet.net/gfwlist -server=/.gamez.com.tw/127.0.0.1#5335 -ipset=/.gamez.com.tw/gfwlist -server=/.gamousa.com/127.0.0.1#5335 -ipset=/.gamousa.com/gfwlist -server=/.ganges.com/127.0.0.1#5335 -ipset=/.ganges.com/gfwlist -server=/.gaoming.net/127.0.0.1#5335 -ipset=/.gaoming.net/gfwlist -server=/.gaopi.net/127.0.0.1#5335 -ipset=/.gaopi.net/gfwlist -server=/.gaozhisheng.net/127.0.0.1#5335 -ipset=/.gaozhisheng.net/gfwlist -server=/.gaozhisheng.org/127.0.0.1#5335 -ipset=/.gaozhisheng.org/gfwlist -server=/.gardennetworks.com/127.0.0.1#5335 -ipset=/.gardennetworks.com/gfwlist -server=/.gardennetworks.org/127.0.0.1#5335 -ipset=/.gardennetworks.org/gfwlist -server=/.gartlive.com/127.0.0.1#5335 -ipset=/.gartlive.com/gfwlist -server=/.gate-project.com/127.0.0.1#5335 -ipset=/.gate-project.com/gfwlist -server=/.gate.io/127.0.0.1#5335 -ipset=/.gate.io/gfwlist -server=/.gatecoin.com/127.0.0.1#5335 -ipset=/.gatecoin.com/gfwlist -server=/.gather.com/127.0.0.1#5335 -ipset=/.gather.com/gfwlist -server=/.gatherproxy.com/127.0.0.1#5335 -ipset=/.gatherproxy.com/gfwlist -server=/.gati.org.tw/127.0.0.1#5335 -ipset=/.gati.org.tw/gfwlist -server=/.gaybubble.com/127.0.0.1#5335 -ipset=/.gaybubble.com/gfwlist -server=/.gaycn.net/127.0.0.1#5335 -ipset=/.gaycn.net/gfwlist -server=/.gayhub.com/127.0.0.1#5335 -ipset=/.gayhub.com/gfwlist -server=/.gaymap.cc/127.0.0.1#5335 -ipset=/.gaymap.cc/gfwlist -server=/.gaymenring.com/127.0.0.1#5335 -ipset=/.gaymenring.com/gfwlist -server=/.gaytube.com/127.0.0.1#5335 -ipset=/.gaytube.com/gfwlist -server=/.gaywatch.com/127.0.0.1#5335 -ipset=/.gaywatch.com/gfwlist -server=/.gazotube.com/127.0.0.1#5335 -ipset=/.gazotube.com/gfwlist -server=/.gcc.org.hk/127.0.0.1#5335 -ipset=/.gcc.org.hk/gfwlist -server=/.gclooney.com/127.0.0.1#5335 -ipset=/.gclooney.com/gfwlist -server=/.gcmasia.com/127.0.0.1#5335 -ipset=/.gcmasia.com/gfwlist -server=/.gcpnews.com/127.0.0.1#5335 -ipset=/.gcpnews.com/gfwlist -server=/.gcr.io/127.0.0.1#5335 -ipset=/.gcr.io/gfwlist -server=/.gdzf.org/127.0.0.1#5335 -ipset=/.gdzf.org/gfwlist -server=/.geek-art.net/127.0.0.1#5335 -ipset=/.geek-art.net/gfwlist -server=/.geekheart.info/127.0.0.1#5335 -ipset=/.geekheart.info/gfwlist -server=/.gekikame.com/127.0.0.1#5335 -ipset=/.gekikame.com/gfwlist -server=/.gelbooru.com/127.0.0.1#5335 -ipset=/.gelbooru.com/gfwlist -server=/.geocities.co.jp/127.0.0.1#5335 -ipset=/.geocities.co.jp/gfwlist -server=/.geocities.jp/127.0.0.1#5335 -ipset=/.geocities.jp/gfwlist -server=/.gerefoundation.org/127.0.0.1#5335 -ipset=/.gerefoundation.org/gfwlist -server=/.get.app/127.0.0.1#5335 -ipset=/.get.app/gfwlist -server=/.get.dev/127.0.0.1#5335 -ipset=/.get.dev/gfwlist -server=/.get.how/127.0.0.1#5335 -ipset=/.get.how/gfwlist -server=/.get.page/127.0.0.1#5335 -ipset=/.get.page/gfwlist -server=/.getastrill.com/127.0.0.1#5335 -ipset=/.getastrill.com/gfwlist -server=/.getchu.com/127.0.0.1#5335 -ipset=/.getchu.com/gfwlist -server=/.getcloak.com/127.0.0.1#5335 -ipset=/.getcloak.com/gfwlist -server=/.getfoxyproxy.org/127.0.0.1#5335 -ipset=/.getfoxyproxy.org/gfwlist -server=/.getfreedur.com/127.0.0.1#5335 -ipset=/.getfreedur.com/gfwlist -server=/.getgom.com/127.0.0.1#5335 -ipset=/.getgom.com/gfwlist -server=/.geti2p.net/127.0.0.1#5335 -ipset=/.geti2p.net/gfwlist -server=/.getiton.com/127.0.0.1#5335 -ipset=/.getiton.com/gfwlist -server=/.getlantern.org/127.0.0.1#5335 -ipset=/.getlantern.org/gfwlist -server=/.getmdl.io/127.0.0.1#5335 -ipset=/.getmdl.io/gfwlist -server=/.getoutline.org/127.0.0.1#5335 -ipset=/.getoutline.org/gfwlist -server=/.getsocialscope.com/127.0.0.1#5335 -ipset=/.getsocialscope.com/gfwlist -server=/.getsync.com/127.0.0.1#5335 -ipset=/.getsync.com/gfwlist -server=/.gettrials.com/127.0.0.1#5335 -ipset=/.gettrials.com/gfwlist -server=/.gettyimages.com/127.0.0.1#5335 -ipset=/.gettyimages.com/gfwlist -server=/.getuploader.com/127.0.0.1#5335 -ipset=/.getuploader.com/gfwlist -server=/.gfbv.de/127.0.0.1#5335 -ipset=/.gfbv.de/gfwlist -server=/.gfgold.com.hk/127.0.0.1#5335 -ipset=/.gfgold.com.hk/gfwlist -server=/.gfsale.com/127.0.0.1#5335 -ipset=/.gfsale.com/gfwlist -server=/.gfw.org.ua/127.0.0.1#5335 -ipset=/.gfw.org.ua/gfwlist -server=/.gfw.press/127.0.0.1#5335 -ipset=/.gfw.press/gfwlist -server=/.ggpht.com/127.0.0.1#5335 -ipset=/.ggpht.com/gfwlist -server=/.ggssl.com/127.0.0.1#5335 -ipset=/.ggssl.com/gfwlist -server=/.ghostpath.com/127.0.0.1#5335 -ipset=/.ghostpath.com/gfwlist -server=/.ghut.org/127.0.0.1#5335 -ipset=/.ghut.org/gfwlist -server=/.giantessnight.com/127.0.0.1#5335 -ipset=/.giantessnight.com/gfwlist -server=/.gifree.com/127.0.0.1#5335 -ipset=/.gifree.com/gfwlist -server=/.giga-web.jp/127.0.0.1#5335 -ipset=/.giga-web.jp/gfwlist -server=/.gigporno.ru/127.0.0.1#5335 -ipset=/.gigporno.ru/gfwlist -server=/.girlbanker.com/127.0.0.1#5335 -ipset=/.girlbanker.com/gfwlist -server=/.gist.github.com/127.0.0.1#5335 -ipset=/.gist.github.com/gfwlist -server=/.git.io/127.0.0.1#5335 -ipset=/.git.io/gfwlist -server=/.github.io/127.0.0.1#5335 -ipset=/.github.io/gfwlist -server=/.githubassets.com/127.0.0.1#5335 -ipset=/.githubassets.com/gfwlist -server=/.githubusercontent.com/127.0.0.1#5335 -ipset=/.githubusercontent.com/gfwlist -server=/.gizlen.net/127.0.0.1#5335 -ipset=/.gizlen.net/gfwlist -server=/.gjczz.com/127.0.0.1#5335 -ipset=/.gjczz.com/gfwlist -server=/.glass8.eu/127.0.0.1#5335 -ipset=/.glass8.eu/gfwlist -server=/.global.bing.com/127.0.0.1#5335 -ipset=/.global.bing.com/gfwlist -server=/.globaljihad.net/127.0.0.1#5335 -ipset=/.globaljihad.net/gfwlist -server=/.globalmediaoutreach.com/127.0.0.1#5335 -ipset=/.globalmediaoutreach.com/gfwlist -server=/.globalmuseumoncommunism.org/127.0.0.1#5335 -ipset=/.globalmuseumoncommunism.org/gfwlist -server=/.globalrescue.net/127.0.0.1#5335 -ipset=/.globalrescue.net/gfwlist -server=/.globaltm.org/127.0.0.1#5335 -ipset=/.globaltm.org/gfwlist -server=/.globalvoices.org/127.0.0.1#5335 -ipset=/.globalvoices.org/gfwlist -server=/.globalvoicesonline.org/127.0.0.1#5335 -ipset=/.globalvoicesonline.org/gfwlist -server=/.globalvpn.net/127.0.0.1#5335 -ipset=/.globalvpn.net/gfwlist -server=/.glock.com/127.0.0.1#5335 -ipset=/.glock.com/gfwlist -server=/.gloryhole.com/127.0.0.1#5335 -ipset=/.gloryhole.com/gfwlist -server=/.glorystar.me/127.0.0.1#5335 -ipset=/.glorystar.me/gfwlist -server=/.glype.com/127.0.0.1#5335 -ipset=/.glype.com/gfwlist -server=/.gmail.com/127.0.0.1#5335 -ipset=/.gmail.com/gfwlist -server=/.gmbd.cn/127.0.0.1#5335 -ipset=/.gmbd.cn/gfwlist -server=/.gmhz.org/127.0.0.1#5335 -ipset=/.gmhz.org/gfwlist -server=/.gmll.org/127.0.0.1#5335 -ipset=/.gmll.org/gfwlist -server=/.gmodules.com/127.0.0.1#5335 -ipset=/.gmodules.com/gfwlist -server=/.gmozomg.izihost.org/127.0.0.1#5335 -ipset=/.gmozomg.izihost.org/gfwlist -server=/.gnci.org.hk/127.0.0.1#5335 -ipset=/.gnci.org.hk/gfwlist -server=/.gnews.org/127.0.0.1#5335 -ipset=/.gnews.org/gfwlist -server=/.go-pki.com/127.0.0.1#5335 -ipset=/.go-pki.com/gfwlist -server=/.go.nesnode.com/127.0.0.1#5335 -ipset=/.go.nesnode.com/gfwlist -server=/.go141.com/127.0.0.1#5335 -ipset=/.go141.com/gfwlist -server=/.goagent.biz/127.0.0.1#5335 -ipset=/.goagent.biz/gfwlist -server=/.goagent.codeplex.com/127.0.0.1#5335 -ipset=/.goagent.codeplex.com/gfwlist -server=/.goagentplus.com/127.0.0.1#5335 -ipset=/.goagentplus.com/gfwlist -server=/.gobet.cc/127.0.0.1#5335 -ipset=/.gobet.cc/gfwlist -server=/.godfootsteps.org/127.0.0.1#5335 -ipset=/.godfootsteps.org/gfwlist -server=/.godns.work/127.0.0.1#5335 -ipset=/.godns.work/gfwlist -server=/.godoc.org/127.0.0.1#5335 -ipset=/.godoc.org/gfwlist -server=/.godsdirectcontact.co.uk/127.0.0.1#5335 -ipset=/.godsdirectcontact.co.uk/gfwlist -server=/.godsdirectcontact.org/127.0.0.1#5335 -ipset=/.godsdirectcontact.org/gfwlist -server=/.godsimmediatecontact.com/127.0.0.1#5335 -ipset=/.godsimmediatecontact.com/gfwlist -server=/.gogotunnel.com/127.0.0.1#5335 -ipset=/.gogotunnel.com/gfwlist -server=/.gohappy.com.tw/127.0.0.1#5335 -ipset=/.gohappy.com.tw/gfwlist -server=/.gojet.krtco.com.tw/127.0.0.1#5335 -ipset=/.gojet.krtco.com.tw/gfwlist -server=/.gokbayrak.com/127.0.0.1#5335 -ipset=/.gokbayrak.com/gfwlist -server=/.golang.org/127.0.0.1#5335 -ipset=/.golang.org/gfwlist -server=/.goldbet.com/127.0.0.1#5335 -ipset=/.goldbet.com/gfwlist -server=/.goldbetsports.com/127.0.0.1#5335 -ipset=/.goldbetsports.com/gfwlist -server=/.goldeneyevault.com/127.0.0.1#5335 -ipset=/.goldeneyevault.com/gfwlist -server=/.goldenfrog.com/127.0.0.1#5335 -ipset=/.goldenfrog.com/gfwlist -server=/.goldjizz.com/127.0.0.1#5335 -ipset=/.goldjizz.com/gfwlist -server=/.goldstep.net/127.0.0.1#5335 -ipset=/.goldstep.net/gfwlist -server=/.goldwave.com/127.0.0.1#5335 -ipset=/.goldwave.com/gfwlist -server=/.gongm.in/127.0.0.1#5335 -ipset=/.gongm.in/gfwlist -server=/.gongmeng.info/127.0.0.1#5335 -ipset=/.gongmeng.info/gfwlist -server=/.gongminliliang.com/127.0.0.1#5335 -ipset=/.gongminliliang.com/gfwlist -server=/.gongwt.com/127.0.0.1#5335 -ipset=/.gongwt.com/gfwlist -server=/.goo.gl/127.0.0.1#5335 -ipset=/.goo.gl/gfwlist -server=/.gooday.xyz/127.0.0.1#5335 -ipset=/.gooday.xyz/gfwlist -server=/.gooddns.info/127.0.0.1#5335 -ipset=/.gooddns.info/gfwlist -server=/.goodreaders.com/127.0.0.1#5335 -ipset=/.goodreaders.com/gfwlist -server=/.goodreads.com/127.0.0.1#5335 -ipset=/.goodreads.com/gfwlist -server=/.goodtv.com.tw/127.0.0.1#5335 -ipset=/.goodtv.com.tw/gfwlist -server=/.goodtv.tv/127.0.0.1#5335 -ipset=/.goodtv.tv/gfwlist -server=/.goofind.com/127.0.0.1#5335 -ipset=/.goofind.com/gfwlist -server=/.google.ae/127.0.0.1#5335 -ipset=/.google.ae/gfwlist -server=/.google.am/127.0.0.1#5335 -ipset=/.google.am/gfwlist -server=/.google.as/127.0.0.1#5335 -ipset=/.google.as/gfwlist -server=/.google.at/127.0.0.1#5335 -ipset=/.google.at/gfwlist -server=/.google.az/127.0.0.1#5335 -ipset=/.google.az/gfwlist -server=/.google.ba/127.0.0.1#5335 -ipset=/.google.ba/gfwlist -server=/.google.be/127.0.0.1#5335 -ipset=/.google.be/gfwlist -server=/.google.bg/127.0.0.1#5335 -ipset=/.google.bg/gfwlist -server=/.google.ca/127.0.0.1#5335 -ipset=/.google.ca/gfwlist -server=/.google.calstate.edu/127.0.0.1#5335 -ipset=/.google.calstate.edu/gfwlist -server=/.google.cd/127.0.0.1#5335 -ipset=/.google.cd/gfwlist -server=/.google.ci/127.0.0.1#5335 -ipset=/.google.ci/gfwlist -server=/.google.co.id/127.0.0.1#5335 -ipset=/.google.co.id/gfwlist -server=/.google.co.jp/127.0.0.1#5335 -ipset=/.google.co.jp/gfwlist -server=/.google.co.kr/127.0.0.1#5335 -ipset=/.google.co.kr/gfwlist -server=/.google.co.ma/127.0.0.1#5335 -ipset=/.google.co.ma/gfwlist -server=/.google.co.uk/127.0.0.1#5335 -ipset=/.google.co.uk/gfwlist -server=/.google.com/127.0.0.1#5335 -ipset=/.google.com/gfwlist -server=/.google.de/127.0.0.1#5335 -ipset=/.google.de/gfwlist -server=/.google.dev/127.0.0.1#5335 -ipset=/.google.dev/gfwlist -server=/.google.dj/127.0.0.1#5335 -ipset=/.google.dj/gfwlist -server=/.google.dk/127.0.0.1#5335 -ipset=/.google.dk/gfwlist -server=/.google.es/127.0.0.1#5335 -ipset=/.google.es/gfwlist -server=/.google.fi/127.0.0.1#5335 -ipset=/.google.fi/gfwlist -server=/.google.fm/127.0.0.1#5335 -ipset=/.google.fm/gfwlist -server=/.google.fr/127.0.0.1#5335 -ipset=/.google.fr/gfwlist -server=/.google.gg/127.0.0.1#5335 -ipset=/.google.gg/gfwlist -server=/.google.gl/127.0.0.1#5335 -ipset=/.google.gl/gfwlist -server=/.google.gr/127.0.0.1#5335 -ipset=/.google.gr/gfwlist -server=/.google.ie/127.0.0.1#5335 -ipset=/.google.ie/gfwlist -server=/.google.is/127.0.0.1#5335 -ipset=/.google.is/gfwlist -server=/.google.it/127.0.0.1#5335 -ipset=/.google.it/gfwlist -server=/.google.jo/127.0.0.1#5335 -ipset=/.google.jo/gfwlist -server=/.google.kz/127.0.0.1#5335 -ipset=/.google.kz/gfwlist -server=/.google.lv/127.0.0.1#5335 -ipset=/.google.lv/gfwlist -server=/.google.mn/127.0.0.1#5335 -ipset=/.google.mn/gfwlist -server=/.google.ms/127.0.0.1#5335 -ipset=/.google.ms/gfwlist -server=/.google.nl/127.0.0.1#5335 -ipset=/.google.nl/gfwlist -server=/.google.no/127.0.0.1#5335 -ipset=/.google.no/gfwlist -server=/.google.nu/127.0.0.1#5335 -ipset=/.google.nu/gfwlist -server=/.google.ro/127.0.0.1#5335 -ipset=/.google.ro/gfwlist -server=/.google.ru/127.0.0.1#5335 -ipset=/.google.ru/gfwlist -server=/.google.rw/127.0.0.1#5335 -ipset=/.google.rw/gfwlist -server=/.google.sc/127.0.0.1#5335 -ipset=/.google.sc/gfwlist -server=/.google.sh/127.0.0.1#5335 -ipset=/.google.sh/gfwlist -server=/.google.sk/127.0.0.1#5335 -ipset=/.google.sk/gfwlist -server=/.google.sm/127.0.0.1#5335 -ipset=/.google.sm/gfwlist -server=/.google.sn/127.0.0.1#5335 -ipset=/.google.sn/gfwlist -server=/.google.tk/127.0.0.1#5335 -ipset=/.google.tk/gfwlist -server=/.google.tm/127.0.0.1#5335 -ipset=/.google.tm/gfwlist -server=/.google.to/127.0.0.1#5335 -ipset=/.google.to/gfwlist -server=/.google.tt/127.0.0.1#5335 -ipset=/.google.tt/gfwlist -server=/.google.vu/127.0.0.1#5335 -ipset=/.google.vu/gfwlist -server=/.google.ws/127.0.0.1#5335 -ipset=/.google.ws/gfwlist -server=/.googleapis.cn/127.0.0.1#5335 -ipset=/.googleapis.cn/gfwlist -server=/.googleapis.com/127.0.0.1#5335 -ipset=/.googleapis.com/gfwlist -server=/.googleapps.com/127.0.0.1#5335 -ipset=/.googleapps.com/gfwlist -server=/.googlearth.com/127.0.0.1#5335 -ipset=/.googlearth.com/gfwlist -server=/.googleartproject.com/127.0.0.1#5335 -ipset=/.googleartproject.com/gfwlist -server=/.googleblog.com/127.0.0.1#5335 -ipset=/.googleblog.com/gfwlist -server=/.googlebot.com/127.0.0.1#5335 -ipset=/.googlebot.com/gfwlist -server=/.googlechinawebmaster.com/127.0.0.1#5335 -ipset=/.googlechinawebmaster.com/gfwlist -server=/.googlecode.com/127.0.0.1#5335 -ipset=/.googlecode.com/gfwlist -server=/.googlecommerce.com/127.0.0.1#5335 -ipset=/.googlecommerce.com/gfwlist -server=/.googledomains.com/127.0.0.1#5335 -ipset=/.googledomains.com/gfwlist -server=/.googledrive.com/127.0.0.1#5335 -ipset=/.googledrive.com/gfwlist -server=/.googleearth.com/127.0.0.1#5335 -ipset=/.googleearth.com/gfwlist -server=/.googlegroups.com/127.0.0.1#5335 -ipset=/.googlegroups.com/gfwlist -server=/.googlehosted.com/127.0.0.1#5335 -ipset=/.googlehosted.com/gfwlist -server=/.googleideas.com/127.0.0.1#5335 -ipset=/.googleideas.com/gfwlist -server=/.googleinsidesearch.com/127.0.0.1#5335 -ipset=/.googleinsidesearch.com/gfwlist -server=/.googlelabs.com/127.0.0.1#5335 -ipset=/.googlelabs.com/gfwlist -server=/.googlemail.com/127.0.0.1#5335 -ipset=/.googlemail.com/gfwlist -server=/.googlemashups.com/127.0.0.1#5335 -ipset=/.googlemashups.com/gfwlist -server=/.googlepagecreator.com/127.0.0.1#5335 -ipset=/.googlepagecreator.com/gfwlist -server=/.googleplay.com/127.0.0.1#5335 -ipset=/.googleplay.com/gfwlist -server=/.googleplus.com/127.0.0.1#5335 -ipset=/.googleplus.com/gfwlist -server=/.googlescholar.com/127.0.0.1#5335 -ipset=/.googlescholar.com/gfwlist -server=/.googlesile.com/127.0.0.1#5335 -ipset=/.googlesile.com/gfwlist -server=/.googlesource.com/127.0.0.1#5335 -ipset=/.googlesource.com/gfwlist -server=/.googleusercontent.com/127.0.0.1#5335 -ipset=/.googleusercontent.com/gfwlist -server=/.googlevideo.com/127.0.0.1#5335 -ipset=/.googlevideo.com/gfwlist -server=/.googleweblight.com/127.0.0.1#5335 -ipset=/.googleweblight.com/gfwlist -server=/.googlezip.net/127.0.0.1#5335 -ipset=/.googlezip.net/gfwlist -server=/.gopetition.com/127.0.0.1#5335 -ipset=/.gopetition.com/gfwlist -server=/.goproxing.net/127.0.0.1#5335 -ipset=/.goproxing.net/gfwlist -server=/.goregrish.com/127.0.0.1#5335 -ipset=/.goregrish.com/gfwlist -server=/.gospelherald.com/127.0.0.1#5335 -ipset=/.gospelherald.com/gfwlist -server=/.got-game.org/127.0.0.1#5335 -ipset=/.got-game.org/gfwlist -server=/.gotdns.ch/127.0.0.1#5335 -ipset=/.gotdns.ch/gfwlist -server=/.gotgeeks.com/127.0.0.1#5335 -ipset=/.gotgeeks.com/gfwlist -server=/.gotrusted.com/127.0.0.1#5335 -ipset=/.gotrusted.com/gfwlist -server=/.gotw.ca/127.0.0.1#5335 -ipset=/.gotw.ca/gfwlist -server=/.gov.taipei/127.0.0.1#5335 -ipset=/.gov.taipei/gfwlist -server=/.gov.tw/127.0.0.1#5335 -ipset=/.gov.tw/gfwlist -server=/.gr8domain.biz/127.0.0.1#5335 -ipset=/.gr8domain.biz/gfwlist -server=/.gr8name.biz/127.0.0.1#5335 -ipset=/.gr8name.biz/gfwlist -server=/.grammaly.com/127.0.0.1#5335 -ipset=/.grammaly.com/gfwlist -server=/.grandtrial.org/127.0.0.1#5335 -ipset=/.grandtrial.org/gfwlist -server=/.grangorz.org/127.0.0.1#5335 -ipset=/.grangorz.org/gfwlist -server=/.graphis.ne.jp/127.0.0.1#5335 -ipset=/.graphis.ne.jp/gfwlist -server=/.graphql.org/127.0.0.1#5335 -ipset=/.graphql.org/gfwlist -server=/.greasespot.net/127.0.0.1#5335 -ipset=/.greasespot.net/gfwlist -server=/.great-firewall.com/127.0.0.1#5335 -ipset=/.great-firewall.com/gfwlist -server=/.great-roc.org/127.0.0.1#5335 -ipset=/.great-roc.org/gfwlist -server=/.greatfire.org/127.0.0.1#5335 -ipset=/.greatfire.org/gfwlist -server=/.greatfire.us7.list-manage.com/127.0.0.1#5335 -ipset=/.greatfire.us7.list-manage.com/gfwlist -server=/.greatfirewall.biz/127.0.0.1#5335 -ipset=/.greatfirewall.biz/gfwlist -server=/.greatfirewallofchina.net/127.0.0.1#5335 -ipset=/.greatfirewallofchina.net/gfwlist -server=/.greatfirewallofchina.org/127.0.0.1#5335 -ipset=/.greatfirewallofchina.org/gfwlist -server=/.greatroc.org/127.0.0.1#5335 -ipset=/.greatroc.org/gfwlist -server=/.greatroc.tw/127.0.0.1#5335 -ipset=/.greatroc.tw/gfwlist -server=/.greatzhonghua.org/127.0.0.1#5335 -ipset=/.greatzhonghua.org/gfwlist -server=/.greenfieldbookstore.com.hk/127.0.0.1#5335 -ipset=/.greenfieldbookstore.com.hk/gfwlist -server=/.greenparty.org.tw/127.0.0.1#5335 -ipset=/.greenparty.org.tw/gfwlist -server=/.greenpeace.com.tw/127.0.0.1#5335 -ipset=/.greenpeace.com.tw/gfwlist -server=/.greenpeace.org/127.0.0.1#5335 -ipset=/.greenpeace.org/gfwlist -server=/.greenvpn.net/127.0.0.1#5335 -ipset=/.greenvpn.net/gfwlist -server=/.greenvpn.org/127.0.0.1#5335 -ipset=/.greenvpn.org/gfwlist -server=/.grotty-monday.com/127.0.0.1#5335 -ipset=/.grotty-monday.com/gfwlist -server=/.groups.google.cn/127.0.0.1#5335 -ipset=/.groups.google.cn/gfwlist -server=/.grow.google/127.0.0.1#5335 -ipset=/.grow.google/gfwlist -server=/.gs-discuss.com/127.0.0.1#5335 -ipset=/.gs-discuss.com/gfwlist -server=/.gsp.target.com/127.0.0.1#5335 -ipset=/.gsp.target.com/gfwlist -server=/.gstatic.com/127.0.0.1#5335 -ipset=/.gstatic.com/gfwlist -server=/.gtricks.com/127.0.0.1#5335 -ipset=/.gtricks.com/gfwlist -server=/.gts-vpn.com/127.0.0.1#5335 -ipset=/.gts-vpn.com/gfwlist -server=/.gtv.org/127.0.0.1#5335 -ipset=/.gtv.org/gfwlist -server=/.gu-chu-sum.org/127.0.0.1#5335 -ipset=/.gu-chu-sum.org/gfwlist -server=/.guaguass.com/127.0.0.1#5335 -ipset=/.guaguass.com/gfwlist -server=/.guaguass.org/127.0.0.1#5335 -ipset=/.guaguass.org/gfwlist -server=/.guancha.org/127.0.0.1#5335 -ipset=/.guancha.org/gfwlist -server=/.guaneryu.com/127.0.0.1#5335 -ipset=/.guaneryu.com/gfwlist -server=/.guangming.com.my/127.0.0.1#5335 -ipset=/.guangming.com.my/gfwlist -server=/.guangnianvpn.com/127.0.0.1#5335 -ipset=/.guangnianvpn.com/gfwlist -server=/.guardster.com/127.0.0.1#5335 -ipset=/.guardster.com/gfwlist -server=/.guishan.org/127.0.0.1#5335 -ipset=/.guishan.org/gfwlist -server=/.gumroad.com/127.0.0.1#5335 -ipset=/.gumroad.com/gfwlist -server=/.gun-world.net/127.0.0.1#5335 -ipset=/.gun-world.net/gfwlist -server=/.gunsamerica.com/127.0.0.1#5335 -ipset=/.gunsamerica.com/gfwlist -server=/.gunsandammo.com/127.0.0.1#5335 -ipset=/.gunsandammo.com/gfwlist -server=/.guo.media/127.0.0.1#5335 -ipset=/.guo.media/gfwlist -server=/.guruonline.hk/127.0.0.1#5335 -ipset=/.guruonline.hk/gfwlist -server=/.gutteruncensored.com/127.0.0.1#5335 -ipset=/.gutteruncensored.com/gfwlist -server=/.gvlib.com/127.0.0.1#5335 -ipset=/.gvlib.com/gfwlist -server=/.gvm.com.tw/127.0.0.1#5335 -ipset=/.gvm.com.tw/gfwlist -server=/.gvt0.com/127.0.0.1#5335 -ipset=/.gvt0.com/gfwlist -server=/.gvt1.com/127.0.0.1#5335 -ipset=/.gvt1.com/gfwlist -server=/.gvt3.com/127.0.0.1#5335 -ipset=/.gvt3.com/gfwlist -server=/.gwtproject.org/127.0.0.1#5335 -ipset=/.gwtproject.org/gfwlist -server=/.gyalwarinpoche.com/127.0.0.1#5335 -ipset=/.gyalwarinpoche.com/gfwlist -server=/.gyatsostudio.com/127.0.0.1#5335 -ipset=/.gyatsostudio.com/gfwlist -server=/.gzm.tv/127.0.0.1#5335 -ipset=/.gzm.tv/gfwlist -server=/.gzone-anime.info/127.0.0.1#5335 -ipset=/.gzone-anime.info/gfwlist -server=/.h-china.org/127.0.0.1#5335 -ipset=/.h-china.org/gfwlist -server=/.h-moe.com/127.0.0.1#5335 -ipset=/.h-moe.com/gfwlist -server=/.h1n1china.org/127.0.0.1#5335 -ipset=/.h1n1china.org/gfwlist -server=/.h528.com/127.0.0.1#5335 -ipset=/.h528.com/gfwlist -server=/.h5dm.com/127.0.0.1#5335 -ipset=/.h5dm.com/gfwlist -server=/.h5galgame.me/127.0.0.1#5335 -ipset=/.h5galgame.me/gfwlist -server=/.hacg.club/127.0.0.1#5335 -ipset=/.hacg.club/gfwlist -server=/.hacg.in/127.0.0.1#5335 -ipset=/.hacg.in/gfwlist -server=/.hacg.li/127.0.0.1#5335 -ipset=/.hacg.li/gfwlist -server=/.hacg.me/127.0.0.1#5335 -ipset=/.hacg.me/gfwlist -server=/.hacg.red/127.0.0.1#5335 -ipset=/.hacg.red/gfwlist -server=/.hacker.org/127.0.0.1#5335 -ipset=/.hacker.org/gfwlist -server=/.hackthatphone.net/127.0.0.1#5335 -ipset=/.hackthatphone.net/gfwlist -server=/.hahlo.com/127.0.0.1#5335 -ipset=/.hahlo.com/gfwlist -server=/.hakkatv.org.tw/127.0.0.1#5335 -ipset=/.hakkatv.org.tw/gfwlist -server=/.handcraftedsoftware.org/127.0.0.1#5335 -ipset=/.handcraftedsoftware.org/gfwlist -server=/.hanime.tv/127.0.0.1#5335 -ipset=/.hanime.tv/gfwlist -server=/.hanunyi.com/127.0.0.1#5335 -ipset=/.hanunyi.com/gfwlist -server=/.happy-vpn.com/127.0.0.1#5335 -ipset=/.happy-vpn.com/gfwlist -server=/.haproxy.org/127.0.0.1#5335 -ipset=/.haproxy.org/gfwlist -server=/.hardsextube.com/127.0.0.1#5335 -ipset=/.hardsextube.com/gfwlist -server=/.harunyahya.com/127.0.0.1#5335 -ipset=/.harunyahya.com/gfwlist -server=/.hautelook.com/127.0.0.1#5335 -ipset=/.hautelook.com/gfwlist -server=/.hautelookcdn.com/127.0.0.1#5335 -ipset=/.hautelookcdn.com/gfwlist -server=/.have8.com/127.0.0.1#5335 -ipset=/.have8.com/gfwlist -server=/.hbg.com/127.0.0.1#5335 -ipset=/.hbg.com/gfwlist -server=/.hbo.com/127.0.0.1#5335 -ipset=/.hbo.com/gfwlist -server=/.hclips.com/127.0.0.1#5335 -ipset=/.hclips.com/gfwlist -server=/.hdlt.me/127.0.0.1#5335 -ipset=/.hdlt.me/gfwlist -server=/.hdtvb.net/127.0.0.1#5335 -ipset=/.hdtvb.net/gfwlist -server=/.hdzog.com/127.0.0.1#5335 -ipset=/.hdzog.com/gfwlist -server=/.heartyit.com/127.0.0.1#5335 -ipset=/.heartyit.com/gfwlist -server=/.heavy-r.com/127.0.0.1#5335 -ipset=/.heavy-r.com/gfwlist -server=/.hec.su/127.0.0.1#5335 -ipset=/.hec.su/gfwlist -server=/.hecaitou.net/127.0.0.1#5335 -ipset=/.hecaitou.net/gfwlist -server=/.hechaji.com/127.0.0.1#5335 -ipset=/.hechaji.com/gfwlist -server=/.heeact.edu.tw/127.0.0.1#5335 -ipset=/.heeact.edu.tw/gfwlist -server=/.hegre-art.com/127.0.0.1#5335 -ipset=/.hegre-art.com/gfwlist -server=/.heix.pp.ru/127.0.0.1#5335 -ipset=/.heix.pp.ru/gfwlist -server=/.helloandroid.com/127.0.0.1#5335 -ipset=/.helloandroid.com/gfwlist -server=/.helloqueer.com/127.0.0.1#5335 -ipset=/.helloqueer.com/gfwlist -server=/.helloss.pw/127.0.0.1#5335 -ipset=/.helloss.pw/gfwlist -server=/.hellotxt.com/127.0.0.1#5335 -ipset=/.hellotxt.com/gfwlist -server=/.help.linksalpha.com/127.0.0.1#5335 -ipset=/.help.linksalpha.com/gfwlist -server=/.helpeachpeople.com/127.0.0.1#5335 -ipset=/.helpeachpeople.com/gfwlist -server=/.helplinfen.com/127.0.0.1#5335 -ipset=/.helplinfen.com/gfwlist -server=/.helpster.de/127.0.0.1#5335 -ipset=/.helpster.de/gfwlist -server=/.helpuyghursnow.org/127.0.0.1#5335 -ipset=/.helpuyghursnow.org/gfwlist -server=/.helpzhuling.org/127.0.0.1#5335 -ipset=/.helpzhuling.org/gfwlist -server=/.hentai.to/127.0.0.1#5335 -ipset=/.hentai.to/gfwlist -server=/.hentaitube.tv/127.0.0.1#5335 -ipset=/.hentaitube.tv/gfwlist -server=/.hentaivideoworld.com/127.0.0.1#5335 -ipset=/.hentaivideoworld.com/gfwlist -server=/.heqinglian.net/127.0.0.1#5335 -ipset=/.heqinglian.net/gfwlist -server=/.heungkongdiscuss.com/127.0.0.1#5335 -ipset=/.heungkongdiscuss.com/gfwlist -server=/.hexieshe.com/127.0.0.1#5335 -ipset=/.hexieshe.com/gfwlist -server=/.hexieshe.xyz/127.0.0.1#5335 -ipset=/.hexieshe.xyz/gfwlist -server=/.hexxeh.net/127.0.0.1#5335 -ipset=/.hexxeh.net/gfwlist -server=/.heyzo.com/127.0.0.1#5335 -ipset=/.heyzo.com/gfwlist -server=/.hgseav.com/127.0.0.1#5335 -ipset=/.hgseav.com/gfwlist -server=/.hhdcb3office.org/127.0.0.1#5335 -ipset=/.hhdcb3office.org/gfwlist -server=/.hhthesakyatrizin.org/127.0.0.1#5335 -ipset=/.hhthesakyatrizin.org/gfwlist -server=/.hi-on.org.tw/127.0.0.1#5335 -ipset=/.hi-on.org.tw/gfwlist -server=/.hidden-advent.org/127.0.0.1#5335 -ipset=/.hidden-advent.org/gfwlist -server=/.hide.me/127.0.0.1#5335 -ipset=/.hide.me/gfwlist -server=/.hidein.net/127.0.0.1#5335 -ipset=/.hidein.net/gfwlist -server=/.hideipvpn.com/127.0.0.1#5335 -ipset=/.hideipvpn.com/gfwlist -server=/.hideman.net/127.0.0.1#5335 -ipset=/.hideman.net/gfwlist -server=/.hideme.nl/127.0.0.1#5335 -ipset=/.hideme.nl/gfwlist -server=/.hidemy.name/127.0.0.1#5335 -ipset=/.hidemy.name/gfwlist -server=/.hidemyass.com/127.0.0.1#5335 -ipset=/.hidemyass.com/gfwlist -server=/.hidemycomp.com/127.0.0.1#5335 -ipset=/.hidemycomp.com/gfwlist -server=/.higfw.com/127.0.0.1#5335 -ipset=/.higfw.com/gfwlist -server=/.highpeakspureearth.com/127.0.0.1#5335 -ipset=/.highpeakspureearth.com/gfwlist -server=/.highrockmedia.com/127.0.0.1#5335 -ipset=/.highrockmedia.com/gfwlist -server=/.hihiforum.com/127.0.0.1#5335 -ipset=/.hihiforum.com/gfwlist -server=/.hihistory.net/127.0.0.1#5335 -ipset=/.hihistory.net/gfwlist -server=/.hiitch.com/127.0.0.1#5335 -ipset=/.hiitch.com/gfwlist -server=/.hikinggfw.org/127.0.0.1#5335 -ipset=/.hikinggfw.org/gfwlist -server=/.hilive.tv/127.0.0.1#5335 -ipset=/.hilive.tv/gfwlist -server=/.himalayan-foundation.org/127.0.0.1#5335 -ipset=/.himalayan-foundation.org/gfwlist -server=/.himalayanglacier.com/127.0.0.1#5335 -ipset=/.himalayanglacier.com/gfwlist -server=/.himemix.com/127.0.0.1#5335 -ipset=/.himemix.com/gfwlist -server=/.himemix.net/127.0.0.1#5335 -ipset=/.himemix.net/gfwlist -server=/.hitbtc.com/127.0.0.1#5335 -ipset=/.hitbtc.com/gfwlist -server=/.hitomi.la/127.0.0.1#5335 -ipset=/.hitomi.la/gfwlist -server=/.hiwifi.com/127.0.0.1#5335 -ipset=/.hiwifi.com/gfwlist -server=/.hizb-ut-tahrir.info/127.0.0.1#5335 -ipset=/.hizb-ut-tahrir.info/gfwlist -server=/.hizb-ut-tahrir.org/127.0.0.1#5335 -ipset=/.hizb-ut-tahrir.org/gfwlist -server=/.hizbuttahrir.org/127.0.0.1#5335 -ipset=/.hizbuttahrir.org/gfwlist -server=/.hjclub.info/127.0.0.1#5335 -ipset=/.hjclub.info/gfwlist -server=/.hk-pub.com/127.0.0.1#5335 -ipset=/.hk-pub.com/gfwlist -server=/.hk.geocities.com/127.0.0.1#5335 -ipset=/.hk.geocities.com/gfwlist -server=/.hk.hao123img.com/127.0.0.1#5335 -ipset=/.hk.hao123img.com/gfwlist -server=/.hk.jiepang.com/127.0.0.1#5335 -ipset=/.hk.jiepang.com/gfwlist -server=/.hk.knowledge.yahoo.com/127.0.0.1#5335 -ipset=/.hk.knowledge.yahoo.com/gfwlist -server=/.hk.myblog.yahoo.com/127.0.0.1#5335 -ipset=/.hk.myblog.yahoo.com/gfwlist -server=/.hk.news.yahoo.com/127.0.0.1#5335 -ipset=/.hk.news.yahoo.com/gfwlist -server=/.hk.rd.yahoo.com/127.0.0.1#5335 -ipset=/.hk.rd.yahoo.com/gfwlist -server=/.hk.yahoo.com/127.0.0.1#5335 -ipset=/.hk.yahoo.com/gfwlist -server=/.hk01.com/127.0.0.1#5335 -ipset=/.hk01.com/gfwlist -server=/.hk32168.com/127.0.0.1#5335 -ipset=/.hk32168.com/gfwlist -server=/.hka8964.wordpress.com/127.0.0.1#5335 -ipset=/.hka8964.wordpress.com/gfwlist -server=/.hkacg.com/127.0.0.1#5335 -ipset=/.hkacg.com/gfwlist -server=/.hkacg.net/127.0.0.1#5335 -ipset=/.hkacg.net/gfwlist -server=/.hkanews.wordpress.com/127.0.0.1#5335 -ipset=/.hkanews.wordpress.com/gfwlist -server=/.hkatvnews.com/127.0.0.1#5335 -ipset=/.hkatvnews.com/gfwlist -server=/.hkbc.net/127.0.0.1#5335 -ipset=/.hkbc.net/gfwlist -server=/.hkbf.org/127.0.0.1#5335 -ipset=/.hkbf.org/gfwlist -server=/.hkbookcity.com/127.0.0.1#5335 -ipset=/.hkbookcity.com/gfwlist -server=/.hkchurch.org/127.0.0.1#5335 -ipset=/.hkchurch.org/gfwlist -server=/.hkci.org.hk/127.0.0.1#5335 -ipset=/.hkci.org.hk/gfwlist -server=/.hkcmi.edu/127.0.0.1#5335 -ipset=/.hkcmi.edu/gfwlist -server=/.hkcnews.com/127.0.0.1#5335 -ipset=/.hkcnews.com/gfwlist -server=/.hkcoc.com/127.0.0.1#5335 -ipset=/.hkcoc.com/gfwlist -server=/.hkcoc.weather.com.hk/127.0.0.1#5335 -ipset=/.hkcoc.weather.com.hk/gfwlist -server=/.hkctu.org.hk/127.0.0.1#5335 -ipset=/.hkctu.org.hk/gfwlist -server=/.hkday.net/127.0.0.1#5335 -ipset=/.hkday.net/gfwlist -server=/.hkdf.org/127.0.0.1#5335 -ipset=/.hkdf.org/gfwlist -server=/.hkej.com/127.0.0.1#5335 -ipset=/.hkej.com/gfwlist -server=/.hkfaa.com/127.0.0.1#5335 -ipset=/.hkfaa.com/gfwlist -server=/.hkfreezone.com/127.0.0.1#5335 -ipset=/.hkfreezone.com/gfwlist -server=/.hkfront.org/127.0.0.1#5335 -ipset=/.hkfront.org/gfwlist -server=/.hkgalden.com/127.0.0.1#5335 -ipset=/.hkgalden.com/gfwlist -server=/.hkgolden.com/127.0.0.1#5335 -ipset=/.hkgolden.com/gfwlist -server=/.hkhkhk.com/127.0.0.1#5335 -ipset=/.hkhkhk.com/gfwlist -server=/.hkhrc.org.hk/127.0.0.1#5335 -ipset=/.hkhrc.org.hk/gfwlist -server=/.hkhrm.org.hk/127.0.0.1#5335 -ipset=/.hkhrm.org.hk/gfwlist -server=/.hkip.org.uk/127.0.0.1#5335 -ipset=/.hkip.org.uk/gfwlist -server=/.hkjc.com/127.0.0.1#5335 -ipset=/.hkjc.com/gfwlist -server=/.hkjp.org/127.0.0.1#5335 -ipset=/.hkjp.org/gfwlist -server=/.hklft.com/127.0.0.1#5335 -ipset=/.hklft.com/gfwlist -server=/.hklts.org.hk/127.0.0.1#5335 -ipset=/.hklts.org.hk/gfwlist -server=/.hkptu.org/127.0.0.1#5335 -ipset=/.hkptu.org/gfwlist -server=/.hkreporter.com/127.0.0.1#5335 -ipset=/.hkreporter.com/gfwlist -server=/.hkreporter.loved.hk/127.0.0.1#5335 -ipset=/.hkreporter.loved.hk/gfwlist -server=/.hkupop.hku.hk/127.0.0.1#5335 -ipset=/.hkupop.hku.hk/gfwlist -server=/.hkusu.net/127.0.0.1#5335 -ipset=/.hkusu.net/gfwlist -server=/.hkvwet.com/127.0.0.1#5335 -ipset=/.hkvwet.com/gfwlist -server=/.hkwcc.org.hk/127.0.0.1#5335 -ipset=/.hkwcc.org.hk/gfwlist -server=/.hkzone.org/127.0.0.1#5335 -ipset=/.hkzone.org/gfwlist -server=/.hmonghot.com/127.0.0.1#5335 -ipset=/.hmonghot.com/gfwlist -server=/.hmvdigital.ca/127.0.0.1#5335 -ipset=/.hmvdigital.ca/gfwlist -server=/.hmvdigital.com/127.0.0.1#5335 -ipset=/.hmvdigital.com/gfwlist -server=/.hnjhj.com/127.0.0.1#5335 -ipset=/.hnjhj.com/gfwlist -server=/.hnntube.com/127.0.0.1#5335 -ipset=/.hnntube.com/gfwlist -server=/.hola.com/127.0.0.1#5335 -ipset=/.hola.com/gfwlist -server=/.hola.org/127.0.0.1#5335 -ipset=/.hola.org/gfwlist -server=/.holymountaincn.com/127.0.0.1#5335 -ipset=/.holymountaincn.com/gfwlist -server=/.holyspiritspeaks.org/127.0.0.1#5335 -ipset=/.holyspiritspeaks.org/gfwlist -server=/.home.sina.com/127.0.0.1#5335 -ipset=/.home.sina.com/gfwlist -server=/.homedepot.com/127.0.0.1#5335 -ipset=/.homedepot.com/gfwlist -server=/.homeperversion.com/127.0.0.1#5335 -ipset=/.homeperversion.com/gfwlist -server=/.homeservershow.com/127.0.0.1#5335 -ipset=/.homeservershow.com/gfwlist -server=/.hongkongfp.com/127.0.0.1#5335 -ipset=/.hongkongfp.com/gfwlist -server=/.hongmeimei.com/127.0.0.1#5335 -ipset=/.hongmeimei.com/gfwlist -server=/.hongzhi.li/127.0.0.1#5335 -ipset=/.hongzhi.li/gfwlist -server=/.hootsuite.com/127.0.0.1#5335 -ipset=/.hootsuite.com/gfwlist -server=/.hoovers.com/127.0.0.1#5335 -ipset=/.hoovers.com/gfwlist -server=/.hopedialogue.org/127.0.0.1#5335 -ipset=/.hopedialogue.org/gfwlist -server=/.hopto.org/127.0.0.1#5335 -ipset=/.hopto.org/gfwlist -server=/.hornygamer.com/127.0.0.1#5335 -ipset=/.hornygamer.com/gfwlist -server=/.hornytrip.com/127.0.0.1#5335 -ipset=/.hornytrip.com/gfwlist -server=/.hotav.tv/127.0.0.1#5335 -ipset=/.hotav.tv/gfwlist -server=/.hotels.cn/127.0.0.1#5335 -ipset=/.hotels.cn/gfwlist -server=/.hotfrog.com.tw/127.0.0.1#5335 -ipset=/.hotfrog.com.tw/gfwlist -server=/.hotgoo.com/127.0.0.1#5335 -ipset=/.hotgoo.com/gfwlist -server=/.hotpornshow.com/127.0.0.1#5335 -ipset=/.hotpornshow.com/gfwlist -server=/.hotpot.hk/127.0.0.1#5335 -ipset=/.hotpot.hk/gfwlist -server=/.hotshame.com/127.0.0.1#5335 -ipset=/.hotshame.com/gfwlist -server=/.hotspotshield.com/127.0.0.1#5335 -ipset=/.hotspotshield.com/gfwlist -server=/.hotvpn.com/127.0.0.1#5335 -ipset=/.hotvpn.com/gfwlist -server=/.hougaige.com/127.0.0.1#5335 -ipset=/.hougaige.com/gfwlist -server=/.howtoforge.com/127.0.0.1#5335 -ipset=/.howtoforge.com/gfwlist -server=/.hoxx.com/127.0.0.1#5335 -ipset=/.hoxx.com/gfwlist -server=/.hpa.gov.tw/127.0.0.1#5335 -ipset=/.hpa.gov.tw/gfwlist -server=/.hqcdp.org/127.0.0.1#5335 -ipset=/.hqcdp.org/gfwlist -server=/.hqjapanesesex.com/127.0.0.1#5335 -ipset=/.hqjapanesesex.com/gfwlist -server=/.hqmovies.com/127.0.0.1#5335 -ipset=/.hqmovies.com/gfwlist -server=/.hqsbnet.wordpress.com/127.0.0.1#5335 -ipset=/.hqsbnet.wordpress.com/gfwlist -server=/.hqsbonline.wordpress.com/127.0.0.1#5335 -ipset=/.hqsbonline.wordpress.com/gfwlist -server=/.hrcchina.org/127.0.0.1#5335 -ipset=/.hrcchina.org/gfwlist -server=/.hrcir.com/127.0.0.1#5335 -ipset=/.hrcir.com/gfwlist -server=/.hrea.org/127.0.0.1#5335 -ipset=/.hrea.org/gfwlist -server=/.hrichina.org/127.0.0.1#5335 -ipset=/.hrichina.org/gfwlist -server=/.hrtsea.com/127.0.0.1#5335 -ipset=/.hrtsea.com/gfwlist -server=/.hrw.org/127.0.0.1#5335 -ipset=/.hrw.org/gfwlist -server=/.hrweb.org/127.0.0.1#5335 -ipset=/.hrweb.org/gfwlist -server=/.hsjp.net/127.0.0.1#5335 -ipset=/.hsjp.net/gfwlist -server=/.hsselite.com/127.0.0.1#5335 -ipset=/.hsselite.com/gfwlist -server=/.hst.net.tw/127.0.0.1#5335 -ipset=/.hst.net.tw/gfwlist -server=/.hstern.net/127.0.0.1#5335 -ipset=/.hstern.net/gfwlist -server=/.hstt.net/127.0.0.1#5335 -ipset=/.hstt.net/gfwlist -server=/.ht.ly/127.0.0.1#5335 -ipset=/.ht.ly/gfwlist -server=/.htkou.net/127.0.0.1#5335 -ipset=/.htkou.net/gfwlist -server=/.htl.li/127.0.0.1#5335 -ipset=/.htl.li/gfwlist -server=/.html5rocks.com/127.0.0.1#5335 -ipset=/.html5rocks.com/gfwlist -server=/.https443.net/127.0.0.1#5335 -ipset=/.https443.net/gfwlist -server=/.https443.org/127.0.0.1#5335 -ipset=/.https443.org/gfwlist -server=/.hua-yue.net/127.0.0.1#5335 -ipset=/.hua-yue.net/gfwlist -server=/.huaglad.com/127.0.0.1#5335 -ipset=/.huaglad.com/gfwlist -server=/.huanghuagang.org/127.0.0.1#5335 -ipset=/.huanghuagang.org/gfwlist -server=/.huangyiyu.com/127.0.0.1#5335 -ipset=/.huangyiyu.com/gfwlist -server=/.huaren.us/127.0.0.1#5335 -ipset=/.huaren.us/gfwlist -server=/.huaren4us.com/127.0.0.1#5335 -ipset=/.huaren4us.com/gfwlist -server=/.huashangnews.com/127.0.0.1#5335 -ipset=/.huashangnews.com/gfwlist -server=/.huaxia-news.com/127.0.0.1#5335 -ipset=/.huaxia-news.com/gfwlist -server=/.huaxiabao.org/127.0.0.1#5335 -ipset=/.huaxiabao.org/gfwlist -server=/.huaxin.ph/127.0.0.1#5335 -ipset=/.huaxin.ph/gfwlist -server=/.huayuworld.org/127.0.0.1#5335 -ipset=/.huayuworld.org/gfwlist -server=/.hudatoriq.web.id/127.0.0.1#5335 -ipset=/.hudatoriq.web.id/gfwlist -server=/.hudson.org/127.0.0.1#5335 -ipset=/.hudson.org/gfwlist -server=/.hugoroy.eu/127.0.0.1#5335 -ipset=/.hugoroy.eu/gfwlist -server=/.huhaitai.com/127.0.0.1#5335 -ipset=/.huhaitai.com/gfwlist -server=/.huhamhire.com/127.0.0.1#5335 -ipset=/.huhamhire.com/gfwlist -server=/.huhangfei.com/127.0.0.1#5335 -ipset=/.huhangfei.com/gfwlist -server=/.huiyi.in/127.0.0.1#5335 -ipset=/.huiyi.in/gfwlist -server=/.hulkshare.com/127.0.0.1#5335 -ipset=/.hulkshare.com/gfwlist -server=/.hulu.com/127.0.0.1#5335 -ipset=/.hulu.com/gfwlist -server=/.huluim.com/127.0.0.1#5335 -ipset=/.huluim.com/gfwlist -server=/.humanrightsbriefing.org/127.0.0.1#5335 -ipset=/.humanrightsbriefing.org/gfwlist -server=/.hung-ya.com/127.0.0.1#5335 -ipset=/.hung-ya.com/gfwlist -server=/.hungerstrikeforaids.org/127.0.0.1#5335 -ipset=/.hungerstrikeforaids.org/gfwlist -server=/.huobi.com/127.0.0.1#5335 -ipset=/.huobi.com/gfwlist -server=/.huobi.pro/127.0.0.1#5335 -ipset=/.huobi.pro/gfwlist -server=/.huobipro.com/127.0.0.1#5335 -ipset=/.huobipro.com/gfwlist -server=/.huping.net/127.0.0.1#5335 -ipset=/.huping.net/gfwlist -server=/.hurgokbayrak.com/127.0.0.1#5335 -ipset=/.hurgokbayrak.com/gfwlist -server=/.hurriyet.com.tr/127.0.0.1#5335 -ipset=/.hurriyet.com.tr/gfwlist -server=/.hustlercash.com/127.0.0.1#5335 -ipset=/.hustlercash.com/gfwlist -server=/.hut2.ru/127.0.0.1#5335 -ipset=/.hut2.ru/gfwlist -server=/.hutianyi.net/127.0.0.1#5335 -ipset=/.hutianyi.net/gfwlist -server=/.hutong9.net/127.0.0.1#5335 -ipset=/.hutong9.net/gfwlist -server=/.huyandex.com/127.0.0.1#5335 -ipset=/.huyandex.com/gfwlist -server=/.hwadzan.tw/127.0.0.1#5335 -ipset=/.hwadzan.tw/gfwlist -server=/.hwayue.org.tw/127.0.0.1#5335 -ipset=/.hwayue.org.tw/gfwlist -server=/.hwinfo.com/127.0.0.1#5335 -ipset=/.hwinfo.com/gfwlist -server=/.hxwk.org/127.0.0.1#5335 -ipset=/.hxwk.org/gfwlist -server=/.hxwq.org/127.0.0.1#5335 -ipset=/.hxwq.org/gfwlist -server=/.hybrid-analysis.com/127.0.0.1#5335 -ipset=/.hybrid-analysis.com/gfwlist -server=/.hyperrate.com/127.0.0.1#5335 -ipset=/.hyperrate.com/gfwlist -server=/.i-cable.com/127.0.0.1#5335 -ipset=/.i-cable.com/gfwlist -server=/.i-part.com.tw/127.0.0.1#5335 -ipset=/.i-part.com.tw/gfwlist -server=/.i.lithium.com/127.0.0.1#5335 -ipset=/.i.lithium.com/gfwlist -server=/.i1.hk/127.0.0.1#5335 -ipset=/.i1.hk/gfwlist -server=/.i2p2.de/127.0.0.1#5335 -ipset=/.i2p2.de/gfwlist -server=/.i2runner.com/127.0.0.1#5335 -ipset=/.i2runner.com/gfwlist -server=/.i818hk.com/127.0.0.1#5335 -ipset=/.i818hk.com/gfwlist -server=/.iam.soy/127.0.0.1#5335 -ipset=/.iam.soy/gfwlist -server=/.iamtopone.com/127.0.0.1#5335 -ipset=/.iamtopone.com/gfwlist -server=/.iask.bz/127.0.0.1#5335 -ipset=/.iask.bz/gfwlist -server=/.iask.ca/127.0.0.1#5335 -ipset=/.iask.ca/gfwlist -server=/.iav19.com/127.0.0.1#5335 -ipset=/.iav19.com/gfwlist -server=/.iblist.com/127.0.0.1#5335 -ipset=/.iblist.com/gfwlist -server=/.iblogserv-f.net/127.0.0.1#5335 -ipset=/.iblogserv-f.net/gfwlist -server=/.ibros.org/127.0.0.1#5335 -ipset=/.ibros.org/gfwlist -server=/.ibvpn.com/127.0.0.1#5335 -ipset=/.ibvpn.com/gfwlist -server=/.icams.com/127.0.0.1#5335 -ipset=/.icams.com/gfwlist -server=/.ice.audionow.com/127.0.0.1#5335 -ipset=/.ice.audionow.com/gfwlist -server=/.icij.org/127.0.0.1#5335 -ipset=/.icij.org/gfwlist -server=/.icl-fi.org/127.0.0.1#5335 -ipset=/.icl-fi.org/gfwlist -server=/.icoco.com/127.0.0.1#5335 -ipset=/.icoco.com/gfwlist -server=/.iconpaper.org/127.0.0.1#5335 -ipset=/.iconpaper.org/gfwlist -server=/.icu-project.org/127.0.0.1#5335 -ipset=/.icu-project.org/gfwlist -server=/.id.hao123.com/127.0.0.1#5335 -ipset=/.id.hao123.com/gfwlist -server=/.id.heroku.com/127.0.0.1#5335 -ipset=/.id.heroku.com/gfwlist -server=/.iddddg.com/127.0.0.1#5335 -ipset=/.iddddg.com/gfwlist -server=/.idemocracy.asia/127.0.0.1#5335 -ipset=/.idemocracy.asia/gfwlist -server=/.identi.ca/127.0.0.1#5335 -ipset=/.identi.ca/gfwlist -server=/.idiomconnection.com/127.0.0.1#5335 -ipset=/.idiomconnection.com/gfwlist -server=/.idouga.com/127.0.0.1#5335 -ipset=/.idouga.com/gfwlist -server=/.idreamx.com/127.0.0.1#5335 -ipset=/.idreamx.com/gfwlist -server=/.idv.tw/127.0.0.1#5335 -ipset=/.idv.tw/gfwlist -server=/.ieasy5.com/127.0.0.1#5335 -ipset=/.ieasy5.com/gfwlist -server=/.ied2k.net/127.0.0.1#5335 -ipset=/.ied2k.net/gfwlist -server=/.ienergy1.com/127.0.0.1#5335 -ipset=/.ienergy1.com/gfwlist -server=/.ifan.cz.cc/127.0.0.1#5335 -ipset=/.ifan.cz.cc/gfwlist -server=/.ifanqiang.com/127.0.0.1#5335 -ipset=/.ifanqiang.com/gfwlist -server=/.ifcss.org/127.0.0.1#5335 -ipset=/.ifcss.org/gfwlist -server=/.ifjc.org/127.0.0.1#5335 -ipset=/.ifjc.org/gfwlist -server=/.ifreewares.com/127.0.0.1#5335 -ipset=/.ifreewares.com/gfwlist -server=/.ift.tt/127.0.0.1#5335 -ipset=/.ift.tt/gfwlist -server=/.igcd.net/127.0.0.1#5335 -ipset=/.igcd.net/gfwlist -server=/.igfw.net/127.0.0.1#5335 -ipset=/.igfw.net/gfwlist -server=/.igfw.tech/127.0.0.1#5335 -ipset=/.igfw.tech/gfwlist -server=/.igmg.de/127.0.0.1#5335 -ipset=/.igmg.de/gfwlist -server=/.ignitedetroit.net/127.0.0.1#5335 -ipset=/.ignitedetroit.net/gfwlist -server=/.igoogle.com/127.0.0.1#5335 -ipset=/.igoogle.com/gfwlist -server=/.igotmail.com.tw/127.0.0.1#5335 -ipset=/.igotmail.com.tw/gfwlist -server=/.igvita.com/127.0.0.1#5335 -ipset=/.igvita.com/gfwlist -server=/.ihakka.net/127.0.0.1#5335 -ipset=/.ihakka.net/gfwlist -server=/.iicns.com/127.0.0.1#5335 -ipset=/.iicns.com/gfwlist -server=/.iipdigital.usembassy.gov/127.0.0.1#5335 -ipset=/.iipdigital.usembassy.gov/gfwlist -server=/.ikstar.com/127.0.0.1#5335 -ipset=/.ikstar.com/gfwlist -server=/.ikwb.com/127.0.0.1#5335 -ipset=/.ikwb.com/gfwlist -server=/.ilhamtohtiinstitute.org/127.0.0.1#5335 -ipset=/.ilhamtohtiinstitute.org/gfwlist -server=/.illusionfactory.com/127.0.0.1#5335 -ipset=/.illusionfactory.com/gfwlist -server=/.ilove80.be/127.0.0.1#5335 -ipset=/.ilove80.be/gfwlist -server=/.ilovelongtoes.com/127.0.0.1#5335 -ipset=/.ilovelongtoes.com/gfwlist -server=/.im.tv/127.0.0.1#5335 -ipset=/.im.tv/gfwlist -server=/.im88.tw/127.0.0.1#5335 -ipset=/.im88.tw/gfwlist -server=/.imageab.com/127.0.0.1#5335 -ipset=/.imageab.com/gfwlist -server=/.imagefap.com/127.0.0.1#5335 -ipset=/.imagefap.com/gfwlist -server=/.imageflea.com/127.0.0.1#5335 -ipset=/.imageflea.com/gfwlist -server=/.images-gaytube.com/127.0.0.1#5335 -ipset=/.images-gaytube.com/gfwlist -server=/.images.comico.tw/127.0.0.1#5335 -ipset=/.images.comico.tw/gfwlist -server=/.imageshack.us/127.0.0.1#5335 -ipset=/.imageshack.us/gfwlist -server=/.imagevenue.com/127.0.0.1#5335 -ipset=/.imagevenue.com/gfwlist -server=/.imagezilla.net/127.0.0.1#5335 -ipset=/.imagezilla.net/gfwlist -server=/.imb.org/127.0.0.1#5335 -ipset=/.imb.org/gfwlist -server=/.img.ly/127.0.0.1#5335 -ipset=/.img.ly/gfwlist -server=/.imgchili.net/127.0.0.1#5335 -ipset=/.imgchili.net/gfwlist -server=/.imgur.com/127.0.0.1#5335 -ipset=/.imgur.com/gfwlist -server=/.imkev.com/127.0.0.1#5335 -ipset=/.imkev.com/gfwlist -server=/.imlive.com/127.0.0.1#5335 -ipset=/.imlive.com/gfwlist -server=/.immigration.gov.tw/127.0.0.1#5335 -ipset=/.immigration.gov.tw/gfwlist -server=/.immoral.jp/127.0.0.1#5335 -ipset=/.immoral.jp/gfwlist -server=/.impact.org.au/127.0.0.1#5335 -ipset=/.impact.org.au/gfwlist -server=/.impp.mn/127.0.0.1#5335 -ipset=/.impp.mn/gfwlist -server=/.in-disguise.com/127.0.0.1#5335 -ipset=/.in-disguise.com/gfwlist -server=/.in99.org/127.0.0.1#5335 -ipset=/.in99.org/gfwlist -server=/.incapdns.net/127.0.0.1#5335 -ipset=/.incapdns.net/gfwlist -server=/.incloak.com/127.0.0.1#5335 -ipset=/.incloak.com/gfwlist -server=/.incredibox.fr/127.0.0.1#5335 -ipset=/.incredibox.fr/gfwlist -server=/.indiandefensenews.in/127.0.0.1#5335 -ipset=/.indiandefensenews.in/gfwlist -server=/.indiemerch.com/127.0.0.1#5335 -ipset=/.indiemerch.com/gfwlist -server=/.info-graf.fr/127.0.0.1#5335 -ipset=/.info-graf.fr/gfwlist -server=/.initiativesforchina.org/127.0.0.1#5335 -ipset=/.initiativesforchina.org/gfwlist -server=/.inkui.com/127.0.0.1#5335 -ipset=/.inkui.com/gfwlist -server=/.inmediahk.net/127.0.0.1#5335 -ipset=/.inmediahk.net/gfwlist -server=/.innermongolia.org/127.0.0.1#5335 -ipset=/.innermongolia.org/gfwlist -server=/.inote.tw/127.0.0.1#5335 -ipset=/.inote.tw/gfwlist -server=/.insecam.org/127.0.0.1#5335 -ipset=/.insecam.org/gfwlist -server=/.insidevoa.com/127.0.0.1#5335 -ipset=/.insidevoa.com/gfwlist -server=/.instagram.com/127.0.0.1#5335 -ipset=/.instagram.com/gfwlist -server=/.instanthq.com/127.0.0.1#5335 -ipset=/.instanthq.com/gfwlist -server=/.institut-tibetain.org/127.0.0.1#5335 -ipset=/.institut-tibetain.org/gfwlist -server=/.international-news.newsmagazine.asia/127.0.0.1#5335 -ipset=/.international-news.newsmagazine.asia/gfwlist -server=/.internetdefenseleague.org/127.0.0.1#5335 -ipset=/.internetdefenseleague.org/gfwlist -server=/.internetfreedom.org/127.0.0.1#5335 -ipset=/.internetfreedom.org/gfwlist -server=/.internetpopculture.com/127.0.0.1#5335 -ipset=/.internetpopculture.com/gfwlist -server=/.inthenameofconfuciusmovie.com/127.0.0.1#5335 -ipset=/.inthenameofconfuciusmovie.com/gfwlist -server=/.investigating.wordpress.com/127.0.0.1#5335 -ipset=/.investigating.wordpress.com/gfwlist -server=/.inxian.com/127.0.0.1#5335 -ipset=/.inxian.com/gfwlist -server=/.iownyour.biz/127.0.0.1#5335 -ipset=/.iownyour.biz/gfwlist -server=/.iownyour.org/127.0.0.1#5335 -ipset=/.iownyour.org/gfwlist -server=/.ipalter.com/127.0.0.1#5335 -ipset=/.ipalter.com/gfwlist -server=/.ipfire.org/127.0.0.1#5335 -ipset=/.ipfire.org/gfwlist -server=/.ipfs.io/127.0.0.1#5335 -ipset=/.ipfs.io/gfwlist -server=/.iphone4hongkong.com/127.0.0.1#5335 -ipset=/.iphone4hongkong.com/gfwlist -server=/.iphonehacks.com/127.0.0.1#5335 -ipset=/.iphonehacks.com/gfwlist -server=/.iphonetaiwan.org/127.0.0.1#5335 -ipset=/.iphonetaiwan.org/gfwlist -server=/.iphonix.fr/127.0.0.1#5335 -ipset=/.iphonix.fr/gfwlist -server=/.ipicture.ru/127.0.0.1#5335 -ipset=/.ipicture.ru/gfwlist -server=/.ipjetable.net/127.0.0.1#5335 -ipset=/.ipjetable.net/gfwlist -server=/.iportal.me/127.0.0.1#5335 -ipset=/.iportal.me/gfwlist -server=/.ippotv.com/127.0.0.1#5335 -ipset=/.ippotv.com/gfwlist -server=/.ipredator.se/127.0.0.1#5335 -ipset=/.ipredator.se/gfwlist -server=/.iptv.com.tw/127.0.0.1#5335 -ipset=/.iptv.com.tw/gfwlist -server=/.iptvbin.com/127.0.0.1#5335 -ipset=/.iptvbin.com/gfwlist -server=/.ipvanish.com/127.0.0.1#5335 -ipset=/.ipvanish.com/gfwlist -server=/.iredmail.org/127.0.0.1#5335 -ipset=/.iredmail.org/gfwlist -server=/.ironbigfools.compython.net/127.0.0.1#5335 -ipset=/.ironbigfools.compython.net/gfwlist -server=/.ironpython.net/127.0.0.1#5335 -ipset=/.ironpython.net/gfwlist -server=/.ironsocket.com/127.0.0.1#5335 -ipset=/.ironsocket.com/gfwlist -server=/.is-a-hunter.com/127.0.0.1#5335 -ipset=/.is-a-hunter.com/gfwlist -server=/.is.gd/127.0.0.1#5335 -ipset=/.is.gd/gfwlist -server=/.isaacmao.com/127.0.0.1#5335 -ipset=/.isaacmao.com/gfwlist -server=/.isasecret.com/127.0.0.1#5335 -ipset=/.isasecret.com/gfwlist -server=/.isc.sans.edu/127.0.0.1#5335 -ipset=/.isc.sans.edu/gfwlist -server=/.isgreat.org/127.0.0.1#5335 -ipset=/.isgreat.org/gfwlist -server=/.islahhaber.net/127.0.0.1#5335 -ipset=/.islahhaber.net/gfwlist -server=/.islam.org.hk/127.0.0.1#5335 -ipset=/.islam.org.hk/gfwlist -server=/.islamhouse.com/127.0.0.1#5335 -ipset=/.islamhouse.com/gfwlist -server=/.islamicity.com/127.0.0.1#5335 -ipset=/.islamicity.com/gfwlist -server=/.islamicpluralism.org/127.0.0.1#5335 -ipset=/.islamicpluralism.org/gfwlist -server=/.islamtoday.net/127.0.0.1#5335 -ipset=/.islamtoday.net/gfwlist -server=/.ismaelan.com/127.0.0.1#5335 -ipset=/.ismaelan.com/gfwlist -server=/.ismalltits.com/127.0.0.1#5335 -ipset=/.ismalltits.com/gfwlist -server=/.ismprofessional.net/127.0.0.1#5335 -ipset=/.ismprofessional.net/gfwlist -server=/.isohunt.com/127.0.0.1#5335 -ipset=/.isohunt.com/gfwlist -server=/.israbox.com/127.0.0.1#5335 -ipset=/.israbox.com/gfwlist -server=/.issuu.com/127.0.0.1#5335 -ipset=/.issuu.com/gfwlist -server=/.istars.co.nz/127.0.0.1#5335 -ipset=/.istars.co.nz/gfwlist -server=/.istiqlalhewer.com/127.0.0.1#5335 -ipset=/.istiqlalhewer.com/gfwlist -server=/.istockphoto.com/127.0.0.1#5335 -ipset=/.istockphoto.com/gfwlist -server=/.isunaffairs.com/127.0.0.1#5335 -ipset=/.isunaffairs.com/gfwlist -server=/.isuntv.com/127.0.0.1#5335 -ipset=/.isuntv.com/gfwlist -server=/.itaboo.info/127.0.0.1#5335 -ipset=/.itaboo.info/gfwlist -server=/.itaiwan.gov.tw/127.0.0.1#5335 -ipset=/.itaiwan.gov.tw/gfwlist -server=/.italiatibet.org/127.0.0.1#5335 -ipset=/.italiatibet.org/gfwlist -server=/.itasoftware.com/127.0.0.1#5335 -ipset=/.itasoftware.com/gfwlist -server=/.itemdb.com/127.0.0.1#5335 -ipset=/.itemdb.com/gfwlist -server=/.ithelp.ithome.com.tw/127.0.0.1#5335 -ipset=/.ithelp.ithome.com.tw/gfwlist -server=/.itsaol.com/127.0.0.1#5335 -ipset=/.itsaol.com/gfwlist -server=/.itshidden.com/127.0.0.1#5335 -ipset=/.itshidden.com/gfwlist -server=/.itsky.it/127.0.0.1#5335 -ipset=/.itsky.it/gfwlist -server=/.itweet.net/127.0.0.1#5335 -ipset=/.itweet.net/gfwlist -server=/.iu45.com/127.0.0.1#5335 -ipset=/.iu45.com/gfwlist -server=/.iuhrdf.org/127.0.0.1#5335 -ipset=/.iuhrdf.org/gfwlist -server=/.iuksky.com/127.0.0.1#5335 -ipset=/.iuksky.com/gfwlist -server=/.ivacy.com/127.0.0.1#5335 -ipset=/.ivacy.com/gfwlist -server=/.iverycd.com/127.0.0.1#5335 -ipset=/.iverycd.com/gfwlist -server=/.ivpn.net/127.0.0.1#5335 -ipset=/.ivpn.net/gfwlist -server=/.ixquick.com/127.0.0.1#5335 -ipset=/.ixquick.com/gfwlist -server=/.ixxx.com/127.0.0.1#5335 -ipset=/.ixxx.com/gfwlist -server=/.iyouport.com/127.0.0.1#5335 -ipset=/.iyouport.com/gfwlist -server=/.izaobao.us/127.0.0.1#5335 -ipset=/.izaobao.us/gfwlist -server=/.izles.net/127.0.0.1#5335 -ipset=/.izles.net/gfwlist -server=/.izlesem.org/127.0.0.1#5335 -ipset=/.izlesem.org/gfwlist -server=/.j.mp/127.0.0.1#5335 -ipset=/.j.mp/gfwlist -server=/.ja.wikipedia.org/127.0.0.1#5335 -ipset=/.ja.wikipedia.org/gfwlist -server=/.jamaat.org/127.0.0.1#5335 -ipset=/.jamaat.org/gfwlist -server=/.jamyangnorbu.com/127.0.0.1#5335 -ipset=/.jamyangnorbu.com/gfwlist -server=/.jandyx.com/127.0.0.1#5335 -ipset=/.jandyx.com/gfwlist -server=/.janwongphoto.com/127.0.0.1#5335 -ipset=/.janwongphoto.com/gfwlist -server=/.japan-whores.com/127.0.0.1#5335 -ipset=/.japan-whores.com/gfwlist -server=/.japantimes.co.jp/127.0.0.1#5335 -ipset=/.japantimes.co.jp/gfwlist -server=/.jav.com/127.0.0.1#5335 -ipset=/.jav.com/gfwlist -server=/.jav101.com/127.0.0.1#5335 -ipset=/.jav101.com/gfwlist -server=/.jav2be.com/127.0.0.1#5335 -ipset=/.jav2be.com/gfwlist -server=/.jav68.tv/127.0.0.1#5335 -ipset=/.jav68.tv/gfwlist -server=/.javakiba.org/127.0.0.1#5335 -ipset=/.javakiba.org/gfwlist -server=/.javbus.com/127.0.0.1#5335 -ipset=/.javbus.com/gfwlist -server=/.javfor.me/127.0.0.1#5335 -ipset=/.javfor.me/gfwlist -server=/.javhd.com/127.0.0.1#5335 -ipset=/.javhd.com/gfwlist -server=/.javhip.com/127.0.0.1#5335 -ipset=/.javhip.com/gfwlist -server=/.javhub.net/127.0.0.1#5335 -ipset=/.javhub.net/gfwlist -server=/.javhuge.com/127.0.0.1#5335 -ipset=/.javhuge.com/gfwlist -server=/.javlibrary.com/127.0.0.1#5335 -ipset=/.javlibrary.com/gfwlist -server=/.javmobile.net/127.0.0.1#5335 -ipset=/.javmobile.net/gfwlist -server=/.javmoo.com/127.0.0.1#5335 -ipset=/.javmoo.com/gfwlist -server=/.javmoo.xyz/127.0.0.1#5335 -ipset=/.javmoo.xyz/gfwlist -server=/.javseen.com/127.0.0.1#5335 -ipset=/.javseen.com/gfwlist -server=/.javtag.com/127.0.0.1#5335 -ipset=/.javtag.com/gfwlist -server=/.javzoo.com/127.0.0.1#5335 -ipset=/.javzoo.com/gfwlist -server=/.jbtalks.cc/127.0.0.1#5335 -ipset=/.jbtalks.cc/gfwlist -server=/.jbtalks.com/127.0.0.1#5335 -ipset=/.jbtalks.com/gfwlist -server=/.jbtalks.my/127.0.0.1#5335 -ipset=/.jbtalks.my/gfwlist -server=/.jcpenney.com/127.0.0.1#5335 -ipset=/.jcpenney.com/gfwlist -server=/.jdwsy.com/127.0.0.1#5335 -ipset=/.jdwsy.com/gfwlist -server=/.jeanyim.com/127.0.0.1#5335 -ipset=/.jeanyim.com/gfwlist -server=/.jetos.com/127.0.0.1#5335 -ipset=/.jetos.com/gfwlist -server=/.jex.com/127.0.0.1#5335 -ipset=/.jex.com/gfwlist -server=/.jfqu36.club/127.0.0.1#5335 -ipset=/.jfqu36.club/gfwlist -server=/.jfqu37.xyz/127.0.0.1#5335 -ipset=/.jfqu37.xyz/gfwlist -server=/.jgoodies.com/127.0.0.1#5335 -ipset=/.jgoodies.com/gfwlist -server=/.jiangweiping.com/127.0.0.1#5335 -ipset=/.jiangweiping.com/gfwlist -server=/.jiaoyou8.com/127.0.0.1#5335 -ipset=/.jiaoyou8.com/gfwlist -server=/.jiehua.cz/127.0.0.1#5335 -ipset=/.jiehua.cz/gfwlist -server=/.jieshibaobao.com/127.0.0.1#5335 -ipset=/.jieshibaobao.com/gfwlist -server=/.jigglegifs.com/127.0.0.1#5335 -ipset=/.jigglegifs.com/gfwlist -server=/.jigong1024.com/127.0.0.1#5335 -ipset=/.jigong1024.com/gfwlist -server=/.jihadintel.meforum.org/127.0.0.1#5335 -ipset=/.jihadintel.meforum.org/gfwlist -server=/.jihadology.net/127.0.0.1#5335 -ipset=/.jihadology.net/gfwlist -server=/.jiji.com/127.0.0.1#5335 -ipset=/.jiji.com/gfwlist -server=/.jims.net/127.0.0.1#5335 -ipset=/.jims.net/gfwlist -server=/.jinbushe.org/127.0.0.1#5335 -ipset=/.jinbushe.org/gfwlist -server=/.jingpin.org/127.0.0.1#5335 -ipset=/.jingpin.org/gfwlist -server=/.jingsim.org/127.0.0.1#5335 -ipset=/.jingsim.org/gfwlist -server=/.jinpianwang.com/127.0.0.1#5335 -ipset=/.jinpianwang.com/gfwlist -server=/.jinroukong.com/127.0.0.1#5335 -ipset=/.jinroukong.com/gfwlist -server=/.jintian.net/127.0.0.1#5335 -ipset=/.jintian.net/gfwlist -server=/.jinx.com/127.0.0.1#5335 -ipset=/.jinx.com/gfwlist -server=/.jitouch.com/127.0.0.1#5335 -ipset=/.jitouch.com/gfwlist -server=/.jizzthis.com/127.0.0.1#5335 -ipset=/.jizzthis.com/gfwlist -server=/.jjgirls.com/127.0.0.1#5335 -ipset=/.jjgirls.com/gfwlist -server=/.jkb.cc/127.0.0.1#5335 -ipset=/.jkb.cc/gfwlist -server=/.jkforum.net/127.0.0.1#5335 -ipset=/.jkforum.net/gfwlist -server=/.jkub.com/127.0.0.1#5335 -ipset=/.jkub.com/gfwlist -server=/.jma.go.jp/127.0.0.1#5335 -ipset=/.jma.go.jp/gfwlist -server=/.jmscult.com/127.0.0.1#5335 -ipset=/.jmscult.com/gfwlist -server=/.joachims.org/127.0.0.1#5335 -ipset=/.joachims.org/gfwlist -server=/.jobnewera.wordpress.com/127.0.0.1#5335 -ipset=/.jobnewera.wordpress.com/gfwlist -server=/.jobso.tv/127.0.0.1#5335 -ipset=/.jobso.tv/gfwlist -server=/.joinmastodon.org/127.0.0.1#5335 -ipset=/.joinmastodon.org/gfwlist -server=/.journalchretien.net/127.0.0.1#5335 -ipset=/.journalchretien.net/gfwlist -server=/.journalofdemocracy.org/127.0.0.1#5335 -ipset=/.journalofdemocracy.org/gfwlist -server=/.joymiihub.com/127.0.0.1#5335 -ipset=/.joymiihub.com/gfwlist -server=/.joyourself.com/127.0.0.1#5335 -ipset=/.joyourself.com/gfwlist -server=/.jp.hao123.com/127.0.0.1#5335 -ipset=/.jp.hao123.com/gfwlist -server=/.jpl.nasa.gov/127.0.0.1#5335 -ipset=/.jpl.nasa.gov/gfwlist -server=/.jpopforum.net/127.0.0.1#5335 -ipset=/.jpopforum.net/gfwlist -server=/.jtvnw.net/127.0.0.1#5335 -ipset=/.jtvnw.net/gfwlist -server=/.jubushoushen.com/127.0.0.1#5335 -ipset=/.jubushoushen.com/gfwlist -server=/.juhuaren.com/127.0.0.1#5335 -ipset=/.juhuaren.com/gfwlist -server=/.jukujo-club.com/127.0.0.1#5335 -ipset=/.jukujo-club.com/gfwlist -server=/.juliepost.com/127.0.0.1#5335 -ipset=/.juliepost.com/gfwlist -server=/.juliereyc.com/127.0.0.1#5335 -ipset=/.juliereyc.com/gfwlist -server=/.junauza.com/127.0.0.1#5335 -ipset=/.junauza.com/gfwlist -server=/.june4commemoration.org/127.0.0.1#5335 -ipset=/.june4commemoration.org/gfwlist -server=/.junefourth-20.net/127.0.0.1#5335 -ipset=/.junefourth-20.net/gfwlist -server=/.jungleheart.com/127.0.0.1#5335 -ipset=/.jungleheart.com/gfwlist -server=/.juoaa.com/127.0.0.1#5335 -ipset=/.juoaa.com/gfwlist -server=/.justdied.com/127.0.0.1#5335 -ipset=/.justdied.com/gfwlist -server=/.justfreevpn.com/127.0.0.1#5335 -ipset=/.justfreevpn.com/gfwlist -server=/.justicefortenzin.org/127.0.0.1#5335 -ipset=/.justicefortenzin.org/gfwlist -server=/.justpaste.it/127.0.0.1#5335 -ipset=/.justpaste.it/gfwlist -server=/.justtristan.com/127.0.0.1#5335 -ipset=/.justtristan.com/gfwlist -server=/.juyuange.org/127.0.0.1#5335 -ipset=/.juyuange.org/gfwlist -server=/.juziyue.com/127.0.0.1#5335 -ipset=/.juziyue.com/gfwlist -server=/.jwmusic.org/127.0.0.1#5335 -ipset=/.jwmusic.org/gfwlist -server=/.jyxf.net/127.0.0.1#5335 -ipset=/.jyxf.net/gfwlist -server=/.k-doujin.net/127.0.0.1#5335 -ipset=/.k-doujin.net/gfwlist -server=/.ka-wai.com/127.0.0.1#5335 -ipset=/.ka-wai.com/gfwlist -server=/.kadokawa.co.jp/127.0.0.1#5335 -ipset=/.kadokawa.co.jp/gfwlist -server=/.kagyu.org/127.0.0.1#5335 -ipset=/.kagyu.org/gfwlist -server=/.kagyumonlam.org/127.0.0.1#5335 -ipset=/.kagyumonlam.org/gfwlist -server=/.kagyunews.com.hk/127.0.0.1#5335 -ipset=/.kagyunews.com.hk/gfwlist -server=/.kagyuoffice.org/127.0.0.1#5335 -ipset=/.kagyuoffice.org/gfwlist -server=/.kaiyuan.de/127.0.0.1#5335 -ipset=/.kaiyuan.de/gfwlist -server=/.kakao.com/127.0.0.1#5335 -ipset=/.kakao.com/gfwlist -server=/.kalachakralugano.org/127.0.0.1#5335 -ipset=/.kalachakralugano.org/gfwlist -server=/.kankan.today/127.0.0.1#5335 -ipset=/.kankan.today/gfwlist -server=/.kannewyork.com/127.0.0.1#5335 -ipset=/.kannewyork.com/gfwlist -server=/.kanshifang.com/127.0.0.1#5335 -ipset=/.kanshifang.com/gfwlist -server=/.kantie.org/127.0.0.1#5335 -ipset=/.kantie.org/gfwlist -server=/.kanzhongguo.com/127.0.0.1#5335 -ipset=/.kanzhongguo.com/gfwlist -server=/.kanzhongguo.eu/127.0.0.1#5335 -ipset=/.kanzhongguo.eu/gfwlist -server=/.kaotic.com/127.0.0.1#5335 -ipset=/.kaotic.com/gfwlist -server=/.karayou.com/127.0.0.1#5335 -ipset=/.karayou.com/gfwlist -server=/.karkhung.com/127.0.0.1#5335 -ipset=/.karkhung.com/gfwlist -server=/.karmapa-teachings.org/127.0.0.1#5335 -ipset=/.karmapa-teachings.org/gfwlist -server=/.karmapa.org/127.0.0.1#5335 -ipset=/.karmapa.org/gfwlist -server=/.kawaiikawaii.jp/127.0.0.1#5335 -ipset=/.kawaiikawaii.jp/gfwlist -server=/.kawase.com/127.0.0.1#5335 -ipset=/.kawase.com/gfwlist -server=/.kb.monitorware.com/127.0.0.1#5335 -ipset=/.kb.monitorware.com/gfwlist -server=/.kba-tx.org/127.0.0.1#5335 -ipset=/.kba-tx.org/gfwlist -server=/.kcoolonline.com/127.0.0.1#5335 -ipset=/.kcoolonline.com/gfwlist -server=/.kebrum.com/127.0.0.1#5335 -ipset=/.kebrum.com/gfwlist -server=/.kechara.com/127.0.0.1#5335 -ipset=/.kechara.com/gfwlist -server=/.keezmovies.com/127.0.0.1#5335 -ipset=/.keezmovies.com/gfwlist -server=/.kendatire.com/127.0.0.1#5335 -ipset=/.kendatire.com/gfwlist -server=/.kendincos.net/127.0.0.1#5335 -ipset=/.kendincos.net/gfwlist -server=/.kenengba.com/127.0.0.1#5335 -ipset=/.kenengba.com/gfwlist -server=/.keontech.net/127.0.0.1#5335 -ipset=/.keontech.net/gfwlist -server=/.kepard.com/127.0.0.1#5335 -ipset=/.kepard.com/gfwlist -server=/.kex.com/127.0.0.1#5335 -ipset=/.kex.com/gfwlist -server=/.keycdn.com/127.0.0.1#5335 -ipset=/.keycdn.com/gfwlist -server=/.khabdha.org/127.0.0.1#5335 -ipset=/.khabdha.org/gfwlist -server=/.khatrimaza.org/127.0.0.1#5335 -ipset=/.khatrimaza.org/gfwlist -server=/.khmusic.com.tw/127.0.0.1#5335 -ipset=/.khmusic.com.tw/gfwlist -server=/.kichiku-doujinko.com/127.0.0.1#5335 -ipset=/.kichiku-doujinko.com/gfwlist -server=/.kik.com/127.0.0.1#5335 -ipset=/.kik.com/gfwlist -server=/.killwall.com/127.0.0.1#5335 -ipset=/.killwall.com/gfwlist -server=/.kindleren.com/127.0.0.1#5335 -ipset=/.kindleren.com/gfwlist -server=/.kineox.free.fr/127.0.0.1#5335 -ipset=/.kineox.free.fr/gfwlist -server=/.kingdomsalvation.org/127.0.0.1#5335 -ipset=/.kingdomsalvation.org/gfwlist -server=/.kinghost.com/127.0.0.1#5335 -ipset=/.kinghost.com/gfwlist -server=/.kingstone.com.tw/127.0.0.1#5335 -ipset=/.kingstone.com.tw/gfwlist -server=/.kink.com/127.0.0.1#5335 -ipset=/.kink.com/gfwlist -server=/.kinmen.org.tw/127.0.0.1#5335 -ipset=/.kinmen.org.tw/gfwlist -server=/.kinmen.travel/127.0.0.1#5335 -ipset=/.kinmen.travel/gfwlist -server=/.kinokuniya.com/127.0.0.1#5335 -ipset=/.kinokuniya.com/gfwlist -server=/.kir.jp/127.0.0.1#5335 -ipset=/.kir.jp/gfwlist -server=/.kissbbao.cn/127.0.0.1#5335 -ipset=/.kissbbao.cn/gfwlist -server=/.kiwi.kz/127.0.0.1#5335 -ipset=/.kiwi.kz/gfwlist -server=/.kk-whys.co.jp/127.0.0.1#5335 -ipset=/.kk-whys.co.jp/gfwlist -server=/.kkbox.com/127.0.0.1#5335 -ipset=/.kkbox.com/gfwlist -server=/.kknews.cc/127.0.0.1#5335 -ipset=/.kknews.cc/gfwlist -server=/.kmuh.org.tw/127.0.0.1#5335 -ipset=/.kmuh.org.tw/gfwlist -server=/.kobo.com/127.0.0.1#5335 -ipset=/.kobo.com/gfwlist -server=/.kobobooks.com/127.0.0.1#5335 -ipset=/.kobobooks.com/gfwlist -server=/.kodingen.com/127.0.0.1#5335 -ipset=/.kodingen.com/gfwlist -server=/.kompozer.net/127.0.0.1#5335 -ipset=/.kompozer.net/gfwlist -server=/.konachan.com/127.0.0.1#5335 -ipset=/.konachan.com/gfwlist -server=/.kone.com/127.0.0.1#5335 -ipset=/.kone.com/gfwlist -server=/.koolsolutions.com/127.0.0.1#5335 -ipset=/.koolsolutions.com/gfwlist -server=/.koornk.com/127.0.0.1#5335 -ipset=/.koornk.com/gfwlist -server=/.koranmandarin.com/127.0.0.1#5335 -ipset=/.koranmandarin.com/gfwlist -server=/.korenan2.com/127.0.0.1#5335 -ipset=/.korenan2.com/gfwlist -server=/.ksdl.org/127.0.0.1#5335 -ipset=/.ksdl.org/gfwlist -server=/.ksnews.com.tw/127.0.0.1#5335 -ipset=/.ksnews.com.tw/gfwlist -server=/.kspcoin.com/127.0.0.1#5335 -ipset=/.kspcoin.com/gfwlist -server=/.ktzhk.com/127.0.0.1#5335 -ipset=/.ktzhk.com/gfwlist -server=/.kucoin.com/127.0.0.1#5335 -ipset=/.kucoin.com/gfwlist -server=/.kun.im/127.0.0.1#5335 -ipset=/.kun.im/gfwlist -server=/.kurashsultan.com/127.0.0.1#5335 -ipset=/.kurashsultan.com/gfwlist -server=/.kurtmunger.com/127.0.0.1#5335 -ipset=/.kurtmunger.com/gfwlist -server=/.kusocity.com/127.0.0.1#5335 -ipset=/.kusocity.com/gfwlist -server=/.kwcg.ca/127.0.0.1#5335 -ipset=/.kwcg.ca/gfwlist -server=/.kwongwah.com.my/127.0.0.1#5335 -ipset=/.kwongwah.com.my/gfwlist -server=/.kxsw.life/127.0.0.1#5335 -ipset=/.kxsw.life/gfwlist -server=/.kyofun.com/127.0.0.1#5335 -ipset=/.kyofun.com/gfwlist -server=/.kyohk.net/127.0.0.1#5335 -ipset=/.kyohk.net/gfwlist -server=/.kyoyue.com/127.0.0.1#5335 -ipset=/.kyoyue.com/gfwlist -server=/.kyzyhello.com/127.0.0.1#5335 -ipset=/.kyzyhello.com/gfwlist -server=/.kzeng.info/127.0.0.1#5335 -ipset=/.kzeng.info/gfwlist -server=/.la-forum.org/127.0.0.1#5335 -ipset=/.la-forum.org/gfwlist -server=/.labiennale.org/127.0.0.1#5335 -ipset=/.labiennale.org/gfwlist -server=/.ladbrokes.com/127.0.0.1#5335 -ipset=/.ladbrokes.com/gfwlist -server=/.lagranepoca.com/127.0.0.1#5335 -ipset=/.lagranepoca.com/gfwlist -server=/.lalulalu.com/127.0.0.1#5335 -ipset=/.lalulalu.com/gfwlist -server=/.lama.com.tw/127.0.0.1#5335 -ipset=/.lama.com.tw/gfwlist -server=/.lamayeshe.com/127.0.0.1#5335 -ipset=/.lamayeshe.com/gfwlist -server=/.lamnia.co.uk/127.0.0.1#5335 -ipset=/.lamnia.co.uk/gfwlist -server=/.lamrim.com/127.0.0.1#5335 -ipset=/.lamrim.com/gfwlist -server=/.lanterncn.cn/127.0.0.1#5335 -ipset=/.lanterncn.cn/gfwlist -server=/.lantosfoundation.org/127.0.0.1#5335 -ipset=/.lantosfoundation.org/gfwlist -server=/.laod.cn/127.0.0.1#5335 -ipset=/.laod.cn/gfwlist -server=/.laogai.org/127.0.0.1#5335 -ipset=/.laogai.org/gfwlist -server=/.laomiu.com/127.0.0.1#5335 -ipset=/.laomiu.com/gfwlist -server=/.laoyang.info/127.0.0.1#5335 -ipset=/.laoyang.info/gfwlist -server=/.laptoplockdown.com/127.0.0.1#5335 -ipset=/.laptoplockdown.com/gfwlist -server=/.laqingdan.net/127.0.0.1#5335 -ipset=/.laqingdan.net/gfwlist -server=/.larsgeorge.com/127.0.0.1#5335 -ipset=/.larsgeorge.com/gfwlist -server=/.lastcombat.com/127.0.0.1#5335 -ipset=/.lastcombat.com/gfwlist -server=/.lastfm.es/127.0.0.1#5335 -ipset=/.lastfm.es/gfwlist -server=/.latelinenews.com/127.0.0.1#5335 -ipset=/.latelinenews.com/gfwlist -server=/.latibet.org/127.0.0.1#5335 -ipset=/.latibet.org/gfwlist -server=/.lbank.info/127.0.0.1#5335 -ipset=/.lbank.info/gfwlist -server=/.ld.hao123img.com/127.0.0.1#5335 -ipset=/.ld.hao123img.com/gfwlist -server=/.le-vpn.com/127.0.0.1#5335 -ipset=/.le-vpn.com/gfwlist -server=/.leafyvpn.net/127.0.0.1#5335 -ipset=/.leafyvpn.net/gfwlist -server=/.lecloud.net/127.0.0.1#5335 -ipset=/.lecloud.net/gfwlist -server=/.lefora.com/127.0.0.1#5335 -ipset=/.lefora.com/gfwlist -server=/.left21.hk/127.0.0.1#5335 -ipset=/.left21.hk/gfwlist -server=/.legalporno.com/127.0.0.1#5335 -ipset=/.legalporno.com/gfwlist -server=/.legaltech.law.com/127.0.0.1#5335 -ipset=/.legaltech.law.com/gfwlist -server=/.legsjapan.com/127.0.0.1#5335 -ipset=/.legsjapan.com/gfwlist -server=/.leirentv.ca/127.0.0.1#5335 -ipset=/.leirentv.ca/gfwlist -server=/.leisurecafe.ca/127.0.0.1#5335 -ipset=/.leisurecafe.ca/gfwlist -server=/.leisurepro.com/127.0.0.1#5335 -ipset=/.leisurepro.com/gfwlist -server=/.lematin.ch/127.0.0.1#5335 -ipset=/.lematin.ch/gfwlist -server=/.lemonde.fr/127.0.0.1#5335 -ipset=/.lemonde.fr/gfwlist -server=/.lenwhite.com/127.0.0.1#5335 -ipset=/.lenwhite.com/gfwlist -server=/.lerosua.org/127.0.0.1#5335 -ipset=/.lerosua.org/gfwlist -server=/.lers.google/127.0.0.1#5335 -ipset=/.lers.google/gfwlist -server=/.lesoir.be/127.0.0.1#5335 -ipset=/.lesoir.be/gfwlist -server=/.letou.com/127.0.0.1#5335 -ipset=/.letou.com/gfwlist -server=/.letscorp.net/127.0.0.1#5335 -ipset=/.letscorp.net/gfwlist -server=/.lflink.com/127.0.0.1#5335 -ipset=/.lflink.com/gfwlist -server=/.lflinkup.com/127.0.0.1#5335 -ipset=/.lflinkup.com/gfwlist -server=/.lflinkup.net/127.0.0.1#5335 -ipset=/.lflinkup.net/gfwlist -server=/.lflinkup.org/127.0.0.1#5335 -ipset=/.lflinkup.org/gfwlist -server=/.lhakar.org/127.0.0.1#5335 -ipset=/.lhakar.org/gfwlist -server=/.lhasocialwork.org/127.0.0.1#5335 -ipset=/.lhasocialwork.org/gfwlist -server=/.liangyou.net/127.0.0.1#5335 -ipset=/.liangyou.net/gfwlist -server=/.liangzhichuanmei.com/127.0.0.1#5335 -ipset=/.liangzhichuanmei.com/gfwlist -server=/.lianyue.net/127.0.0.1#5335 -ipset=/.lianyue.net/gfwlist -server=/.liaowangxizang.net/127.0.0.1#5335 -ipset=/.liaowangxizang.net/gfwlist -server=/.liberal.org.hk/127.0.0.1#5335 -ipset=/.liberal.org.hk/gfwlist -server=/.libertytimes.com.tw/127.0.0.1#5335 -ipset=/.libertytimes.com.tw/gfwlist -server=/.lifemiles.com/127.0.0.1#5335 -ipset=/.lifemiles.com/gfwlist -server=/.lighten.org.tw/127.0.0.1#5335 -ipset=/.lighten.org.tw/gfwlist -server=/.lighti.me/127.0.0.1#5335 -ipset=/.lighti.me/gfwlist -server=/.lightnovel.cn/127.0.0.1#5335 -ipset=/.lightnovel.cn/gfwlist -server=/.lightyearvpn.com/127.0.0.1#5335 -ipset=/.lightyearvpn.com/gfwlist -server=/.lihkg.com/127.0.0.1#5335 -ipset=/.lihkg.com/gfwlist -server=/.like.com/127.0.0.1#5335 -ipset=/.like.com/gfwlist -server=/.limiao.net/127.0.0.1#5335 -ipset=/.limiao.net/gfwlist -server=/.line-apps.com/127.0.0.1#5335 -ipset=/.line-apps.com/gfwlist -server=/.line-scdn.net/127.0.0.1#5335 -ipset=/.line-scdn.net/gfwlist -server=/.line.me/127.0.0.1#5335 -ipset=/.line.me/gfwlist -server=/.line.naver.jp/127.0.0.1#5335 -ipset=/.line.naver.jp/gfwlist -server=/.linear-abematv.akamaized.net/127.0.0.1#5335 -ipset=/.linear-abematv.akamaized.net/gfwlist -server=/.linglingfa.com/127.0.0.1#5335 -ipset=/.linglingfa.com/gfwlist -server=/.lingvodics.com/127.0.0.1#5335 -ipset=/.lingvodics.com/gfwlist -server=/.link-o-rama.com/127.0.0.1#5335 -ipset=/.link-o-rama.com/gfwlist -server=/.linkideo.com/127.0.0.1#5335 -ipset=/.linkideo.com/gfwlist -server=/.linkuswell.com/127.0.0.1#5335 -ipset=/.linkuswell.com/gfwlist -server=/.linux.org.hk/127.0.0.1#5335 -ipset=/.linux.org.hk/gfwlist -server=/.lionsroar.com/127.0.0.1#5335 -ipset=/.lionsroar.com/gfwlist -server=/.lipuman.com/127.0.0.1#5335 -ipset=/.lipuman.com/gfwlist -server=/.liquidvpn.com/127.0.0.1#5335 -ipset=/.liquidvpn.com/gfwlist -server=/.listentoyoutube.com/127.0.0.1#5335 -ipset=/.listentoyoutube.com/gfwlist -server=/.listorious.com/127.0.0.1#5335 -ipset=/.listorious.com/gfwlist -server=/.liu-xiaobo.org/127.0.0.1#5335 -ipset=/.liu-xiaobo.org/gfwlist -server=/.liudejun.com/127.0.0.1#5335 -ipset=/.liudejun.com/gfwlist -server=/.liuhanyu.com/127.0.0.1#5335 -ipset=/.liuhanyu.com/gfwlist -server=/.liujianshu.com/127.0.0.1#5335 -ipset=/.liujianshu.com/gfwlist -server=/.liuxiaobo.net/127.0.0.1#5335 -ipset=/.liuxiaobo.net/gfwlist -server=/.liuxiaotong.com/127.0.0.1#5335 -ipset=/.liuxiaotong.com/gfwlist -server=/.livecoin.net/127.0.0.1#5335 -ipset=/.livecoin.net/gfwlist -server=/.livedoor.jp/127.0.0.1#5335 -ipset=/.livedoor.jp/gfwlist -server=/.liveleak.com/127.0.0.1#5335 -ipset=/.liveleak.com/gfwlist -server=/.livestation.com/127.0.0.1#5335 -ipset=/.livestation.com/gfwlist -server=/.livestream.com/127.0.0.1#5335 -ipset=/.livestream.com/gfwlist -server=/.livevideo.com/127.0.0.1#5335 -ipset=/.livevideo.com/gfwlist -server=/.livingonline.us/127.0.0.1#5335 -ipset=/.livingonline.us/gfwlist -server=/.livingstream.com/127.0.0.1#5335 -ipset=/.livingstream.com/gfwlist -server=/.liwangyang.com/127.0.0.1#5335 -ipset=/.liwangyang.com/gfwlist -server=/.lizhizhuangbi.com/127.0.0.1#5335 -ipset=/.lizhizhuangbi.com/gfwlist -server=/.lkcn.net/127.0.0.1#5335 -ipset=/.lkcn.net/gfwlist -server=/.load.to/127.0.0.1#5335 -ipset=/.load.to/gfwlist -server=/.lobsangwangyal.com/127.0.0.1#5335 -ipset=/.lobsangwangyal.com/gfwlist -server=/.localbitcoins.com/127.0.0.1#5335 -ipset=/.localbitcoins.com/gfwlist -server=/.localdomain.ws/127.0.0.1#5335 -ipset=/.localdomain.ws/gfwlist -server=/.localpresshk.com/127.0.0.1#5335 -ipset=/.localpresshk.com/gfwlist -server=/.lockestek.com/127.0.0.1#5335 -ipset=/.lockestek.com/gfwlist -server=/.logbot.net/127.0.0.1#5335 -ipset=/.logbot.net/gfwlist -server=/.login.target.com/127.0.0.1#5335 -ipset=/.login.target.com/gfwlist -server=/.logiqx.com/127.0.0.1#5335 -ipset=/.logiqx.com/gfwlist -server=/.londonchinese.ca/127.0.0.1#5335 -ipset=/.londonchinese.ca/gfwlist -server=/.longhair.hk/127.0.0.1#5335 -ipset=/.longhair.hk/gfwlist -server=/.longmusic.com/127.0.0.1#5335 -ipset=/.longmusic.com/gfwlist -server=/.longtermly.net/127.0.0.1#5335 -ipset=/.longtermly.net/gfwlist -server=/.longtoes.com/127.0.0.1#5335 -ipset=/.longtoes.com/gfwlist -server=/.lookpic.com/127.0.0.1#5335 -ipset=/.lookpic.com/gfwlist -server=/.looktoronto.com/127.0.0.1#5335 -ipset=/.looktoronto.com/gfwlist -server=/.lotuslight.org.hk/127.0.0.1#5335 -ipset=/.lotuslight.org.hk/gfwlist -server=/.lotuslight.org.tw/127.0.0.1#5335 -ipset=/.lotuslight.org.tw/gfwlist -server=/.lovetvshow.com/127.0.0.1#5335 -ipset=/.lovetvshow.com/gfwlist -server=/.lpsg.com/127.0.0.1#5335 -ipset=/.lpsg.com/gfwlist -server=/.lrfz.com/127.0.0.1#5335 -ipset=/.lrfz.com/gfwlist -server=/.lrip.org/127.0.0.1#5335 -ipset=/.lrip.org/gfwlist -server=/.lsd.org.hk/127.0.0.1#5335 -ipset=/.lsd.org.hk/gfwlist -server=/.lsforum.net/127.0.0.1#5335 -ipset=/.lsforum.net/gfwlist -server=/.lsm.org/127.0.0.1#5335 -ipset=/.lsm.org/gfwlist -server=/.lsmchinese.org/127.0.0.1#5335 -ipset=/.lsmchinese.org/gfwlist -server=/.lsmkorean.org/127.0.0.1#5335 -ipset=/.lsmkorean.org/gfwlist -server=/.lsmwebcast.com/127.0.0.1#5335 -ipset=/.lsmwebcast.com/gfwlist -server=/.lsxszzg.com/127.0.0.1#5335 -ipset=/.lsxszzg.com/gfwlist -server=/.ltn.com.tw/127.0.0.1#5335 -ipset=/.ltn.com.tw/gfwlist -server=/.luke54.com/127.0.0.1#5335 -ipset=/.luke54.com/gfwlist -server=/.luke54.org/127.0.0.1#5335 -ipset=/.luke54.org/gfwlist -server=/.lupm.org/127.0.0.1#5335 -ipset=/.lupm.org/gfwlist -server=/.lushstories.com/127.0.0.1#5335 -ipset=/.lushstories.com/gfwlist -server=/.luxebc.com/127.0.0.1#5335 -ipset=/.luxebc.com/gfwlist -server=/.lvhai.org/127.0.0.1#5335 -ipset=/.lvhai.org/gfwlist -server=/.lvv2.com/127.0.0.1#5335 -ipset=/.lvv2.com/gfwlist -server=/.lyfhk.net/127.0.0.1#5335 -ipset=/.lyfhk.net/gfwlist -server=/.lzmtnews.org/127.0.0.1#5335 -ipset=/.lzmtnews.org/gfwlist -server=/.m.hkgalden.com/127.0.0.1#5335 -ipset=/.m.hkgalden.com/gfwlist -server=/.m.me/127.0.0.1#5335 -ipset=/.m.me/gfwlist -server=/.m.plixi.com/127.0.0.1#5335 -ipset=/.m.plixi.com/gfwlist -server=/.m.slandr.net/127.0.0.1#5335 -ipset=/.m.slandr.net/gfwlist -server=/.ma.hao123.com/127.0.0.1#5335 -ipset=/.ma.hao123.com/gfwlist -server=/.macgamestore.com/127.0.0.1#5335 -ipset=/.macgamestore.com/gfwlist -server=/.macrovpn.com/127.0.0.1#5335 -ipset=/.macrovpn.com/gfwlist -server=/.macts.com.tw/127.0.0.1#5335 -ipset=/.macts.com.tw/gfwlist -server=/.mad-ar.ch/127.0.0.1#5335 -ipset=/.mad-ar.ch/gfwlist -server=/.madewithcode.com/127.0.0.1#5335 -ipset=/.madewithcode.com/gfwlist -server=/.madonna-av.com/127.0.0.1#5335 -ipset=/.madonna-av.com/gfwlist -server=/.madrau.com/127.0.0.1#5335 -ipset=/.madrau.com/gfwlist -server=/.madthumbs.com/127.0.0.1#5335 -ipset=/.madthumbs.com/gfwlist -server=/.magazines.sina.com.tw/127.0.0.1#5335 -ipset=/.magazines.sina.com.tw/gfwlist -server=/.magic-net.info/127.0.0.1#5335 -ipset=/.magic-net.info/gfwlist -server=/.mahabodhi.org/127.0.0.1#5335 -ipset=/.mahabodhi.org/gfwlist -server=/.maiio.net/127.0.0.1#5335 -ipset=/.maiio.net/gfwlist -server=/.mail-archive.com/127.0.0.1#5335 -ipset=/.mail-archive.com/gfwlist -server=/.maildns.xyz/127.0.0.1#5335 -ipset=/.maildns.xyz/gfwlist -server=/.maiplus.com/127.0.0.1#5335 -ipset=/.maiplus.com/gfwlist -server=/.maizhong.org/127.0.0.1#5335 -ipset=/.maizhong.org/gfwlist -server=/.makemymood.com/127.0.0.1#5335 -ipset=/.makemymood.com/gfwlist -server=/.makkahnewspaper.com/127.0.0.1#5335 -ipset=/.makkahnewspaper.com/gfwlist -server=/.makzhou.warehouse333.com/127.0.0.1#5335 -ipset=/.makzhou.warehouse333.com/gfwlist -server=/.malaysiakini.com/127.0.0.1#5335 -ipset=/.malaysiakini.com/gfwlist -server=/.mamingzhe.com/127.0.0.1#5335 -ipset=/.mamingzhe.com/gfwlist -server=/.manchukuo.net/127.0.0.1#5335 -ipset=/.manchukuo.net/gfwlist -server=/.mangafox.com/127.0.0.1#5335 -ipset=/.mangafox.com/gfwlist -server=/.mangafox.me/127.0.0.1#5335 -ipset=/.mangafox.me/gfwlist -server=/.maniash.com/127.0.0.1#5335 -ipset=/.maniash.com/gfwlist -server=/.manicur4ik.ru/127.0.0.1#5335 -ipset=/.manicur4ik.ru/gfwlist -server=/.mansion.com/127.0.0.1#5335 -ipset=/.mansion.com/gfwlist -server=/.mansionpoker.com/127.0.0.1#5335 -ipset=/.mansionpoker.com/gfwlist -server=/.manta.com/127.0.0.1#5335 -ipset=/.manta.com/gfwlist -server=/.maplew.com/127.0.0.1#5335 -ipset=/.maplew.com/gfwlist -server=/.marc.info/127.0.0.1#5335 -ipset=/.marc.info/gfwlist -server=/.marguerite.su/127.0.0.1#5335 -ipset=/.marguerite.su/gfwlist -server=/.martau.com/127.0.0.1#5335 -ipset=/.martau.com/gfwlist -server=/.martincartoons.com/127.0.0.1#5335 -ipset=/.martincartoons.com/gfwlist -server=/.martsangkagyuofficial.org/127.0.0.1#5335 -ipset=/.martsangkagyuofficial.org/gfwlist -server=/.marxist.com/127.0.0.1#5335 -ipset=/.marxist.com/gfwlist -server=/.marxist.net/127.0.0.1#5335 -ipset=/.marxist.net/gfwlist -server=/.mash.to/127.0.0.1#5335 -ipset=/.mash.to/gfwlist -server=/.maskedip.com/127.0.0.1#5335 -ipset=/.maskedip.com/gfwlist -server=/.mastodon.cloud/127.0.0.1#5335 -ipset=/.mastodon.cloud/gfwlist -server=/.mastodon.host/127.0.0.1#5335 -ipset=/.mastodon.host/gfwlist -server=/.mastodon.social/127.0.0.1#5335 -ipset=/.mastodon.social/gfwlist -server=/.matainja.com/127.0.0.1#5335 -ipset=/.matainja.com/gfwlist -server=/.material.io/127.0.0.1#5335 -ipset=/.material.io/gfwlist -server=/.mathable.io/127.0.0.1#5335 -ipset=/.mathable.io/gfwlist -server=/.mathiew-badimon.com/127.0.0.1#5335 -ipset=/.mathiew-badimon.com/gfwlist -server=/.matome-plus.com/127.0.0.1#5335 -ipset=/.matome-plus.com/gfwlist -server=/.matome-plus.net/127.0.0.1#5335 -ipset=/.matome-plus.net/gfwlist -server=/.matsushimakaede.com/127.0.0.1#5335 -ipset=/.matsushimakaede.com/gfwlist -server=/.matters.news/127.0.0.1#5335 -ipset=/.matters.news/gfwlist -server=/.mattwilcox.net/127.0.0.1#5335 -ipset=/.mattwilcox.net/gfwlist -server=/.maturejp.com/127.0.0.1#5335 -ipset=/.maturejp.com/gfwlist -server=/.maxing.jp/127.0.0.1#5335 -ipset=/.maxing.jp/gfwlist -server=/.mayimayi.com/127.0.0.1#5335 -ipset=/.mayimayi.com/gfwlist -server=/.mcadforums.com/127.0.0.1#5335 -ipset=/.mcadforums.com/gfwlist -server=/.mcaf.ee/127.0.0.1#5335 -ipset=/.mcaf.ee/gfwlist -server=/.mcfog.com/127.0.0.1#5335 -ipset=/.mcfog.com/gfwlist -server=/.mcreasite.com/127.0.0.1#5335 -ipset=/.mcreasite.com/gfwlist -server=/.md-t.org/127.0.0.1#5335 -ipset=/.md-t.org/gfwlist -server=/.me.me/127.0.0.1#5335 -ipset=/.me.me/gfwlist -server=/.me.youthwant.com.tw/127.0.0.1#5335 -ipset=/.me.youthwant.com.tw/gfwlist -server=/.meansys.com/127.0.0.1#5335 -ipset=/.meansys.com/gfwlist -server=/.media.nu.nl/127.0.0.1#5335 -ipset=/.media.nu.nl/gfwlist -server=/.media.org.hk/127.0.0.1#5335 -ipset=/.media.org.hk/gfwlist -server=/.mediachinese.com/127.0.0.1#5335 -ipset=/.mediachinese.com/gfwlist -server=/.mediafreakcity.com/127.0.0.1#5335 -ipset=/.mediafreakcity.com/gfwlist -server=/.medium.com/127.0.0.1#5335 -ipset=/.medium.com/gfwlist -server=/.meetav.com/127.0.0.1#5335 -ipset=/.meetav.com/gfwlist -server=/.meetup.com/127.0.0.1#5335 -ipset=/.meetup.com/gfwlist -server=/.mefeedia.com/127.0.0.1#5335 -ipset=/.mefeedia.com/gfwlist -server=/.mefound.com/127.0.0.1#5335 -ipset=/.mefound.com/gfwlist -server=/.mega.nz/127.0.0.1#5335 -ipset=/.mega.nz/gfwlist -server=/.megaproxy.com/127.0.0.1#5335 -ipset=/.megaproxy.com/gfwlist -server=/.megarotic.com/127.0.0.1#5335 -ipset=/.megarotic.com/gfwlist -server=/.megavideo.com/127.0.0.1#5335 -ipset=/.megavideo.com/gfwlist -server=/.megurineluka.com/127.0.0.1#5335 -ipset=/.megurineluka.com/gfwlist -server=/.meirixiaochao.com/127.0.0.1#5335 -ipset=/.meirixiaochao.com/gfwlist -server=/.meltoday.com/127.0.0.1#5335 -ipset=/.meltoday.com/gfwlist -server=/.meme.yahoo.com/127.0.0.1#5335 -ipset=/.meme.yahoo.com/gfwlist -server=/.memehk.com/127.0.0.1#5335 -ipset=/.memehk.com/gfwlist -server=/.memorybbs.com/127.0.0.1#5335 -ipset=/.memorybbs.com/gfwlist -server=/.memri.org/127.0.0.1#5335 -ipset=/.memri.org/gfwlist -server=/.memrijttm.org/127.0.0.1#5335 -ipset=/.memrijttm.org/gfwlist -server=/.mercatox.com/127.0.0.1#5335 -ipset=/.mercatox.com/gfwlist -server=/.mercyprophet.org/127.0.0.1#5335 -ipset=/.mercyprophet.org/gfwlist -server=/.mergersandinquisitions.org/127.0.0.1#5335 -ipset=/.mergersandinquisitions.org/gfwlist -server=/.meridian-trust.org/127.0.0.1#5335 -ipset=/.meridian-trust.org/gfwlist -server=/.meripet.biz/127.0.0.1#5335 -ipset=/.meripet.biz/gfwlist -server=/.meripet.com/127.0.0.1#5335 -ipset=/.meripet.com/gfwlist -server=/.merit-times.com.tw/127.0.0.1#5335 -ipset=/.merit-times.com.tw/gfwlist -server=/.meshrep.com/127.0.0.1#5335 -ipset=/.meshrep.com/gfwlist -server=/.messenger.com/127.0.0.1#5335 -ipset=/.messenger.com/gfwlist -server=/.metart.com/127.0.0.1#5335 -ipset=/.metart.com/gfwlist -server=/.metarthunter.com/127.0.0.1#5335 -ipset=/.metarthunter.com/gfwlist -server=/.meteorshowersonline.com/127.0.0.1#5335 -ipset=/.meteorshowersonline.com/gfwlist -server=/.metrolife.ca/127.0.0.1#5335 -ipset=/.metrolife.ca/gfwlist -server=/.metroradio.com.hk/127.0.0.1#5335 -ipset=/.metroradio.com.hk/gfwlist -server=/.meyou.jp/127.0.0.1#5335 -ipset=/.meyou.jp/gfwlist -server=/.meyul.com/127.0.0.1#5335 -ipset=/.meyul.com/gfwlist -server=/.mfxmedia.com/127.0.0.1#5335 -ipset=/.mfxmedia.com/gfwlist -server=/.mgoon.com/127.0.0.1#5335 -ipset=/.mgoon.com/gfwlist -server=/.mgstage.com/127.0.0.1#5335 -ipset=/.mgstage.com/gfwlist -server=/.mh4u.org/127.0.0.1#5335 -ipset=/.mh4u.org/gfwlist -server=/.mhradio.org/127.0.0.1#5335 -ipset=/.mhradio.org/gfwlist -server=/.michaelanti.com/127.0.0.1#5335 -ipset=/.michaelanti.com/gfwlist -server=/.michaelmarketl.com/127.0.0.1#5335 -ipset=/.michaelmarketl.com/gfwlist -server=/.microvpn.com/127.0.0.1#5335 -ipset=/.microvpn.com/gfwlist -server=/.middle-way.net/127.0.0.1#5335 -ipset=/.middle-way.net/gfwlist -server=/.mihr.com/127.0.0.1#5335 -ipset=/.mihr.com/gfwlist -server=/.mihua.org/127.0.0.1#5335 -ipset=/.mihua.org/gfwlist -server=/.mike.cz.cc/127.0.0.1#5335 -ipset=/.mike.cz.cc/gfwlist -server=/.mikesoltys.com/127.0.0.1#5335 -ipset=/.mikesoltys.com/gfwlist -server=/.milph.net/127.0.0.1#5335 -ipset=/.milph.net/gfwlist -server=/.milsurps.com/127.0.0.1#5335 -ipset=/.milsurps.com/gfwlist -server=/.mimiai.net/127.0.0.1#5335 -ipset=/.mimiai.net/gfwlist -server=/.mimivip.com/127.0.0.1#5335 -ipset=/.mimivip.com/gfwlist -server=/.mimivv.com/127.0.0.1#5335 -ipset=/.mimivv.com/gfwlist -server=/.mindrolling.org/127.0.0.1#5335 -ipset=/.mindrolling.org/gfwlist -server=/.mingdemedia.org/127.0.0.1#5335 -ipset=/.mingdemedia.org/gfwlist -server=/.minghui-a.org/127.0.0.1#5335 -ipset=/.minghui-a.org/gfwlist -server=/.minghui-b.org/127.0.0.1#5335 -ipset=/.minghui-b.org/gfwlist -server=/.minghui-school.org/127.0.0.1#5335 -ipset=/.minghui-school.org/gfwlist -server=/.minghui.or.kr/127.0.0.1#5335 -ipset=/.minghui.or.kr/gfwlist -server=/.minghui.org/127.0.0.1#5335 -ipset=/.minghui.org/gfwlist -server=/.minghuiyw.wordpress.com/127.0.0.1#5335 -ipset=/.minghuiyw.wordpress.com/gfwlist -server=/.mingjinglishi.com/127.0.0.1#5335 -ipset=/.mingjinglishi.com/gfwlist -server=/.mingjingnews.com/127.0.0.1#5335 -ipset=/.mingjingnews.com/gfwlist -server=/.mingjingtimes.com/127.0.0.1#5335 -ipset=/.mingjingtimes.com/gfwlist -server=/.mingpao.com/127.0.0.1#5335 -ipset=/.mingpao.com/gfwlist -server=/.mingpaocanada.com/127.0.0.1#5335 -ipset=/.mingpaocanada.com/gfwlist -server=/.mingpaomonthly.com/127.0.0.1#5335 -ipset=/.mingpaomonthly.com/gfwlist -server=/.mingpaonews.com/127.0.0.1#5335 -ipset=/.mingpaonews.com/gfwlist -server=/.mingpaony.com/127.0.0.1#5335 -ipset=/.mingpaony.com/gfwlist -server=/.mingpaosf.com/127.0.0.1#5335 -ipset=/.mingpaosf.com/gfwlist -server=/.mingpaotor.com/127.0.0.1#5335 -ipset=/.mingpaotor.com/gfwlist -server=/.mingpaovan.com/127.0.0.1#5335 -ipset=/.mingpaovan.com/gfwlist -server=/.mingshengbao.com/127.0.0.1#5335 -ipset=/.mingshengbao.com/gfwlist -server=/.minhhue.net/127.0.0.1#5335 -ipset=/.minhhue.net/gfwlist -server=/.miniforum.org/127.0.0.1#5335 -ipset=/.miniforum.org/gfwlist -server=/.ministrybooks.org/127.0.0.1#5335 -ipset=/.ministrybooks.org/gfwlist -server=/.minzhuhua.net/127.0.0.1#5335 -ipset=/.minzhuhua.net/gfwlist -server=/.minzhuzhanxian.com/127.0.0.1#5335 -ipset=/.minzhuzhanxian.com/gfwlist -server=/.minzhuzhongguo.org/127.0.0.1#5335 -ipset=/.minzhuzhongguo.org/gfwlist -server=/.miroguide.com/127.0.0.1#5335 -ipset=/.miroguide.com/gfwlist -server=/.mirrorbooks.com/127.0.0.1#5335 -ipset=/.mirrorbooks.com/gfwlist -server=/.mist.vip/127.0.0.1#5335 -ipset=/.mist.vip/gfwlist -server=/.mitao.com.tw/127.0.0.1#5335 -ipset=/.mitao.com.tw/gfwlist -server=/.mitbbs.com/127.0.0.1#5335 -ipset=/.mitbbs.com/gfwlist -server=/.mitbbsau.com/127.0.0.1#5335 -ipset=/.mitbbsau.com/gfwlist -server=/.mixero.com/127.0.0.1#5335 -ipset=/.mixero.com/gfwlist -server=/.mixpod.com/127.0.0.1#5335 -ipset=/.mixpod.com/gfwlist -server=/.mixx.com/127.0.0.1#5335 -ipset=/.mixx.com/gfwlist -server=/.mizzmona.com/127.0.0.1#5335 -ipset=/.mizzmona.com/gfwlist -server=/.mjib.gov.tw/127.0.0.1#5335 -ipset=/.mjib.gov.tw/gfwlist -server=/.mk5000.com/127.0.0.1#5335 -ipset=/.mk5000.com/gfwlist -server=/.mlcool.com/127.0.0.1#5335 -ipset=/.mlcool.com/gfwlist -server=/.mlzs.work/127.0.0.1#5335 -ipset=/.mlzs.work/gfwlist -server=/.mm-cg.com/127.0.0.1#5335 -ipset=/.mm-cg.com/gfwlist -server=/.mmaaxx.com/127.0.0.1#5335 -ipset=/.mmaaxx.com/gfwlist -server=/.mmmca.com/127.0.0.1#5335 -ipset=/.mmmca.com/gfwlist -server=/.mnewstv.com/127.0.0.1#5335 -ipset=/.mnewstv.com/gfwlist -server=/.mo.nightlife141.com/127.0.0.1#5335 -ipset=/.mo.nightlife141.com/gfwlist -server=/.mobatek.net/127.0.0.1#5335 -ipset=/.mobatek.net/gfwlist -server=/.mobile01.com/127.0.0.1#5335 -ipset=/.mobile01.com/gfwlist -server=/.mobileways.de/127.0.0.1#5335 -ipset=/.mobileways.de/gfwlist -server=/.moby.to/127.0.0.1#5335 -ipset=/.moby.to/gfwlist -server=/.mobypicture.com/127.0.0.1#5335 -ipset=/.mobypicture.com/gfwlist -server=/.moeaic.gov.tw/127.0.0.1#5335 -ipset=/.moeaic.gov.tw/gfwlist -server=/.moeerolibrary.com/127.0.0.1#5335 -ipset=/.moeerolibrary.com/gfwlist -server=/.mofa.gov.tw/127.0.0.1#5335 -ipset=/.mofa.gov.tw/gfwlist -server=/.mofaxiehui.com/127.0.0.1#5335 -ipset=/.mofaxiehui.com/gfwlist -server=/.mofos.com/127.0.0.1#5335 -ipset=/.mofos.com/gfwlist -server=/.mog.com/127.0.0.1#5335 -ipset=/.mog.com/gfwlist -server=/.mohu.club/127.0.0.1#5335 -ipset=/.mohu.club/gfwlist -server=/.mohu.ml/127.0.0.1#5335 -ipset=/.mohu.ml/gfwlist -server=/.mojim.com/127.0.0.1#5335 -ipset=/.mojim.com/gfwlist -server=/.mol.gov.tw/127.0.0.1#5335 -ipset=/.mol.gov.tw/gfwlist -server=/.molihua.org/127.0.0.1#5335 -ipset=/.molihua.org/gfwlist -server=/.mondex.org/127.0.0.1#5335 -ipset=/.mondex.org/gfwlist -server=/.money-link.com.tw/127.0.0.1#5335 -ipset=/.money-link.com.tw/gfwlist -server=/.moneyhome.biz/127.0.0.1#5335 -ipset=/.moneyhome.biz/gfwlist -server=/.monitorchina.org/127.0.0.1#5335 -ipset=/.monitorchina.org/gfwlist -server=/.monster.com/127.0.0.1#5335 -ipset=/.monster.com/gfwlist -server=/.moodyz.com/127.0.0.1#5335 -ipset=/.moodyz.com/gfwlist -server=/.moonbbs.com/127.0.0.1#5335 -ipset=/.moonbbs.com/gfwlist -server=/.moonbingo.com/127.0.0.1#5335 -ipset=/.moonbingo.com/gfwlist -server=/.morningsun.org/127.0.0.1#5335 -ipset=/.morningsun.org/gfwlist -server=/.moroneta.com/127.0.0.1#5335 -ipset=/.moroneta.com/gfwlist -server=/.mos.ru/127.0.0.1#5335 -ipset=/.mos.ru/gfwlist -server=/.motherless.com/127.0.0.1#5335 -ipset=/.motherless.com/gfwlist -server=/.motiyun.com/127.0.0.1#5335 -ipset=/.motiyun.com/gfwlist -server=/.motor4ik.ru/127.0.0.1#5335 -ipset=/.motor4ik.ru/gfwlist -server=/.mousebreaker.com/127.0.0.1#5335 -ipset=/.mousebreaker.com/gfwlist -server=/.movements.org/127.0.0.1#5335 -ipset=/.movements.org/gfwlist -server=/.moviefap.com/127.0.0.1#5335 -ipset=/.moviefap.com/gfwlist -server=/.mp3buscador.com/127.0.0.1#5335 -ipset=/.mp3buscador.com/gfwlist -server=/.mp3ye.eu/127.0.0.1#5335 -ipset=/.mp3ye.eu/gfwlist -server=/.mpettis.com/127.0.0.1#5335 -ipset=/.mpettis.com/gfwlist -server=/.mpfinance.com/127.0.0.1#5335 -ipset=/.mpfinance.com/gfwlist -server=/.mpinews.com/127.0.0.1#5335 -ipset=/.mpinews.com/gfwlist -server=/.mponline.hk/127.0.0.1#5335 -ipset=/.mponline.hk/gfwlist -server=/.mqxd.org/127.0.0.1#5335 -ipset=/.mqxd.org/gfwlist -server=/.mrbasic.com/127.0.0.1#5335 -ipset=/.mrbasic.com/gfwlist -server=/.mrbonus.com/127.0.0.1#5335 -ipset=/.mrbonus.com/gfwlist -server=/.mrface.com/127.0.0.1#5335 -ipset=/.mrface.com/gfwlist -server=/.mrslove.com/127.0.0.1#5335 -ipset=/.mrslove.com/gfwlist -server=/.mrtweet.com/127.0.0.1#5335 -ipset=/.mrtweet.com/gfwlist -server=/.msa-it.org/127.0.0.1#5335 -ipset=/.msa-it.org/gfwlist -server=/.msguancha.com/127.0.0.1#5335 -ipset=/.msguancha.com/gfwlist -server=/.msha.gov/127.0.0.1#5335 -ipset=/.msha.gov/gfwlist -server=/.mswe1.org/127.0.0.1#5335 -ipset=/.mswe1.org/gfwlist -server=/.mthruf.com/127.0.0.1#5335 -ipset=/.mthruf.com/gfwlist -server=/.mtw.tl/127.0.0.1#5335 -ipset=/.mtw.tl/gfwlist -server=/.mubi.com/127.0.0.1#5335 -ipset=/.mubi.com/gfwlist -server=/.muchosucko.com/127.0.0.1#5335 -ipset=/.muchosucko.com/gfwlist -server=/.mullvad.net/127.0.0.1#5335 -ipset=/.mullvad.net/gfwlist -server=/.multiply.com/127.0.0.1#5335 -ipset=/.multiply.com/gfwlist -server=/.multiproxy.org/127.0.0.1#5335 -ipset=/.multiproxy.org/gfwlist -server=/.multiupload.com/127.0.0.1#5335 -ipset=/.multiupload.com/gfwlist -server=/.mummysgold.com/127.0.0.1#5335 -ipset=/.mummysgold.com/gfwlist -server=/.murmur.tw/127.0.0.1#5335 -ipset=/.murmur.tw/gfwlist -server=/.musicade.net/127.0.0.1#5335 -ipset=/.musicade.net/gfwlist -server=/.muslimvideo.com/127.0.0.1#5335 -ipset=/.muslimvideo.com/gfwlist -server=/.muzi.com/127.0.0.1#5335 -ipset=/.muzi.com/gfwlist -server=/.muzi.net/127.0.0.1#5335 -ipset=/.muzi.net/gfwlist -server=/.muzu.tv/127.0.0.1#5335 -ipset=/.muzu.tv/gfwlist -server=/.mvdis.gov.tw/127.0.0.1#5335 -ipset=/.mvdis.gov.tw/gfwlist -server=/.mvg.jp/127.0.0.1#5335 -ipset=/.mvg.jp/gfwlist -server=/.mx.hao123.com/127.0.0.1#5335 -ipset=/.mx.hao123.com/gfwlist -server=/.mx981.com/127.0.0.1#5335 -ipset=/.mx981.com/gfwlist -server=/.my-formosa.com/127.0.0.1#5335 -ipset=/.my-formosa.com/gfwlist -server=/.my-private-network.co.uk/127.0.0.1#5335 -ipset=/.my-private-network.co.uk/gfwlist -server=/.my-proxy.com/127.0.0.1#5335 -ipset=/.my-proxy.com/gfwlist -server=/.my.mail.ru/127.0.0.1#5335 -ipset=/.my.mail.ru/gfwlist -server=/.my.pcloud.com/127.0.0.1#5335 -ipset=/.my.pcloud.com/gfwlist -server=/.my03.com/127.0.0.1#5335 -ipset=/.my03.com/gfwlist -server=/.myanniu.com/127.0.0.1#5335 -ipset=/.myanniu.com/gfwlist -server=/.myaudiocast.com/127.0.0.1#5335 -ipset=/.myaudiocast.com/gfwlist -server=/.mybbs.us/127.0.0.1#5335 -ipset=/.mybbs.us/gfwlist -server=/.mybet.com/127.0.0.1#5335 -ipset=/.mybet.com/gfwlist -server=/.myca168.com/127.0.0.1#5335 -ipset=/.myca168.com/gfwlist -server=/.mycanadanow.com/127.0.0.1#5335 -ipset=/.mycanadanow.com/gfwlist -server=/.mychinamyhome.com/127.0.0.1#5335 -ipset=/.mychinamyhome.com/gfwlist -server=/.mychinanet.com/127.0.0.1#5335 -ipset=/.mychinanet.com/gfwlist -server=/.mychinanews.com/127.0.0.1#5335 -ipset=/.mychinanews.com/gfwlist -server=/.mychinese.news/127.0.0.1#5335 -ipset=/.mychinese.news/gfwlist -server=/.mycnnews.com/127.0.0.1#5335 -ipset=/.mycnnews.com/gfwlist -server=/.mydad.info/127.0.0.1#5335 -ipset=/.mydad.info/gfwlist -server=/.myddns.com/127.0.0.1#5335 -ipset=/.myddns.com/gfwlist -server=/.myeasytv.com/127.0.0.1#5335 -ipset=/.myeasytv.com/gfwlist -server=/.myeclipseide.com/127.0.0.1#5335 -ipset=/.myeclipseide.com/gfwlist -server=/.myforum.com.hk/127.0.0.1#5335 -ipset=/.myforum.com.hk/gfwlist -server=/.myforum.com.uk/127.0.0.1#5335 -ipset=/.myforum.com.uk/gfwlist -server=/.myfreecams.com/127.0.0.1#5335 -ipset=/.myfreecams.com/gfwlist -server=/.myfreepaysite.com/127.0.0.1#5335 -ipset=/.myfreepaysite.com/gfwlist -server=/.myfreshnet.com/127.0.0.1#5335 -ipset=/.myfreshnet.com/gfwlist -server=/.myftp.info/127.0.0.1#5335 -ipset=/.myftp.info/gfwlist -server=/.myftp.name/127.0.0.1#5335 -ipset=/.myftp.name/gfwlist -server=/.myiphide.com/127.0.0.1#5335 -ipset=/.myiphide.com/gfwlist -server=/.mykomica.org/127.0.0.1#5335 -ipset=/.mykomica.org/gfwlist -server=/.mylftv.com/127.0.0.1#5335 -ipset=/.mylftv.com/gfwlist -server=/.mymoe.moe/127.0.0.1#5335 -ipset=/.mymoe.moe/gfwlist -server=/.mymom.info/127.0.0.1#5335 -ipset=/.mymom.info/gfwlist -server=/.mymusic.net.tw/127.0.0.1#5335 -ipset=/.mymusic.net.tw/gfwlist -server=/.mynetav.net/127.0.0.1#5335 -ipset=/.mynetav.net/gfwlist -server=/.mynetav.org/127.0.0.1#5335 -ipset=/.mynetav.org/gfwlist -server=/.mynumber.org/127.0.0.1#5335 -ipset=/.mynumber.org/gfwlist -server=/.myparagliding.com/127.0.0.1#5335 -ipset=/.myparagliding.com/gfwlist -server=/.mypicture.info/127.0.0.1#5335 -ipset=/.mypicture.info/gfwlist -server=/.mypop3.net/127.0.0.1#5335 -ipset=/.mypop3.net/gfwlist -server=/.mypop3.org/127.0.0.1#5335 -ipset=/.mypop3.org/gfwlist -server=/.mypopescu.com/127.0.0.1#5335 -ipset=/.mypopescu.com/gfwlist -server=/.myreadingmanga.info/127.0.0.1#5335 -ipset=/.myreadingmanga.info/gfwlist -server=/.mysecondarydns.com/127.0.0.1#5335 -ipset=/.mysecondarydns.com/gfwlist -server=/.mysinablog.com/127.0.0.1#5335 -ipset=/.mysinablog.com/gfwlist -server=/.mysite.verizon.net/127.0.0.1#5335 -ipset=/.mysite.verizon.net/gfwlist -server=/.myspace.com/127.0.0.1#5335 -ipset=/.myspace.com/gfwlist -server=/.myspacecdn.com/127.0.0.1#5335 -ipset=/.myspacecdn.com/gfwlist -server=/.mytalkbox.com/127.0.0.1#5335 -ipset=/.mytalkbox.com/gfwlist -server=/.mytizi.com/127.0.0.1#5335 -ipset=/.mytizi.com/gfwlist -server=/.mywww.biz/127.0.0.1#5335 -ipset=/.mywww.biz/gfwlist -server=/.myz.info/127.0.0.1#5335 -ipset=/.myz.info/gfwlist -server=/.naacoalition.org/127.0.0.1#5335 -ipset=/.naacoalition.org/gfwlist -server=/.naitik.net/127.0.0.1#5335 -ipset=/.naitik.net/gfwlist -server=/.nakido.com/127.0.0.1#5335 -ipset=/.nakido.com/gfwlist -server=/.nalandabodhi.org/127.0.0.1#5335 -ipset=/.nalandabodhi.org/gfwlist -server=/.nalandawest.org/127.0.0.1#5335 -ipset=/.nalandawest.org/gfwlist -server=/.namgyal.org/127.0.0.1#5335 -ipset=/.namgyal.org/gfwlist -server=/.namgyalmonastery.org/127.0.0.1#5335 -ipset=/.namgyalmonastery.org/gfwlist -server=/.namsisi.com/127.0.0.1#5335 -ipset=/.namsisi.com/gfwlist -server=/.nanyang.com/127.0.0.1#5335 -ipset=/.nanyang.com/gfwlist -server=/.nanyangpost.com/127.0.0.1#5335 -ipset=/.nanyangpost.com/gfwlist -server=/.nanzao.com/127.0.0.1#5335 -ipset=/.nanzao.com/gfwlist -server=/.naol.ca/127.0.0.1#5335 -ipset=/.naol.ca/gfwlist -server=/.naol.cc/127.0.0.1#5335 -ipset=/.naol.cc/gfwlist -server=/.nat.gov.tw/127.0.0.1#5335 -ipset=/.nat.gov.tw/gfwlist -server=/.nat.moe/127.0.0.1#5335 -ipset=/.nat.moe/gfwlist -server=/.national-lottery.co.uk/127.0.0.1#5335 -ipset=/.national-lottery.co.uk/gfwlist -server=/.nationalawakening.org/127.0.0.1#5335 -ipset=/.nationalawakening.org/gfwlist -server=/.nationwide.com/127.0.0.1#5335 -ipset=/.nationwide.com/gfwlist -server=/.naughtyamerica.com/127.0.0.1#5335 -ipset=/.naughtyamerica.com/gfwlist -server=/.navyfamily.navy.mil/127.0.0.1#5335 -ipset=/.navyfamily.navy.mil/gfwlist -server=/.navyreserve.navy.mil/127.0.0.1#5335 -ipset=/.navyreserve.navy.mil/gfwlist -server=/.naweeklytimes.com/127.0.0.1#5335 -ipset=/.naweeklytimes.com/gfwlist -server=/.nbtvpn.com/127.0.0.1#5335 -ipset=/.nbtvpn.com/gfwlist -server=/.nccwatch.org.tw/127.0.0.1#5335 -ipset=/.nccwatch.org.tw/gfwlist -server=/.nch.com.tw/127.0.0.1#5335 -ipset=/.nch.com.tw/gfwlist -server=/.ncn.org/127.0.0.1#5335 -ipset=/.ncn.org/gfwlist -server=/.nde.de/127.0.0.1#5335 -ipset=/.nde.de/gfwlist -server=/.ndr.de/127.0.0.1#5335 -ipset=/.ndr.de/gfwlist -server=/.ned.org/127.0.0.1#5335 -ipset=/.ned.org/gfwlist -server=/.nekoslovakia.net/127.0.0.1#5335 -ipset=/.nekoslovakia.net/gfwlist -server=/.neo-miracle.com/127.0.0.1#5335 -ipset=/.neo-miracle.com/gfwlist -server=/.nepusoku.com/127.0.0.1#5335 -ipset=/.nepusoku.com/gfwlist -server=/.net-fits.pro/127.0.0.1#5335 -ipset=/.net-fits.pro/gfwlist -server=/.netbirds.com/127.0.0.1#5335 -ipset=/.netbirds.com/gfwlist -server=/.netcolony.com/127.0.0.1#5335 -ipset=/.netcolony.com/gfwlist -server=/.netflix.com/127.0.0.1#5335 -ipset=/.netflix.com/gfwlist -server=/.netme.cc/127.0.0.1#5335 -ipset=/.netme.cc/gfwlist -server=/.netsneak.com/127.0.0.1#5335 -ipset=/.netsneak.com/gfwlist -server=/.network54.com/127.0.0.1#5335 -ipset=/.network54.com/gfwlist -server=/.networkedblogs.com/127.0.0.1#5335 -ipset=/.networkedblogs.com/gfwlist -server=/.networktunnel.net/127.0.0.1#5335 -ipset=/.networktunnel.net/gfwlist -server=/.neverforget8964.org/127.0.0.1#5335 -ipset=/.neverforget8964.org/gfwlist -server=/.new-3lunch.net/127.0.0.1#5335 -ipset=/.new-3lunch.net/gfwlist -server=/.new-akiba.com/127.0.0.1#5335 -ipset=/.new-akiba.com/gfwlist -server=/.new96.ca/127.0.0.1#5335 -ipset=/.new96.ca/gfwlist -server=/.newcenturymc.com/127.0.0.1#5335 -ipset=/.newcenturymc.com/gfwlist -server=/.newcenturynews.com/127.0.0.1#5335 -ipset=/.newcenturynews.com/gfwlist -server=/.newchen.com/127.0.0.1#5335 -ipset=/.newchen.com/gfwlist -server=/.newgrounds.com/127.0.0.1#5335 -ipset=/.newgrounds.com/gfwlist -server=/.newipnow.com/127.0.0.1#5335 -ipset=/.newipnow.com/gfwlist -server=/.newlandmagazine.com.au/127.0.0.1#5335 -ipset=/.newlandmagazine.com.au/gfwlist -server=/.newnews.ca/127.0.0.1#5335 -ipset=/.newnews.ca/gfwlist -server=/.news.cnyes.com/127.0.0.1#5335 -ipset=/.news.cnyes.com/gfwlist -server=/.news.hk.msn.com/127.0.0.1#5335 -ipset=/.news.hk.msn.com/gfwlist -server=/.news.hkpeanut.com/127.0.0.1#5335 -ipset=/.news.hkpeanut.com/gfwlist -server=/.news.msn.com.tw/127.0.0.1#5335 -ipset=/.news.msn.com.tw/gfwlist -server=/.news.now.com/127.0.0.1#5335 -ipset=/.news.now.com/gfwlist -server=/.news.omy.sg/127.0.0.1#5335 -ipset=/.news.omy.sg/gfwlist -server=/.news.seehua.com/127.0.0.1#5335 -ipset=/.news.seehua.com/gfwlist -server=/.news.sina.com.hk/127.0.0.1#5335 -ipset=/.news.sina.com.hk/gfwlist -server=/.news.sina.com.tw/127.0.0.1#5335 -ipset=/.news.sina.com.tw/gfwlist -server=/.news.sinchew.com.my/127.0.0.1#5335 -ipset=/.news.sinchew.com.my/gfwlist -server=/.news.singtao.ca/127.0.0.1#5335 -ipset=/.news.singtao.ca/gfwlist -server=/.news.tvbs.com.tw/127.0.0.1#5335 -ipset=/.news.tvbs.com.tw/gfwlist -server=/.news100.com.tw/127.0.0.1#5335 -ipset=/.news100.com.tw/gfwlist -server=/.newsancai.com/127.0.0.1#5335 -ipset=/.newsancai.com/gfwlist -server=/.newschinacomment.org/127.0.0.1#5335 -ipset=/.newschinacomment.org/gfwlist -server=/.newscn.org/127.0.0.1#5335 -ipset=/.newscn.org/gfwlist -server=/.newsdetox.ca/127.0.0.1#5335 -ipset=/.newsdetox.ca/gfwlist -server=/.newsdh.com/127.0.0.1#5335 -ipset=/.newsdh.com/gfwlist -server=/.newstamago.com/127.0.0.1#5335 -ipset=/.newstamago.com/gfwlist -server=/.newstapa.org/127.0.0.1#5335 -ipset=/.newstapa.org/gfwlist -server=/.newstarnet.com/127.0.0.1#5335 -ipset=/.newstarnet.com/gfwlist -server=/.newtaiwan.com.tw/127.0.0.1#5335 -ipset=/.newtaiwan.com.tw/gfwlist -server=/.newtalk.tw/127.0.0.1#5335 -ipset=/.newtalk.tw/gfwlist -server=/.newyorktimes.com/127.0.0.1#5335 -ipset=/.newyorktimes.com/gfwlist -server=/.nexon.com/127.0.0.1#5335 -ipset=/.nexon.com/gfwlist -server=/.next11.co.jp/127.0.0.1#5335 -ipset=/.next11.co.jp/gfwlist -server=/.nextmag.com.tw/127.0.0.1#5335 -ipset=/.nextmag.com.tw/gfwlist -server=/.nextmedia.com/127.0.0.1#5335 -ipset=/.nextmedia.com/gfwlist -server=/.nexton-net.jp/127.0.0.1#5335 -ipset=/.nexton-net.jp/gfwlist -server=/.nexttv.com.tw/127.0.0.1#5335 -ipset=/.nexttv.com.tw/gfwlist -server=/.nf.id.au/127.0.0.1#5335 -ipset=/.nf.id.au/gfwlist -server=/.nfjtyd.com/127.0.0.1#5335 -ipset=/.nfjtyd.com/gfwlist -server=/.nflxext.com/127.0.0.1#5335 -ipset=/.nflxext.com/gfwlist -server=/.nflximg.com/127.0.0.1#5335 -ipset=/.nflximg.com/gfwlist -server=/.nflximg.net/127.0.0.1#5335 -ipset=/.nflximg.net/gfwlist -server=/.nflxso.net/127.0.0.1#5335 -ipset=/.nflxso.net/gfwlist -server=/.nflxvideo.net/127.0.0.1#5335 -ipset=/.nflxvideo.net/gfwlist -server=/.nga.mil/127.0.0.1#5335 -ipset=/.nga.mil/gfwlist -server=/.ngensis.com/127.0.0.1#5335 -ipset=/.ngensis.com/gfwlist -server=/.nhentai.net/127.0.0.1#5335 -ipset=/.nhentai.net/gfwlist -server=/.nhi.gov.tw/127.0.0.1#5335 -ipset=/.nhi.gov.tw/gfwlist -server=/.nhk-ondemand.jp/127.0.0.1#5335 -ipset=/.nhk-ondemand.jp/gfwlist -server=/.nic.cz.cc/127.0.0.1#5335 -ipset=/.nic.cz.cc/gfwlist -server=/.nic.google/127.0.0.1#5335 -ipset=/.nic.google/gfwlist -server=/.nic.gov/127.0.0.1#5335 -ipset=/.nic.gov/gfwlist -server=/.nicovideo.jp/127.0.0.1#5335 -ipset=/.nicovideo.jp/gfwlist -server=/.nighost.org/127.0.0.1#5335 -ipset=/.nighost.org/gfwlist -server=/.nikkei.com/127.0.0.1#5335 -ipset=/.nikkei.com/gfwlist -server=/.ninecommentaries.com/127.0.0.1#5335 -ipset=/.ninecommentaries.com/gfwlist -server=/.ninjacloak.com/127.0.0.1#5335 -ipset=/.ninjacloak.com/gfwlist -server=/.ninjaproxy.ninja/127.0.0.1#5335 -ipset=/.ninjaproxy.ninja/gfwlist -server=/.nintendium.com/127.0.0.1#5335 -ipset=/.nintendium.com/gfwlist -server=/.ninth.biz/127.0.0.1#5335 -ipset=/.ninth.biz/gfwlist -server=/.nitter.net/127.0.0.1#5335 -ipset=/.nitter.net/gfwlist -server=/.niu.moe/127.0.0.1#5335 -ipset=/.niu.moe/gfwlist -server=/.niusnews.com/127.0.0.1#5335 -ipset=/.niusnews.com/gfwlist -server=/.njactb.org/127.0.0.1#5335 -ipset=/.njactb.org/gfwlist -server=/.njuice.com/127.0.0.1#5335 -ipset=/.njuice.com/gfwlist -server=/.nko.navy.mil/127.0.0.1#5335 -ipset=/.nko.navy.mil/gfwlist -server=/.nlfreevpn.com/127.0.0.1#5335 -ipset=/.nlfreevpn.com/gfwlist -server=/.no-ip.org/127.0.0.1#5335 -ipset=/.no-ip.org/gfwlist -server=/.nobel.se/127.0.0.1#5335 -ipset=/.nobel.se/gfwlist -server=/.nobodycanstop.us/127.0.0.1#5335 -ipset=/.nobodycanstop.us/gfwlist -server=/.nofile.io/127.0.0.1#5335 -ipset=/.nofile.io/gfwlist -server=/.nokogiri.org/127.0.0.1#5335 -ipset=/.nokogiri.org/gfwlist -server=/.nokola.com/127.0.0.1#5335 -ipset=/.nokola.com/gfwlist -server=/.noodlevpn.com/127.0.0.1#5335 -ipset=/.noodlevpn.com/gfwlist -server=/.norbulingka.org/127.0.0.1#5335 -ipset=/.norbulingka.org/gfwlist -server=/.nordstrom.com/127.0.0.1#5335 -ipset=/.nordstrom.com/gfwlist -server=/.nordstromimage.com/127.0.0.1#5335 -ipset=/.nordstromimage.com/gfwlist -server=/.nordstromrack.com/127.0.0.1#5335 -ipset=/.nordstromrack.com/gfwlist -server=/.nordvpn.com/127.0.0.1#5335 -ipset=/.nordvpn.com/gfwlist -server=/.notify.dropboxapi.com/127.0.0.1#5335 -ipset=/.notify.dropboxapi.com/gfwlist -server=/.nottinghampost.com/127.0.0.1#5335 -ipset=/.nottinghampost.com/gfwlist -server=/.novelasia.com/127.0.0.1#5335 -ipset=/.novelasia.com/gfwlist -server=/.now.com/127.0.0.1#5335 -ipset=/.now.com/gfwlist -server=/.now.im/127.0.0.1#5335 -ipset=/.now.im/gfwlist -server=/.nownews.com/127.0.0.1#5335 -ipset=/.nownews.com/gfwlist -server=/.nowtorrents.com/127.0.0.1#5335 -ipset=/.nowtorrents.com/gfwlist -server=/.noypf.com/127.0.0.1#5335 -ipset=/.noypf.com/gfwlist -server=/.npa.go.jp/127.0.0.1#5335 -ipset=/.npa.go.jp/gfwlist -server=/.npa.gov.tw/127.0.0.1#5335 -ipset=/.npa.gov.tw/gfwlist -server=/.npnt.me/127.0.0.1#5335 -ipset=/.npnt.me/gfwlist -server=/.nps.gov/127.0.0.1#5335 -ipset=/.nps.gov/gfwlist -server=/.npsboost.com/127.0.0.1#5335 -ipset=/.npsboost.com/gfwlist -server=/.nradio.me/127.0.0.1#5335 -ipset=/.nradio.me/gfwlist -server=/.nrk.no/127.0.0.1#5335 -ipset=/.nrk.no/gfwlist -server=/.ns01.biz/127.0.0.1#5335 -ipset=/.ns01.biz/gfwlist -server=/.ns01.info/127.0.0.1#5335 -ipset=/.ns01.info/gfwlist -server=/.ns01.us/127.0.0.1#5335 -ipset=/.ns01.us/gfwlist -server=/.ns02.biz/127.0.0.1#5335 -ipset=/.ns02.biz/gfwlist -server=/.ns02.info/127.0.0.1#5335 -ipset=/.ns02.info/gfwlist -server=/.ns02.us/127.0.0.1#5335 -ipset=/.ns02.us/gfwlist -server=/.ns1.name/127.0.0.1#5335 -ipset=/.ns1.name/gfwlist -server=/.ns2.name/127.0.0.1#5335 -ipset=/.ns2.name/gfwlist -server=/.ns3.name/127.0.0.1#5335 -ipset=/.ns3.name/gfwlist -server=/.nsc.gov.tw/127.0.0.1#5335 -ipset=/.nsc.gov.tw/gfwlist -server=/.ntbk.gov.tw/127.0.0.1#5335 -ipset=/.ntbk.gov.tw/gfwlist -server=/.ntbna.gov.tw/127.0.0.1#5335 -ipset=/.ntbna.gov.tw/gfwlist -server=/.ntbt.gov.tw/127.0.0.1#5335 -ipset=/.ntbt.gov.tw/gfwlist -server=/.ntd.tv/127.0.0.1#5335 -ipset=/.ntd.tv/gfwlist -server=/.ntdtv.ca/127.0.0.1#5335 -ipset=/.ntdtv.ca/gfwlist -server=/.ntdtv.co.kr/127.0.0.1#5335 -ipset=/.ntdtv.co.kr/gfwlist -server=/.ntdtv.com/127.0.0.1#5335 -ipset=/.ntdtv.com/gfwlist -server=/.ntdtv.cz/127.0.0.1#5335 -ipset=/.ntdtv.cz/gfwlist -server=/.ntdtv.org/127.0.0.1#5335 -ipset=/.ntdtv.org/gfwlist -server=/.ntdtv.ru/127.0.0.1#5335 -ipset=/.ntdtv.ru/gfwlist -server=/.ntdtvla.com/127.0.0.1#5335 -ipset=/.ntdtvla.com/gfwlist -server=/.ntrfun.com/127.0.0.1#5335 -ipset=/.ntrfun.com/gfwlist -server=/.ntsna.gov.tw/127.0.0.1#5335 -ipset=/.ntsna.gov.tw/gfwlist -server=/.nubiles.net/127.0.0.1#5335 -ipset=/.nubiles.net/gfwlist -server=/.nuexpo.com/127.0.0.1#5335 -ipset=/.nuexpo.com/gfwlist -server=/.nukistream.com/127.0.0.1#5335 -ipset=/.nukistream.com/gfwlist -server=/.nurgo-software.com/127.0.0.1#5335 -ipset=/.nurgo-software.com/gfwlist -server=/.nusatrip.com/127.0.0.1#5335 -ipset=/.nusatrip.com/gfwlist -server=/.nutaku.net/127.0.0.1#5335 -ipset=/.nutaku.net/gfwlist -server=/.nuuvem.com/127.0.0.1#5335 -ipset=/.nuuvem.com/gfwlist -server=/.nuvid.com/127.0.0.1#5335 -ipset=/.nuvid.com/gfwlist -server=/.nuzcom.com/127.0.0.1#5335 -ipset=/.nuzcom.com/gfwlist -server=/.nvdst.com/127.0.0.1#5335 -ipset=/.nvdst.com/gfwlist -server=/.nvquan.org/127.0.0.1#5335 -ipset=/.nvquan.org/gfwlist -server=/.nvtongzhisheng.org/127.0.0.1#5335 -ipset=/.nvtongzhisheng.org/gfwlist -server=/.nwtca.org/127.0.0.1#5335 -ipset=/.nwtca.org/gfwlist -server=/.ny.stgloballink.com/127.0.0.1#5335 -ipset=/.ny.stgloballink.com/gfwlist -server=/.ny.visiontimes.com/127.0.0.1#5335 -ipset=/.ny.visiontimes.com/gfwlist -server=/.nyaa.eu/127.0.0.1#5335 -ipset=/.nyaa.eu/gfwlist -server=/.nyaa.si/127.0.0.1#5335 -ipset=/.nyaa.si/gfwlist -server=/.nydus.ca/127.0.0.1#5335 -ipset=/.nydus.ca/gfwlist -server=/.nylon-angel.com/127.0.0.1#5335 -ipset=/.nylon-angel.com/gfwlist -server=/.nylonstockingsonline.com/127.0.0.1#5335 -ipset=/.nylonstockingsonline.com/gfwlist -server=/.nyt.com/127.0.0.1#5335 -ipset=/.nyt.com/gfwlist -server=/.nytchina.com/127.0.0.1#5335 -ipset=/.nytchina.com/gfwlist -server=/.nytcn.me/127.0.0.1#5335 -ipset=/.nytcn.me/gfwlist -server=/.nytco.com/127.0.0.1#5335 -ipset=/.nytco.com/gfwlist -server=/.nytimes.com/127.0.0.1#5335 -ipset=/.nytimes.com/gfwlist -server=/.nytimes.map.fastly.net/127.0.0.1#5335 -ipset=/.nytimes.map.fastly.net/gfwlist -server=/.nytimg.com/127.0.0.1#5335 -ipset=/.nytimg.com/gfwlist -server=/.nytstyle.com/127.0.0.1#5335 -ipset=/.nytstyle.com/gfwlist -server=/.nzchinese.com/127.0.0.1#5335 -ipset=/.nzchinese.com/gfwlist -server=/.nzchinese.net.nz/127.0.0.1#5335 -ipset=/.nzchinese.net.nz/gfwlist -server=/.observechina.net/127.0.0.1#5335 -ipset=/.observechina.net/gfwlist -server=/.obutu.com/127.0.0.1#5335 -ipset=/.obutu.com/gfwlist -server=/.ocaspro.com/127.0.0.1#5335 -ipset=/.ocaspro.com/gfwlist -server=/.occupytiananmen.com/127.0.0.1#5335 -ipset=/.occupytiananmen.com/gfwlist -server=/.oclp.hk/127.0.0.1#5335 -ipset=/.oclp.hk/gfwlist -server=/.ocreampies.com/127.0.0.1#5335 -ipset=/.ocreampies.com/gfwlist -server=/.ocry.com/127.0.0.1#5335 -ipset=/.ocry.com/gfwlist -server=/.october-review.org/127.0.0.1#5335 -ipset=/.october-review.org/gfwlist -server=/.oculus.com/127.0.0.1#5335 -ipset=/.oculus.com/gfwlist -server=/.oculuscdn.com/127.0.0.1#5335 -ipset=/.oculuscdn.com/gfwlist -server=/.oex.com/127.0.0.1#5335 -ipset=/.oex.com/gfwlist -server=/.offbeatchina.com/127.0.0.1#5335 -ipset=/.offbeatchina.com/gfwlist -server=/.officeoftibet.com/127.0.0.1#5335 -ipset=/.officeoftibet.com/gfwlist -server=/.ofile.org/127.0.0.1#5335 -ipset=/.ofile.org/gfwlist -server=/.ogaoga.org/127.0.0.1#5335 -ipset=/.ogaoga.org/gfwlist -server=/.ogate.org/127.0.0.1#5335 -ipset=/.ogate.org/gfwlist -server=/.oiktv.com/127.0.0.1#5335 -ipset=/.oiktv.com/gfwlist -server=/.oizoblog.com/127.0.0.1#5335 -ipset=/.oizoblog.com/gfwlist -server=/.ok.ru/127.0.0.1#5335 -ipset=/.ok.ru/gfwlist -server=/.okayfreedom.com/127.0.0.1#5335 -ipset=/.okayfreedom.com/gfwlist -server=/.okex.com/127.0.0.1#5335 -ipset=/.okex.com/gfwlist -server=/.okk.tw/127.0.0.1#5335 -ipset=/.okk.tw/gfwlist -server=/.old-cat.net/127.0.0.1#5335 -ipset=/.old-cat.net/gfwlist -server=/.old.nabble.com/127.0.0.1#5335 -ipset=/.old.nabble.com/gfwlist -server=/.olumpo.com/127.0.0.1#5335 -ipset=/.olumpo.com/gfwlist -server=/.olympicwatch.org/127.0.0.1#5335 -ipset=/.olympicwatch.org/gfwlist -server=/.omgili.com/127.0.0.1#5335 -ipset=/.omgili.com/gfwlist -server=/.omni7.jp/127.0.0.1#5335 -ipset=/.omni7.jp/gfwlist -server=/.omnitalk.com/127.0.0.1#5335 -ipset=/.omnitalk.com/gfwlist -server=/.omnitalk.org/127.0.0.1#5335 -ipset=/.omnitalk.org/gfwlist -server=/.on.cc/127.0.0.1#5335 -ipset=/.on.cc/gfwlist -server=/.on2.com/127.0.0.1#5335 -ipset=/.on2.com/gfwlist -server=/.onapp.com/127.0.0.1#5335 -ipset=/.onapp.com/gfwlist -server=/.onedrive.live.com/127.0.0.1#5335 -ipset=/.onedrive.live.com/gfwlist -server=/.onedumb.com/127.0.0.1#5335 -ipset=/.onedumb.com/gfwlist -server=/.onejav.com/127.0.0.1#5335 -ipset=/.onejav.com/gfwlist -server=/.onion.city/127.0.0.1#5335 -ipset=/.onion.city/gfwlist -server=/.online.recoveryversion.org/127.0.0.1#5335 -ipset=/.online.recoveryversion.org/gfwlist -server=/.onlinecha.com/127.0.0.1#5335 -ipset=/.onlinecha.com/gfwlist -server=/.onlineyoutube.com/127.0.0.1#5335 -ipset=/.onlineyoutube.com/gfwlist -server=/.onlytweets.com/127.0.0.1#5335 -ipset=/.onlytweets.com/gfwlist -server=/.onmoon.com/127.0.0.1#5335 -ipset=/.onmoon.com/gfwlist -server=/.onmoon.net/127.0.0.1#5335 -ipset=/.onmoon.net/gfwlist -server=/.onmypc.biz/127.0.0.1#5335 -ipset=/.onmypc.biz/gfwlist -server=/.onmypc.info/127.0.0.1#5335 -ipset=/.onmypc.info/gfwlist -server=/.onmypc.net/127.0.0.1#5335 -ipset=/.onmypc.net/gfwlist -server=/.onmypc.org/127.0.0.1#5335 -ipset=/.onmypc.org/gfwlist -server=/.onmypc.us/127.0.0.1#5335 -ipset=/.onmypc.us/gfwlist -server=/.onthehunt.com/127.0.0.1#5335 -ipset=/.onthehunt.com/gfwlist -server=/.ontrac.com/127.0.0.1#5335 -ipset=/.ontrac.com/gfwlist -server=/.oopsforum.com/127.0.0.1#5335 -ipset=/.oopsforum.com/gfwlist -server=/.open.com.hk/127.0.0.1#5335 -ipset=/.open.com.hk/gfwlist -server=/.openallweb.com/127.0.0.1#5335 -ipset=/.openallweb.com/gfwlist -server=/.opendemocracy.net/127.0.0.1#5335 -ipset=/.opendemocracy.net/gfwlist -server=/.opendn.xyz/127.0.0.1#5335 -ipset=/.opendn.xyz/gfwlist -server=/.openervpn.in/127.0.0.1#5335 -ipset=/.openervpn.in/gfwlist -server=/.openid.net/127.0.0.1#5335 -ipset=/.openid.net/gfwlist -server=/.openleaks.org/127.0.0.1#5335 -ipset=/.openleaks.org/gfwlist -server=/.opensource.google/127.0.0.1#5335 -ipset=/.opensource.google/gfwlist -server=/.openvpn.net/127.0.0.1#5335 -ipset=/.openvpn.net/gfwlist -server=/.openvpn.org/127.0.0.1#5335 -ipset=/.openvpn.org/gfwlist -server=/.openwebster.com/127.0.0.1#5335 -ipset=/.openwebster.com/gfwlist -server=/.openwrt.org.cn/127.0.0.1#5335 -ipset=/.openwrt.org.cn/gfwlist -server=/.opml.radiotime.com/127.0.0.1#5335 -ipset=/.opml.radiotime.com/gfwlist -server=/.opus-gaming.com/127.0.0.1#5335 -ipset=/.opus-gaming.com/gfwlist -server=/.organcare.org.tw/127.0.0.1#5335 -ipset=/.organcare.org.tw/gfwlist -server=/.organharvestinvestigation.net/127.0.0.1#5335 -ipset=/.organharvestinvestigation.net/gfwlist -server=/.organiccrap.com/127.0.0.1#5335 -ipset=/.organiccrap.com/gfwlist -server=/.orgasm.com/127.0.0.1#5335 -ipset=/.orgasm.com/gfwlist -server=/.orgfree.com/127.0.0.1#5335 -ipset=/.orgfree.com/gfwlist -server=/.orient-doll.com/127.0.0.1#5335 -ipset=/.orient-doll.com/gfwlist -server=/.orientaldaily.com.my/127.0.0.1#5335 -ipset=/.orientaldaily.com.my/gfwlist -server=/.orn.jp/127.0.0.1#5335 -ipset=/.orn.jp/gfwlist -server=/.orzistic.org/127.0.0.1#5335 -ipset=/.orzistic.org/gfwlist -server=/.osfoora.com/127.0.0.1#5335 -ipset=/.osfoora.com/gfwlist -server=/.otcbtc.com/127.0.0.1#5335 -ipset=/.otcbtc.com/gfwlist -server=/.otnd.org/127.0.0.1#5335 -ipset=/.otnd.org/gfwlist -server=/.otto.de/127.0.0.1#5335 -ipset=/.otto.de/gfwlist -server=/.otzo.com/127.0.0.1#5335 -ipset=/.otzo.com/gfwlist -server=/.ourdearamy.com/127.0.0.1#5335 -ipset=/.ourdearamy.com/gfwlist -server=/.ourhobby.com/127.0.0.1#5335 -ipset=/.ourhobby.com/gfwlist -server=/.oursogo.com/127.0.0.1#5335 -ipset=/.oursogo.com/gfwlist -server=/.oursteps.com.au/127.0.0.1#5335 -ipset=/.oursteps.com.au/gfwlist -server=/.oursweb.net/127.0.0.1#5335 -ipset=/.oursweb.net/gfwlist -server=/.ourtv.hk/127.0.0.1#5335 -ipset=/.ourtv.hk/gfwlist -server=/.overplay.net/127.0.0.1#5335 -ipset=/.overplay.net/gfwlist -server=/.oversea.istarshine.com/127.0.0.1#5335 -ipset=/.oversea.istarshine.com/gfwlist -server=/.ow.ly/127.0.0.1#5335 -ipset=/.ow.ly/gfwlist -server=/.owl.li/127.0.0.1#5335 -ipset=/.owl.li/gfwlist -server=/.oyax.com/127.0.0.1#5335 -ipset=/.oyax.com/gfwlist -server=/.ozvoice.org/127.0.0.1#5335 -ipset=/.ozvoice.org/gfwlist -server=/.ozxw.com/127.0.0.1#5335 -ipset=/.ozxw.com/gfwlist -server=/.ozyoyo.com/127.0.0.1#5335 -ipset=/.ozyoyo.com/gfwlist -server=/.pachosting.com/127.0.0.1#5335 -ipset=/.pachosting.com/gfwlist -server=/.pacificpoker.com/127.0.0.1#5335 -ipset=/.pacificpoker.com/gfwlist -server=/.packetix.net/127.0.0.1#5335 -ipset=/.packetix.net/gfwlist -server=/.pacopacomama.com/127.0.0.1#5335 -ipset=/.pacopacomama.com/gfwlist -server=/.padmanet.com/127.0.0.1#5335 -ipset=/.padmanet.com/gfwlist -server=/.page.bid.yahoo.com/127.0.0.1#5335 -ipset=/.page.bid.yahoo.com/gfwlist -server=/.page2rss.com/127.0.0.1#5335 -ipset=/.page2rss.com/gfwlist -server=/.pagodabox.com/127.0.0.1#5335 -ipset=/.pagodabox.com/gfwlist -server=/.palacemoon.com/127.0.0.1#5335 -ipset=/.palacemoon.com/gfwlist -server=/.paldengyal.com/127.0.0.1#5335 -ipset=/.paldengyal.com/gfwlist -server=/.paljorpublications.com/127.0.0.1#5335 -ipset=/.paljorpublications.com/gfwlist -server=/.paltalk.com/127.0.0.1#5335 -ipset=/.paltalk.com/gfwlist -server=/.panamapapers.sueddeutsche.de/127.0.0.1#5335 -ipset=/.panamapapers.sueddeutsche.de/gfwlist -server=/.pandapow.co/127.0.0.1#5335 -ipset=/.pandapow.co/gfwlist -server=/.pandapow.net/127.0.0.1#5335 -ipset=/.pandapow.net/gfwlist -server=/.pandavpn-jp.com/127.0.0.1#5335 -ipset=/.pandavpn-jp.com/gfwlist -server=/.pandora.com/127.0.0.1#5335 -ipset=/.pandora.com/gfwlist -server=/.pandora.tv/127.0.0.1#5335 -ipset=/.pandora.tv/gfwlist -server=/.panluan.net/127.0.0.1#5335 -ipset=/.panluan.net/gfwlist -server=/.panoramio.com/127.0.0.1#5335 -ipset=/.panoramio.com/gfwlist -server=/.pao-pao.net/127.0.0.1#5335 -ipset=/.pao-pao.net/gfwlist -server=/.paper.li/127.0.0.1#5335 -ipset=/.paper.li/gfwlist -server=/.paperb.us/127.0.0.1#5335 -ipset=/.paperb.us/gfwlist -server=/.paradisehill.cc/127.0.0.1#5335 -ipset=/.paradisehill.cc/gfwlist -server=/.paradisepoker.com/127.0.0.1#5335 -ipset=/.paradisepoker.com/gfwlist -server=/.parkansky.com/127.0.0.1#5335 -ipset=/.parkansky.com/gfwlist -server=/.parler.com/127.0.0.1#5335 -ipset=/.parler.com/gfwlist -server=/.parsevideo.com/127.0.0.1#5335 -ipset=/.parsevideo.com/gfwlist -server=/.partycasino.com/127.0.0.1#5335 -ipset=/.partycasino.com/gfwlist -server=/.partypoker.com/127.0.0.1#5335 -ipset=/.partypoker.com/gfwlist -server=/.passion.com/127.0.0.1#5335 -ipset=/.passion.com/gfwlist -server=/.passiontimes.hk/127.0.0.1#5335 -ipset=/.passiontimes.hk/gfwlist -server=/.paste.ee/127.0.0.1#5335 -ipset=/.paste.ee/gfwlist -server=/.pastebin.com/127.0.0.1#5335 -ipset=/.pastebin.com/gfwlist -server=/.pastie.org/127.0.0.1#5335 -ipset=/.pastie.org/gfwlist -server=/.pbwiki.com/127.0.0.1#5335 -ipset=/.pbwiki.com/gfwlist -server=/.pbworks.com/127.0.0.1#5335 -ipset=/.pbworks.com/gfwlist -server=/.pbxes.com/127.0.0.1#5335 -ipset=/.pbxes.com/gfwlist -server=/.pbxes.org/127.0.0.1#5335 -ipset=/.pbxes.org/gfwlist -server=/.pcanywhere.net/127.0.0.1#5335 -ipset=/.pcanywhere.net/gfwlist -server=/.pcc.gov.tw/127.0.0.1#5335 -ipset=/.pcc.gov.tw/gfwlist -server=/.pcdvd.com.tw/127.0.0.1#5335 -ipset=/.pcdvd.com.tw/gfwlist -server=/.pchome.com.tw/127.0.0.1#5335 -ipset=/.pchome.com.tw/gfwlist -server=/.pcij.org/127.0.0.1#5335 -ipset=/.pcij.org/gfwlist -server=/.pcstore.com.tw/127.0.0.1#5335 -ipset=/.pcstore.com.tw/gfwlist -server=/.pct.org.tw/127.0.0.1#5335 -ipset=/.pct.org.tw/gfwlist -server=/.pdetails.com/127.0.0.1#5335 -ipset=/.pdetails.com/gfwlist -server=/.pdproxy.com/127.0.0.1#5335 -ipset=/.pdproxy.com/gfwlist -server=/.pds.nasa.gov/127.0.0.1#5335 -ipset=/.pds.nasa.gov/gfwlist -server=/.peace.ca/127.0.0.1#5335 -ipset=/.peace.ca/gfwlist -server=/.peacefire.org/127.0.0.1#5335 -ipset=/.peacefire.org/gfwlist -server=/.peacehall.com/127.0.0.1#5335 -ipset=/.peacehall.com/gfwlist -server=/.pearlher.org/127.0.0.1#5335 -ipset=/.pearlher.org/gfwlist -server=/.peeasian.com/127.0.0.1#5335 -ipset=/.peeasian.com/gfwlist -server=/.pekingduck.org/127.0.0.1#5335 -ipset=/.pekingduck.org/gfwlist -server=/.pemulihan.or.id/127.0.0.1#5335 -ipset=/.pemulihan.or.id/gfwlist -server=/.pen.io/127.0.0.1#5335 -ipset=/.pen.io/gfwlist -server=/.penchinese.com/127.0.0.1#5335 -ipset=/.penchinese.com/gfwlist -server=/.penchinese.net/127.0.0.1#5335 -ipset=/.penchinese.net/gfwlist -server=/.pengyulong.com/127.0.0.1#5335 -ipset=/.pengyulong.com/gfwlist -server=/.penisbot.com/127.0.0.1#5335 -ipset=/.penisbot.com/gfwlist -server=/.penthouse.com/127.0.0.1#5335 -ipset=/.penthouse.com/gfwlist -server=/.peoplebookcafe.com/127.0.0.1#5335 -ipset=/.peoplebookcafe.com/gfwlist -server=/.peoplenews.tw/127.0.0.1#5335 -ipset=/.peoplenews.tw/gfwlist -server=/.peopo.org/127.0.0.1#5335 -ipset=/.peopo.org/gfwlist -server=/.percy.in/127.0.0.1#5335 -ipset=/.percy.in/gfwlist -server=/.perfectgirls.net/127.0.0.1#5335 -ipset=/.perfectgirls.net/gfwlist -server=/.perfectvpn.net/127.0.0.1#5335 -ipset=/.perfectvpn.net/gfwlist -server=/.periscope.tv/127.0.0.1#5335 -ipset=/.periscope.tv/gfwlist -server=/.persecutionblog.com/127.0.0.1#5335 -ipset=/.persecutionblog.com/gfwlist -server=/.persiankitty.com/127.0.0.1#5335 -ipset=/.persiankitty.com/gfwlist -server=/.pfd.org.hk/127.0.0.1#5335 -ipset=/.pfd.org.hk/gfwlist -server=/.phapluan.org/127.0.0.1#5335 -ipset=/.phapluan.org/gfwlist -server=/.phayul.com/127.0.0.1#5335 -ipset=/.phayul.com/gfwlist -server=/.philborges.com/127.0.0.1#5335 -ipset=/.philborges.com/gfwlist -server=/.philly.com/127.0.0.1#5335 -ipset=/.philly.com/gfwlist -server=/.phmsociety.org/127.0.0.1#5335 -ipset=/.phmsociety.org/gfwlist -server=/.phncdn.com/127.0.0.1#5335 -ipset=/.phncdn.com/gfwlist -server=/.phosphation13.rssing.com/127.0.0.1#5335 -ipset=/.phosphation13.rssing.com/gfwlist -server=/.photodharma.net/127.0.0.1#5335 -ipset=/.photodharma.net/gfwlist -server=/.photofocus.com/127.0.0.1#5335 -ipset=/.photofocus.com/gfwlist -server=/.phuquocservices.com/127.0.0.1#5335 -ipset=/.phuquocservices.com/gfwlist -server=/.picacomic.com/127.0.0.1#5335 -ipset=/.picacomic.com/gfwlist -server=/.picacomiccn.com/127.0.0.1#5335 -ipset=/.picacomiccn.com/gfwlist -server=/.picasaweb.com/127.0.0.1#5335 -ipset=/.picasaweb.com/gfwlist -server=/.picidae.net/127.0.0.1#5335 -ipset=/.picidae.net/gfwlist -server=/.pictures.playboy.com/127.0.0.1#5335 -ipset=/.pictures.playboy.com/gfwlist -server=/.picturesocial.com/127.0.0.1#5335 -ipset=/.picturesocial.com/gfwlist -server=/.pin-cong.com/127.0.0.1#5335 -ipset=/.pin-cong.com/gfwlist -server=/.pin6.com/127.0.0.1#5335 -ipset=/.pin6.com/gfwlist -server=/.pincong.rocks/127.0.0.1#5335 -ipset=/.pincong.rocks/gfwlist -server=/.ping.fm/127.0.0.1#5335 -ipset=/.ping.fm/gfwlist -server=/.pinimg.com/127.0.0.1#5335 -ipset=/.pinimg.com/gfwlist -server=/.pinkrod.com/127.0.0.1#5335 -ipset=/.pinkrod.com/gfwlist -server=/.pinoy-n.com/127.0.0.1#5335 -ipset=/.pinoy-n.com/gfwlist -server=/.pinterest.at/127.0.0.1#5335 -ipset=/.pinterest.at/gfwlist -server=/.pinterest.ca/127.0.0.1#5335 -ipset=/.pinterest.ca/gfwlist -server=/.pinterest.co.kr/127.0.0.1#5335 -ipset=/.pinterest.co.kr/gfwlist -server=/.pinterest.co.uk/127.0.0.1#5335 -ipset=/.pinterest.co.uk/gfwlist -server=/.pinterest.com/127.0.0.1#5335 -ipset=/.pinterest.com/gfwlist -server=/.pinterest.de/127.0.0.1#5335 -ipset=/.pinterest.de/gfwlist -server=/.pinterest.dk/127.0.0.1#5335 -ipset=/.pinterest.dk/gfwlist -server=/.pinterest.fr/127.0.0.1#5335 -ipset=/.pinterest.fr/gfwlist -server=/.pinterest.jp/127.0.0.1#5335 -ipset=/.pinterest.jp/gfwlist -server=/.pinterest.nl/127.0.0.1#5335 -ipset=/.pinterest.nl/gfwlist -server=/.pinterest.se/127.0.0.1#5335 -ipset=/.pinterest.se/gfwlist -server=/.pioneer-worker.forums-free.com/127.0.0.1#5335 -ipset=/.pioneer-worker.forums-free.com/gfwlist -server=/.pipii.tv/127.0.0.1#5335 -ipset=/.pipii.tv/gfwlist -server=/.piposay.com/127.0.0.1#5335 -ipset=/.piposay.com/gfwlist -server=/.piraattilahti.org/127.0.0.1#5335 -ipset=/.piraattilahti.org/gfwlist -server=/.piring.com/127.0.0.1#5335 -ipset=/.piring.com/gfwlist -server=/.pixelqi.com/127.0.0.1#5335 -ipset=/.pixelqi.com/gfwlist -server=/.pixiv.net/127.0.0.1#5335 -ipset=/.pixiv.net/gfwlist -server=/.pixnet.net/127.0.0.1#5335 -ipset=/.pixnet.net/gfwlist -server=/.pk.com/127.0.0.1#5335 -ipset=/.pk.com/gfwlist -server=/.pki.goog/127.0.0.1#5335 -ipset=/.pki.goog/gfwlist -server=/.placemix.com/127.0.0.1#5335 -ipset=/.placemix.com/gfwlist -server=/.playboy.com/127.0.0.1#5335 -ipset=/.playboy.com/gfwlist -server=/.playboyplus.com/127.0.0.1#5335 -ipset=/.playboyplus.com/gfwlist -server=/.player.fm/127.0.0.1#5335 -ipset=/.player.fm/gfwlist -server=/.playno1.com/127.0.0.1#5335 -ipset=/.playno1.com/gfwlist -server=/.playpcesor.com/127.0.0.1#5335 -ipset=/.playpcesor.com/gfwlist -server=/.plays.com.tw/127.0.0.1#5335 -ipset=/.plays.com.tw/gfwlist -server=/.plm.org.hk/127.0.0.1#5335 -ipset=/.plm.org.hk/gfwlist -server=/.plunder.com/127.0.0.1#5335 -ipset=/.plunder.com/gfwlist -server=/.plurk.com/127.0.0.1#5335 -ipset=/.plurk.com/gfwlist -server=/.plus.codes/127.0.0.1#5335 -ipset=/.plus.codes/gfwlist -server=/.plus28.com/127.0.0.1#5335 -ipset=/.plus28.com/gfwlist -server=/.plusbb.com/127.0.0.1#5335 -ipset=/.plusbb.com/gfwlist -server=/.pmatehunter.com/127.0.0.1#5335 -ipset=/.pmatehunter.com/gfwlist -server=/.pmates.com/127.0.0.1#5335 -ipset=/.pmates.com/gfwlist -server=/.po2b.com/127.0.0.1#5335 -ipset=/.po2b.com/gfwlist -server=/.pobieramy.top/127.0.0.1#5335 -ipset=/.pobieramy.top/gfwlist -server=/.podictionary.com/127.0.0.1#5335 -ipset=/.podictionary.com/gfwlist -server=/.pokerstars.com/127.0.0.1#5335 -ipset=/.pokerstars.com/gfwlist -server=/.pokerstars.net/127.0.0.1#5335 -ipset=/.pokerstars.net/gfwlist -server=/.politicalchina.org/127.0.0.1#5335 -ipset=/.politicalchina.org/gfwlist -server=/.politicalconsultation.org/127.0.0.1#5335 -ipset=/.politicalconsultation.org/gfwlist -server=/.politiscales.net/127.0.0.1#5335 -ipset=/.politiscales.net/gfwlist -server=/.poloniex.com/127.0.0.1#5335 -ipset=/.poloniex.com/gfwlist -server=/.polymer-project.org/127.0.0.1#5335 -ipset=/.polymer-project.org/gfwlist -server=/.polymerhk.com/127.0.0.1#5335 -ipset=/.polymerhk.com/gfwlist -server=/.popo.tw/127.0.0.1#5335 -ipset=/.popo.tw/gfwlist -server=/.popvote.hk/127.0.0.1#5335 -ipset=/.popvote.hk/gfwlist -server=/.popyard.com/127.0.0.1#5335 -ipset=/.popyard.com/gfwlist -server=/.popyard.org/127.0.0.1#5335 -ipset=/.popyard.org/gfwlist -server=/.porn.com/127.0.0.1#5335 -ipset=/.porn.com/gfwlist -server=/.porn2.com/127.0.0.1#5335 -ipset=/.porn2.com/gfwlist -server=/.porn5.com/127.0.0.1#5335 -ipset=/.porn5.com/gfwlist -server=/.pornbase.org/127.0.0.1#5335 -ipset=/.pornbase.org/gfwlist -server=/.pornerbros.com/127.0.0.1#5335 -ipset=/.pornerbros.com/gfwlist -server=/.pornhd.com/127.0.0.1#5335 -ipset=/.pornhd.com/gfwlist -server=/.pornhost.com/127.0.0.1#5335 -ipset=/.pornhost.com/gfwlist -server=/.pornhub.com/127.0.0.1#5335 -ipset=/.pornhub.com/gfwlist -server=/.pornhubdeutsch.net/127.0.0.1#5335 -ipset=/.pornhubdeutsch.net/gfwlist -server=/.pornmm.net/127.0.0.1#5335 -ipset=/.pornmm.net/gfwlist -server=/.pornoxo.com/127.0.0.1#5335 -ipset=/.pornoxo.com/gfwlist -server=/.pornrapidshare.com/127.0.0.1#5335 -ipset=/.pornrapidshare.com/gfwlist -server=/.pornsharing.com/127.0.0.1#5335 -ipset=/.pornsharing.com/gfwlist -server=/.pornsocket.com/127.0.0.1#5335 -ipset=/.pornsocket.com/gfwlist -server=/.pornstarclub.com/127.0.0.1#5335 -ipset=/.pornstarclub.com/gfwlist -server=/.porntube.com/127.0.0.1#5335 -ipset=/.porntube.com/gfwlist -server=/.porntubenews.com/127.0.0.1#5335 -ipset=/.porntubenews.com/gfwlist -server=/.porntvblog.com/127.0.0.1#5335 -ipset=/.porntvblog.com/gfwlist -server=/.pornvisit.com/127.0.0.1#5335 -ipset=/.pornvisit.com/gfwlist -server=/.port25.biz/127.0.0.1#5335 -ipset=/.port25.biz/gfwlist -server=/.portablevpn.nl/127.0.0.1#5335 -ipset=/.portablevpn.nl/gfwlist -server=/.poskotanews.com/127.0.0.1#5335 -ipset=/.poskotanews.com/gfwlist -server=/.post01.com/127.0.0.1#5335 -ipset=/.post01.com/gfwlist -server=/.post76.com/127.0.0.1#5335 -ipset=/.post76.com/gfwlist -server=/.post852.com/127.0.0.1#5335 -ipset=/.post852.com/gfwlist -server=/.postadult.com/127.0.0.1#5335 -ipset=/.postadult.com/gfwlist -server=/.postimg.org/127.0.0.1#5335 -ipset=/.postimg.org/gfwlist -server=/.potato.im/127.0.0.1#5335 -ipset=/.potato.im/gfwlist -server=/.potvpn.com/127.0.0.1#5335 -ipset=/.potvpn.com/gfwlist -server=/.power.com/127.0.0.1#5335 -ipset=/.power.com/gfwlist -server=/.powercx.com/127.0.0.1#5335 -ipset=/.powercx.com/gfwlist -server=/.powerphoto.org/127.0.0.1#5335 -ipset=/.powerphoto.org/gfwlist -server=/.prayforchina.net/127.0.0.1#5335 -ipset=/.prayforchina.net/gfwlist -server=/.premeforwindows7.com/127.0.0.1#5335 -ipset=/.premeforwindows7.com/gfwlist -server=/.premproxy.com/127.0.0.1#5335 -ipset=/.premproxy.com/gfwlist -server=/.presentationzen.com/127.0.0.1#5335 -ipset=/.presentationzen.com/gfwlist -server=/.presidentlee.tw/127.0.0.1#5335 -ipset=/.presidentlee.tw/gfwlist -server=/.prestige-av.com/127.0.0.1#5335 -ipset=/.prestige-av.com/gfwlist -server=/.pride.google/127.0.0.1#5335 -ipset=/.pride.google/gfwlist -server=/.prism-break.org/127.0.0.1#5335 -ipset=/.prism-break.org/gfwlist -server=/.prisoneralert.com/127.0.0.1#5335 -ipset=/.prisoneralert.com/gfwlist -server=/.pritunl.com/127.0.0.1#5335 -ipset=/.pritunl.com/gfwlist -server=/.privacybox.de/127.0.0.1#5335 -ipset=/.privacybox.de/gfwlist -server=/.privateinternetaccess.com/127.0.0.1#5335 -ipset=/.privateinternetaccess.com/gfwlist -server=/.privatepaste.com/127.0.0.1#5335 -ipset=/.privatepaste.com/gfwlist -server=/.privatetunnel.com/127.0.0.1#5335 -ipset=/.privatetunnel.com/gfwlist -server=/.privatevpn.com/127.0.0.1#5335 -ipset=/.privatevpn.com/gfwlist -server=/.procopytips.com/127.0.0.1#5335 -ipset=/.procopytips.com/gfwlist -server=/.prosiben.de/127.0.0.1#5335 -ipset=/.prosiben.de/gfwlist -server=/.protonvpn.com/127.0.0.1#5335 -ipset=/.protonvpn.com/gfwlist -server=/.provideocoalition.com/127.0.0.1#5335 -ipset=/.provideocoalition.com/gfwlist -server=/.provpnaccounts.com/127.0.0.1#5335 -ipset=/.provpnaccounts.com/gfwlist -server=/.proxfree.com/127.0.0.1#5335 -ipset=/.proxfree.com/gfwlist -server=/.proxifier.com/127.0.0.1#5335 -ipset=/.proxifier.com/gfwlist -server=/.proxomitron.info/127.0.0.1#5335 -ipset=/.proxomitron.info/gfwlist -server=/.proxpn.com/127.0.0.1#5335 -ipset=/.proxpn.com/gfwlist -server=/.proxyanonimo.es/127.0.0.1#5335 -ipset=/.proxyanonimo.es/gfwlist -server=/.proxydns.com/127.0.0.1#5335 -ipset=/.proxydns.com/gfwlist -server=/.proxylist.org.uk/127.0.0.1#5335 -ipset=/.proxylist.org.uk/gfwlist -server=/.proxynetwork.org.uk/127.0.0.1#5335 -ipset=/.proxynetwork.org.uk/gfwlist -server=/.proxypy.net/127.0.0.1#5335 -ipset=/.proxypy.net/gfwlist -server=/.proxyroad.com/127.0.0.1#5335 -ipset=/.proxyroad.com/gfwlist -server=/.proxytunnel.net/127.0.0.1#5335 -ipset=/.proxytunnel.net/gfwlist -server=/.proyectoclubes.com/127.0.0.1#5335 -ipset=/.proyectoclubes.com/gfwlist -server=/.prozz.net/127.0.0.1#5335 -ipset=/.prozz.net/gfwlist -server=/.psblog.name/127.0.0.1#5335 -ipset=/.psblog.name/gfwlist -server=/.pscp.tv/127.0.0.1#5335 -ipset=/.pscp.tv/gfwlist -server=/.pshvpn.com/127.0.0.1#5335 -ipset=/.pshvpn.com/gfwlist -server=/.psiphon.ca/127.0.0.1#5335 -ipset=/.psiphon.ca/gfwlist -server=/.psiphon.civisec.org/127.0.0.1#5335 -ipset=/.psiphon.civisec.org/gfwlist -server=/.psiphon3.com/127.0.0.1#5335 -ipset=/.psiphon3.com/gfwlist -server=/.psiphontoday.com/127.0.0.1#5335 -ipset=/.psiphontoday.com/gfwlist -server=/.pts.org.tw/127.0.0.1#5335 -ipset=/.pts.org.tw/gfwlist -server=/.ptt.cc/127.0.0.1#5335 -ipset=/.ptt.cc/gfwlist -server=/.pttvan.org/127.0.0.1#5335 -ipset=/.pttvan.org/gfwlist -server=/.pubu.com.tw/127.0.0.1#5335 -ipset=/.pubu.com.tw/gfwlist -server=/.puffinbrowser.com/127.0.0.1#5335 -ipset=/.puffinbrowser.com/gfwlist -server=/.puffstore.com/127.0.0.1#5335 -ipset=/.puffstore.com/gfwlist -server=/.pullfolio.com/127.0.0.1#5335 -ipset=/.pullfolio.com/gfwlist -server=/.pulse.yahoo.com/127.0.0.1#5335 -ipset=/.pulse.yahoo.com/gfwlist -server=/.pure18.com/127.0.0.1#5335 -ipset=/.pure18.com/gfwlist -server=/.pureconcepts.net/127.0.0.1#5335 -ipset=/.pureconcepts.net/gfwlist -server=/.pureinsight.org/127.0.0.1#5335 -ipset=/.pureinsight.org/gfwlist -server=/.purepdf.com/127.0.0.1#5335 -ipset=/.purepdf.com/gfwlist -server=/.purevpn.com/127.0.0.1#5335 -ipset=/.purevpn.com/gfwlist -server=/.purplelotus.org/127.0.0.1#5335 -ipset=/.purplelotus.org/gfwlist -server=/.pursuestar.com/127.0.0.1#5335 -ipset=/.pursuestar.com/gfwlist -server=/.pushchinawall.com/127.0.0.1#5335 -ipset=/.pushchinawall.com/gfwlist -server=/.pussyspace.com/127.0.0.1#5335 -ipset=/.pussyspace.com/gfwlist -server=/.putihome.org/127.0.0.1#5335 -ipset=/.putihome.org/gfwlist -server=/.putty.org/127.0.0.1#5335 -ipset=/.putty.org/gfwlist -server=/.puuko.com/127.0.0.1#5335 -ipset=/.puuko.com/gfwlist -server=/.pwned.com/127.0.0.1#5335 -ipset=/.pwned.com/gfwlist -server=/.python.com/127.0.0.1#5335 -ipset=/.python.com/gfwlist -server=/.pytorch.org/127.0.0.1#5335 -ipset=/.pytorch.org/gfwlist -server=/.qanote.com/127.0.0.1#5335 -ipset=/.qanote.com/gfwlist -server=/.qgirl.com.tw/127.0.0.1#5335 -ipset=/.qgirl.com.tw/gfwlist -server=/.qhigh.com/127.0.0.1#5335 -ipset=/.qhigh.com/gfwlist -server=/.qi-gong.me/127.0.0.1#5335 -ipset=/.qi-gong.me/gfwlist -server=/.qiandao.today/127.0.0.1#5335 -ipset=/.qiandao.today/gfwlist -server=/.qiangyou.org/127.0.0.1#5335 -ipset=/.qiangyou.org/gfwlist -server=/.qidian.ca/127.0.0.1#5335 -ipset=/.qidian.ca/gfwlist -server=/.qienkuen.org/127.0.0.1#5335 -ipset=/.qienkuen.org/gfwlist -server=/.qiwen.lu/127.0.0.1#5335 -ipset=/.qiwen.lu/gfwlist -server=/.qixianglu.cn/127.0.0.1#5335 -ipset=/.qixianglu.cn/gfwlist -server=/.qkshare.com/127.0.0.1#5335 -ipset=/.qkshare.com/gfwlist -server=/.qoos.com/127.0.0.1#5335 -ipset=/.qoos.com/gfwlist -server=/.qpoe.com/127.0.0.1#5335 -ipset=/.qpoe.com/gfwlist -server=/.qq.co.za/127.0.0.1#5335 -ipset=/.qq.co.za/gfwlist -server=/.qstatus.com/127.0.0.1#5335 -ipset=/.qstatus.com/gfwlist -server=/.qtrac.eu/127.0.0.1#5335 -ipset=/.qtrac.eu/gfwlist -server=/.qtweeter.com/127.0.0.1#5335 -ipset=/.qtweeter.com/gfwlist -server=/.quannengshen.org/127.0.0.1#5335 -ipset=/.quannengshen.org/gfwlist -server=/.quantumbooter.net/127.0.0.1#5335 -ipset=/.quantumbooter.net/gfwlist -server=/.questvisual.com/127.0.0.1#5335 -ipset=/.questvisual.com/gfwlist -server=/.quitccp.net/127.0.0.1#5335 -ipset=/.quitccp.net/gfwlist -server=/.quitccp.org/127.0.0.1#5335 -ipset=/.quitccp.org/gfwlist -server=/.quora.com/127.0.0.1#5335 -ipset=/.quora.com/gfwlist -server=/.quoracdn.net/127.0.0.1#5335 -ipset=/.quoracdn.net/gfwlist -server=/.quran.com/127.0.0.1#5335 -ipset=/.quran.com/gfwlist -server=/.quranexplorer.com/127.0.0.1#5335 -ipset=/.quranexplorer.com/gfwlist -server=/.qusi8.net/127.0.0.1#5335 -ipset=/.qusi8.net/gfwlist -server=/.qvodzy.org/127.0.0.1#5335 -ipset=/.qvodzy.org/gfwlist -server=/.qxbbs.org/127.0.0.1#5335 -ipset=/.qxbbs.org/gfwlist -server=/.qz.com/127.0.0.1#5335 -ipset=/.qz.com/gfwlist -server=/.r18.com/127.0.0.1#5335 -ipset=/.r18.com/gfwlist -server=/.ra.gg/127.0.0.1#5335 -ipset=/.ra.gg/gfwlist -server=/.radicalparty.org/127.0.0.1#5335 -ipset=/.radicalparty.org/gfwlist -server=/.radiko.jp/127.0.0.1#5335 -ipset=/.radiko.jp/gfwlist -server=/.radio.garden/127.0.0.1#5335 -ipset=/.radio.garden/gfwlist -server=/.radioaustralia.net.au/127.0.0.1#5335 -ipset=/.radioaustralia.net.au/gfwlist -server=/.radiohilight.net/127.0.0.1#5335 -ipset=/.radiohilight.net/gfwlist -server=/.radiovaticana.org/127.0.0.1#5335 -ipset=/.radiovaticana.org/gfwlist -server=/.radiovncr.com/127.0.0.1#5335 -ipset=/.radiovncr.com/gfwlist -server=/.rael.org/127.0.0.1#5335 -ipset=/.rael.org/gfwlist -server=/.raggedbanner.com/127.0.0.1#5335 -ipset=/.raggedbanner.com/gfwlist -server=/.raidcall.com.tw/127.0.0.1#5335 -ipset=/.raidcall.com.tw/gfwlist -server=/.raidtalk.com.tw/127.0.0.1#5335 -ipset=/.raidtalk.com.tw/gfwlist -server=/.raizoji.or.jp/127.0.0.1#5335 -ipset=/.raizoji.or.jp/gfwlist -server=/.ramcity.com.au/127.0.0.1#5335 -ipset=/.ramcity.com.au/gfwlist -server=/.rangwang.biz/127.0.0.1#5335 -ipset=/.rangwang.biz/gfwlist -server=/.rangzen.com/127.0.0.1#5335 -ipset=/.rangzen.com/gfwlist -server=/.rangzen.net/127.0.0.1#5335 -ipset=/.rangzen.net/gfwlist -server=/.rangzen.org/127.0.0.1#5335 -ipset=/.rangzen.org/gfwlist -server=/.ranyunfei.com/127.0.0.1#5335 -ipset=/.ranyunfei.com/gfwlist -server=/.rapbull.net/127.0.0.1#5335 -ipset=/.rapbull.net/gfwlist -server=/.rapidmoviez.com/127.0.0.1#5335 -ipset=/.rapidmoviez.com/gfwlist -server=/.rapidvpn.com/127.0.0.1#5335 -ipset=/.rapidvpn.com/gfwlist -server=/.rarbgprx.org/127.0.0.1#5335 -ipset=/.rarbgprx.org/gfwlist -server=/.raremovie.cc/127.0.0.1#5335 -ipset=/.raremovie.cc/gfwlist -server=/.raremovie.net/127.0.0.1#5335 -ipset=/.raremovie.net/gfwlist -server=/.rawgit.com/127.0.0.1#5335 -ipset=/.rawgit.com/gfwlist -server=/.rawgithub.com/127.0.0.1#5335 -ipset=/.rawgithub.com/gfwlist -server=/.razyboard.com/127.0.0.1#5335 -ipset=/.razyboard.com/gfwlist -server=/.rcam.target.com/127.0.0.1#5335 -ipset=/.rcam.target.com/gfwlist -server=/.rcinet.ca/127.0.0.1#5335 -ipset=/.rcinet.ca/gfwlist -server=/.rconversation.blogs.com/127.0.0.1#5335 -ipset=/.rconversation.blogs.com/gfwlist -server=/.rd.com/127.0.0.1#5335 -ipset=/.rd.com/gfwlist -server=/.rdio.com/127.0.0.1#5335 -ipset=/.rdio.com/gfwlist -server=/.read01.com/127.0.0.1#5335 -ipset=/.read01.com/gfwlist -server=/.read100.com/127.0.0.1#5335 -ipset=/.read100.com/gfwlist -server=/.readingtimes.com.tw/127.0.0.1#5335 -ipset=/.readingtimes.com.tw/gfwlist -server=/.readmoo.com/127.0.0.1#5335 -ipset=/.readmoo.com/gfwlist -server=/.readydown.com/127.0.0.1#5335 -ipset=/.readydown.com/gfwlist -server=/.realcourage.org/127.0.0.1#5335 -ipset=/.realcourage.org/gfwlist -server=/.realforum.zkiz.com/127.0.0.1#5335 -ipset=/.realforum.zkiz.com/gfwlist -server=/.realitykings.com/127.0.0.1#5335 -ipset=/.realitykings.com/gfwlist -server=/.realraptalk.com/127.0.0.1#5335 -ipset=/.realraptalk.com/gfwlist -server=/.realsexpass.com/127.0.0.1#5335 -ipset=/.realsexpass.com/gfwlist -server=/.reason.com/127.0.0.1#5335 -ipset=/.reason.com/gfwlist -server=/.rebatesrule.net/127.0.0.1#5335 -ipset=/.rebatesrule.net/gfwlist -server=/.recordhistory.org/127.0.0.1#5335 -ipset=/.recordhistory.org/gfwlist -server=/.recovery.org.tw/127.0.0.1#5335 -ipset=/.recovery.org.tw/gfwlist -server=/.recoveryversion.com.tw/127.0.0.1#5335 -ipset=/.recoveryversion.com.tw/gfwlist -server=/.red-lang.org/127.0.0.1#5335 -ipset=/.red-lang.org/gfwlist -server=/.redballoonsolidarity.org/127.0.0.1#5335 -ipset=/.redballoonsolidarity.org/gfwlist -server=/.redchinacn.net/127.0.0.1#5335 -ipset=/.redchinacn.net/gfwlist -server=/.redchinacn.org/127.0.0.1#5335 -ipset=/.redchinacn.org/gfwlist -server=/.redd.it/127.0.0.1#5335 -ipset=/.redd.it/gfwlist -server=/.reddit.com/127.0.0.1#5335 -ipset=/.reddit.com/gfwlist -server=/.redditlist.com/127.0.0.1#5335 -ipset=/.redditlist.com/gfwlist -server=/.redditmedia.com/127.0.0.1#5335 -ipset=/.redditmedia.com/gfwlist -server=/.redditstatic.com/127.0.0.1#5335 -ipset=/.redditstatic.com/gfwlist -server=/.redhotlabs.com/127.0.0.1#5335 -ipset=/.redhotlabs.com/gfwlist -server=/.redtube.com/127.0.0.1#5335 -ipset=/.redtube.com/gfwlist -server=/.referer.us/127.0.0.1#5335 -ipset=/.referer.us/gfwlist -server=/.reflectivecode.com/127.0.0.1#5335 -ipset=/.reflectivecode.com/gfwlist -server=/.registry.google/127.0.0.1#5335 -ipset=/.registry.google/gfwlist -server=/.relaxbbs.com/127.0.0.1#5335 -ipset=/.relaxbbs.com/gfwlist -server=/.relay.com.tw/127.0.0.1#5335 -ipset=/.relay.com.tw/gfwlist -server=/.releaseinternational.org/127.0.0.1#5335 -ipset=/.releaseinternational.org/gfwlist -server=/.religioustolerance.org/127.0.0.1#5335 -ipset=/.religioustolerance.org/gfwlist -server=/.renminbao.com/127.0.0.1#5335 -ipset=/.renminbao.com/gfwlist -server=/.renyurenquan.org/127.0.0.1#5335 -ipset=/.renyurenquan.org/gfwlist -server=/.resilio.com/127.0.0.1#5335 -ipset=/.resilio.com/gfwlist -server=/.resistchina.org/127.0.0.1#5335 -ipset=/.resistchina.org/gfwlist -server=/.retweeteffect.com/127.0.0.1#5335 -ipset=/.retweeteffect.com/gfwlist -server=/.retweetist.com/127.0.0.1#5335 -ipset=/.retweetist.com/gfwlist -server=/.retweetrank.com/127.0.0.1#5335 -ipset=/.retweetrank.com/gfwlist -server=/.reuters.com/127.0.0.1#5335 -ipset=/.reuters.com/gfwlist -server=/.reutersmedia.net/127.0.0.1#5335 -ipset=/.reutersmedia.net/gfwlist -server=/.revleft.com/127.0.0.1#5335 -ipset=/.revleft.com/gfwlist -server=/.revver.com/127.0.0.1#5335 -ipset=/.revver.com/gfwlist -server=/.rfa.org/127.0.0.1#5335 -ipset=/.rfa.org/gfwlist -server=/.rfachina.com/127.0.0.1#5335 -ipset=/.rfachina.com/gfwlist -server=/.rfalive1.akacast.akamaistream.net/127.0.0.1#5335 -ipset=/.rfalive1.akacast.akamaistream.net/gfwlist -server=/.rfamobile.org/127.0.0.1#5335 -ipset=/.rfamobile.org/gfwlist -server=/.rfaweb.org/127.0.0.1#5335 -ipset=/.rfaweb.org/gfwlist -server=/.rferl.org/127.0.0.1#5335 -ipset=/.rferl.org/gfwlist -server=/.rfi.fr/127.0.0.1#5335 -ipset=/.rfi.fr/gfwlist -server=/.rightbtc.com/127.0.0.1#5335 -ipset=/.rightbtc.com/gfwlist -server=/.rigpa.org/127.0.0.1#5335 -ipset=/.rigpa.org/gfwlist -server=/.rileyguide.com/127.0.0.1#5335 -ipset=/.rileyguide.com/gfwlist -server=/.riseup.net/127.0.0.1#5335 -ipset=/.riseup.net/gfwlist -server=/.ritouki.jp/127.0.0.1#5335 -ipset=/.ritouki.jp/gfwlist -server=/.ritter.vg/127.0.0.1#5335 -ipset=/.ritter.vg/gfwlist -server=/.rixcloud.com/127.0.0.1#5335 -ipset=/.rixcloud.com/gfwlist -server=/.rixcloud.us/127.0.0.1#5335 -ipset=/.rixcloud.us/gfwlist -server=/.rlwlw.com/127.0.0.1#5335 -ipset=/.rlwlw.com/gfwlist -server=/.rmjdw.com/127.0.0.1#5335 -ipset=/.rmjdw.com/gfwlist -server=/.rmjdw132.info/127.0.0.1#5335 -ipset=/.rmjdw132.info/gfwlist -server=/.roadshow.hk/127.0.0.1#5335 -ipset=/.roadshow.hk/gfwlist -server=/.roboforex.com/127.0.0.1#5335 -ipset=/.roboforex.com/gfwlist -server=/.robustnessiskey.com/127.0.0.1#5335 -ipset=/.robustnessiskey.com/gfwlist -server=/.rocket-inc.net/127.0.0.1#5335 -ipset=/.rocket-inc.net/gfwlist -server=/.rocksdb.org/127.0.0.1#5335 -ipset=/.rocksdb.org/gfwlist -server=/.rojo.com/127.0.0.1#5335 -ipset=/.rojo.com/gfwlist -server=/.rolia.net/127.0.0.1#5335 -ipset=/.rolia.net/gfwlist -server=/.ronjoneswriter.com/127.0.0.1#5335 -ipset=/.ronjoneswriter.com/gfwlist -server=/.roodo.com/127.0.0.1#5335 -ipset=/.roodo.com/gfwlist -server=/.rosechina.net/127.0.0.1#5335 -ipset=/.rosechina.net/gfwlist -server=/.rotten.com/127.0.0.1#5335 -ipset=/.rotten.com/gfwlist -server=/.rsdlmonitor.com/127.0.0.1#5335 -ipset=/.rsdlmonitor.com/gfwlist -server=/.rsf-chinese.org/127.0.0.1#5335 -ipset=/.rsf-chinese.org/gfwlist -server=/.rsf.org/127.0.0.1#5335 -ipset=/.rsf.org/gfwlist -server=/.rsgamen.org/127.0.0.1#5335 -ipset=/.rsgamen.org/gfwlist -server=/.rssmeme.com/127.0.0.1#5335 -ipset=/.rssmeme.com/gfwlist -server=/.rtalabel.org/127.0.0.1#5335 -ipset=/.rtalabel.org/gfwlist -server=/.rthk.hk/127.0.0.1#5335 -ipset=/.rthk.hk/gfwlist -server=/.rthk.org.hk/127.0.0.1#5335 -ipset=/.rthk.org.hk/gfwlist -server=/.rthklive2-lh.akamaihd.net/127.0.0.1#5335 -ipset=/.rthklive2-lh.akamaihd.net/gfwlist -server=/.rti.org.tw/127.0.0.1#5335 -ipset=/.rti.org.tw/gfwlist -server=/.rtycminnesota.org/127.0.0.1#5335 -ipset=/.rtycminnesota.org/gfwlist -server=/.rukor.org/127.0.0.1#5335 -ipset=/.rukor.org/gfwlist -server=/.runbtx.com/127.0.0.1#5335 -ipset=/.runbtx.com/gfwlist -server=/.rushbee.com/127.0.0.1#5335 -ipset=/.rushbee.com/gfwlist -server=/.ruten.com.tw/127.0.0.1#5335 -ipset=/.ruten.com.tw/gfwlist -server=/.rutube.ru/127.0.0.1#5335 -ipset=/.rutube.ru/gfwlist -server=/.ruyiseek.com/127.0.0.1#5335 -ipset=/.ruyiseek.com/gfwlist -server=/.rxhj.net/127.0.0.1#5335 -ipset=/.rxhj.net/gfwlist -server=/.s-cute.com/127.0.0.1#5335 -ipset=/.s-cute.com/gfwlist -server=/.s-dragon.org/127.0.0.1#5335 -ipset=/.s-dragon.org/gfwlist -server=/.s1.nudezz.com/127.0.0.1#5335 -ipset=/.s1.nudezz.com/gfwlist -server=/.s1heng.com/127.0.0.1#5335 -ipset=/.s1heng.com/gfwlist -server=/.s1s1s1.com/127.0.0.1#5335 -ipset=/.s1s1s1.com/gfwlist -server=/.s3-ap-northeast-1.amazonaws.com/127.0.0.1#5335 -ipset=/.s3-ap-northeast-1.amazonaws.com/gfwlist -server=/.s3-ap-southeast-2.amazonaws.com/127.0.0.1#5335 -ipset=/.s3-ap-southeast-2.amazonaws.com/gfwlist -server=/.s8forum.com/127.0.0.1#5335 -ipset=/.s8forum.com/gfwlist -server=/.sa.hao123.com/127.0.0.1#5335 -ipset=/.sa.hao123.com/gfwlist -server=/.sacks.com/127.0.0.1#5335 -ipset=/.sacks.com/gfwlist -server=/.sacom.hk/127.0.0.1#5335 -ipset=/.sacom.hk/gfwlist -server=/.sadistic-v.com/127.0.0.1#5335 -ipset=/.sadistic-v.com/gfwlist -server=/.sadpanda.us/127.0.0.1#5335 -ipset=/.sadpanda.us/gfwlist -server=/.safervpn.com/127.0.0.1#5335 -ipset=/.safervpn.com/gfwlist -server=/.safety.google/127.0.0.1#5335 -ipset=/.safety.google/gfwlist -server=/.saintyculture.com/127.0.0.1#5335 -ipset=/.saintyculture.com/gfwlist -server=/.saiq.me/127.0.0.1#5335 -ipset=/.saiq.me/gfwlist -server=/.sakuralive.com/127.0.0.1#5335 -ipset=/.sakuralive.com/gfwlist -server=/.sakya.org/127.0.0.1#5335 -ipset=/.sakya.org/gfwlist -server=/.salvation.org.hk/127.0.0.1#5335 -ipset=/.salvation.org.hk/gfwlist -server=/.sambhota.org/127.0.0.1#5335 -ipset=/.sambhota.org/gfwlist -server=/.sanmin.com.tw/127.0.0.1#5335 -ipset=/.sanmin.com.tw/gfwlist -server=/.sapikachu.net/127.0.0.1#5335 -ipset=/.sapikachu.net/gfwlist -server=/.saveliuxiaobo.com/127.0.0.1#5335 -ipset=/.saveliuxiaobo.com/gfwlist -server=/.savemedia.com/127.0.0.1#5335 -ipset=/.savemedia.com/gfwlist -server=/.savethedate.foo/127.0.0.1#5335 -ipset=/.savethedate.foo/gfwlist -server=/.savethesounds.info/127.0.0.1#5335 -ipset=/.savethesounds.info/gfwlist -server=/.savetibet.de/127.0.0.1#5335 -ipset=/.savetibet.de/gfwlist -server=/.savetibet.fr/127.0.0.1#5335 -ipset=/.savetibet.fr/gfwlist -server=/.savetibet.nl/127.0.0.1#5335 -ipset=/.savetibet.nl/gfwlist -server=/.savetibet.org/127.0.0.1#5335 -ipset=/.savetibet.org/gfwlist -server=/.savetibet.ru/127.0.0.1#5335 -ipset=/.savetibet.ru/gfwlist -server=/.savetibetstore.org/127.0.0.1#5335 -ipset=/.savetibetstore.org/gfwlist -server=/.savevid.com/127.0.0.1#5335 -ipset=/.savevid.com/gfwlist -server=/.say2.info/127.0.0.1#5335 -ipset=/.say2.info/gfwlist -server=/.sbme.me/127.0.0.1#5335 -ipset=/.sbme.me/gfwlist -server=/.scache.vzw.com/127.0.0.1#5335 -ipset=/.scache.vzw.com/gfwlist -server=/.scache1.vzw.com/127.0.0.1#5335 -ipset=/.scache1.vzw.com/gfwlist -server=/.scache2.vzw.com/127.0.0.1#5335 -ipset=/.scache2.vzw.com/gfwlist -server=/.scasino.com/127.0.0.1#5335 -ipset=/.scasino.com/gfwlist -server=/.schema.org/127.0.0.1#5335 -ipset=/.schema.org/gfwlist -server=/.sciencenets.com/127.0.0.1#5335 -ipset=/.sciencenets.com/gfwlist -server=/.scieron.com/127.0.0.1#5335 -ipset=/.scieron.com/gfwlist -server=/.scmp.com/127.0.0.1#5335 -ipset=/.scmp.com/gfwlist -server=/.scmpchinese.com/127.0.0.1#5335 -ipset=/.scmpchinese.com/gfwlist -server=/.scramble.io/127.0.0.1#5335 -ipset=/.scramble.io/gfwlist -server=/.scratch.mit.edu/127.0.0.1#5335 -ipset=/.scratch.mit.edu/gfwlist -server=/.scribd.com/127.0.0.1#5335 -ipset=/.scribd.com/gfwlist -server=/.scriptspot.com/127.0.0.1#5335 -ipset=/.scriptspot.com/gfwlist -server=/.seapuff.com/127.0.0.1#5335 -ipset=/.seapuff.com/gfwlist -server=/.search.aol.com/127.0.0.1#5335 -ipset=/.search.aol.com/gfwlist -server=/.search.yahoo.co.jp/127.0.0.1#5335 -ipset=/.search.yahoo.co.jp/gfwlist -server=/.search.yahoo.com/127.0.0.1#5335 -ipset=/.search.yahoo.com/gfwlist -server=/.searchtruth.com/127.0.0.1#5335 -ipset=/.searchtruth.com/gfwlist -server=/.secretchina.com/127.0.0.1#5335 -ipset=/.secretchina.com/gfwlist -server=/.secretgarden.no/127.0.0.1#5335 -ipset=/.secretgarden.no/gfwlist -server=/.secretsline.biz/127.0.0.1#5335 -ipset=/.secretsline.biz/gfwlist -server=/.secure.hustler.com/127.0.0.1#5335 -ipset=/.secure.hustler.com/gfwlist -server=/.secure.logmein.com/127.0.0.1#5335 -ipset=/.secure.logmein.com/gfwlist -server=/.secure.raxcdn.com/127.0.0.1#5335 -ipset=/.secure.raxcdn.com/gfwlist -server=/.securetunnel.com/127.0.0.1#5335 -ipset=/.securetunnel.com/gfwlist -server=/.securityinabox.org/127.0.0.1#5335 -ipset=/.securityinabox.org/gfwlist -server=/.securitykiss.com/127.0.0.1#5335 -ipset=/.securitykiss.com/gfwlist -server=/.seed4.me/127.0.0.1#5335 -ipset=/.seed4.me/gfwlist -server=/.seesmic.com/127.0.0.1#5335 -ipset=/.seesmic.com/gfwlist -server=/.seevpn.com/127.0.0.1#5335 -ipset=/.seevpn.com/gfwlist -server=/.seezone.net/127.0.0.1#5335 -ipset=/.seezone.net/gfwlist -server=/.sejie.com/127.0.0.1#5335 -ipset=/.sejie.com/gfwlist -server=/.sellclassics.com/127.0.0.1#5335 -ipset=/.sellclassics.com/gfwlist -server=/.sendsmtp.com/127.0.0.1#5335 -ipset=/.sendsmtp.com/gfwlist -server=/.sendspace.com/127.0.0.1#5335 -ipset=/.sendspace.com/gfwlist -server=/.servehttp.com/127.0.0.1#5335 -ipset=/.servehttp.com/gfwlist -server=/.serveuser.com/127.0.0.1#5335 -ipset=/.serveuser.com/gfwlist -server=/.serveusers.com/127.0.0.1#5335 -ipset=/.serveusers.com/gfwlist -server=/.sesawe.net/127.0.0.1#5335 -ipset=/.sesawe.net/gfwlist -server=/.sesawe.org/127.0.0.1#5335 -ipset=/.sesawe.org/gfwlist -server=/.sethwklein.net/127.0.0.1#5335 -ipset=/.sethwklein.net/gfwlist -server=/.setn.com/127.0.0.1#5335 -ipset=/.setn.com/gfwlist -server=/.settv.com.tw/127.0.0.1#5335 -ipset=/.settv.com.tw/gfwlist -server=/.sevenload.com/127.0.0.1#5335 -ipset=/.sevenload.com/gfwlist -server=/.sex-11.com/127.0.0.1#5335 -ipset=/.sex-11.com/gfwlist -server=/.sex.com/127.0.0.1#5335 -ipset=/.sex.com/gfwlist -server=/.sex3.com/127.0.0.1#5335 -ipset=/.sex3.com/gfwlist -server=/.sex8.cc/127.0.0.1#5335 -ipset=/.sex8.cc/gfwlist -server=/.sexandsubmission.com/127.0.0.1#5335 -ipset=/.sexandsubmission.com/gfwlist -server=/.sexbot.com/127.0.0.1#5335 -ipset=/.sexbot.com/gfwlist -server=/.sexhu.com/127.0.0.1#5335 -ipset=/.sexhu.com/gfwlist -server=/.sexhuang.com/127.0.0.1#5335 -ipset=/.sexhuang.com/gfwlist -server=/.sexidude.com/127.0.0.1#5335 -ipset=/.sexidude.com/gfwlist -server=/.sexinsex.net/127.0.0.1#5335 -ipset=/.sexinsex.net/gfwlist -server=/.sextvx.com/127.0.0.1#5335 -ipset=/.sextvx.com/gfwlist -server=/.sexxxy.biz/127.0.0.1#5335 -ipset=/.sexxxy.biz/gfwlist -server=/.sfileydy.com/127.0.0.1#5335 -ipset=/.sfileydy.com/gfwlist -server=/.sfshibao.com/127.0.0.1#5335 -ipset=/.sfshibao.com/gfwlist -server=/.sftindia.org/127.0.0.1#5335 -ipset=/.sftindia.org/gfwlist -server=/.sftuk.org/127.0.0.1#5335 -ipset=/.sftuk.org/gfwlist -server=/.shadeyouvpn.com/127.0.0.1#5335 -ipset=/.shadeyouvpn.com/gfwlist -server=/.shadow.ma/127.0.0.1#5335 -ipset=/.shadow.ma/gfwlist -server=/.shadowsky.xyz/127.0.0.1#5335 -ipset=/.shadowsky.xyz/gfwlist -server=/.shadowsocks-r.com/127.0.0.1#5335 -ipset=/.shadowsocks-r.com/gfwlist -server=/.shadowsocks.asia/127.0.0.1#5335 -ipset=/.shadowsocks.asia/gfwlist -server=/.shadowsocks.be/127.0.0.1#5335 -ipset=/.shadowsocks.be/gfwlist -server=/.shadowsocks.com/127.0.0.1#5335 -ipset=/.shadowsocks.com/gfwlist -server=/.shadowsocks.org/127.0.0.1#5335 -ipset=/.shadowsocks.org/gfwlist -server=/.shadowsocks9.com/127.0.0.1#5335 -ipset=/.shadowsocks9.com/gfwlist -server=/.shambalapost.com/127.0.0.1#5335 -ipset=/.shambalapost.com/gfwlist -server=/.shambhalasun.com/127.0.0.1#5335 -ipset=/.shambhalasun.com/gfwlist -server=/.shangfang.org/127.0.0.1#5335 -ipset=/.shangfang.org/gfwlist -server=/.shapeservices.com/127.0.0.1#5335 -ipset=/.shapeservices.com/gfwlist -server=/.share.america.gov/127.0.0.1#5335 -ipset=/.share.america.gov/gfwlist -server=/.share.dmhy.org/127.0.0.1#5335 -ipset=/.share.dmhy.org/gfwlist -server=/.share.youthwant.com.tw/127.0.0.1#5335 -ipset=/.share.youthwant.com.tw/gfwlist -server=/.sharebee.com/127.0.0.1#5335 -ipset=/.sharebee.com/gfwlist -server=/.sharecool.org/127.0.0.1#5335 -ipset=/.sharecool.org/gfwlist -server=/.sharpdaily.com.hk/127.0.0.1#5335 -ipset=/.sharpdaily.com.hk/gfwlist -server=/.sharpdaily.hk/127.0.0.1#5335 -ipset=/.sharpdaily.hk/gfwlist -server=/.sharpdaily.tw/127.0.0.1#5335 -ipset=/.sharpdaily.tw/gfwlist -server=/.shat-tibet.com/127.0.0.1#5335 -ipset=/.shat-tibet.com/gfwlist -server=/.shattered.io/127.0.0.1#5335 -ipset=/.shattered.io/gfwlist -server=/.sheikyermami.com/127.0.0.1#5335 -ipset=/.sheikyermami.com/gfwlist -server=/.shellfire.de/127.0.0.1#5335 -ipset=/.shellfire.de/gfwlist -server=/.shenshou.org/127.0.0.1#5335 -ipset=/.shenshou.org/gfwlist -server=/.shenyun.com/127.0.0.1#5335 -ipset=/.shenyun.com/gfwlist -server=/.shenyunperformingarts.org/127.0.0.1#5335 -ipset=/.shenyunperformingarts.org/gfwlist -server=/.shenzhoufilm.com/127.0.0.1#5335 -ipset=/.shenzhoufilm.com/gfwlist -server=/.sherabgyaltsen.com/127.0.0.1#5335 -ipset=/.sherabgyaltsen.com/gfwlist -server=/.shiatv.net/127.0.0.1#5335 -ipset=/.shiatv.net/gfwlist -server=/.shicheng.org/127.0.0.1#5335 -ipset=/.shicheng.org/gfwlist -server=/.shiksha.com/127.0.0.1#5335 -ipset=/.shiksha.com/gfwlist -server=/.shinychan.com/127.0.0.1#5335 -ipset=/.shinychan.com/gfwlist -server=/.shipcamouflage.com/127.0.0.1#5335 -ipset=/.shipcamouflage.com/gfwlist -server=/.shireyishunjian.com/127.0.0.1#5335 -ipset=/.shireyishunjian.com/gfwlist -server=/.shitaotv.org/127.0.0.1#5335 -ipset=/.shitaotv.org/gfwlist -server=/.shixiao.org/127.0.0.1#5335 -ipset=/.shixiao.org/gfwlist -server=/.shizhao.org/127.0.0.1#5335 -ipset=/.shizhao.org/gfwlist -server=/.shodanhq.com/127.0.0.1#5335 -ipset=/.shodanhq.com/gfwlist -server=/.shooshtime.com/127.0.0.1#5335 -ipset=/.shooshtime.com/gfwlist -server=/.shop2000.com.tw/127.0.0.1#5335 -ipset=/.shop2000.com.tw/gfwlist -server=/.shopee.tw/127.0.0.1#5335 -ipset=/.shopee.tw/gfwlist -server=/.shopping.com/127.0.0.1#5335 -ipset=/.shopping.com/gfwlist -server=/.showbiz.omy.sg/127.0.0.1#5335 -ipset=/.showbiz.omy.sg/gfwlist -server=/.showhaotu.com/127.0.0.1#5335 -ipset=/.showhaotu.com/gfwlist -server=/.showtime.jp/127.0.0.1#5335 -ipset=/.showtime.jp/gfwlist -server=/.shutterstock.com/127.0.0.1#5335 -ipset=/.shutterstock.com/gfwlist -server=/.shwchurch.org/127.0.0.1#5335 -ipset=/.shwchurch.org/gfwlist -server=/.shwchurch3.com/127.0.0.1#5335 -ipset=/.shwchurch3.com/gfwlist -server=/.siddharthasintent.org/127.0.0.1#5335 -ipset=/.siddharthasintent.org/gfwlist -server=/.sidelinesnews.com/127.0.0.1#5335 -ipset=/.sidelinesnews.com/gfwlist -server=/.sidelinessportseatery.com/127.0.0.1#5335 -ipset=/.sidelinessportseatery.com/gfwlist -server=/.sierrafriendsoftibet.org/127.0.0.1#5335 -ipset=/.sierrafriendsoftibet.org/gfwlist -server=/.sijihuisuo.club/127.0.0.1#5335 -ipset=/.sijihuisuo.club/gfwlist -server=/.sijihuisuo.com/127.0.0.1#5335 -ipset=/.sijihuisuo.com/gfwlist -server=/.silkbook.com/127.0.0.1#5335 -ipset=/.silkbook.com/gfwlist -server=/.simbolostwitter.com/127.0.0.1#5335 -ipset=/.simbolostwitter.com/gfwlist -server=/.simplecd.org/127.0.0.1#5335 -ipset=/.simplecd.org/gfwlist -server=/.simpleproductivityblog.com/127.0.0.1#5335 -ipset=/.simpleproductivityblog.com/gfwlist -server=/.singaporepools.com.sg/127.0.0.1#5335 -ipset=/.singaporepools.com.sg/gfwlist -server=/.singfortibet.com/127.0.0.1#5335 -ipset=/.singfortibet.com/gfwlist -server=/.singpao.com.hk/127.0.0.1#5335 -ipset=/.singpao.com.hk/gfwlist -server=/.singtao.com/127.0.0.1#5335 -ipset=/.singtao.com/gfwlist -server=/.singtaousa.com/127.0.0.1#5335 -ipset=/.singtaousa.com/gfwlist -server=/.sino-monthly.com/127.0.0.1#5335 -ipset=/.sino-monthly.com/gfwlist -server=/.sinoants.com/127.0.0.1#5335 -ipset=/.sinoants.com/gfwlist -server=/.sinocast.com/127.0.0.1#5335 -ipset=/.sinocast.com/gfwlist -server=/.sinocism.com/127.0.0.1#5335 -ipset=/.sinocism.com/gfwlist -server=/.sinomontreal.ca/127.0.0.1#5335 -ipset=/.sinomontreal.ca/gfwlist -server=/.sinonet.ca/127.0.0.1#5335 -ipset=/.sinonet.ca/gfwlist -server=/.sinopitt.info/127.0.0.1#5335 -ipset=/.sinopitt.info/gfwlist -server=/.sinoquebec.com/127.0.0.1#5335 -ipset=/.sinoquebec.com/gfwlist -server=/.sis.xxx/127.0.0.1#5335 -ipset=/.sis.xxx/gfwlist -server=/.sis001.com/127.0.0.1#5335 -ipset=/.sis001.com/gfwlist -server=/.sis001.us/127.0.0.1#5335 -ipset=/.sis001.us/gfwlist -server=/.site2unblock.com/127.0.0.1#5335 -ipset=/.site2unblock.com/gfwlist -server=/.site90.net/127.0.0.1#5335 -ipset=/.site90.net/gfwlist -server=/.sitebro.tw/127.0.0.1#5335 -ipset=/.sitebro.tw/gfwlist -server=/.sitekreator.com/127.0.0.1#5335 -ipset=/.sitekreator.com/gfwlist -server=/.siteks.uk.to/127.0.0.1#5335 -ipset=/.siteks.uk.to/gfwlist -server=/.sitemaps.org/127.0.0.1#5335 -ipset=/.sitemaps.org/gfwlist -server=/.six-degrees.io/127.0.0.1#5335 -ipset=/.six-degrees.io/gfwlist -server=/.sixth.biz/127.0.0.1#5335 -ipset=/.sixth.biz/gfwlist -server=/.sjrt.org/127.0.0.1#5335 -ipset=/.sjrt.org/gfwlist -server=/.sjum.cn/127.0.0.1#5335 -ipset=/.sjum.cn/gfwlist -server=/.sketchappsources.com/127.0.0.1#5335 -ipset=/.sketchappsources.com/gfwlist -server=/.skimtube.com/127.0.0.1#5335 -ipset=/.skimtube.com/gfwlist -server=/.skybet.com/127.0.0.1#5335 -ipset=/.skybet.com/gfwlist -server=/.skyking.com.tw/127.0.0.1#5335 -ipset=/.skyking.com.tw/gfwlist -server=/.skyvegas.com/127.0.0.1#5335 -ipset=/.skyvegas.com/gfwlist -server=/.skyxvpn.com/127.0.0.1#5335 -ipset=/.skyxvpn.com/gfwlist -server=/.slacker.com/127.0.0.1#5335 -ipset=/.slacker.com/gfwlist -server=/.slaytizle.com/127.0.0.1#5335 -ipset=/.slaytizle.com/gfwlist -server=/.sleazydream.com/127.0.0.1#5335 -ipset=/.sleazydream.com/gfwlist -server=/.slheng.com/127.0.0.1#5335 -ipset=/.slheng.com/gfwlist -server=/.slickvpn.com/127.0.0.1#5335 -ipset=/.slickvpn.com/gfwlist -server=/.slideshare.net/127.0.0.1#5335 -ipset=/.slideshare.net/gfwlist -server=/.slinkset.com/127.0.0.1#5335 -ipset=/.slinkset.com/gfwlist -server=/.slutload.com/127.0.0.1#5335 -ipset=/.slutload.com/gfwlist -server=/.slutmoonbeam.com/127.0.0.1#5335 -ipset=/.slutmoonbeam.com/gfwlist -server=/.slyip.com/127.0.0.1#5335 -ipset=/.slyip.com/gfwlist -server=/.slyip.net/127.0.0.1#5335 -ipset=/.slyip.net/gfwlist -server=/.sm-miracle.com/127.0.0.1#5335 -ipset=/.sm-miracle.com/gfwlist -server=/.smartdnsproxy.com/127.0.0.1#5335 -ipset=/.smartdnsproxy.com/gfwlist -server=/.smarthide.com/127.0.0.1#5335 -ipset=/.smarthide.com/gfwlist -server=/.smchbooks.com/127.0.0.1#5335 -ipset=/.smchbooks.com/gfwlist -server=/.smhric.org/127.0.0.1#5335 -ipset=/.smhric.org/gfwlist -server=/.smyxy.org/127.0.0.1#5335 -ipset=/.smyxy.org/gfwlist -server=/.snapchat.com/127.0.0.1#5335 -ipset=/.snapchat.com/gfwlist -server=/.snaptu.com/127.0.0.1#5335 -ipset=/.snaptu.com/gfwlist -server=/.sndcdn.com/127.0.0.1#5335 -ipset=/.sndcdn.com/gfwlist -server=/.sneakme.net/127.0.0.1#5335 -ipset=/.sneakme.net/gfwlist -server=/.snowlionpub.com/127.0.0.1#5335 -ipset=/.snowlionpub.com/gfwlist -server=/.sobees.com/127.0.0.1#5335 -ipset=/.sobees.com/gfwlist -server=/.soc.mil/127.0.0.1#5335 -ipset=/.soc.mil/gfwlist -server=/.socialwhale.com/127.0.0.1#5335 -ipset=/.socialwhale.com/gfwlist -server=/.socks-proxy.net/127.0.0.1#5335 -ipset=/.socks-proxy.net/gfwlist -server=/.sockscap64.com/127.0.0.1#5335 -ipset=/.sockscap64.com/gfwlist -server=/.sockslist.net/127.0.0.1#5335 -ipset=/.sockslist.net/gfwlist -server=/.socrec.org/127.0.0.1#5335 -ipset=/.socrec.org/gfwlist -server=/.sod.co.jp/127.0.0.1#5335 -ipset=/.sod.co.jp/gfwlist -server=/.softether-download.com/127.0.0.1#5335 -ipset=/.softether-download.com/gfwlist -server=/.softether.co.jp/127.0.0.1#5335 -ipset=/.softether.co.jp/gfwlist -server=/.softether.org/127.0.0.1#5335 -ipset=/.softether.org/gfwlist -server=/.softfamous.com/127.0.0.1#5335 -ipset=/.softfamous.com/gfwlist -server=/.softsmirror.cf/127.0.0.1#5335 -ipset=/.softsmirror.cf/gfwlist -server=/.softwarebychuck.com/127.0.0.1#5335 -ipset=/.softwarebychuck.com/gfwlist -server=/.softwaredownload.gitbooks.io/127.0.0.1#5335 -ipset=/.softwaredownload.gitbooks.io/gfwlist -server=/.sogclub.com/127.0.0.1#5335 -ipset=/.sogclub.com/gfwlist -server=/.sogrady.me/127.0.0.1#5335 -ipset=/.sogrady.me/gfwlist -server=/.soh.tw/127.0.0.1#5335 -ipset=/.soh.tw/gfwlist -server=/.sohcradio.com/127.0.0.1#5335 -ipset=/.sohcradio.com/gfwlist -server=/.sohfrance.org/127.0.0.1#5335 -ipset=/.sohfrance.org/gfwlist -server=/.sokamonline.com/127.0.0.1#5335 -ipset=/.sokamonline.com/gfwlist -server=/.sokmil.com/127.0.0.1#5335 -ipset=/.sokmil.com/gfwlist -server=/.solarsystem.nasa.gov/127.0.0.1#5335 -ipset=/.solarsystem.nasa.gov/gfwlist -server=/.solidaritetibet.org/127.0.0.1#5335 -ipset=/.solidaritetibet.org/gfwlist -server=/.solidfiles.com/127.0.0.1#5335 -ipset=/.solidfiles.com/gfwlist -server=/.somee.com/127.0.0.1#5335 -ipset=/.somee.com/gfwlist -server=/.songjianjun.com/127.0.0.1#5335 -ipset=/.songjianjun.com/gfwlist -server=/.sonicbbs.cc/127.0.0.1#5335 -ipset=/.sonicbbs.cc/gfwlist -server=/.sonidodelaesperanza.org/127.0.0.1#5335 -ipset=/.sonidodelaesperanza.org/gfwlist -server=/.sopcast.com/127.0.0.1#5335 -ipset=/.sopcast.com/gfwlist -server=/.sopcast.org/127.0.0.1#5335 -ipset=/.sopcast.org/gfwlist -server=/.sorazone.net/127.0.0.1#5335 -ipset=/.sorazone.net/gfwlist -server=/.sorting-algorithms.com/127.0.0.1#5335 -ipset=/.sorting-algorithms.com/gfwlist -server=/.sos.org/127.0.0.1#5335 -ipset=/.sos.org/gfwlist -server=/.sosreader.com/127.0.0.1#5335 -ipset=/.sosreader.com/gfwlist -server=/.sostibet.org/127.0.0.1#5335 -ipset=/.sostibet.org/gfwlist -server=/.soubory.com/127.0.0.1#5335 -ipset=/.soubory.com/gfwlist -server=/.soul-plus.net/127.0.0.1#5335 -ipset=/.soul-plus.net/gfwlist -server=/.soulcaliburhentai.net/127.0.0.1#5335 -ipset=/.soulcaliburhentai.net/gfwlist -server=/.soumo.info/127.0.0.1#5335 -ipset=/.soumo.info/gfwlist -server=/.soundcloud.com/127.0.0.1#5335 -ipset=/.soundcloud.com/gfwlist -server=/.soundofhope.kr/127.0.0.1#5335 -ipset=/.soundofhope.kr/gfwlist -server=/.soundofhope.org/127.0.0.1#5335 -ipset=/.soundofhope.org/gfwlist -server=/.soup.io/127.0.0.1#5335 -ipset=/.soup.io/gfwlist -server=/.soupofmedia.com/127.0.0.1#5335 -ipset=/.soupofmedia.com/gfwlist -server=/.sourcewadio.com/127.0.0.1#5335 -ipset=/.sourcewadio.com/gfwlist -server=/.southnews.com.tw/127.0.0.1#5335 -ipset=/.southnews.com.tw/gfwlist -server=/.sowers.org.hk/127.0.0.1#5335 -ipset=/.sowers.org.hk/gfwlist -server=/.soylentnews.org/127.0.0.1#5335 -ipset=/.soylentnews.org/gfwlist -server=/.spaces.hightail.com/127.0.0.1#5335 -ipset=/.spaces.hightail.com/gfwlist -server=/.spankbang.com/127.0.0.1#5335 -ipset=/.spankbang.com/gfwlist -server=/.spankingtube.com/127.0.0.1#5335 -ipset=/.spankingtube.com/gfwlist -server=/.spankwire.com/127.0.0.1#5335 -ipset=/.spankwire.com/gfwlist -server=/.spb.com/127.0.0.1#5335 -ipset=/.spb.com/gfwlist -server=/.speakerdeck.com/127.0.0.1#5335 -ipset=/.speakerdeck.com/gfwlist -server=/.specxinzl.jigsy.com/127.0.0.1#5335 -ipset=/.specxinzl.jigsy.com/gfwlist -server=/.speedify.com/127.0.0.1#5335 -ipset=/.speedify.com/gfwlist -server=/.spem.at/127.0.0.1#5335 -ipset=/.spem.at/gfwlist -server=/.spencertipping.com/127.0.0.1#5335 -ipset=/.spencertipping.com/gfwlist -server=/.spendee.com/127.0.0.1#5335 -ipset=/.spendee.com/gfwlist -server=/.spicevpn.com/127.0.0.1#5335 -ipset=/.spicevpn.com/gfwlist -server=/.spideroak.com/127.0.0.1#5335 -ipset=/.spideroak.com/gfwlist -server=/.spike.com/127.0.0.1#5335 -ipset=/.spike.com/gfwlist -server=/.sports.williamhill.com/127.0.0.1#5335 -ipset=/.sports.williamhill.com/gfwlist -server=/.spotflux.com/127.0.0.1#5335 -ipset=/.spotflux.com/gfwlist -server=/.spotify.com/127.0.0.1#5335 -ipset=/.spotify.com/gfwlist -server=/.spreadshirt.es/127.0.0.1#5335 -ipset=/.spreadshirt.es/gfwlist -server=/.spring4u.info/127.0.0.1#5335 -ipset=/.spring4u.info/gfwlist -server=/.springboardplatform.com/127.0.0.1#5335 -ipset=/.springboardplatform.com/gfwlist -server=/.sprite.org/127.0.0.1#5335 -ipset=/.sprite.org/gfwlist -server=/.sproutcore.com/127.0.0.1#5335 -ipset=/.sproutcore.com/gfwlist -server=/.sproxy.info/127.0.0.1#5335 -ipset=/.sproxy.info/gfwlist -server=/.squirly.info/127.0.0.1#5335 -ipset=/.squirly.info/gfwlist -server=/.srocket.us/127.0.0.1#5335 -ipset=/.srocket.us/gfwlist -server=/.ss-link.com/127.0.0.1#5335 -ipset=/.ss-link.com/gfwlist -server=/.ss.carryzhou.com/127.0.0.1#5335 -ipset=/.ss.carryzhou.com/gfwlist -server=/.ss.levyhsu.com/127.0.0.1#5335 -ipset=/.ss.levyhsu.com/gfwlist -server=/.ss7.vzw.com/127.0.0.1#5335 -ipset=/.ss7.vzw.com/gfwlist -server=/.ssglobal.co/127.0.0.1#5335 -ipset=/.ssglobal.co/gfwlist -server=/.ssglobal.me/127.0.0.1#5335 -ipset=/.ssglobal.me/gfwlist -server=/.ssh91.com/127.0.0.1#5335 -ipset=/.ssh91.com/gfwlist -server=/.ssl.webpack.de/127.0.0.1#5335 -ipset=/.ssl.webpack.de/gfwlist -server=/.ssl443.org/127.0.0.1#5335 -ipset=/.ssl443.org/gfwlist -server=/.sspanel.net/127.0.0.1#5335 -ipset=/.sspanel.net/gfwlist -server=/.sspro.ml/127.0.0.1#5335 -ipset=/.sspro.ml/gfwlist -server=/.ssr.tools/127.0.0.1#5335 -ipset=/.ssr.tools/gfwlist -server=/.ssrshare.com/127.0.0.1#5335 -ipset=/.ssrshare.com/gfwlist -server=/.sss.camp/127.0.0.1#5335 -ipset=/.sss.camp/gfwlist -server=/.sstmlt.moe/127.0.0.1#5335 -ipset=/.sstmlt.moe/gfwlist -server=/.sstmlt.net/127.0.0.1#5335 -ipset=/.sstmlt.net/gfwlist -server=/.stage64.hk/127.0.0.1#5335 -ipset=/.stage64.hk/gfwlist -server=/.standupfortibet.org/127.0.0.1#5335 -ipset=/.standupfortibet.org/gfwlist -server=/.standwithhk.org/127.0.0.1#5335 -ipset=/.standwithhk.org/gfwlist -server=/.starfishfx.com/127.0.0.1#5335 -ipset=/.starfishfx.com/gfwlist -server=/.starp2p.com/127.0.0.1#5335 -ipset=/.starp2p.com/gfwlist -server=/.startpage.com/127.0.0.1#5335 -ipset=/.startpage.com/gfwlist -server=/.startuplivingchina.com/127.0.0.1#5335 -ipset=/.startuplivingchina.com/gfwlist -server=/.stat.gov.tw/127.0.0.1#5335 -ipset=/.stat.gov.tw/gfwlist -server=/.static-economist.com/127.0.0.1#5335 -ipset=/.static-economist.com/gfwlist -server=/.static.comico.tw/127.0.0.1#5335 -ipset=/.static.comico.tw/gfwlist -server=/.static.shemalez.com/127.0.0.1#5335 -ipset=/.static.shemalez.com/gfwlist -server=/.static01.nyt.com/127.0.0.1#5335 -ipset=/.static01.nyt.com/gfwlist -server=/.staticflickr.com/127.0.0.1#5335 -ipset=/.staticflickr.com/gfwlist -server=/.statueofdemocracy.org/127.0.0.1#5335 -ipset=/.statueofdemocracy.org/gfwlist -server=/.stc.com.sa/127.0.0.1#5335 -ipset=/.stc.com.sa/gfwlist -server=/.steamcommunity.com/127.0.0.1#5335 -ipset=/.steamcommunity.com/gfwlist -server=/.steel-storm.com/127.0.0.1#5335 -ipset=/.steel-storm.com/gfwlist -server=/.steemit.com/127.0.0.1#5335 -ipset=/.steemit.com/gfwlist -server=/.steganos.com/127.0.0.1#5335 -ipset=/.steganos.com/gfwlist -server=/.steganos.net/127.0.0.1#5335 -ipset=/.steganos.net/gfwlist -server=/.stepchina.com/127.0.0.1#5335 -ipset=/.stepchina.com/gfwlist -server=/.stephaniered.com/127.0.0.1#5335 -ipset=/.stephaniered.com/gfwlist -server=/.sthoo.com/127.0.0.1#5335 -ipset=/.sthoo.com/gfwlist -server=/.stickam.com/127.0.0.1#5335 -ipset=/.stickam.com/gfwlist -server=/.stileproject.com/127.0.0.1#5335 -ipset=/.stileproject.com/gfwlist -server=/.sto.cc/127.0.0.1#5335 -ipset=/.sto.cc/gfwlist -server=/.stoporganharvesting.org/127.0.0.1#5335 -ipset=/.stoporganharvesting.org/gfwlist -server=/.stoptibetcrisis.net/127.0.0.1#5335 -ipset=/.stoptibetcrisis.net/gfwlist -server=/.storagenewsletter.com/127.0.0.1#5335 -ipset=/.storagenewsletter.com/gfwlist -server=/.stories.google/127.0.0.1#5335 -ipset=/.stories.google/gfwlist -server=/.storify.com/127.0.0.1#5335 -ipset=/.storify.com/gfwlist -server=/.storm.mg/127.0.0.1#5335 -ipset=/.storm.mg/gfwlist -server=/.stormmediagroup.com/127.0.0.1#5335 -ipset=/.stormmediagroup.com/gfwlist -server=/.stoweboyd.com/127.0.0.1#5335 -ipset=/.stoweboyd.com/gfwlist -server=/.stranabg.com/127.0.0.1#5335 -ipset=/.stranabg.com/gfwlist -server=/.straplessdildo.com/127.0.0.1#5335 -ipset=/.straplessdildo.com/gfwlist -server=/.streamingthe.net/127.0.0.1#5335 -ipset=/.streamingthe.net/gfwlist -server=/.strikingly.com/127.0.0.1#5335 -ipset=/.strikingly.com/gfwlist -server=/.strongvpn.com/127.0.0.1#5335 -ipset=/.strongvpn.com/gfwlist -server=/.strongwindpress.com/127.0.0.1#5335 -ipset=/.strongwindpress.com/gfwlist -server=/.studentsforafreetibet.org/127.0.0.1#5335 -ipset=/.studentsforafreetibet.org/gfwlist -server=/.stumbleupon.com/127.0.0.1#5335 -ipset=/.stumbleupon.com/gfwlist -server=/.stupidvideos.com/127.0.0.1#5335 -ipset=/.stupidvideos.com/gfwlist -server=/.subacme.rerouted.org/127.0.0.1#5335 -ipset=/.subacme.rerouted.org/gfwlist -server=/.successfn.com/127.0.0.1#5335 -ipset=/.successfn.com/gfwlist -server=/.sugarsync.com/127.0.0.1#5335 -ipset=/.sugarsync.com/gfwlist -server=/.sugobbs.com/127.0.0.1#5335 -ipset=/.sugobbs.com/gfwlist -server=/.sugumiru18.com/127.0.0.1#5335 -ipset=/.sugumiru18.com/gfwlist -server=/.suissl.com/127.0.0.1#5335 -ipset=/.suissl.com/gfwlist -server=/.sujiatun.wordpress.com/127.0.0.1#5335 -ipset=/.sujiatun.wordpress.com/gfwlist -server=/.sukebei.nyaa.si/127.0.0.1#5335 -ipset=/.sukebei.nyaa.si/gfwlist -server=/.sulian.me/127.0.0.1#5335 -ipset=/.sulian.me/gfwlist -server=/.summify.com/127.0.0.1#5335 -ipset=/.summify.com/gfwlist -server=/.sumrando.com/127.0.0.1#5335 -ipset=/.sumrando.com/gfwlist -server=/.sun1911.com/127.0.0.1#5335 -ipset=/.sun1911.com/gfwlist -server=/.sunmedia.ca/127.0.0.1#5335 -ipset=/.sunmedia.ca/gfwlist -server=/.sunporno.com/127.0.0.1#5335 -ipset=/.sunporno.com/gfwlist -server=/.sunskyforum.com/127.0.0.1#5335 -ipset=/.sunskyforum.com/gfwlist -server=/.sunta.com.tw/127.0.0.1#5335 -ipset=/.sunta.com.tw/gfwlist -server=/.sunvpn.net/127.0.0.1#5335 -ipset=/.sunvpn.net/gfwlist -server=/.sunwinism.joinbbs.net/127.0.0.1#5335 -ipset=/.sunwinism.joinbbs.net/gfwlist -server=/.suoluo.org/127.0.0.1#5335 -ipset=/.suoluo.org/gfwlist -server=/.supchina.com/127.0.0.1#5335 -ipset=/.supchina.com/gfwlist -server=/.superfreevpn.com/127.0.0.1#5335 -ipset=/.superfreevpn.com/gfwlist -server=/.superokayama.com/127.0.0.1#5335 -ipset=/.superokayama.com/gfwlist -server=/.superpages.com/127.0.0.1#5335 -ipset=/.superpages.com/gfwlist -server=/.supervpn.net/127.0.0.1#5335 -ipset=/.supervpn.net/gfwlist -server=/.superzooi.com/127.0.0.1#5335 -ipset=/.superzooi.com/gfwlist -server=/.suppig.net/127.0.0.1#5335 -ipset=/.suppig.net/gfwlist -server=/.suprememastertv.com/127.0.0.1#5335 -ipset=/.suprememastertv.com/gfwlist -server=/.surfeasy.com/127.0.0.1#5335 -ipset=/.surfeasy.com/gfwlist -server=/.suroot.com/127.0.0.1#5335 -ipset=/.suroot.com/gfwlist -server=/.surrenderat20.net/127.0.0.1#5335 -ipset=/.surrenderat20.net/gfwlist -server=/.sustainability.google/127.0.0.1#5335 -ipset=/.sustainability.google/gfwlist -server=/.suyangg.com/127.0.0.1#5335 -ipset=/.suyangg.com/gfwlist -server=/.svsfx.com/127.0.0.1#5335 -ipset=/.svsfx.com/gfwlist -server=/.swagbucks.com/127.0.0.1#5335 -ipset=/.swagbucks.com/gfwlist -server=/.swissinfo.ch/127.0.0.1#5335 -ipset=/.swissinfo.ch/gfwlist -server=/.swissvpn.net/127.0.0.1#5335 -ipset=/.swissvpn.net/gfwlist -server=/.switch1.jp/127.0.0.1#5335 -ipset=/.switch1.jp/gfwlist -server=/.switchvpn.net/127.0.0.1#5335 -ipset=/.switchvpn.net/gfwlist -server=/.sydneytoday.com/127.0.0.1#5335 -ipset=/.sydneytoday.com/gfwlist -server=/.sylfoundation.org/127.0.0.1#5335 -ipset=/.sylfoundation.org/gfwlist -server=/.syncback.com/127.0.0.1#5335 -ipset=/.syncback.com/gfwlist -server=/.synergyse.com/127.0.0.1#5335 -ipset=/.synergyse.com/gfwlist -server=/.sysresccd.org/127.0.0.1#5335 -ipset=/.sysresccd.org/gfwlist -server=/.sytes.net/127.0.0.1#5335 -ipset=/.sytes.net/gfwlist -server=/.szbbs.net/127.0.0.1#5335 -ipset=/.szbbs.net/gfwlist -server=/.szetowah.org.hk/127.0.0.1#5335 -ipset=/.szetowah.org.hk/gfwlist -server=/.t-g.com/127.0.0.1#5335 -ipset=/.t-g.com/gfwlist -server=/.t.co/127.0.0.1#5335 -ipset=/.t.co/gfwlist -server=/.t.me/127.0.0.1#5335 -ipset=/.t.me/gfwlist -server=/.t.orzdream.com/127.0.0.1#5335 -ipset=/.t.orzdream.com/gfwlist -server=/.t35.com/127.0.0.1#5335 -ipset=/.t35.com/gfwlist -server=/.t66y.com/127.0.0.1#5335 -ipset=/.t66y.com/gfwlist -server=/.taa-usa.org/127.0.0.1#5335 -ipset=/.taa-usa.org/gfwlist -server=/.taaze.tw/127.0.0.1#5335 -ipset=/.taaze.tw/gfwlist -server=/.tabtter.jp/127.0.0.1#5335 -ipset=/.tabtter.jp/gfwlist -server=/.tacc.cwb.gov.tw/127.0.0.1#5335 -ipset=/.tacc.cwb.gov.tw/gfwlist -server=/.tacem.org/127.0.0.1#5335 -ipset=/.tacem.org/gfwlist -server=/.taconet.com.tw/127.0.0.1#5335 -ipset=/.taconet.com.tw/gfwlist -server=/.taedp.org.tw/127.0.0.1#5335 -ipset=/.taedp.org.tw/gfwlist -server=/.tafm.org/127.0.0.1#5335 -ipset=/.tafm.org/gfwlist -server=/.tagwa.org.au/127.0.0.1#5335 -ipset=/.tagwa.org.au/gfwlist -server=/.tagwalk.com/127.0.0.1#5335 -ipset=/.tagwalk.com/gfwlist -server=/.tahr.org.tw/127.0.0.1#5335 -ipset=/.tahr.org.tw/gfwlist -server=/.taipei.gov.tw/127.0.0.1#5335 -ipset=/.taipei.gov.tw/gfwlist -server=/.taipeisociety.org/127.0.0.1#5335 -ipset=/.taipeisociety.org/gfwlist -server=/.taiwan-sex.com/127.0.0.1#5335 -ipset=/.taiwan-sex.com/gfwlist -server=/.taiwanbible.com/127.0.0.1#5335 -ipset=/.taiwanbible.com/gfwlist -server=/.taiwancon.com/127.0.0.1#5335 -ipset=/.taiwancon.com/gfwlist -server=/.taiwandaily.net/127.0.0.1#5335 -ipset=/.taiwandaily.net/gfwlist -server=/.taiwandc.org/127.0.0.1#5335 -ipset=/.taiwandc.org/gfwlist -server=/.taiwanjobs.gov.tw/127.0.0.1#5335 -ipset=/.taiwanjobs.gov.tw/gfwlist -server=/.taiwanjustice.com/127.0.0.1#5335 -ipset=/.taiwanjustice.com/gfwlist -server=/.taiwanjustice.net/127.0.0.1#5335 -ipset=/.taiwanjustice.net/gfwlist -server=/.taiwankiss.com/127.0.0.1#5335 -ipset=/.taiwankiss.com/gfwlist -server=/.taiwannation.50webs.com/127.0.0.1#5335 -ipset=/.taiwannation.50webs.com/gfwlist -server=/.taiwannation.com/127.0.0.1#5335 -ipset=/.taiwannation.com/gfwlist -server=/.taiwanncf.org.tw/127.0.0.1#5335 -ipset=/.taiwanncf.org.tw/gfwlist -server=/.taiwannews.com.tw/127.0.0.1#5335 -ipset=/.taiwannews.com.tw/gfwlist -server=/.taiwantp.net/127.0.0.1#5335 -ipset=/.taiwantp.net/gfwlist -server=/.taiwantt.org.tw/127.0.0.1#5335 -ipset=/.taiwantt.org.tw/gfwlist -server=/.taiwanus.net/127.0.0.1#5335 -ipset=/.taiwanus.net/gfwlist -server=/.taiwanyes.com/127.0.0.1#5335 -ipset=/.taiwanyes.com/gfwlist -server=/.taiwanyes.ning.com/127.0.0.1#5335 -ipset=/.taiwanyes.ning.com/gfwlist -server=/.talk853.com/127.0.0.1#5335 -ipset=/.talk853.com/gfwlist -server=/.talkboxapp.com/127.0.0.1#5335 -ipset=/.talkboxapp.com/gfwlist -server=/.talkcc.com/127.0.0.1#5335 -ipset=/.talkcc.com/gfwlist -server=/.talkonly.net/127.0.0.1#5335 -ipset=/.talkonly.net/gfwlist -server=/.tamiaode.tk/127.0.0.1#5335 -ipset=/.tamiaode.tk/gfwlist -server=/.tanc.org/127.0.0.1#5335 -ipset=/.tanc.org/gfwlist -server=/.tangben.com/127.0.0.1#5335 -ipset=/.tangben.com/gfwlist -server=/.tangren.us/127.0.0.1#5335 -ipset=/.tangren.us/gfwlist -server=/.taoism.net/127.0.0.1#5335 -ipset=/.taoism.net/gfwlist -server=/.taolun.info/127.0.0.1#5335 -ipset=/.taolun.info/gfwlist -server=/.tapanwap.com/127.0.0.1#5335 -ipset=/.tapanwap.com/gfwlist -server=/.tapatalk.com/127.0.0.1#5335 -ipset=/.tapatalk.com/gfwlist -server=/.tascn.com.au/127.0.0.1#5335 -ipset=/.tascn.com.au/gfwlist -server=/.taup.net/127.0.0.1#5335 -ipset=/.taup.net/gfwlist -server=/.taweet.com/127.0.0.1#5335 -ipset=/.taweet.com/gfwlist -server=/.tbcollege.org/127.0.0.1#5335 -ipset=/.tbcollege.org/gfwlist -server=/.tbi.org.hk/127.0.0.1#5335 -ipset=/.tbi.org.hk/gfwlist -server=/.tbicn.org/127.0.0.1#5335 -ipset=/.tbicn.org/gfwlist -server=/.tbjyt.org/127.0.0.1#5335 -ipset=/.tbjyt.org/gfwlist -server=/.tbpic.info/127.0.0.1#5335 -ipset=/.tbpic.info/gfwlist -server=/.tbrc.org/127.0.0.1#5335 -ipset=/.tbrc.org/gfwlist -server=/.tbs-rainbow.org/127.0.0.1#5335 -ipset=/.tbs-rainbow.org/gfwlist -server=/.tbsec.org/127.0.0.1#5335 -ipset=/.tbsec.org/gfwlist -server=/.tbskkinabalu.page.tl/127.0.0.1#5335 -ipset=/.tbskkinabalu.page.tl/gfwlist -server=/.tbsmalaysia.org/127.0.0.1#5335 -ipset=/.tbsmalaysia.org/gfwlist -server=/.tbsn.org/127.0.0.1#5335 -ipset=/.tbsn.org/gfwlist -server=/.tbsseattle.org/127.0.0.1#5335 -ipset=/.tbsseattle.org/gfwlist -server=/.tbssqh.org/127.0.0.1#5335 -ipset=/.tbssqh.org/gfwlist -server=/.tbswd.org/127.0.0.1#5335 -ipset=/.tbswd.org/gfwlist -server=/.tbtemple.org.uk/127.0.0.1#5335 -ipset=/.tbtemple.org.uk/gfwlist -server=/.tbthouston.org/127.0.0.1#5335 -ipset=/.tbthouston.org/gfwlist -server=/.tccwonline.org/127.0.0.1#5335 -ipset=/.tccwonline.org/gfwlist -server=/.tcewf.org/127.0.0.1#5335 -ipset=/.tcewf.org/gfwlist -server=/.tchrd.org/127.0.0.1#5335 -ipset=/.tchrd.org/gfwlist -server=/.tcnynj.org/127.0.0.1#5335 -ipset=/.tcnynj.org/gfwlist -server=/.tcpspeed.co/127.0.0.1#5335 -ipset=/.tcpspeed.co/gfwlist -server=/.tcpspeed.com/127.0.0.1#5335 -ipset=/.tcpspeed.com/gfwlist -server=/.tcsofbc.org/127.0.0.1#5335 -ipset=/.tcsofbc.org/gfwlist -server=/.tcsovi.org/127.0.0.1#5335 -ipset=/.tcsovi.org/gfwlist -server=/.tdm.com.mo/127.0.0.1#5335 -ipset=/.tdm.com.mo/gfwlist -server=/.teachparentstech.org/127.0.0.1#5335 -ipset=/.teachparentstech.org/gfwlist -server=/.teamamericany.com/127.0.0.1#5335 -ipset=/.teamamericany.com/gfwlist -server=/.techviz.net/127.0.0.1#5335 -ipset=/.techviz.net/gfwlist -server=/.teck.in/127.0.0.1#5335 -ipset=/.teck.in/gfwlist -server=/.teco-hk.org/127.0.0.1#5335 -ipset=/.teco-hk.org/gfwlist -server=/.teco-mo.org/127.0.0.1#5335 -ipset=/.teco-mo.org/gfwlist -server=/.teddysun.com/127.0.0.1#5335 -ipset=/.teddysun.com/gfwlist -server=/.teeniefuck.net/127.0.0.1#5335 -ipset=/.teeniefuck.net/gfwlist -server=/.teensinasia.com/127.0.0.1#5335 -ipset=/.teensinasia.com/gfwlist -server=/.telecomspace.com/127.0.0.1#5335 -ipset=/.telecomspace.com/gfwlist -server=/.telegra.ph/127.0.0.1#5335 -ipset=/.telegra.ph/gfwlist -server=/.telegram.dog/127.0.0.1#5335 -ipset=/.telegram.dog/gfwlist -server=/.telegram.me/127.0.0.1#5335 -ipset=/.telegram.me/gfwlist -server=/.telegram.org/127.0.0.1#5335 -ipset=/.telegram.org/gfwlist -server=/.telegramdownload.com/127.0.0.1#5335 -ipset=/.telegramdownload.com/gfwlist -server=/.telegraph.co.uk/127.0.0.1#5335 -ipset=/.telegraph.co.uk/gfwlist -server=/.telesco.pe/127.0.0.1#5335 -ipset=/.telesco.pe/gfwlist -server=/.tellme.pw/127.0.0.1#5335 -ipset=/.tellme.pw/gfwlist -server=/.tenacy.com/127.0.0.1#5335 -ipset=/.tenacy.com/gfwlist -server=/.tensorflow.org/127.0.0.1#5335 -ipset=/.tensorflow.org/gfwlist -server=/.tenzinpalmo.com/127.0.0.1#5335 -ipset=/.tenzinpalmo.com/gfwlist -server=/.tew.org/127.0.0.1#5335 -ipset=/.tew.org/gfwlist -server=/.textnow.me/127.0.0.1#5335 -ipset=/.textnow.me/gfwlist -server=/.tfhub.dev/127.0.0.1#5335 -ipset=/.tfhub.dev/gfwlist -server=/.th.hao123.com/127.0.0.1#5335 -ipset=/.th.hao123.com/gfwlist -server=/.thaicn.com/127.0.0.1#5335 -ipset=/.thaicn.com/gfwlist -server=/.thb.gov.tw/127.0.0.1#5335 -ipset=/.thb.gov.tw/gfwlist -server=/.theatrum-belli.com/127.0.0.1#5335 -ipset=/.theatrum-belli.com/gfwlist -server=/.thebcomplex.com/127.0.0.1#5335 -ipset=/.thebcomplex.com/gfwlist -server=/.theblemish.com/127.0.0.1#5335 -ipset=/.theblemish.com/gfwlist -server=/.thebobs.com/127.0.0.1#5335 -ipset=/.thebobs.com/gfwlist -server=/.thebodyshop-usa.com/127.0.0.1#5335 -ipset=/.thebodyshop-usa.com/gfwlist -server=/.thecenter.mit.edu/127.0.0.1#5335 -ipset=/.thecenter.mit.edu/gfwlist -server=/.thechinabeat.org/127.0.0.1#5335 -ipset=/.thechinabeat.org/gfwlist -server=/.thedalailamamovie.com/127.0.0.1#5335 -ipset=/.thedalailamamovie.com/gfwlist -server=/.thedw.us/127.0.0.1#5335 -ipset=/.thedw.us/gfwlist -server=/.thefacebook.com/127.0.0.1#5335 -ipset=/.thefacebook.com/gfwlist -server=/.thegly.com/127.0.0.1#5335 -ipset=/.thegly.com/gfwlist -server=/.thehots.info/127.0.0.1#5335 -ipset=/.thehots.info/gfwlist -server=/.thehousenews.com/127.0.0.1#5335 -ipset=/.thehousenews.com/gfwlist -server=/.thehun.net/127.0.0.1#5335 -ipset=/.thehun.net/gfwlist -server=/.theinitium.com/127.0.0.1#5335 -ipset=/.theinitium.com/gfwlist -server=/.thenewslens.com/127.0.0.1#5335 -ipset=/.thenewslens.com/gfwlist -server=/.thepiratebay.org/127.0.0.1#5335 -ipset=/.thepiratebay.org/gfwlist -server=/.theporndude.com/127.0.0.1#5335 -ipset=/.theporndude.com/gfwlist -server=/.theportalwiki.com/127.0.0.1#5335 -ipset=/.theportalwiki.com/gfwlist -server=/.thereallove.kr/127.0.0.1#5335 -ipset=/.thereallove.kr/gfwlist -server=/.therock.net.nz/127.0.0.1#5335 -ipset=/.therock.net.nz/gfwlist -server=/.thespeeder.com/127.0.0.1#5335 -ipset=/.thespeeder.com/gfwlist -server=/.thestandnews.com/127.0.0.1#5335 -ipset=/.thestandnews.com/gfwlist -server=/.thetibetcenter.org/127.0.0.1#5335 -ipset=/.thetibetcenter.org/gfwlist -server=/.thetibetconnection.org/127.0.0.1#5335 -ipset=/.thetibetconnection.org/gfwlist -server=/.thetibetmuseum.org/127.0.0.1#5335 -ipset=/.thetibetmuseum.org/gfwlist -server=/.thetibetpost.com/127.0.0.1#5335 -ipset=/.thetibetpost.com/gfwlist -server=/.thetinhat.com/127.0.0.1#5335 -ipset=/.thetinhat.com/gfwlist -server=/.thetrotskymovie.com/127.0.0.1#5335 -ipset=/.thetrotskymovie.com/gfwlist -server=/.thevivekspot.com/127.0.0.1#5335 -ipset=/.thevivekspot.com/gfwlist -server=/.thewgo.org/127.0.0.1#5335 -ipset=/.thewgo.org/gfwlist -server=/.theync.com/127.0.0.1#5335 -ipset=/.theync.com/gfwlist -server=/.thinkgeek.com/127.0.0.1#5335 -ipset=/.thinkgeek.com/gfwlist -server=/.thinkingtaiwan.com/127.0.0.1#5335 -ipset=/.thinkingtaiwan.com/gfwlist -server=/.thinkwithgoogle.com/127.0.0.1#5335 -ipset=/.thinkwithgoogle.com/gfwlist -server=/.thisav.com/127.0.0.1#5335 -ipset=/.thisav.com/gfwlist -server=/.thlib.org/127.0.0.1#5335 -ipset=/.thlib.org/gfwlist -server=/.thomasbernhard.org/127.0.0.1#5335 -ipset=/.thomasbernhard.org/gfwlist -server=/.thongdreams.com/127.0.0.1#5335 -ipset=/.thongdreams.com/gfwlist -server=/.threatchaos.com/127.0.0.1#5335 -ipset=/.threatchaos.com/gfwlist -server=/.throughnightsfire.com/127.0.0.1#5335 -ipset=/.throughnightsfire.com/gfwlist -server=/.thumbzilla.com/127.0.0.1#5335 -ipset=/.thumbzilla.com/gfwlist -server=/.thywords.com/127.0.0.1#5335 -ipset=/.thywords.com/gfwlist -server=/.tiananmenduizhi.com/127.0.0.1#5335 -ipset=/.tiananmenduizhi.com/gfwlist -server=/.tiananmenmother.org/127.0.0.1#5335 -ipset=/.tiananmenmother.org/gfwlist -server=/.tiananmenuniv.com/127.0.0.1#5335 -ipset=/.tiananmenuniv.com/gfwlist -server=/.tiananmenuniv.net/127.0.0.1#5335 -ipset=/.tiananmenuniv.net/gfwlist -server=/.tiandixing.org/127.0.0.1#5335 -ipset=/.tiandixing.org/gfwlist -server=/.tianhuayuan.com/127.0.0.1#5335 -ipset=/.tianhuayuan.com/gfwlist -server=/.tianlawoffice.com/127.0.0.1#5335 -ipset=/.tianlawoffice.com/gfwlist -server=/.tianti.io/127.0.0.1#5335 -ipset=/.tianti.io/gfwlist -server=/.tiantibooks.org/127.0.0.1#5335 -ipset=/.tiantibooks.org/gfwlist -server=/.tianyantong.org.cn/127.0.0.1#5335 -ipset=/.tianyantong.org.cn/gfwlist -server=/.tianzhu.org/127.0.0.1#5335 -ipset=/.tianzhu.org/gfwlist -server=/.tibet-envoy.eu/127.0.0.1#5335 -ipset=/.tibet-envoy.eu/gfwlist -server=/.tibet-foundation.org/127.0.0.1#5335 -ipset=/.tibet-foundation.org/gfwlist -server=/.tibet-house-trust.co.uk/127.0.0.1#5335 -ipset=/.tibet-house-trust.co.uk/gfwlist -server=/.tibet-initiative.de/127.0.0.1#5335 -ipset=/.tibet-initiative.de/gfwlist -server=/.tibet-munich.de/127.0.0.1#5335 -ipset=/.tibet-munich.de/gfwlist -server=/.tibet.a.se/127.0.0.1#5335 -ipset=/.tibet.a.se/gfwlist -server=/.tibet.at/127.0.0.1#5335 -ipset=/.tibet.at/gfwlist -server=/.tibet.ca/127.0.0.1#5335 -ipset=/.tibet.ca/gfwlist -server=/.tibet.com/127.0.0.1#5335 -ipset=/.tibet.com/gfwlist -server=/.tibet.fr/127.0.0.1#5335 -ipset=/.tibet.fr/gfwlist -server=/.tibet.net/127.0.0.1#5335 -ipset=/.tibet.net/gfwlist -server=/.tibet.nu/127.0.0.1#5335 -ipset=/.tibet.nu/gfwlist -server=/.tibet.org/127.0.0.1#5335 -ipset=/.tibet.org/gfwlist -server=/.tibet.sk/127.0.0.1#5335 -ipset=/.tibet.sk/gfwlist -server=/.tibet.to/127.0.0.1#5335 -ipset=/.tibet.to/gfwlist -server=/.tibet3rdpole.org/127.0.0.1#5335 -ipset=/.tibet3rdpole.org/gfwlist -server=/.tibetaction.net/127.0.0.1#5335 -ipset=/.tibetaction.net/gfwlist -server=/.tibetaid.org/127.0.0.1#5335 -ipset=/.tibetaid.org/gfwlist -server=/.tibetalk.com/127.0.0.1#5335 -ipset=/.tibetalk.com/gfwlist -server=/.tibetan-alliance.org/127.0.0.1#5335 -ipset=/.tibetan-alliance.org/gfwlist -server=/.tibetan.fr/127.0.0.1#5335 -ipset=/.tibetan.fr/gfwlist -server=/.tibetanaidproject.org/127.0.0.1#5335 -ipset=/.tibetanaidproject.org/gfwlist -server=/.tibetanarts.org/127.0.0.1#5335 -ipset=/.tibetanarts.org/gfwlist -server=/.tibetanbuddhistinstitute.org/127.0.0.1#5335 -ipset=/.tibetanbuddhistinstitute.org/gfwlist -server=/.tibetancommunity.org/127.0.0.1#5335 -ipset=/.tibetancommunity.org/gfwlist -server=/.tibetancommunityuk.net/127.0.0.1#5335 -ipset=/.tibetancommunityuk.net/gfwlist -server=/.tibetanculture.org/127.0.0.1#5335 -ipset=/.tibetanculture.org/gfwlist -server=/.tibetanfeministcollective.org/127.0.0.1#5335 -ipset=/.tibetanfeministcollective.org/gfwlist -server=/.tibetanjournal.com/127.0.0.1#5335 -ipset=/.tibetanjournal.com/gfwlist -server=/.tibetanlanguage.org/127.0.0.1#5335 -ipset=/.tibetanlanguage.org/gfwlist -server=/.tibetanliberation.org/127.0.0.1#5335 -ipset=/.tibetanliberation.org/gfwlist -server=/.tibetanpaintings.com/127.0.0.1#5335 -ipset=/.tibetanpaintings.com/gfwlist -server=/.tibetanphotoproject.com/127.0.0.1#5335 -ipset=/.tibetanphotoproject.com/gfwlist -server=/.tibetanpoliticalreview.org/127.0.0.1#5335 -ipset=/.tibetanpoliticalreview.org/gfwlist -server=/.tibetanreview.net/127.0.0.1#5335 -ipset=/.tibetanreview.net/gfwlist -server=/.tibetansports.org/127.0.0.1#5335 -ipset=/.tibetansports.org/gfwlist -server=/.tibetanwomen.org/127.0.0.1#5335 -ipset=/.tibetanwomen.org/gfwlist -server=/.tibetanyouth.org/127.0.0.1#5335 -ipset=/.tibetanyouth.org/gfwlist -server=/.tibetanyouthcongress.org/127.0.0.1#5335 -ipset=/.tibetanyouthcongress.org/gfwlist -server=/.tibetcharity.dk/127.0.0.1#5335 -ipset=/.tibetcharity.dk/gfwlist -server=/.tibetcharity.in/127.0.0.1#5335 -ipset=/.tibetcharity.in/gfwlist -server=/.tibetchild.org/127.0.0.1#5335 -ipset=/.tibetchild.org/gfwlist -server=/.tibetcity.com/127.0.0.1#5335 -ipset=/.tibetcity.com/gfwlist -server=/.tibetcollection.com/127.0.0.1#5335 -ipset=/.tibetcollection.com/gfwlist -server=/.tibetcorps.org/127.0.0.1#5335 -ipset=/.tibetcorps.org/gfwlist -server=/.tibetexpress.net/127.0.0.1#5335 -ipset=/.tibetexpress.net/gfwlist -server=/.tibetfocus.com/127.0.0.1#5335 -ipset=/.tibetfocus.com/gfwlist -server=/.tibetfund.org/127.0.0.1#5335 -ipset=/.tibetfund.org/gfwlist -server=/.tibetgermany.com/127.0.0.1#5335 -ipset=/.tibetgermany.com/gfwlist -server=/.tibetgermany.de/127.0.0.1#5335 -ipset=/.tibetgermany.de/gfwlist -server=/.tibethaus.com/127.0.0.1#5335 -ipset=/.tibethaus.com/gfwlist -server=/.tibetheritagefund.org/127.0.0.1#5335 -ipset=/.tibetheritagefund.org/gfwlist -server=/.tibethouse.jp/127.0.0.1#5335 -ipset=/.tibethouse.jp/gfwlist -server=/.tibethouse.org/127.0.0.1#5335 -ipset=/.tibethouse.org/gfwlist -server=/.tibethouse.us/127.0.0.1#5335 -ipset=/.tibethouse.us/gfwlist -server=/.tibetinfonet.net/127.0.0.1#5335 -ipset=/.tibetinfonet.net/gfwlist -server=/.tibetjustice.org/127.0.0.1#5335 -ipset=/.tibetjustice.org/gfwlist -server=/.tibetkomite.dk/127.0.0.1#5335 -ipset=/.tibetkomite.dk/gfwlist -server=/.tibetlibre.free.fr/127.0.0.1#5335 -ipset=/.tibetlibre.free.fr/gfwlist -server=/.tibetmuseum.org/127.0.0.1#5335 -ipset=/.tibetmuseum.org/gfwlist -server=/.tibetnetwork.org/127.0.0.1#5335 -ipset=/.tibetnetwork.org/gfwlist -server=/.tibetoffice.ch/127.0.0.1#5335 -ipset=/.tibetoffice.ch/gfwlist -server=/.tibetoffice.com.au/127.0.0.1#5335 -ipset=/.tibetoffice.com.au/gfwlist -server=/.tibetoffice.eu/127.0.0.1#5335 -ipset=/.tibetoffice.eu/gfwlist -server=/.tibetoffice.org/127.0.0.1#5335 -ipset=/.tibetoffice.org/gfwlist -server=/.tibetonline.com/127.0.0.1#5335 -ipset=/.tibetonline.com/gfwlist -server=/.tibetonline.tv/127.0.0.1#5335 -ipset=/.tibetonline.tv/gfwlist -server=/.tibetoralhistory.org/127.0.0.1#5335 -ipset=/.tibetoralhistory.org/gfwlist -server=/.tibetpolicy.eu/127.0.0.1#5335 -ipset=/.tibetpolicy.eu/gfwlist -server=/.tibetrelieffund.co.uk/127.0.0.1#5335 -ipset=/.tibetrelieffund.co.uk/gfwlist -server=/.tibetsites.com/127.0.0.1#5335 -ipset=/.tibetsites.com/gfwlist -server=/.tibetsociety.com/127.0.0.1#5335 -ipset=/.tibetsociety.com/gfwlist -server=/.tibetsun.com/127.0.0.1#5335 -ipset=/.tibetsun.com/gfwlist -server=/.tibetsupportgroup.org/127.0.0.1#5335 -ipset=/.tibetsupportgroup.org/gfwlist -server=/.tibetswiss.ch/127.0.0.1#5335 -ipset=/.tibetswiss.ch/gfwlist -server=/.tibettelegraph.com/127.0.0.1#5335 -ipset=/.tibettelegraph.com/gfwlist -server=/.tibettimes.net/127.0.0.1#5335 -ipset=/.tibettimes.net/gfwlist -server=/.tibetwrites.org/127.0.0.1#5335 -ipset=/.tibetwrites.org/gfwlist -server=/.ticket.com.tw/127.0.0.1#5335 -ipset=/.ticket.com.tw/gfwlist -server=/.tigervpn.com/127.0.0.1#5335 -ipset=/.tigervpn.com/gfwlist -server=/.tiltbrush.com/127.0.0.1#5335 -ipset=/.tiltbrush.com/gfwlist -server=/.timdir.com/127.0.0.1#5335 -ipset=/.timdir.com/gfwlist -server=/.time.com/127.0.0.1#5335 -ipset=/.time.com/gfwlist -server=/.times.hinet.net/127.0.0.1#5335 -ipset=/.times.hinet.net/gfwlist -server=/.timsah.com/127.0.0.1#5335 -ipset=/.timsah.com/gfwlist -server=/.tinc-vpn.org/127.0.0.1#5335 -ipset=/.tinc-vpn.org/gfwlist -server=/.tineye.com/127.0.0.1#5335 -ipset=/.tineye.com/gfwlist -server=/.tintuc101.com/127.0.0.1#5335 -ipset=/.tintuc101.com/gfwlist -server=/.tiny.cc/127.0.0.1#5335 -ipset=/.tiny.cc/gfwlist -server=/.tinychat.com/127.0.0.1#5335 -ipset=/.tinychat.com/gfwlist -server=/.tinypaste.com/127.0.0.1#5335 -ipset=/.tinypaste.com/gfwlist -server=/.tipo.gov.tw/127.0.0.1#5335 -ipset=/.tipo.gov.tw/gfwlist -server=/.tistory.com/127.0.0.1#5335 -ipset=/.tistory.com/gfwlist -server=/.tkcs-collins.com/127.0.0.1#5335 -ipset=/.tkcs-collins.com/gfwlist -server=/.tma.co.jp/127.0.0.1#5335 -ipset=/.tma.co.jp/gfwlist -server=/.tmagazine.com/127.0.0.1#5335 -ipset=/.tmagazine.com/gfwlist -server=/.tmdfish.com/127.0.0.1#5335 -ipset=/.tmdfish.com/gfwlist -server=/.tmi.me/127.0.0.1#5335 -ipset=/.tmi.me/gfwlist -server=/.tmpp.org/127.0.0.1#5335 -ipset=/.tmpp.org/gfwlist -server=/.tn1.shemalez.com/127.0.0.1#5335 -ipset=/.tn1.shemalez.com/gfwlist -server=/.tn2.shemalez.com/127.0.0.1#5335 -ipset=/.tn2.shemalez.com/gfwlist -server=/.tn3.shemalez.com/127.0.0.1#5335 -ipset=/.tn3.shemalez.com/gfwlist -server=/.tnaflix.com/127.0.0.1#5335 -ipset=/.tnaflix.com/gfwlist -server=/.tngrnow.com/127.0.0.1#5335 -ipset=/.tngrnow.com/gfwlist -server=/.tngrnow.net/127.0.0.1#5335 -ipset=/.tngrnow.net/gfwlist -server=/.tnp.org/127.0.0.1#5335 -ipset=/.tnp.org/gfwlist -server=/.to-porno.com/127.0.0.1#5335 -ipset=/.to-porno.com/gfwlist -server=/.togetter.com/127.0.0.1#5335 -ipset=/.togetter.com/gfwlist -server=/.toh.info/127.0.0.1#5335 -ipset=/.toh.info/gfwlist -server=/.tokyo-247.com/127.0.0.1#5335 -ipset=/.tokyo-247.com/gfwlist -server=/.tokyo-hot.com/127.0.0.1#5335 -ipset=/.tokyo-hot.com/gfwlist -server=/.tokyo-porn-tube.com/127.0.0.1#5335 -ipset=/.tokyo-porn-tube.com/gfwlist -server=/.tokyocn.com/127.0.0.1#5335 -ipset=/.tokyocn.com/gfwlist -server=/.tongil.or.kr/127.0.0.1#5335 -ipset=/.tongil.or.kr/gfwlist -server=/.tono-oka.jp/127.0.0.1#5335 -ipset=/.tono-oka.jp/gfwlist -server=/.tonyyan.net/127.0.0.1#5335 -ipset=/.tonyyan.net/gfwlist -server=/.toodoc.com/127.0.0.1#5335 -ipset=/.toodoc.com/gfwlist -server=/.toonel.net/127.0.0.1#5335 -ipset=/.toonel.net/gfwlist -server=/.top.tv/127.0.0.1#5335 -ipset=/.top.tv/gfwlist -server=/.top10vpn.com/127.0.0.1#5335 -ipset=/.top10vpn.com/gfwlist -server=/.top81.ws/127.0.0.1#5335 -ipset=/.top81.ws/gfwlist -server=/.topbtc.com/127.0.0.1#5335 -ipset=/.topbtc.com/gfwlist -server=/.topic.youthwant.com.tw/127.0.0.1#5335 -ipset=/.topic.youthwant.com.tw/gfwlist -server=/.topnews.in/127.0.0.1#5335 -ipset=/.topnews.in/gfwlist -server=/.toppornsites.com/127.0.0.1#5335 -ipset=/.toppornsites.com/gfwlist -server=/.topshareware.com/127.0.0.1#5335 -ipset=/.topshareware.com/gfwlist -server=/.topsy.com/127.0.0.1#5335 -ipset=/.topsy.com/gfwlist -server=/.toptip.ca/127.0.0.1#5335 -ipset=/.toptip.ca/gfwlist -server=/.tor.blingblingsquad.net/127.0.0.1#5335 -ipset=/.tor.blingblingsquad.net/gfwlist -server=/.tor.updatestar.com/127.0.0.1#5335 -ipset=/.tor.updatestar.com/gfwlist -server=/.tora.to/127.0.0.1#5335 -ipset=/.tora.to/gfwlist -server=/.torcn.com/127.0.0.1#5335 -ipset=/.torcn.com/gfwlist -server=/.torguard.net/127.0.0.1#5335 -ipset=/.torguard.net/gfwlist -server=/.torproject.org/127.0.0.1#5335 -ipset=/.torproject.org/gfwlist -server=/.torrentprivacy.com/127.0.0.1#5335 -ipset=/.torrentprivacy.com/gfwlist -server=/.torrentproject.se/127.0.0.1#5335 -ipset=/.torrentproject.se/gfwlist -server=/.torrenty.org/127.0.0.1#5335 -ipset=/.torrenty.org/gfwlist -server=/.torrentz.eu/127.0.0.1#5335 -ipset=/.torrentz.eu/gfwlist -server=/.torvpn.com/127.0.0.1#5335 -ipset=/.torvpn.com/gfwlist -server=/.tosh.comedycentral.com/127.0.0.1#5335 -ipset=/.tosh.comedycentral.com/gfwlist -server=/.totalvpn.com/127.0.0.1#5335 -ipset=/.totalvpn.com/gfwlist -server=/.toutiaoabc.com/127.0.0.1#5335 -ipset=/.toutiaoabc.com/gfwlist -server=/.towngain.com/127.0.0.1#5335 -ipset=/.towngain.com/gfwlist -server=/.toypark.in/127.0.0.1#5335 -ipset=/.toypark.in/gfwlist -server=/.toythieves.com/127.0.0.1#5335 -ipset=/.toythieves.com/gfwlist -server=/.toytractorshow.com/127.0.0.1#5335 -ipset=/.toytractorshow.com/gfwlist -server=/.tparents.org/127.0.0.1#5335 -ipset=/.tparents.org/gfwlist -server=/.tpi.org.tw/127.0.0.1#5335 -ipset=/.tpi.org.tw/gfwlist -server=/.tracfone.com/127.0.0.1#5335 -ipset=/.tracfone.com/gfwlist -server=/.traffichaus.com/127.0.0.1#5335 -ipset=/.traffichaus.com/gfwlist -server=/.transparency.org/127.0.0.1#5335 -ipset=/.transparency.org/gfwlist -server=/.treemall.com.tw/127.0.0.1#5335 -ipset=/.treemall.com.tw/gfwlist -server=/.trendsmap.com/127.0.0.1#5335 -ipset=/.trendsmap.com/gfwlist -server=/.trialofccp.org/127.0.0.1#5335 -ipset=/.trialofccp.org/gfwlist -server=/.trickip.net/127.0.0.1#5335 -ipset=/.trickip.net/gfwlist -server=/.trickip.org/127.0.0.1#5335 -ipset=/.trickip.org/gfwlist -server=/.trouw.nl/127.0.0.1#5335 -ipset=/.trouw.nl/gfwlist -server=/.trt.net.tr/127.0.0.1#5335 -ipset=/.trt.net.tr/gfwlist -server=/.trtc.com.tw/127.0.0.1#5335 -ipset=/.trtc.com.tw/gfwlist -server=/.truebuddha-md.org/127.0.0.1#5335 -ipset=/.truebuddha-md.org/gfwlist -server=/.trulyergonomic.com/127.0.0.1#5335 -ipset=/.trulyergonomic.com/gfwlist -server=/.truth101.co.tv/127.0.0.1#5335 -ipset=/.truth101.co.tv/gfwlist -server=/.truthontour.org/127.0.0.1#5335 -ipset=/.truthontour.org/gfwlist -server=/.truveo.com/127.0.0.1#5335 -ipset=/.truveo.com/gfwlist -server=/.tryheart.jp/127.0.0.1#5335 -ipset=/.tryheart.jp/gfwlist -server=/.tsctv.net/127.0.0.1#5335 -ipset=/.tsctv.net/gfwlist -server=/.tsdr.uspto.gov/127.0.0.1#5335 -ipset=/.tsdr.uspto.gov/gfwlist -server=/.tsemtulku.com/127.0.0.1#5335 -ipset=/.tsemtulku.com/gfwlist -server=/.tsquare.tv/127.0.0.1#5335 -ipset=/.tsquare.tv/gfwlist -server=/.tsu.org.tw/127.0.0.1#5335 -ipset=/.tsu.org.tw/gfwlist -server=/.tsunagarumon.com/127.0.0.1#5335 -ipset=/.tsunagarumon.com/gfwlist -server=/.tt1069.com/127.0.0.1#5335 -ipset=/.tt1069.com/gfwlist -server=/.tttan.com/127.0.0.1#5335 -ipset=/.tttan.com/gfwlist -server=/.ttvnw.net/127.0.0.1#5335 -ipset=/.ttvnw.net/gfwlist -server=/.tu8964.com/127.0.0.1#5335 -ipset=/.tu8964.com/gfwlist -server=/.tubaholic.com/127.0.0.1#5335 -ipset=/.tubaholic.com/gfwlist -server=/.tube.com/127.0.0.1#5335 -ipset=/.tube.com/gfwlist -server=/.tube8.com/127.0.0.1#5335 -ipset=/.tube8.com/gfwlist -server=/.tube911.com/127.0.0.1#5335 -ipset=/.tube911.com/gfwlist -server=/.tubecup.com/127.0.0.1#5335 -ipset=/.tubecup.com/gfwlist -server=/.tubegals.com/127.0.0.1#5335 -ipset=/.tubegals.com/gfwlist -server=/.tubeislam.com/127.0.0.1#5335 -ipset=/.tubeislam.com/gfwlist -server=/.tubepornclassic.com/127.0.0.1#5335 -ipset=/.tubepornclassic.com/gfwlist -server=/.tubestack.com/127.0.0.1#5335 -ipset=/.tubestack.com/gfwlist -server=/.tubewolf.com/127.0.0.1#5335 -ipset=/.tubewolf.com/gfwlist -server=/.tui.orzdream.com/127.0.0.1#5335 -ipset=/.tui.orzdream.com/gfwlist -server=/.tuibeitu.net/127.0.0.1#5335 -ipset=/.tuibeitu.net/gfwlist -server=/.tuidang.net/127.0.0.1#5335 -ipset=/.tuidang.net/gfwlist -server=/.tuidang.org/127.0.0.1#5335 -ipset=/.tuidang.org/gfwlist -server=/.tuidang.se/127.0.0.1#5335 -ipset=/.tuidang.se/gfwlist -server=/.tuitwit.com/127.0.0.1#5335 -ipset=/.tuitwit.com/gfwlist -server=/.tumblr.com/127.0.0.1#5335 -ipset=/.tumblr.com/gfwlist -server=/.tumutanzi.com/127.0.0.1#5335 -ipset=/.tumutanzi.com/gfwlist -server=/.tumview.com/127.0.0.1#5335 -ipset=/.tumview.com/gfwlist -server=/.tunein.com/127.0.0.1#5335 -ipset=/.tunein.com/gfwlist -server=/.tunnelbear.com/127.0.0.1#5335 -ipset=/.tunnelbear.com/gfwlist -server=/.tunnelr.com/127.0.0.1#5335 -ipset=/.tunnelr.com/gfwlist -server=/.tuo8.blue/127.0.0.1#5335 -ipset=/.tuo8.blue/gfwlist -server=/.tuo8.cc/127.0.0.1#5335 -ipset=/.tuo8.cc/gfwlist -server=/.tuo8.club/127.0.0.1#5335 -ipset=/.tuo8.club/gfwlist -server=/.tuo8.fit/127.0.0.1#5335 -ipset=/.tuo8.fit/gfwlist -server=/.tuo8.hk/127.0.0.1#5335 -ipset=/.tuo8.hk/gfwlist -server=/.tuo8.in/127.0.0.1#5335 -ipset=/.tuo8.in/gfwlist -server=/.tuo8.ninja/127.0.0.1#5335 -ipset=/.tuo8.ninja/gfwlist -server=/.tuo8.org/127.0.0.1#5335 -ipset=/.tuo8.org/gfwlist -server=/.tuo8.pw/127.0.0.1#5335 -ipset=/.tuo8.pw/gfwlist -server=/.tuo8.red/127.0.0.1#5335 -ipset=/.tuo8.red/gfwlist -server=/.tuo8.space/127.0.0.1#5335 -ipset=/.tuo8.space/gfwlist -server=/.turansam.org/127.0.0.1#5335 -ipset=/.turansam.org/gfwlist -server=/.turbobit.net/127.0.0.1#5335 -ipset=/.turbobit.net/gfwlist -server=/.turbohide.com/127.0.0.1#5335 -ipset=/.turbohide.com/gfwlist -server=/.turbotwitter.com/127.0.0.1#5335 -ipset=/.turbotwitter.com/gfwlist -server=/.turkistantimes.com/127.0.0.1#5335 -ipset=/.turkistantimes.com/gfwlist -server=/.turntable.fm/127.0.0.1#5335 -ipset=/.turntable.fm/gfwlist -server=/.tushycash.com/127.0.0.1#5335 -ipset=/.tushycash.com/gfwlist -server=/.tuvpn.com/127.0.0.1#5335 -ipset=/.tuvpn.com/gfwlist -server=/.tuzaijidi.com/127.0.0.1#5335 -ipset=/.tuzaijidi.com/gfwlist -server=/.tv.com/127.0.0.1#5335 -ipset=/.tv.com/gfwlist -server=/.tvants.com/127.0.0.1#5335 -ipset=/.tvants.com/gfwlist -server=/.tvboxnow.com/127.0.0.1#5335 -ipset=/.tvboxnow.com/gfwlist -server=/.tvider.com/127.0.0.1#5335 -ipset=/.tvider.com/gfwlist -server=/.tvmost.com.hk/127.0.0.1#5335 -ipset=/.tvmost.com.hk/gfwlist -server=/.tvplayvideos.com/127.0.0.1#5335 -ipset=/.tvplayvideos.com/gfwlist -server=/.tvunetworks.com/127.0.0.1#5335 -ipset=/.tvunetworks.com/gfwlist -server=/.tw-blog.com/127.0.0.1#5335 -ipset=/.tw-blog.com/gfwlist -server=/.tw-npo.org/127.0.0.1#5335 -ipset=/.tw-npo.org/gfwlist -server=/.tw.answers.yahoo.com/127.0.0.1#5335 -ipset=/.tw.answers.yahoo.com/gfwlist -server=/.tw.bid.yahoo.com/127.0.0.1#5335 -ipset=/.tw.bid.yahoo.com/gfwlist -server=/.tw.gigacircle.com/127.0.0.1#5335 -ipset=/.tw.gigacircle.com/gfwlist -server=/.tw.hao123.com/127.0.0.1#5335 -ipset=/.tw.hao123.com/gfwlist -server=/.tw.iqiyi.com/127.0.0.1#5335 -ipset=/.tw.iqiyi.com/gfwlist -server=/.tw.jiepang.com/127.0.0.1#5335 -ipset=/.tw.jiepang.com/gfwlist -server=/.tw.knowledge.yahoo.com/127.0.0.1#5335 -ipset=/.tw.knowledge.yahoo.com/gfwlist -server=/.tw.mall.yahoo.com/127.0.0.1#5335 -ipset=/.tw.mall.yahoo.com/gfwlist -server=/.tw.mobi.yahoo.com/127.0.0.1#5335 -ipset=/.tw.mobi.yahoo.com/gfwlist -server=/.tw.money.yahoo.com/127.0.0.1#5335 -ipset=/.tw.money.yahoo.com/gfwlist -server=/.tw.myblog.yahoo.com/127.0.0.1#5335 -ipset=/.tw.myblog.yahoo.com/gfwlist -server=/.tw.news.yahoo.com/127.0.0.1#5335 -ipset=/.tw.news.yahoo.com/gfwlist -server=/.tw.streetvoice.com/127.0.0.1#5335 -ipset=/.tw.streetvoice.com/gfwlist -server=/.tw.tomonews.net/127.0.0.1#5335 -ipset=/.tw.tomonews.net/gfwlist -server=/.tw.voa.mobi/127.0.0.1#5335 -ipset=/.tw.voa.mobi/gfwlist -server=/.tw.yahoo.com/127.0.0.1#5335 -ipset=/.tw.yahoo.com/gfwlist -server=/.tw01.org/127.0.0.1#5335 -ipset=/.tw01.org/gfwlist -server=/.twaitter.com/127.0.0.1#5335 -ipset=/.twaitter.com/gfwlist -server=/.twapperkeeper.com/127.0.0.1#5335 -ipset=/.twapperkeeper.com/gfwlist -server=/.twaud.io/127.0.0.1#5335 -ipset=/.twaud.io/gfwlist -server=/.twavi.com/127.0.0.1#5335 -ipset=/.twavi.com/gfwlist -server=/.twbbs.net.tw/127.0.0.1#5335 -ipset=/.twbbs.net.tw/gfwlist -server=/.twbbs.org/127.0.0.1#5335 -ipset=/.twbbs.org/gfwlist -server=/.twbbs.tw/127.0.0.1#5335 -ipset=/.twbbs.tw/gfwlist -server=/.twblogger.com/127.0.0.1#5335 -ipset=/.twblogger.com/gfwlist -server=/.tweepguide.com/127.0.0.1#5335 -ipset=/.tweepguide.com/gfwlist -server=/.tweeplike.me/127.0.0.1#5335 -ipset=/.tweeplike.me/gfwlist -server=/.tweepmag.com/127.0.0.1#5335 -ipset=/.tweepmag.com/gfwlist -server=/.tweepml.org/127.0.0.1#5335 -ipset=/.tweepml.org/gfwlist -server=/.tweetbackup.com/127.0.0.1#5335 -ipset=/.tweetbackup.com/gfwlist -server=/.tweetboard.com/127.0.0.1#5335 -ipset=/.tweetboard.com/gfwlist -server=/.tweetboner.biz/127.0.0.1#5335 -ipset=/.tweetboner.biz/gfwlist -server=/.tweetcs.com/127.0.0.1#5335 -ipset=/.tweetcs.com/gfwlist -server=/.tweetdeck.com/127.0.0.1#5335 -ipset=/.tweetdeck.com/gfwlist -server=/.tweetedtimes.com/127.0.0.1#5335 -ipset=/.tweetedtimes.com/gfwlist -server=/.tweetmylast.fm/127.0.0.1#5335 -ipset=/.tweetmylast.fm/gfwlist -server=/.tweetphoto.com/127.0.0.1#5335 -ipset=/.tweetphoto.com/gfwlist -server=/.tweetrans.com/127.0.0.1#5335 -ipset=/.tweetrans.com/gfwlist -server=/.tweetree.com/127.0.0.1#5335 -ipset=/.tweetree.com/gfwlist -server=/.tweettunnel.com/127.0.0.1#5335 -ipset=/.tweettunnel.com/gfwlist -server=/.tweetwally.com/127.0.0.1#5335 -ipset=/.tweetwally.com/gfwlist -server=/.tweetymail.com/127.0.0.1#5335 -ipset=/.tweetymail.com/gfwlist -server=/.tweez.net/127.0.0.1#5335 -ipset=/.tweez.net/gfwlist -server=/.twelve.today/127.0.0.1#5335 -ipset=/.twelve.today/gfwlist -server=/.twerkingbutt.com/127.0.0.1#5335 -ipset=/.twerkingbutt.com/gfwlist -server=/.twftp.org/127.0.0.1#5335 -ipset=/.twftp.org/gfwlist -server=/.twgreatdaily.com/127.0.0.1#5335 -ipset=/.twgreatdaily.com/gfwlist -server=/.twibase.com/127.0.0.1#5335 -ipset=/.twibase.com/gfwlist -server=/.twibble.de/127.0.0.1#5335 -ipset=/.twibble.de/gfwlist -server=/.twibbon.com/127.0.0.1#5335 -ipset=/.twibbon.com/gfwlist -server=/.twibs.com/127.0.0.1#5335 -ipset=/.twibs.com/gfwlist -server=/.twicountry.org/127.0.0.1#5335 -ipset=/.twicountry.org/gfwlist -server=/.twicsy.com/127.0.0.1#5335 -ipset=/.twicsy.com/gfwlist -server=/.twiends.com/127.0.0.1#5335 -ipset=/.twiends.com/gfwlist -server=/.twifan.com/127.0.0.1#5335 -ipset=/.twifan.com/gfwlist -server=/.twiffo.com/127.0.0.1#5335 -ipset=/.twiffo.com/gfwlist -server=/.twiggit.org/127.0.0.1#5335 -ipset=/.twiggit.org/gfwlist -server=/.twilightsex.com/127.0.0.1#5335 -ipset=/.twilightsex.com/gfwlist -server=/.twilog.org/127.0.0.1#5335 -ipset=/.twilog.org/gfwlist -server=/.twimbow.com/127.0.0.1#5335 -ipset=/.twimbow.com/gfwlist -server=/.twimg.com/127.0.0.1#5335 -ipset=/.twimg.com/gfwlist -server=/.twindexx.com/127.0.0.1#5335 -ipset=/.twindexx.com/gfwlist -server=/.twip.me/127.0.0.1#5335 -ipset=/.twip.me/gfwlist -server=/.twipple.jp/127.0.0.1#5335 -ipset=/.twipple.jp/gfwlist -server=/.twishort.com/127.0.0.1#5335 -ipset=/.twishort.com/gfwlist -server=/.twistar.cc/127.0.0.1#5335 -ipset=/.twistar.cc/gfwlist -server=/.twister.net.co/127.0.0.1#5335 -ipset=/.twister.net.co/gfwlist -server=/.twisterio.com/127.0.0.1#5335 -ipset=/.twisterio.com/gfwlist -server=/.twisternow.com/127.0.0.1#5335 -ipset=/.twisternow.com/gfwlist -server=/.twistory.net/127.0.0.1#5335 -ipset=/.twistory.net/gfwlist -server=/.twit2d.com/127.0.0.1#5335 -ipset=/.twit2d.com/gfwlist -server=/.twitbrowser.net/127.0.0.1#5335 -ipset=/.twitbrowser.net/gfwlist -server=/.twitcause.com/127.0.0.1#5335 -ipset=/.twitcause.com/gfwlist -server=/.twitch.tv/127.0.0.1#5335 -ipset=/.twitch.tv/gfwlist -server=/.twitchcdn.net/127.0.0.1#5335 -ipset=/.twitchcdn.net/gfwlist -server=/.twitgether.com/127.0.0.1#5335 -ipset=/.twitgether.com/gfwlist -server=/.twitgoo.com/127.0.0.1#5335 -ipset=/.twitgoo.com/gfwlist -server=/.twitiq.com/127.0.0.1#5335 -ipset=/.twitiq.com/gfwlist -server=/.twitlonger.com/127.0.0.1#5335 -ipset=/.twitlonger.com/gfwlist -server=/.twitmania.com/127.0.0.1#5335 -ipset=/.twitmania.com/gfwlist -server=/.twitoaster.com/127.0.0.1#5335 -ipset=/.twitoaster.com/gfwlist -server=/.twitonmsn.com/127.0.0.1#5335 -ipset=/.twitonmsn.com/gfwlist -server=/.twitpic.com/127.0.0.1#5335 -ipset=/.twitpic.com/gfwlist -server=/.twitstat.com/127.0.0.1#5335 -ipset=/.twitstat.com/gfwlist -server=/.twittbot.net/127.0.0.1#5335 -ipset=/.twittbot.net/gfwlist -server=/.twitter.com/127.0.0.1#5335 -ipset=/.twitter.com/gfwlist -server=/.twitter.jp/127.0.0.1#5335 -ipset=/.twitter.jp/gfwlist -server=/.twitter4j.org/127.0.0.1#5335 -ipset=/.twitter4j.org/gfwlist -server=/.twittercounter.com/127.0.0.1#5335 -ipset=/.twittercounter.com/gfwlist -server=/.twitterfeed.com/127.0.0.1#5335 -ipset=/.twitterfeed.com/gfwlist -server=/.twittergadget.com/127.0.0.1#5335 -ipset=/.twittergadget.com/gfwlist -server=/.twitterkr.com/127.0.0.1#5335 -ipset=/.twitterkr.com/gfwlist -server=/.twittermail.com/127.0.0.1#5335 -ipset=/.twittermail.com/gfwlist -server=/.twitterrific.com/127.0.0.1#5335 -ipset=/.twitterrific.com/gfwlist -server=/.twittertim.es/127.0.0.1#5335 -ipset=/.twittertim.es/gfwlist -server=/.twitthat.com/127.0.0.1#5335 -ipset=/.twitthat.com/gfwlist -server=/.twitturk.com/127.0.0.1#5335 -ipset=/.twitturk.com/gfwlist -server=/.twitturly.com/127.0.0.1#5335 -ipset=/.twitturly.com/gfwlist -server=/.twitvid.com/127.0.0.1#5335 -ipset=/.twitvid.com/gfwlist -server=/.twitzap.com/127.0.0.1#5335 -ipset=/.twitzap.com/gfwlist -server=/.twiyia.com/127.0.0.1#5335 -ipset=/.twiyia.com/gfwlist -server=/.twnorth.org.tw/127.0.0.1#5335 -ipset=/.twnorth.org.tw/gfwlist -server=/.twskype.com/127.0.0.1#5335 -ipset=/.twskype.com/gfwlist -server=/.twstar.net/127.0.0.1#5335 -ipset=/.twstar.net/gfwlist -server=/.twt.tl/127.0.0.1#5335 -ipset=/.twt.tl/gfwlist -server=/.twtkr.com/127.0.0.1#5335 -ipset=/.twtkr.com/gfwlist -server=/.twtr2src.ogaoga.org/127.0.0.1#5335 -ipset=/.twtr2src.ogaoga.org/gfwlist -server=/.twtrland.com/127.0.0.1#5335 -ipset=/.twtrland.com/gfwlist -server=/.twttr.com/127.0.0.1#5335 -ipset=/.twttr.com/gfwlist -server=/.twurl.nl/127.0.0.1#5335 -ipset=/.twurl.nl/gfwlist -server=/.twyac.org/127.0.0.1#5335 -ipset=/.twyac.org/gfwlist -server=/.txxx.com/127.0.0.1#5335 -ipset=/.txxx.com/gfwlist -server=/.tycool.com/127.0.0.1#5335 -ipset=/.tycool.com/gfwlist -server=/.typepad.com/127.0.0.1#5335 -ipset=/.typepad.com/gfwlist -server=/.u15.info/127.0.0.1#5335 -ipset=/.u15.info/gfwlist -server=/.u9un.com/127.0.0.1#5335 -ipset=/.u9un.com/gfwlist -server=/.ub0.cc/127.0.0.1#5335 -ipset=/.ub0.cc/gfwlist -server=/.ubddns.org/127.0.0.1#5335 -ipset=/.ubddns.org/gfwlist -server=/.uberproxy.net/127.0.0.1#5335 -ipset=/.uberproxy.net/gfwlist -server=/.uc-japan.org/127.0.0.1#5335 -ipset=/.uc-japan.org/gfwlist -server=/.ucdc1998.org/127.0.0.1#5335 -ipset=/.ucdc1998.org/gfwlist -server=/.uderzo.it/127.0.0.1#5335 -ipset=/.uderzo.it/gfwlist -server=/.udn.com/127.0.0.1#5335 -ipset=/.udn.com/gfwlist -server=/.uforadio.com.tw/127.0.0.1#5335 -ipset=/.uforadio.com.tw/gfwlist -server=/.ufreevpn.com/127.0.0.1#5335 -ipset=/.ufreevpn.com/gfwlist -server=/.ugo.com/127.0.0.1#5335 -ipset=/.ugo.com/gfwlist -server=/.uhdwallpapers.org/127.0.0.1#5335 -ipset=/.uhdwallpapers.org/gfwlist -server=/.uhrp.org/127.0.0.1#5335 -ipset=/.uhrp.org/gfwlist -server=/.uighur.narod.ru/127.0.0.1#5335 -ipset=/.uighur.narod.ru/gfwlist -server=/.uighur.nl/127.0.0.1#5335 -ipset=/.uighur.nl/gfwlist -server=/.uighurbiz.net/127.0.0.1#5335 -ipset=/.uighurbiz.net/gfwlist -server=/.ukcdp.co.uk/127.0.0.1#5335 -ipset=/.ukcdp.co.uk/gfwlist -server=/.ukliferadio.co.uk/127.0.0.1#5335 -ipset=/.ukliferadio.co.uk/gfwlist -server=/.uku.im/127.0.0.1#5335 -ipset=/.uku.im/gfwlist -server=/.ulike.net/127.0.0.1#5335 -ipset=/.ulike.net/gfwlist -server=/.ulop.net/127.0.0.1#5335 -ipset=/.ulop.net/gfwlist -server=/.ultravpn.fr/127.0.0.1#5335 -ipset=/.ultravpn.fr/gfwlist -server=/.ultraxs.com/127.0.0.1#5335 -ipset=/.ultraxs.com/gfwlist -server=/.unblock-us.com/127.0.0.1#5335 -ipset=/.unblock-us.com/gfwlist -server=/.unblock.cn.com/127.0.0.1#5335 -ipset=/.unblock.cn.com/gfwlist -server=/.unblockdmm.com/127.0.0.1#5335 -ipset=/.unblockdmm.com/gfwlist -server=/.unblocker.yt/127.0.0.1#5335 -ipset=/.unblocker.yt/gfwlist -server=/.unblocksit.es/127.0.0.1#5335 -ipset=/.unblocksit.es/gfwlist -server=/.uncyclomedia.org/127.0.0.1#5335 -ipset=/.uncyclomedia.org/gfwlist -server=/.uncyclopedia.hk/127.0.0.1#5335 -ipset=/.uncyclopedia.hk/gfwlist -server=/.uncyclopedia.tw/127.0.0.1#5335 -ipset=/.uncyclopedia.tw/gfwlist -server=/.underwoodammo.com/127.0.0.1#5335 -ipset=/.underwoodammo.com/gfwlist -server=/.unholyknight.com/127.0.0.1#5335 -ipset=/.unholyknight.com/gfwlist -server=/.uni.cc/127.0.0.1#5335 -ipset=/.uni.cc/gfwlist -server=/.unification.net/127.0.0.1#5335 -ipset=/.unification.net/gfwlist -server=/.unification.org.tw/127.0.0.1#5335 -ipset=/.unification.org.tw/gfwlist -server=/.unirule.cloud/127.0.0.1#5335 -ipset=/.unirule.cloud/gfwlist -server=/.unitedsocialpress.com/127.0.0.1#5335 -ipset=/.unitedsocialpress.com/gfwlist -server=/.unix100.com/127.0.0.1#5335 -ipset=/.unix100.com/gfwlist -server=/.unknownspace.org/127.0.0.1#5335 -ipset=/.unknownspace.org/gfwlist -server=/.unodedos.com/127.0.0.1#5335 -ipset=/.unodedos.com/gfwlist -server=/.unpo.org/127.0.0.1#5335 -ipset=/.unpo.org/gfwlist -server=/.unseen.is/127.0.0.1#5335 -ipset=/.unseen.is/gfwlist -server=/.untraceable.us/127.0.0.1#5335 -ipset=/.untraceable.us/gfwlist -server=/.uocn.org/127.0.0.1#5335 -ipset=/.uocn.org/gfwlist -server=/.upcoming.yahoo.com/127.0.0.1#5335 -ipset=/.upcoming.yahoo.com/gfwlist -server=/.updates.tdesktop.com/127.0.0.1#5335 -ipset=/.updates.tdesktop.com/gfwlist -server=/.upholdjustice.org/127.0.0.1#5335 -ipset=/.upholdjustice.org/gfwlist -server=/.upload4u.info/127.0.0.1#5335 -ipset=/.upload4u.info/gfwlist -server=/.upmedia.mg/127.0.0.1#5335 -ipset=/.upmedia.mg/gfwlist -server=/.upornia.com/127.0.0.1#5335 -ipset=/.upornia.com/gfwlist -server=/.uproxy.org/127.0.0.1#5335 -ipset=/.uproxy.org/gfwlist -server=/.uptodown.com/127.0.0.1#5335 -ipset=/.uptodown.com/gfwlist -server=/.upwill.org/127.0.0.1#5335 -ipset=/.upwill.org/gfwlist -server=/.ur7s.com/127.0.0.1#5335 -ipset=/.ur7s.com/gfwlist -server=/.uraban.me/127.0.0.1#5335 -ipset=/.uraban.me/gfwlist -server=/.urbansurvival.com/127.0.0.1#5335 -ipset=/.urbansurvival.com/gfwlist -server=/.urchin.com/127.0.0.1#5335 -ipset=/.urchin.com/gfwlist -server=/.urlborg.com/127.0.0.1#5335 -ipset=/.urlborg.com/gfwlist -server=/.urlparser.com/127.0.0.1#5335 -ipset=/.urlparser.com/gfwlist -server=/.us.to/127.0.0.1#5335 -ipset=/.us.to/gfwlist -server=/.usacn.com/127.0.0.1#5335 -ipset=/.usacn.com/gfwlist -server=/.usaip.eu/127.0.0.1#5335 -ipset=/.usaip.eu/gfwlist -server=/.userapi.nytlog.com/127.0.0.1#5335 -ipset=/.userapi.nytlog.com/gfwlist -server=/.usfk.mil/127.0.0.1#5335 -ipset=/.usfk.mil/gfwlist -server=/.ushuarencity.echainhost.com/127.0.0.1#5335 -ipset=/.ushuarencity.echainhost.com/gfwlist -server=/.usinfo.state.gov/127.0.0.1#5335 -ipset=/.usinfo.state.gov/gfwlist -server=/.usma.edu/127.0.0.1#5335 -ipset=/.usma.edu/gfwlist -server=/.usmc.mil/127.0.0.1#5335 -ipset=/.usmc.mil/gfwlist -server=/.usno.navy.mil/127.0.0.1#5335 -ipset=/.usno.navy.mil/gfwlist -server=/.usocctn.com/127.0.0.1#5335 -ipset=/.usocctn.com/gfwlist -server=/.ustream.tv/127.0.0.1#5335 -ipset=/.ustream.tv/gfwlist -server=/.usunitednews.com/127.0.0.1#5335 -ipset=/.usunitednews.com/gfwlist -server=/.usus.cc/127.0.0.1#5335 -ipset=/.usus.cc/gfwlist -server=/.utopianpal.com/127.0.0.1#5335 -ipset=/.utopianpal.com/gfwlist -server=/.uu-gg.com/127.0.0.1#5335 -ipset=/.uu-gg.com/gfwlist -server=/.uukanshu.com/127.0.0.1#5335 -ipset=/.uukanshu.com/gfwlist -server=/.uvwxyz.xyz/127.0.0.1#5335 -ipset=/.uvwxyz.xyz/gfwlist -server=/.uwants.com/127.0.0.1#5335 -ipset=/.uwants.com/gfwlist -server=/.uwants.net/127.0.0.1#5335 -ipset=/.uwants.net/gfwlist -server=/.uyghur-j.org/127.0.0.1#5335 -ipset=/.uyghur-j.org/gfwlist -server=/.uyghur.co.uk/127.0.0.1#5335 -ipset=/.uyghur.co.uk/gfwlist -server=/.uyghuramerican.org/127.0.0.1#5335 -ipset=/.uyghuramerican.org/gfwlist -server=/.uyghurcanadiansociety.org/127.0.0.1#5335 -ipset=/.uyghurcanadiansociety.org/gfwlist -server=/.uyghurcongress.org/127.0.0.1#5335 -ipset=/.uyghurcongress.org/gfwlist -server=/.uyghurensemble.co.uk/127.0.0.1#5335 -ipset=/.uyghurensemble.co.uk/gfwlist -server=/.uyghurpen.org/127.0.0.1#5335 -ipset=/.uyghurpen.org/gfwlist -server=/.uyghurpress.com/127.0.0.1#5335 -ipset=/.uyghurpress.com/gfwlist -server=/.uyghurstudies.org/127.0.0.1#5335 -ipset=/.uyghurstudies.org/gfwlist -server=/.uygur.org/127.0.0.1#5335 -ipset=/.uygur.org/gfwlist -server=/.v2ex.com/127.0.0.1#5335 -ipset=/.v2ex.com/gfwlist -server=/.v2ray.com/127.0.0.1#5335 -ipset=/.v2ray.com/gfwlist -server=/.van001.com/127.0.0.1#5335 -ipset=/.van001.com/gfwlist -server=/.van698.com/127.0.0.1#5335 -ipset=/.van698.com/gfwlist -server=/.vanemu.cn/127.0.0.1#5335 -ipset=/.vanemu.cn/gfwlist -server=/.vanilla-jp.com/127.0.0.1#5335 -ipset=/.vanilla-jp.com/gfwlist -server=/.vanpeople.com/127.0.0.1#5335 -ipset=/.vanpeople.com/gfwlist -server=/.vansky.com/127.0.0.1#5335 -ipset=/.vansky.com/gfwlist -server=/.vaticannews.va/127.0.0.1#5335 -ipset=/.vaticannews.va/gfwlist -server=/.vatn.org/127.0.0.1#5335 -ipset=/.vatn.org/gfwlist -server=/.vcf-online.org/127.0.0.1#5335 -ipset=/.vcf-online.org/gfwlist -server=/.vcfbuilder.org/127.0.0.1#5335 -ipset=/.vcfbuilder.org/gfwlist -server=/.vegas.williamhill.com/127.0.0.1#5335 -ipset=/.vegas.williamhill.com/gfwlist -server=/.vegasred.com/127.0.0.1#5335 -ipset=/.vegasred.com/gfwlist -server=/.velkaepocha.sk/127.0.0.1#5335 -ipset=/.velkaepocha.sk/gfwlist -server=/.venbbs.com/127.0.0.1#5335 -ipset=/.venbbs.com/gfwlist -server=/.venchina.com/127.0.0.1#5335 -ipset=/.venchina.com/gfwlist -server=/.venetianmacao.com/127.0.0.1#5335 -ipset=/.venetianmacao.com/gfwlist -server=/.ventureswell.com/127.0.0.1#5335 -ipset=/.ventureswell.com/gfwlist -server=/.veoh.com/127.0.0.1#5335 -ipset=/.veoh.com/gfwlist -server=/.vermonttibet.org/127.0.0.1#5335 -ipset=/.vermonttibet.org/gfwlist -server=/.versavpn.com/127.0.0.1#5335 -ipset=/.versavpn.com/gfwlist -server=/.verybs.com/127.0.0.1#5335 -ipset=/.verybs.com/gfwlist -server=/.vevo.com/127.0.0.1#5335 -ipset=/.vevo.com/gfwlist -server=/.vft.com.tw/127.0.0.1#5335 -ipset=/.vft.com.tw/gfwlist -server=/.viber.com/127.0.0.1#5335 -ipset=/.viber.com/gfwlist -server=/.vica.info/127.0.0.1#5335 -ipset=/.vica.info/gfwlist -server=/.victimsofcommunism.org/127.0.0.1#5335 -ipset=/.victimsofcommunism.org/gfwlist -server=/.vid.me/127.0.0.1#5335 -ipset=/.vid.me/gfwlist -server=/.vidble.com/127.0.0.1#5335 -ipset=/.vidble.com/gfwlist -server=/.video.aol.com/127.0.0.1#5335 -ipset=/.video.aol.com/gfwlist -server=/.video.ap.org/127.0.0.1#5335 -ipset=/.video.ap.org/gfwlist -server=/.video.fdbox.com/127.0.0.1#5335 -ipset=/.video.fdbox.com/gfwlist -server=/.video.foxbusiness.com/127.0.0.1#5335 -ipset=/.video.foxbusiness.com/gfwlist -server=/.video.pbs.org/127.0.0.1#5335 -ipset=/.video.pbs.org/gfwlist -server=/.video.yahoo.com/127.0.0.1#5335 -ipset=/.video.yahoo.com/gfwlist -server=/.videobam.com/127.0.0.1#5335 -ipset=/.videobam.com/gfwlist -server=/.videodetective.com/127.0.0.1#5335 -ipset=/.videodetective.com/gfwlist -server=/.videomega.tv/127.0.0.1#5335 -ipset=/.videomega.tv/gfwlist -server=/.videomo.com/127.0.0.1#5335 -ipset=/.videomo.com/gfwlist -server=/.videopediaworld.com/127.0.0.1#5335 -ipset=/.videopediaworld.com/gfwlist -server=/.videopress.com/127.0.0.1#5335 -ipset=/.videopress.com/gfwlist -server=/.vietdaikynguyen.com/127.0.0.1#5335 -ipset=/.vietdaikynguyen.com/gfwlist -server=/.vijayatemple.org/127.0.0.1#5335 -ipset=/.vijayatemple.org/gfwlist -server=/.vimeo.com/127.0.0.1#5335 -ipset=/.vimeo.com/gfwlist -server=/.vimperator.org/127.0.0.1#5335 -ipset=/.vimperator.org/gfwlist -server=/.vincnd.com/127.0.0.1#5335 -ipset=/.vincnd.com/gfwlist -server=/.vine.co/127.0.0.1#5335 -ipset=/.vine.co/gfwlist -server=/.vinniev.com/127.0.0.1#5335 -ipset=/.vinniev.com/gfwlist -server=/.vip-enterprise.com/127.0.0.1#5335 -ipset=/.vip-enterprise.com/gfwlist -server=/.virtualrealporn.com/127.0.0.1#5335 -ipset=/.virtualrealporn.com/gfwlist -server=/.visibletweets.com/127.0.0.1#5335 -ipset=/.visibletweets.com/gfwlist -server=/.vital247.org/127.0.0.1#5335 -ipset=/.vital247.org/gfwlist -server=/.viu.com/127.0.0.1#5335 -ipset=/.viu.com/gfwlist -server=/.vivahentai4u.net/127.0.0.1#5335 -ipset=/.vivahentai4u.net/gfwlist -server=/.vivatube.com/127.0.0.1#5335 -ipset=/.vivatube.com/gfwlist -server=/.vivthomas.com/127.0.0.1#5335 -ipset=/.vivthomas.com/gfwlist -server=/.vizvaz.com/127.0.0.1#5335 -ipset=/.vizvaz.com/gfwlist -server=/.vjav.com/127.0.0.1#5335 -ipset=/.vjav.com/gfwlist -server=/.vjmedia.com.hk/127.0.0.1#5335 -ipset=/.vjmedia.com.hk/gfwlist -server=/.vllcs.org/127.0.0.1#5335 -ipset=/.vllcs.org/gfwlist -server=/.vlog.xuite.net/127.0.0.1#5335 -ipset=/.vlog.xuite.net/gfwlist -server=/.vmixcore.com/127.0.0.1#5335 -ipset=/.vmixcore.com/gfwlist -server=/.vmpsoft.com/127.0.0.1#5335 -ipset=/.vmpsoft.com/gfwlist -server=/.vn.hao123.com/127.0.0.1#5335 -ipset=/.vn.hao123.com/gfwlist -server=/.vnet.link/127.0.0.1#5335 -ipset=/.vnet.link/gfwlist -server=/.voa-11.akacast.akamaistream.net/127.0.0.1#5335 -ipset=/.voa-11.akacast.akamaistream.net/gfwlist -server=/.voacantonese.com/127.0.0.1#5335 -ipset=/.voacantonese.com/gfwlist -server=/.voachinese.com/127.0.0.1#5335 -ipset=/.voachinese.com/gfwlist -server=/.voachineseblog.com/127.0.0.1#5335 -ipset=/.voachineseblog.com/gfwlist -server=/.voagd.com/127.0.0.1#5335 -ipset=/.voagd.com/gfwlist -server=/.voanews.com/127.0.0.1#5335 -ipset=/.voanews.com/gfwlist -server=/.voatibetan.com/127.0.0.1#5335 -ipset=/.voatibetan.com/gfwlist -server=/.voatibetanenglish.com/127.0.0.1#5335 -ipset=/.voatibetanenglish.com/gfwlist -server=/.vocativ.com/127.0.0.1#5335 -ipset=/.vocativ.com/gfwlist -server=/.vocn.tv/127.0.0.1#5335 -ipset=/.vocn.tv/gfwlist -server=/.vod-abematv.akamaized.net/127.0.0.1#5335 -ipset=/.vod-abematv.akamaized.net/gfwlist -server=/.vod.wwe.com/127.0.0.1#5335 -ipset=/.vod.wwe.com/gfwlist -server=/.vot.org/127.0.0.1#5335 -ipset=/.vot.org/gfwlist -server=/.vovo2000.com/127.0.0.1#5335 -ipset=/.vovo2000.com/gfwlist -server=/.voxer.com/127.0.0.1#5335 -ipset=/.voxer.com/gfwlist -server=/.voy.com/127.0.0.1#5335 -ipset=/.voy.com/gfwlist -server=/.vpn.ac/127.0.0.1#5335 -ipset=/.vpn.ac/gfwlist -server=/.vpn.cjb.net/127.0.0.1#5335 -ipset=/.vpn.cjb.net/gfwlist -server=/.vpn.cmu.edu/127.0.0.1#5335 -ipset=/.vpn.cmu.edu/gfwlist -server=/.vpn.sv.cmu.edu/127.0.0.1#5335 -ipset=/.vpn.sv.cmu.edu/gfwlist -server=/.vpn4all.com/127.0.0.1#5335 -ipset=/.vpn4all.com/gfwlist -server=/.vpnaccount.org/127.0.0.1#5335 -ipset=/.vpnaccount.org/gfwlist -server=/.vpnaccounts.com/127.0.0.1#5335 -ipset=/.vpnaccounts.com/gfwlist -server=/.vpnbook.com/127.0.0.1#5335 -ipset=/.vpnbook.com/gfwlist -server=/.vpncomparison.org/127.0.0.1#5335 -ipset=/.vpncomparison.org/gfwlist -server=/.vpncoupons.com/127.0.0.1#5335 -ipset=/.vpncoupons.com/gfwlist -server=/.vpncup.com/127.0.0.1#5335 -ipset=/.vpncup.com/gfwlist -server=/.vpndada.com/127.0.0.1#5335 -ipset=/.vpndada.com/gfwlist -server=/.vpnfan.com/127.0.0.1#5335 -ipset=/.vpnfan.com/gfwlist -server=/.vpnfire.com/127.0.0.1#5335 -ipset=/.vpnfire.com/gfwlist -server=/.vpnfires.biz/127.0.0.1#5335 -ipset=/.vpnfires.biz/gfwlist -server=/.vpnforgame.net/127.0.0.1#5335 -ipset=/.vpnforgame.net/gfwlist -server=/.vpngate.jp/127.0.0.1#5335 -ipset=/.vpngate.jp/gfwlist -server=/.vpngate.net/127.0.0.1#5335 -ipset=/.vpngate.net/gfwlist -server=/.vpngratis.net/127.0.0.1#5335 -ipset=/.vpngratis.net/gfwlist -server=/.vpnhq.com/127.0.0.1#5335 -ipset=/.vpnhq.com/gfwlist -server=/.vpninja.net/127.0.0.1#5335 -ipset=/.vpninja.net/gfwlist -server=/.vpnintouch.com/127.0.0.1#5335 -ipset=/.vpnintouch.com/gfwlist -server=/.vpnintouch.net/127.0.0.1#5335 -ipset=/.vpnintouch.net/gfwlist -server=/.vpnjack.com/127.0.0.1#5335 -ipset=/.vpnjack.com/gfwlist -server=/.vpnmaster.com/127.0.0.1#5335 -ipset=/.vpnmaster.com/gfwlist -server=/.vpnmentor.com/127.0.0.1#5335 -ipset=/.vpnmentor.com/gfwlist -server=/.vpnpick.com/127.0.0.1#5335 -ipset=/.vpnpick.com/gfwlist -server=/.vpnpop.com/127.0.0.1#5335 -ipset=/.vpnpop.com/gfwlist -server=/.vpnpronet.com/127.0.0.1#5335 -ipset=/.vpnpronet.com/gfwlist -server=/.vpnreactor.com/127.0.0.1#5335 -ipset=/.vpnreactor.com/gfwlist -server=/.vpnreviewz.com/127.0.0.1#5335 -ipset=/.vpnreviewz.com/gfwlist -server=/.vpnsecure.me/127.0.0.1#5335 -ipset=/.vpnsecure.me/gfwlist -server=/.vpnshazam.com/127.0.0.1#5335 -ipset=/.vpnshazam.com/gfwlist -server=/.vpnshieldapp.com/127.0.0.1#5335 -ipset=/.vpnshieldapp.com/gfwlist -server=/.vpnsp.com/127.0.0.1#5335 -ipset=/.vpnsp.com/gfwlist -server=/.vpntraffic.com/127.0.0.1#5335 -ipset=/.vpntraffic.com/gfwlist -server=/.vpntunnel.com/127.0.0.1#5335 -ipset=/.vpntunnel.com/gfwlist -server=/.vpnuk.info/127.0.0.1#5335 -ipset=/.vpnuk.info/gfwlist -server=/.vpnunlimitedapp.com/127.0.0.1#5335 -ipset=/.vpnunlimitedapp.com/gfwlist -server=/.vpnvip.com/127.0.0.1#5335 -ipset=/.vpnvip.com/gfwlist -server=/.vpnworldwide.com/127.0.0.1#5335 -ipset=/.vpnworldwide.com/gfwlist -server=/.vporn.com/127.0.0.1#5335 -ipset=/.vporn.com/gfwlist -server=/.vpser.net/127.0.0.1#5335 -ipset=/.vpser.net/gfwlist -server=/.vraiesagesse.net/127.0.0.1#5335 -ipset=/.vraiesagesse.net/gfwlist -server=/.vrmtr.com/127.0.0.1#5335 -ipset=/.vrmtr.com/gfwlist -server=/.vrsmash.com/127.0.0.1#5335 -ipset=/.vrsmash.com/gfwlist -server=/.vtunnel.com/127.0.0.1#5335 -ipset=/.vtunnel.com/gfwlist -server=/.vuku.cc/127.0.0.1#5335 -ipset=/.vuku.cc/gfwlist -server=/.vultryhw.com/127.0.0.1#5335 -ipset=/.vultryhw.com/gfwlist -server=/.w3schools.com/127.0.0.1#5335 -ipset=/.w3schools.com/gfwlist -server=/.waffle1999.com/127.0.0.1#5335 -ipset=/.waffle1999.com/gfwlist -server=/.wahas.com/127.0.0.1#5335 -ipset=/.wahas.com/gfwlist -server=/.waigaobu.com/127.0.0.1#5335 -ipset=/.waigaobu.com/gfwlist -server=/.wailaike.net/127.0.0.1#5335 -ipset=/.wailaike.net/gfwlist -server=/.waiwaier.com/127.0.0.1#5335 -ipset=/.waiwaier.com/gfwlist -server=/.wallmama.com/127.0.0.1#5335 -ipset=/.wallmama.com/gfwlist -server=/.wallornot.org/127.0.0.1#5335 -ipset=/.wallornot.org/gfwlist -server=/.wallpapercasa.com/127.0.0.1#5335 -ipset=/.wallpapercasa.com/gfwlist -server=/.wallproxy.com/127.0.0.1#5335 -ipset=/.wallproxy.com/gfwlist -server=/.waltermartin.com/127.0.0.1#5335 -ipset=/.waltermartin.com/gfwlist -server=/.waltermartin.org/127.0.0.1#5335 -ipset=/.waltermartin.org/gfwlist -server=/.wanderinghorse.net/127.0.0.1#5335 -ipset=/.wanderinghorse.net/gfwlist -server=/.wangafu.net/127.0.0.1#5335 -ipset=/.wangafu.net/gfwlist -server=/.wangjinbo.org/127.0.0.1#5335 -ipset=/.wangjinbo.org/gfwlist -server=/.wanglixiong.com/127.0.0.1#5335 -ipset=/.wanglixiong.com/gfwlist -server=/.wango.org/127.0.0.1#5335 -ipset=/.wango.org/gfwlist -server=/.wangruoshui.net/127.0.0.1#5335 -ipset=/.wangruoshui.net/gfwlist -server=/.want-daily.com/127.0.0.1#5335 -ipset=/.want-daily.com/gfwlist -server=/.wanz-factory.com/127.0.0.1#5335 -ipset=/.wanz-factory.com/gfwlist -server=/.warbler.iconfactory.net/127.0.0.1#5335 -ipset=/.warbler.iconfactory.net/gfwlist -server=/.waselpro.com/127.0.0.1#5335 -ipset=/.waselpro.com/gfwlist -server=/.washeng.net/127.0.0.1#5335 -ipset=/.washeng.net/gfwlist -server=/.washingtonpost.com/127.0.0.1#5335 -ipset=/.washingtonpost.com/gfwlist -server=/.watch8x.com/127.0.0.1#5335 -ipset=/.watch8x.com/gfwlist -server=/.watchinese.com/127.0.0.1#5335 -ipset=/.watchinese.com/gfwlist -server=/.watchmygf.net/127.0.0.1#5335 -ipset=/.watchmygf.net/gfwlist -server=/.wattpad.com/127.0.0.1#5335 -ipset=/.wattpad.com/gfwlist -server=/.wav.tv/127.0.0.1#5335 -ipset=/.wav.tv/gfwlist -server=/.waveprotocol.org/127.0.0.1#5335 -ipset=/.waveprotocol.org/gfwlist -server=/.waymo.com/127.0.0.1#5335 -ipset=/.waymo.com/gfwlist -server=/.wda.gov.tw/127.0.0.1#5335 -ipset=/.wda.gov.tw/gfwlist -server=/.wdf5.com/127.0.0.1#5335 -ipset=/.wdf5.com/gfwlist -server=/.wearehairy.com/127.0.0.1#5335 -ipset=/.wearehairy.com/gfwlist -server=/.wearn.com/127.0.0.1#5335 -ipset=/.wearn.com/gfwlist -server=/.web.dev/127.0.0.1#5335 -ipset=/.web.dev/gfwlist -server=/.web2project.net/127.0.0.1#5335 -ipset=/.web2project.net/gfwlist -server=/.webbang.net/127.0.0.1#5335 -ipset=/.webbang.net/gfwlist -server=/.webevader.org/127.0.0.1#5335 -ipset=/.webevader.org/gfwlist -server=/.webfreer.com/127.0.0.1#5335 -ipset=/.webfreer.com/gfwlist -server=/.webjb.org/127.0.0.1#5335 -ipset=/.webjb.org/gfwlist -server=/.weblagu.com/127.0.0.1#5335 -ipset=/.weblagu.com/gfwlist -server=/.webmproject.org/127.0.0.1#5335 -ipset=/.webmproject.org/gfwlist -server=/.webrtc.org/127.0.0.1#5335 -ipset=/.webrtc.org/gfwlist -server=/.webrush.net/127.0.0.1#5335 -ipset=/.webrush.net/gfwlist -server=/.webs-tv.net/127.0.0.1#5335 -ipset=/.webs-tv.net/gfwlist -server=/.website.informer.com/127.0.0.1#5335 -ipset=/.website.informer.com/gfwlist -server=/.webwarper.net/127.0.0.1#5335 -ipset=/.webwarper.net/gfwlist -server=/.webworkerdaily.com/127.0.0.1#5335 -ipset=/.webworkerdaily.com/gfwlist -server=/.weekmag.info/127.0.0.1#5335 -ipset=/.weekmag.info/gfwlist -server=/.wefightcensorship.org/127.0.0.1#5335 -ipset=/.wefightcensorship.org/gfwlist -server=/.wefong.com/127.0.0.1#5335 -ipset=/.wefong.com/gfwlist -server=/.wego.here.com/127.0.0.1#5335 -ipset=/.wego.here.com/gfwlist -server=/.weiboleak.com/127.0.0.1#5335 -ipset=/.weiboleak.com/gfwlist -server=/.weiboscope.jmsc.hku.hk/127.0.0.1#5335 -ipset=/.weiboscope.jmsc.hku.hk/gfwlist -server=/.weihuo.org/127.0.0.1#5335 -ipset=/.weihuo.org/gfwlist -server=/.weijingsheng.org/127.0.0.1#5335 -ipset=/.weijingsheng.org/gfwlist -server=/.weiming.info/127.0.0.1#5335 -ipset=/.weiming.info/gfwlist -server=/.weiquanwang.org/127.0.0.1#5335 -ipset=/.weiquanwang.org/gfwlist -server=/.weisuo.ws/127.0.0.1#5335 -ipset=/.weisuo.ws/gfwlist -server=/.welovecock.com/127.0.0.1#5335 -ipset=/.welovecock.com/gfwlist -server=/.wemigrate.org/127.0.0.1#5335 -ipset=/.wemigrate.org/gfwlist -server=/.wengewang.com/127.0.0.1#5335 -ipset=/.wengewang.com/gfwlist -server=/.wengewang.org/127.0.0.1#5335 -ipset=/.wengewang.org/gfwlist -server=/.wenhui.ch/127.0.0.1#5335 -ipset=/.wenhui.ch/gfwlist -server=/.wenxuecity.com/127.0.0.1#5335 -ipset=/.wenxuecity.com/gfwlist -server=/.wenyunchao.com/127.0.0.1#5335 -ipset=/.wenyunchao.com/gfwlist -server=/.wenzhao.ca/127.0.0.1#5335 -ipset=/.wenzhao.ca/gfwlist -server=/.westca.com/127.0.0.1#5335 -ipset=/.westca.com/gfwlist -server=/.westernshugdensociety.org/127.0.0.1#5335 -ipset=/.westernshugdensociety.org/gfwlist -server=/.westernwolves.com/127.0.0.1#5335 -ipset=/.westernwolves.com/gfwlist -server=/.westkit.net/127.0.0.1#5335 -ipset=/.westkit.net/gfwlist -server=/.westpoint.edu/127.0.0.1#5335 -ipset=/.westpoint.edu/gfwlist -server=/.wetplace.com/127.0.0.1#5335 -ipset=/.wetplace.com/gfwlist -server=/.wetpussygames.com/127.0.0.1#5335 -ipset=/.wetpussygames.com/gfwlist -server=/.wexiaobo.org/127.0.0.1#5335 -ipset=/.wexiaobo.org/gfwlist -server=/.wezhiyong.org/127.0.0.1#5335 -ipset=/.wezhiyong.org/gfwlist -server=/.wezone.net/127.0.0.1#5335 -ipset=/.wezone.net/gfwlist -server=/.wforum.com/127.0.0.1#5335 -ipset=/.wforum.com/gfwlist -server=/.wha.la/127.0.0.1#5335 -ipset=/.wha.la/gfwlist -server=/.whatblocked.com/127.0.0.1#5335 -ipset=/.whatblocked.com/gfwlist -server=/.whatbrowser.org/127.0.0.1#5335 -ipset=/.whatbrowser.org/gfwlist -server=/.whatsapp.com/127.0.0.1#5335 -ipset=/.whatsapp.com/gfwlist -server=/.whatsapp.net/127.0.0.1#5335 -ipset=/.whatsapp.net/gfwlist -server=/.wheatseeds.org/127.0.0.1#5335 -ipset=/.wheatseeds.org/gfwlist -server=/.wheelockslatin.com/127.0.0.1#5335 -ipset=/.wheelockslatin.com/gfwlist -server=/.whereiswerner.com/127.0.0.1#5335 -ipset=/.whereiswerner.com/gfwlist -server=/.wheretowatch.com/127.0.0.1#5335 -ipset=/.wheretowatch.com/gfwlist -server=/.whippedass.com/127.0.0.1#5335 -ipset=/.whippedass.com/gfwlist -server=/.whitebear.freebearblog.org/127.0.0.1#5335 -ipset=/.whitebear.freebearblog.org/gfwlist -server=/.whodns.xyz/127.0.0.1#5335 -ipset=/.whodns.xyz/gfwlist -server=/.whoer.net/127.0.0.1#5335 -ipset=/.whoer.net/gfwlist -server=/.whotalking.com/127.0.0.1#5335 -ipset=/.whotalking.com/gfwlist -server=/.whylover.com/127.0.0.1#5335 -ipset=/.whylover.com/gfwlist -server=/.whyx.org/127.0.0.1#5335 -ipset=/.whyx.org/gfwlist -server=/.widevine.com/127.0.0.1#5335 -ipset=/.widevine.com/gfwlist -server=/.wikaba.com/127.0.0.1#5335 -ipset=/.wikaba.com/gfwlist -server=/.wiki.cnitter.com/127.0.0.1#5335 -ipset=/.wiki.cnitter.com/gfwlist -server=/.wiki.gamerp.jp/127.0.0.1#5335 -ipset=/.wiki.gamerp.jp/gfwlist -server=/.wiki.jqueryui.com/127.0.0.1#5335 -ipset=/.wiki.jqueryui.com/gfwlist -server=/.wiki.moegirl.org/127.0.0.1#5335 -ipset=/.wiki.moegirl.org/gfwlist -server=/.wiki.oauth.net/127.0.0.1#5335 -ipset=/.wiki.oauth.net/gfwlist -server=/.wiki.phonegap.com/127.0.0.1#5335 -ipset=/.wiki.phonegap.com/gfwlist -server=/.wikileaks-forum.com/127.0.0.1#5335 -ipset=/.wikileaks-forum.com/gfwlist -server=/.wikileaks.ch/127.0.0.1#5335 -ipset=/.wikileaks.ch/gfwlist -server=/.wikileaks.com/127.0.0.1#5335 -ipset=/.wikileaks.com/gfwlist -server=/.wikileaks.de/127.0.0.1#5335 -ipset=/.wikileaks.de/gfwlist -server=/.wikileaks.eu/127.0.0.1#5335 -ipset=/.wikileaks.eu/gfwlist -server=/.wikileaks.lu/127.0.0.1#5335 -ipset=/.wikileaks.lu/gfwlist -server=/.wikileaks.org/127.0.0.1#5335 -ipset=/.wikileaks.org/gfwlist -server=/.wikileaks.pl/127.0.0.1#5335 -ipset=/.wikileaks.pl/gfwlist -server=/.wikimapia.org/127.0.0.1#5335 -ipset=/.wikimapia.org/gfwlist -server=/.wikipedia.org/127.0.0.1#5335 -ipset=/.wikipedia.org/gfwlist -server=/.wikiwiki.jp/127.0.0.1#5335 -ipset=/.wikiwiki.jp/gfwlist -server=/.wildammo.com/127.0.0.1#5335 -ipset=/.wildammo.com/gfwlist -server=/.williamhill.com/127.0.0.1#5335 -ipset=/.williamhill.com/gfwlist -server=/.willw.net/127.0.0.1#5335 -ipset=/.willw.net/gfwlist -server=/.windowsphoneme.com/127.0.0.1#5335 -ipset=/.windowsphoneme.com/gfwlist -server=/.windscribe.com/127.0.0.1#5335 -ipset=/.windscribe.com/gfwlist -server=/.wingamestore.com/127.0.0.1#5335 -ipset=/.wingamestore.com/gfwlist -server=/.wingy.site/127.0.0.1#5335 -ipset=/.wingy.site/gfwlist -server=/.winning11.com/127.0.0.1#5335 -ipset=/.winning11.com/gfwlist -server=/.winwhispers.info/127.0.0.1#5335 -ipset=/.winwhispers.info/gfwlist -server=/.wionews.com/127.0.0.1#5335 -ipset=/.wionews.com/gfwlist -server=/.wire.com/127.0.0.1#5335 -ipset=/.wire.com/gfwlist -server=/.wiredbytes.com/127.0.0.1#5335 -ipset=/.wiredbytes.com/gfwlist -server=/.wiredpen.com/127.0.0.1#5335 -ipset=/.wiredpen.com/gfwlist -server=/.wisdompubs.org/127.0.0.1#5335 -ipset=/.wisdompubs.org/gfwlist -server=/.wisevid.com/127.0.0.1#5335 -ipset=/.wisevid.com/gfwlist -server=/.withgoogle.com/127.0.0.1#5335 -ipset=/.withgoogle.com/gfwlist -server=/.withyoutube.com/127.0.0.1#5335 -ipset=/.withyoutube.com/gfwlist -server=/.witnessleeteaching.com/127.0.0.1#5335 -ipset=/.witnessleeteaching.com/gfwlist -server=/.witopia.net/127.0.0.1#5335 -ipset=/.witopia.net/gfwlist -server=/.wizcrafts.net/127.0.0.1#5335 -ipset=/.wizcrafts.net/gfwlist -server=/.wjbk.org/127.0.0.1#5335 -ipset=/.wjbk.org/gfwlist -server=/.wlcnew.jigsy.com/127.0.0.1#5335 -ipset=/.wlcnew.jigsy.com/gfwlist -server=/.wlx.sowiki.net/127.0.0.1#5335 -ipset=/.wlx.sowiki.net/gfwlist -server=/.wn.com/127.0.0.1#5335 -ipset=/.wn.com/gfwlist -server=/.wnacg.com/127.0.0.1#5335 -ipset=/.wnacg.com/gfwlist -server=/.wnacg.org/127.0.0.1#5335 -ipset=/.wnacg.org/gfwlist -server=/.wo.tc/127.0.0.1#5335 -ipset=/.wo.tc/gfwlist -server=/.wo3ttt.wordpress.com/127.0.0.1#5335 -ipset=/.wo3ttt.wordpress.com/gfwlist -server=/.woeser.com/127.0.0.1#5335 -ipset=/.woeser.com/gfwlist -server=/.wokar.org/127.0.0.1#5335 -ipset=/.wokar.org/gfwlist -server=/.wolfax.com/127.0.0.1#5335 -ipset=/.wolfax.com/gfwlist -server=/.woolyss.com/127.0.0.1#5335 -ipset=/.woolyss.com/gfwlist -server=/.woopie.jp/127.0.0.1#5335 -ipset=/.woopie.jp/gfwlist -server=/.woopie.tv/127.0.0.1#5335 -ipset=/.woopie.tv/gfwlist -server=/.wordpress.com/127.0.0.1#5335 -ipset=/.wordpress.com/gfwlist -server=/.workatruna.com/127.0.0.1#5335 -ipset=/.workatruna.com/gfwlist -server=/.workerdemo.org.hk/127.0.0.1#5335 -ipset=/.workerdemo.org.hk/gfwlist -server=/.workerempowerment.org/127.0.0.1#5335 -ipset=/.workerempowerment.org/gfwlist -server=/.workersthebig.net/127.0.0.1#5335 -ipset=/.workersthebig.net/gfwlist -server=/.worldcat.org/127.0.0.1#5335 -ipset=/.worldcat.org/gfwlist -server=/.worldjournal.com/127.0.0.1#5335 -ipset=/.worldjournal.com/gfwlist -server=/.worldvpn.net/127.0.0.1#5335 -ipset=/.worldvpn.net/gfwlist -server=/.wow-life.net/127.0.0.1#5335 -ipset=/.wow-life.net/gfwlist -server=/.wow.com/127.0.0.1#5335 -ipset=/.wow.com/gfwlist -server=/.wowgirls.com/127.0.0.1#5335 -ipset=/.wowgirls.com/gfwlist -server=/.wowlegacy.ml/127.0.0.1#5335 -ipset=/.wowlegacy.ml/gfwlist -server=/.wowporn.com/127.0.0.1#5335 -ipset=/.wowporn.com/gfwlist -server=/.wowrk.com/127.0.0.1#5335 -ipset=/.wowrk.com/gfwlist -server=/.woxinghuiguo.com/127.0.0.1#5335 -ipset=/.woxinghuiguo.com/gfwlist -server=/.woyaolian.org/127.0.0.1#5335 -ipset=/.woyaolian.org/gfwlist -server=/.wozy.in/127.0.0.1#5335 -ipset=/.wozy.in/gfwlist -server=/.wp.com/127.0.0.1#5335 -ipset=/.wp.com/gfwlist -server=/.wpoforum.com/127.0.0.1#5335 -ipset=/.wpoforum.com/gfwlist -server=/.wqyd.org/127.0.0.1#5335 -ipset=/.wqyd.org/gfwlist -server=/.wrchina.org/127.0.0.1#5335 -ipset=/.wrchina.org/gfwlist -server=/.wretch.cc/127.0.0.1#5335 -ipset=/.wretch.cc/gfwlist -server=/.writer.zoho.com/127.0.0.1#5335 -ipset=/.writer.zoho.com/gfwlist -server=/.wsj.com/127.0.0.1#5335 -ipset=/.wsj.com/gfwlist -server=/.wsj.net/127.0.0.1#5335 -ipset=/.wsj.net/gfwlist -server=/.wsjhk.com/127.0.0.1#5335 -ipset=/.wsjhk.com/gfwlist -server=/.wtbn.org/127.0.0.1#5335 -ipset=/.wtbn.org/gfwlist -server=/.wtfpeople.com/127.0.0.1#5335 -ipset=/.wtfpeople.com/gfwlist -server=/.wuerkaixi.com/127.0.0.1#5335 -ipset=/.wuerkaixi.com/gfwlist -server=/.wufafangwen.com/127.0.0.1#5335 -ipset=/.wufafangwen.com/gfwlist -server=/.wufi.org.tw/127.0.0.1#5335 -ipset=/.wufi.org.tw/gfwlist -server=/.wuguoguang.com/127.0.0.1#5335 -ipset=/.wuguoguang.com/gfwlist -server=/.wujie.net/127.0.0.1#5335 -ipset=/.wujie.net/gfwlist -server=/.wujieliulan.com/127.0.0.1#5335 -ipset=/.wujieliulan.com/gfwlist -server=/.wukangrui.net/127.0.0.1#5335 -ipset=/.wukangrui.net/gfwlist -server=/.wuw.red/127.0.0.1#5335 -ipset=/.wuw.red/gfwlist -server=/.wuyanblog.com/127.0.0.1#5335 -ipset=/.wuyanblog.com/gfwlist -server=/.wwitv.com/127.0.0.1#5335 -ipset=/.wwitv.com/gfwlist -server=/.www.abclite.net/127.0.0.1#5335 -ipset=/.www.abclite.net/gfwlist -server=/.www.ajsands.com/127.0.0.1#5335 -ipset=/.www.ajsands.com/gfwlist -server=/.www.americorps.gov/127.0.0.1#5335 -ipset=/.www.americorps.gov/gfwlist -server=/.www.antd.org/127.0.0.1#5335 -ipset=/.www.antd.org/gfwlist -server=/.www.aolnews.com/127.0.0.1#5335 -ipset=/.www.aolnews.com/gfwlist -server=/.www.citizenlab.org/127.0.0.1#5335 -ipset=/.www.citizenlab.org/gfwlist -server=/.www.cmoinc.org/127.0.0.1#5335 -ipset=/.www.cmoinc.org/gfwlist -server=/.www.dwheeler.com/127.0.0.1#5335 -ipset=/.www.dwheeler.com/gfwlist -server=/.www.gmiddle.com/127.0.0.1#5335 -ipset=/.www.gmiddle.com/gfwlist -server=/.www.gmiddle.net/127.0.0.1#5335 -ipset=/.www.gmiddle.net/gfwlist -server=/.www.hustlercash.com/127.0.0.1#5335 -ipset=/.www.hustlercash.com/gfwlist -server=/.www.idlcoyote.com/127.0.0.1#5335 -ipset=/.www.idlcoyote.com/gfwlist -server=/.www.kindleren.com/127.0.0.1#5335 -ipset=/.www.kindleren.com/gfwlist -server=/.www.klip.me/127.0.0.1#5335 -ipset=/.www.klip.me/gfwlist -server=/.www.lamenhu.com/127.0.0.1#5335 -ipset=/.www.lamenhu.com/gfwlist -server=/.www.linksalpha.com/127.0.0.1#5335 -ipset=/.www.linksalpha.com/gfwlist -server=/.www.m-sport.co.uk/127.0.0.1#5335 -ipset=/.www.m-sport.co.uk/gfwlist -server=/.www.monlamit.org/127.0.0.1#5335 -ipset=/.www.monlamit.org/gfwlist -server=/.www.moztw.org/127.0.0.1#5335 -ipset=/.www.moztw.org/gfwlist -server=/.www.orchidbbs.com/127.0.0.1#5335 -ipset=/.www.orchidbbs.com/gfwlist -server=/.www.owind.com/127.0.0.1#5335 -ipset=/.www.owind.com/gfwlist -server=/.www.oxid.it/127.0.0.1#5335 -ipset=/.www.oxid.it/gfwlist -server=/.www.powerpointninja.com/127.0.0.1#5335 -ipset=/.www.powerpointninja.com/gfwlist -server=/.www.s4miniarchive.com/127.0.0.1#5335 -ipset=/.www.s4miniarchive.com/gfwlist -server=/.www.shadowsocks.com/127.0.0.1#5335 -ipset=/.www.shadowsocks.com/gfwlist -server=/.www.shwchurch.org/127.0.0.1#5335 -ipset=/.www.shwchurch.org/gfwlist -server=/.www.taup.org.tw/127.0.0.1#5335 -ipset=/.www.taup.org.tw/gfwlist -server=/.www.wan-press.org/127.0.0.1#5335 -ipset=/.www.wan-press.org/gfwlist -server=/.www.wangruowang.org/127.0.0.1#5335 -ipset=/.www.wangruowang.org/gfwlist -server=/.www.websnapr.com/127.0.0.1#5335 -ipset=/.www.websnapr.com/gfwlist -server=/.www1.biz/127.0.0.1#5335 -ipset=/.www1.biz/gfwlist -server=/.wwwhost.biz/127.0.0.1#5335 -ipset=/.wwwhost.biz/gfwlist -server=/.x-art.com/127.0.0.1#5335 -ipset=/.x-art.com/gfwlist -server=/.x-berry.com/127.0.0.1#5335 -ipset=/.x-berry.com/gfwlist -server=/.x-wall.org/127.0.0.1#5335 -ipset=/.x-wall.org/gfwlist -server=/.x.company/127.0.0.1#5335 -ipset=/.x.company/gfwlist -server=/.x1949x.com/127.0.0.1#5335 -ipset=/.x1949x.com/gfwlist -server=/.x24hr.com/127.0.0.1#5335 -ipset=/.x24hr.com/gfwlist -server=/.x365x.com/127.0.0.1#5335 -ipset=/.x365x.com/gfwlist -server=/.xa.yimg.com/127.0.0.1#5335 -ipset=/.xa.yimg.com/gfwlist -server=/.xanga.com/127.0.0.1#5335 -ipset=/.xanga.com/gfwlist -server=/.xbabe.com/127.0.0.1#5335 -ipset=/.xbabe.com/gfwlist -server=/.xbookcn.com/127.0.0.1#5335 -ipset=/.xbookcn.com/gfwlist -server=/.xbtce.com/127.0.0.1#5335 -ipset=/.xbtce.com/gfwlist -server=/.xcafe.in/127.0.0.1#5335 -ipset=/.xcafe.in/gfwlist -server=/.xcity.jp/127.0.0.1#5335 -ipset=/.xcity.jp/gfwlist -server=/.xcritic.com/127.0.0.1#5335 -ipset=/.xcritic.com/gfwlist -server=/.xerotica.com/127.0.0.1#5335 -ipset=/.xerotica.com/gfwlist -server=/.xfinity.com/127.0.0.1#5335 -ipset=/.xfinity.com/gfwlist -server=/.xfm.pp.ru/127.0.0.1#5335 -ipset=/.xfm.pp.ru/gfwlist -server=/.xgmyd.com/127.0.0.1#5335 -ipset=/.xgmyd.com/gfwlist -server=/.xhamster.com/127.0.0.1#5335 -ipset=/.xhamster.com/gfwlist -server=/.xianba.net/127.0.0.1#5335 -ipset=/.xianba.net/gfwlist -server=/.xianchawang.net/127.0.0.1#5335 -ipset=/.xianchawang.net/gfwlist -server=/.xianjian.tw/127.0.0.1#5335 -ipset=/.xianjian.tw/gfwlist -server=/.xianqiao.net/127.0.0.1#5335 -ipset=/.xianqiao.net/gfwlist -server=/.xiaobaiwu.com/127.0.0.1#5335 -ipset=/.xiaobaiwu.com/gfwlist -server=/.xiaochuncnjp.com/127.0.0.1#5335 -ipset=/.xiaochuncnjp.com/gfwlist -server=/.xiaod.in/127.0.0.1#5335 -ipset=/.xiaod.in/gfwlist -server=/.xiaohexie.com/127.0.0.1#5335 -ipset=/.xiaohexie.com/gfwlist -server=/.xiaolan.me/127.0.0.1#5335 -ipset=/.xiaolan.me/gfwlist -server=/.xiaoma.org/127.0.0.1#5335 -ipset=/.xiaoma.org/gfwlist -server=/.xiezhua.com/127.0.0.1#5335 -ipset=/.xiezhua.com/gfwlist -server=/.xihua.es/127.0.0.1#5335 -ipset=/.xihua.es/gfwlist -server=/.xijie.wordpress.com/127.0.0.1#5335 -ipset=/.xijie.wordpress.com/gfwlist -server=/.xing.com/127.0.0.1#5335 -ipset=/.xing.com/gfwlist -server=/.xinhuanet.org/127.0.0.1#5335 -ipset=/.xinhuanet.org/gfwlist -server=/.xinmiao.com.hk/127.0.0.1#5335 -ipset=/.xinmiao.com.hk/gfwlist -server=/.xinqimeng.over-blog.com/127.0.0.1#5335 -ipset=/.xinqimeng.over-blog.com/gfwlist -server=/.xinsheng.net/127.0.0.1#5335 -ipset=/.xinsheng.net/gfwlist -server=/.xinshijue.com/127.0.0.1#5335 -ipset=/.xinshijue.com/gfwlist -server=/.xinyubbs.net/127.0.0.1#5335 -ipset=/.xinyubbs.net/gfwlist -server=/.xiongpian.com/127.0.0.1#5335 -ipset=/.xiongpian.com/gfwlist -server=/.xiuren.org/127.0.0.1#5335 -ipset=/.xiuren.org/gfwlist -server=/.xizang-zhiye.org/127.0.0.1#5335 -ipset=/.xizang-zhiye.org/gfwlist -server=/.xjp.cc/127.0.0.1#5335 -ipset=/.xjp.cc/gfwlist -server=/.xjtravelguide.com/127.0.0.1#5335 -ipset=/.xjtravelguide.com/gfwlist -server=/.xlfmtalk.com/127.0.0.1#5335 -ipset=/.xlfmtalk.com/gfwlist -server=/.xlfmwz.info/127.0.0.1#5335 -ipset=/.xlfmwz.info/gfwlist -server=/.xm.com/127.0.0.1#5335 -ipset=/.xm.com/gfwlist -server=/.xml-training-guide.com/127.0.0.1#5335 -ipset=/.xml-training-guide.com/gfwlist -server=/.xmovies.com/127.0.0.1#5335 -ipset=/.xmovies.com/gfwlist -server=/.xn--4gq171p.com/127.0.0.1#5335 -ipset=/.xn--4gq171p.com/gfwlist -server=/.xn--czq75pvv1aj5c.org/127.0.0.1#5335 -ipset=/.xn--czq75pvv1aj5c.org/gfwlist -server=/.xn--i2ru8q2qg.com/127.0.0.1#5335 -ipset=/.xn--i2ru8q2qg.com/gfwlist -server=/.xn--ngstr-lra8j.com/127.0.0.1#5335 -ipset=/.xn--ngstr-lra8j.com/gfwlist -server=/.xn--oiq.cc/127.0.0.1#5335 -ipset=/.xn--oiq.cc/gfwlist -server=/.xn--p8j9a0d9c9a.xn--q9jyb4c/127.0.0.1#5335 -ipset=/.xn--p8j9a0d9c9a.xn--q9jyb4c/gfwlist -server=/.xnxx.com/127.0.0.1#5335 -ipset=/.xnxx.com/gfwlist -server=/.xpdo.net/127.0.0.1#5335 -ipset=/.xpdo.net/gfwlist -server=/.xpud.org/127.0.0.1#5335 -ipset=/.xpud.org/gfwlist -server=/.xrentdvd.com/127.0.0.1#5335 -ipset=/.xrentdvd.com/gfwlist -server=/.xskywalker.com/127.0.0.1#5335 -ipset=/.xskywalker.com/gfwlist -server=/.xskywalker.net/127.0.0.1#5335 -ipset=/.xskywalker.net/gfwlist -server=/.xtube.com/127.0.0.1#5335 -ipset=/.xtube.com/gfwlist -server=/.xuchao.net/127.0.0.1#5335 -ipset=/.xuchao.net/gfwlist -server=/.xuchao.org/127.0.0.1#5335 -ipset=/.xuchao.org/gfwlist -server=/.xuehua.us/127.0.0.1#5335 -ipset=/.xuehua.us/gfwlist -server=/.xuzhiyong.net/127.0.0.1#5335 -ipset=/.xuzhiyong.net/gfwlist -server=/.xvideo.cc/127.0.0.1#5335 -ipset=/.xvideo.cc/gfwlist -server=/.xvideos.com/127.0.0.1#5335 -ipset=/.xvideos.com/gfwlist -server=/.xvideos.es/127.0.0.1#5335 -ipset=/.xvideos.es/gfwlist -server=/.xxbbx.com/127.0.0.1#5335 -ipset=/.xxbbx.com/gfwlist -server=/.xxlmovies.com/127.0.0.1#5335 -ipset=/.xxlmovies.com/gfwlist -server=/.xxuz.com/127.0.0.1#5335 -ipset=/.xxuz.com/gfwlist -server=/.xxx.com/127.0.0.1#5335 -ipset=/.xxx.com/gfwlist -server=/.xxx.xxx/127.0.0.1#5335 -ipset=/.xxx.xxx/gfwlist -server=/.xxxfuckmom.com/127.0.0.1#5335 -ipset=/.xxxfuckmom.com/gfwlist -server=/.xxxx.com.au/127.0.0.1#5335 -ipset=/.xxxx.com.au/gfwlist -server=/.xxxy.biz/127.0.0.1#5335 -ipset=/.xxxy.biz/gfwlist -server=/.xxxy.info/127.0.0.1#5335 -ipset=/.xxxy.info/gfwlist -server=/.xxxymovies.com/127.0.0.1#5335 -ipset=/.xxxymovies.com/gfwlist -server=/.xys.dxiong.com/127.0.0.1#5335 -ipset=/.xys.dxiong.com/gfwlist -server=/.xys.org/127.0.0.1#5335 -ipset=/.xys.org/gfwlist -server=/.xysblogs.org/127.0.0.1#5335 -ipset=/.xysblogs.org/gfwlist -server=/.xyy69.com/127.0.0.1#5335 -ipset=/.xyy69.com/gfwlist -server=/.xyy69.info/127.0.0.1#5335 -ipset=/.xyy69.info/gfwlist -server=/.yahoo.com.hk/127.0.0.1#5335 -ipset=/.yahoo.com.hk/gfwlist -server=/.yakbutterblues.com/127.0.0.1#5335 -ipset=/.yakbutterblues.com/gfwlist -server=/.yam.com/127.0.0.1#5335 -ipset=/.yam.com/gfwlist -server=/.yam.org.tw/127.0.0.1#5335 -ipset=/.yam.org.tw/gfwlist -server=/.yanghengjun.com/127.0.0.1#5335 -ipset=/.yanghengjun.com/gfwlist -server=/.yangjianli.com/127.0.0.1#5335 -ipset=/.yangjianli.com/gfwlist -server=/.yasni.co.uk/127.0.0.1#5335 -ipset=/.yasni.co.uk/gfwlist -server=/.ydy.com/127.0.0.1#5335 -ipset=/.ydy.com/gfwlist -server=/.yeahteentube.com/127.0.0.1#5335 -ipset=/.yeahteentube.com/gfwlist -server=/.yecl.net/127.0.0.1#5335 -ipset=/.yecl.net/gfwlist -server=/.yeelou.com/127.0.0.1#5335 -ipset=/.yeelou.com/gfwlist -server=/.yeeyi.com/127.0.0.1#5335 -ipset=/.yeeyi.com/gfwlist -server=/.yegle.net/127.0.0.1#5335 -ipset=/.yegle.net/gfwlist -server=/.yes-news.com/127.0.0.1#5335 -ipset=/.yes-news.com/gfwlist -server=/.yes.xxx/127.0.0.1#5335 -ipset=/.yes.xxx/gfwlist -server=/.yes123.com.tw/127.0.0.1#5335 -ipset=/.yes123.com.tw/gfwlist -server=/.yesasia.com/127.0.0.1#5335 -ipset=/.yesasia.com/gfwlist -server=/.yespornplease.com/127.0.0.1#5335 -ipset=/.yespornplease.com/gfwlist -server=/.yeyeclub.com/127.0.0.1#5335 -ipset=/.yeyeclub.com/gfwlist -server=/.ygto.com/127.0.0.1#5335 -ipset=/.ygto.com/gfwlist -server=/.yhcw.net/127.0.0.1#5335 -ipset=/.yhcw.net/gfwlist -server=/.yibada.com/127.0.0.1#5335 -ipset=/.yibada.com/gfwlist -server=/.yibaochina.com/127.0.0.1#5335 -ipset=/.yibaochina.com/gfwlist -server=/.yidio.com/127.0.0.1#5335 -ipset=/.yidio.com/gfwlist -server=/.yigeni.com/127.0.0.1#5335 -ipset=/.yigeni.com/gfwlist -server=/.yilubbs.com/127.0.0.1#5335 -ipset=/.yilubbs.com/gfwlist -server=/.yingsuoss.com/127.0.0.1#5335 -ipset=/.yingsuoss.com/gfwlist -server=/.yipub.com/127.0.0.1#5335 -ipset=/.yipub.com/gfwlist -server=/.yizhihongxing.com/127.0.0.1#5335 -ipset=/.yizhihongxing.com/gfwlist -server=/.yobit.net/127.0.0.1#5335 -ipset=/.yobit.net/gfwlist -server=/.yobt.com/127.0.0.1#5335 -ipset=/.yobt.com/gfwlist -server=/.yobt.tv/127.0.0.1#5335 -ipset=/.yobt.tv/gfwlist -server=/.yogichen.org/127.0.0.1#5335 -ipset=/.yogichen.org/gfwlist -server=/.yolasite.com/127.0.0.1#5335 -ipset=/.yolasite.com/gfwlist -server=/.yomiuri.co.jp/127.0.0.1#5335 -ipset=/.yomiuri.co.jp/gfwlist -server=/.yong.hu/127.0.0.1#5335 -ipset=/.yong.hu/gfwlist -server=/.yorkbbs.ca/127.0.0.1#5335 -ipset=/.yorkbbs.ca/gfwlist -server=/.you-get.org/127.0.0.1#5335 -ipset=/.you-get.org/gfwlist -server=/.youdontcare.com/127.0.0.1#5335 -ipset=/.youdontcare.com/gfwlist -server=/.youjizz.com/127.0.0.1#5335 -ipset=/.youjizz.com/gfwlist -server=/.youmaker.com/127.0.0.1#5335 -ipset=/.youmaker.com/gfwlist -server=/.youngpornvideos.com/127.0.0.1#5335 -ipset=/.youngpornvideos.com/gfwlist -server=/.youngspiration.hk/127.0.0.1#5335 -ipset=/.youngspiration.hk/gfwlist -server=/.youpai.org/127.0.0.1#5335 -ipset=/.youpai.org/gfwlist -server=/.youporn.com/127.0.0.1#5335 -ipset=/.youporn.com/gfwlist -server=/.youporngay.com/127.0.0.1#5335 -ipset=/.youporngay.com/gfwlist -server=/.your-freedom.net/127.0.0.1#5335 -ipset=/.your-freedom.net/gfwlist -server=/.yourepeat.com/127.0.0.1#5335 -ipset=/.yourepeat.com/gfwlist -server=/.yourlisten.com/127.0.0.1#5335 -ipset=/.yourlisten.com/gfwlist -server=/.yourlust.com/127.0.0.1#5335 -ipset=/.yourlust.com/gfwlist -server=/.yourprivatevpn.com/127.0.0.1#5335 -ipset=/.yourprivatevpn.com/gfwlist -server=/.yourtrap.com/127.0.0.1#5335 -ipset=/.yourtrap.com/gfwlist -server=/.yousendit.com/127.0.0.1#5335 -ipset=/.yousendit.com/gfwlist -server=/.youshun12.com/127.0.0.1#5335 -ipset=/.youshun12.com/gfwlist -server=/.youtu.be/127.0.0.1#5335 -ipset=/.youtu.be/gfwlist -server=/.youtube-nocookie.com/127.0.0.1#5335 -ipset=/.youtube-nocookie.com/gfwlist -server=/.youtube.com/127.0.0.1#5335 -ipset=/.youtube.com/gfwlist -server=/.youtubecn.com/127.0.0.1#5335 -ipset=/.youtubecn.com/gfwlist -server=/.youtubeeducation.com/127.0.0.1#5335 -ipset=/.youtubeeducation.com/gfwlist -server=/.youtubegaming.com/127.0.0.1#5335 -ipset=/.youtubegaming.com/gfwlist -server=/.youversion.com/127.0.0.1#5335 -ipset=/.youversion.com/gfwlist -server=/.youwin.com/127.0.0.1#5335 -ipset=/.youwin.com/gfwlist -server=/.youxu.info/127.0.0.1#5335 -ipset=/.youxu.info/gfwlist -server=/.yt.be/127.0.0.1#5335 -ipset=/.yt.be/gfwlist -server=/.ytht.net/127.0.0.1#5335 -ipset=/.ytht.net/gfwlist -server=/.ytimg.com/127.0.0.1#5335 -ipset=/.ytimg.com/gfwlist -server=/.ytn.co.kr/127.0.0.1#5335 -ipset=/.ytn.co.kr/gfwlist -server=/.yuanming.net/127.0.0.1#5335 -ipset=/.yuanming.net/gfwlist -server=/.yuanzhengtang.org/127.0.0.1#5335 -ipset=/.yuanzhengtang.org/gfwlist -server=/.yulghun.com/127.0.0.1#5335 -ipset=/.yulghun.com/gfwlist -server=/.yunchao.net/127.0.0.1#5335 -ipset=/.yunchao.net/gfwlist -server=/.yuntipub.com/127.0.0.1#5335 -ipset=/.yuntipub.com/gfwlist -server=/.yuvutu.com/127.0.0.1#5335 -ipset=/.yuvutu.com/gfwlist -server=/.yvesgeleyn.com/127.0.0.1#5335 -ipset=/.yvesgeleyn.com/gfwlist -server=/.yx51.net/127.0.0.1#5335 -ipset=/.yx51.net/gfwlist -server=/.yyii.org/127.0.0.1#5335 -ipset=/.yyii.org/gfwlist -server=/.yzzk.com/127.0.0.1#5335 -ipset=/.yzzk.com/gfwlist -server=/.zacebook.com/127.0.0.1#5335 -ipset=/.zacebook.com/gfwlist -server=/.zalmos.com/127.0.0.1#5335 -ipset=/.zalmos.com/gfwlist -server=/.zannel.com/127.0.0.1#5335 -ipset=/.zannel.com/gfwlist -server=/.zaobao.com/127.0.0.1#5335 -ipset=/.zaobao.com/gfwlist -server=/.zaozon.com/127.0.0.1#5335 -ipset=/.zaozon.com/gfwlist -server=/.zapto.org/127.0.0.1#5335 -ipset=/.zapto.org/gfwlist -server=/.zattoo.com/127.0.0.1#5335 -ipset=/.zattoo.com/gfwlist -server=/.zb.com/127.0.0.1#5335 -ipset=/.zb.com/gfwlist -server=/.zdnet.com.tw/127.0.0.1#5335 -ipset=/.zdnet.com.tw/gfwlist -server=/.zello.com/127.0.0.1#5335 -ipset=/.zello.com/gfwlist -server=/.zengjinyan.org/127.0.0.1#5335 -ipset=/.zengjinyan.org/gfwlist -server=/.zenmate.com/127.0.0.1#5335 -ipset=/.zenmate.com/gfwlist -server=/.zeronet.io/127.0.0.1#5335 -ipset=/.zeronet.io/gfwlist -server=/.zeutch.com/127.0.0.1#5335 -ipset=/.zeutch.com/gfwlist -server=/.zfreet.com/127.0.0.1#5335 -ipset=/.zfreet.com/gfwlist -server=/.zgsddh.com/127.0.0.1#5335 -ipset=/.zgsddh.com/gfwlist -server=/.zgzcjj.net/127.0.0.1#5335 -ipset=/.zgzcjj.net/gfwlist -server=/.zh.bitterwinter.org/127.0.0.1#5335 -ipset=/.zh.bitterwinter.org/gfwlist -server=/.zh.ecdm.wikia.com/127.0.0.1#5335 -ipset=/.zh.ecdm.wikia.com/gfwlist -server=/.zh.pokerstrategy.com/127.0.0.1#5335 -ipset=/.zh.pokerstrategy.com/gfwlist -server=/.zh.uncyclopedia.wikia.com/127.0.0.1#5335 -ipset=/.zh.uncyclopedia.wikia.com/gfwlist -server=/.zh.wikinews.org/127.0.0.1#5335 -ipset=/.zh.wikinews.org/gfwlist -server=/.zh.wikisource.org/127.0.0.1#5335 -ipset=/.zh.wikisource.org/gfwlist -server=/.zhanbin.net/127.0.0.1#5335 -ipset=/.zhanbin.net/gfwlist -server=/.zhangboli.net/127.0.0.1#5335 -ipset=/.zhangboli.net/gfwlist -server=/.zhangtianliang.com/127.0.0.1#5335 -ipset=/.zhangtianliang.com/gfwlist -server=/.zhanlve.org/127.0.0.1#5335 -ipset=/.zhanlve.org/gfwlist -server=/.zhao.1984.city/127.0.0.1#5335 -ipset=/.zhao.1984.city/gfwlist -server=/.zhao.jinhai.de/127.0.0.1#5335 -ipset=/.zhao.jinhai.de/gfwlist -server=/.zhenghui.org/127.0.0.1#5335 -ipset=/.zhenghui.org/gfwlist -server=/.zhengjian.org/127.0.0.1#5335 -ipset=/.zhengjian.org/gfwlist -server=/.zhengwunet.org/127.0.0.1#5335 -ipset=/.zhengwunet.org/gfwlist -server=/.zhenlibu.info/127.0.0.1#5335 -ipset=/.zhenlibu.info/gfwlist -server=/.zhenlibu1984.com/127.0.0.1#5335 -ipset=/.zhenlibu1984.com/gfwlist -server=/.zhenxiang.biz/127.0.0.1#5335 -ipset=/.zhenxiang.biz/gfwlist -server=/.zhinengluyou.com/127.0.0.1#5335 -ipset=/.zhinengluyou.com/gfwlist -server=/.zhongguo.ca/127.0.0.1#5335 -ipset=/.zhongguo.ca/gfwlist -server=/.zhongguorenquan.org/127.0.0.1#5335 -ipset=/.zhongguorenquan.org/gfwlist -server=/.zhongguotese.net/127.0.0.1#5335 -ipset=/.zhongguotese.net/gfwlist -server=/.zhongmeng.org/127.0.0.1#5335 -ipset=/.zhongmeng.org/gfwlist -server=/.zhoushuguang.com/127.0.0.1#5335 -ipset=/.zhoushuguang.com/gfwlist -server=/.zhreader.com/127.0.0.1#5335 -ipset=/.zhreader.com/gfwlist -server=/.zhuangbi.me/127.0.0.1#5335 -ipset=/.zhuangbi.me/gfwlist -server=/.zhuanxing.cn/127.0.0.1#5335 -ipset=/.zhuanxing.cn/gfwlist -server=/.zhuatieba.com/127.0.0.1#5335 -ipset=/.zhuatieba.com/gfwlist -server=/.zhuichaguoji.org/127.0.0.1#5335 -ipset=/.zhuichaguoji.org/gfwlist -server=/.zillionk.com/127.0.0.1#5335 -ipset=/.zillionk.com/gfwlist -server=/.zim.vn/127.0.0.1#5335 -ipset=/.zim.vn/gfwlist -server=/.zinio.com/127.0.0.1#5335 -ipset=/.zinio.com/gfwlist -server=/.ziporn.com/127.0.0.1#5335 -ipset=/.ziporn.com/gfwlist -server=/.zippyshare.com/127.0.0.1#5335 -ipset=/.zippyshare.com/gfwlist -server=/.zkaip.com/127.0.0.1#5335 -ipset=/.zkaip.com/gfwlist -server=/.zmw.cn/127.0.0.1#5335 -ipset=/.zmw.cn/gfwlist -server=/.zodgame.us/127.0.0.1#5335 -ipset=/.zodgame.us/gfwlist -server=/.zomobo.net/127.0.0.1#5335 -ipset=/.zomobo.net/gfwlist -server=/.zonaeuropa.com/127.0.0.1#5335 -ipset=/.zonaeuropa.com/gfwlist -server=/.zonghexinwen.com/127.0.0.1#5335 -ipset=/.zonghexinwen.com/gfwlist -server=/.zonghexinwen.net/127.0.0.1#5335 -ipset=/.zonghexinwen.net/gfwlist -server=/.zoogvpn.com/127.0.0.1#5335 -ipset=/.zoogvpn.com/gfwlist -server=/.zootool.com/127.0.0.1#5335 -ipset=/.zootool.com/gfwlist -server=/.zoozle.net/127.0.0.1#5335 -ipset=/.zoozle.net/gfwlist -server=/.zorrovpn.com/127.0.0.1#5335 -ipset=/.zorrovpn.com/gfwlist -server=/.zozotown.com/127.0.0.1#5335 -ipset=/.zozotown.com/gfwlist -server=/.zpn.im/127.0.0.1#5335 -ipset=/.zpn.im/gfwlist -server=/.zspeeder.me/127.0.0.1#5335 -ipset=/.zspeeder.me/gfwlist -server=/.zsrhao.com/127.0.0.1#5335 -ipset=/.zsrhao.com/gfwlist -server=/.zuo.la/127.0.0.1#5335 -ipset=/.zuo.la/gfwlist -server=/.zuobiao.me/127.0.0.1#5335 -ipset=/.zuobiao.me/gfwlist -server=/.zuola.com/127.0.0.1#5335 -ipset=/.zuola.com/gfwlist -server=/.zvereff.com/127.0.0.1#5335 -ipset=/.zvereff.com/gfwlist -server=/.zynaima.com/127.0.0.1#5335 -ipset=/.zynaima.com/gfwlist -server=/.zynamics.com/127.0.0.1#5335 -ipset=/.zynamics.com/gfwlist -server=/.zyns.com/127.0.0.1#5335 -ipset=/.zyns.com/gfwlist -server=/.zyzc9.com/127.0.0.1#5335 -ipset=/.zyzc9.com/gfwlist -server=/.zzcartoon.com/127.0.0.1#5335 -ipset=/.zzcartoon.com/gfwlist -server=/.zzcloud.me/127.0.0.1#5335 -ipset=/.zzcloud.me/gfwlist -server=/.zzux.com/127.0.0.1#5335 -ipset=/.zzux.com/gfwlist diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_domain.list deleted file mode 100644 index 40ad124b30..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_domain.list +++ /dev/null @@ -1,22 +0,0 @@ -fast.com -netflix.ca -netflix.com -netflix.net -netflixinvestor.com -netflixtechblog.com -nflxext.com -nflximg.com -nflximg.net -nflxsearch.net -nflxso.net -nflxvideo.net -netflixdnstest0.com -netflixdnstest1.com -netflixdnstest2.com -netflixdnstest3.com -netflixdnstest4.com -netflixdnstest5.com -netflixdnstest6.com -netflixdnstest7.com -netflixdnstest8.com -netflixdnstest9.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/netflix_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/oversea_list.conf b/package/ctcgfw/luci-app-vssr/root/etc/vssr/oversea_list.conf deleted file mode 100644 index ae50fb90d0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/oversea_list.conf +++ /dev/null @@ -1,192 +0,0 @@ -server=/v.youku.com/127.0.0.1#5335 -server=/api.youku.com/127.0.0.1#5335 -server=/v2.tudou.com/127.0.0.1#5335 -server=/www.tudou.com/127.0.0.1#5335 -server=/s.plcloud.music.qq.com/127.0.0.1#5335 -server=/i.y.qq.com/127.0.0.1#5335 -server=/hot.vrs.sohu.com/127.0.0.1#5335 -server=/live.tv.sohu.com/127.0.0.1#5335 -server=/pad.tv.sohu.com/127.0.0.1#5335 -server=/my.tv.sohu.com/127.0.0.1#5335 -server=/hot.vrs.letv.com/127.0.0.1#5335 -server=/data.video.qiyi.com/127.0.0.1#5335 -server=/cache.video.qiyi.com/127.0.0.1#5335 -server=/cache.vip.qiyi.com/127.0.0.1#5335 -server=/vv.video.qq.com/127.0.0.1#5335 -server=/tt.video.qq.com/127.0.0.1#5335 -server=/ice.video.qq.com/127.0.0.1#5335 -server=/tjsa.video.qq.com/127.0.0.1#5335 -server=/a10.video.qq.com/127.0.0.1#5335 -server=/xyy.video.qq.com/127.0.0.1#5335 -server=/vcq.video.qq.com/127.0.0.1#5335 -server=/vsh.video.qq.com/127.0.0.1#5335 -server=/vbj.video.qq.com/127.0.0.1#5335 -server=/bobo.video.qq.com/127.0.0.1#5335 -server=/flvs.video.qq.com/127.0.0.1#5335 -server=/bkvv.video.qq.com/127.0.0.1#5335 -server=/info.zb.qq.com/127.0.0.1#5335 -server=/geo.js.kankan.xunlei.com/127.0.0.1#5335 -server=/web-play.pptv.com/127.0.0.1#5335 -server=/web-play.pplive.cn/127.0.0.1#5335 -server=/dyn.ugc.pps.tv/127.0.0.1#5335 -server=/v.pps.tv/127.0.0.1#5335 -server=/inner.kandian.com/127.0.0.1#5335 -server=/ipservice.163.com/127.0.0.1#5335 -server=/so.open.163.com/127.0.0.1#5335 -server=/zb.s.qq.com/127.0.0.1#5335 -server=/ip.kankan.xunlei.com/127.0.0.1#5335 -server=/vxml.56.com/127.0.0.1#5335 -server=/music.sina.com.cn/127.0.0.1#5335 -server=/play.baidu.com/127.0.0.1#5335 -server=/v.iask.com/127.0.0.1#5335 -server=/tv.weibo.com/127.0.0.1#5335 -server=/wtv.v.iask.com/127.0.0.1#5335 -server=/video.sina.com.cn/127.0.0.1#5335 -server=/www.yinyuetai.com/127.0.0.1#5335 -server=/api.letv.com/127.0.0.1#5335 -server=/live.gslb.letv.com/127.0.0.1#5335 -server=/static.itv.letv.com/127.0.0.1#5335 -server=/ip.apps.cntv.cn/127.0.0.1#5335 -server=/vdn.apps.cntv.cn/127.0.0.1#5335 -server=/vdn.live.cntv.cn/127.0.0.1#5335 -server=/vip.sports.cntv.cn/127.0.0.1#5335 -server=/a.play.api.3g.youku.com/127.0.0.1#5335 -server=/i.play.api.3g.youku.com/127.0.0.1#5335 -server=/api.3g.youku.com/127.0.0.1#5335 -server=/tv.api.3g.youku.com/127.0.0.1#5335 -server=/play.api.3g.youku.com/127.0.0.1#5335 -server=/play.api.3g.tudou.com/127.0.0.1#5335 -server=/tv.api.3g.tudou.com/127.0.0.1#5335 -server=/api.3g.tudou.com/127.0.0.1#5335 -server=/api.tv.sohu.com/127.0.0.1#5335 -server=/access.tv.sohu.com/127.0.0.1#5335 -server=/iface.iqiyi.com/127.0.0.1#5335 -server=/iface2.iqiyi.com/127.0.0.1#5335 -server=/cache.m.iqiyi.com/127.0.0.1#5335 -server=/dynamic.app.m.letv.com/127.0.0.1#5335 -server=/dynamic.meizi.app.m.letv.com/127.0.0.1#5335 -server=/dynamic.search.app.m.letv.com/127.0.0.1#5335 -server=/dynamic.live.app.m.letv.com/127.0.0.1#5335 -server=/listso.m.areainfo.ppstream.com/127.0.0.1#5335 -server=/epg.api.pptv.com/127.0.0.1#5335 -server=/play.api.pptv.com/127.0.0.1#5335 -server=/m.letv.com/127.0.0.1#5335 -server=/interface.bilibili.com/127.0.0.1#5335 -server=/3g.music.qq.com/127.0.0.1#5335 -server=/mqqplayer.3g.qq.com/127.0.0.1#5335 -server=/proxy.music.qq.com/127.0.0.1#5335 -server=/proxymc.qq.com/127.0.0.1#5335 -server=/ip2.kugou.com/127.0.0.1#5335 -server=/ip.kugou.com/127.0.0.1#5335 -server=/client.api.ttpod.com/127.0.0.1#5335 -server=/mobi.kuwo.cn/127.0.0.1#5335 -server=/mobilefeedback.kugou.com/127.0.0.1#5335 -server=/tingapi.ting.baidu.com/127.0.0.1#5335 -server=/music.baidu.com/127.0.0.1#5335 -server=/serviceinfo.sdk.duomi.com/127.0.0.1#5335 -server=/music.163.com/127.0.0.1#5335 -server=/www.xiami.com/127.0.0.1#5335 -server=/spark.api.xiami.com/127.0.0.1#5335 -server=/iplocation.geo.qiyi.com/127.0.0.1#5335 -server=/sns.video.qq.com/127.0.0.1#5335 -server=/v5.pc.duomi.com/127.0.0.1#5335 -server=/tms.is.ysten.com/127.0.0.1#5335 -server=/internal.check.duokanbox.com/127.0.0.1#5335 -server=/openapi.youku.com/127.0.0.1#5335 -server=/y.qq.com/127.0.0.1#5335 -ipset=/v.youku.com/oversea -ipset=/api.youku.com/oversea -ipset=/v2.tudou.com/oversea -ipset=/www.tudou.com/oversea -ipset=/s.plcloud.music.qq.com/oversea -ipset=/i.y.qq.com/oversea -ipset=/hot.vrs.sohu.com/oversea -ipset=/live.tv.sohu.com/oversea -ipset=/pad.tv.sohu.com/oversea -ipset=/my.tv.sohu.com/oversea -ipset=/hot.vrs.letv.com/oversea -ipset=/data.video.qiyi.com/oversea -ipset=/cache.video.qiyi.com/oversea -ipset=/cache.vip.qiyi.com/oversea -ipset=/vv.video.qq.com/oversea -ipset=/tt.video.qq.com/oversea -ipset=/ice.video.qq.com/oversea -ipset=/tjsa.video.qq.com/oversea -ipset=/a10.video.qq.com/oversea -ipset=/xyy.video.qq.com/oversea -ipset=/vcq.video.qq.com/oversea -ipset=/vsh.video.qq.com/oversea -ipset=/vbj.video.qq.com/oversea -ipset=/bobo.video.qq.com/oversea -ipset=/flvs.video.qq.com/oversea -ipset=/bkvv.video.qq.com/oversea -ipset=/info.zb.qq.com/oversea -ipset=/geo.js.kankan.xunlei.com/oversea -ipset=/web-play.pptv.com/oversea -ipset=/web-play.pplive.cn/oversea -ipset=/dyn.ugc.pps.tv/oversea -ipset=/v.pps.tv/oversea -ipset=/inner.kandian.com/oversea -ipset=/ipservice.163.com/oversea -ipset=/so.open.163.com/oversea -ipset=/zb.s.qq.com/oversea -ipset=/ip.kankan.xunlei.com/oversea -ipset=/vxml.56.com/oversea -ipset=/music.sina.com.cn/oversea -ipset=/play.baidu.com/oversea -ipset=/v.iask.com/oversea -ipset=/tv.weibo.com/oversea -ipset=/wtv.v.iask.com/oversea -ipset=/video.sina.com.cn/oversea -ipset=/www.yinyuetai.com/oversea -ipset=/api.letv.com/oversea -ipset=/live.gslb.letv.com/oversea -ipset=/static.itv.letv.com/oversea -ipset=/ip.apps.cntv.cn/oversea -ipset=/vdn.apps.cntv.cn/oversea -ipset=/vdn.live.cntv.cn/oversea -ipset=/vip.sports.cntv.cn/oversea -ipset=/a.play.api.3g.youku.com/oversea -ipset=/i.play.api.3g.youku.com/oversea -ipset=/api.3g.youku.com/oversea -ipset=/tv.api.3g.youku.com/oversea -ipset=/play.api.3g.youku.com/oversea -ipset=/play.api.3g.tudou.com/oversea -ipset=/tv.api.3g.tudou.com/oversea -ipset=/api.3g.tudou.com/oversea -ipset=/api.tv.sohu.com/oversea -ipset=/access.tv.sohu.com/oversea -ipset=/iface.iqiyi.com/oversea -ipset=/iface2.iqiyi.com/oversea -ipset=/cache.m.iqiyi.com/oversea -ipset=/dynamic.app.m.letv.com/oversea -ipset=/dynamic.meizi.app.m.letv.com/oversea -ipset=/dynamic.search.app.m.letv.com/oversea -ipset=/dynamic.live.app.m.letv.com/oversea -ipset=/listso.m.areainfo.ppstream.com/oversea -ipset=/epg.api.pptv.com/oversea -ipset=/play.api.pptv.com/oversea -ipset=/m.letv.com/oversea -ipset=/interface.bilibili.com/oversea -ipset=/3g.music.qq.com/oversea -ipset=/mqqplayer.3g.qq.com/oversea -ipset=/proxy.music.qq.com/oversea -ipset=/proxymc.qq.com/oversea -ipset=/ip2.kugou.com/oversea -ipset=/ip.kugou.com/oversea -ipset=/client.api.ttpod.com/oversea -ipset=/mobi.kuwo.cn/oversea -ipset=/mobilefeedback.kugou.com/oversea -ipset=/tingapi.ting.baidu.com/oversea -ipset=/music.baidu.com/oversea -ipset=/serviceinfo.sdk.duomi.com/oversea -ipset=/music.163.com/oversea -ipset=/www.xiami.com/oversea -ipset=/spark.api.xiami.com/oversea -ipset=/iplocation.geo.qiyi.com/oversea -ipset=/sns.video.qq.com/oversea -ipset=/v5.pc.duomi.com/oversea -ipset=/tms.is.ysten.com/oversea -ipset=/internal.check.duokanbox.com/oversea -ipset=/openapi.youku.com/oversea -ipset=/y.qq.com/oversea diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_domain.list deleted file mode 100644 index a5d1446e6c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_domain.list +++ /dev/null @@ -1,12 +0,0 @@ -aiv-cdn.net -amazonaws.com -amazonvideo.com -llnwd.net -amazonprimevideos.com -amazonvideo.cc -prime-video.com -primevideo.cc -primevideo.com -primevideo.info -primevideo.org -primevideo.tv \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/prime_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_domain.list deleted file mode 100644 index 7e7accf408..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_domain.list +++ /dev/null @@ -1,2 +0,0 @@ -tvsuper.com -tvb.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/tvb_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_domain.list deleted file mode 100644 index 854bf3a531..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_domain.list +++ /dev/null @@ -1,12 +0,0 @@ -vidol.tv -hinet.net -books.com -litv.tv -pstatic.net -app-measurement.com -kktv.com.tw -gamer.com.tw -wetv.vip -kktv.me -myvideo.net.tw -kk.stream \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/tw_video_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/white.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/white.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_domain.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_domain.list deleted file mode 100644 index 4b309748e5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_domain.list +++ /dev/null @@ -1,14 +0,0 @@ -youtube -ggpht.com -googlevideo.com -withyoutube.com -youtu.be -youtube-nocookie.com -youtube.com -youtubeeducation.com -youtubegaming.com -youtubei.googleapis.com -youtubekids.com -youtubemobilesupport.com -yt.be -ytimg.com \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_ip.list b/package/ctcgfw/luci-app-vssr/root/etc/vssr/youtube_ip.list deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-ad b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-ad deleted file mode 100755 index 3ab01ad671..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-ad +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -e - -if [ -f /tmp/adnew.conf ]; then - cat /tmp/adnew.conf | grep ^\|\|[^\*]*\^$ | sed -e 's:||:address\=\/:' -e 's:\^:/0\.0\.0\.0:' > /tmp/ad.conf -fi diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-gfw b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-gfw deleted file mode 100755 index dffebbaca2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-gfw +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -e - -generate_china_banned() -{ - - cat $1 | base64 -d > /tmp/gfwlist.txt - rm -f $1 - sed -i '/^@@|/d' /tmp/gfwlist.txt - - cat /tmp/gfwlist.txt | sort -u | - sed 's#!.\+##; s#|##g; s#@##g; s#http:\/\/##; s#https:\/\/##;' | - sed '/\*/d; /apple\.com/d; /sina\.cn/d; /sina\.com\.cn/d; /baidu\.com/d; /byr\.cn/d; /jlike\.com/d; /weibo\.com/d; /zhongsou\.com/d; /youdao\.com/d; /sogou\.com/d; /so\.com/d; /soso\.com/d; /aliyun\.com/d; /taobao\.com/d; /jd\.com/d; /qq\.com/d' | - sed '/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/d' | - grep '^[0-9a-zA-Z\.-]\+$' | grep '\.' | sed 's#^\.\+##' | sort -u | - awk ' -BEGIN { prev = "________"; } { - cur = $0; - if (index(cur, prev) == 1 && substr(cur, 1 + length(prev) ,1) == ".") { - } else { - print cur; - prev = cur; - } -}' | sort -u - -} - -generate_china_banned /tmp/gfw.b64 > /tmp/gfw.txt -rm -f /tmp/gfwlist.txt -sed '/.*/s/.*/server=\/\.&\/127.0.0.1#5335\nipset=\/\.&\/gfwlist/' /tmp/gfw.txt >/tmp/gfwnew.txt -rm -f /tmp/gfw.txt - diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-monitor b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-monitor deleted file mode 100755 index ba85f51ab2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-monitor +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -NAME=vssr - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -server_process_count=$1 -redir_tcp_process=$2 -redir_udp_process=$3 -tunnel_process=$4 -kcp_process=$5 -local_process=$6 -pdnsd_process=$7 -if [ -z "$pdnsd_process" ]; then - pdnsd_process=0 -fi - -i=0 - -GLOBAL_SERVER=$(uci_get_by_type global global_server) -server=$(uci_get_by_name $GLOBAL_SERVER server) -lkcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) -server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) -password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) -kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) -[ "$password" != "" ] && password="--key "${password} - -sock5_port=$(uci_get_by_type socks5_proxy local_port 1080) - -if echo $server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - server=${server} -else - server=$(cat /etc/ssr_ip) -fi - -while [ "1" = "1" ]; do #这里是个死循环 - sleep 30 - #redir tcp - if [ $redir_tcp_process -gt 0 ]; then - icount=$(busybox ps -w | grep vssr_t | grep -v grep | wc -l) - if [ $icount = 0 ]; then - logger -t "$NAME" "ssr redir tcp error.restart!" - /etc/init.d/vssr restart - exit 0 - fi - fi - #redir udp - if [ $redir_udp_process -gt 0 ]; then - icount=$(busybox ps -w | grep vssr_u | grep -v grep | wc -l) - if [ $icount = 0 ]; then - logger -t "$NAME" "ssr redir udp error.restart!" - /etc/init.d/vssr restart - exit 0 - fi - fi - #tunnel - if [ $tunnel_process -gt 0 ]; then - icount=$(busybox ps -w | grep ssr-tunnel | grep -v grep | wc -l) - if [ $icount = 0 ]; then - logger -t "$NAME" "ssr tunnel error.restart!" - /etc/init.d/vssr restart - exit 0 - fi - fi - #server - if [ $server_process_count -gt 0 ]; then - icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l) - if [ $icount -lt $server_process_count ]; then - logger -t "$NAME" "ssr server error.restart!" - killall -q -9 ssr-server - for i in $(seq $server_process_count); do - /usr/bin/ssr-server -c /var/etc/vssr_$i.json -u -f /var/run/ssr-server$i.pid - done - fi - fi - #kcptun - if [ $kcp_process -gt 0 ]; then - icount=$(busybox ps -w | grep kcptun-client | grep -v grep | wc -l) - if [ $icount -lt $kcp_process ]; then - logger -t "$NAME" "ssr kcptun error.restart!" - killall -q -9 kcptun-client - - (/usr/bin/kcptun-client -r $server:$kcp_port -l :$server_port $password $kcp_param &) - fi - fi - #local - # if [ $local_process -gt 0 ] ;then - # icount=`busybox ps -w | grep ssr-local |grep -v grep| wc -l` - # if [ $icount -lt $local_process ] - # then - # logger -t "$NAME" "ssr local error.restart!" - # killall -q -9 ssr-local - - # ( /usr/bin/ssr-local -c /var/etc/vssr_s.json -u -l $sock5_port -f /var/run/ssr-local.pid &) - # fi - # fi - #pdnsd - if [ $pdnsd_process -gt 0 ]; then - icount=$(busybox ps -w | grep pdnsd | grep -v grep | wc -l) - if [ $icount -lt $pdnsd_process ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "pdnsd tunnel error.restart!" - if [ -f /var/run/pdnsd.pid ]; then - kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1 - else - kill -9 $(ps | grep pdnsd | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi - - (/usr/sbin/pdnsd -c /var/etc/pdnsd.conf -d &) - fi - fi -done diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-qucikswitch b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-qucikswitch deleted file mode 100755 index 10a2231ea0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-qucikswitch +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2019 vssr -# Copyright (C) 2019 jerrykuku -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -NAME=vssr - -#定义配置文件名称 -CONFIG_FILE=/var/etc/${NAME}_t.json -CONFIG_UDP_FILE=/var/etc/${NAME}_u.json -CONFIG_SOCK5_FILE=/var/etc/${NAME}_s.json - -switch_server=$1 - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -gen_config_file() { - local host=$(uci_get_by_name $1 server) - if echo $host | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - hostip=${host} - elif [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then - hostip=${host} - else - hostip=$(ping ${host} -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) - if echo $hostip | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - hostip=${hostip} - else - hostip=$(cat /etc/ssr_ip) - fi - fi - [ $2 = "0" -a $kcp_flag = "1" ] && hostip="127.0.0.1" - - if [ $2 = "0" ]; then - re_type="tcp" - config_file=$CONFIG_FILE - server_obj=$GLOBAL_SERVER - elif [ $2 = "1" ]; then - re_type="udp" - config_file=$CONFIG_UDP_FILE - server_obj=$UDP_RELAY_SERVER - fi - if [ $(uci_get_by_name $1 fast_open 0) = "1" ]; then - fastopen="true" - else - fastopen="false" - fi - - local stype=$(uci_get_by_name $1 type) - local port=$(uci_get_by_name $1 local_port) - if [ "$stype" == "trojan" ]; then - if [ "$re_type" == "udp" ]; then - re_type="client" - port="10801" - else - re_type="nat" - fi - fi - lua /usr/share/vssr/genconfig_${stype}.lua ${server_obj} ${re_type} ${port} ${hostip} >${config_file} - sed -i 's/\\//g' $config_file - -} -start_local() { - local local_server=$(uci_get_by_type socks5_proxy enable_server) - local local_port=$(uci_get_by_type socks5_proxy local_port) - local Socks_user=$(uci_get_by_type socks5_proxy Socks_user) - local Socks_pass=$(uci_get_by_type socks5_proxy Socks_pass) - [ "$local_server" = "0" ] && return 1 - mkdir -p /var/run /var/etc - - lua /usr/share/vssr/genconfig_v2ray_s.lua "socks" ${local_port} ${Socks_user} ${Socks_pass} >$CONFIG_SOCK5_FILE - sed -i 's/\\//g' $config_file - - /usr/bin/v2ray/v2ray -config $CONFIG_SOCK5_FILE >/dev/null 2>&1 & -} - -killall -q -9 ssr-redir -killall -q -9 v2ray -killall -q -9 trojan -killall -q -9 ipt2socks - -case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in -1 | on | true | yes | enabled) ARG_OTA="-A" ;; -*) ARG_OTA="" ;; -esac - -if [ -z "$switch_server" ]; then - GLOBAL_SERVER=$(uci_get_by_type global global_server) -else - GLOBAL_SERVER=$switch_server -fi - -gen_config_file $GLOBAL_SERVER 0 -stype=$(uci_get_by_name $GLOBAL_SERVER type) -local stype=$(uci_get_by_name $GLOBAL_SERVER type) -if [ "$stype" == "ss" -o "$stype" == "v2ray" ]; then - sscmd="/usr/bin/v2ray/v2ray" - [ ! -f "$sscmd" ] && sscmd="/usr/bin/v2ray" -elif [ "$stype" == "ssr" ]; then - sscmd="/usr/bin/ssr-redir" -elif [ "$stype" == "trojan" ]; then - sscmd="/usr/sbin/trojan" -fi - -local utype=$(uci_get_by_name $UDP_RELAY_SERVER type) -if [ "$utype" == "ss" -o "$utype" == "v2ray" ]; then - ucmd="/usr/bin/v2ray/v2ray" - [ ! -f "$ucmd" ] && ucmd="/usr/bin/v2ray" -elif [ "$utype" == "ssr" ]; then - ucmd="/usr/bin/ssr-redir" -elif [ "$utype" == "trojan" ]; then - ucmd="/usr/sbin/trojan" -fi - -if [ "$(uci_get_by_type global threads 0)" = "0" ]; then - threads=$(cat /proc/cpuinfo | grep 'processor' | wc -l) -else - threads=$(uci_get_by_type global threads) -fi - -#转发TCP -if [ "$(uci_get_by_type global threads 0)" = "0" ]; then - threads=$(cat /proc/cpuinfo | grep 'processor' | wc -l) -else - threads=$(uci_get_by_type global threads) -fi -#转发TCP -redir_tcp=1 -local last_config_file=$CONFIG_FILE -if [ "$stype" == "ssr" ]; then - local pid_file="/var/run/ssr-retcp.pid" - for i in $(seq 1 $threads); do - $sscmd -c $last_config_file $ARG_OTA -f /var/run/ssr-retcp_$i.pid >/dev/null 2>&1 - done - echo "$(date "+%Y-%m-%d %H:%M:%S") SSR $threads 线程 已启动!" >>/tmp/vssr.log -elif [ "$stype" == "v2ray" -o "$stype" == "ss" ]; then - $sscmd -config $last_config_file >/dev/null 2>&1 & - - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -version | head -1) 已启动!" >>/tmp/vssr.log - -elif [ "$stype" == "trojan" ]; then - $sscmd -c $last_config_file >/dev/null 2>&1 & - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -V 2>&1 | head -1) 已启动!" >>/tmp/vssr.log -fi - -#转发UDP -if [ -n "$UDP_RELAY_SERVER" ]; then - redir_udp=1 - gen_config_file $UDP_RELAY_SERVER 1 - last_config_file=$CONFIG_UDP_FILE - echo $utype - if [ "$utype" == "ssr" ]; then - - case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in - 1 | on | true | yes | enabled) ARG_OTA="-A" ;; - *) ARG_OTA="" ;; - esac - pid_file="/var/run/ssr-reudp.pid" - #echo $ucmd >> /tmp/vssr.log - $ucmd -c $last_config_file $ARG_OTA -U -f /var/run/ssr-reudp.pid >/tmp/vssr.log 2>&1 - #echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -version | head -1) UDP已启动!" >> /tmp/vssr.log - elif [ "$utype" == "ss" -o "$utype" == "v2ray" ]; then - $ucmd -config $last_config_file >/dev/null 2>&1 & - elif [ "$stype" == "trojan" ]; then - $ucmd --config $last_config_file >/dev/null 2>&1 & - ipt2socks -U -4 -b 0.0.0.0 -s 127.0.0.1 -p 10801 -l $(uci_get_by_name $UDP_RELAY_SERVER local_port) >/dev/null 2>&1 & - fi -fi -start_local diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-rules b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-rules deleted file mode 100755 index ddf79f2206..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-rules +++ /dev/null @@ -1,385 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -TAG="_SS_SPEC_RULE_" # comment tag -IPT="iptables -t nat" # alias of iptables -FWI=$(uci get firewall.vssr.path 2>/dev/null) # firewall include file - -usage() { - cat <<-EOF - Usage: vssr-rules [options] - - Valid options are: - - -s ip address of vssr remote server - -l port number of vssr local server - -S ip address of vssr remote UDP server - -L port number of vssr local UDP server - -i a file content is bypassed ip list - -a lan ip of access control, need a prefix to - define access control mode - -b wan ip of will be bypassed - -w wan ip of will be forwarded - -p lan ip of will be global proxy - -G lan ip of will be game mode proxy - -D proxy ports - -e extra options for iptables - -o apply the rules to the OUTPUT chain - -O apply the global rules to the OUTPUT chain - -u enable udprelay mode, TPROXY is required - -U enable udprelay mode, using different IP - and ports for TCP and UDP - -f flush the rules - -g gfw list mode - -r return china mode - -h show this help message and exit - EOF - exit $1 -} - -loger() { - # 1.alert 2.crit 3.err 4.warn 5.notice 6.info 7.debug - logger -st vssr-rules[$$] -p$1 $2 -} - -flush_r() { - flush_iptables() { - local ipt="iptables -t $1" - local DAT=$(iptables-save -t $1) - eval $(echo "$DAT" | grep "$TAG" | sed -e 's/^-A/$ipt -D/' -e 's/$/;/') - for chain in $(echo "$DAT" | awk '/^:SS_SPEC/{print $1}'); do - $ipt -F ${chain:1} 2>/dev/null && $ipt -X ${chain:1} - done - } - flush_iptables nat - flush_iptables mangle - ip rule del fwmark 0x01/0x01 table 100 2>/dev/null - ip route del local 0.0.0.0/0 dev lo table 100 2>/dev/null - ipset -X ss_spec_lan_ac 2>/dev/null - ipset -X ss_spec_wan_ac 2>/dev/null - ipset -X ssr_gen_router 2>/dev/null - ipset -X fplan 2>/dev/null - ipset -X gmlan 2>/dev/null - ipset -X oversea 2>/dev/null - ipset -X whitelist 2>/dev/null - ipset -X blacklist 2>/dev/null - [ -n "$FWI" ] && echo '#!/bin/sh' >$FWI - return 0 -} - -ipset_r() { - ipset -N gmlan hash:net 2>/dev/null - $IPT -N SS_SPEC_WAN_AC - $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN - for ip in $LAN_GM_IP; do ipset -! add gmlan $ip; done - case "$RUNMODE" in - router) - ipset -! -R <<-EOF || return 1 - create ss_spec_wan_ac hash:net - $(gen_iplist | sed -e "s/^/add ss_spec_wan_ac /") - EOF - ipset -N gfwlist hash:net 2>/dev/null - $IPT -A SS_SPEC_WAN_AC -m set --match-set ss_spec_wan_ac dst -j RETURN - $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN - $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW - ;; - gfw) - ipset -N gfwlist hash:net 2>/dev/null - $IPT -A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN - ;; - oversea) - ipset -N oversea hash:net 2>/dev/null - $IPT -I SS_SPEC_WAN_AC -m set --match-set oversea dst -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -j SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j SS_SPEC_WAN_FW - ;; - all) - $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW - ;; - esac - - ipset -N fplan hash:net 2>/dev/null - for ip in $LAN_FP_IP; do ipset -! add fplan $ip; done - $IPT -I SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW - - ipset -N whitelist hash:net 2>/dev/null - ipset -N blacklist hash:net 2>/dev/null - $IPT -I SS_SPEC_WAN_AC -m set --match-set blacklist dst -j SS_SPEC_WAN_FW - $IPT -I SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN - - for ip in $WAN_BP_IP; do ipset -! add whitelist $ip; done - for ip in $WAN_FW_IP; do ipset -! add blacklist $ip; done - - return $? -} - -fw_rule() { - $IPT -N SS_SPEC_WAN_FW - $IPT -A SS_SPEC_WAN_FW -d 0.0.0.0/8 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 127.0.0.0/8 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 169.254.0.0/16 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 172.16.0.0/12 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 192.168.0.0/16 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 224.0.0.0/4 -j RETURN - $IPT -A SS_SPEC_WAN_FW -d 240.0.0.0/4 -j RETURN - $IPT -A SS_SPEC_WAN_FW -p tcp $PROXY_PORTS \ - -j REDIRECT --to-ports $local_port 2>/dev/null || { - loger 3 "Can't redirect, please check the iptables." - exit 1 - } - return $? -} - -ac_rule() { - if [ -n "$LAN_AC_IP" ]; then - case "${LAN_AC_IP:0:1}" in - w | W) - MATCH_SET="-m set --match-set ss_spec_lan_ac src" - ;; - b | B) - MATCH_SET="-m set ! --match-set ss_spec_lan_ac src" - ;; - *) - loger 3 "Bad argument \`-a $LAN_AC_IP\`." - return 2 - ;; - esac - fi - IFNAME=$(uci get -P/var/state network.lan.ifname 2>/dev/null) - ipset -! -R <<-EOF || return 1 - create ss_spec_lan_ac hash:net - $(for ip in ${LAN_AC_IP:1}; do echo "add ss_spec_lan_ac $ip"; done) - EOF - $IPT -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p tcp $EXT_ARGS $MATCH_SET \ - -m comment --comment "$TAG" -j SS_SPEC_WAN_AC - if [ "$OUTPUT" = 1 ]; then - $IPT -I OUTPUT 1 -p tcp $EXT_ARGS \ - -m comment --comment "$TAG" -j SS_SPEC_WAN_AC - elif [ "$OUTPUT" = 2 ]; then - ipset -! -R <<-EOF || return 1 - create ssr_gen_router hash:net - $(gen_spec_iplist | sed -e "s/^/add ssr_gen_router /") - EOF - $IPT -N SS_SPEC_ROUTER && - $IPT -A SS_SPEC_ROUTER -m set --match-set ssr_gen_router dst -j RETURN && - $IPT -A SS_SPEC_ROUTER -j SS_SPEC_WAN_FW - $IPT -I OUTPUT 1 -p tcp -m comment --comment "$TAG" -j SS_SPEC_ROUTER - fi - return $? -} - -tp_rule() { - [ -n "$TPROXY" ] || return 0 - ip rule add fwmark 0x01/0x01 table 100 - ip route add local 0.0.0.0/0 dev lo table 100 - local ipt="iptables -t mangle" - $ipt -N SS_SPEC_TPROXY - $ipt -A SS_SPEC_TPROXY -p udp --dport 443 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp --dport 80 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp --dport 53 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 0.0.0.0/8 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 10.0.0.0/8 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 127.0.0.0/8 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 169.254.0.0/16 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 172.16.0.0/12 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 192.168.0.0/16 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 224.0.0.0/4 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -d 240.0.0.0/4 -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp ! --dport 53 -d $server -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set fplan src \ - -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - case "$RUNMODE" in - router) - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst \ - -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set ! --match-set ss_spec_wan_ac dst \ - -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - gfw) - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set china dst -j RETURN - $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst \ - -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - $ipt -A SS_SPEC_TPROXY -p udp -m set $PROXY_PORTS --match-set gfwlist dst \ - -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - oversea) - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set china dst \ - -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - all) - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - ;; - esac - $ipt -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p udp $EXT_ARGS $MATCH_SET \ - -m comment --comment "$TAG" -j SS_SPEC_TPROXY - return $? -} - -get_wan_ip() { - cat <<-EOF | grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}" - $server - $SERVER - $WAN_BP_IP -EOF -} - -gen_iplist() { - cat <<-EOF - 0.0.0.0/8 - 10.0.0.0/8 - 100.64.0.0/10 - 127.0.0.0/8 - 169.254.0.0/16 - 172.16.0.0/12 - 192.0.0.0/24 - 192.0.2.0/24 - 192.88.99.0/24 - 192.168.0.0/16 - 198.18.0.0/15 - 198.51.100.0/24 - 203.0.113.0/24 - 224.0.0.0/4 - 240.0.0.0/4 - 255.255.255.255 - $(get_wan_ip) - $(cat ${IGNORE_LIST:=/dev/null} 2>/dev/null) -EOF -} - -gen_spec_iplist() { - cat <<-EOF - 0.0.0.0/8 - 10.0.0.0/8 - 100.64.0.0/10 - 127.0.0.0/8 - 169.254.0.0/16 - 172.16.0.0/12 - 192.0.0.0/24 - 192.0.2.0/24 - 192.88.99.0/24 - 192.168.0.0/16 - 198.18.0.0/15 - 198.51.100.0/24 - 203.0.113.0/24 - 224.0.0.0/4 - 240.0.0.0/4 - 255.255.255.255 - $(get_wan_ip) -EOF -} - -gen_include() { - [ -n "$FWI" ] || return 0 - extract_rules() { - echo "*$1" - iptables-save -t $1 | grep SS_SPEC_ | - sed -e "s/^-A \(OUTPUT\|PREROUTING\)/-I \1 1/" - echo 'COMMIT' - } - cat <<-EOF >>$FWI - iptables-save -c | grep -v "SS_SPEC" | iptables-restore -c - iptables-restore -n <<-EOT - $(extract_rules nat) - $(extract_rules mangle) - EOT - EOF - return 0 -} - -while getopts ":s:l:S:L:i:e:a:b:w:p:G:D:oOuUfgrczh" arg; do - case "$arg" in - s) - server=$OPTARG - ;; - l) - local_port=$OPTARG - ;; - S) - SERVER=$OPTARG - ;; - L) - LOCAL_PORT=$OPTARG - ;; - i) - IGNORE_LIST=$OPTARG - ;; - e) - EXT_ARGS=$OPTARG - ;; - a) - LAN_AC_IP=$OPTARG - ;; - b) - WAN_BP_IP=$(for ip in $OPTARG; do echo $ip; done) - ;; - w) - WAN_FW_IP=$OPTARG - ;; - p) - LAN_FP_IP=$OPTARG - ;; - G) - LAN_GM_IP=$OPTARG - ;; - D) - PROXY_PORTS=$OPTARG - ;; - o) - OUTPUT=1 - ;; - O) - OUTPUT=2 - ;; - u) - TPROXY=1 - ;; - U) - TPROXY=2 - ;; - g) - RUNMODE=gfw - ;; - r) - RUNMODE=router - ;; - c) - RUNMODE=oversea - ;; - z) - RUNMODE=all - ;; - f) - flush_r - exit 0 - ;; - h) - usage 0 - ;; - esac -done - -if [ -z "$server" -o -z "$local_port" ]; then - usage 2 -fi - -if [ "$TPROXY" == 1 ]; then - SERVER=$server - LOCAL_PORT=$local_port -elif [ "$TPROXY" == 2 ]; then - : ${SERVER:?"You must assign an ip for the udp relay server."} - : ${LOCAL_PORT:?"You must assign a port for the udp relay server."} -fi - -flush_r && fw_rule && ipset_r && ac_rule && tp_rule && gen_include -[ "$?" == 0 ] || loger 3 "Start failed!" -exit $? diff --git a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch b/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch deleted file mode 100755 index 5ffdb5dcb1..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/bin/vssr-switch +++ /dev/null @@ -1,175 +0,0 @@ -#!/bin/sh /etc/rc.common -# -# Copyright (C) 2017 openwrt-ssr -# Copyright (C) 2017 yushi studio -# -# This is free software, licensed under the GNU General Public License v3. -# See /LICENSE for more information. -# - -cycle_time=60 -switch_time=3 -normal_flag=0 -server_locate=0 -server_count=0 -NAME=vssr -ENABLE_SERVER=nil -CONFIG_SWTICH_FILE=/var/etc/${NAME}_t.json - -[ -n "$1" ] && cycle_time=$1 -[ -n "$2" ] && switch_time=$2 - -uci_get_by_name() { - local ret=$(uci get $NAME.$1.$2 2>/dev/null) - echo ${ret:=$3} -} - -uci_get_by_type() { - local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} - -DEFAULT_SERVER=$(uci_get_by_type global global_server) -CURRENT_SERVER=$DEFAULT_SERVER - -#判断代理是否正常 -check_proxy() { - local result=0 - local try_count=$(uci_get_by_type global switch_try_count 3) - for i in $(seq 1 $try_count); do - /usr/bin/ssr-check www.google.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - result=0 - break - else - /usr/bin/ssr-check www.baidu.com 80 $switch_time 1 - if [ "$?" == "0" ]; then - result=1 - else - result=2 - fi - fi - sleep 1 - done - return $result -} - -test_proxy() { - local servername=$(uci_get_by_name $1 server) - local serverport=$(uci_get_by_name $1 server_port) - ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }') - [ -z "$ret" ] && return 1 - [ "$ret" -gt "50" ] && return 1 - ipset add ss_spec_wan_ac $servername 2>/dev/null - ret=$? - /usr/bin/ssr-check $servername $serverport $switch_time - local ret2=$? - if [ "$ret" = "0" ]; then - ipset del ss_spec_wan_ac $servername 2>/dev/null - fi - if [ "$ret2" = "0" ]; then - return 0 - else - return 1 - fi -} - -search_proxy() { - let server_count=server_count+1 - [ "$normal_flag" = "1" -a "$server_count" -le "$server_locate" ] && return 0 - [ "$(uci_get_by_name $1 switch_enable)" != "1" ] && return 1 - [ $ENABLE_SERVER != nil ] && return 0 - [ "$1" = "$CURRENT_SERVER" ] && return 0 - local servername=$(uci_get_by_name $1 server) - local serverport=$(uci_get_by_name $1 server_port) - ipset add ss_spec_wan_ac $servername 2>/dev/null - ret=$? - /usr/bin/ssr-check $servername $serverport $switch_time - local ret2=$? - if [ "$ret" = "0" ]; then - ipset del ss_spec_wan_ac $servername 2>/dev/null - fi - if [ "$ret2" = "0" ]; then - server_locate=$server_count - ENABLE_SERVER=$1 - return 0 - else - return 1 - fi - -} -#选择可用的代理 -select_proxy() { - - config_load $NAME - ENABLE_SERVER=nil - mkdir -p /var/run /var/etc - server_count=0 - config_foreach search_proxy servers - -} - -#切换代理 -switch_proxy() { - /etc/init.d/vssr restart $1 - return 0 -} - -start() { - #不支持kcptun启用时的切换 - [ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1 - - while [ "1" = "1" ]; do #死循环 - sleep $cycle_time - - LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") - - #判断当前代理是否为缺省服务器 - if [ "$CURRENT_SERVER" != "$DEFAULT_SERVER" ]; then - #echo "not default proxy" - echo "$(date "+%Y-%m-%d %H:%M:%S") 当前为备用节点,尝试切换为主节点。" >>/tmp/vssr.log - - #检查缺省服务器是否正常 - if test_proxy $DEFAULT_SERVER; then - #echo "switch to default proxy" - echo "$(date "+%Y-%m-%d %H:%M:%S") 主节点不可用." >>/tmp/vssr.log - #缺省服务器正常,切换回来 - CURRENT_SERVER=$DEFAULT_SERVER - switch_proxy $CURRENT_SERVER - echo "$(date "+%Y-%m-%d %H:%M:%S") 切换为默认节点 ["$(uci_get_by_name $CURRENT_SERVER server)"]" >>/tmp/vssr.log - continue - else - echo "$(date "+%Y-%m-%d %H:%M:%S") 主节点不可用,继续使用当前备用节点。" >>/tmp/vssr.log - fi - fi - - #判断当前代理是否正常 - check_proxy - current_ret=$? - - if [ "$current_ret" = "1" ]; then - #当前代理错误,判断有无可用的服务器 - #echo "current error" - echo "$(date "+%Y-%m-%d %H:%M:%S") 当前节点不可用,尝试切换其他节点。" >>/tmp/vssr.log - select_proxy - if [ "$ENABLE_SERVER" != nil ]; then - #有其他服务器可用,进行切换 - #echo $(uci_get_by_name $new_proxy server) - echo "$(date "+%Y-%m-%d %H:%M:%S") 另外一个节点可用,即将切换节点。" >>/tmp/vssr.log - CURRENT_SERVER=$ENABLE_SERVER - switch_proxy $CURRENT_SERVER - normal_flag=1 - echo "$(date "+%Y-%m-%d %H:%M:%S") 切换节点成功。" >>/tmp/vssr.log - else - switch_proxy $CURRENT_SERVER - normal_flag=1 - echo "$(date "+%Y-%m-%d %H:%M:%S") 尝试重启当前节点。" >>/tmp/vssr.log - fi - else - normal_flag=0 - #echo "$(date "+%Y-%m-%d %H:%M:%S") vssr No Problem." >> /tmp/vssr.log - fi - - done - -} diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/lua/vssrutil.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/lua/vssrutil.lua deleted file mode 100644 index 064eea7420..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/lua/vssrutil.lua +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/lua - ------------------------------------------------- --- This file is converter ip to country iso code --- @author Jerryk ------------------------------------------------- -local _M = {} -local icount = 0 --- Get country iso code with remark or host --- Return String:iso_code -function _M.get_flag(remark, host) - local nixio = require "nixio" - local iso_table = { - "US", "US", "US", "US", "US", "HK", "HK", "TW", "TW", "TW", "TW", "TW", - "JP", "JP", "JP", "GB", "GB", "DE", "DE", "FR", "IN", "TR", "SG", "SG", - "KR", "KR", "KR", "KR", "RU", "IE", "CA", "CA", "AU", "CH", "AU", "AR","RU", - "AC", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR", "AS", - "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", - "BI", "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BV", "BW", - "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", - "CN", "CO", "CP", "CR", "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DG", - "DJ", "DK", "DM", "DO", "DZ", "EA", "EC", "EE", "EG", "EH", "ER", "ES", - "ET", "EU", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", - "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", - "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "IC", "ID", "IE", - "IL", "IM", "IN", "IO", "IQ", "IR", "IS", "IT", "JE", "JM", "JO", "JP", - "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", - "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", - "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", - "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", - "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", - "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", - "QA", "RE", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", - "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV", - "SX", "SY", "SZ", "TA", "TC", "TD", "TF", "TG", "TH", "TJ", "TK", "TL", - "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "UN", - "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", - "XK", "YE", "YT", "ZA", "ZM", "ZW" - } - - local emoji_table = { - "美国", "US", "洛杉矶","芝加哥","达拉斯", "香港","HK", "台湾", "TW", "TAIWAN","彰化","台北", - "日本", "JP", "JAPAN", "英国", "UK", "德国", "DE", "法国", "印度", "土耳其", "新加坡", "SG", - "韩国", "首尔", "KR", "KOREA", "俄罗斯", "爱尔兰", "CANADA", "加拿大","SYDNEY", "瑞士", "澳大利亚", "阿根廷","RU", - "🇦🇨", "🇦🇩", "🇦🇪", "🇦🇫", "🇦🇬", "🇦🇮", - "🇦🇱", "🇦🇲", "🇦🇴", "🇦🇶", "🇦🇷", "🇦🇸", - "🇦🇹", "🇦🇺", "🇦🇼", "🇦🇽", "🇦🇿", "🇧🇦", - "🇧🇧", "🇧🇩", "🇧🇪", "🇧🇫", "🇧🇬", "🇧🇭", - "🇧🇮", "🇧🇯", "🇧🇱", "🇧🇲", "🇧🇳", "🇧🇴", - "🇧🇶", "🇧🇷", "🇧🇸", "🇧🇹", "🇧🇻", "🇧🇼", - "🇧🇾", "🇧🇿", "🇨🇦", "🇨🇨", "🇨🇩", "🇨🇫", - "🇨🇬", "🇨🇭", "🇨🇮", "🇨🇰", "🇨🇱", "🇨🇲", - "🇨🇳", "🇨🇴", "🇨🇵", "🇨🇷", "🇨🇺", "🇨🇻", - "🇨🇼", "🇨🇽", "🇨🇾", "🇨🇿", "🇩🇪", "🇩🇬", - "🇩🇯", "🇩🇰", "🇩🇲", "🇩🇴", "🇩🇿", "🇪🇦", - "🇪🇨", "🇪🇪", "🇪🇬", "🇪🇭", "🇪🇷", "🇪🇸", - "🇪🇹", "🇪🇺", "🇫🇮", "🇫🇯", "🇫🇰", "🇫🇲", - "🇫🇴", "🇫🇷", "🇬🇦", "🇬🇧", "🇬🇩", "🇬🇪", - "🇬🇫", "🇬🇬", "🇬🇭", "🇬🇮", "🇬🇱", "🇬🇲", - "🇬🇳", "🇬🇵", "🇬🇶", "🇬🇷", "🇬🇸", "🇬🇹", - "🇬🇺", "🇬🇼", "🇬🇾", "🇭🇰", "🇭🇲", "🇭🇳", - "🇭🇷", "🇭🇹", "🇭🇺", "🇮🇨", "🇮🇩", "🇮🇪", - "🇮🇱", "🇮🇲", "🇮🇳", "🇮🇴", "🇮🇶", "🇮🇷", - "🇮🇸", "🇮🇹", "🇯🇪", "🇯🇲", "🇯🇴", "🇯🇵", - "🇰🇪", "🇰🇬", "🇰🇭", "🇰🇮", "🇰🇲", "🇰🇳", - "🇰🇵", "🇰🇷", "🇰🇼", "🇰🇾", "🇰🇿", "🇱🇦", - "🇱🇧", "🇱🇨", "🇱🇮", "🇱🇰", "🇱🇷", "🇱🇸", - "🇱🇹", "🇱🇺", "🇱🇻", "🇱🇾", "🇲🇦", "🇲🇨", - "🇲🇩", "🇲🇪", "🇲🇫", "🇲🇬", "🇲🇭", "🇲🇰", - "🇲🇱", "🇲🇲", "🇲🇳", "🇲🇴", "🇲🇵", "🇲🇶", - "🇲🇷", "🇲🇸", "🇲🇹", "🇲🇺", "🇲🇻", "🇲🇼", - "🇲🇽", "🇲🇾", "🇲🇿", "🇳🇦", "🇳🇨", "🇳🇪", - "🇳🇫", "🇳🇬", "🇳🇮", "🇳🇱", "🇳🇴", "🇳🇵", - "🇳🇷", "🇳🇺", "🇳🇿", "🇴🇲", "🇵🇦", "🇵🇪", - "🇵🇫", "🇵🇬", "🇵🇭", "🇵🇰", "🇵🇱", "🇵🇲", - "🇵🇳", "🇵🇷", "🇵🇸", "🇵🇹", "🇵🇼", "🇵🇾", - "🇶🇦", "🇷🇪", "🇷🇴", "🇷🇸", "🇷🇺", "🇷🇼", - "🇸🇦", "🇸🇧", "🇸🇨", "🇸🇩", "🇸🇪", "🇸🇬", - "🇸🇭", "🇸🇮", "🇸🇯", "🇸🇰", "🇸🇱", "🇸🇲", - "🇸🇳", "🇸🇴", "🇸🇷", "🇸🇸", "🇸🇹", "🇸🇻", - "🇸🇽", "🇸🇾", "🇸🇿", "🇹🇦", "🇹🇨", "🇹🇩", - "🇹🇫", "🇹🇬", "🇹🇭", "🇹🇯", "🇹🇰", "🇹🇱", - "🇹🇲", "🇹🇳", "🇹🇴", "🇹🇷", "🇹🇹", "🇹🇻", - "🇹🇼", "🇹🇿", "🇺🇦", "🇺🇬", "🇺🇲", "🇺🇳", - "🇺🇸", "🇺🇾", "🇺🇿", "🇻🇦", "🇻🇨", "🇻🇪", - "🇻🇬", "🇻🇮", "🇻🇳", "🇻🇺", "🇼🇫", "🇼🇸", - "🇽🇰", "🇾🇪", "🇾🇹", "🇿🇦", "🇿🇲", "🇿🇼" - } - - local iso_code = nil - if (remark ~= nil) then - remark = string.gsub(remark, "NETWORKS", "") - for i, v in pairs(emoji_table) do - if (string.find(string.lower(remark), string.lower(v)) ~= nil) then - iso_code = string.lower(iso_table[i]) - break - end - end - end - - if (iso_code == nil ) then - if( host ~= "") then - local ret = nixio.getaddrinfo(_M.trim(host), "any") - if(ret == nil) then - iso_code = "un" - else - local hostip = ret[1].address - local status,code = pcall(_M.get_iso,hostip) - if(status) then - iso_code = code - else - iso_code = "un" - end - end - else - iso_code = "un" - end - end - return string.gsub(iso_code, '\n', '') -end - -function _M.get_iso(ip) - local mm = require 'maxminddb' - local db = mm.open('/usr/share/vssr/GeoLite2-Country.mmdb') - local res = db:lookup(ip) - return string.lower(res:get("country", "iso_code")) -end - -function _M.get_cname(ip) - local mm = require 'maxminddb' - local db = mm.open('/usr/share/vssr/GeoLite2-Country.mmdb') - local res = db:lookup(ip) - return string.lower(res:get("country", "names", "zh-CN")) -end - - --- Get status of conncet to any site with host and port --- Return String:true or nil -function _M.check_site(host, port) - local nixio = require "nixio" - local socket = nixio.socket("inet", "stream") - socket:setopt("socket", "rcvtimeo", 2) - socket:setopt("socket", "sndtimeo", 2) - local ret = socket:connect(host, port) - socket:close() - return ret -end - -function _M.trim(text) - if not text or text == "" then return "" end - return (string.gsub(text, "^%s*(.-)%s*$", "%1")) -end - -function _M.wget(url) - local sys = require "luci.sys" - local stdout = sys.exec( - 'wget-ssl -q --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --no-check-certificate -t 3 -T 10 -O- "' .. - url .. '"') - return _M.trim(stdout) -end - - -return _M - diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/GeoLite2-Country.mmdb b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/GeoLite2-Country.mmdb deleted file mode 100755 index c61b4e3bd0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/GeoLite2-Country.mmdb and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/chinaipset.sh b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/chinaipset.sh deleted file mode 100755 index 0fb1c3218a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/chinaipset.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "create china hash:net family inet hashsize 1024 maxelem 65536" >/tmp/china.ipset -awk '!/^$/&&!/^#/{printf("add china %s'" "'\n",$0)}' /etc/vssr/china_ssr.txt >>/tmp/china.ipset -ipset -! flush china -ipset -! restore /dev/null -rm -f /tmp/china.ipset diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_ss.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_ss.lua deleted file mode 100755 index d31a4da4ed..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_ss.lua +++ /dev/null @@ -1,22 +0,0 @@ -local ucursor = require 'luci.model.uci'.cursor() -local json = require 'luci.jsonc' -local server_section = arg[1] -local local_port = arg[3] -local host = arg[4] - -local server = ucursor:get_all('vssr', server_section) - -local ss = { - server = host, - server_port = server.server_port, - local_address = '0.0.0.0', - local_port = local_port, - password = server.password, - timeout = (server.timeout ~= nil) and server.timeout or 60, - method = server.encrypt_method_ss, - reuse_port = true, - fast_open = (server.fast_open == '1') and true or false, - plugin = (server.plugin ~= nil) and server.plugin or nil, - plugin_opts = (server.plugin ~= nil) and server.plugin_opts or nil -} -print(json.stringify(ss, 1)) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_ssr.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_ssr.lua deleted file mode 100755 index bba722fde7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_ssr.lua +++ /dev/null @@ -1,24 +0,0 @@ -local ucursor = require 'luci.model.uci'.cursor() -local json = require 'luci.jsonc' -local server_section = arg[1] -local local_port = arg[3] -local host = arg[4] - -local server = ucursor:get_all('vssr', server_section) - -local ssr = { - server = host, - server_port = server.server_port, - local_address = '0.0.0.0', - local_port = local_port, - password = server.password, - timeout = (server.timeout ~= nil) and server.timeout or 60, - method = server.encrypt_method, - protocol = server.protocol, - protocol_param = server.protocol_param, - obfs = server.obfs, - obfs_param = server.obfs_param, - reuse_port = true, - fast_open = (server.fast_open == '1') and true or false -} -print(json.stringify(ssr, 1)) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_trojan.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_trojan.lua deleted file mode 100644 index 875813dc08..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_trojan.lua +++ /dev/null @@ -1,40 +0,0 @@ -local ucursor = require 'luci.model.uci'.cursor() -local json = require 'luci.jsonc' -local server_section = arg[1] -local proto = arg[2] -local local_port = arg[3] - -local server = ucursor:get_all('vssr', server_section) - -local trojan = { - log_level = 3, - run_type = proto, - local_addr = '0.0.0.0', - local_port = tonumber(local_port), - remote_addr = server.server, - remote_port = tonumber(server.server_port), - udp_timeout = 60, - -- 传入连接 - password = {server.password}, - -- 传出连接 - ssl = { - verify = (server.insecure == '0') and true or false, - verify_hostname = (server.tls == '1') and true or false, - cert = '', - cipher = 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA', - cipher_tls13 = 'TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384', - sni = server.peer, - alpn = {'h2', 'http/1.1'}, - curve = '', - reuse_session = true, - session_ticket = false - }, - tcp = { - no_delay = true, - keep_alive = true, - reuse_port = true, - fast_open = (server.fast_open == '1') and true or false, - fast_open_qlen = 20 - } -} -print(json.stringify(trojan, 1)) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua deleted file mode 100755 index 53e80ae4b8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray.lua +++ /dev/null @@ -1,295 +0,0 @@ -local ucursor = require 'luci.model.uci'.cursor() -local name = 'vssr' -local json = require 'luci.jsonc' -local nixio = require 'nixio' -local server_section = arg[1] -local proto = arg[2] -local local_port = arg[3] -local outbounds_table = {} -local rules_table = {} - -function read_conf(file) - if not nixio.fs.access(file) then - return nil - end - local rfile = io.open(file, "r") - local ltable = {} - for line in rfile:lines() do - local re = string.gsub(line, "\r", "") - table.insert(ltable,re) - end - local rtable = next(ltable) ~= nil and ltable or nil - return rtable -end - - -local v2ray_flow = ucursor:get_first(name, 'global', 'v2ray_flow', '0') - -local custom_domain = read_conf("/etc/vssr/custom_domain.list") -local custom_ip = read_conf("/etc/vssr/custom_ip.list") - -local youtube_domain = read_conf("/etc/vssr/youtube_domain.list") -local youtube_ip = read_conf("/etc/vssr/youtube_ip.list") - -local tw_video_domain = read_conf("/etc/vssr/tw_video_domain.list") -local tw_video_ip = read_conf("/etc/vssr/tw_video_ip.list") - -local netflix_domain = read_conf("/etc/vssr/netflix_domain.list") -local netflix_ip = read_conf("/etc/vssr/netflix_ip.list") - -local disney_domain = read_conf("/etc/vssr/disney_domain.list") -local disney_ip = read_conf("/etc/vssr/disney_ip.list") - -local prime_domain = read_conf("/etc/vssr/prime_domain.list") -local prime_ip = read_conf("/etc/vssr/prime_ip.list") - -local tvb_domain = read_conf("/etc/vssr/tvb_domain.list") -local tvb_ip = read_conf("/etc/vssr/tvb_ip.list") - - -local flow_table = { - yotube = { - name = 'youtube', - port = 2081, - rules = { - type = 'field', - domain = youtube_domain, - ip = youtube_ip, - outboundTag = 'youtube' - } - }, - tw_video = { - name = 'tw_video', - port = 2082, - rules = { - type = 'field', - domain = tw_video_domain, - ip = tw_video_ip, - outboundTag = 'tw_video' - } - }, - netflix = { - name = 'netflix', - port = 2083, - rules = { - type = 'field', - domain = netflix_domain, - ip = netflix_ip, - outboundTag = 'netflix' - } - }, - disney = { - name = 'disney', - port = 2084, - rules = { - type = 'field', - domain = disney_domain, - ip = disney_ip, - outboundTag = 'disney' - } - }, - prime = { - name = 'prime', - port = 2085, - rules = { - type = 'field', - domain = prime_domain, - ip = prime_ip, - outboundTag = 'prime' - } - }, - tvb = { - name = 'tvb', - port = 2086, - rules = { - type = 'field', - domain = tvb_domain, - ip = tvb_ip, - outboundTag = 'tvb' - } - }, - custom = { - name = 'custom', - port = 2087, - rules = { - type = 'field', - domain = custom_domain, - ip = custom_ip, - outboundTag = 'custom' - } - } -} - -local bt_rules = { - type = 'field', - outboundTag = 'bt', - protocol = { - 'bittorrent' - } -} -local bt_rules1 = { - type = 'field', - outboundTag = 'bt', - domain = { - 'torrent', - 'peer_id=', - 'info_hash', - 'get_peers', - 'find_node', - 'BitTorrent', - 'announce_peer', - 'announce.php?passkey=' - } -} - -function gen_outbound(server_node, tags, local_ports) - local bound = {} - if server_node == nil or server_node == 'nil' then - bound = nil - else - local server = ucursor:get_all(name, server_node) - local node_type = server.type == "vless" and "vless" or "vmess" - - if server.type ~= 'v2ray' and server.type ~= 'vless' then - bound = { - tag = tags, - protocol = 'socks', - settings = { - servers = { - {address = '127.0.0.1', port = tonumber(local_ports)} - } - } - } - else - bound = { - tag = tags, - protocol = node_type, - settings = { - vnext = { - { - address = server.server, - port = tonumber(server.server_port), - users = { - { - id = server.vmess_id, - alterId = server.type == "v2ray" and tonumber(server.alter_id) or nil, - security = server.type == "v2ray" and server.security or nil, - flow = (server.xtls == '1') and (server.vless_flow and server.vless_flow or "xtls-rprx-origin") or nil, - encryption = server.type == "vless" and server.vless_encryption or nil - } - } - } - } - }, - -- 底层传输配置 - streamSettings = { - network = server.transport, - security = (server.tls == '1') and ((server.xtls == '1') and "xtls" or "tls") or "none", - tlsSettings = (server.tls == '1' and server.xtls ~= '1') and {allowInsecure = (server.insecure ~= "0") and true or false,serverName=server.tls_host,} or nil, - xtlsSettings = (server.xtls == '1') and {allowInsecure = (server.insecure ~= "0") and true or false,serverName=server.tls_host,} or nil, - kcpSettings = (server.transport == 'kcp') and - { - mtu = tonumber(server.mtu), - tti = tonumber(server.tti), - uplinkCapacity = tonumber(server.uplink_capacity), - downlinkCapacity = tonumber(server.downlink_capacity), - congestion = (server.congestion == '1') and true or false, - readBufferSize = tonumber(server.read_buffer_size), - writeBufferSize = tonumber(server.write_buffer_size), - header = {type = server.kcp_guise} - } or - nil, - wsSettings = (server.transport == 'ws') and (server.ws_path ~= nil or server.ws_host ~= nil) and - { - path = server.ws_path, - headers = (server.ws_host ~= nil) and {Host = server.ws_host} or nil - } or - nil, - httpSettings = (server.transport == 'h2') and {path = server.h2_path, host = server.h2_host} or nil, - quicSettings = (server.transport == 'quic') and - { - security = server.quic_security, - key = server.quic_key, - header = {type = server.quic_guise} - } or - nil - }, - mux = { - enabled = (server.mux == '1') and true or false, - concurrency = tonumber(server.concurrency) - } - } - end - end - return bound -end - -function gen_bt_outbounds() - local bound = { - tag = 'bt', - protocol = 'freedom', - settings = { - a = 1 - } - } - return bound -end - -if v2ray_flow == '1' then - - table.insert(outbounds_table, gen_outbound(server_section, 'global', 2080)) - for _, v in pairs(flow_table) do - if(v.rules.domain ~= nil or v.rules.ip ~= nil) then - local server = ucursor:get_first(name, 'global', v.name .. '_server') - table.insert(outbounds_table, gen_outbound(server, v.name, v.port)) - - if(v.rules.domain ~= nil) then - domain_rules = { - type = 'field', - domain = v.rules.domain, - outboundTag = v.rules.outboundTag - } - table.insert(rules_table, (server ~= nil and server ~= 'nil' ) and domain_rules or nil) - end - - if(v.rules.ip ~= nil) then - ip_rules = { - type = 'field', - ip = v.rules.ip, - outboundTag = v.rules.outboundTag - } - table.insert(rules_table, (server ~= nil and server ~= 'nil' ) and ip_rules or nil) - end - end - end -else - table.insert(outbounds_table, gen_outbound(server_section, 'main', local_port)) -end - -table.insert(outbounds_table, gen_bt_outbounds()) -table.insert(rules_table, bt_rules) -table.insert(rules_table, bt_rules1) - -local v2ray = { - log = { - -- error = "/var/vssrsss.log", - -- access = "/var/v2rays.log", - loglevel = 'warning' - }, - -- 传入连接 - inbounds = { - { - port = tonumber(local_port), - protocol = 'dokodemo-door', - settings = {network = proto, followRedirect = true}, - sniffing = {enabled = true, destOverride = {'http', 'tls'}}, - streamSettings = { - sockopt = {tproxy = (proto == 'tcp') and 'redirect' or 'tproxy'} - } - } - }, - -- 传出连接 - outbounds = outbounds_table, - routing = {domainStrategy = 'IPIfNonMatch', rules = rules_table} -} -print(json.stringify(v2ray, 1)) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray_s.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray_s.lua deleted file mode 100755 index 08f1dc0b6e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/genconfig_v2ray_s.lua +++ /dev/null @@ -1,50 +0,0 @@ -local ucursor = require 'luci.model.uci'.cursor() -local name = 'vssr' -local json = require 'luci.jsonc' -local socks_switch = ucursor:get_first(name, 'socks5_proxy', 'enable_server') -local auth_type = ucursor:get_first(name, 'socks5_proxy', 'enable_auth') -local local_port = ucursor:get_first(name, 'socks5_proxy', 'local_port') -local Socks_user = ucursor:get_first(name, 'socks5_proxy', 'Socks_user') -local Socks_pass = ucursor:get_first(name, 'socks5_proxy', 'Socks_pass') - -local http_switch = ucursor:get_first(name, 'socks5_proxy', 'enable_server') -local auth_typeh = ucursor:get_first(name, 'http_proxy', 'enable_auth') -local local_porth = ucursor:get_first(name, 'http_proxy', 'local_port') -local http_user = ucursor:get_first(name, 'http_proxy', 'http_user') -local http_pass = ucursor:get_first(name, 'http_proxy', 'http_pass') - -function gen_inbound(sw, auth_type, local_port, user, pass, proto) - local bound - if sw == 0 then - bound = nil - else - bound = { - port = local_port, - protocol = proto, - settings = { - auth = (auth_type == '1') and 'password' or 'noauth', - accounts = (auth_type == '1') and {{user = (auth_type == '1') and user, pass = pass}} or nil - } - } - end - return bound -end - -inbounds_table = {} - -table.insert(inbounds_table, gen_inbound(socks_switch, auth_type, local_port, Socks_user, Socks_pass, 'socks')) -table.insert(inbounds_table, gen_inbound(http_switch, auth_typeh, local_porth, http_user, http_pass, 'http')) - -local v2ray = { - log = { - -- error = "/var/log/v2ray.log", - loglevel = 'warning' - }, - -- 传入连接 - inbounds = inbounds_table, - -- 传出连接 - outbound = {protocol = 'freedom'}, - -- 额外传出连接 - outboundDetour = {{protocol = 'blackhole', tag = 'blocked'}} -} -print(json.stringify(v2ray, 1)) diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/gfw2ipset.sh b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/gfw2ipset.sh deleted file mode 100755 index cce3006da1..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/gfw2ipset.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -. /lib/functions.sh - -uci_get_by_type() { - local ret=$(uci get vssr.@$1[0].$2 2>/dev/null) - echo ${ret:=$3} -} -v2ray_flow=$(uci_get_by_type global v2ray_flow) - -mkdir -p /tmp/dnsmasq.ssr - -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"gfwlist"'\n",$0)}' /etc/vssr/gfw.list >/tmp/dnsmasq.ssr/custom_forward.conf -awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/gfw.list >>/tmp/dnsmasq.ssr/custom_forward.conf - -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/black.list >/tmp/dnsmasq.ssr/blacklist_forward.conf -awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/black.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"whitelist"'\n",$0)}' /etc/vssr/white.list >/tmp/dnsmasq.ssr/whitelist_forward.conf - -if [ "$v2ray_flow" = "1" ]; then - - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/tw_video_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/tw_video_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/netflix_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/netflix_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/disney_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/disney_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/prime_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/prime_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/tvb_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/tvb_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/custom_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/custom_domain.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf -fi - -function valid_ip() { - ip=$1 - read_ip=$(echo $ip | awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}') - if echo $ip | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' >/dev/null; then - if [ $read_ip == "yes" ]; then - return 0 - else - return 1 - fi - else - return 1 - fi -} - -config_load vssr - -function addWhiteList() { - local iface="$1" - local host - config_get host "$iface" server - if valid_ip $host; then - ipset -! add whitelist $host - else - [ ! -z "$host" ] && echo "ipset=/.$host/whitelist" >>/tmp/dnsmasq.ssr/whitelist_forward.conf - fi -} - -config_foreach addWhiteList diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua deleted file mode 100644 index 5a7e00c2cc..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/subscribe.lua +++ /dev/null @@ -1,554 +0,0 @@ -#!/usr/bin/lua ------------------------------------------------- --- This file is part of the luci-app-ssr-plus subscribe.lua --- @author William Chan ------------------------------------------------- - - -require 'nixio' -require 'luci.util' -require 'luci.jsonc' -require 'luci.sys' - --- these global functions are accessed all the time by the event handler --- so caching them is worth the effort -local luci = luci -local tinsert = table.insert -local ssub, slen, schar, sbyte, sformat, sgsub = - string.sub, - string.len, - string.char, - string.byte, - string.format, - string.gsub -local jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify -local b64decode = nixio.bin.b64decode -local cache = {} -local nodeResult = setmetatable({}, {__index = cache}) -- update result -local name = 'vssr' -local uciType = 'servers' -local ucic = luci.model.uci.cursor() -local proxy = ucic:get_first(name, 'server_subscribe', 'proxy', '0') -local switch = '0' -local subscribe_url = ucic:get_first(name, 'server_subscribe', 'subscribe_url', {}) -local filter_words = ucic:get_first(name, 'server_subscribe', 'filter_words', '过期时间/剩余流量') - -function print_r ( t ) - local print_r_cache={} - local function sub_print_r(t,indent) - if (print_r_cache[tostring(t)]) then - print(indent.."*"..tostring(t)) - else - print_r_cache[tostring(t)]=true - if (type(t)=="table") then - for pos,val in pairs(t) do - if (type(val)=="table") then - print(indent.."["..pos.."] => "..tostring(t).." {") - sub_print_r(val,indent..string.rep(" ",string.len(pos)+8)) - print(indent..string.rep(" ",string.len(pos)+6).."}") - elseif (type(val)=="string") then - print(indent.."["..pos..'] => "'..val..'"') - else - print(indent.."["..pos.."] => "..tostring(val)) - end - end - else - print(indent..tostring(t)) - end - end - end - if (type(t)=="table") then - print(tostring(t).." {") - sub_print_r(t," ") - print("}") - else - sub_print_r(t," ") - end - print() -end - -local log = function(...) - print(os.date('%Y-%m-%d %H:%M:%S ') .. table.concat({...}, ' ')) -end --- 分割字符串 -local function split(full, sep) - full = full:gsub('%z', '') -- 这里不是很清楚 有时候结尾带个\0 - local off, result = 1, {} - while true do - local nStart, nEnd = full:find(sep, off) - if not nEnd then - local res = ssub(full, off, slen(full)) - if #res > 0 then -- 过滤掉 \0 - tinsert(result, res) - end - break - else - tinsert(result, ssub(full, off, nStart - 1)) - off = nEnd + 1 - end - end - return result -end - ---table去重 - -local function clone( object ) - local lookup_table = {} - local function copyObj( object ) - if type( object ) ~= "table" then - return object - elseif lookup_table[object] then - return lookup_table[object] - end - - local new_table = {} - lookup_table[object] = new_table - for key, value in pairs( object ) do - new_table[copyObj( key )] = copyObj( value ) - end - return setmetatable( new_table, getmetatable( object ) ) - end - return copyObj( object ) -end - -local function table_unique(list) - local temp1 = clone(list) - local temp2 = clone(list) - for k1, v1 in ipairs(temp1) do - for k2, v2 in ipairs(temp2) do - if v1.alias ~= v2.alias and v1.hashkey == v2.hashkey then - table.remove(temp1, k1) - table.remove(temp2, k1) - - end - end - end - return temp1 -end - --- urlencode -local function get_urlencode(c) - return sformat('%%%02X', sbyte(c)) -end - -local function urlEncode(szText) - local str = szText:gsub('([^0-9a-zA-Z ])', get_urlencode) - str = str:gsub(' ', '+') - return str -end - -local function get_urldecode(h) - return schar(tonumber(h, 16)) -end -local function UrlDecode(szText) - return szText:gsub('+', ' '):gsub('%%(%x%x)', get_urldecode) -end - --- trim -local function trim(text) - if not text or text == '' then - return '' - end - return (sgsub(text, '^%s*(.-)%s*$', '%1')) -end --- md5 -local function md5(content) - local stdout = luci.sys.exec('echo "' .. urlEncode(content) .. '" | md5sum | cut -d " " -f1') - -- assert(nixio.errno() == 0) - return trim(stdout) -end --- base64 -local function base64Decode(text) - local raw = text - if not text then - return '' - end - text = text:gsub('%z', '') - text = text:gsub('_', '/') - text = text:gsub('-', '+') - local mod4 = #text % 4 - text = text .. string.sub('====', mod4 + 1) - local result = b64decode(text) - if result then - return result:gsub('%z', '') - else - return raw - end -end --- 处理数据 -local function processData(szType, content, groupName) - local result = { - -- auth_enable = '0', - -- switch_enable = '1', - type = szType, - local_port = 1234, - -- timeout = 60, -- 不太确定 好像是死的 - -- fast_open = 0, - -- kcp_enable = 0, - -- kcp_port = 0, - kcp_param = '--nocomp' - } - if szType == 'ssr' then - local dat = split(content, '/%?') - local hostInfo = split(dat[1], ':') - result.server = hostInfo[1] - result.server_port = hostInfo[2] - result.protocol = hostInfo[3] - result.encrypt_method = hostInfo[4] - result.obfs = hostInfo[5] - result.password = base64Decode(hostInfo[6]) - local params = {} - for _, v in pairs(split(dat[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - result.obfs_param = base64Decode(params.obfsparam) - result.protocol_param = base64Decode(params.protoparam) - local group = base64Decode(params.group) - if group then - result.alias = '[' .. group .. '] ' - end - result.alias = result.alias .. base64Decode(params.remarks) - elseif szType == 'vmess' then - local info = jsonParse(content) - result.type = 'v2ray' - result.server = info.add - result.server_port = info.port - result.transport = info.net - result.alter_id = info.aid - result.vmess_id = info.id - result.alias = groupName .. info.ps - -- result.mux = 1 - -- result.concurrency = 8 - if info.net == 'ws' then - result.ws_host = info.host - result.ws_path = info.path - end - if info.net == 'h2' then - result.h2_host = info.host - result.h2_path = info.path - end - if info.net == 'tcp' then - result.tcp_guise = info.type - result.http_host = info.host - result.http_path = info.path - end - if info.net == 'kcp' then - result.kcp_guise = info.type - result.mtu = 1350 - result.tti = 50 - result.uplink_capacity = 5 - result.downlink_capacity = 20 - result.read_buffer_size = 2 - result.write_buffer_size = 2 - end - if info.net == 'quic' then - result.quic_guise = info.type - result.quic_key = info.key - result.quic_security = info.securty - end - if info.security then - result.security = info.security - end - if info.tls == 'tls' or info.tls == '1' then - result.tls = '1' - result.tls_host = info.host - else - result.tls = '0' - end - elseif szType == 'ss' then - local idx_sp = 0 - local alias = '' - if content:find('#') then - idx_sp = content:find('#') - alias = content:sub(idx_sp + 1, -1) - end - local info = content:sub(1, idx_sp - 1) - local hostInfo = split(base64Decode(info), '@') - local host = split(hostInfo[2], ':') - local userinfo = base64Decode(hostInfo[1]) - local method = userinfo:sub(1, userinfo:find(':') - 1) - local password = userinfo:sub(userinfo:find(':') + 1, #userinfo) - result.alias = groupName .. UrlDecode(alias) - result.type = 'ss' - result.server = host[1] - if host[2]:find('/%?') then - local query = split(host[2], '/%?') - result.server_port = query[1] - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - params[t[1]] = t[2] - end - if params.plugin then - local plugin_info = UrlDecode(params.plugin) - local idx_pn = plugin_info:find(';') - if idx_pn then - result.plugin = plugin_info:sub(1, idx_pn - 1) - result.plugin_opts = plugin_info:sub(idx_pn + 1, #plugin_info) - else - result.plugin = plugin_info - end - end - else - result.server_port = host[2] - end - result.encrypt_method_ss = method - result.password = password - elseif szType == 'trojan' then - local idx_sp = 0 - local alias = '' - if content:find('#') then - idx_sp = content:find('#') - alias = content:sub(idx_sp + 1, -1) - end - local info = content:sub(1, idx_sp - 1) - local hostInfo = split(info, '@') - local host = split(hostInfo[2], ':') - local password = hostInfo[1] - result.alias = groupName .. UrlDecode(alias) - result.type = 'trojan' - result.server = host[1] - result.insecure = '0' - if host[2]:find('?') then - local query = split(host[2], '?') - result.server_port = query[1] - local params = {} - for _, v in pairs(split(query[2], '&')) do - local t = split(v, '=') - if t[1] == 'peer' then - result.peer = t[2] - result.tls = '1' - end - end - else - result.server_port = host[2] - end - result.password = password - elseif szType == 'ssd' then - result.type = 'ss' - result.server = content.server - result.server_port = content.port - result.password = content.password - result.encrypt_method_ss = content.encryption - result.plugin = content.plugin - result.plugin_opts = content.plugin_options - result.alias = '[' .. content.airport .. '] ' .. content.remarks - end - if not result.alias then - if result.server and result.server_port then - result.alias = result.server .. ':' .. result.server_port - else - result.alias = "NULL" - end - end - -- alias 不参与 hashkey 计算 - local alias = result.alias - result.alias = nil - local switch_enable = result.switch_enable - result.switch_enable = nil - result.hashkey = md5(jsonStringify(result)) - result.alias = alias - result.switch_enable = switch_enable - local vssrutil = require 'vssrutil' - result.flag = vssrutil.get_flag(result.alias, result.server) - - return result -end --- wget -local function wget(url) - local stdout = - luci.sys.exec( - 'wget-ssl -q --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --no-check-certificate -t 3 -T 10 -O- "' .. - url .. '"' - ) - return trim(stdout) -end - -local function check_filer(result) - do - local filter_word = split(filter_words, "/") - for i, v in pairs(filter_word) do - if result.alias:find(v) then - log('订阅节点关键字过滤:“' .. v ..'” ,该节点被丢弃') - return true - end - end - end -end - -local execute = function() - -- exec - do - if proxy == '0' then -- 不使用代理更新的话先暂停 - log('服务正在暂停') - luci.sys.init.stop(name) - end - for k, url in ipairs(subscribe_url) do - local groupName = "" - urlTable = split(url, ",") - groupName = table.getn(urlTable) > 1 and '[' .. urlTable[1] .. '] ' or "" - url = table.getn(urlTable) > 1 and urlTable[2] or url - local raw = wget(url) - if #raw > 0 then - local nodes, szType - local groupHash = md5(url) - cache[groupHash] = {} - tinsert(nodeResult, {}) - local index = #nodeResult - -- SSD 似乎是这种格式 ssd:// 开头的 - if raw:find('ssd://') then - szType = 'ssd' - local nEnd = select(2, raw:find('ssd://')) - nodes = base64Decode(raw:sub(nEnd + 1, #raw)) - nodes = jsonParse(nodes) - local extra = { - airport = nodes.airport, - port = nodes.port, - encryption = nodes.encryption, - password = nodes.password - } - local servers = {} - -- SS里面包着 干脆直接这样 - for _, server in ipairs(nodes.servers) do - tinsert(servers, setmetatable(server, {__index = extra})) - end - nodes = servers - else - -- ssd 外的格式 - nodes = split(base64Decode(raw):gsub(' ', '\n'), '\n') - end - for _, v in ipairs(nodes) do - if v then - local result - if szType == 'ssd' then - result = processData(szType, v, groupName) - elseif not szType then - local node = trim(v) - local dat = split(node, '://') - if dat and dat[1] and dat[2] then - if dat[1] == 'ss' then - result = processData(dat[1], dat[2], groupName) - else - result = processData(dat[1], base64Decode(dat[2]), groupName) - end - end - else - log('跳过未知类型: ' .. szType) - end - -- log(result) - if result then - if - not result.server or - not result.server_port or - result.alias == "NULL" or - check_filer(result) or - result.server:match("[^0-9a-zA-Z%-%.%s]") -- 中文做地址的 也没有人拿中文域名搞,就算中文域也有Puny Code SB 机场 - then - log('丢弃无效节点: ' .. result.type .. ' 节点, ' .. result.alias) - else - log('成功解析: ' .. result.type .. ' 节点, ' .. result.alias) - result.grouphashkey = groupHash - tinsert(nodeResult[index], result) - cache[groupHash][result.hashkey] = nodeResult[index][#nodeResult[index]] - end - end - end - end - log('成功解析节点数量: ' .. #nodes) - else - log(url .. ': 获取内容为空') - end - end - end - -- diff - do - if next(nodeResult) == nil then - log("更新失败,没有可用的节点信息") - if proxy == '0' then - luci.sys.init.start(name) - log('订阅失败, 恢复服务') - end - return - end - local add, del = 0, 0 - ucic:foreach( - name, - uciType, - function(old) - if old.grouphashkey or old.hashkey then -- 没有 hash 的不参与删除 - if not nodeResult[old.grouphashkey] or not nodeResult[old.grouphashkey][old.hashkey] then - ucic:delete(name, old['.name']) - del = del + 1 - else - local dat = nodeResult[old.grouphashkey][old.hashkey] - ucic:tset(name, old['.name'], dat) - -- 标记一下 - setmetatable(nodeResult[old.grouphashkey][old.hashkey], {__index = {_ignore = true}}) - end - else - if not old.alias then - if not old.server or old.server_port then - ucic:delete(name, old['.name']) - else - old.alias = old.server .. ':' .. old.server_port - log('忽略手动添加的节点: ' .. old.alias) - end - else - log('忽略手动添加的节点: ' .. old.alias) - end - end - end - ) - - for k, v in ipairs(nodeResult) do - -- 如果订阅节点中有相同的节点信息 需要先去重。 - new_nodes = table_unique(v) - for kk, vv in ipairs(new_nodes) do - if not vv._ignore then - local section = ucic:add(name, uciType) - ucic:tset(name, section, vv) - ucic:set(name, section, 'switch_enable', switch) - add = add + 1 - end - end - end - ucic:commit(name) - -- 如果服务器已经不见了把帮换一个 - local globalServer = ucic:get_first(name, 'global', 'global_server', '') - local firstServer = ucic:get_first(name, uciType) - if not ucic:get(name, globalServer) then - if firstServer then - ucic:set(name, ucic:get_first(name, 'global'), 'global_server', firstServer) - ucic:commit(name) - log('当前主服务器已更新,正在自动更换。') - end - end - if firstServer then - luci.sys.call('/etc/init.d/' .. name .. ' restart > /dev/null 2>&1 &') -- 不加&的话日志会出现的更早 - else - luci.sys.call('/etc/init.d/' .. name .. ' stop > /dev/null 2>&1 &') -- 不加&的话日志会出现的更早 - end - log('新增节点数量: ' .. add, '删除节点数量: ' .. del) - log('更新成功服务正在启动') - log('END SUBSCRIBE') - end -end - -if subscribe_url and #subscribe_url > 0 then - xpcall( - execute, - function(e) - log(e) - -- log(debug.traceback()) - log('发生错误, 正在恢复服务') - log('END SUBSCRIBE') - local firstServer = ucic:get_first(name, uciType) - if firstServer then - luci.sys.call('/etc/init.d/' .. name .. ' restart > /dev/null 2>&1 &') -- 不加&的话日志会出现的更早 - else - luci.sys.call('/etc/init.d/' .. name .. ' stop > /dev/null 2>&1 &') -- 不加&的话日志会出现的更早 - end - end - ) -end diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua deleted file mode 100644 index 94bcf307a2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/lua ------------------------------------------------- --- This file is part of the luci-app-ssr-plus update.lua --- By Mattraks ------------------------------------------------- - -require 'nixio' -require 'luci.util' -require 'luci.jsonc' -require 'luci.sys' -local icount = 0 -local ucic = luci.model.uci.cursor() - -local log = function(...) - print(os.date('%Y-%m-%d %H:%M:%S ') .. table.concat({...}, ' ')) -end - -log('正在更新【GFW列表】数据库') -refresh_cmd = 'wget-ssl --no-check-certificate https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt -O /tmp/gfw.b64' -sret = luci.sys.call(refresh_cmd .. ' 2>/dev/null') -if sret == 0 then - luci.sys.call('/usr/bin/vssr-gfw') - icount = luci.sys.exec('cat /tmp/gfwnew.txt | wc -l') - if tonumber(icount) > 1000 then - oldcount = luci.sys.exec('cat /etc/vssr/gfw_list.conf | wc -l') - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/gfwnew.txt /etc/vssr/gfw_list.conf') - -- retstring=tostring(math.ceil(tonumber(icount)/2)) - log('更新成功! 新的总纪录数:' .. icount) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') - end - luci.sys.exec('rm -f /tmp/gfwnew.txt') -else - log('更新失败!') -end - -log('正在更新【国内IP段】数据库') -refresh_cmd ="wget-ssl -O- 'https://ispip.clang.cn/all_cn.txt' > /tmp/china_ssr.txt 2>/dev/null" -sret = luci.sys.call(refresh_cmd) -icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') -if sret == 0 then - icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') - if tonumber(icount) > 1000 then - oldcount = luci.sys.exec('cat /etc/vssr/china_ssr.txt | wc -l') - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/china_ssr.txt /etc/vssr/china_ssr.txt') - -- retstring=tostring(math.ceil(tonumber(icount)/2)) - log('更新成功! 新的总纪录数:' .. icount) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') - end - luci.sys.exec('rm -f /tmp/china_ssr.txt') -else - log('更新失败!') -end - --- --[[ -if ucic:get_first('vssr', 'global', 'adblock', '') == '1' then - log('正在更新【广告屏蔽】数据库') - local need_process = 0 - refresh_cmd = 'wget-ssl --no-check-certificate -O - https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt > /tmp/adnew.conf' - need_process = 1 - sret = luci.sys.call(refresh_cmd .. ' 2>/dev/null') - if sret == 0 then - if need_process == 1 then - luci.sys.call('/usr/bin/vssr-ad') - end - icount = luci.sys.exec('cat /tmp/ad.conf | wc -l') - if tonumber(icount) > 1000 then - if nixio.fs.access('/etc/vssr/ad.conf') then - oldcount = luci.sys.exec('cat /etc/vssr/ad.conf | wc -l') - else - oldcount = 0 - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/ad.conf /etc/vssr/ad.conf') - -- retstring=tostring(math.ceil(tonumber(icount))) - if oldcount == 0 then - luci.sys.call('/etc/init.d/dnsmasq restart') - end - log('更新成功! 新的总纪录数:' .. icount) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') - end - luci.sys.exec('rm -f /tmp/ad.conf') - else - log('更新失败!') - end -end --- --]] diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/flag-icon.min.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/flag-icon.min.css deleted file mode 100644 index 15af963825..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/flag-icon.min.css +++ /dev/null @@ -1 +0,0 @@ -.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}.flag-icon-es-ca{background-image:url(../flags/4x3/es-ca.svg)}.flag-icon-es-ca.flag-icon-squared{background-image:url(../flags/1x1/es-ca.svg)}.flag-icon-eu{background-image:url(../flags/4x3/eu.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(../flags/1x1/eu.svg)}.flag-icon-gb-eng{background-image:url(../flags/4x3/gb-eng.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(../flags/1x1/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(../flags/4x3/gb-nir.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(../flags/1x1/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(../flags/4x3/gb-sct.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(../flags/1x1/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(../flags/4x3/gb-wls.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(../flags/1x1/gb-wls.svg)}.flag-icon-un{background-image:url(../flags/4x3/un.svg)}.flag-icon-un.flag-icon-squared{background-image:url(../flags/1x1/un.svg)}.flag-icon-xk{background-image:url(../flags/4x3/xk.svg)}.flag-icon-xk.flag-icon-squared{background-image:url(../flags/1x1/xk.svg)} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css deleted file mode 100644 index 530341299d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/pure.css +++ /dev/null @@ -1,232 +0,0 @@ -/*! -Pure v1.0.1 -Copyright 2013 Yahoo! -Licensed under the BSD License. -https://github.com/pure-css/pure/blob/master/LICENSE.md -*/ -.pure-g { - letter-spacing: -.31em; - text-rendering: optimizespeed; - font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-flow: row wrap; - -ms-flex-flow: row wrap; - flex-flow: row wrap; - -webkit-align-content: flex-start; - -ms-flex-line-pack: start; - align-content: flex-start -} - -@media all and (-ms-high-contrast:none), -(-ms-high-contrast:active) { - table .pure-g { - display: block - } -} - -.opera-only :-o-prefocus, -.pure-g { - word-spacing: -.43em -} - -.pure-u { - display: inline-block; - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto -} - -.pure-g [class*=pure-u] { - font-family: sans-serif -} - -.pure-u-1, -.pure-u-1-1, -.pure-u-1-12, -.pure-u-1-2, -.pure-u-1-24, -.pure-u-1-3, -.pure-u-1-4, -.pure-u-1-5, -.pure-u-1-6, -.pure-u-1-8, -.pure-u-10-24, -.pure-u-11-12, -.pure-u-11-24, -.pure-u-12-24, -.pure-u-13-24, -.pure-u-14-24, -.pure-u-15-24, -.pure-u-16-24, -.pure-u-17-24, -.pure-u-18-24, -.pure-u-19-24, -.pure-u-2-24, -.pure-u-2-3, -.pure-u-2-5, -.pure-u-20-24, -.pure-u-21-24, -.pure-u-22-24, -.pure-u-23-24, -.pure-u-24-24, -.pure-u-3-24, -.pure-u-3-4, -.pure-u-3-5, -.pure-u-3-8, -.pure-u-4-24, -.pure-u-4-5, -.pure-u-5-12, -.pure-u-5-24, -.pure-u-5-5, -.pure-u-5-6, -.pure-u-5-8, -.pure-u-6-24, -.pure-u-7-12, -.pure-u-7-24, -.pure-u-7-8, -.pure-u-8-24, -.pure-u-9-24 { - display: inline-block; - zoom: 1; - letter-spacing: normal; - word-spacing: normal; - vertical-align: top; - text-rendering: auto -} - -.pure-u-1-24 { - width: 4.1667% -} - -.pure-u-1-12, -.pure-u-2-24 { - width: 8.3333% -} - -.pure-u-1-8, -.pure-u-3-24 { - width: 12.5% -} - -.pure-u-1-6, -.pure-u-4-24 { - width: 16.6667% -} - -.pure-u-1-5 { - width: 20% -} - -.pure-u-5-24 { - width: 20.8333% -} - -.pure-u-1-4, -.pure-u-6-24 { - width: 25% -} - -.pure-u-7-24 { - width: 29.1667% -} - -.pure-u-1-3, -.pure-u-8-24 { - width: 33.3333% -} - -.pure-u-3-8, -.pure-u-9-24 { - width: 37.5% -} - -.pure-u-2-5 { - width: 40% -} - -.pure-u-10-24, -.pure-u-5-12 { - width: 41.6667% -} - -.pure-u-11-24 { - width: 45.8333% -} - -.pure-u-1-2, -.pure-u-12-24 { - width: 50% -} - -.pure-u-13-24 { - width: 54.1667% -} - -.pure-u-14-24, -.pure-u-7-12 { - width: 58.3333% -} - -.pure-u-3-5 { - width: 60% -} - -.pure-u-15-24, -.pure-u-5-8 { - width: 62.5% -} - -.pure-u-16-24, -.pure-u-2-3 { - width: 66.6667% -} - -.pure-u-17-24 { - width: 70.8333% -} - -.pure-u-18-24, -.pure-u-3-4 { - width: 75% -} - -.pure-u-19-24 { - width: 79.1667% -} - -.pure-u-4-5 { - width: 80% -} - -.pure-u-20-24, -.pure-u-5-6 { - width: 83.3333% -} - -.pure-u-21-24, -.pure-u-7-8 { - width: 87.5% -} - -.pure-u-11-12, -.pure-u-22-24 { - width: 91.6667% -} - -.pure-u-23-24 { - width: 95.8333% -} - -.pure-u-1, -.pure-u-1-1, -.pure-u-24-24, -.pure-u-5-5 { - width: 100% -} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/sweetalert2.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/sweetalert2.css deleted file mode 100644 index 3b8c2842fb..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/sweetalert2.css +++ /dev/null @@ -1,1462 +0,0 @@ -@charset "UTF-8"; -@-webkit-keyframes swal2-show { - 0% { - -webkit-transform: scale(0.7); - transform: scale(0.7); - } - 45% { - -webkit-transform: scale(1.05); - transform: scale(1.05); - } - 80% { - -webkit-transform: scale(0.95); - transform: scale(0.95); - } - 100% { - -webkit-transform: scale(1); - transform: scale(1); - } -} -@keyframes swal2-show { - 0% { - -webkit-transform: scale(0.7); - transform: scale(0.7); - } - 45% { - -webkit-transform: scale(1.05); - transform: scale(1.05); - } - 80% { - -webkit-transform: scale(0.95); - transform: scale(0.95); - } - 100% { - -webkit-transform: scale(1); - transform: scale(1); - } -} -@-webkit-keyframes swal2-hide { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; - } - 100% { - -webkit-transform: scale(0.5); - transform: scale(0.5); - opacity: 0; - } -} -@keyframes swal2-hide { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; - } - 100% { - -webkit-transform: scale(0.5); - transform: scale(0.5); - opacity: 0; - } -} -@-webkit-keyframes swal2-animate-success-line-tip { - 0% { - top: 1.1875em; - left: 0.0625em; - width: 0; - } - 54% { - top: 1.0625em; - left: 0.125em; - width: 0; - } - 70% { - top: 2.1875em; - left: -0.375em; - width: 3.125em; - } - 84% { - top: 3em; - left: 1.3125em; - width: 1.0625em; - } - 100% { - top: 2.8125em; - left: 0.875em; - width: 1.5625em; - } -} -@keyframes swal2-animate-success-line-tip { - 0% { - top: 1.1875em; - left: 0.0625em; - width: 0; - } - 54% { - top: 1.0625em; - left: 0.125em; - width: 0; - } - 70% { - top: 2.1875em; - left: -0.375em; - width: 3.125em; - } - 84% { - top: 3em; - left: 1.3125em; - width: 1.0625em; - } - 100% { - top: 2.8125em; - left: 0.875em; - width: 1.5625em; - } -} -@-webkit-keyframes swal2-animate-success-line-long { - 0% { - top: 3.375em; - right: 2.875em; - width: 0; - } - 65% { - top: 3.375em; - right: 2.875em; - width: 0; - } - 84% { - top: 2.1875em; - right: 0; - width: 3.4375em; - } - 100% { - top: 2.375em; - right: 0.5em; - width: 2.9375em; - } -} -@keyframes swal2-animate-success-line-long { - 0% { - top: 3.375em; - right: 2.875em; - width: 0; - } - 65% { - top: 3.375em; - right: 2.875em; - width: 0; - } - 84% { - top: 2.1875em; - right: 0; - width: 3.4375em; - } - 100% { - top: 2.375em; - right: 0.5em; - width: 2.9375em; - } -} -@-webkit-keyframes swal2-rotate-success-circular-line { - 0% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 5% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 12% { - -webkit-transform: rotate(-405deg); - transform: rotate(-405deg); - } - 100% { - -webkit-transform: rotate(-405deg); - transform: rotate(-405deg); - } -} -@keyframes swal2-rotate-success-circular-line { - 0% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 5% { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - } - 12% { - -webkit-transform: rotate(-405deg); - transform: rotate(-405deg); - } - 100% { - -webkit-transform: rotate(-405deg); - transform: rotate(-405deg); - } -} -@-webkit-keyframes swal2-animate-error-x-mark { - 0% { - margin-top: 1.625em; - -webkit-transform: scale(0.4); - transform: scale(0.4); - opacity: 0; - } - 50% { - margin-top: 1.625em; - -webkit-transform: scale(0.4); - transform: scale(0.4); - opacity: 0; - } - 80% { - margin-top: -0.375em; - -webkit-transform: scale(1.15); - transform: scale(1.15); - } - 100% { - margin-top: 0; - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; - } -} -@keyframes swal2-animate-error-x-mark { - 0% { - margin-top: 1.625em; - -webkit-transform: scale(0.4); - transform: scale(0.4); - opacity: 0; - } - 50% { - margin-top: 1.625em; - -webkit-transform: scale(0.4); - transform: scale(0.4); - opacity: 0; - } - 80% { - margin-top: -0.375em; - -webkit-transform: scale(1.15); - transform: scale(1.15); - } - 100% { - margin-top: 0; - -webkit-transform: scale(1); - transform: scale(1); - opacity: 1; - } -} -@-webkit-keyframes swal2-animate-error-icon { - 0% { - -webkit-transform: rotateX(100deg); - transform: rotateX(100deg); - opacity: 0; - } - 100% { - -webkit-transform: rotateX(0deg); - transform: rotateX(0deg); - opacity: 1; - } -} -@keyframes swal2-animate-error-icon { - 0% { - -webkit-transform: rotateX(100deg); - transform: rotateX(100deg); - opacity: 0; - } - 100% { - -webkit-transform: rotateX(0deg); - transform: rotateX(0deg); - opacity: 1; - } -} -body.swal2-toast-shown .swal2-container { - background-color: transparent; -} -body.swal2-toast-shown .swal2-container.swal2-shown { - background-color: transparent; -} -body.swal2-toast-shown .swal2-container.swal2-top { - top: 0; - right: auto; - bottom: auto; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} -body.swal2-toast-shown .swal2-container.swal2-top-end, body.swal2-toast-shown .swal2-container.swal2-top-right { - top: 0; - right: 0; - bottom: auto; - left: auto; -} -body.swal2-toast-shown .swal2-container.swal2-top-start, body.swal2-toast-shown .swal2-container.swal2-top-left { - top: 0; - right: auto; - bottom: auto; - left: 0; -} -body.swal2-toast-shown .swal2-container.swal2-center-start, body.swal2-toast-shown .swal2-container.swal2-center-left { - top: 50%; - right: auto; - bottom: auto; - left: 0; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} -body.swal2-toast-shown .swal2-container.swal2-center { - top: 50%; - right: auto; - bottom: auto; - left: 50%; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); -} -body.swal2-toast-shown .swal2-container.swal2-center-end, body.swal2-toast-shown .swal2-container.swal2-center-right { - top: 50%; - right: 0; - bottom: auto; - left: auto; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} -body.swal2-toast-shown .swal2-container.swal2-bottom-start, body.swal2-toast-shown .swal2-container.swal2-bottom-left { - top: auto; - right: auto; - bottom: 0; - left: 0; -} -body.swal2-toast-shown .swal2-container.swal2-bottom { - top: auto; - right: auto; - bottom: 0; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} -body.swal2-toast-shown .swal2-container.swal2-bottom-end, body.swal2-toast-shown .swal2-container.swal2-bottom-right { - top: auto; - right: 0; - bottom: 0; - left: auto; -} -body.swal2-toast-column .swal2-toast { - flex-direction: column; - align-items: stretch; -} -body.swal2-toast-column .swal2-toast .swal2-actions { - flex: 1; - align-self: stretch; - height: 2.2em; - margin-top: 0.3125em; -} -body.swal2-toast-column .swal2-toast .swal2-loading { - justify-content: center; -} -body.swal2-toast-column .swal2-toast .swal2-input { - height: 2em; - margin: 0.3125em auto; - font-size: 1em; -} -body.swal2-toast-column .swal2-toast .swal2-validation-message { - font-size: 1em; -} - -.swal2-popup.swal2-toast { - flex-direction: row; - align-items: center; - width: auto; - padding: 0.625em; - overflow-y: hidden; - box-shadow: 0 0 0.625em #d9d9d9; -} -.swal2-popup.swal2-toast .swal2-header { - flex-direction: row; -} -.swal2-popup.swal2-toast .swal2-title { - flex-grow: 1; - justify-content: flex-start; - margin: 0 0.6em; - font-size: 1em; -} -.swal2-popup.swal2-toast .swal2-footer { - margin: 0.5em 0 0; - padding: 0.5em 0 0; - font-size: 0.8em; -} -.swal2-popup.swal2-toast .swal2-close { - position: static; - width: 0.8em; - height: 0.8em; - line-height: 0.8; -} -.swal2-popup.swal2-toast .swal2-content { - justify-content: flex-start; - font-size: 1em; -} -.swal2-popup.swal2-toast .swal2-icon { - width: 2em; - min-width: 2em; - height: 2em; - margin: 0; -} -.swal2-popup.swal2-toast .swal2-icon::before { - display: flex; - align-items: center; - font-size: 2em; - font-weight: bold; -} -@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { - .swal2-popup.swal2-toast .swal2-icon::before { - font-size: 0.25em; - } -} -.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { - width: 2em; - height: 2em; -} -.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { - top: 0.875em; - width: 1.375em; -} -.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { - left: 0.3125em; -} -.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { - right: 0.3125em; -} -.swal2-popup.swal2-toast .swal2-actions { - flex-basis: auto !important; - height: auto; - margin: 0 0.3125em; -} -.swal2-popup.swal2-toast .swal2-styled { - margin: 0 0.3125em; - padding: 0.3125em 0.625em; - font-size: 1em; -} -.swal2-popup.swal2-toast .swal2-styled:focus { - box-shadow: 0 0 0 0.0625em #fff, 0 0 0 0.125em rgba(50, 100, 150, 0.4); -} -.swal2-popup.swal2-toast .swal2-success { - border-color: #a5dc86; -} -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { - position: absolute; - width: 1.6em; - height: 3em; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - border-radius: 50%; -} -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { - top: -0.8em; - left: -0.5em; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - -webkit-transform-origin: 2em 2em; - transform-origin: 2em 2em; - border-radius: 4em 0 0 4em; -} -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { - top: -0.25em; - left: 0.9375em; - -webkit-transform-origin: 0 1.5em; - transform-origin: 0 1.5em; - border-radius: 0 4em 4em 0; -} -.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { - width: 2em; - height: 2em; -} -.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { - top: 0; - left: 0.4375em; - width: 0.4375em; - height: 2.6875em; -} -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { - height: 0.3125em; -} -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { - top: 1.125em; - left: 0.1875em; - width: 0.75em; -} -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { - top: 0.9375em; - right: 0.1875em; - width: 1.375em; -} -.swal2-popup.swal2-toast.swal2-show { - -webkit-animation: swal2-toast-show 0.5s; - animation: swal2-toast-show 0.5s; -} -.swal2-popup.swal2-toast.swal2-hide { - -webkit-animation: swal2-toast-hide 0.1s forwards; - animation: swal2-toast-hide 0.1s forwards; -} -.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-tip { - -webkit-animation: swal2-toast-animate-success-line-tip 0.75s; - animation: swal2-toast-animate-success-line-tip 0.75s; -} -.swal2-popup.swal2-toast .swal2-animate-success-icon .swal2-success-line-long { - -webkit-animation: swal2-toast-animate-success-line-long 0.75s; - animation: swal2-toast-animate-success-line-long 0.75s; -} - -@-webkit-keyframes swal2-toast-show { - 0% { - -webkit-transform: translateY(-0.625em) rotateZ(2deg); - transform: translateY(-0.625em) rotateZ(2deg); - } - 33% { - -webkit-transform: translateY(0) rotateZ(-2deg); - transform: translateY(0) rotateZ(-2deg); - } - 66% { - -webkit-transform: translateY(0.3125em) rotateZ(2deg); - transform: translateY(0.3125em) rotateZ(2deg); - } - 100% { - -webkit-transform: translateY(0) rotateZ(0); - transform: translateY(0) rotateZ(0); - } -} - -@keyframes swal2-toast-show { - 0% { - -webkit-transform: translateY(-0.625em) rotateZ(2deg); - transform: translateY(-0.625em) rotateZ(2deg); - } - 33% { - -webkit-transform: translateY(0) rotateZ(-2deg); - transform: translateY(0) rotateZ(-2deg); - } - 66% { - -webkit-transform: translateY(0.3125em) rotateZ(2deg); - transform: translateY(0.3125em) rotateZ(2deg); - } - 100% { - -webkit-transform: translateY(0) rotateZ(0); - transform: translateY(0) rotateZ(0); - } -} -@-webkit-keyframes swal2-toast-hide { - 100% { - -webkit-transform: rotateZ(1deg); - transform: rotateZ(1deg); - opacity: 0; - } -} -@keyframes swal2-toast-hide { - 100% { - -webkit-transform: rotateZ(1deg); - transform: rotateZ(1deg); - opacity: 0; - } -} -@-webkit-keyframes swal2-toast-animate-success-line-tip { - 0% { - top: 0.5625em; - left: 0.0625em; - width: 0; - } - 54% { - top: 0.125em; - left: 0.125em; - width: 0; - } - 70% { - top: 0.625em; - left: -0.25em; - width: 1.625em; - } - 84% { - top: 1.0625em; - left: 0.75em; - width: 0.5em; - } - 100% { - top: 1.125em; - left: 0.1875em; - width: 0.75em; - } -} -@keyframes swal2-toast-animate-success-line-tip { - 0% { - top: 0.5625em; - left: 0.0625em; - width: 0; - } - 54% { - top: 0.125em; - left: 0.125em; - width: 0; - } - 70% { - top: 0.625em; - left: -0.25em; - width: 1.625em; - } - 84% { - top: 1.0625em; - left: 0.75em; - width: 0.5em; - } - 100% { - top: 1.125em; - left: 0.1875em; - width: 0.75em; - } -} -@-webkit-keyframes swal2-toast-animate-success-line-long { - 0% { - top: 1.625em; - right: 1.375em; - width: 0; - } - 65% { - top: 1.25em; - right: 0.9375em; - width: 0; - } - 84% { - top: 0.9375em; - right: 0; - width: 1.125em; - } - 100% { - top: 0.9375em; - right: 0.1875em; - width: 1.375em; - } -} -@keyframes swal2-toast-animate-success-line-long { - 0% { - top: 1.625em; - right: 1.375em; - width: 0; - } - 65% { - top: 1.25em; - right: 0.9375em; - width: 0; - } - 84% { - top: 0.9375em; - right: 0; - width: 1.125em; - } - 100% { - top: 0.9375em; - right: 0.1875em; - width: 1.375em; - } -} -body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { - overflow: hidden; -} -body.swal2-height-auto { - height: auto !important; -} -body.swal2-no-backdrop .swal2-shown { - top: auto; - right: auto; - bottom: auto; - left: auto; - max-width: calc(100% - 0.625em * 2); - background-color: transparent; -} -body.swal2-no-backdrop .swal2-shown > .swal2-modal { - box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); -} -body.swal2-no-backdrop .swal2-shown.swal2-top { - top: 0; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} -body.swal2-no-backdrop .swal2-shown.swal2-top-start, body.swal2-no-backdrop .swal2-shown.swal2-top-left { - top: 0; - left: 0; -} -body.swal2-no-backdrop .swal2-shown.swal2-top-end, body.swal2-no-backdrop .swal2-shown.swal2-top-right { - top: 0; - right: 0; -} -body.swal2-no-backdrop .swal2-shown.swal2-center { - top: 50%; - left: 50%; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); -} -body.swal2-no-backdrop .swal2-shown.swal2-center-start, body.swal2-no-backdrop .swal2-shown.swal2-center-left { - top: 50%; - left: 0; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} -body.swal2-no-backdrop .swal2-shown.swal2-center-end, body.swal2-no-backdrop .swal2-shown.swal2-center-right { - top: 50%; - right: 0; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); -} -body.swal2-no-backdrop .swal2-shown.swal2-bottom { - bottom: 0; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); -} -body.swal2-no-backdrop .swal2-shown.swal2-bottom-start, body.swal2-no-backdrop .swal2-shown.swal2-bottom-left { - bottom: 0; - left: 0; -} -body.swal2-no-backdrop .swal2-shown.swal2-bottom-end, body.swal2-no-backdrop .swal2-shown.swal2-bottom-right { - right: 0; - bottom: 0; -} - -.swal2-container { - display: flex; - position: fixed; - z-index: 1060; - top: 0; - right: 0; - bottom: 0; - left: 0; - flex-direction: row; - align-items: center; - justify-content: center; - padding: 0.625em; - overflow-x: hidden; - background-color: transparent; - -webkit-overflow-scrolling: touch; -} -.swal2-container.swal2-top { - align-items: flex-start; -} -.swal2-container.swal2-top-start, .swal2-container.swal2-top-left { - align-items: flex-start; - justify-content: flex-start; -} -.swal2-container.swal2-top-end, .swal2-container.swal2-top-right { - align-items: flex-start; - justify-content: flex-end; -} -.swal2-container.swal2-center { - align-items: center; -} -.swal2-container.swal2-center-start, .swal2-container.swal2-center-left { - align-items: center; - justify-content: flex-start; -} -.swal2-container.swal2-center-end, .swal2-container.swal2-center-right { - align-items: center; - justify-content: flex-end; -} -.swal2-container.swal2-bottom { - align-items: flex-end; -} -.swal2-container.swal2-bottom-start, .swal2-container.swal2-bottom-left { - align-items: flex-end; - justify-content: flex-start; -} -.swal2-container.swal2-bottom-end, .swal2-container.swal2-bottom-right { - align-items: flex-end; - justify-content: flex-end; -} -.swal2-container.swal2-bottom > :first-child, .swal2-container.swal2-bottom-start > :first-child, .swal2-container.swal2-bottom-left > :first-child, .swal2-container.swal2-bottom-end > :first-child, .swal2-container.swal2-bottom-right > :first-child { - margin-top: auto; -} -.swal2-container.swal2-grow-fullscreen > .swal2-modal { - display: flex !important; - flex: 1; - align-self: stretch; - justify-content: center; -} -.swal2-container.swal2-grow-row > .swal2-modal { - display: flex !important; - flex: 1; - align-content: center; - justify-content: center; -} -.swal2-container.swal2-grow-column { - flex: 1; - flex-direction: column; -} -.swal2-container.swal2-grow-column.swal2-top, .swal2-container.swal2-grow-column.swal2-center, .swal2-container.swal2-grow-column.swal2-bottom { - align-items: center; -} -.swal2-container.swal2-grow-column.swal2-top-start, .swal2-container.swal2-grow-column.swal2-center-start, .swal2-container.swal2-grow-column.swal2-bottom-start, .swal2-container.swal2-grow-column.swal2-top-left, .swal2-container.swal2-grow-column.swal2-center-left, .swal2-container.swal2-grow-column.swal2-bottom-left { - align-items: flex-start; -} -.swal2-container.swal2-grow-column.swal2-top-end, .swal2-container.swal2-grow-column.swal2-center-end, .swal2-container.swal2-grow-column.swal2-bottom-end, .swal2-container.swal2-grow-column.swal2-top-right, .swal2-container.swal2-grow-column.swal2-center-right, .swal2-container.swal2-grow-column.swal2-bottom-right { - align-items: flex-end; -} -.swal2-container.swal2-grow-column > .swal2-modal { - display: flex !important; - flex: 1; - align-content: center; - justify-content: center; -} -.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen) > .swal2-modal { - margin: auto; -} -@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { - .swal2-container .swal2-modal { - margin: 0 !important; - } -} -.swal2-container.swal2-fade { - transition: background-color 0.1s; -} -.swal2-container.swal2-shown { - background-color: rgba(0, 0, 0, 0.4); -} - -.swal2-popup { - display: none; - position: relative; - box-sizing: border-box; - flex-direction: column; - justify-content: center; - width: 26em; - max-width: 100%; - padding: 1.25em; - border: none; - border-radius: 0.3125em; - background: #fff; - font-family: inherit; - font-size: 1rem; -} -.swal2-popup:focus { - outline: none; -} -.swal2-popup.swal2-loading { - overflow-y: hidden; -} - -.swal2-header { - display: flex; - flex-direction: column; - align-items: center; -} - -.swal2-title { - position: relative; - max-width: 100%; - margin: 0 0 0.4em; - padding: 0; - color: #595959; - font-size: 1.2em; - font-weight: 600; - text-align: center; - text-transform: none; - word-wrap: break-word; -} - -.swal2-actions { - z-index: 1; - flex-wrap: wrap; - align-items: center; - justify-content: center; - width: 100%; - margin: 1.25em auto 0; -} -.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { - opacity: 0.4; -} -.swal2-actions:not(.swal2-loading) .swal2-styled:hover { - background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); -} -.swal2-actions:not(.swal2-loading) .swal2-styled:active { - background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); -} -.swal2-actions.swal2-loading .swal2-styled.swal2-confirm { - box-sizing: border-box; - width: 2.5em; - height: 2.5em; - margin: 0.46875em; - padding: 0; - -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; - animation: swal2-rotate-loading 1.5s linear 0s infinite normal; - border: 0.25em solid transparent; - border-radius: 100%; - border-color: transparent; - background-color: transparent !important; - color: transparent; - cursor: default; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.swal2-actions.swal2-loading .swal2-styled.swal2-cancel { - margin-right: 30px; - margin-left: 30px; -} -.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after { - content: ""; - display: inline-block; - width: 15px; - height: 15px; - margin-left: 5px; - -webkit-animation: swal2-rotate-loading 1.5s linear 0s infinite normal; - animation: swal2-rotate-loading 1.5s linear 0s infinite normal; - border: 3px solid #999999; - border-radius: 50%; - border-right-color: transparent; - box-shadow: 1px 1px 1px #fff; -} - -.swal2-styled { - margin: 0.3125em; - padding: 0.625em 2em; - box-shadow: none; - font-weight: 500; -} -.swal2-styled:not([disabled]) { - cursor: pointer; -} -.swal2-styled.swal2-confirm { - border: 0; - border-radius: 0.25em; - background: initial; - background-color: #f0ad4e; - color: #fff; - font-size: 1.0625em; -} -.swal2-styled.swal2-cancel { - border: 0; - border-radius: 0.25em; - background: initial; - background-color: #aaa; - color: #fff; - font-size: 1.0625em; -} -.swal2-styled:focus { - outline: none; - box-shadow: none; -} -.swal2-styled::-moz-focus-inner { - border: 0; -} - -.swal2-footer { - justify-content: center; - margin: 1.25em 0 0; - padding: 1em 0 0; - border-top: 1px solid #eee; - color: #545454; - font-size: 1em; -} - -.swal2-image { - max-width: 100%; - margin: 1.25em auto; -} - -.swal2-close { - position: absolute; - top: 0; - right: 0; - justify-content: center; - width: 1.2em; - height: 1.2em; - padding: 0; - overflow: hidden; - transition: color 0.1s ease-out; - border: none; - border-radius: 0; - outline: initial; - background: transparent; - color: #cccccc; - font-family: serif; - font-size: 2.5em; - line-height: 1.2; - cursor: pointer; -} -.swal2-close:hover { - -webkit-transform: none; - transform: none; - background: transparent; - color: #f27474; -} - -> .swal2-input, -> .swal2-file, -> .swal2-textarea, -> .swal2-select, -> .swal2-radio, -> .swal2-checkbox { - display: none; -} - -.swal2-content { - z-index: 1; - justify-content: center; - margin: 0; - padding: 0; - color: #545454; - font-size: 1.125em; - font-weight: 300; - line-height: normal; - word-wrap: break-word; -} - -#swal2-content { - text-align: center; -} - -.swal2-input, -.swal2-file, -.swal2-textarea, -.swal2-select, -.swal2-radio, -.swal2-checkbox { - margin: 1em auto; -} - -.swal2-input, -.swal2-file, -.swal2-textarea { - box-sizing: border-box; - width: 100%; - transition: border-color 0.3s, box-shadow 0.3s; - border: 1px solid #d9d9d9; - border-radius: 0.1875em; - background: inherit; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06); - color: inherit; - font-size: 1.125em; -} -.swal2-input.swal2-inputerror, -.swal2-file.swal2-inputerror, -.swal2-textarea.swal2-inputerror { - border-color: #f27474 !important; - box-shadow: 0 0 2px #f27474 !important; -} -.swal2-input:focus, -.swal2-file:focus, -.swal2-textarea:focus { - border: 1px solid #b4dbed; - outline: none; - box-shadow: 0 0 3px #c4e6f5; -} -.swal2-input::-webkit-input-placeholder, -.swal2-file::-webkit-input-placeholder, -.swal2-textarea::-webkit-input-placeholder { - color: #cccccc; -} -.swal2-input::-moz-placeholder, -.swal2-file::-moz-placeholder, -.swal2-textarea::-moz-placeholder { - color: #cccccc; -} -.swal2-input:-ms-input-placeholder, -.swal2-file:-ms-input-placeholder, -.swal2-textarea:-ms-input-placeholder { - color: #cccccc; -} -.swal2-input::-ms-input-placeholder, -.swal2-file::-ms-input-placeholder, -.swal2-textarea::-ms-input-placeholder { - color: #cccccc; -} -.swal2-input::placeholder, -.swal2-file::placeholder, -.swal2-textarea::placeholder { - color: #cccccc; -} - -.swal2-range { - margin: 1em auto; - background: inherit; -} -.swal2-range input { - width: 80%; -} -.swal2-range output { - width: 20%; - color: inherit; - font-weight: 600; - text-align: center; -} -.swal2-range input, -.swal2-range output { - height: 2.625em; - padding: 0; - font-size: 1.125em; - line-height: 2.625em; -} - -.swal2-input { - height: 2.625em; - padding: 0 0.75em; -} -.swal2-input[type=number] { - max-width: 10em; -} - -.swal2-file { - background: inherit; - font-size: 1.125em; -} - -.swal2-textarea { - height: 6.75em; - padding: 0.75em; -} - -.swal2-select { - min-width: 50%; - max-width: 100%; - padding: 0.375em 0.625em; - background: inherit; - color: inherit; - font-size: 1.125em; -} - -.swal2-radio, -.swal2-checkbox { - align-items: center; - justify-content: center; - background: inherit; - color: inherit; -} -.swal2-radio label, -.swal2-checkbox label { - margin: 0 0.6em; - font-size: 1.125em; -} -.swal2-radio input, -.swal2-checkbox input { - margin: 0 0.4em; -} - -.swal2-validation-message { - display: none; - align-items: center; - justify-content: center; - padding: 0.625em; - overflow: hidden; - background: #f0f0f0; - color: #666666; - font-size: 1em; - font-weight: 300; -} -.swal2-validation-message::before { - content: "!"; - display: inline-block; - width: 1.5em; - min-width: 1.5em; - height: 1.5em; - margin: 0 0.625em; - zoom: normal; - border-radius: 50%; - background-color: #f27474; - color: #fff; - font-weight: 600; - line-height: 1.5em; - text-align: center; -} - -@supports (-ms-accelerator: true) { - .swal2-range input { - width: 100% !important; - } - .swal2-range output { - display: none; - } -} -@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { - .swal2-range input { - width: 100% !important; - } - .swal2-range output { - display: none; - } -} -@-moz-document url-prefix() { - .swal2-close:focus { - outline: 2px solid rgba(50, 100, 150, 0.4); - } -} -.swal2-icon { - position: relative; - box-sizing: content-box; - justify-content: center; - width: 5em; - height: 5em; - margin: 1.25em auto 1.875em; - zoom: normal; - border: 0.25em solid transparent; - border-radius: 50%; - line-height: 5em; - cursor: default; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.swal2-icon::before { - display: flex; - align-items: center; - height: 92%; - font-size: 3.75em; -} -.swal2-icon.swal2-error { - border-color: #f27474; -} -.swal2-icon.swal2-error .swal2-x-mark { - position: relative; - flex-grow: 1; -} -.swal2-icon.swal2-error [class^=swal2-x-mark-line] { - display: block; - position: absolute; - top: 2.3125em; - width: 2.9375em; - height: 0.3125em; - border-radius: 0.125em; - background-color: #f27474; -} -.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { - left: 1.0625em; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} -.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { - right: 1em; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} -.swal2-icon.swal2-warning { - border-color: #facea8; - color: #f8bb86; -} -.swal2-icon.swal2-warning::before { - content: "!"; -} -.swal2-icon.swal2-info { - border-color: #9de0f6; - color: #3fc3ee; -} -.swal2-icon.swal2-info::before { - content: "i"; -} -.swal2-icon.swal2-question { - border-color: #c9dae1; - color: #87adbd; -} -.swal2-icon.swal2-question::before { - content: "?"; -} -.swal2-icon.swal2-question.swal2-arabic-question-mark::before { - content: "؟"; -} -.swal2-icon.swal2-success { - border-color: #a5dc86; -} -.swal2-icon.swal2-success [class^=swal2-success-circular-line] { - position: absolute; - width: 3.75em; - height: 7.5em; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - border-radius: 50%; -} -.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { - top: -0.4375em; - left: -2.0635em; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - -webkit-transform-origin: 3.75em 3.75em; - transform-origin: 3.75em 3.75em; - border-radius: 7.5em 0 0 7.5em; -} -.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { - top: -0.6875em; - left: 1.875em; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); - -webkit-transform-origin: 0 3.75em; - transform-origin: 0 3.75em; - border-radius: 0 7.5em 7.5em 0; -} -.swal2-icon.swal2-success .swal2-success-ring { - position: absolute; - z-index: 2; - top: -0.25em; - left: -0.25em; - box-sizing: content-box; - width: 100%; - height: 100%; - border: 0.25em solid rgba(165, 220, 134, 0.3); - border-radius: 50%; -} -.swal2-icon.swal2-success .swal2-success-fix { - position: absolute; - z-index: 1; - top: 0.5em; - left: 1.625em; - width: 0.4375em; - height: 5.625em; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} -.swal2-icon.swal2-success [class^=swal2-success-line] { - display: block; - position: absolute; - z-index: 2; - height: 0.3125em; - border-radius: 0.125em; - background-color: #a5dc86; -} -.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { - top: 2.875em; - left: 0.875em; - width: 1.5625em; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} -.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { - top: 2.375em; - right: 0.5em; - width: 2.9375em; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} - -.swal2-progress-steps { - align-items: center; - margin: 0 0 1.25em; - padding: 0; - background: inherit; - font-weight: 600; -} -.swal2-progress-steps li { - display: inline-block; - position: relative; -} -.swal2-progress-steps .swal2-progress-step { - z-index: 20; - width: 2em; - height: 2em; - border-radius: 2em; - background: #3085d6; - color: #fff; - line-height: 2em; - text-align: center; -} -.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { - background: #3085d6; -} -.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step { - background: #add8e6; - color: #fff; -} -.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { - background: #add8e6; -} -.swal2-progress-steps .swal2-progress-step-line { - z-index: 10; - width: 2.5em; - height: 0.4em; - margin: 0 -1px; - background: #3085d6; -} - -[class^=swal2] { - -webkit-tap-highlight-color: transparent; -} - -.swal2-show { - -webkit-animation: swal2-show 0.3s; - animation: swal2-show 0.3s; -} -.swal2-show.swal2-noanimation { - -webkit-animation: none; - animation: none; -} - -.swal2-hide { - -webkit-animation: swal2-hide 0.15s forwards; - animation: swal2-hide 0.15s forwards; -} -.swal2-hide.swal2-noanimation { - -webkit-animation: none; - animation: none; -} - -.swal2-rtl .swal2-close { - right: auto; - left: 0; -} - -.swal2-animate-success-icon .swal2-success-line-tip { - -webkit-animation: swal2-animate-success-line-tip 0.75s; - animation: swal2-animate-success-line-tip 0.75s; -} -.swal2-animate-success-icon .swal2-success-line-long { - -webkit-animation: swal2-animate-success-line-long 0.75s; - animation: swal2-animate-success-line-long 0.75s; -} -.swal2-animate-success-icon .swal2-success-circular-line-right { - -webkit-animation: swal2-rotate-success-circular-line 4.25s ease-in; - animation: swal2-rotate-success-circular-line 4.25s ease-in; -} - -.swal2-animate-error-icon { - -webkit-animation: swal2-animate-error-icon 0.5s; - animation: swal2-animate-error-icon 0.5s; -} -.swal2-animate-error-icon .swal2-x-mark { - -webkit-animation: swal2-animate-error-x-mark 0.5s; - animation: swal2-animate-error-x-mark 0.5s; -} - -@-webkit-keyframes swal2-rotate-loading { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes swal2-rotate-loading { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@media print { - body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { - overflow-y: scroll !important; - } - body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) > [aria-hidden=true] { - display: none; - } - body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { - position: static !important; - } -} - - @media (prefers-color-scheme: dark) { - .swal2-popup{ - background:#1e1e1e; - } - .swal2-title{ - color: #ccc !important; - background: transparent !important; - } - .swal2-styled.swal2-confirm{ - background-color:darkorange; - } - } \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css deleted file mode 100644 index 3fa5140974..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/css/vssr.css +++ /dev/null @@ -1,577 +0,0 @@ -@import url("flag-icon.min.css?v=1.16"); -@import url("sweetalert2.css?v=1.16"); -@import url("pure.css?v=1.16"); - -/** Common **/ -.pure-img { - max-height: 100%; - width: auto; -} - -.pure-imgw { - max-width: 100%; - height: auto; -} - -.pure-u-5-8 { - display: flex; - align-items: center; - -} - -.gap { - margin-right: 0.5rem; -} - - -/** 复写theme **/ - -.cbi-section { - - border: 0; - border-radius: .375rem; - - overflow-x: auto; - overflow-y: hidden; -} - -.cbi-section-node { - - border: 0; - border-radius: .375rem; - margin-bottom: 0px; - overflow-x: auto; - overflow-y: hidden; - padding: 0rem 0; -} - -#cbi-vssr { - overflow-x: hidden; -} - -#cbi-vssr .panel-title { - width: 100%; - display: block; - margin-bottom: 0; - padding: .8755rem 1.5rem; - - margin-bottom: 0rem; - letter-spacing: .1rem; - - font-weight: 600; - box-sizing: border-box; -} - -/** Top StatusBar **/ -.status { - margin: 0.5rem -0.5rem 1rem -0.5rem; -} - -.status .block { - margin: 0.5rem 0.5rem; - padding: 0; - font-weight: normal; - font-style: normal; - line-height: 1; - font-family: inherit; - min-width: inherit; - overflow-x: auto; - overflow-y: hidden; - border: 1px solid rgba(0, 0, 0, .05); - border-radius: .375rem; - background-color: #fff; - box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15); -} - -.status .block .img-con { - margin: 1rem; - -} - -.status .block .green { - font-size: 1.25rem; - color: #2dce89; -} - -.status .block .red { - font-size: 1.25rem; - color: #fb6340; -} - -.status .block img { - width: 48px; - height: auto; - float: right; -} - -.status .block h4 { - font-size: .8125rem; - font-weight: 600; - margin: 1rem; - color: #8898aa !important; - line-height: 1.8em; -} - -/** Server List **/ - -.p-in5 { - margin: 8px !important; -} - -.cbi-section-table-row { - position: relative; - background-color: #edf3f8; - margin: 10px !important; - padding: 8px 15px 8px 70px; - box-shadow: 0 0 5px 0 rgba(136, 152, 170, .75); - border-radius: .5rem; - border: 0; - color: #525f7f; - text-align: left; - line-height: 1.7em; - overflow: hidden; - letter-spacing: normal; - -} - -.cbi-section-table-row:hover { - background: #fff; - -} - -.cbi-section-table-row.fast { - background: #5e72e4; - color: #fff; -} - -.ssr-button:link, -.ssr-button:hover, -.ssr-button:focus, -.ssr-button:visited, -.ssr-button:active { - - outline: 0; - text-decoration: none; - box-shadow: none; -} - -.cbi-section-table-row.fast .ssr-button { - color: #fff; -} - -.cbi-section-table-row.fast .ssr-button:hover, -.cbi-section-table-row.fast .ssr-button:focus, -.cbi-section-table-row.fast .ssr-button:active { - color: #fff; - outline: 0; - text-decoration: none; - box-shadow: none; -} - -.cbi-section-table-row.fast .host_con { - color: #fff !important; -} - -.host_con { - position: absolute; - left: 0; - width: 70px; - text-align: left; - height: 22px; - font-weight: bold; -} - -.host_con.fast { - color: #6f9a37; -} - -.host_con.nopass { - color: #dc3545; -} - -.host_con.middle { - color: #fbc658; -} - -.host_con.slow { - color: #fb6340; -} - -.host_ok { - color: #fff; - background: #2dce89; - padding: 0.1rem 0.5rem; - border-radius: 0.2rem; -} - -.host_error { - color: #fff; - background: #f5365c; - padding: 0.1rem 0.5rem; - border-radius: 0.2rem; -} - -.loadings.hide { - opacity: 0; - visibility: hidden; - pointer-events: none; -} - -.loadings span { - animation: anim-rotate 2s infinite linear; - height: 30px; -} - -.flag-icon:before { - position: absolute; -} - -.alias { - margin-bottom: 1px; - padding-left: 0px; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} - -.incon { - cursor: pointer; - position: absolute; - left: 0; - top: 0; - width: 64px; - height: 100%; - border: 0; - border-right: #d1dfed 1px solid; - background-position: top; -} - -.incon .pure-imgw { - transition: all 0.2s; -} - -.incon .tp { - position: absolute; - left: 0; - bottom: 0; - height: 25%; - width: 100%; - text-align: center; - font-size: 12px; - line-height: 15px; - color: #fff; - background: #525f7f; -} - - -.cbi-section-table-cell { - text-align: right; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - position: relative; -} - -.ssr-button { - background: none; - border: none; - color: #525f7f; - padding: 0 0.2rem 0 0; - height: auto; - line-height: 1.5em; - box-shadow: none; -} - -.ssr-button:hover, -.ssr-button:focus, -.ssr-button:active { - - outline: 0; - text-decoration: none; - box-shadow: none; -} - -.cbi-section h3 { - margin-left: 10px; - margin-top: 1rem; -} - -.cbi-button-check { - color: #fff !important; - background-color: #337ab7 !important; - border-color: #2e6da4 !important; - background-image: none; - float: right; - margin-right: 18px; - margin-top: .25rem !important; - outline: none; -} - -.cbi-button-check:focus { - outline: none; -} - -/** Bottom StatusBar **/ - -footer.mobile-hide { - display: block; -} - -.mar-10 { - margin-left: 50px; - margin-right: 10px; -} - -.status-bar { - position: fixed; - bottom: 0; - right: 0; - box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .3); - color: #525f7f; - background: #fff; - z-index: 5; - box-sizing: border-box; -} - -.status-bar .inner { - margin: 1em; -} - -.status-bar .inner .flag { - height: 3em; - display: block; - float: left; - margin-right: 1em; -} - -.status-bar .inner .status-info { - font-weight: bold; - line-height: 1.5em; -} - -.status-bar .icon-con { - height: 3em; - text-align: right; -} - -/** Node choose panel **/ - -.choose_node .gap { - margin: 0.5rem 1rem; - position: relative; -} - -.choose_node .gap .cbi-button { - width: 100% !important; -} - - -/** Subscribe panel **/ - -.modals-bg { - position: fixed; - z-index: 999; - width: 100%; - height: 100%; - left: 0; - top: 0; - background: rgba(255, 255, 255, 0.8); - transition: all 0.2s; -} - -.modals-bg.hide { - visibility: hidden; - opacity: 0; -} - -.modals { - position: fixed; - z-index: 100; - width: 60%; - height: 500px; - background: #172b4d; - left: 20%; - top: 15%; - color: #fff; - border-radius: 10px; - padding: 20px; - - box-sizing: border-box; - -moz-box-sizing: border-box; - /* Firefox */ - -webkit-box-sizing: border-box; - /* Safari */ - transition: all 0.3s ease-in-out; - transform: scale(1); -} - -.modals.hide { - visibility: hidden; - opacity: 0; - transform: scale(0.5); -} - -.modals h2 { - padding: 0 !important; - background-color: transparent !important; - color: #fff !important; - margin-bottom: 0.5em !important; -} - -.modals h3 { - font-size: 14px; - color: #f5365c !important; - background: transparent; - margin: 0; - padding: 0; -} - -#log_content3 { - border: 0; - width: 99%; - height: calc(100% - 4rem); - font-family: 'Lucida Console'; - font-size: 11px; - line-height: 1.5em; - background: transparent; - color: #FFFFFF; - outline: none; - margin-top: 10px; - padding-left: 3px; - padding-right: 22px; - overflow: hidden -} - -@media screen and (max-width: 2000px) { - .pure-u-1-5 { - width: 25%; - } -} - -@media screen and (max-width: 1600px) { - .pure-u-1-5 { - width: 33.33333333%; - } -} - -@media screen and (max-width: 1200px) { - .pure-u-1-5 { - width: 50%; - } - - .status .pure-u-1-5 { - width: 33.333%; - } - - .modals { - position: fixed; - z-index: 100; - width: 80%; - height: 500px; - background: #172b4d; - left: 10%; - top: 15%; - color: #fff; - border-radius: 10px; - padding: 20px; - } -} - -@media screen and (max-width: 700px) { - .pure-u-1-4 { - width: 50%; - } - - .pure-u-1-2 { - width: 100%; - } - - .pure-u-1-5 { - width: 100%; - font-size: 14px; - } - - .status .pure-u-1-5 { - width: 50%; - } - - .cbi-button-add { - position: fixed; - padding: 0.3rem 0.5rem; - z-index: 1000; - width: 50px !important; - height: 50px !important; - bottom: 90px; - color: #fff; - right: 5px; - font-size: 16px; - border-radius: 50%; - display: block; - background-color: #fb6340 !important; - border-color: #fb6340 !important; - box-shadow: 0 0 1rem 0 rgba(136, 152, 170, .75); - background-image: none; - } - - .choose_node .pure-u-1-2 { - width: 50%; - } - - .modals-bg { - position: fixed; - z-index: 100000; - } - - .modals { - width: 100%; - height: 100%; - left: 0; - top: 0; - } - - .status-bar .pure-u-1-2 { - width: 50%; - } - - .status-bar .inner .flag { - height: 3em; - display: block; - float: left; - margin-right: 1em; - } - - .status-bar .icon-con { - height: 2.5em; - text-align: right; - } - - .p-in5 { - padding-bottom: 3rem; - } - - .cbi-page-actions { - padding-bottom: 4rem !important; - } -} - -@media (prefers-color-scheme: dark) { - .block { - background-color: #3c3c3c !important; - box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.35); - } - - .cbi-section-table-row { - color: #ccc; - background-color: #3c3c3c !important; - box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.35); - } - - .incon:nth-child(2) { - border-right: #1e1e1e 1px solid; - } - - .ssr-button { - color: #ccc; - } - -} \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji.js b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji.js deleted file mode 100644 index e113cc19e8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji.js +++ /dev/null @@ -1,129 +0,0 @@ - -var Emoji = { - - reg: /\u0023\ufe0f\u20e3|\u002a\ufe0f\u20e3|\u0030\ufe0f\u20e3|\u0031\ufe0f\u20e3|\u0032\ufe0f\u20e3|\u0033\ufe0f\u20e3|\u0034\ufe0f\u20e3|\u0035\ufe0f\u20e3|\u0036\ufe0f\u20e3|\u0037\ufe0f\u20e3|\u0038\ufe0f\u20e3|\u0039\ufe0f\u20e3|\u00a9\ufe0f|\u00ae\ufe0f|\ud83c\udc04|\ud83c\udccf|\ud83c\udd70\ufe0f|\ud83c\udd71\ufe0f|\ud83c\udd7e\ufe0f|\ud83c\udd7f\ufe0f|\ud83c\udd8e|\ud83c\udd91|\ud83c\udd92|\ud83c\udd93|\ud83c\udd94|\ud83c\udd95|\ud83c\udd96|\ud83c\udd97|\ud83c\udd98|\ud83c\udd99|\ud83c\udd9a|\ud83c\udde6\ud83c\udde8|\ud83c\udde6\ud83c\udde9|\ud83c\udde6\ud83c\uddea|\ud83c\udde6\ud83c\uddeb|\ud83c\udde6\ud83c\uddec|\ud83c\udde6\ud83c\uddee|\ud83c\udde6\ud83c\uddf1|\ud83c\udde6\ud83c\uddf2|\ud83c\udde6\ud83c\uddf4|\ud83c\udde6\ud83c\uddf6|\ud83c\udde6\ud83c\uddf7|\ud83c\udde6\ud83c\uddf8|\ud83c\udde6\ud83c\uddf9|\ud83c\udde6\ud83c\uddfa|\ud83c\udde6\ud83c\uddfc|\ud83c\udde6\ud83c\uddfd|\ud83c\udde6\ud83c\uddff|\ud83c\udde7\ud83c\udde6|\ud83c\udde7\ud83c\udde7|\ud83c\udde7\ud83c\udde9|\ud83c\udde7\ud83c\uddea|\ud83c\udde7\ud83c\uddeb|\ud83c\udde7\ud83c\uddec|\ud83c\udde7\ud83c\udded|\ud83c\udde7\ud83c\uddee|\ud83c\udde7\ud83c\uddef|\ud83c\udde7\ud83c\uddf1|\ud83c\udde7\ud83c\uddf2|\ud83c\udde7\ud83c\uddf3|\ud83c\udde7\ud83c\uddf4|\ud83c\udde7\ud83c\uddf6|\ud83c\udde7\ud83c\uddf7|\ud83c\udde7\ud83c\uddf8|\ud83c\udde7\ud83c\uddf9|\ud83c\udde7\ud83c\uddfb|\ud83c\udde7\ud83c\uddfc|\ud83c\udde7\ud83c\uddfe|\ud83c\udde7\ud83c\uddff|\ud83c\udde8\ud83c\udde6|\ud83c\udde8\ud83c\udde8|\ud83c\udde8\ud83c\udde9|\ud83c\udde8\ud83c\uddeb|\ud83c\udde8\ud83c\uddec|\ud83c\udde8\ud83c\udded|\ud83c\udde8\ud83c\uddee|\ud83c\udde8\ud83c\uddf0|\ud83c\udde8\ud83c\uddf1|\ud83c\udde8\ud83c\uddf2|\ud83c\udde8\ud83c\uddf3|\ud83c\udde8\ud83c\uddf4|\ud83c\udde8\ud83c\uddf5|\ud83c\udde8\ud83c\uddf7|\ud83c\udde8\ud83c\uddfa|\ud83c\udde8\ud83c\uddfb|\ud83c\udde8\ud83c\uddfc|\ud83c\udde8\ud83c\uddfd|\ud83c\udde8\ud83c\uddfe|\ud83c\udde8\ud83c\uddff|\ud83c\udde9\ud83c\uddea|\ud83c\udde9\ud83c\uddec|\ud83c\udde9\ud83c\uddef|\ud83c\udde9\ud83c\uddf0|\ud83c\udde9\ud83c\uddf2|\ud83c\udde9\ud83c\uddf4|\ud83c\udde9\ud83c\uddff|\ud83c\uddea\ud83c\udde6|\ud83c\uddea\ud83c\udde8|\ud83c\uddea\ud83c\uddea|\ud83c\uddea\ud83c\uddec|\ud83c\uddea\ud83c\udded|\ud83c\uddea\ud83c\uddf7|\ud83c\uddea\ud83c\uddf8|\ud83c\uddea\ud83c\uddf9|\ud83c\uddea\ud83c\uddfa|\ud83c\uddeb\ud83c\uddee|\ud83c\uddeb\ud83c\uddef|\ud83c\uddeb\ud83c\uddf0|\ud83c\uddeb\ud83c\uddf2|\ud83c\uddeb\ud83c\uddf4|\ud83c\uddeb\ud83c\uddf7|\ud83c\uddec\ud83c\udde6|\ud83c\uddec\ud83c\udde7|\ud83c\uddec\ud83c\udde9|\ud83c\uddec\ud83c\uddea|\ud83c\uddec\ud83c\uddeb|\ud83c\uddec\ud83c\uddec|\ud83c\uddec\ud83c\udded|\ud83c\uddec\ud83c\uddee|\ud83c\uddec\ud83c\uddf1|\ud83c\uddec\ud83c\uddf2|\ud83c\uddec\ud83c\uddf3|\ud83c\uddec\ud83c\uddf5|\ud83c\uddec\ud83c\uddf6|\ud83c\uddec\ud83c\uddf7|\ud83c\uddec\ud83c\uddf8|\ud83c\uddec\ud83c\uddf9|\ud83c\uddec\ud83c\uddfa|\ud83c\uddec\ud83c\uddfc|\ud83c\uddec\ud83c\uddfe|\ud83c\udded\ud83c\uddf0|\ud83c\udded\ud83c\uddf2|\ud83c\udded\ud83c\uddf3|\ud83c\udded\ud83c\uddf7|\ud83c\udded\ud83c\uddf9|\ud83c\udded\ud83c\uddfa|\ud83c\uddee\ud83c\udde8|\ud83c\uddee\ud83c\udde9|\ud83c\uddee\ud83c\uddea|\ud83c\uddee\ud83c\uddf1|\ud83c\uddee\ud83c\uddf2|\ud83c\uddee\ud83c\uddf3|\ud83c\uddee\ud83c\uddf4|\ud83c\uddee\ud83c\uddf6|\ud83c\uddee\ud83c\uddf7|\ud83c\uddee\ud83c\uddf8|\ud83c\uddee\ud83c\uddf9|\ud83c\uddef\ud83c\uddea|\ud83c\uddef\ud83c\uddf2|\ud83c\uddef\ud83c\uddf4|\ud83c\uddef\ud83c\uddf5|\ud83c\uddf0\ud83c\uddea|\ud83c\uddf0\ud83c\uddec|\ud83c\uddf0\ud83c\udded|\ud83c\uddf0\ud83c\uddee|\ud83c\uddf0\ud83c\uddf2|\ud83c\uddf0\ud83c\uddf3|\ud83c\uddf0\ud83c\uddf5|\ud83c\uddf0\ud83c\uddf7|\ud83c\uddf0\ud83c\uddfc|\ud83c\uddf0\ud83c\uddfe|\ud83c\uddf0\ud83c\uddff|\ud83c\uddf1\ud83c\udde6|\ud83c\uddf1\ud83c\udde7|\ud83c\uddf1\ud83c\udde8|\ud83c\uddf1\ud83c\uddee|\ud83c\uddf1\ud83c\uddf0|\ud83c\uddf1\ud83c\uddf7|\ud83c\uddf1\ud83c\uddf8|\ud83c\uddf1\ud83c\uddf9|\ud83c\uddf1\ud83c\uddfa|\ud83c\uddf1\ud83c\uddfb|\ud83c\uddf1\ud83c\uddfe|\ud83c\uddf2\ud83c\udde6|\ud83c\uddf2\ud83c\udde8|\ud83c\uddf2\ud83c\udde9|\ud83c\uddf2\ud83c\uddea|\ud83c\uddf2\ud83c\uddeb|\ud83c\uddf2\ud83c\uddec|\ud83c\uddf2\ud83c\udded|\ud83c\uddf2\ud83c\uddf0|\ud83c\uddf2\ud83c\uddf1|\ud83c\uddf2\ud83c\uddf2|\ud83c\uddf2\ud83c\uddf3|\ud83c\uddf2\ud83c\uddf4|\ud83c\uddf2\ud83c\uddf5|\ud83c\uddf2\ud83c\uddf6|\ud83c\uddf2\ud83c\uddf7|\ud83c\uddf2\ud83c\uddf8|\ud83c\uddf2\ud83c\uddf9|\ud83c\uddf2\ud83c\uddfa|\ud83c\uddf2\ud83c\uddfb|\ud83c\uddf2\ud83c\uddfc|\ud83c\uddf2\ud83c\uddfd|\ud83c\uddf2\ud83c\uddfe|\ud83c\uddf2\ud83c\uddff|\ud83c\uddf3\ud83c\udde6|\ud83c\uddf3\ud83c\udde8|\ud83c\uddf3\ud83c\uddea|\ud83c\uddf3\ud83c\uddeb|\ud83c\uddf3\ud83c\uddec|\ud83c\uddf3\ud83c\uddee|\ud83c\uddf3\ud83c\uddf1|\ud83c\uddf3\ud83c\uddf4|\ud83c\uddf3\ud83c\uddf5|\ud83c\uddf3\ud83c\uddf7|\ud83c\uddf3\ud83c\uddfa|\ud83c\uddf3\ud83c\uddff|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c\udde6|\ud83c\uddf5\ud83c\uddea|\ud83c\uddf5\ud83c\uddeb|\ud83c\uddf5\ud83c\uddec|\ud83c\uddf5\ud83c\udded|\ud83c\uddf5\ud83c\uddf0|\ud83c\uddf5\ud83c\uddf1|\ud83c\uddf5\ud83c\uddf2|\ud83c\uddf5\ud83c\uddf3|\ud83c\uddf5\ud83c\uddf7|\ud83c\uddf5\ud83c\uddf8|\ud83c\uddf5\ud83c\uddf9|\ud83c\uddf5\ud83c\uddfc|\ud83c\uddf5\ud83c\uddfe|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c\uddea|\ud83c\uddf7\ud83c\uddf4|\ud83c\uddf7\ud83c\uddf8|\ud83c\uddf7\ud83c\uddfa|\ud83c\uddf7\ud83c\uddfc|\ud83c\uddf8\ud83c\udde6|\ud83c\uddf8\ud83c\udde7|\ud83c\uddf8\ud83c\udde8|\ud83c\uddf8\ud83c\udde9|\ud83c\uddf8\ud83c\uddea|\ud83c\uddf8\ud83c\uddec|\ud83c\uddf8\ud83c\udded|\ud83c\uddf8\ud83c\uddee|\ud83c\uddf8\ud83c\uddef|\ud83c\uddf8\ud83c\uddf0|\ud83c\uddf8\ud83c\uddf1|\ud83c\uddf8\ud83c\uddf2|\ud83c\uddf8\ud83c\uddf3|\ud83c\uddf8\ud83c\uddf4|\ud83c\uddf8\ud83c\uddf7|\ud83c\uddf8\ud83c\uddf8|\ud83c\uddf8\ud83c\uddf9|\ud83c\uddf8\ud83c\uddfb|\ud83c\uddf8\ud83c\uddfd|\ud83c\uddf8\ud83c\uddfe|\ud83c\uddf8\ud83c\uddff|\ud83c\uddf9\ud83c\udde6|\ud83c\uddf9\ud83c\udde8|\ud83c\uddf9\ud83c\udde9|\ud83c\uddf9\ud83c\uddeb|\ud83c\uddf9\ud83c\uddec|\ud83c\uddf9\ud83c\udded|\ud83c\uddf9\ud83c\uddef|\ud83c\uddf9\ud83c\uddf0|\ud83c\uddf9\ud83c\uddf1|\ud83c\uddf9\ud83c\uddf2|\ud83c\uddf9\ud83c\uddf3|\ud83c\uddf9\ud83c\uddf4|\ud83c\uddf9\ud83c\uddf7|\ud83c\uddf9\ud83c\uddf9|\ud83c\uddf9\ud83c\uddfb|\ud83c\uddf9\ud83c\uddfc|\ud83c\uddf9\ud83c\uddff|\ud83c\uddfa\ud83c\udde6|\ud83c\uddfa\ud83c\uddec|\ud83c\uddfa\ud83c\uddf2|\ud83c\uddfa\ud83c\uddf3|\ud83c\uddfa\ud83c\uddf8|\ud83c\uddfa\ud83c\uddfe|\ud83c\uddfa\ud83c\uddff|\ud83c\uddfb\ud83c\udde6|\ud83c\uddfb\ud83c\udde8|\ud83c\uddfb\ud83c\uddea|\ud83c\uddfb\ud83c\uddec|\ud83c\uddfb\ud83c\uddee|\ud83c\uddfb\ud83c\uddf3|\ud83c\uddfb\ud83c\uddfa|\ud83c\uddfc\ud83c\uddeb|\ud83c\uddfc\ud83c\uddf8|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c\uddea|\ud83c\uddfe\ud83c\uddf9|\ud83c\uddff\ud83c\udde6|\ud83c\uddff\ud83c\uddf2|\ud83c\uddff\ud83c\uddfc|\ud83c\ude01|\ud83c\ude02\ufe0f|\ud83c\ude1a|\ud83c\ude2f|\ud83c\ude32|\ud83c\ude33|\ud83c\ude34|\ud83c\ude35|\ud83c\ude36|\ud83c\ude37\ufe0f|\ud83c\ude38|\ud83c\ude39|\ud83c\ude3a|\ud83c\ude50|\ud83c\ude51|\ud83c\udf00|\ud83c\udf01|\ud83c\udf02|\ud83c\udf03|\ud83c\udf04|\ud83c\udf05|\ud83c\udf06|\ud83c\udf07|\ud83c\udf08|\ud83c\udf09|\ud83c\udf0a|\ud83c\udf0b|\ud83c\udf0c|\ud83c\udf0d|\ud83c\udf0e|\ud83c\udf0f|\ud83c\udf10|\ud83c\udf11|\ud83c\udf12|\ud83c\udf13|\ud83c\udf14|\ud83c\udf15|\ud83c\udf16|\ud83c\udf17|\ud83c\udf18|\ud83c\udf19|\ud83c\udf1a|\ud83c\udf1b|\ud83c\udf1c|\ud83c\udf1d|\ud83c\udf1e|\ud83c\udf1f|\ud83c\udf20|\ud83c\udf21\ufe0f|\ud83c\udf24\ufe0f|\ud83c\udf25\ufe0f|\ud83c\udf26\ufe0f|\ud83c\udf27\ufe0f|\ud83c\udf28\ufe0f|\ud83c\udf29\ufe0f|\ud83c\udf2a\ufe0f|\ud83c\udf2b\ufe0f|\ud83c\udf2c\ufe0f|\ud83c\udf2d|\ud83c\udf2e|\ud83c\udf2f|\ud83c\udf30|\ud83c\udf31|\ud83c\udf32|\ud83c\udf33|\ud83c\udf34|\ud83c\udf35|\ud83c\udf36\ufe0f|\ud83c\udf37|\ud83c\udf38|\ud83c\udf39|\ud83c\udf3a|\ud83c\udf3b|\ud83c\udf3c|\ud83c\udf3d|\ud83c\udf3e|\ud83c\udf3f|\ud83c\udf40|\ud83c\udf41|\ud83c\udf42|\ud83c\udf43|\ud83c\udf44|\ud83c\udf45|\ud83c\udf46|\ud83c\udf47|\ud83c\udf48|\ud83c\udf49|\ud83c\udf4a|\ud83c\udf4b|\ud83c\udf4c|\ud83c\udf4d|\ud83c\udf4e|\ud83c\udf4f|\ud83c\udf50|\ud83c\udf51|\ud83c\udf52|\ud83c\udf53|\ud83c\udf54|\ud83c\udf55|\ud83c\udf56|\ud83c\udf57|\ud83c\udf58|\ud83c\udf59|\ud83c\udf5a|\ud83c\udf5b|\ud83c\udf5c|\ud83c\udf5d|\ud83c\udf5e|\ud83c\udf5f|\ud83c\udf60|\ud83c\udf61|\ud83c\udf62|\ud83c\udf63|\ud83c\udf64|\ud83c\udf65|\ud83c\udf66|\ud83c\udf67|\ud83c\udf68|\ud83c\udf69|\ud83c\udf6a|\ud83c\udf6b|\ud83c\udf6c|\ud83c\udf6d|\ud83c\udf6e|\ud83c\udf6f|\ud83c\udf70|\ud83c\udf71|\ud83c\udf72|\ud83c\udf73|\ud83c\udf74|\ud83c\udf75|\ud83c\udf76|\ud83c\udf77|\ud83c\udf78|\ud83c\udf79|\ud83c\udf7a|\ud83c\udf7b|\ud83c\udf7c|\ud83c\udf7d\ufe0f|\ud83c\udf7e|\ud83c\udf7f|\ud83c\udf80|\ud83c\udf81|\ud83c\udf82|\ud83c\udf83|\ud83c\udf84|\ud83c\udf85\ud83c\udffb|\ud83c\udf85\ud83c\udffc|\ud83c\udf85\ud83c\udffd|\ud83c\udf85\ud83c\udffe|\ud83c\udf85\ud83c\udfff|\ud83c\udf85|\ud83c\udf86|\ud83c\udf87|\ud83c\udf88|\ud83c\udf89|\ud83c\udf8a|\ud83c\udf8b|\ud83c\udf8c|\ud83c\udf8d|\ud83c\udf8e|\ud83c\udf8f|\ud83c\udf90|\ud83c\udf91|\ud83c\udf92|\ud83c\udf93|\ud83c\udf96\ufe0f|\ud83c\udf97\ufe0f|\ud83c\udf99\ufe0f|\ud83c\udf9a\ufe0f|\ud83c\udf9b\ufe0f|\ud83c\udf9e\ufe0f|\ud83c\udf9f\ufe0f|\ud83c\udfa0|\ud83c\udfa1|\ud83c\udfa2|\ud83c\udfa3|\ud83c\udfa4|\ud83c\udfa5|\ud83c\udfa6|\ud83c\udfa7|\ud83c\udfa8|\ud83c\udfa9|\ud83c\udfaa|\ud83c\udfab|\ud83c\udfac|\ud83c\udfad|\ud83c\udfae|\ud83c\udfaf|\ud83c\udfb0|\ud83c\udfb1|\ud83c\udfb2|\ud83c\udfb3|\ud83c\udfb4|\ud83c\udfb5|\ud83c\udfb6|\ud83c\udfb7|\ud83c\udfb8|\ud83c\udfb9|\ud83c\udfba|\ud83c\udfbb|\ud83c\udfbc|\ud83c\udfbd|\ud83c\udfbe|\ud83c\udfbf|\ud83c\udfc0|\ud83c\udfc1|\ud83c\udfc2\ud83c\udffb|\ud83c\udfc2\ud83c\udffc|\ud83c\udfc2\ud83c\udffd|\ud83c\udfc2\ud83c\udffe|\ud83c\udfc2\ud83c\udfff|\ud83c\udfc2|\ud83c\udfc3\ud83c\udffb\u200d\u2640\ufe0f|\ud83c\udfc3\ud83c\udffc\u200d\u2640\ufe0f|\ud83c\udfc3\ud83c\udffd\u200d\u2640\ufe0f|\ud83c\udfc3\ud83c\udffe\u200d\u2640\ufe0f|\ud83c\udfc3\ud83c\udfff\u200d\u2640\ufe0f|\ud83c\udfc3\u200d\u2640\ufe0f|\ud83c\udfc3\ud83c\udffb\u200d\u2642\ufe0f|\ud83c\udfc3\ud83c\udffc\u200d\u2642\ufe0f|\ud83c\udfc3\ud83c\udffd\u200d\u2642\ufe0f|\ud83c\udfc3\ud83c\udffe\u200d\u2642\ufe0f|\ud83c\udfc3\ud83c\udfff\u200d\u2642\ufe0f|\ud83c\udfc3\u200d\u2642\ufe0f|\ud83c\udfc3\ud83c\udffb|\ud83c\udfc3\ud83c\udffc|\ud83c\udfc3\ud83c\udffd|\ud83c\udfc3\ud83c\udffe|\ud83c\udfc3\ud83c\udfff|\ud83c\udfc3|\ud83c\udfc4\ud83c\udffb\u200d\u2640\ufe0f|\ud83c\udfc4\ud83c\udffc\u200d\u2640\ufe0f|\ud83c\udfc4\ud83c\udffd\u200d\u2640\ufe0f|\ud83c\udfc4\ud83c\udffe\u200d\u2640\ufe0f|\ud83c\udfc4\ud83c\udfff\u200d\u2640\ufe0f|\ud83c\udfc4\u200d\u2640\ufe0f|\ud83c\udfc4\ud83c\udffb\u200d\u2642\ufe0f|\ud83c\udfc4\ud83c\udffc\u200d\u2642\ufe0f|\ud83c\udfc4\ud83c\udffd\u200d\u2642\ufe0f|\ud83c\udfc4\ud83c\udffe\u200d\u2642\ufe0f|\ud83c\udfc4\ud83c\udfff\u200d\u2642\ufe0f|\ud83c\udfc4\u200d\u2642\ufe0f|\ud83c\udfc4\ud83c\udffb|\ud83c\udfc4\ud83c\udffc|\ud83c\udfc4\ud83c\udffd|\ud83c\udfc4\ud83c\udffe|\ud83c\udfc4\ud83c\udfff|\ud83c\udfc4|\ud83c\udfc5|\ud83c\udfc6|\ud83c\udfc7\ud83c\udffb|\ud83c\udfc7\ud83c\udffc|\ud83c\udfc7\ud83c\udffd|\ud83c\udfc7\ud83c\udffe|\ud83c\udfc7\ud83c\udfff|\ud83c\udfc7|\ud83c\udfc8|\ud83c\udfc9|\ud83c\udfca\ud83c\udffb\u200d\u2640\ufe0f|\ud83c\udfca\ud83c\udffc\u200d\u2640\ufe0f|\ud83c\udfca\ud83c\udffd\u200d\u2640\ufe0f|\ud83c\udfca\ud83c\udffe\u200d\u2640\ufe0f|\ud83c\udfca\ud83c\udfff\u200d\u2640\ufe0f|\ud83c\udfca\u200d\u2640\ufe0f|\ud83c\udfca\ud83c\udffb\u200d\u2642\ufe0f|\ud83c\udfca\ud83c\udffc\u200d\u2642\ufe0f|\ud83c\udfca\ud83c\udffd\u200d\u2642\ufe0f|\ud83c\udfca\ud83c\udffe\u200d\u2642\ufe0f|\ud83c\udfca\ud83c\udfff\u200d\u2642\ufe0f|\ud83c\udfca\u200d\u2642\ufe0f|\ud83c\udfca\ud83c\udffb|\ud83c\udfca\ud83c\udffc|\ud83c\udfca\ud83c\udffd|\ud83c\udfca\ud83c\udffe|\ud83c\udfca\ud83c\udfff|\ud83c\udfca|\ud83c\udfcb\ud83c\udffb\u200d\u2640\ufe0f|\ud83c\udfcb\ud83c\udffc\u200d\u2640\ufe0f|\ud83c\udfcb\ud83c\udffd\u200d\u2640\ufe0f|\ud83c\udfcb\ud83c\udffe\u200d\u2640\ufe0f|\ud83c\udfcb\ud83c\udfff\u200d\u2640\ufe0f|\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f|\ud83c\udfcb\ud83c\udffb\u200d\u2642\ufe0f|\ud83c\udfcb\ud83c\udffc\u200d\u2642\ufe0f|\ud83c\udfcb\ud83c\udffd\u200d\u2642\ufe0f|\ud83c\udfcb\ud83c\udffe\u200d\u2642\ufe0f|\ud83c\udfcb\ud83c\udfff\u200d\u2642\ufe0f|\ud83c\udfcb\ufe0f\u200d\u2642\ufe0f|\ud83c\udfcb\ud83c\udffb|\ud83c\udfcb\ud83c\udffc|\ud83c\udfcb\ud83c\udffd|\ud83c\udfcb\ud83c\udffe|\ud83c\udfcb\ud83c\udfff|\ud83c\udfcb\ufe0f|\ud83c\udfcc\ud83c\udffb\u200d\u2640\ufe0f|\ud83c\udfcc\ud83c\udffc\u200d\u2640\ufe0f|\ud83c\udfcc\ud83c\udffd\u200d\u2640\ufe0f|\ud83c\udfcc\ud83c\udffe\u200d\u2640\ufe0f|\ud83c\udfcc\ud83c\udfff\u200d\u2640\ufe0f|\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f|\ud83c\udfcc\ud83c\udffb\u200d\u2642\ufe0f|\ud83c\udfcc\ud83c\udffc\u200d\u2642\ufe0f|\ud83c\udfcc\ud83c\udffd\u200d\u2642\ufe0f|\ud83c\udfcc\ud83c\udffe\u200d\u2642\ufe0f|\ud83c\udfcc\ud83c\udfff\u200d\u2642\ufe0f|\ud83c\udfcc\ufe0f\u200d\u2642\ufe0f|\ud83c\udfcc\ud83c\udffb|\ud83c\udfcc\ud83c\udffc|\ud83c\udfcc\ud83c\udffd|\ud83c\udfcc\ud83c\udffe|\ud83c\udfcc\ud83c\udfff|\ud83c\udfcc\ufe0f|\ud83c\udfcd\ufe0f|\ud83c\udfce\ufe0f|\ud83c\udfcf|\ud83c\udfd0|\ud83c\udfd1|\ud83c\udfd2|\ud83c\udfd3|\ud83c\udfd4\ufe0f|\ud83c\udfd5\ufe0f|\ud83c\udfd6\ufe0f|\ud83c\udfd7\ufe0f|\ud83c\udfd8\ufe0f|\ud83c\udfd9\ufe0f|\ud83c\udfda\ufe0f|\ud83c\udfdb\ufe0f|\ud83c\udfdc\ufe0f|\ud83c\udfdd\ufe0f|\ud83c\udfde\ufe0f|\ud83c\udfdf\ufe0f|\ud83c\udfe0|\ud83c\udfe1|\ud83c\udfe2|\ud83c\udfe3|\ud83c\udfe4|\ud83c\udfe5|\ud83c\udfe6|\ud83c\udfe7|\ud83c\udfe8|\ud83c\udfe9|\ud83c\udfea|\ud83c\udfeb|\ud83c\udfec|\ud83c\udfed|\ud83c\udfee|\ud83c\udfef|\ud83c\udff0|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff3\ufe0f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udff4|\ud83c\udff5\ufe0f|\ud83c\udff7\ufe0f|\ud83c\udff8|\ud83c\udff9|\ud83c\udffa|\ud83c\udffb|\ud83c\udffc|\ud83c\udffd|\ud83c\udffe|\ud83c\udfff|\ud83d\udc00|\ud83d\udc01|\ud83d\udc02|\ud83d\udc03|\ud83d\udc04|\ud83d\udc05|\ud83d\udc06|\ud83d\udc07|\ud83d\udc08|\ud83d\udc09|\ud83d\udc0a|\ud83d\udc0b|\ud83d\udc0c|\ud83d\udc0d|\ud83d\udc0e|\ud83d\udc0f|\ud83d\udc10|\ud83d\udc11|\ud83d\udc12|\ud83d\udc13|\ud83d\udc14|\ud83d\udc15|\ud83d\udc16|\ud83d\udc17|\ud83d\udc18|\ud83d\udc19|\ud83d\udc1a|\ud83d\udc1b|\ud83d\udc1c|\ud83d\udc1d|\ud83d\udc1e|\ud83d\udc1f|\ud83d\udc20|\ud83d\udc21|\ud83d\udc22|\ud83d\udc23|\ud83d\udc24|\ud83d\udc25|\ud83d\udc26|\ud83d\udc27|\ud83d\udc28|\ud83d\udc29|\ud83d\udc2a|\ud83d\udc2b|\ud83d\udc2c|\ud83d\udc2d|\ud83d\udc2e|\ud83d\udc2f|\ud83d\udc30|\ud83d\udc31|\ud83d\udc32|\ud83d\udc33|\ud83d\udc34|\ud83d\udc35|\ud83d\udc36|\ud83d\udc37|\ud83d\udc38|\ud83d\udc39|\ud83d\udc3a|\ud83d\udc3b|\ud83d\udc3c|\ud83d\udc3d|\ud83d\udc3e|\ud83d\udc3f\ufe0f|\ud83d\udc40|\ud83d\udc41\ufe0f\u200d\ud83d\udde8\ufe0f|\ud83d\udc41\ufe0f|\ud83d\udc42\ud83c\udffb|\ud83d\udc42\ud83c\udffc|\ud83d\udc42\ud83c\udffd|\ud83d\udc42\ud83c\udffe|\ud83d\udc42\ud83c\udfff|\ud83d\udc42|\ud83d\udc43\ud83c\udffb|\ud83d\udc43\ud83c\udffc|\ud83d\udc43\ud83c\udffd|\ud83d\udc43\ud83c\udffe|\ud83d\udc43\ud83c\udfff|\ud83d\udc43|\ud83d\udc44|\ud83d\udc45|\ud83d\udc46\ud83c\udffb|\ud83d\udc46\ud83c\udffc|\ud83d\udc46\ud83c\udffd|\ud83d\udc46\ud83c\udffe|\ud83d\udc46\ud83c\udfff|\ud83d\udc46|\ud83d\udc47\ud83c\udffb|\ud83d\udc47\ud83c\udffc|\ud83d\udc47\ud83c\udffd|\ud83d\udc47\ud83c\udffe|\ud83d\udc47\ud83c\udfff|\ud83d\udc47|\ud83d\udc48\ud83c\udffb|\ud83d\udc48\ud83c\udffc|\ud83d\udc48\ud83c\udffd|\ud83d\udc48\ud83c\udffe|\ud83d\udc48\ud83c\udfff|\ud83d\udc48|\ud83d\udc49\ud83c\udffb|\ud83d\udc49\ud83c\udffc|\ud83d\udc49\ud83c\udffd|\ud83d\udc49\ud83c\udffe|\ud83d\udc49\ud83c\udfff|\ud83d\udc49|\ud83d\udc4a\ud83c\udffb|\ud83d\udc4a\ud83c\udffc|\ud83d\udc4a\ud83c\udffd|\ud83d\udc4a\ud83c\udffe|\ud83d\udc4a\ud83c\udfff|\ud83d\udc4a|\ud83d\udc4b\ud83c\udffb|\ud83d\udc4b\ud83c\udffc|\ud83d\udc4b\ud83c\udffd|\ud83d\udc4b\ud83c\udffe|\ud83d\udc4b\ud83c\udfff|\ud83d\udc4b|\ud83d\udc4c\ud83c\udffb|\ud83d\udc4c\ud83c\udffc|\ud83d\udc4c\ud83c\udffd|\ud83d\udc4c\ud83c\udffe|\ud83d\udc4c\ud83c\udfff|\ud83d\udc4c|\ud83d\udc4d\ud83c\udffb|\ud83d\udc4d\ud83c\udffc|\ud83d\udc4d\ud83c\udffd|\ud83d\udc4d\ud83c\udffe|\ud83d\udc4d\ud83c\udfff|\ud83d\udc4d|\ud83d\udc4e\ud83c\udffb|\ud83d\udc4e\ud83c\udffc|\ud83d\udc4e\ud83c\udffd|\ud83d\udc4e\ud83c\udffe|\ud83d\udc4e\ud83c\udfff|\ud83d\udc4e|\ud83d\udc4f\ud83c\udffb|\ud83d\udc4f\ud83c\udffc|\ud83d\udc4f\ud83c\udffd|\ud83d\udc4f\ud83c\udffe|\ud83d\udc4f\ud83c\udfff|\ud83d\udc4f|\ud83d\udc50\ud83c\udffb|\ud83d\udc50\ud83c\udffc|\ud83d\udc50\ud83c\udffd|\ud83d\udc50\ud83c\udffe|\ud83d\udc50\ud83c\udfff|\ud83d\udc50|\ud83d\udc51|\ud83d\udc52|\ud83d\udc53|\ud83d\udc54|\ud83d\udc55|\ud83d\udc56|\ud83d\udc57|\ud83d\udc58|\ud83d\udc59|\ud83d\udc5a|\ud83d\udc5b|\ud83d\udc5c|\ud83d\udc5d|\ud83d\udc5e|\ud83d\udc5f|\ud83d\udc60|\ud83d\udc61|\ud83d\udc62|\ud83d\udc63|\ud83d\udc64|\ud83d\udc65|\ud83d\udc66\ud83c\udffb|\ud83d\udc66\ud83c\udffc|\ud83d\udc66\ud83c\udffd|\ud83d\udc66\ud83c\udffe|\ud83d\udc66\ud83c\udfff|\ud83d\udc66|\ud83d\udc67\ud83c\udffb|\ud83d\udc67\ud83c\udffc|\ud83d\udc67\ud83c\udffd|\ud83d\udc67\ud83c\udffe|\ud83d\udc67\ud83c\udfff|\ud83d\udc67|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udf3e|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udf3e|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udf3e|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udf3e|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udf3e|\ud83d\udc68\u200d\ud83c\udf3e|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udf73|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udf73|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udf73|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udf73|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udf73|\ud83d\udc68\u200d\ud83c\udf73|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udf93|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udf93|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udf93|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udf93|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udf93|\ud83d\udc68\u200d\ud83c\udf93|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udfa4|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udfa4|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udfa4|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udfa4|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udfa4|\ud83d\udc68\u200d\ud83c\udfa4|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udfa8|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udfa8|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udfa8|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udfa8|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udfa8|\ud83d\udc68\u200d\ud83c\udfa8|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udfeb|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udfeb|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udfeb|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udfeb|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udfeb|\ud83d\udc68\u200d\ud83c\udfeb|\ud83d\udc68\ud83c\udffb\u200d\ud83c\udfed|\ud83d\udc68\ud83c\udffc\u200d\ud83c\udfed|\ud83d\udc68\ud83c\udffd\u200d\ud83c\udfed|\ud83d\udc68\ud83c\udffe\u200d\ud83c\udfed|\ud83d\udc68\ud83c\udfff\u200d\ud83c\udfed|\ud83d\udc68\u200d\ud83c\udfed|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67|\ud83d\udc68\u200d\ud83d\udc67|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67|\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbb|\ud83d\udc68\ud83c\udffc\u200d\ud83d\udcbb|\ud83d\udc68\ud83c\udffd\u200d\ud83d\udcbb|\ud83d\udc68\ud83c\udffe\u200d\ud83d\udcbb|\ud83d\udc68\ud83c\udfff\u200d\ud83d\udcbb|\ud83d\udc68\u200d\ud83d\udcbb|\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbc|\ud83d\udc68\ud83c\udffc\u200d\ud83d\udcbc|\ud83d\udc68\ud83c\udffd\u200d\ud83d\udcbc|\ud83d\udc68\ud83c\udffe\u200d\ud83d\udcbc|\ud83d\udc68\ud83c\udfff\u200d\ud83d\udcbc|\ud83d\udc68\u200d\ud83d\udcbc|\ud83d\udc68\ud83c\udffb\u200d\ud83d\udd27|\ud83d\udc68\ud83c\udffc\u200d\ud83d\udd27|\ud83d\udc68\ud83c\udffd\u200d\ud83d\udd27|\ud83d\udc68\ud83c\udffe\u200d\ud83d\udd27|\ud83d\udc68\ud83c\udfff\u200d\ud83d\udd27|\ud83d\udc68\u200d\ud83d\udd27|\ud83d\udc68\ud83c\udffb\u200d\ud83d\udd2c|\ud83d\udc68\ud83c\udffc\u200d\ud83d\udd2c|\ud83d\udc68\ud83c\udffd\u200d\ud83d\udd2c|\ud83d\udc68\ud83c\udffe\u200d\ud83d\udd2c|\ud83d\udc68\ud83c\udfff\u200d\ud83d\udd2c|\ud83d\udc68\u200d\ud83d\udd2c|\ud83d\udc68\ud83c\udffb\u200d\ud83d\ude80|\ud83d\udc68\ud83c\udffc\u200d\ud83d\ude80|\ud83d\udc68\ud83c\udffd\u200d\ud83d\ude80|\ud83d\udc68\ud83c\udffe\u200d\ud83d\ude80|\ud83d\udc68\ud83c\udfff\u200d\ud83d\ude80|\ud83d\udc68\u200d\ud83d\ude80|\ud83d\udc68\ud83c\udffb\u200d\ud83d\ude92|\ud83d\udc68\ud83c\udffc\u200d\ud83d\ude92|\ud83d\udc68\ud83c\udffd\u200d\ud83d\ude92|\ud83d\udc68\ud83c\udffe\u200d\ud83d\ude92|\ud83d\udc68\ud83c\udfff\u200d\ud83d\ude92|\ud83d\udc68\u200d\ud83d\ude92|\ud83d\udc68\ud83c\udffb\u200d\u2695\ufe0f|\ud83d\udc68\ud83c\udffc\u200d\u2695\ufe0f|\ud83d\udc68\ud83c\udffd\u200d\u2695\ufe0f|\ud83d\udc68\ud83c\udffe\u200d\u2695\ufe0f|\ud83d\udc68\ud83c\udfff\u200d\u2695\ufe0f|\ud83d\udc68\u200d\u2695\ufe0f|\ud83d\udc68\ud83c\udffb\u200d\u2696\ufe0f|\ud83d\udc68\ud83c\udffc\u200d\u2696\ufe0f|\ud83d\udc68\ud83c\udffd\u200d\u2696\ufe0f|\ud83d\udc68\ud83c\udffe\u200d\u2696\ufe0f|\ud83d\udc68\ud83c\udfff\u200d\u2696\ufe0f|\ud83d\udc68\u200d\u2696\ufe0f|\ud83d\udc68\ud83c\udffb\u200d\u2708\ufe0f|\ud83d\udc68\ud83c\udffc\u200d\u2708\ufe0f|\ud83d\udc68\ud83c\udffd\u200d\u2708\ufe0f|\ud83d\udc68\ud83c\udffe\u200d\u2708\ufe0f|\ud83d\udc68\ud83c\udfff\u200d\u2708\ufe0f|\ud83d\udc68\u200d\u2708\ufe0f|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\ud83c\udffb|\ud83d\udc68\ud83c\udffc|\ud83d\udc68\ud83c\udffd|\ud83d\udc68\ud83c\udffe|\ud83d\udc68\ud83c\udfff|\ud83d\udc68|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udf3e|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udf3e|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udf3e|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udf3e|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udf3e|\ud83d\udc69\u200d\ud83c\udf3e|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udf73|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udf73|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udf73|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udf73|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udf73|\ud83d\udc69\u200d\ud83c\udf73|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udf93|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udf93|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udf93|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udf93|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udf93|\ud83d\udc69\u200d\ud83c\udf93|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udfa4|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udfa4|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udfa4|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udfa4|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udfa4|\ud83d\udc69\u200d\ud83c\udfa4|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udfa8|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udfa8|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udfa8|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udfa8|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udfa8|\ud83d\udc69\u200d\ud83c\udfa8|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udfeb|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udfeb|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udfeb|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udfeb|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udfeb|\ud83d\udc69\u200d\ud83c\udfeb|\ud83d\udc69\ud83c\udffb\u200d\ud83c\udfed|\ud83d\udc69\ud83c\udffc\u200d\ud83c\udfed|\ud83d\udc69\ud83c\udffd\u200d\ud83c\udfed|\ud83d\udc69\ud83c\udffe\u200d\ud83c\udfed|\ud83d\udc69\ud83c\udfff\u200d\ud83c\udfed|\ud83d\udc69\u200d\ud83c\udfed|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67|\ud83d\udc69\u200d\ud83d\udc67|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67|\ud83d\udc69\ud83c\udffb\u200d\ud83d\udcbb|\ud83d\udc69\ud83c\udffc\u200d\ud83d\udcbb|\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbb|\ud83d\udc69\ud83c\udffe\u200d\ud83d\udcbb|\ud83d\udc69\ud83c\udfff\u200d\ud83d\udcbb|\ud83d\udc69\u200d\ud83d\udcbb|\ud83d\udc69\ud83c\udffb\u200d\ud83d\udcbc|\ud83d\udc69\ud83c\udffc\u200d\ud83d\udcbc|\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbc|\ud83d\udc69\ud83c\udffe\u200d\ud83d\udcbc|\ud83d\udc69\ud83c\udfff\u200d\ud83d\udcbc|\ud83d\udc69\u200d\ud83d\udcbc|\ud83d\udc69\ud83c\udffb\u200d\ud83d\udd27|\ud83d\udc69\ud83c\udffc\u200d\ud83d\udd27|\ud83d\udc69\ud83c\udffd\u200d\ud83d\udd27|\ud83d\udc69\ud83c\udffe\u200d\ud83d\udd27|\ud83d\udc69\ud83c\udfff\u200d\ud83d\udd27|\ud83d\udc69\u200d\ud83d\udd27|\ud83d\udc69\ud83c\udffb\u200d\ud83d\udd2c|\ud83d\udc69\ud83c\udffc\u200d\ud83d\udd2c|\ud83d\udc69\ud83c\udffd\u200d\ud83d\udd2c|\ud83d\udc69\ud83c\udffe\u200d\ud83d\udd2c|\ud83d\udc69\ud83c\udfff\u200d\ud83d\udd2c|\ud83d\udc69\u200d\ud83d\udd2c|\ud83d\udc69\ud83c\udffb\u200d\ud83d\ude80|\ud83d\udc69\ud83c\udffc\u200d\ud83d\ude80|\ud83d\udc69\ud83c\udffd\u200d\ud83d\ude80|\ud83d\udc69\ud83c\udffe\u200d\ud83d\ude80|\ud83d\udc69\ud83c\udfff\u200d\ud83d\ude80|\ud83d\udc69\u200d\ud83d\ude80|\ud83d\udc69\ud83c\udffb\u200d\ud83d\ude92|\ud83d\udc69\ud83c\udffc\u200d\ud83d\ude92|\ud83d\udc69\ud83c\udffd\u200d\ud83d\ude92|\ud83d\udc69\ud83c\udffe\u200d\ud83d\ude92|\ud83d\udc69\ud83c\udfff\u200d\ud83d\ude92|\ud83d\udc69\u200d\ud83d\ude92|\ud83d\udc69\ud83c\udffb\u200d\u2695\ufe0f|\ud83d\udc69\ud83c\udffc\u200d\u2695\ufe0f|\ud83d\udc69\ud83c\udffd\u200d\u2695\ufe0f|\ud83d\udc69\ud83c\udffe\u200d\u2695\ufe0f|\ud83d\udc69\ud83c\udfff\u200d\u2695\ufe0f|\ud83d\udc69\u200d\u2695\ufe0f|\ud83d\udc69\ud83c\udffb\u200d\u2696\ufe0f|\ud83d\udc69\ud83c\udffc\u200d\u2696\ufe0f|\ud83d\udc69\ud83c\udffd\u200d\u2696\ufe0f|\ud83d\udc69\ud83c\udffe\u200d\u2696\ufe0f|\ud83d\udc69\ud83c\udfff\u200d\u2696\ufe0f|\ud83d\udc69\u200d\u2696\ufe0f|\ud83d\udc69\ud83c\udffb\u200d\u2708\ufe0f|\ud83d\udc69\ud83c\udffc\u200d\u2708\ufe0f|\ud83d\udc69\ud83c\udffd\u200d\u2708\ufe0f|\ud83d\udc69\ud83c\udffe\u200d\u2708\ufe0f|\ud83d\udc69\ud83c\udfff\u200d\u2708\ufe0f|\ud83d\udc69\u200d\u2708\ufe0f|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69|\ud83d\udc69\ud83c\udffb|\ud83d\udc69\ud83c\udffc|\ud83d\udc69\ud83c\udffd|\ud83d\udc69\ud83c\udffe|\ud83d\udc69\ud83c\udfff|\ud83d\udc69|\ud83d\udc6a|\ud83d\udc6b|\ud83d\udc6c|\ud83d\udc6d|\ud83d\udc6e\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc6e\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc6e\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc6e\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc6e\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc6e\u200d\u2640\ufe0f|\ud83d\udc6e\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc6e\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc6e\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc6e\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc6e\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc6e\u200d\u2642\ufe0f|\ud83d\udc6e\ud83c\udffb|\ud83d\udc6e\ud83c\udffc|\ud83d\udc6e\ud83c\udffd|\ud83d\udc6e\ud83c\udffe|\ud83d\udc6e\ud83c\udfff|\ud83d\udc6e|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\udc6f|\ud83d\udc70\ud83c\udffb|\ud83d\udc70\ud83c\udffc|\ud83d\udc70\ud83c\udffd|\ud83d\udc70\ud83c\udffe|\ud83d\udc70\ud83c\udfff|\ud83d\udc70|\ud83d\udc71\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc71\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc71\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc71\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc71\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc71\u200d\u2640\ufe0f|\ud83d\udc71\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc71\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc71\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc71\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc71\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc71\u200d\u2642\ufe0f|\ud83d\udc71\ud83c\udffb|\ud83d\udc71\ud83c\udffc|\ud83d\udc71\ud83c\udffd|\ud83d\udc71\ud83c\udffe|\ud83d\udc71\ud83c\udfff|\ud83d\udc71|\ud83d\udc72\ud83c\udffb|\ud83d\udc72\ud83c\udffc|\ud83d\udc72\ud83c\udffd|\ud83d\udc72\ud83c\udffe|\ud83d\udc72\ud83c\udfff|\ud83d\udc72|\ud83d\udc73\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc73\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc73\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc73\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc73\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc73\u200d\u2640\ufe0f|\ud83d\udc73\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc73\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc73\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc73\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc73\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc73\u200d\u2642\ufe0f|\ud83d\udc73\ud83c\udffb|\ud83d\udc73\ud83c\udffc|\ud83d\udc73\ud83c\udffd|\ud83d\udc73\ud83c\udffe|\ud83d\udc73\ud83c\udfff|\ud83d\udc73|\ud83d\udc74\ud83c\udffb|\ud83d\udc74\ud83c\udffc|\ud83d\udc74\ud83c\udffd|\ud83d\udc74\ud83c\udffe|\ud83d\udc74\ud83c\udfff|\ud83d\udc74|\ud83d\udc75\ud83c\udffb|\ud83d\udc75\ud83c\udffc|\ud83d\udc75\ud83c\udffd|\ud83d\udc75\ud83c\udffe|\ud83d\udc75\ud83c\udfff|\ud83d\udc75|\ud83d\udc76\ud83c\udffb|\ud83d\udc76\ud83c\udffc|\ud83d\udc76\ud83c\udffd|\ud83d\udc76\ud83c\udffe|\ud83d\udc76\ud83c\udfff|\ud83d\udc76|\ud83d\udc77\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc77\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc77\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc77\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc77\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc77\u200d\u2640\ufe0f|\ud83d\udc77\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc77\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc77\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc77\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc77\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc77\u200d\u2642\ufe0f|\ud83d\udc77\ud83c\udffb|\ud83d\udc77\ud83c\udffc|\ud83d\udc77\ud83c\udffd|\ud83d\udc77\ud83c\udffe|\ud83d\udc77\ud83c\udfff|\ud83d\udc77|\ud83d\udc78\ud83c\udffb|\ud83d\udc78\ud83c\udffc|\ud83d\udc78\ud83c\udffd|\ud83d\udc78\ud83c\udffe|\ud83d\udc78\ud83c\udfff|\ud83d\udc78|\ud83d\udc79|\ud83d\udc7a|\ud83d\udc7b|\ud83d\udc7c\ud83c\udffb|\ud83d\udc7c\ud83c\udffc|\ud83d\udc7c\ud83c\udffd|\ud83d\udc7c\ud83c\udffe|\ud83d\udc7c\ud83c\udfff|\ud83d\udc7c|\ud83d\udc7d|\ud83d\udc7e|\ud83d\udc7f|\ud83d\udc80|\ud83d\udc81\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc81\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc81\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc81\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc81\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc81\u200d\u2640\ufe0f|\ud83d\udc81\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc81\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc81\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc81\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc81\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc81\u200d\u2642\ufe0f|\ud83d\udc81\ud83c\udffb|\ud83d\udc81\ud83c\udffc|\ud83d\udc81\ud83c\udffd|\ud83d\udc81\ud83c\udffe|\ud83d\udc81\ud83c\udfff|\ud83d\udc81|\ud83d\udc82\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc82\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc82\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc82\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc82\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc82\u200d\u2640\ufe0f|\ud83d\udc82\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc82\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc82\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc82\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc82\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc82\u200d\u2642\ufe0f|\ud83d\udc82\ud83c\udffb|\ud83d\udc82\ud83c\udffc|\ud83d\udc82\ud83c\udffd|\ud83d\udc82\ud83c\udffe|\ud83d\udc82\ud83c\udfff|\ud83d\udc82|\ud83d\udc83\ud83c\udffb|\ud83d\udc83\ud83c\udffc|\ud83d\udc83\ud83c\udffd|\ud83d\udc83\ud83c\udffe|\ud83d\udc83\ud83c\udfff|\ud83d\udc83|\ud83d\udc84|\ud83d\udc85\ud83c\udffb|\ud83d\udc85\ud83c\udffc|\ud83d\udc85\ud83c\udffd|\ud83d\udc85\ud83c\udffe|\ud83d\udc85\ud83c\udfff|\ud83d\udc85|\ud83d\udc86\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc86\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc86\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc86\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc86\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc86\u200d\u2640\ufe0f|\ud83d\udc86\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc86\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc86\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc86\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc86\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc86\u200d\u2642\ufe0f|\ud83d\udc86\ud83c\udffb|\ud83d\udc86\ud83c\udffc|\ud83d\udc86\ud83c\udffd|\ud83d\udc86\ud83c\udffe|\ud83d\udc86\ud83c\udfff|\ud83d\udc86|\ud83d\udc87\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udc87\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udc87\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udc87\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udc87\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udc87\u200d\u2640\ufe0f|\ud83d\udc87\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udc87\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udc87\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udc87\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udc87\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udc87\u200d\u2642\ufe0f|\ud83d\udc87\ud83c\udffb|\ud83d\udc87\ud83c\udffc|\ud83d\udc87\ud83c\udffd|\ud83d\udc87\ud83c\udffe|\ud83d\udc87\ud83c\udfff|\ud83d\udc87|\ud83d\udc88|\ud83d\udc89|\ud83d\udc8a|\ud83d\udc8b|\ud83d\udc8c|\ud83d\udc8d|\ud83d\udc8e|\ud83d\udc8f|\ud83d\udc90|\ud83d\udc91|\ud83d\udc92|\ud83d\udc93|\ud83d\udc94|\ud83d\udc95|\ud83d\udc96|\ud83d\udc97|\ud83d\udc98|\ud83d\udc99|\ud83d\udc9a|\ud83d\udc9b|\ud83d\udc9c|\ud83d\udc9d|\ud83d\udc9e|\ud83d\udc9f|\ud83d\udca0|\ud83d\udca1|\ud83d\udca2|\ud83d\udca3|\ud83d\udca4|\ud83d\udca5|\ud83d\udca6|\ud83d\udca7|\ud83d\udca8|\ud83d\udca9|\ud83d\udcaa\ud83c\udffb|\ud83d\udcaa\ud83c\udffc|\ud83d\udcaa\ud83c\udffd|\ud83d\udcaa\ud83c\udffe|\ud83d\udcaa\ud83c\udfff|\ud83d\udcaa|\ud83d\udcab|\ud83d\udcac|\ud83d\udcad|\ud83d\udcae|\ud83d\udcaf|\ud83d\udcb0|\ud83d\udcb1|\ud83d\udcb2|\ud83d\udcb3|\ud83d\udcb4|\ud83d\udcb5|\ud83d\udcb6|\ud83d\udcb7|\ud83d\udcb8|\ud83d\udcb9|\ud83d\udcba|\ud83d\udcbb|\ud83d\udcbc|\ud83d\udcbd|\ud83d\udcbe|\ud83d\udcbf|\ud83d\udcc0|\ud83d\udcc1|\ud83d\udcc2|\ud83d\udcc3|\ud83d\udcc4|\ud83d\udcc5|\ud83d\udcc6|\ud83d\udcc7|\ud83d\udcc8|\ud83d\udcc9|\ud83d\udcca|\ud83d\udccb|\ud83d\udccc|\ud83d\udccd|\ud83d\udcce|\ud83d\udccf|\ud83d\udcd0|\ud83d\udcd1|\ud83d\udcd2|\ud83d\udcd3|\ud83d\udcd4|\ud83d\udcd5|\ud83d\udcd6|\ud83d\udcd7|\ud83d\udcd8|\ud83d\udcd9|\ud83d\udcda|\ud83d\udcdb|\ud83d\udcdc|\ud83d\udcdd|\ud83d\udcde|\ud83d\udcdf|\ud83d\udce0|\ud83d\udce1|\ud83d\udce2|\ud83d\udce3|\ud83d\udce4|\ud83d\udce5|\ud83d\udce6|\ud83d\udce7|\ud83d\udce8|\ud83d\udce9|\ud83d\udcea|\ud83d\udceb|\ud83d\udcec|\ud83d\udced|\ud83d\udcee|\ud83d\udcef|\ud83d\udcf0|\ud83d\udcf1|\ud83d\udcf2|\ud83d\udcf3|\ud83d\udcf4|\ud83d\udcf5|\ud83d\udcf6|\ud83d\udcf7|\ud83d\udcf8|\ud83d\udcf9|\ud83d\udcfa|\ud83d\udcfb|\ud83d\udcfc|\ud83d\udcfd\ufe0f|\ud83d\udcff|\ud83d\udd00|\ud83d\udd01|\ud83d\udd02|\ud83d\udd03|\ud83d\udd04|\ud83d\udd05|\ud83d\udd06|\ud83d\udd07|\ud83d\udd08|\ud83d\udd09|\ud83d\udd0a|\ud83d\udd0b|\ud83d\udd0c|\ud83d\udd0d|\ud83d\udd0e|\ud83d\udd0f|\ud83d\udd10|\ud83d\udd11|\ud83d\udd12|\ud83d\udd13|\ud83d\udd14|\ud83d\udd15|\ud83d\udd16|\ud83d\udd17|\ud83d\udd18|\ud83d\udd19|\ud83d\udd1a|\ud83d\udd1b|\ud83d\udd1c|\ud83d\udd1d|\ud83d\udd1e|\ud83d\udd1f|\ud83d\udd20|\ud83d\udd21|\ud83d\udd22|\ud83d\udd23|\ud83d\udd24|\ud83d\udd25|\ud83d\udd26|\ud83d\udd27|\ud83d\udd28|\ud83d\udd29|\ud83d\udd2a|\ud83d\udd2b|\ud83d\udd2c|\ud83d\udd2d|\ud83d\udd2e|\ud83d\udd2f|\ud83d\udd30|\ud83d\udd31|\ud83d\udd32|\ud83d\udd33|\ud83d\udd34|\ud83d\udd35|\ud83d\udd36|\ud83d\udd37|\ud83d\udd38|\ud83d\udd39|\ud83d\udd3a|\ud83d\udd3b|\ud83d\udd3c|\ud83d\udd3d|\ud83d\udd49\ufe0f|\ud83d\udd4a\ufe0f|\ud83d\udd4b|\ud83d\udd4c|\ud83d\udd4d|\ud83d\udd4e|\ud83d\udd50|\ud83d\udd51|\ud83d\udd52|\ud83d\udd53|\ud83d\udd54|\ud83d\udd55|\ud83d\udd56|\ud83d\udd57|\ud83d\udd58|\ud83d\udd59|\ud83d\udd5a|\ud83d\udd5b|\ud83d\udd5c|\ud83d\udd5d|\ud83d\udd5e|\ud83d\udd5f|\ud83d\udd60|\ud83d\udd61|\ud83d\udd62|\ud83d\udd63|\ud83d\udd64|\ud83d\udd65|\ud83d\udd66|\ud83d\udd67|\ud83d\udd6f\ufe0f|\ud83d\udd70\ufe0f|\ud83d\udd73\ufe0f|\ud83d\udd74\ud83c\udffb|\ud83d\udd74\ud83c\udffc|\ud83d\udd74\ud83c\udffd|\ud83d\udd74\ud83c\udffe|\ud83d\udd74\ud83c\udfff|\ud83d\udd74\ufe0f|\ud83d\udd75\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udd75\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udd75\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udd75\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udd75\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udd75\ufe0f\u200d\u2640\ufe0f|\ud83d\udd75\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udd75\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udd75\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udd75\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udd75\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udd75\ufe0f\u200d\u2642\ufe0f|\ud83d\udd75\ud83c\udffb|\ud83d\udd75\ud83c\udffc|\ud83d\udd75\ud83c\udffd|\ud83d\udd75\ud83c\udffe|\ud83d\udd75\ud83c\udfff|\ud83d\udd75\ufe0f|\ud83d\udd76\ufe0f|\ud83d\udd77\ufe0f|\ud83d\udd78\ufe0f|\ud83d\udd79\ufe0f|\ud83d\udd7a\ud83c\udffb|\ud83d\udd7a\ud83c\udffc|\ud83d\udd7a\ud83c\udffd|\ud83d\udd7a\ud83c\udffe|\ud83d\udd7a\ud83c\udfff|\ud83d\udd7a|\ud83d\udd87\ufe0f|\ud83d\udd8a\ufe0f|\ud83d\udd8b\ufe0f|\ud83d\udd8c\ufe0f|\ud83d\udd8d\ufe0f|\ud83d\udd90\ud83c\udffb|\ud83d\udd90\ud83c\udffc|\ud83d\udd90\ud83c\udffd|\ud83d\udd90\ud83c\udffe|\ud83d\udd90\ud83c\udfff|\ud83d\udd90\ufe0f|\ud83d\udd95\ud83c\udffb|\ud83d\udd95\ud83c\udffc|\ud83d\udd95\ud83c\udffd|\ud83d\udd95\ud83c\udffe|\ud83d\udd95\ud83c\udfff|\ud83d\udd95|\ud83d\udd96\ud83c\udffb|\ud83d\udd96\ud83c\udffc|\ud83d\udd96\ud83c\udffd|\ud83d\udd96\ud83c\udffe|\ud83d\udd96\ud83c\udfff|\ud83d\udd96|\ud83d\udda4|\ud83d\udda5\ufe0f|\ud83d\udda8\ufe0f|\ud83d\uddb1\ufe0f|\ud83d\uddb2\ufe0f|\ud83d\uddbc\ufe0f|\ud83d\uddc2\ufe0f|\ud83d\uddc3\ufe0f|\ud83d\uddc4\ufe0f|\ud83d\uddd1\ufe0f|\ud83d\uddd2\ufe0f|\ud83d\uddd3\ufe0f|\ud83d\udddc\ufe0f|\ud83d\udddd\ufe0f|\ud83d\uddde\ufe0f|\ud83d\udde1\ufe0f|\ud83d\udde3\ufe0f|\ud83d\udde8\ufe0f|\ud83d\uddef\ufe0f|\ud83d\uddf3\ufe0f|\ud83d\uddfa\ufe0f|\ud83d\uddfb|\ud83d\uddfc|\ud83d\uddfd|\ud83d\uddfe|\ud83d\uddff|\ud83d\ude00|\ud83d\ude01|\ud83d\ude02|\ud83d\ude03|\ud83d\ude04|\ud83d\ude05|\ud83d\ude06|\ud83d\ude07|\ud83d\ude08|\ud83d\ude09|\ud83d\ude0a|\ud83d\ude0b|\ud83d\ude0c|\ud83d\ude0d|\ud83d\ude0e|\ud83d\ude0f|\ud83d\ude10|\ud83d\ude11|\ud83d\ude12|\ud83d\ude13|\ud83d\ude14|\ud83d\ude15|\ud83d\ude16|\ud83d\ude17|\ud83d\ude18|\ud83d\ude19|\ud83d\ude1a|\ud83d\ude1b|\ud83d\ude1c|\ud83d\ude1d|\ud83d\ude1e|\ud83d\ude1f|\ud83d\ude20|\ud83d\ude21|\ud83d\ude22|\ud83d\ude23|\ud83d\ude24|\ud83d\ude25|\ud83d\ude26|\ud83d\ude27|\ud83d\ude28|\ud83d\ude29|\ud83d\ude2a|\ud83d\ude2b|\ud83d\ude2c|\ud83d\ude2d|\ud83d\ude2e|\ud83d\ude2f|\ud83d\ude30|\ud83d\ude31|\ud83d\ude32|\ud83d\ude33|\ud83d\ude34|\ud83d\ude35|\ud83d\ude36|\ud83d\ude37|\ud83d\ude38|\ud83d\ude39|\ud83d\ude3a|\ud83d\ude3b|\ud83d\ude3c|\ud83d\ude3d|\ud83d\ude3e|\ud83d\ude3f|\ud83d\ude40|\ud83d\ude41|\ud83d\ude42|\ud83d\ude43|\ud83d\ude44|\ud83d\ude45\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\ude45\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\ude45\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\ude45\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\ude45\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\ude45\u200d\u2640\ufe0f|\ud83d\ude45\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\ude45\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\ude45\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\ude45\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\ude45\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\ude45\u200d\u2642\ufe0f|\ud83d\ude45\ud83c\udffb|\ud83d\ude45\ud83c\udffc|\ud83d\ude45\ud83c\udffd|\ud83d\ude45\ud83c\udffe|\ud83d\ude45\ud83c\udfff|\ud83d\ude45|\ud83d\ude46\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\ude46\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\ude46\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\ude46\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\ude46\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\ude46\u200d\u2640\ufe0f|\ud83d\ude46\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\ude46\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\ude46\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\ude46\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\ude46\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\ude46\u200d\u2642\ufe0f|\ud83d\ude46\ud83c\udffb|\ud83d\ude46\ud83c\udffc|\ud83d\ude46\ud83c\udffd|\ud83d\ude46\ud83c\udffe|\ud83d\ude46\ud83c\udfff|\ud83d\ude46|\ud83d\ude47\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\ude47\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\ude47\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\ude47\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\ude47\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\ude47\u200d\u2640\ufe0f|\ud83d\ude47\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\ude47\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\ude47\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\ude47\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\ude47\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\ude47\u200d\u2642\ufe0f|\ud83d\ude47\ud83c\udffb|\ud83d\ude47\ud83c\udffc|\ud83d\ude47\ud83c\udffd|\ud83d\ude47\ud83c\udffe|\ud83d\ude47\ud83c\udfff|\ud83d\ude47|\ud83d\ude48|\ud83d\ude49|\ud83d\ude4a|\ud83d\ude4b\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\ude4b\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\ude4b\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\ude4b\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\ude4b\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\ude4b\u200d\u2640\ufe0f|\ud83d\ude4b\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\ude4b\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\ude4b\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\ude4b\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\ude4b\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\ude4b\u200d\u2642\ufe0f|\ud83d\ude4b\ud83c\udffb|\ud83d\ude4b\ud83c\udffc|\ud83d\ude4b\ud83c\udffd|\ud83d\ude4b\ud83c\udffe|\ud83d\ude4b\ud83c\udfff|\ud83d\ude4b|\ud83d\ude4c\ud83c\udffb|\ud83d\ude4c\ud83c\udffc|\ud83d\ude4c\ud83c\udffd|\ud83d\ude4c\ud83c\udffe|\ud83d\ude4c\ud83c\udfff|\ud83d\ude4c|\ud83d\ude4d\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\ude4d\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\ude4d\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\ude4d\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\ude4d\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\ude4d\u200d\u2640\ufe0f|\ud83d\ude4d\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\ude4d\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\ude4d\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\ude4d\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\ude4d\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\ude4d\u200d\u2642\ufe0f|\ud83d\ude4d\ud83c\udffb|\ud83d\ude4d\ud83c\udffc|\ud83d\ude4d\ud83c\udffd|\ud83d\ude4d\ud83c\udffe|\ud83d\ude4d\ud83c\udfff|\ud83d\ude4d|\ud83d\ude4e\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\ude4e\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\ude4e\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\ude4e\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\ude4e\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\ude4e\u200d\u2640\ufe0f|\ud83d\ude4e\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\ude4e\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\ude4e\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\ude4e\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\ude4e\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\ude4e\u200d\u2642\ufe0f|\ud83d\ude4e\ud83c\udffb|\ud83d\ude4e\ud83c\udffc|\ud83d\ude4e\ud83c\udffd|\ud83d\ude4e\ud83c\udffe|\ud83d\ude4e\ud83c\udfff|\ud83d\ude4e|\ud83d\ude4f\ud83c\udffb|\ud83d\ude4f\ud83c\udffc|\ud83d\ude4f\ud83c\udffd|\ud83d\ude4f\ud83c\udffe|\ud83d\ude4f\ud83c\udfff|\ud83d\ude4f|\ud83d\ude80|\ud83d\ude81|\ud83d\ude82|\ud83d\ude83|\ud83d\ude84|\ud83d\ude85|\ud83d\ude86|\ud83d\ude87|\ud83d\ude88|\ud83d\ude89|\ud83d\ude8a|\ud83d\ude8b|\ud83d\ude8c|\ud83d\ude8d|\ud83d\ude8e|\ud83d\ude8f|\ud83d\ude90|\ud83d\ude91|\ud83d\ude92|\ud83d\ude93|\ud83d\ude94|\ud83d\ude95|\ud83d\ude96|\ud83d\ude97|\ud83d\ude98|\ud83d\ude99|\ud83d\ude9a|\ud83d\ude9b|\ud83d\ude9c|\ud83d\ude9d|\ud83d\ude9e|\ud83d\ude9f|\ud83d\udea0|\ud83d\udea1|\ud83d\udea2|\ud83d\udea3\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udea3\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udea3\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udea3\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udea3\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udea3\u200d\u2640\ufe0f|\ud83d\udea3\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udea3\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udea3\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udea3\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udea3\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udea3\u200d\u2642\ufe0f|\ud83d\udea3\ud83c\udffb|\ud83d\udea3\ud83c\udffc|\ud83d\udea3\ud83c\udffd|\ud83d\udea3\ud83c\udffe|\ud83d\udea3\ud83c\udfff|\ud83d\udea3|\ud83d\udea4|\ud83d\udea5|\ud83d\udea6|\ud83d\udea7|\ud83d\udea8|\ud83d\udea9|\ud83d\udeaa|\ud83d\udeab|\ud83d\udeac|\ud83d\udead|\ud83d\udeae|\ud83d\udeaf|\ud83d\udeb0|\ud83d\udeb1|\ud83d\udeb2|\ud83d\udeb3|\ud83d\udeb4\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udeb4\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udeb4\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udeb4\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udeb4\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udeb4\u200d\u2640\ufe0f|\ud83d\udeb4\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udeb4\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udeb4\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udeb4\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udeb4\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udeb4\u200d\u2642\ufe0f|\ud83d\udeb4\ud83c\udffb|\ud83d\udeb4\ud83c\udffc|\ud83d\udeb4\ud83c\udffd|\ud83d\udeb4\ud83c\udffe|\ud83d\udeb4\ud83c\udfff|\ud83d\udeb4|\ud83d\udeb5\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udeb5\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udeb5\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udeb5\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udeb5\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udeb5\u200d\u2640\ufe0f|\ud83d\udeb5\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udeb5\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udeb5\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udeb5\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udeb5\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udeb5\u200d\u2642\ufe0f|\ud83d\udeb5\ud83c\udffb|\ud83d\udeb5\ud83c\udffc|\ud83d\udeb5\ud83c\udffd|\ud83d\udeb5\ud83c\udffe|\ud83d\udeb5\ud83c\udfff|\ud83d\udeb5|\ud83d\udeb6\ud83c\udffb\u200d\u2640\ufe0f|\ud83d\udeb6\ud83c\udffc\u200d\u2640\ufe0f|\ud83d\udeb6\ud83c\udffd\u200d\u2640\ufe0f|\ud83d\udeb6\ud83c\udffe\u200d\u2640\ufe0f|\ud83d\udeb6\ud83c\udfff\u200d\u2640\ufe0f|\ud83d\udeb6\u200d\u2640\ufe0f|\ud83d\udeb6\ud83c\udffb\u200d\u2642\ufe0f|\ud83d\udeb6\ud83c\udffc\u200d\u2642\ufe0f|\ud83d\udeb6\ud83c\udffd\u200d\u2642\ufe0f|\ud83d\udeb6\ud83c\udffe\u200d\u2642\ufe0f|\ud83d\udeb6\ud83c\udfff\u200d\u2642\ufe0f|\ud83d\udeb6\u200d\u2642\ufe0f|\ud83d\udeb6\ud83c\udffb|\ud83d\udeb6\ud83c\udffc|\ud83d\udeb6\ud83c\udffd|\ud83d\udeb6\ud83c\udffe|\ud83d\udeb6\ud83c\udfff|\ud83d\udeb6|\ud83d\udeb7|\ud83d\udeb8|\ud83d\udeb9|\ud83d\udeba|\ud83d\udebb|\ud83d\udebc|\ud83d\udebd|\ud83d\udebe|\ud83d\udebf|\ud83d\udec0\ud83c\udffb|\ud83d\udec0\ud83c\udffc|\ud83d\udec0\ud83c\udffd|\ud83d\udec0\ud83c\udffe|\ud83d\udec0\ud83c\udfff|\ud83d\udec0|\ud83d\udec1|\ud83d\udec2|\ud83d\udec3|\ud83d\udec4|\ud83d\udec5|\ud83d\udecb\ufe0f|\ud83d\udecc\ud83c\udffb|\ud83d\udecc\ud83c\udffc|\ud83d\udecc\ud83c\udffd|\ud83d\udecc\ud83c\udffe|\ud83d\udecc\ud83c\udfff|\ud83d\udecc|\ud83d\udecd\ufe0f|\ud83d\udece\ufe0f|\ud83d\udecf\ufe0f|\ud83d\uded0|\ud83d\uded1|\ud83d\uded2|\ud83d\udee0\ufe0f|\ud83d\udee1\ufe0f|\ud83d\udee2\ufe0f|\ud83d\udee3\ufe0f|\ud83d\udee4\ufe0f|\ud83d\udee5\ufe0f|\ud83d\udee9\ufe0f|\ud83d\udeeb|\ud83d\udeec|\ud83d\udef0\ufe0f|\ud83d\udef3\ufe0f|\ud83d\udef4|\ud83d\udef5|\ud83d\udef6|\ud83d\udef7|\ud83d\udef8|\ud83d\udef9|\ud83e\udd10|\ud83e\udd11|\ud83e\udd12|\ud83e\udd13|\ud83e\udd14|\ud83e\udd15|\ud83e\udd16|\ud83e\udd17|\ud83e\udd18\ud83c\udffb|\ud83e\udd18\ud83c\udffc|\ud83e\udd18\ud83c\udffd|\ud83e\udd18\ud83c\udffe|\ud83e\udd18\ud83c\udfff|\ud83e\udd18|\ud83e\udd19\ud83c\udffb|\ud83e\udd19\ud83c\udffc|\ud83e\udd19\ud83c\udffd|\ud83e\udd19\ud83c\udffe|\ud83e\udd19\ud83c\udfff|\ud83e\udd19|\ud83e\udd1a\ud83c\udffb|\ud83e\udd1a\ud83c\udffc|\ud83e\udd1a\ud83c\udffd|\ud83e\udd1a\ud83c\udffe|\ud83e\udd1a\ud83c\udfff|\ud83e\udd1a|\ud83e\udd1b\ud83c\udffb|\ud83e\udd1b\ud83c\udffc|\ud83e\udd1b\ud83c\udffd|\ud83e\udd1b\ud83c\udffe|\ud83e\udd1b\ud83c\udfff|\ud83e\udd1b|\ud83e\udd1c\ud83c\udffb|\ud83e\udd1c\ud83c\udffc|\ud83e\udd1c\ud83c\udffd|\ud83e\udd1c\ud83c\udffe|\ud83e\udd1c\ud83c\udfff|\ud83e\udd1c|\ud83e\udd1d|\ud83e\udd1e\ud83c\udffb|\ud83e\udd1e\ud83c\udffc|\ud83e\udd1e\ud83c\udffd|\ud83e\udd1e\ud83c\udffe|\ud83e\udd1e\ud83c\udfff|\ud83e\udd1e|\ud83e\udd1f\ud83c\udffb|\ud83e\udd1f\ud83c\udffc|\ud83e\udd1f\ud83c\udffd|\ud83e\udd1f\ud83c\udffe|\ud83e\udd1f\ud83c\udfff|\ud83e\udd1f|\ud83e\udd20|\ud83e\udd21|\ud83e\udd22|\ud83e\udd23|\ud83e\udd24|\ud83e\udd25|\ud83e\udd26\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udd26\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udd26\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udd26\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udd26\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udd26\u200d\u2640\ufe0f|\ud83e\udd26\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udd26\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udd26\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udd26\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udd26\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udd26\u200d\u2642\ufe0f|\ud83e\udd26\ud83c\udffb|\ud83e\udd26\ud83c\udffc|\ud83e\udd26\ud83c\udffd|\ud83e\udd26\ud83c\udffe|\ud83e\udd26\ud83c\udfff|\ud83e\udd26|\ud83e\udd27|\ud83e\udd28|\ud83e\udd29|\ud83e\udd2a|\ud83e\udd2b|\ud83e\udd2c|\ud83e\udd2d|\ud83e\udd2e|\ud83e\udd2f|\ud83e\udd30\ud83c\udffb|\ud83e\udd30\ud83c\udffc|\ud83e\udd30\ud83c\udffd|\ud83e\udd30\ud83c\udffe|\ud83e\udd30\ud83c\udfff|\ud83e\udd30|\ud83e\udd31\ud83c\udffb|\ud83e\udd31\ud83c\udffc|\ud83e\udd31\ud83c\udffd|\ud83e\udd31\ud83c\udffe|\ud83e\udd31\ud83c\udfff|\ud83e\udd31|\ud83e\udd32\ud83c\udffb|\ud83e\udd32\ud83c\udffc|\ud83e\udd32\ud83c\udffd|\ud83e\udd32\ud83c\udffe|\ud83e\udd32\ud83c\udfff|\ud83e\udd32|\ud83e\udd33\ud83c\udffb|\ud83e\udd33\ud83c\udffc|\ud83e\udd33\ud83c\udffd|\ud83e\udd33\ud83c\udffe|\ud83e\udd33\ud83c\udfff|\ud83e\udd33|\ud83e\udd34\ud83c\udffb|\ud83e\udd34\ud83c\udffc|\ud83e\udd34\ud83c\udffd|\ud83e\udd34\ud83c\udffe|\ud83e\udd34\ud83c\udfff|\ud83e\udd34|\ud83e\udd35\ud83c\udffb|\ud83e\udd35\ud83c\udffc|\ud83e\udd35\ud83c\udffd|\ud83e\udd35\ud83c\udffe|\ud83e\udd35\ud83c\udfff|\ud83e\udd35|\ud83e\udd36\ud83c\udffb|\ud83e\udd36\ud83c\udffc|\ud83e\udd36\ud83c\udffd|\ud83e\udd36\ud83c\udffe|\ud83e\udd36\ud83c\udfff|\ud83e\udd36|\ud83e\udd37\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udd37\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udd37\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udd37\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udd37\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udd37\u200d\u2640\ufe0f|\ud83e\udd37\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udd37\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udd37\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udd37\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udd37\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udd37\u200d\u2642\ufe0f|\ud83e\udd37\ud83c\udffb|\ud83e\udd37\ud83c\udffc|\ud83e\udd37\ud83c\udffd|\ud83e\udd37\ud83c\udffe|\ud83e\udd37\ud83c\udfff|\ud83e\udd37|\ud83e\udd38\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udd38\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udd38\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udd38\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udd38\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udd38\u200d\u2640\ufe0f|\ud83e\udd38\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udd38\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udd38\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udd38\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udd38\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udd38\u200d\u2642\ufe0f|\ud83e\udd38\ud83c\udffb|\ud83e\udd38\ud83c\udffc|\ud83e\udd38\ud83c\udffd|\ud83e\udd38\ud83c\udffe|\ud83e\udd38\ud83c\udfff|\ud83e\udd38|\ud83e\udd39\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udd39\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udd39\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udd39\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udd39\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udd39\u200d\u2640\ufe0f|\ud83e\udd39\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udd39\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udd39\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udd39\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udd39\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udd39\u200d\u2642\ufe0f|\ud83e\udd39\ud83c\udffb|\ud83e\udd39\ud83c\udffc|\ud83e\udd39\ud83c\udffd|\ud83e\udd39\ud83c\udffe|\ud83e\udd39\ud83c\udfff|\ud83e\udd39|\ud83e\udd3a|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\udd3c|\ud83e\udd3d\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udd3d\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udd3d\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udd3d\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udd3d\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udd3d\u200d\u2640\ufe0f|\ud83e\udd3d\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udd3d\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udd3d\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udd3d\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udd3d\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udd3d\u200d\u2642\ufe0f|\ud83e\udd3d\ud83c\udffb|\ud83e\udd3d\ud83c\udffc|\ud83e\udd3d\ud83c\udffd|\ud83e\udd3d\ud83c\udffe|\ud83e\udd3d\ud83c\udfff|\ud83e\udd3d|\ud83e\udd3e\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udd3e\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udd3e\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udd3e\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udd3e\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udd3e\u200d\u2640\ufe0f|\ud83e\udd3e\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udd3e\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udd3e\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udd3e\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udd3e\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udd3e\u200d\u2642\ufe0f|\ud83e\udd3e\ud83c\udffb|\ud83e\udd3e\ud83c\udffc|\ud83e\udd3e\ud83c\udffd|\ud83e\udd3e\ud83c\udffe|\ud83e\udd3e\ud83c\udfff|\ud83e\udd3e|\ud83e\udd40|\ud83e\udd41|\ud83e\udd42|\ud83e\udd43|\ud83e\udd44|\ud83e\udd45|\ud83e\udd47|\ud83e\udd48|\ud83e\udd49|\ud83e\udd4a|\ud83e\udd4b|\ud83e\udd4c|\ud83e\udd4d|\ud83e\udd4e|\ud83e\udd4f|\ud83e\udd50|\ud83e\udd51|\ud83e\udd52|\ud83e\udd53|\ud83e\udd54|\ud83e\udd55|\ud83e\udd56|\ud83e\udd57|\ud83e\udd58|\ud83e\udd59|\ud83e\udd5a|\ud83e\udd5b|\ud83e\udd5c|\ud83e\udd5d|\ud83e\udd5e|\ud83e\udd5f|\ud83e\udd60|\ud83e\udd61|\ud83e\udd62|\ud83e\udd63|\ud83e\udd64|\ud83e\udd65|\ud83e\udd66|\ud83e\udd67|\ud83e\udd68|\ud83e\udd69|\ud83e\udd6a|\ud83e\udd6b|\ud83e\udd6c|\ud83e\udd6d|\ud83e\udd6e|\ud83e\udd6f|\ud83e\udd70|\ud83e\udd73|\ud83e\udd74|\ud83e\udd75|\ud83e\udd76|\ud83e\udd7a|\ud83e\udd7c|\ud83e\udd7d|\ud83e\udd7e|\ud83e\udd7f|\ud83e\udd80|\ud83e\udd81|\ud83e\udd82|\ud83e\udd83|\ud83e\udd84|\ud83e\udd85|\ud83e\udd86|\ud83e\udd87|\ud83e\udd88|\ud83e\udd89|\ud83e\udd8a|\ud83e\udd8b|\ud83e\udd8c|\ud83e\udd8d|\ud83e\udd8e|\ud83e\udd8f|\ud83e\udd90|\ud83e\udd91|\ud83e\udd92|\ud83e\udd93|\ud83e\udd94|\ud83e\udd95|\ud83e\udd96|\ud83e\udd97|\ud83e\udd98|\ud83e\udd99|\ud83e\udd9a|\ud83e\udd9b|\ud83e\udd9c|\ud83e\udd9d|\ud83e\udd9e|\ud83e\udd9f|\ud83e\udda0|\ud83e\udda1|\ud83e\udda2|\ud83e\uddb4|\ud83e\uddb5|\ud83e\uddb6|\ud83e\uddb7|\ud83e\uddc0|\ud83e\uddc1|\ud83e\uddc2|\ud83e\uddd0|\ud83e\uddd1\ud83c\udffb|\ud83e\uddd1\ud83c\udffc|\ud83e\uddd1\ud83c\udffd|\ud83e\uddd1\ud83c\udffe|\ud83e\uddd1\ud83c\udfff|\ud83e\uddd1|\ud83e\uddd2\ud83c\udffb|\ud83e\uddd2\ud83c\udffc|\ud83e\uddd2\ud83c\udffd|\ud83e\uddd2\ud83c\udffe|\ud83e\uddd2\ud83c\udfff|\ud83e\uddd2|\ud83e\uddd3\ud83c\udffb|\ud83e\uddd3\ud83c\udffc|\ud83e\uddd3\ud83c\udffd|\ud83e\uddd3\ud83c\udffe|\ud83e\uddd3\ud83c\udfff|\ud83e\uddd3|\ud83e\uddd4\ud83c\udffb|\ud83e\uddd4\ud83c\udffc|\ud83e\uddd4\ud83c\udffd|\ud83e\uddd4\ud83c\udffe|\ud83e\uddd4\ud83c\udfff|\ud83e\uddd4|\ud83e\uddd5\ud83c\udffb|\ud83e\uddd5\ud83c\udffc|\ud83e\uddd5\ud83c\udffd|\ud83e\uddd5\ud83c\udffe|\ud83e\uddd5\ud83c\udfff|\ud83e\uddd5|\ud83e\uddd6\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\uddd6\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\uddd6\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\uddd6\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\uddd6\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\uddd6\u200d\u2640\ufe0f|\ud83e\uddd6\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\uddd6\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\uddd6\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\uddd6\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\uddd6\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\uddd6\u200d\u2642\ufe0f|\ud83e\uddd6\ud83c\udffb|\ud83e\uddd6\ud83c\udffc|\ud83e\uddd6\ud83c\udffd|\ud83e\uddd6\ud83c\udffe|\ud83e\uddd6\ud83c\udfff|\ud83e\uddd6|\ud83e\uddd7\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\uddd7\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\uddd7\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\uddd7\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\uddd7\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\uddd7\u200d\u2640\ufe0f|\ud83e\uddd7\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\uddd7\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\uddd7\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\uddd7\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\uddd7\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\uddd7\u200d\u2642\ufe0f|\ud83e\uddd7\ud83c\udffb|\ud83e\uddd7\ud83c\udffc|\ud83e\uddd7\ud83c\udffd|\ud83e\uddd7\ud83c\udffe|\ud83e\uddd7\ud83c\udfff|\ud83e\uddd7|\ud83e\uddd8\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\uddd8\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\uddd8\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\uddd8\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\uddd8\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\uddd8\u200d\u2640\ufe0f|\ud83e\uddd8\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\uddd8\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\uddd8\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\uddd8\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\uddd8\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\uddd8\u200d\u2642\ufe0f|\ud83e\uddd8\ud83c\udffb|\ud83e\uddd8\ud83c\udffc|\ud83e\uddd8\ud83c\udffd|\ud83e\uddd8\ud83c\udffe|\ud83e\uddd8\ud83c\udfff|\ud83e\uddd8|\ud83e\uddd9\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\uddd9\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\uddd9\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\uddd9\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\uddd9\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\uddd9\u200d\u2640\ufe0f|\ud83e\uddd9\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\uddd9\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\uddd9\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\uddd9\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\uddd9\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\uddd9\u200d\u2642\ufe0f|\ud83e\uddd9\ud83c\udffb|\ud83e\uddd9\ud83c\udffc|\ud83e\uddd9\ud83c\udffd|\ud83e\uddd9\ud83c\udffe|\ud83e\uddd9\ud83c\udfff|\ud83e\uddd9|\ud83e\uddda\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\uddda\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\uddda\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\uddda\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\uddda\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\uddda\u200d\u2640\ufe0f|\ud83e\uddda\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\uddda\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\uddda\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\uddda\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\uddda\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\uddda\u200d\u2642\ufe0f|\ud83e\uddda\ud83c\udffb|\ud83e\uddda\ud83c\udffc|\ud83e\uddda\ud83c\udffd|\ud83e\uddda\ud83c\udffe|\ud83e\uddda\ud83c\udfff|\ud83e\uddda|\ud83e\udddb\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udddb\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udddb\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udddb\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udddb\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udddb\u200d\u2640\ufe0f|\ud83e\udddb\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udddb\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udddb\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udddb\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udddb\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udddb\u200d\u2642\ufe0f|\ud83e\udddb\ud83c\udffb|\ud83e\udddb\ud83c\udffc|\ud83e\udddb\ud83c\udffd|\ud83e\udddb\ud83c\udffe|\ud83e\udddb\ud83c\udfff|\ud83e\udddb|\ud83e\udddc\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udddc\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udddc\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udddc\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udddc\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udddc\u200d\u2640\ufe0f|\ud83e\udddc\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udddc\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udddc\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udddc\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udddc\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udddc\u200d\u2642\ufe0f|\ud83e\udddc\ud83c\udffb|\ud83e\udddc\ud83c\udffc|\ud83e\udddc\ud83c\udffd|\ud83e\udddc\ud83c\udffe|\ud83e\udddc\ud83c\udfff|\ud83e\udddc|\ud83e\udddd\ud83c\udffb\u200d\u2640\ufe0f|\ud83e\udddd\ud83c\udffc\u200d\u2640\ufe0f|\ud83e\udddd\ud83c\udffd\u200d\u2640\ufe0f|\ud83e\udddd\ud83c\udffe\u200d\u2640\ufe0f|\ud83e\udddd\ud83c\udfff\u200d\u2640\ufe0f|\ud83e\udddd\u200d\u2640\ufe0f|\ud83e\udddd\ud83c\udffb\u200d\u2642\ufe0f|\ud83e\udddd\ud83c\udffc\u200d\u2642\ufe0f|\ud83e\udddd\ud83c\udffd\u200d\u2642\ufe0f|\ud83e\udddd\ud83c\udffe\u200d\u2642\ufe0f|\ud83e\udddd\ud83c\udfff\u200d\u2642\ufe0f|\ud83e\udddd\u200d\u2642\ufe0f|\ud83e\udddd\ud83c\udffb|\ud83e\udddd\ud83c\udffc|\ud83e\udddd\ud83c\udffd|\ud83e\udddd\ud83c\udffe|\ud83e\udddd\ud83c\udfff|\ud83e\udddd|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\uddde|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83e\udddf|\ud83e\udde0|\ud83e\udde1|\ud83e\udde2|\ud83e\udde3|\ud83e\udde4|\ud83e\udde5|\ud83e\udde6|\ud83e\udde7|\ud83e\udde8|\ud83e\udde9|\ud83e\uddea|\ud83e\uddeb|\ud83e\uddec|\ud83e\udded|\ud83e\uddee|\ud83e\uddef|\ud83e\uddf0|\ud83e\uddf1|\ud83e\uddf2|\ud83e\uddf3|\ud83e\uddf4|\ud83e\uddf5|\ud83e\uddf6|\ud83e\uddf7|\ud83e\uddf8|\ud83e\uddf9|\ud83e\uddfa|\ud83e\uddfb|\ud83e\uddfc|\ud83e\uddfd|\ud83e\uddfe|\ud83e\uddff|\u203c\ufe0f|\u2049\ufe0f|\u2122\ufe0f|\u2139\ufe0f|\u2194\ufe0f|\u2195\ufe0f|\u2196\ufe0f|\u2197\ufe0f|\u2198\ufe0f|\u2199\ufe0f|\u21a9\ufe0f|\u21aa\ufe0f|\u231a|\u231b|\u2328\ufe0f|\u23cf\ufe0f|\u23e9|\u23ea|\u23eb|\u23ec|\u23ed\ufe0f|\u23ee\ufe0f|\u23ef\ufe0f|\u23f0|\u23f1\ufe0f|\u23f2\ufe0f|\u23f3|\u23f8\ufe0f|\u23f9\ufe0f|\u23fa\ufe0f|\u24c2\ufe0f|\u25aa\ufe0f|\u25ab\ufe0f|\u25b6\ufe0f|\u25c0\ufe0f|\u25fb\ufe0f|\u25fc\ufe0f|\u25fd|\u25fe|\u2600\ufe0f|\u2601\ufe0f|\u2602\ufe0f|\u2603\ufe0f|\u2604\ufe0f|\u260e\ufe0f|\u2611\ufe0f|\u2614|\u2615|\u2618\ufe0f|\u261d\ud83c\udffb|\u261d\ud83c\udffc|\u261d\ud83c\udffd|\u261d\ud83c\udffe|\u261d\ud83c\udfff|\u261d\ufe0f|\u2620\ufe0f|\u2622\ufe0f|\u2623\ufe0f|\u2626\ufe0f|\u262a\ufe0f|\u262e\ufe0f|\u262f\ufe0f|\u2638\ufe0f|\u2639\ufe0f|\u263a\ufe0f|\u2648|\u2649|\u264a|\u264b|\u264c|\u264d|\u264e|\u264f|\u2650|\u2651|\u2652|\u2653|\u2660\ufe0f|\u2663\ufe0f|\u2665\ufe0f|\u2666\ufe0f|\u2668\ufe0f|\u267b\ufe0f|\u267f|\u2692\ufe0f|\u2693|\u2694\ufe0f|\u2696\ufe0f|\u2697\ufe0f|\u2699\ufe0f|\u269b\ufe0f|\u269c\ufe0f|\u26a0\ufe0f|\u26a1|\u26aa|\u26ab|\u26b0\ufe0f|\u26b1\ufe0f|\u26bd|\u26be|\u26c4|\u26c5|\u26c8\ufe0f|\u26ce|\u26cf\ufe0f|\u26d1\ufe0f|\u26d3\ufe0f|\u26d4|\u26e9\ufe0f|\u26ea|\u26f0\ufe0f|\u26f1\ufe0f|\u26f2|\u26f3|\u26f4\ufe0f|\u26f5|\u26f7\ufe0f|\u26f8\ufe0f|\u26f9\ud83c\udffb\u200d\u2640\ufe0f|\u26f9\ud83c\udffc\u200d\u2640\ufe0f|\u26f9\ud83c\udffd\u200d\u2640\ufe0f|\u26f9\ud83c\udffe\u200d\u2640\ufe0f|\u26f9\ud83c\udfff\u200d\u2640\ufe0f|\u26f9\ufe0f\u200d\u2640\ufe0f|\u26f9\ud83c\udffb\u200d\u2642\ufe0f|\u26f9\ud83c\udffc\u200d\u2642\ufe0f|\u26f9\ud83c\udffd\u200d\u2642\ufe0f|\u26f9\ud83c\udffe\u200d\u2642\ufe0f|\u26f9\ud83c\udfff\u200d\u2642\ufe0f|\u26f9\ufe0f\u200d\u2642\ufe0f|\u26f9\ud83c\udffb|\u26f9\ud83c\udffc|\u26f9\ud83c\udffd|\u26f9\ud83c\udffe|\u26f9\ud83c\udfff|\u26f9\ufe0f|\u26fa|\u26fd|\u2702\ufe0f|\u2705|\u2708\ufe0f|\u2709\ufe0f|\u270a\ud83c\udffb|\u270a\ud83c\udffc|\u270a\ud83c\udffd|\u270a\ud83c\udffe|\u270a\ud83c\udfff|\u270a|\u270b\ud83c\udffb|\u270b\ud83c\udffc|\u270b\ud83c\udffd|\u270b\ud83c\udffe|\u270b\ud83c\udfff|\u270b|\u270c\ud83c\udffb|\u270c\ud83c\udffc|\u270c\ud83c\udffd|\u270c\ud83c\udffe|\u270c\ud83c\udfff|\u270c\ufe0f|\u270d\ud83c\udffb|\u270d\ud83c\udffc|\u270d\ud83c\udffd|\u270d\ud83c\udffe|\u270d\ud83c\udfff|\u270d\ufe0f|\u270f\ufe0f|\u2712\ufe0f|\u2714\ufe0f|\u2716\ufe0f|\u271d\ufe0f|\u2721\ufe0f|\u2728|\u2733\ufe0f|\u2734\ufe0f|\u2744\ufe0f|\u2747\ufe0f|\u274c|\u274e|\u2753|\u2754|\u2755|\u2757|\u2763\ufe0f|\u2764\ufe0f|\u2795|\u2796|\u2797|\u27a1\ufe0f|\u27b0|\u27bf|\u2934\ufe0f|\u2935\ufe0f|\u2b05\ufe0f|\u2b06\ufe0f|\u2b07\ufe0f|\u2b1b|\u2b1c|\u2b50|\u2b55|\u3030\ufe0f|\u303d\ufe0f|\u3297\ufe0f|\u3299\ufe0f/g, - - emojiPath: '/luci-static/vssr/emoji/', - - //表情图片的最大尺寸 - maxSize: 20, - - emoji: function(text) { - - //在第一次调用的时候检查浏览器是否支持emoji符号 - var supportEmoji = false, - UA = navigator.userAgent; - - if (UA.match(/Mac\s+OS/i) && !UA.match(/(Chrome|Firefox)/i)) { - supportEmoji = true; - } - - //如果浏览器支持原生的emoji,无需转换,把转换方法置空 - if (supportEmoji) { - Emoji.emoji = function() {}; - - //置空$().emoji()方法 - if (typeof $ !== 'undefined') { - $.fn.emoji = function() {}; - return false; //return false是为了终止$().each()循环 - } - } else { - - //判断屏幕分辨率,如果是高清屏的话使用稍大尺寸的表情图片 - var pixelRatio = parseFloat(window.devicePixelRatio) || 1; - if (pixelRatio > 1.2) { - Emoji.emojiPath += '2x/'; - } - - Emoji.emoji = function(text) { - setTimeout(function() { - Emoji.trans(text); - }, 0); - } - - Emoji.emoji(text); - } - }, - - trans: function(text) { - var isElement, el, fontSize; - if (text.nodeType) { - el = text; - fontSize = (el.currentStyle || window.getComputedStyle(el, ''))['fontSize']; - - //IE浏览器下如果css中的font-size单位不是象素的话,需要转换一下 - if (!/px$/i.test(fontSize)) { - var left = el.style.left; - el.style.left = '1em'; - - fontSize = el.style.pixelLeft; - el.style.left = left; - } - - fontSize = parseFloat(fontSize); - text = el.innerHTML; - isElement = true; - } else { - fontSize = fontSize || 14; - } - - fontSize += 4; - fontSize = Math.min(fontSize, Emoji.maxSize); - - text = text.replace(Emoji.reg, function(code) { - return ''; - }); - - if (isElement) { - el.innerHTML = text; - } - return text; - }, - - //编码转换 - _escapeToUtf32: function(str) { - var escaped = [], - unicodeCodes = Emoji._convertStringToUnicodeCodePoints(str), - i = 0, - l = unicodeCodes.length, - hex; - - for (; i < l; i++) { - hex = unicodeCodes[i].toString(16); - escaped.push('0000'.substr(hex.length) + hex); - } - return escaped.join('-'); - }, - - _convertStringToUnicodeCodePoints: function(str) { - var surrogate1st = 0, - unicodeCodes = [], - i = 0, - l = str.length; - - for (; i < l; i++) { - var utf16Code = str.charCodeAt(i); - if (surrogate1st != 0) { - if (utf16Code >= 0xDC00 && utf16Code <= 0xDFFF) { - var surrogate2nd = utf16Code, - unicodeCode = (surrogate1st - 0xD800) * (1 << 10) + (1 << 16) + (surrogate2nd - 0xDC00); - unicodeCodes.push(unicodeCode); - } - surrogate1st = 0; - } else if (utf16Code >= 0xD800 && utf16Code <= 0xDBFF) { - surrogate1st = utf16Code; - } else { - unicodeCodes.push(utf16Code); - } - } - return unicodeCodes; - } -}; - -if (typeof $ !== 'undefined') { - $.fn.emoji = function() { - this.each(function(index, element) { - Emoji.emoji(element); - }); - }; -} diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1e8.png deleted file mode 100644 index faa8a02b8c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1e9.png deleted file mode 100644 index 23cd3af026..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ea.png deleted file mode 100644 index fe7e5b5fe3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1eb.png deleted file mode 100644 index ee40e8e4cc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ec.png deleted file mode 100644 index 4de58ebd25..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ee.png deleted file mode 100644 index 31e47ef74a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f1.png deleted file mode 100644 index 636e46da12..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f2.png deleted file mode 100644 index 3a6d140114..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f4.png deleted file mode 100644 index 8344286edf..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f6.png deleted file mode 100644 index 63605a0e6f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f7.png deleted file mode 100644 index 4fb998d889..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f8.png deleted file mode 100644 index dcf574f8d0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f9.png deleted file mode 100644 index f00c54d18e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fa.png deleted file mode 100644 index 6d31f93e70..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fc.png deleted file mode 100644 index 19bf7238a4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fd.png deleted file mode 100644 index 91ff29f685..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ff.png deleted file mode 100644 index d49b9a2b5c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e6-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e6.png deleted file mode 100644 index b0044c7d7f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e7.png deleted file mode 100644 index 94738e8933..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e9.png deleted file mode 100644 index b0e4bd4a94..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ea.png deleted file mode 100644 index a894e52d07..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1eb.png deleted file mode 100644 index 4209fa58a2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ec.png deleted file mode 100644 index bb67b7683e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ed.png deleted file mode 100644 index 487fb8d97c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ee.png deleted file mode 100644 index 6f2ad935c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ef.png deleted file mode 100644 index 30a37c9708..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f1.png deleted file mode 100644 index e2c9fab49d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f2.png deleted file mode 100644 index 09a7b4da6a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f3.png deleted file mode 100644 index cef0a9aca0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f4.png deleted file mode 100644 index f4098f4abb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f6.png deleted file mode 100644 index ea680672c6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f7.png deleted file mode 100644 index 789c3274ed..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f8.png deleted file mode 100644 index 98c1a6584c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f9.png deleted file mode 100644 index ccbe85a092..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fb.png deleted file mode 100644 index d5eb143a10..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fc.png deleted file mode 100644 index c4f822123e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fe.png deleted file mode 100644 index 8122c4a1fc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ff.png deleted file mode 100644 index 27b68298e5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e7-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e6.png deleted file mode 100644 index 565f33f945..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e8.png deleted file mode 100644 index 4057654eec..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e9.png deleted file mode 100644 index 80213a74c0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1eb.png deleted file mode 100644 index 159757e6db..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ec.png deleted file mode 100644 index fd86d2e65d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ed.png deleted file mode 100644 index 2bf35a5a87..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ee.png deleted file mode 100644 index 3d029980f4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f0.png deleted file mode 100644 index e281ef381b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f1.png deleted file mode 100644 index 717285d241..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f2.png deleted file mode 100644 index 013b98edbd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f3.png deleted file mode 100644 index b6f2a51d1e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f4.png deleted file mode 100644 index 63db3b3dc0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f5.png deleted file mode 100644 index 425a7aa0c8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f7.png deleted file mode 100644 index 9388a01699..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fa.png deleted file mode 100644 index 8e2d68a657..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fb.png deleted file mode 100644 index 61db7e9a38..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fc.png deleted file mode 100644 index 3be00840c9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fd.png deleted file mode 100644 index 8938d2072f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fe.png deleted file mode 100644 index 7d09551266..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ff.png deleted file mode 100644 index 7ca527f9e5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e8-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ea.png deleted file mode 100644 index 28aa2500f6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ec.png deleted file mode 100644 index 64948d6b2c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ef.png deleted file mode 100644 index 9c86a04d7d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f0.png deleted file mode 100644 index 610bd60bea..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f2.png deleted file mode 100644 index 21dd851703..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f4.png deleted file mode 100644 index deaf9f3011..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ff.png deleted file mode 100644 index c675835bf0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1e9-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1e6.png deleted file mode 100644 index bd93055138..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1e8.png deleted file mode 100644 index 15199fc357..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ea.png deleted file mode 100644 index 9c82ad8429..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ec.png deleted file mode 100644 index a31b9174c1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ed.png deleted file mode 100644 index c2b5b3c1c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f7.png deleted file mode 100644 index 7d75fc1f51..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f8.png deleted file mode 100644 index bd93055138..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f9.png deleted file mode 100644 index 722d9386d3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1fa.png deleted file mode 100644 index 925a3d37e9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ea-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1ee.png deleted file mode 100644 index 771c407a55..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1ef.png deleted file mode 100644 index bbd3d9c073..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f0.png deleted file mode 100644 index 7d1c7c2e83..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f2.png deleted file mode 100644 index b6d8662cf9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f4.png deleted file mode 100644 index 590c150613..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f7.png deleted file mode 100644 index 425a7aa0c8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1eb-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e6.png deleted file mode 100644 index ffcd507913..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e7.png deleted file mode 100644 index 6785b36352..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e9.png deleted file mode 100644 index 441e3c94a7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ea.png deleted file mode 100644 index 96fb7c51bf..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1eb.png deleted file mode 100644 index d9cfee85a5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ec.png deleted file mode 100644 index 968ab2ec03..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ed.png deleted file mode 100644 index 16f6422bf4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ee.png deleted file mode 100644 index 061a661b7b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f1.png deleted file mode 100644 index eaf1dd3fe3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f2.png deleted file mode 100644 index 47385a5284..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f3.png deleted file mode 100644 index c9edce12c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f5.png deleted file mode 100644 index 6f65cb710d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f6.png deleted file mode 100644 index b1c3c04e99..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f7.png deleted file mode 100644 index 47904612ff..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f8.png deleted file mode 100644 index 2b098812bd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f9.png deleted file mode 100644 index 6e1b7dd4d9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fa.png deleted file mode 100644 index 5689c106fc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fc.png deleted file mode 100644 index 20cab82902..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fe.png deleted file mode 100644 index 625dca3683..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ec-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f0.png deleted file mode 100644 index 5b04903f44..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f2.png deleted file mode 100644 index 6d31f93e70..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f3.png deleted file mode 100644 index c0e9dd2e7b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f7.png deleted file mode 100644 index e8a0e6a8de..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f9.png deleted file mode 100644 index e7a11fca2c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1fa.png deleted file mode 100644 index d4ee4e3b81..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ed-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1e8.png deleted file mode 100644 index 0da4f37a4a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1e9.png deleted file mode 100644 index 616f8231a2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1ea.png deleted file mode 100644 index ed6bb257a1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f1.png deleted file mode 100644 index 4d89f52d8d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f2.png deleted file mode 100644 index 3252c6b934..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f3.png deleted file mode 100644 index 9128c6a4c6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f4.png deleted file mode 100644 index 64948d6b2c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f6.png deleted file mode 100644 index 09bc4d34f5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f7.png deleted file mode 100644 index 6e27f7da9c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f8.png deleted file mode 100644 index 95209bcb5c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f9.png deleted file mode 100644 index 06c7fb8d03..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ee-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1ea.png deleted file mode 100644 index 47dd30d300..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f2.png deleted file mode 100644 index 9833d5b03b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f4.png deleted file mode 100644 index d2e5b9607b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f5.png deleted file mode 100644 index 5d8c1f9abf..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ef-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ea.png deleted file mode 100644 index d874ad2529..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ec.png deleted file mode 100644 index 53c8942e56..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ed.png deleted file mode 100644 index 9e6e31435e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ee.png deleted file mode 100644 index feab38befc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f2.png deleted file mode 100644 index b3d620a598..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f3.png deleted file mode 100644 index f5adf9d450..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f5.png deleted file mode 100644 index a94d59cc11..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f7.png deleted file mode 100644 index f15c01763d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1fc.png deleted file mode 100644 index 6d157fa9b2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1fe.png deleted file mode 100644 index 7e542fefa6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ff.png deleted file mode 100644 index 8acd86c96b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f0-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e6.png deleted file mode 100644 index e739f91e9a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e7.png deleted file mode 100644 index f813077a9e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e8.png deleted file mode 100644 index c316b0036c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1ee.png deleted file mode 100644 index 8bcb4a8cfe..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f0.png deleted file mode 100644 index 92f6e3dd7b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f7.png deleted file mode 100644 index 943694f11e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f8.png deleted file mode 100644 index e29d7670be..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f9.png deleted file mode 100644 index c49a555551..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fa.png deleted file mode 100644 index ef6a72b958..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fb.png deleted file mode 100644 index e945d8c84f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fe.png deleted file mode 100644 index 6bd581b8e4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f1-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e6.png deleted file mode 100644 index 99c59e8dd8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e8.png deleted file mode 100644 index 898d890a93..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e9.png deleted file mode 100644 index b626b2df15..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ea.png deleted file mode 100644 index 7f52ed59f8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1eb.png deleted file mode 100644 index 425a7aa0c8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ec.png deleted file mode 100644 index d45122f19e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ed.png deleted file mode 100644 index a49fac3b9d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f0.png deleted file mode 100644 index f657bdbbd2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f1.png deleted file mode 100644 index 81e5516a06..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f2.png deleted file mode 100644 index b928c050b1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f3.png deleted file mode 100644 index 7197afa0a2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f4.png deleted file mode 100644 index ee7b42627f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f5.png deleted file mode 100644 index cd0a5679b2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f6.png deleted file mode 100644 index f43c536aba..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f7.png deleted file mode 100644 index 92869c260f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f8.png deleted file mode 100644 index 5233ad5d93..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f9.png deleted file mode 100644 index e51da01d46..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fa.png deleted file mode 100644 index 25de79cf1f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fb.png deleted file mode 100644 index 50956c8533..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fc.png deleted file mode 100644 index e566e0b604..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fd.png deleted file mode 100644 index b510145e87..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fe.png deleted file mode 100644 index d920272da5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ff.png deleted file mode 100644 index 3e6b2f89bb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f2-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1e6.png deleted file mode 100644 index 6793124a9c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1e8.png deleted file mode 100644 index 0b7faea013..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ea.png deleted file mode 100644 index bea9007a14..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1eb.png deleted file mode 100644 index 16e616b2b1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ec.png deleted file mode 100644 index 1ad3e3774b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ee.png deleted file mode 100644 index 49f89450b3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f1.png deleted file mode 100644 index 29d22babee..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f4.png deleted file mode 100644 index d5eb143a10..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f5.png deleted file mode 100644 index 8ca127aab7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f7.png deleted file mode 100644 index 47f2518eca..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1fa.png deleted file mode 100644 index 944c4f5e5e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ff.png deleted file mode 100644 index 8b85e85841..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f3-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f4-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f4-1f1f2.png deleted file mode 100644 index 7df871fe82..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f4-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1e6.png deleted file mode 100644 index 0b65c0852c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ea.png deleted file mode 100644 index a3f3c0bb64..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1eb.png deleted file mode 100644 index a61e5a5305..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ec.png deleted file mode 100644 index eb929a0c6b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ed.png deleted file mode 100644 index b020a201be..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f0.png deleted file mode 100644 index 04e8a7a734..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f1.png deleted file mode 100644 index 245f39d99c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f2.png deleted file mode 100644 index 1be53add1d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f3.png deleted file mode 100644 index 7108c36e3b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f7.png deleted file mode 100644 index 2d26c64cfe..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f8.png deleted file mode 100644 index c3df16305a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f9.png deleted file mode 100644 index 3acb128e79..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1fc.png deleted file mode 100644 index 0c0bec2584..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1fe.png deleted file mode 100644 index 36f2267050..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f5-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f6-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f6-1f1e6.png deleted file mode 100644 index 2627b95490..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f6-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1ea.png deleted file mode 100644 index 7ce1c48491..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1f4.png deleted file mode 100644 index 2c3d05fb67..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1f8.png deleted file mode 100644 index 09e9bce97f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1fa.png deleted file mode 100644 index d4e5815ddf..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1fc.png deleted file mode 100644 index 70abd09be0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f7-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e6.png deleted file mode 100644 index 54da75cc81..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e7.png deleted file mode 100644 index 66f065a6df..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e8.png deleted file mode 100644 index 2014e174b1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e9.png deleted file mode 100644 index 2ed5601b13..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ea.png deleted file mode 100644 index f0c1f34312..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ec.png deleted file mode 100644 index bda20d7f06..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ed.png deleted file mode 100644 index faa8a02b8c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ee.png deleted file mode 100644 index 97c0ec1c9c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ef.png deleted file mode 100644 index d5eb143a10..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f0.png deleted file mode 100644 index b51438642c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f1.png deleted file mode 100644 index 8902827900..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f2.png deleted file mode 100644 index b9d97a91bc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f3.png deleted file mode 100644 index 64a3bb3512..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f4.png deleted file mode 100644 index 42a2fa30fa..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f7.png deleted file mode 100644 index e72715af22..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f8.png deleted file mode 100644 index da8ea40252..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f9.png deleted file mode 100644 index 8393b2f95a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fb.png deleted file mode 100644 index ce9b35896a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fd.png deleted file mode 100644 index f4036e5354..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fe.png deleted file mode 100644 index 361a02022b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ff.png deleted file mode 100644 index 730784bda2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f8-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e6.png deleted file mode 100644 index faa8a02b8c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e8.png deleted file mode 100644 index e3cc4ef14d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e9.png deleted file mode 100644 index 366f396a0d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1eb.png deleted file mode 100644 index 5b855f9410..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ec.png deleted file mode 100644 index 6172ceadfd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ed.png deleted file mode 100644 index 2a5b0dc64a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ef.png deleted file mode 100644 index 854fb5a719..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f0.png deleted file mode 100644 index 7c37b95ec8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f1.png deleted file mode 100644 index 111d71caee..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f2.png deleted file mode 100644 index 6903a41829..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f3.png deleted file mode 100644 index 53c512261d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f4.png deleted file mode 100644 index cda1fd6cd9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f7.png deleted file mode 100644 index 07cd802a55..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f9.png deleted file mode 100644 index 6d13a9f097..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1fb.png deleted file mode 100644 index 2979b7000c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1fc.png deleted file mode 100644 index 84756cd7e3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ff.png deleted file mode 100644 index b0b09f0a3a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1f9-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1e6.png deleted file mode 100644 index 1b52896f45..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1ec.png deleted file mode 100644 index 60c135b935..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f2.png deleted file mode 100644 index 02fb60837b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f3.png deleted file mode 100644 index ac5e61a458..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f8.png deleted file mode 100644 index 02fb60837b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1fe.png deleted file mode 100644 index 72b1420952..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1ff.png deleted file mode 100644 index a27ac19137..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fa-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1e6.png deleted file mode 100644 index 18d2638def..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1e8.png deleted file mode 100644 index c56de727a9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ea.png deleted file mode 100644 index 4723e99d81..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ec.png deleted file mode 100644 index d706d65158..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ee.png deleted file mode 100644 index 3ff0b3e3a3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1f3.png deleted file mode 100644 index 630c6a17df..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1fa.png deleted file mode 100644 index 5e884dc852..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fb-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fc-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fc-1f1eb.png deleted file mode 100644 index 28f3d7579a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fc-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fc-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fc-1f1f8.png deleted file mode 100644 index 7381d5c1e6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fc-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fd-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fd-1f1f0.png deleted file mode 100644 index 568c3793d7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fd-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fe-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fe-1f1ea.png deleted file mode 100644 index b2fd05b3ac..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fe-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fe-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fe-1f1f9.png deleted file mode 100644 index 2facc45442..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1fe-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1e6.png deleted file mode 100644 index b1ba0fbcf8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1f2.png deleted file mode 100644 index e04f193740..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1fc.png deleted file mode 100644 index 6d988abe2f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/1f1ff-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1e8.png deleted file mode 100644 index 341fa2b9c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1e9.png deleted file mode 100644 index 033d6f7203..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ea.png deleted file mode 100644 index dd44615270..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1eb.png deleted file mode 100644 index ae4adf17d3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ec.png deleted file mode 100644 index ae1cc18fdd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ee.png deleted file mode 100644 index 6b6ed7bd6d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f1.png deleted file mode 100644 index 73e010f406..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f2.png deleted file mode 100644 index 493320adda..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f4.png deleted file mode 100644 index ff1a5bdca5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f6.png deleted file mode 100644 index 5670968c7b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f7.png deleted file mode 100644 index 81515f5c7b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f8.png deleted file mode 100644 index 1a784f03cb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f9.png deleted file mode 100644 index 97cdfc2e4c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fa.png deleted file mode 100644 index e6368dfbe7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fc.png deleted file mode 100644 index 426c56d57e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fd.png deleted file mode 100644 index 8cd7a91346..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ff.png deleted file mode 100644 index 312a22d246..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e6-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e6.png deleted file mode 100644 index a1d3f9ef0b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e7.png deleted file mode 100644 index d2761fb53d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e9.png deleted file mode 100644 index 8e3b224ef5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ea.png deleted file mode 100644 index bece91aff6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1eb.png deleted file mode 100644 index b598991230..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ec.png deleted file mode 100644 index 96e7cb4627..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ed.png deleted file mode 100644 index ff31f299a5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ee.png deleted file mode 100644 index 2760ae1e9b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ef.png deleted file mode 100644 index da5945d28b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f1.png deleted file mode 100644 index 205a6f61bc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f2.png deleted file mode 100644 index 50e8d427b5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f3.png deleted file mode 100644 index 55a62d8bda..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f4.png deleted file mode 100644 index 7f01e760d4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f6.png deleted file mode 100644 index 333ed3b872..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f7.png deleted file mode 100644 index 67878336a5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f8.png deleted file mode 100644 index c4f45f4880..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f9.png deleted file mode 100644 index fbbdf741d7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fb.png deleted file mode 100644 index 376d54ce10..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fc.png deleted file mode 100644 index 2be657eb4e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fe.png deleted file mode 100644 index 92ec5c69c2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ff.png deleted file mode 100644 index b501462636..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e7-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e6.png deleted file mode 100644 index 5a662e7b9c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e8.png deleted file mode 100644 index 5c84010d90..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e9.png deleted file mode 100644 index 6ddbc43eb3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1eb.png deleted file mode 100644 index ddd5b25c6b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ec.png deleted file mode 100644 index 34743afc30..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ed.png deleted file mode 100644 index 5133b05c76..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ee.png deleted file mode 100644 index 7d2971ffef..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f0.png deleted file mode 100644 index 30d886226b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f1.png deleted file mode 100644 index 250f628f14..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f2.png deleted file mode 100644 index 15e645ce4f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f3.png deleted file mode 100644 index 7fc3b99782..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f4.png deleted file mode 100644 index bd58d003d5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f5.png deleted file mode 100644 index a38fc90b5d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f7.png deleted file mode 100644 index 27a26bcd5b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fa.png deleted file mode 100644 index 22d5c60b91..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fb.png deleted file mode 100644 index a9e76620d5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fc.png deleted file mode 100644 index 5a0fefbc9b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fd.png deleted file mode 100644 index 348ea3e880..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fe.png deleted file mode 100644 index 5c46607d53..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ff.png deleted file mode 100644 index 6b6268d102..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e8-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ea.png deleted file mode 100644 index 715e769f59..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ec.png deleted file mode 100644 index 8b5ceb1634..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ef.png deleted file mode 100644 index 7efc1d7e7f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f0.png deleted file mode 100644 index e17e633a08..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f2.png deleted file mode 100644 index e9a2d8b7e5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f4.png deleted file mode 100644 index 918f298afc..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ff.png deleted file mode 100644 index 39bad0426c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1e9-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1e6.png deleted file mode 100644 index 94c0bbade6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1e8.png deleted file mode 100644 index fbcd4b358e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ea.png deleted file mode 100644 index a796574f83..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ec.png deleted file mode 100644 index b8b1bf8878..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ed.png deleted file mode 100644 index 0c3c5b32cd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f7.png deleted file mode 100644 index 14ab334e60..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f8.png deleted file mode 100644 index 94c0bbade6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f9.png deleted file mode 100644 index 422942b52d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1fa.png deleted file mode 100644 index bb1f646f67..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ea-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1ee.png deleted file mode 100644 index 554e09b42c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1ef.png deleted file mode 100644 index a7b9f8c306..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f0.png deleted file mode 100644 index 5b101afa4d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f2.png deleted file mode 100644 index cd6ff315ef..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f4.png deleted file mode 100644 index a0bb1095a3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f7.png deleted file mode 100644 index a38fc90b5d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1eb-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e6.png deleted file mode 100644 index e7480511ce..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e7.png deleted file mode 100644 index 210bfdc827..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e9.png deleted file mode 100644 index 4fdd33ace1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ea.png deleted file mode 100644 index 6d216f4434..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1eb.png deleted file mode 100644 index 6980db433f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ec.png deleted file mode 100644 index cfb9ff80b7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ed.png deleted file mode 100644 index 3db18784b2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ee.png deleted file mode 100644 index 065b4d941a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f1.png deleted file mode 100644 index ea61f3a255..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f2.png deleted file mode 100644 index 276e3ece8a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f3.png deleted file mode 100644 index 6af8d40f22..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f5.png deleted file mode 100644 index 2c3234f358..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f6.png deleted file mode 100644 index 31ede400a0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f7.png deleted file mode 100644 index 102badc1d3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f8.png deleted file mode 100644 index 3f5fbbcb8a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f9.png deleted file mode 100644 index f18acd5004..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fa.png deleted file mode 100644 index d647aa9418..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fc.png deleted file mode 100644 index c884c79f83..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fe.png deleted file mode 100644 index 243446ff7c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ec-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f0.png deleted file mode 100644 index 66b024eb14..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f2.png deleted file mode 100644 index e6368dfbe7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f3.png deleted file mode 100644 index 29bb5c2ebb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f7.png deleted file mode 100644 index 2208282a87..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f9.png deleted file mode 100644 index 2c5ee88111..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1fa.png deleted file mode 100644 index 97e0effd29..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ed-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1e8.png deleted file mode 100644 index 07158ee3ff..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1e9.png deleted file mode 100644 index 272c48327c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1ea.png deleted file mode 100644 index 15f9402b70..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f1.png deleted file mode 100644 index 21e106459a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f2.png deleted file mode 100644 index 08e06f1e33..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f3.png deleted file mode 100644 index e5b7a0af7a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f4.png deleted file mode 100644 index 8b5ceb1634..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f6.png deleted file mode 100644 index 3ffcdeaeff..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f7.png deleted file mode 100644 index 5730ddf985..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f8.png deleted file mode 100644 index 8b1a7e58a1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f9.png deleted file mode 100644 index c506e1435f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ee-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1ea.png deleted file mode 100644 index 0161a48d0d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f2.png deleted file mode 100644 index df3cfa2735..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f4.png deleted file mode 100644 index 37b14fdc13..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f5.png deleted file mode 100644 index a4333eb3ab..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ef-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ea.png deleted file mode 100644 index fdb4665e9c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ec.png deleted file mode 100644 index 0ffcfb2671..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ed.png deleted file mode 100644 index b1e3039f34..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ee.png deleted file mode 100644 index 53fb4ce645..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f2.png deleted file mode 100644 index 0b47a3ca4b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f3.png deleted file mode 100644 index dd91192414..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f5.png deleted file mode 100644 index fb5004f8f1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f7.png deleted file mode 100644 index 5a54c04a2e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1fc.png deleted file mode 100644 index 96b40387f6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1fe.png deleted file mode 100644 index 597de761c7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ff.png deleted file mode 100644 index 2059dbe672..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f0-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e6.png deleted file mode 100644 index 9018b80762..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e7.png deleted file mode 100644 index 07213efb9e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e8.png deleted file mode 100644 index 1117e55aef..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1ee.png deleted file mode 100644 index 494b4d88fa..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f0.png deleted file mode 100644 index 773cb45955..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f7.png deleted file mode 100644 index 44b5d54eb5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f8.png deleted file mode 100644 index 58ef44e307..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f9.png deleted file mode 100644 index 2c2feeb883..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fa.png deleted file mode 100644 index 357183aec0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fb.png deleted file mode 100644 index a75950c43c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fe.png deleted file mode 100644 index e8ca908de7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f1-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e6.png deleted file mode 100644 index 12f33c8b69..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e8.png deleted file mode 100644 index 90caeb9925..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e9.png deleted file mode 100644 index fae294c7ae..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ea.png deleted file mode 100644 index 0c86894628..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1eb.png deleted file mode 100644 index a38fc90b5d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ec.png deleted file mode 100644 index ad06f16f20..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ed.png deleted file mode 100644 index c471d94665..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f0.png deleted file mode 100644 index eaa25467f7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f1.png deleted file mode 100644 index 72acaa40cb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f2.png deleted file mode 100644 index 60648a6ed5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f3.png deleted file mode 100644 index 10c6620f5a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f4.png deleted file mode 100644 index 0494594b8c..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f5.png deleted file mode 100644 index 9982a44e99..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f6.png deleted file mode 100644 index 0efb777861..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f7.png deleted file mode 100644 index 4bc3651b1a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f8.png deleted file mode 100644 index 4cb807b320..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f9.png deleted file mode 100644 index 25af4e4399..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fa.png deleted file mode 100644 index 057174eb62..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fb.png deleted file mode 100644 index ea58bab8ed..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fc.png deleted file mode 100644 index 9193d4efd9..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fd.png deleted file mode 100644 index 25cf242052..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fe.png deleted file mode 100644 index 73bc1ccf40..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ff.png deleted file mode 100644 index 8c508ff892..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f2-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1e6.png deleted file mode 100644 index 65c1e574bd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1e8.png deleted file mode 100644 index 8b0889e30b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ea.png deleted file mode 100644 index a90e429f55..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1eb.png deleted file mode 100644 index dd7825c987..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ec.png deleted file mode 100644 index 233e2138a2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ee.png deleted file mode 100644 index 8eada8f1de..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f1.png deleted file mode 100644 index 97ef065149..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f4.png deleted file mode 100644 index 376d54ce10..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f5.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f5.png deleted file mode 100644 index 8ce273126a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f5.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f7.png deleted file mode 100644 index 5beff23054..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1fa.png deleted file mode 100644 index 9be9671866..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ff.png deleted file mode 100644 index 36d6b7e981..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f3-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f4-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f4-1f1f2.png deleted file mode 100644 index f1179a589b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f4-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1e6.png deleted file mode 100644 index 99c505c6c7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ea.png deleted file mode 100644 index 93e8d3c237..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1eb.png deleted file mode 100644 index 417adb5a7f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ec.png deleted file mode 100644 index 72682a1e4a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ed.png deleted file mode 100644 index 1690029103..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f0.png deleted file mode 100644 index 3b6381cb08..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f1.png deleted file mode 100644 index 2ce903fae4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f2.png deleted file mode 100644 index a7ee9f6f89..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f3.png deleted file mode 100644 index 913d6abb78..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f7.png deleted file mode 100644 index 1eebcae81b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f8.png deleted file mode 100644 index 6c5da09073..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f9.png deleted file mode 100644 index fe5cc0f4b4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1fc.png deleted file mode 100644 index 23a2b895bb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1fe.png deleted file mode 100644 index c7a64017bf..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f5-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f6-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f6-1f1e6.png deleted file mode 100644 index f664e95666..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f6-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1ea.png deleted file mode 100644 index 0d71b17c8a..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1f4.png deleted file mode 100644 index 2d3009c8e1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1f8.png deleted file mode 100644 index ab4f3992db..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1fa.png deleted file mode 100644 index 442178e891..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1fc.png deleted file mode 100644 index 37395d3cd6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f7-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e6.png deleted file mode 100644 index ef049d5d18..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e7.png deleted file mode 100644 index 3f3194b7fb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e8.png deleted file mode 100644 index 5c0b78c456..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e9.png deleted file mode 100644 index b44001bc79..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ea.png deleted file mode 100644 index 423e2a6131..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ec.png deleted file mode 100644 index b6003a9eb1..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ed.png deleted file mode 100644 index 341fa2b9c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ee.png deleted file mode 100644 index 87859111b8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ef.png deleted file mode 100644 index 376d54ce10..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f0.png deleted file mode 100644 index bf1dcda5c6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f1.png deleted file mode 100644 index 66882d7905..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f2.png deleted file mode 100644 index abff75b4cb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f3.png deleted file mode 100644 index 1bca198751..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f4.png deleted file mode 100644 index 5f2558e3e8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f7.png deleted file mode 100644 index 3581c904a7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f8.png deleted file mode 100644 index cadeca31a5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f9.png deleted file mode 100644 index 07bc8253a2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fb.png deleted file mode 100644 index 38cca36c2d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fd.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fd.png deleted file mode 100644 index e4ed3e5e9d..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fd.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fe.png deleted file mode 100644 index e82f0f154e..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ff.png deleted file mode 100644 index cc0dd60206..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f8-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e6.png deleted file mode 100644 index 341fa2b9c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e8.png deleted file mode 100644 index fdd8f0b7ab..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e9.png deleted file mode 100644 index bb663a5534..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1e9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1eb.png deleted file mode 100644 index cb89c3d07b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ec.png deleted file mode 100644 index f5199bbb37..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ed.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ed.png deleted file mode 100644 index 82d0323e45..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ed.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ef.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ef.png deleted file mode 100644 index ec8ad8a0e8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ef.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f0.png deleted file mode 100644 index 5ec8c4ba4f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f1.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f1.png deleted file mode 100644 index 63cae2a3f6..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f1.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f2.png deleted file mode 100644 index 052b31e0c4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f3.png deleted file mode 100644 index 0ec795bab7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f4.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f4.png deleted file mode 100644 index c608a5d378..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f4.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f7.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f7.png deleted file mode 100644 index 53d38703bf..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f7.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f9.png deleted file mode 100644 index 6b03ae0835..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1fb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1fb.png deleted file mode 100644 index 4441cd1021..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1fb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1fc.png deleted file mode 100644 index ada8080c87..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ff.png deleted file mode 100644 index 70ab42d6b2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1f9-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1e6.png deleted file mode 100644 index 4a2c3a3919..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1ec.png deleted file mode 100644 index 5da561de22..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f2.png deleted file mode 100644 index f6fc783d6f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f3.png deleted file mode 100644 index 268e3874a8..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f8.png deleted file mode 100644 index f6fc783d6f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1fe.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1fe.png deleted file mode 100644 index 4a09ec6ca0..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1fe.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1ff.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1ff.png deleted file mode 100644 index 26baf1b9bd..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fa-1f1ff.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1e6.png deleted file mode 100644 index 4d0b196bd5..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1e8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1e8.png deleted file mode 100644 index 6c2f608b13..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1e8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ea.png deleted file mode 100644 index b0dc03fa09..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ec.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ec.png deleted file mode 100644 index 371ec29044..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ec.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ee.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ee.png deleted file mode 100644 index 757551e8de..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1ee.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1f3.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1f3.png deleted file mode 100644 index dc7620aa27..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1f3.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1fa.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1fa.png deleted file mode 100644 index 060678f7fb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fb-1f1fa.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fc-1f1eb.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fc-1f1eb.png deleted file mode 100644 index 29e488c555..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fc-1f1eb.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fc-1f1f8.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fc-1f1f8.png deleted file mode 100644 index 515f71cfec..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fc-1f1f8.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fd-1f1f0.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fd-1f1f0.png deleted file mode 100644 index 9a0f6c1244..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fd-1f1f0.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fe-1f1ea.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fe-1f1ea.png deleted file mode 100644 index 67fa0fec0b..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fe-1f1ea.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fe-1f1f9.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fe-1f1f9.png deleted file mode 100644 index 57824c9530..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1fe-1f1f9.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1e6.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1e6.png deleted file mode 100644 index 44b9bc58ab..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1e6.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1f2.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1f2.png deleted file mode 100644 index 339095c892..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1f2.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1fc.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1fc.png deleted file mode 100644 index 4ece1e5cf4..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/emoji/2x/1f1ff-1f1fc.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ad.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ad.svg deleted file mode 100644 index 7320bf2357..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ad.svg +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ae.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ae.svg deleted file mode 100644 index a7bdb17aa7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ae.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/af.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/af.svg deleted file mode 100644 index 399c1c731f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/af.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ag.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ag.svg deleted file mode 100644 index 24c4c2ee05..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ag.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ai.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ai.svg deleted file mode 100644 index 5c693e53d9..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ai.svg +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/al.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/al.svg deleted file mode 100644 index e831b028a5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/al.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/am.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/am.svg deleted file mode 100644 index 0cd2178158..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/am.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ao.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ao.svg deleted file mode 100644 index a0b6dbbd0f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ao.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/aq.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/aq.svg deleted file mode 100644 index 2000e3c897..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/aq.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ar.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ar.svg deleted file mode 100644 index 4553b08ad8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ar.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/as.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/as.svg deleted file mode 100644 index 3a08877fd6..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/as.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/at.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/at.svg deleted file mode 100644 index e63fb2e207..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/at.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/au.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/au.svg deleted file mode 100644 index 18394ab73b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/au.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/aw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/aw.svg deleted file mode 100644 index 632cdf5621..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/aw.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ax.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ax.svg deleted file mode 100644 index 472a8cd6dd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ax.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/az.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/az.svg deleted file mode 100644 index 4293e9f52f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/az.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ba.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ba.svg deleted file mode 100644 index 3860f34038..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ba.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bb.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bb.svg deleted file mode 100644 index 73f5329131..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bb.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bd.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bd.svg deleted file mode 100644 index 1e3433e5a2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bd.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/be.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/be.svg deleted file mode 100644 index eaf016d084..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/be.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bf.svg deleted file mode 100644 index c92cce6be8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bg.svg deleted file mode 100644 index 15ba696cfc..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bg.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bh.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bh.svg deleted file mode 100644 index ad9a462e2f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bh.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bi.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bi.svg deleted file mode 100644 index 43785625aa..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bi.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bj.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bj.svg deleted file mode 100644 index 1721e1d3f4..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bj.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bl.svg deleted file mode 100644 index ecf6ec4334..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bl.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bm.svg deleted file mode 100644 index 5e2c873da7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bm.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bn.svg deleted file mode 100644 index ab6678fafa..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bn.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bo.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bo.svg deleted file mode 100644 index b6236504c5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bq.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bq.svg deleted file mode 100644 index 4b74eb400a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bq.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/br.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/br.svg deleted file mode 100644 index 3252a8ecc1..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/br.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bs.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bs.svg deleted file mode 100644 index a9d84193e3..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bs.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bt.svg deleted file mode 100644 index f4b6e6360e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bt.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bv.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bv.svg deleted file mode 100644 index cffdc3282a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bv.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bw.svg deleted file mode 100644 index 3d65eda2e2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bw.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/by.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/by.svg deleted file mode 100644 index 2b8656d11d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/by.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bz.svg deleted file mode 100644 index 682495776f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/bz.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ca.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ca.svg deleted file mode 100644 index 4843fc3268..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ca.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cc.svg deleted file mode 100644 index 2c456980de..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cc.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cd.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cd.svg deleted file mode 100644 index 739fab774c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cd.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cf.svg deleted file mode 100644 index b4a2125b52..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cf.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cg.svg deleted file mode 100644 index 6347e42cd2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cg.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ch.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ch.svg deleted file mode 100644 index f5ec8d4620..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ch.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ci.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ci.svg deleted file mode 100644 index 2bd7104743..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ci.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ck.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ck.svg deleted file mode 100644 index e4f0d0c4ca..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ck.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cl.svg deleted file mode 100644 index 04756f51b0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cl.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cm.svg deleted file mode 100644 index b4272b7d5d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cm.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cn.svg deleted file mode 100644 index 72080b6b05..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cn.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/co.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/co.svg deleted file mode 100644 index 0d74127a27..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/co.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cr.svg deleted file mode 100644 index 133b02939a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cr.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cu.svg deleted file mode 100644 index aabb4149a0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cu.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cv.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cv.svg deleted file mode 100644 index 408f1cf952..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cv.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cw.svg deleted file mode 100644 index e223a5dc6e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cw.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cx.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cx.svg deleted file mode 100644 index f5b89b7dc2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cx.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cy.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cy.svg deleted file mode 100644 index 3d483a12cf..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cy.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cz.svg deleted file mode 100644 index 93528eafc0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/cz.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/de.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/de.svg deleted file mode 100644 index 1acf302d3f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/de.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dj.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dj.svg deleted file mode 100644 index 0604f5406f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dj.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dk.svg deleted file mode 100644 index ab47e0cb9d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dk.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dm.svg deleted file mode 100644 index eb98459a3e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dm.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/do.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/do.svg deleted file mode 100644 index b6236504c5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/do.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dz.svg deleted file mode 100644 index aa4eca2b94..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/dz.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ec.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ec.svg deleted file mode 100644 index 42fbef52f8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ec.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ee.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ee.svg deleted file mode 100644 index aa917bbe62..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ee.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eg.svg deleted file mode 100644 index a755cd71bb..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eg.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eh.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eh.svg deleted file mode 100644 index a4bef6597c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eh.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/er.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/er.svg deleted file mode 100644 index 7a2579826f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/er.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/es-ca.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/es-ca.svg deleted file mode 100644 index fc7c2e8c32..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/es-ca.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/es.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/es.svg deleted file mode 100644 index 576dd67cbc..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/es.svg +++ /dev/null @@ -1,544 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/et.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/et.svg deleted file mode 100644 index 5ac684da16..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/et.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eu.svg deleted file mode 100644 index b6a39f5ffe..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/eu.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fi.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fi.svg deleted file mode 100644 index c3451a4763..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fi.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fj.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fj.svg deleted file mode 100644 index c7549b5627..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fj.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fk.svg deleted file mode 100644 index 28ad70271c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fk.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fm.svg deleted file mode 100644 index 1e641adf72..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fm.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fo.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fo.svg deleted file mode 100644 index ea71332289..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fo.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fr.svg deleted file mode 100644 index 712c8a5db2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/fr.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ga.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ga.svg deleted file mode 100644 index 1f0a9ca2e2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ga.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-eng.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-eng.svg deleted file mode 100644 index eab52bd59b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-eng.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-nir.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-nir.svg deleted file mode 100644 index e043b3e396..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-nir.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-sct.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-sct.svg deleted file mode 100644 index 169bfba4a0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-sct.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-wls.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-wls.svg deleted file mode 100644 index 48a642054e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb-wls.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb.svg deleted file mode 100644 index 132dbedbe7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gb.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gd.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gd.svg deleted file mode 100644 index f2254f34f3..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gd.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ge.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ge.svg deleted file mode 100644 index 8abdee3052..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ge.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gf.svg deleted file mode 100644 index e38288378a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gg.svg deleted file mode 100644 index deb4af5a61..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gg.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gh.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gh.svg deleted file mode 100644 index 3f97834499..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gh.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gi.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gi.svg deleted file mode 100644 index 1b44fd6f56..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gi.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gl.svg deleted file mode 100644 index 20f5c5eee1..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gl.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gm.svg deleted file mode 100644 index 14c329d958..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gm.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gn.svg deleted file mode 100644 index 7841e8d077..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gn.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gp.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gp.svg deleted file mode 100644 index 24a8260246..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gp.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gq.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gq.svg deleted file mode 100644 index 4cec1a525b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gq.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gr.svg deleted file mode 100644 index 581af28539..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gr.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gs.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gs.svg deleted file mode 100644 index 6833555191..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gs.svg +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - L - - - E - - - O - - - T - - - E - - - R - - - R - - - R - - - R - - - R - - - E - - - O - - - O - - - A - - - A - - - A - - - M - - - P - - - P - - - P - - - I - - - T - - - T - - - M - - - G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gt.svg deleted file mode 100644 index 724e9702ad..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gt.svg +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gu.svg deleted file mode 100644 index 00e8615186..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gu.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - G - - - U - - - A - - - M - - - - - - - - G - - - U - - - A - - - M - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gw.svg deleted file mode 100644 index ae173140bd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gw.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gy.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gy.svg deleted file mode 100644 index e957f3ef9d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/gy.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hk.svg deleted file mode 100644 index 127a17b270..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hk.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hm.svg deleted file mode 100644 index a9dda07405..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hm.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hn.svg deleted file mode 100644 index 47af518ed9..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hn.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hr.svg deleted file mode 100644 index 7b699d33c5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hr.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ht.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ht.svg deleted file mode 100644 index 14f67d7885..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ht.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hu.svg deleted file mode 100644 index 177da97a9e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/hu.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/id.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/id.svg deleted file mode 100644 index 0663baffac..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/id.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ie.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ie.svg deleted file mode 100644 index 53f3464317..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ie.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/il.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/il.svg deleted file mode 100644 index f18761bb0d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/il.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/im.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/im.svg deleted file mode 100644 index 2e63261316..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/im.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/in.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/in.svg deleted file mode 100644 index 6b831bcfff..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/in.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/io.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/io.svg deleted file mode 100644 index 2d7f8d8aec..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/io.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/iq.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/iq.svg deleted file mode 100644 index ab90fd01c8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/iq.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ir.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ir.svg deleted file mode 100644 index 11b444ccec..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ir.svg +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/is.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/is.svg deleted file mode 100644 index d949b1b0ab..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/is.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/it.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/it.svg deleted file mode 100644 index 5cb92aaaf4..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/it.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/je.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/je.svg deleted file mode 100644 index 3f837166cf..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/je.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jm.svg deleted file mode 100644 index 535daf44bf..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jm.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jo.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jo.svg deleted file mode 100644 index ae2bc08814..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jp.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jp.svg deleted file mode 100644 index 9479103604..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/jp.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ke.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ke.svg deleted file mode 100644 index c1fd2d8e85..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ke.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kg.svg deleted file mode 100644 index 5815415500..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kg.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kh.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kh.svg deleted file mode 100644 index 7cd890aa65..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kh.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ki.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ki.svg deleted file mode 100644 index 3523f4d8bb..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ki.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/km.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/km.svg deleted file mode 100644 index cfabd68f16..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/km.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kn.svg deleted file mode 100644 index 1a753c0094..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kn.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kp.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kp.svg deleted file mode 100644 index b9a50d096b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kp.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kr.svg deleted file mode 100644 index 31e0af8a0b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kr.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kw.svg deleted file mode 100644 index f404da2b76..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kw.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ky.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ky.svg deleted file mode 100644 index 1a2d9c9a9f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ky.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kz.svg deleted file mode 100644 index 049d6fdb24..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/kz.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/la.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/la.svg deleted file mode 100644 index c327457faa..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/la.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lb.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lb.svg deleted file mode 100644 index dbd88a7454..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lb.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lc.svg deleted file mode 100644 index 8ba746c5e3..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lc.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/li.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/li.svg deleted file mode 100644 index 6b4160c813..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/li.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lk.svg deleted file mode 100644 index 4a377f1564..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lk.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lr.svg deleted file mode 100644 index f27437d04c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lr.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ls.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ls.svg deleted file mode 100644 index 5dd5b0c3da..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ls.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lt.svg deleted file mode 100644 index 36e30e9ebe..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lt.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lu.svg deleted file mode 100644 index bf6ca16706..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lu.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lv.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lv.svg deleted file mode 100644 index efa5a3286e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/lv.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ly.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ly.svg deleted file mode 100644 index d4159ad60f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ly.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ma.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ma.svg deleted file mode 100644 index 8de40777a0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ma.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mc.svg deleted file mode 100644 index 45133dcb9a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mc.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/md.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/md.svg deleted file mode 100644 index a86be9099b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/md.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/me.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/me.svg deleted file mode 100644 index 613083fff4..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/me.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mf.svg deleted file mode 100644 index bf46785ccd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mg.svg deleted file mode 100644 index 76e84fc47e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mg.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mh.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mh.svg deleted file mode 100644 index f74e99d721..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mh.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mk.svg deleted file mode 100644 index 1f1eaf6841..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mk.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ml.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ml.svg deleted file mode 100644 index 66da1bb95b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ml.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mm.svg deleted file mode 100644 index c77927ec6f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mm.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mn.svg deleted file mode 100644 index 6c6297327f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mn.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mo.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mo.svg deleted file mode 100644 index ece1a24cac..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mp.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mp.svg deleted file mode 100644 index 62961da504..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mp.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mq.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mq.svg deleted file mode 100644 index b389d4390c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mq.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mr.svg deleted file mode 100644 index b53ce61a34..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mr.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ms.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ms.svg deleted file mode 100644 index 579686357a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ms.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mt.svg deleted file mode 100644 index 93fe67b7f2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mt.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mu.svg deleted file mode 100644 index 102ed3be21..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mu.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mv.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mv.svg deleted file mode 100644 index 2525c92362..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mv.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mw.svg deleted file mode 100644 index 5bd17f8908..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mw.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mx.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mx.svg deleted file mode 100644 index 7de1b66a76..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mx.svg +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/my.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/my.svg deleted file mode 100644 index a08f085985..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/my.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mz.svg deleted file mode 100644 index f820a5814e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/mz.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/na.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/na.svg deleted file mode 100644 index edc0a8b848..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/na.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nc.svg deleted file mode 100644 index 4a2ac30c42..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nc.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ne.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ne.svg deleted file mode 100644 index f4709078d0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ne.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nf.svg deleted file mode 100644 index 46d7e8fda0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nf.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ng.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ng.svg deleted file mode 100644 index 42ee5ad4f2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ng.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ni.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ni.svg deleted file mode 100644 index 3b699f4caa..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ni.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nl.svg deleted file mode 100644 index 2026937204..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nl.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/no.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/no.svg deleted file mode 100644 index 56e78e153a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/no.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/np.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/np.svg deleted file mode 100644 index df24df239b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/np.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nr.svg deleted file mode 100644 index f7a4feb726..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nr.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nu.svg deleted file mode 100644 index aace90bf84..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nu.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nz.svg deleted file mode 100644 index 2a14e8b958..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/nz.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/om.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/om.svg deleted file mode 100644 index 8ddf3e6657..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/om.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pa.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pa.svg deleted file mode 100644 index cf758e8606..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pa.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pe.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pe.svg deleted file mode 100644 index b3603aa9b2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pe.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pf.svg deleted file mode 100644 index 6cd4b0923d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pf.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pg.svg deleted file mode 100644 index 5fb0cd58e0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pg.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ph.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ph.svg deleted file mode 100644 index a0c37d835d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ph.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pk.svg deleted file mode 100644 index a91a78cdb7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pk.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pl.svg deleted file mode 100644 index c00513a2c3..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pl.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pm.svg deleted file mode 100644 index 07ea24cc1a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pm.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pn.svg deleted file mode 100644 index 543c019026..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pn.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pr.svg deleted file mode 100644 index 041377bebd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pr.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ps.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ps.svg deleted file mode 100644 index 2827d2ae39..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ps.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pt.svg deleted file mode 100644 index fa9621f2a0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pt.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pw.svg deleted file mode 100644 index 19f42b48ca..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/pw.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/py.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/py.svg deleted file mode 100644 index 1402520914..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/py.svg +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/qa.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/qa.svg deleted file mode 100644 index 0f93a9d028..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/qa.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/re.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/re.svg deleted file mode 100644 index 827103b181..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/re.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ro.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ro.svg deleted file mode 100644 index d43c1e26eb..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ro.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/rs.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/rs.svg deleted file mode 100644 index b6236504c5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/rs.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ru.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ru.svg deleted file mode 100644 index f56fddb910..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ru.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/rw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/rw.svg deleted file mode 100644 index afed4e3e29..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/rw.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sa.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sa.svg deleted file mode 100644 index b5e879831a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sa.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sb.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sb.svg deleted file mode 100644 index 49903aebc7..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sb.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sc.svg deleted file mode 100644 index 3229f9d5d5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sc.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sd.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sd.svg deleted file mode 100644 index 30fe44626a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sd.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/se.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/se.svg deleted file mode 100644 index 9079f31798..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/se.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sg.svg deleted file mode 100644 index 6c9d024920..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sg.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sh.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sh.svg deleted file mode 100644 index a768813fc9..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sh.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/si.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/si.svg deleted file mode 100644 index c628efd452..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/si.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sj.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sj.svg deleted file mode 100644 index 8e5d104afa..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sj.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sk.svg deleted file mode 100644 index 3d9ea2747c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sk.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sl.svg deleted file mode 100644 index 51e2676be8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sl.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sm.svg deleted file mode 100644 index dbe605edce..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sm.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - L - - - I - - - B - - - E - - - R - - - T - - - A - - - S - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sn.svg deleted file mode 100644 index c06616fc93..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sn.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/so.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/so.svg deleted file mode 100644 index ab104385e2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/so.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sr.svg deleted file mode 100644 index 9a169fd9b5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sr.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ss.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ss.svg deleted file mode 100644 index 4efa598662..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ss.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/st.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/st.svg deleted file mode 100644 index a6bd2187ba..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/st.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sv.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sv.svg deleted file mode 100644 index d15caac37c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sv.svg +++ /dev/null @@ -1,594 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sx.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sx.svg deleted file mode 100644 index 9d30a5fe40..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sx.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sy.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sy.svg deleted file mode 100644 index b30a3ba9c0..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sy.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sz.svg deleted file mode 100644 index ca6ec3c557..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/sz.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tc.svg deleted file mode 100644 index a78d1fed8e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tc.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/td.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/td.svg deleted file mode 100644 index 734473e71c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/td.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tf.svg deleted file mode 100644 index 3913728c44..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tf.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tg.svg deleted file mode 100644 index 1824e0be7d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tg.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/th.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/th.svg deleted file mode 100644 index 66fcd8edd9..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/th.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tj.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tj.svg deleted file mode 100644 index 92ac160ad2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tj.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tk.svg deleted file mode 100644 index 312e881189..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tk.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tl.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tl.svg deleted file mode 100644 index 87e47310d4..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tl.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tm.svg deleted file mode 100644 index 9c3ccbf27c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tm.svg +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tn.svg deleted file mode 100644 index 048efb5f3e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tn.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/to.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/to.svg deleted file mode 100644 index 4dd38e419a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/to.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tr.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tr.svg deleted file mode 100644 index f1910ee356..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tr.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tt.svg deleted file mode 100644 index 19add52172..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tt.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tv.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tv.svg deleted file mode 100644 index 7ce20085f5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tv.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tw.svg deleted file mode 100644 index 71f6ce232e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tw.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tz.svg deleted file mode 100644 index 5305034304..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/tz.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ua.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ua.svg deleted file mode 100644 index a93d06db8c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ua.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ug.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ug.svg deleted file mode 100644 index 2945aff78a..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ug.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/um.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/um.svg deleted file mode 100644 index 4f74e79117..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/um.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/un.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/un.svg deleted file mode 100644 index b6236504c5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/un.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/us.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/us.svg deleted file mode 100644 index 5b552671e8..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/us.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/uy.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/uy.svg deleted file mode 100644 index bad58e5c2f..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/uy.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/uz.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/uz.svg deleted file mode 100644 index 3ede7f16a2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/uz.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/va.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/va.svg deleted file mode 100644 index b6236504c5..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/va.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vc.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vc.svg deleted file mode 100644 index 99ba90f2a3..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vc.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ve.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ve.svg deleted file mode 100644 index 98ef473c81..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ve.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vg.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vg.svg deleted file mode 100644 index e701c8ba8d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vg.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vi.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vi.svg deleted file mode 100644 index db0e62c478..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vi.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vn.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vn.svg deleted file mode 100644 index b0fcc9f7dd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vn.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vu.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vu.svg deleted file mode 100644 index ccdbd1e011..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/vu.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/wf.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/wf.svg deleted file mode 100644 index 9d43586b31..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/wf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ws.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ws.svg deleted file mode 100644 index 1b3ecf46b2..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ws.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/xk.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/xk.svg deleted file mode 100644 index 7e41b1d2b3..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/xk.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ye.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ye.svg deleted file mode 100644 index 1befdeca24..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/ye.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/yt.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/yt.svg deleted file mode 100644 index f198fff42b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/yt.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/za.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/za.svg deleted file mode 100644 index ef1f2652c4..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/za.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/zm.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/zm.svg deleted file mode 100644 index 9a54bcc54b..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/zm.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/zw.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/zw.svg deleted file mode 100644 index 82e36ec41e..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/flags/4x3/zw.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/client.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/client.svg deleted file mode 100644 index 8fd0682abc..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/client.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/pdnsd.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/pdnsd.svg deleted file mode 100644 index f39d9f5b04..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/pdnsd.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.png deleted file mode 100644 index 18ff985123..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_01.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.png deleted file mode 100644 index 0b81a690ec..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_02.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.png deleted file mode 100644 index 19bf4227c3..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_03.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.png deleted file mode 100644 index b8fe2861e2..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon1_04.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.png deleted file mode 100644 index 44e896b799..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_01.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.png deleted file mode 100644 index 31cb09301f..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_02.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.png deleted file mode 100644 index ead6082ce7..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_03.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.png deleted file mode 100644 index 9f821e0cfb..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/site_icon_04.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/socks5.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/socks5.svg deleted file mode 100644 index 7208fd628d..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/socks5.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/switch.png b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/switch.png deleted file mode 100644 index 901e2d75aa..0000000000 Binary files a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/switch.png and /dev/null differ diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/udp.svg b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/udp.svg deleted file mode 100644 index b640aca05c..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/img/udp.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/polyfill.js b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/polyfill.js deleted file mode 100644 index 14e9eedafd..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/polyfill.js +++ /dev/null @@ -1,301 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory() : - typeof define === 'function' && define.amd ? define(factory) : - (factory()); -}(this, (function () { 'use strict'; - -/** - * @this {Promise} - */ -function finallyConstructor(callback) { - var constructor = this.constructor; - return this.then( - function(value) { - // @ts-ignore - return constructor.resolve(callback()).then(function() { - return value; - }); - }, - function(reason) { - // @ts-ignore - return constructor.resolve(callback()).then(function() { - // @ts-ignore - return constructor.reject(reason); - }); - } - ); -} - -// Store setTimeout reference so promise-polyfill will be unaffected by -// other code modifying setTimeout (like sinon.useFakeTimers()) -var setTimeoutFunc = setTimeout; - -function isArray(x) { - return Boolean(x && typeof x.length !== 'undefined'); -} - -function noop() {} - -// Polyfill for Function.prototype.bind -function bind(fn, thisArg) { - return function() { - fn.apply(thisArg, arguments); - }; -} - -/** - * @constructor - * @param {Function} fn - */ -function Promise(fn) { - if (!(this instanceof Promise)) - throw new TypeError('Promises must be constructed via new'); - if (typeof fn !== 'function') throw new TypeError('not a function'); - /** @type {!number} */ - this._state = 0; - /** @type {!boolean} */ - this._handled = false; - /** @type {Promise|undefined} */ - this._value = undefined; - /** @type {!Array} */ - this._deferreds = []; - - doResolve(fn, this); -} - -function handle(self, deferred) { - while (self._state === 3) { - self = self._value; - } - if (self._state === 0) { - self._deferreds.push(deferred); - return; - } - self._handled = true; - Promise._immediateFn(function() { - var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; - if (cb === null) { - (self._state === 1 ? resolve : reject)(deferred.promise, self._value); - return; - } - var ret; - try { - ret = cb(self._value); - } catch (e) { - reject(deferred.promise, e); - return; - } - resolve(deferred.promise, ret); - }); -} - -function resolve(self, newValue) { - try { - // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure - if (newValue === self) - throw new TypeError('A promise cannot be resolved with itself.'); - if ( - newValue && - (typeof newValue === 'object' || typeof newValue === 'function') - ) { - var then = newValue.then; - if (newValue instanceof Promise) { - self._state = 3; - self._value = newValue; - finale(self); - return; - } else if (typeof then === 'function') { - doResolve(bind(then, newValue), self); - return; - } - } - self._state = 1; - self._value = newValue; - finale(self); - } catch (e) { - reject(self, e); - } -} - -function reject(self, newValue) { - self._state = 2; - self._value = newValue; - finale(self); -} - -function finale(self) { - if (self._state === 2 && self._deferreds.length === 0) { - Promise._immediateFn(function() { - if (!self._handled) { - Promise._unhandledRejectionFn(self._value); - } - }); - } - - for (var i = 0, len = self._deferreds.length; i < len; i++) { - handle(self, self._deferreds[i]); - } - self._deferreds = null; -} - -/** - * @constructor - */ -function Handler(onFulfilled, onRejected, promise) { - this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; - this.onRejected = typeof onRejected === 'function' ? onRejected : null; - this.promise = promise; -} - -/** - * Take a potentially misbehaving resolver function and make sure - * onFulfilled and onRejected are only called once. - * - * Makes no guarantees about asynchrony. - */ -function doResolve(fn, self) { - var done = false; - try { - fn( - function(value) { - if (done) return; - done = true; - resolve(self, value); - }, - function(reason) { - if (done) return; - done = true; - reject(self, reason); - } - ); - } catch (ex) { - if (done) return; - done = true; - reject(self, ex); - } -} - -Promise.prototype['catch'] = function(onRejected) { - return this.then(null, onRejected); -}; - -Promise.prototype.then = function(onFulfilled, onRejected) { - // @ts-ignore - var prom = new this.constructor(noop); - - handle(this, new Handler(onFulfilled, onRejected, prom)); - return prom; -}; - -Promise.prototype['finally'] = finallyConstructor; - -Promise.all = function(arr) { - return new Promise(function(resolve, reject) { - if (!isArray(arr)) { - return reject(new TypeError('Promise.all accepts an array')); - } - - var args = Array.prototype.slice.call(arr); - if (args.length === 0) return resolve([]); - var remaining = args.length; - - function res(i, val) { - try { - if (val && (typeof val === 'object' || typeof val === 'function')) { - var then = val.then; - if (typeof then === 'function') { - then.call( - val, - function(val) { - res(i, val); - }, - reject - ); - return; - } - } - args[i] = val; - if (--remaining === 0) { - resolve(args); - } - } catch (ex) { - reject(ex); - } - } - - for (var i = 0; i < args.length; i++) { - res(i, args[i]); - } - }); -}; - -Promise.resolve = function(value) { - if (value && typeof value === 'object' && value.constructor === Promise) { - return value; - } - - return new Promise(function(resolve) { - resolve(value); - }); -}; - -Promise.reject = function(value) { - return new Promise(function(resolve, reject) { - reject(value); - }); -}; - -Promise.race = function(arr) { - return new Promise(function(resolve, reject) { - if (!isArray(arr)) { - return reject(new TypeError('Promise.race accepts an array')); - } - - for (var i = 0, len = arr.length; i < len; i++) { - Promise.resolve(arr[i]).then(resolve, reject); - } - }); -}; - -// Use polyfill for setImmediate for performance gains -Promise._immediateFn = - // @ts-ignore - (typeof setImmediate === 'function' && - function(fn) { - // @ts-ignore - setImmediate(fn); - }) || - function(fn) { - setTimeoutFunc(fn, 0); - }; - -Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { - if (typeof console !== 'undefined' && console) { - console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console - } -}; - -/** @suppress {undefinedVars} */ -var globalNS = (function() { - // the only reliable means to get the global object is - // `Function('return this')()` - // However, this causes CSP violations in Chrome apps. - if (typeof self !== 'undefined') { - return self; - } - if (typeof window !== 'undefined') { - return window; - } - if (typeof global !== 'undefined') { - return global; - } - throw new Error('unable to locate global object'); -})(); - -if (!('Promise' in globalNS)) { - globalNS['Promise'] = Promise; -} else if (!globalNS.Promise.prototype['finally']) { - globalNS.Promise.prototype['finally'] = finallyConstructor; -} - -}))); diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/sweetalert.js b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/sweetalert.js deleted file mode 100644 index 6079cb0fef..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/sweetalert.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sweetalert2=e()}(this,function(){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;nt.clientHeight)}function ct(t){var e=window.getComputedStyle(t),n=parseFloat(e.getPropertyValue("animation-duration")||"0"),o=parseFloat(e.getPropertyValue("transition-duration")||"0");return 0\n
\n
    \n
    \n
    \n
    \n
    \n
    \n \n

    \n \n
    \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n').replace(/(^|\n)\s*/g,""),yt=function(t){var e,n,o,i,r,a,c,s,u,l,d,p,f,m,h,g=!!(e=Q())&&(e.parentNode.removeChild(e),ht([document.documentElement,document.body],[Y["no-backdrop"],Y["toast-shown"],Y["has-column"]]),!0);ut()?F("SweetAlert2 requires document to initialize"):((n=document.createElement("div")).className=Y.container,g&&mt(n,Y["no-transition"]),H(n,bt),(o="string"==typeof(i=t.target)?document.querySelector(i):i).appendChild(n),r=t,(a=$()).setAttribute("role",r.toast?"alert":"dialog"),a.setAttribute("aria-live",r.toast?"polite":"assertive"),r.toast||a.setAttribute("aria-modal","true"),c=o,"rtl"===window.getComputedStyle(c).direction&&mt(Q(),Y.rtl),s=P(),u=gt(s,Y.input),l=gt(s,Y.file),d=s.querySelector(".".concat(Y.range," input")),p=s.querySelector(".".concat(Y.range," output")),f=gt(s,Y.select),m=s.querySelector(".".concat(Y.checkbox," input")),h=gt(s,Y.textarea),u.oninput=lt,l.onchange=lt,f.onchange=lt,m.onchange=lt,h.oninput=lt,d.oninput=function(t){lt(t),p.value=d.value},d.onchange=function(t){lt(t),d.nextSibling.value=d.value})},wt=function(t,e){t.jquery?Ct(e,t):H(e,t.toString())},Ct=function(t,e){if(t.textContent="",0 in e)for(var n=0;n in e;n++)t.appendChild(e[n].cloneNode(!0));else t.appendChild(e.cloneNode(!0))},kt=function(){if(ut())return!1;var t=document.createElement("div"),e={WebkitAnimation:"webkitAnimationEnd",OAnimation:"oAnimationEnd oanimationend",animation:"animationend"};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&void 0!==t.style[n])return e[n];return!1}();function xt(t,e,n){var o;rt(t,n["show".concat((o=e).charAt(0).toUpperCase()+o.slice(1),"Button")],"inline-block"),H(t,n["".concat(e,"ButtonText")]),t.setAttribute("aria-label",n["".concat(e,"ButtonAriaLabel")]),t.className=Y[e],N(t,n,"".concat(e,"Button")),mt(t,n["".concat(e,"ButtonClass")])}function Pt(t,e){var n,o,i,r,a,c,s,u,l=Q();l&&(n=l,"string"==typeof(o=e.backdrop)?n.style.background=o:o||mt([document.documentElement,document.body],Y["no-backdrop"]),!e.backdrop&&e.allowOutsideClick&&_('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'),i=l,(r=e.position)in Y?mt(i,Y[r]):(_('The "position" parameter is not valid, defaulting to "center"'),mt(i,Y.center)),a=l,!(c=e.grow)||"string"!=typeof c||(s="grow-".concat(c))in Y&&mt(a,Y[s]),N(l,e,"container"),(u=document.body.getAttribute("data-swal2-queue-step"))&&(l.setAttribute("data-queue-step",u),document.body.removeAttribute("data-swal2-queue-step")))}function At(t,e){t.placeholder&&!e.inputPlaceholder||(t.placeholder=e.inputPlaceholder)}var Bt={promise:new WeakMap,innerParams:new WeakMap,domCache:new WeakMap},St=["input","file","range","select","radio","checkbox","textarea"],Et=function(t){if(!jt[t.input])return F('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(t.input,'"'));var e=Lt(t.input),n=jt[t.input](e,t);ot(n),setTimeout(function(){tt(n)})},Ot=function(t,e){var n=G(P(),t);if(n)for(var o in!function(t){for(var e=0;e=s.progressSteps.length&&_("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"),s.progressSteps.forEach(function(t,e){var n,o,i,r,a,c=(n=t,o=document.createElement("li"),mt(o,Y["progress-step"]),H(o,n),o);u.appendChild(c),e===l&&mt(c,Y["active-progress-step"]),e!==s.progressSteps.length-1&&(r=s,a=document.createElement("li"),mt(a,Y["progress-step-line"]),r.progressStepsDistance&&(a.style.width=r.progressStepsDistance),i=a,u.appendChild(i))})}function Mt(t,e){var n,o,i,r,a,c,s,u,l=L();N(l,e,"header"),Vt(0,e),n=t,o=e,(r=Bt.innerParams.get(n))&&o.icon===r.icon&&k()?N(k(),o,"icon"):(Dt(),o.icon&&(-1!==Object.keys(Z).indexOf(o.icon)?(i=C(".".concat(Y.icon,".").concat(Z[o.icon])),ot(i),Ut(i,o),Nt(),N(i,o,"icon"),mt(i,o.showClass.icon)):F('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(o.icon,'"')))),function(t){var e=A();if(!t.imageUrl)return it(e);ot(e,""),e.setAttribute("src",t.imageUrl),e.setAttribute("alt",t.imageAlt),nt(e,"width",t.imageWidth),nt(e,"height",t.imageHeight),e.className=Y.image,N(e,t,"image")}(e),a=e,c=x(),rt(c,a.title||a.titleText),a.title&&dt(a.title,c),a.titleText&&(c.innerText=a.titleText),N(c,a,"title"),s=e,u=I(),H(u,s.closeButtonHtml),N(u,s,"closeButton"),rt(u,s.showCloseButton),u.setAttribute("aria-label",s.closeButtonAriaLabel)}function Rt(t,e){var n,o,i,r;n=e,o=$(),nt(o,"width",n.width),nt(o,"padding",n.padding),n.background&&(o.style.background=n.background),zt(o,n),Pt(0,e),Mt(t,e),qt(t,e),pt(0,e),i=e,r=j(),rt(r,i.footer),i.footer&&dt(i.footer,r),N(r,i,"footer"),"function"==typeof e.onRender&&e.onRender($())}function Ht(){return E()&&E().click()}var Dt=function(){for(var t=n(),e=0;e\n \n
    \n
    \n '):"error"===e.icon?H(t,'\n \n \n \n \n '):H(t,_t({question:"?",warning:"!",info:"i"}[e.icon]))},_t=function(t){return'
    ').concat(t,"
    ")},Ft=[],zt=function(t,e){t.className="".concat(Y.popup," ").concat(vt(t)?e.showClass.popup:""),e.toast?(mt([document.documentElement,document.body],Y["toast-shown"]),mt(t,Y.toast)):mt(t,Y.modal),N(t,e,"popup"),"string"==typeof e.customClass&&mt(t,e.customClass),e.icon&&mt(t,Y["icon-".concat(e.icon)])};function Wt(){var t=$();t||sn.fire(),t=$();var e=T(),n=E();ot(e),ot(n,"inline-block"),mt([t,e],Y.loading),n.disabled=!0,t.setAttribute("data-loading",!0),t.setAttribute("aria-busy",!0),t.focus()}function Kt(){return new Promise(function(t){var e=window.scrollX,n=window.scrollY;Xt.restoreFocusTimeout=setTimeout(function(){Xt.previousActiveElement&&Xt.previousActiveElement.focus?(Xt.previousActiveElement.focus(),Xt.previousActiveElement=null):document.body&&document.body.focus(),t()},100),void 0!==e&&void 0!==n&&window.scrollTo(e,n)})}function Yt(){if(Xt.timeout)return function(){var t=q(),e=parseInt(window.getComputedStyle(t).width);t.style.removeProperty("transition"),t.style.width="100%";var n=parseInt(window.getComputedStyle(t).width),o=parseInt(e/n*100);t.style.removeProperty("transition"),t.style.width="".concat(o,"%")}(),Xt.timeout.stop()}function Zt(){if(Xt.timeout){var t=Xt.timeout.start();return st(t),t}}function Qt(t){return Object.prototype.hasOwnProperty.call(Gt,t)}function $t(t){return ee[t]}function Jt(t){for(var e in t)Qt(i=e)||_('Unknown parameter "'.concat(i,'"')),t.toast&&(o=e,-1!==ne.indexOf(o)&&_('The parameter "'.concat(o,'" is incompatible with toasts'))),$t(n=e)&&g(n,$t(n));var n,o,i}var Xt={},Gt={title:"",titleText:"",text:"",html:"",footer:"",icon:void 0,iconHtml:void 0,toast:!1,animation:!0,showClass:{popup:"swal2-show",backdrop:"swal2-backdrop-show",icon:"swal2-icon-show"},hideClass:{popup:"swal2-hide",backdrop:"swal2-backdrop-hide",icon:"swal2-icon-hide"},customClass:void 0,target:"body",backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showCancelButton:!1,preConfirm:void 0,confirmButtonText:"OK",confirmButtonAriaLabel:"",confirmButtonColor:void 0,cancelButtonText:"Cancel",cancelButtonAriaLabel:"",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusCancel:!1,showCloseButton:!1,closeButtonHtml:"×",closeButtonAriaLabel:"Close this dialog",showLoaderOnConfirm:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:"",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:"",inputValue:"",inputOptions:{},inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,validationMessage:void 0,grow:!1,position:"center",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,onBeforeOpen:void 0,onOpen:void 0,onRender:void 0,onClose:void 0,onAfterClose:void 0,onDestroy:void 0,scrollbarPadding:!0},te=["title","titleText","text","html","footer","icon","hideClass","customClass","allowOutsideClick","allowEscapeKey","showConfirmButton","showCancelButton","confirmButtonText","confirmButtonAriaLabel","confirmButtonColor","cancelButtonText","cancelButtonAriaLabel","cancelButtonColor","buttonsStyling","reverseButtons","showCloseButton","closeButtonHtml","closeButtonAriaLabel","imageUrl","imageWidth","imageHeight","imageAlt","progressSteps","currentProgressStep","onClose","onAfterClose","onDestroy"],ee={animation:'showClass" and "hideClass'},ne=["allowOutsideClick","allowEnterKey","backdrop","focusConfirm","focusCancel","heightAuto","keydownListenerCapture"],oe=Object.freeze({isValidParameter:Qt,isUpdatableParameter:function(t){return-1!==te.indexOf(t)},isDeprecatedParameter:$t,argsToParams:function(o){var i={};return"object"!==r(o[0])||w(o[0])?["title","html","icon"].forEach(function(t,e){var n=o[e];"string"==typeof n||w(n)?i[t]=n:void 0!==n&&F("Unexpected type of ".concat(t,'! Expected "string" or "Element", got ').concat(r(n)))}):s(i,o[0]),i},isVisible:function(){return vt($())},clickConfirm:Ht,clickCancel:function(){return O()&&O().click()},getContainer:Q,getPopup:$,getTitle:x,getContent:P,getHtmlContainer:function(){return e(Y["html-container"])},getImage:A,getIcon:k,getIcons:n,getCloseButton:I,getActions:T,getConfirmButton:E,getCancelButton:O,getHeader:L,getFooter:j,getTimerProgressBar:q,getFocusableElements:V,getValidationMessage:S,isLoading:R,fire:function(){for(var t=arguments.length,e=new Array(t),n=0;nwindow.innerHeight&&(X.previousBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")),document.body.style.paddingRight="".concat(X.previousBodyPadding+function(){var t=document.createElement("div");t.className=Y["scrollbar-measure"],document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e}(),"px"))}function ae(){return!!window.MSInputMethodContext&&!!document.documentMode}function ce(){var t=Q(),e=$();t.style.removeProperty("align-items"),e.offsetTop<0&&(t.style.alignItems="flex-start")}var se=function(){navigator.userAgent.match(/(CriOS|FxiOS|EdgiOS|YaBrowser|UCBrowser)/i)||$().scrollHeight>window.innerHeight-44&&(Q().style.paddingBottom="".concat(44,"px"))},ue=function(){var e,t=Q();t.ontouchstart=function(t){e=le(t.target)},t.ontouchmove=function(t){e&&(t.preventDefault(),t.stopPropagation())}},le=function(t){var e=Q();return t===e||!(at(e)||"INPUT"===t.tagName||at(P())&&P().contains(t))},de={swalPromiseResolve:new WeakMap};function pe(t,e,n,o){var i;n?he(t,o):(Kt().then(function(){return he(t,o)}),Xt.keydownTarget.removeEventListener("keydown",Xt.keydownHandler,{capture:Xt.keydownListenerCapture}),Xt.keydownHandlerAdded=!1),e.parentNode&&!document.body.getAttribute("data-swal2-queue-step")&&e.parentNode.removeChild(e),M()&&(null!==X.previousBodyPadding&&(document.body.style.paddingRight="".concat(X.previousBodyPadding,"px"),X.previousBodyPadding=null),D(document.body,Y.iosfix)&&(i=parseInt(document.body.style.top,10),ht(document.body,Y.iosfix),document.body.style.top="",document.body.scrollTop=-1*i),"undefined"!=typeof window&&ae()&&window.removeEventListener("resize",ce),h(document.body.children).forEach(function(t){t.hasAttribute("data-previous-aria-hidden")?(t.setAttribute("aria-hidden",t.getAttribute("data-previous-aria-hidden")),t.removeAttribute("data-previous-aria-hidden")):t.removeAttribute("aria-hidden")})),ht([document.documentElement,document.body],[Y.shown,Y["height-auto"],Y["no-backdrop"],Y["toast-shown"],Y["toast-column"]])}function fe(t){var e,n,o,i=$();i&&(e=Bt.innerParams.get(this))&&!D(i,e.hideClass.popup)&&(n=de.swalPromiseResolve.get(this),ht(i,e.showClass.popup),mt(i,e.hideClass.popup),o=Q(),ht(o,e.showClass.backdrop),mt(o,e.hideClass.backdrop),function(t,e,n){var o=Q(),i=kt&&ct(e),r=n.onClose,a=n.onAfterClose;if(r!==null&&typeof r==="function"){r(e)}if(i){me(t,e,o,a)}else{pe(t,o,J(),a)}}(this,i,e),void 0!==t?(t.isDismissed=void 0!==t.dismiss,t.isConfirmed=void 0===t.dismiss):t={isDismissed:!0,isConfirmed:!1},n(t||{}))}var me=function(t,e,n,o){Xt.swalCloseEventFinishedCallback=pe.bind(null,t,n,J(),o),e.addEventListener(kt,function(t){t.target===e&&(Xt.swalCloseEventFinishedCallback(),delete Xt.swalCloseEventFinishedCallback)})},he=function(t,e){setTimeout(function(){"function"==typeof e&&e(),t._destroy()})};function ge(t,e,n){var o=Bt.domCache.get(t);e.forEach(function(t){o[t].disabled=n})}function ve(t,e){if(!t)return!1;if("radio"===t.type)for(var n=t.parentNode.parentNode.querySelectorAll("input"),o=0;o")),yt(t)}function Ce(t){var e=Q(),n=$();"function"==typeof t.onBeforeOpen&&t.onBeforeOpen(n);var o=window.getComputedStyle(document.body).overflowY;je(e,n,t),Te(e,n),M()&&(Le(e,t.scrollbarPadding,o),h(document.body.children).forEach(function(t){t===Q()||function(t,e){if("function"==typeof t.contains)return t.contains(e)}(t,Q())||(t.hasAttribute("aria-hidden")&&t.setAttribute("data-previous-aria-hidden",t.getAttribute("aria-hidden")),t.setAttribute("aria-hidden","true"))})),J()||Xt.previousActiveElement||(Xt.previousActiveElement=document.activeElement),"function"==typeof t.onOpen&&setTimeout(function(){return t.onOpen(n)}),ht(e,Y["no-transition"])}function ke(t){var e,n=$();t.target===n&&(e=Q(),n.removeEventListener(kt,ke),e.style.overflowY="auto")}function xe(t,e){"select"===e.input||"radio"===e.input?Me(t,e):-1!==["text","email","number","tel","textarea"].indexOf(e.input)&&(v(e.inputValue)||y(e.inputValue))&&Re(t,e)}function Pe(t,e){t.disableButtons(),e.input?Ne(t,e):Ue(t,e,!0)}function Ae(t,e){t.disableButtons(),e(K.cancel)}function Be(t,e){t.closePopup({value:e})}function Se(e,t,n,o){t.keydownTarget&&t.keydownHandlerAdded&&(t.keydownTarget.removeEventListener("keydown",t.keydownHandler,{capture:t.keydownListenerCapture}),t.keydownHandlerAdded=!1),n.toast||(t.keydownHandler=function(t){return ze(e,t,o)},t.keydownTarget=n.keydownListenerCapture?window:$(),t.keydownListenerCapture=n.keydownListenerCapture,t.keydownTarget.addEventListener("keydown",t.keydownHandler,{capture:t.keydownListenerCapture}),t.keydownHandlerAdded=!0)}function Ee(t,e,n){var o=V(),i=0;if(i:first-child,.swal2-container.swal2-bottom-left>:first-child,.swal2-container.swal2-bottom-right>:first-child,.swal2-container.swal2-bottom-start>:first-child,.swal2-container.swal2-bottom>:first-child{margin-top:auto}.swal2-container.swal2-grow-fullscreen>.swal2-modal{display:flex!important;flex:1;align-self:stretch;justify-content:center}.swal2-container.swal2-grow-row>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-grow-column{flex:1;flex-direction:column}.swal2-container.swal2-grow-column.swal2-bottom,.swal2-container.swal2-grow-column.swal2-center,.swal2-container.swal2-grow-column.swal2-top{align-items:center}.swal2-container.swal2-grow-column.swal2-bottom-left,.swal2-container.swal2-grow-column.swal2-bottom-start,.swal2-container.swal2-grow-column.swal2-center-left,.swal2-container.swal2-grow-column.swal2-center-start,.swal2-container.swal2-grow-column.swal2-top-left,.swal2-container.swal2-grow-column.swal2-top-start{align-items:flex-start}.swal2-container.swal2-grow-column.swal2-bottom-end,.swal2-container.swal2-grow-column.swal2-bottom-right,.swal2-container.swal2-grow-column.swal2-center-end,.swal2-container.swal2-grow-column.swal2-center-right,.swal2-container.swal2-grow-column.swal2-top-end,.swal2-container.swal2-grow-column.swal2-top-right{align-items:flex-end}.swal2-container.swal2-grow-column>.swal2-modal{display:flex!important;flex:1;align-content:center;justify-content:center}.swal2-container.swal2-no-transition{transition:none!important}.swal2-container:not(.swal2-top):not(.swal2-top-start):not(.swal2-top-end):not(.swal2-top-left):not(.swal2-top-right):not(.swal2-center-start):not(.swal2-center-end):not(.swal2-center-left):not(.swal2-center-right):not(.swal2-bottom):not(.swal2-bottom-start):not(.swal2-bottom-end):not(.swal2-bottom-left):not(.swal2-bottom-right):not(.swal2-grow-fullscreen)>.swal2-modal{margin:auto}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-container .swal2-modal{margin:0!important}}.swal2-popup{display:none;position:relative;box-sizing:border-box;flex-direction:column;justify-content:center;width:32em;max-width:100%;padding:1.25em;border:none;border-radius:.3125em;background:#fff;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:0}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-header{display:flex;flex-direction:column;align-items:center;padding:0 1.8em}.swal2-title{position:relative;max-width:100%;margin:0 0 .4em;padding:0;color:#595959;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;margin:1.25em auto 0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0,0,0,.2),rgba(0,0,0,.2))}.swal2-actions.swal2-loading .swal2-styled.swal2-confirm{box-sizing:border-box;width:2.5em;height:2.5em;margin:.46875em;padding:0;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:.25em solid transparent;border-radius:100%;border-color:transparent;background-color:transparent!important;color:transparent!important;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-actions.swal2-loading .swal2-styled.swal2-cancel{margin-right:30px;margin-left:30px}.swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after{content:\"\";display:inline-block;width:15px;height:15px;margin-left:5px;-webkit-animation:swal2-rotate-loading 1.5s linear 0s infinite normal;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border:3px solid #999;border-radius:50%;border-right-color:transparent;box-shadow:1px 1px 1px #fff}.swal2-styled{margin:.3125em;padding:.625em 2em;box-shadow:none;font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#3085d6;color:#fff;font-size:1.0625em}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#aaa;color:#fff;font-size:1.0625em}.swal2-styled:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(50,100,150,.4)}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1.25em 0 0;padding:1em 0 0;border-top:1px solid #eee;color:#545454;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;height:.25em;overflow:hidden;border-bottom-right-radius:.3125em;border-bottom-left-radius:.3125em}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:1.25em auto}.swal2-close{position:absolute;z-index:2;top:0;right:0;align-items:center;justify-content:center;width:1.2em;height:1.2em;padding:0;overflow:hidden;transition:color .1s ease-out;border:none;border-radius:0;background:0 0;color:#ccc;font-family:serif;font-size:2.5em;line-height:1.2;cursor:pointer}.swal2-close:hover{transform:none;background:0 0;color:#f27474}.swal2-close::-moz-focus-inner{border:0}.swal2-content{z-index:1;justify-content:center;margin:0;padding:0 1.6em;color:#545454;font-size:1.125em;font-weight:400;line-height:normal;text-align:center;word-wrap:break-word}.swal2-checkbox,.swal2-file,.swal2-input,.swal2-radio,.swal2-select,.swal2-textarea{margin:1em auto}.swal2-file,.swal2-input,.swal2-textarea{box-sizing:border-box;width:100%;transition:border-color .3s,box-shadow .3s;border:1px solid #d9d9d9;border-radius:.1875em;background:inherit;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);color:inherit;font-size:1.125em}.swal2-file.swal2-inputerror,.swal2-input.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474!important;box-shadow:0 0 2px #f27474!important}.swal2-file:focus,.swal2-input:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:0;box-shadow:0 0 3px #c4e6f5}.swal2-file::-moz-placeholder,.swal2-input::-moz-placeholder,.swal2-textarea::-moz-placeholder{color:#ccc}.swal2-file:-ms-input-placeholder,.swal2-input:-ms-input-placeholder,.swal2-textarea:-ms-input-placeholder{color:#ccc}.swal2-file::-ms-input-placeholder,.swal2-input::-ms-input-placeholder,.swal2-textarea::-ms-input-placeholder{color:#ccc}.swal2-file::placeholder,.swal2-input::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em auto;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-input[type=number]{max-width:10em}.swal2-file{background:inherit;font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:inherit;color:inherit;font-size:1.125em}.swal2-checkbox,.swal2-radio{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-checkbox label,.swal2-radio label{margin:0 .6em;font-size:1.125em}.swal2-checkbox input,.swal2-radio input{margin:0 .4em}.swal2-validation-message{display:none;align-items:center;justify-content:center;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:1.25em auto 1.875em;border:.25em solid transparent;border-radius:50%;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{-webkit-animation:swal2-animate-error-icon .5s;animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{-webkit-animation:swal2-animate-error-x-mark .5s;animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-.25em;left:-.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{-webkit-animation:swal2-animate-success-line-tip .75s;animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{-webkit-animation:swal2-animate-success-line-long .75s;animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{-webkit-animation:swal2-rotate-success-circular-line 4.25s ease-in;animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{align-items:center;margin:0 0 1.25em;padding:0;background:inherit;font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;width:2em;height:2em;border-radius:2em;background:#3085d6;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#3085d6}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;width:2.5em;height:.4em;margin:0 -1px;background:#3085d6}[class^=swal2]{-webkit-tap-highlight-color:transparent}.swal2-show{-webkit-animation:swal2-show .3s;animation:swal2-show .3s}.swal2-hide{-webkit-animation:swal2-hide .15s forwards;animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{right:auto;left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@supports (-ms-accelerator:true){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.swal2-range input{width:100%!important}.swal2-range output{display:none}}@-moz-document url-prefix(){.swal2-close:focus{outline:2px solid rgba(50,100,150,.4)}}@-webkit-keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@keyframes swal2-toast-show{0%{transform:translateY(-.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0)}}@-webkit-keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@-webkit-keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@-webkit-keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@-webkit-keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@keyframes swal2-show{0%{transform:scale(.7)}45%{transform:scale(1.05)}80%{transform:scale(.95)}100%{transform:scale(1)}}@-webkit-keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(.5);opacity:0}}@-webkit-keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@-webkit-keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@-webkit-keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@-webkit-keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(.4);opacity:0}50%{margin-top:1.625em;transform:scale(.4);opacity:0}80%{margin-top:-.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@-webkit-keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0);opacity:1}}@-webkit-keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes swal2-rotate-loading{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto!important}body.swal2-no-backdrop .swal2-container{top:auto;right:auto;bottom:auto;left:auto;max-width:calc(100% - .625em * 2);background-color:transparent!important}body.swal2-no-backdrop .swal2-container>.swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}body.swal2-no-backdrop .swal2-container.swal2-top{top:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-top-left,body.swal2-no-backdrop .swal2-container.swal2-top-start{top:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-top-end,body.swal2-no-backdrop .swal2-container.swal2-top-right{top:0;right:0}body.swal2-no-backdrop .swal2-container.swal2-center{top:50%;left:50%;transform:translate(-50%,-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-left,body.swal2-no-backdrop .swal2-container.swal2-center-start{top:50%;left:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-center-end,body.swal2-no-backdrop .swal2-container.swal2-center-right{top:50%;right:0;transform:translateY(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom{bottom:0;left:50%;transform:translateX(-50%)}body.swal2-no-backdrop .swal2-container.swal2-bottom-left,body.swal2-no-backdrop .swal2-container.swal2-bottom-start{bottom:0;left:0}body.swal2-no-backdrop .swal2-container.swal2-bottom-end,body.swal2-no-backdrop .swal2-container.swal2-bottom-right{right:0;bottom:0}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll!important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static!important}}body.swal2-toast-shown .swal2-container{background-color:transparent}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-left,body.swal2-toast-shown .swal2-container.swal2-top-start{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-left,body.swal2-toast-shown .swal2-container.swal2-center-start{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%,-50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-left,body.swal2-toast-shown .swal2-container.swal2-bottom-start{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}body.swal2-toast-column .swal2-toast{flex-direction:column;align-items:stretch}body.swal2-toast-column .swal2-toast .swal2-actions{flex:1;align-self:stretch;height:2.2em;margin-top:.3125em}body.swal2-toast-column .swal2-toast .swal2-loading{justify-content:center}body.swal2-toast-column .swal2-toast .swal2-input{height:2em;margin:.3125em auto;font-size:1em}body.swal2-toast-column .swal2-toast .swal2-validation-message{font-size:1em}"); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/vssr.js b/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/vssr.js deleted file mode 100644 index 3164226bed..0000000000 --- a/package/ctcgfw/luci-app-vssr/root/www/luci-static/vssr/vssr.js +++ /dev/null @@ -1,16 +0,0 @@ - - -var Vssr = { - init: function () { - - } -} - - -$(document).ready(function () { - Vssr.init(); -}); - -$(window).load(function () { - -}); \ No newline at end of file diff --git a/package/ctcgfw/luci-app-xunlei/Makefile b/package/ctcgfw/luci-app-xunlei/Makefile deleted file mode 100644 index 84a6717e5d..0000000000 --- a/package/ctcgfw/luci-app-xunlei/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2008-2014 The LuCI Team -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=LuCI Support for Xware downloading app. -LUCI_DEPENDS:=@arm +wget -PKG_VERSION:=1.0 -PKG_RELEASE:=2 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-app-xunlei/luasrc/controller/xunlei.lua b/package/ctcgfw/luci-app-xunlei/luasrc/controller/xunlei.lua deleted file mode 100644 index b0d15cd136..0000000000 --- a/package/ctcgfw/luci-app-xunlei/luasrc/controller/xunlei.lua +++ /dev/null @@ -1,13 +0,0 @@ - -module("luci.controller.xunlei", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/xunlei") then - return - end - - local page - page = entry({"admin", "services", "xunlei"}, cbi("xunlei"), _("迅雷远程下载"), 199) - page.i18n = "xunlei" - page.dependent = true -end diff --git a/package/ctcgfw/luci-app-xunlei/luasrc/model/cbi/xunlei.lua b/package/ctcgfw/luci-app-xunlei/luasrc/model/cbi/xunlei.lua deleted file mode 100644 index fd3bec29a0..0000000000 --- a/package/ctcgfw/luci-app-xunlei/luasrc/model/cbi/xunlei.lua +++ /dev/null @@ -1,106 +0,0 @@ -local fs = require "nixio.fs" -local util = require "nixio.util" - -local running=(luci.sys.call("pidof EmbedThunderManager > /dev/null") == 0) -local button="" -local xunleiinfo="" -local tblXLInfo={} -local detailInfo = "
    启动后会看到类似如下信息:

    [ 0, 1, 1, 0, “7DHS94”,1, “201_2.1.3.121”, “shdixang”, 1 ]

    其中有用的几项为:

    第一项: 0表示返回结果成功;

    第二项: 1表示检测网络正常,0表示检测网络异常;

    第四项: 1表示已绑定成功,0表示未绑定;

    第五项: 未绑定的情况下,为绑定的需要的激活码;

    第六项: 1表示磁盘挂载检测成功,0表示磁盘挂载检测失败。" - -if running then - xunleiinfo = luci.sys.exec("wget-ssl http://127.0.0.1:9000/getsysinfo -O - 2>/dev/null") - m = Map("xunlei", translate("Xware"), translate("迅雷远程下载 运行中")) - string.gsub(string.sub(xunleiinfo, 2, -2),'[^,]+',function(w) table.insert(tblXLInfo, w) end) - - detailInfo = [[

    启动信息:]] .. xunleiinfo .. [[

    ]] - if tonumber(tblXLInfo[1]) == 0 then - detailInfo = detailInfo .. [[

    状态正常

    ]] - else - detailInfo = detailInfo .. [[

    执行异常

    ]] - end - - if tonumber(tblXLInfo[2]) == 0 then - detailInfo = detailInfo .. [[

    网络异常

    ]] - else - detailInfo = detailInfo .. [[

    网络正常

    ]] - end - - if tonumber(tblXLInfo[4]) == 0 then - detailInfo = detailInfo .. [[

    未绑定]].. [[  激活码:]].. tblXLInfo[5] ..[[

    ]] - else - detailInfo = detailInfo .. [[

    已绑定

    ]] - end - - if tonumber(tblXLInfo[6]) == 0 then - detailInfo = detailInfo .. [[

    磁盘挂载检测失败

    ]] - else - detailInfo = detailInfo .. [[

    磁盘挂载检测成功

    ]] - end -else - m = Map("xunlei", translate("Xware"), translate("迅雷远程下载 未运行")) -end - ------------ ---Xware-- ------------ - -s = m:section(TypedSection, "xunlei","Xware 设置") -s.anonymous = true - -s:tab("basic", translate("Settings")) - -enable = s:taboption("basic", Flag, "enable", "启用 迅雷远程下载") -enable.rmempty = false - -vod = s:taboption("basic", Flag, "vod", "删除迅雷VOD服务器", "删除迅雷VOD服务器,减少上传流量。") -vod.rmempty = false - -s:taboption("basic", DummyValue,"opennewwindow" ,"

    ", detailInfo) - -s:taboption("basic", DummyValue,"opennewwindow" ,"

    ", "
    打开迅雷远程下载页面。首次运行将激活码填进网页即可绑定。") - - -s:tab("editconf_etm", translate("Xware 配置")) -editconf_etm = s:taboption("editconf_etm", Value, "_editconf_etm", - translate("Xware 配置:"), - translate("注释用“ ; ”")) -editconf_etm.template = "cbi/tvalue" -editconf_etm.rows = 20 -editconf_etm.wrap = "off" - -function editconf_etm.cfgvalue(self, section) - return fs.readfile("/tmp/etc/etm.cfg") or "" -end -function editconf_etm.write(self, section, value2) - if value2 then - value2 = value2:gsub("\r\n?", "\n") - fs.writefile("/tmp/etm.cfg", value2) - if (luci.sys.call("cmp -s /tmp/etm.cfg /tmp/etc/etm.cfg") == 1) then - fs.writefile("/tmp/etc/etm.cfg", value2) - end - fs.remove("/tmp/etm.cfg") - end -end - -s:tab("editconf_download", translate("下载配置")) -editconf_download = s:taboption("editconf_download", Value, "_editconf_download", - translate("下载配置"), - translate("注释用“ ; ”")) -editconf_download.template = "cbi/tvalue" -editconf_download.rows = 20 -editconf_download.wrap = "off" - -function editconf_download.cfgvalue(self, section) - return fs.readfile("/tmp/etc/download.cfg") or "" -end -function editconf_download.write(self, section, value3) - if value3 then - value3 = value3:gsub("\r\n?", "\n") - fs.writefile("/tmp/download.cfg", value3) - if (luci.sys.call("cmp -s /tmp/download.cfg /tmp/etc/download.cfg") == 1) then - fs.writefile("/tmp/etc/download.cfg", value3) - end - fs.remove("/tmp/download.cfg") - end -end -return m diff --git a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/ETMDaemon b/package/ctcgfw/luci-app-xunlei/root/app/xunlei/ETMDaemon deleted file mode 100755 index fe0d100a01..0000000000 Binary files a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/ETMDaemon and /dev/null differ diff --git a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/EmbedThunderManager b/package/ctcgfw/luci-app-xunlei/root/app/xunlei/EmbedThunderManager deleted file mode 100755 index 743a412a71..0000000000 Binary files a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/EmbedThunderManager and /dev/null differ diff --git a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/portal b/package/ctcgfw/luci-app-xunlei/root/app/xunlei/portal deleted file mode 100755 index 7651b1a927..0000000000 Binary files a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/portal and /dev/null differ diff --git a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/vod_httpserver b/package/ctcgfw/luci-app-xunlei/root/app/xunlei/vod_httpserver deleted file mode 100755 index 72f3c22904..0000000000 Binary files a/package/ctcgfw/luci-app-xunlei/root/app/xunlei/vod_httpserver and /dev/null differ diff --git a/package/ctcgfw/luci-app-xunlei/root/etc/config/xunlei b/package/ctcgfw/luci-app-xunlei/root/etc/config/xunlei deleted file mode 100644 index 181ed73b60..0000000000 --- a/package/ctcgfw/luci-app-xunlei/root/etc/config/xunlei +++ /dev/null @@ -1,10 +0,0 @@ - -config xunlei 'config' - option device '/mnt/sda1' - option up '0' - option xware 'Xware_mipseb_32_uclibc.tar.gz' - option url 'http://dl.lazyzhu.com/file/Thunder/Xware' - option file '/app' - option vod '1' - option enable '0' - diff --git a/package/ctcgfw/luci-app-xunlei/root/etc/init.d/xunlei b/package/ctcgfw/luci-app-xunlei/root/etc/init.d/xunlei deleted file mode 100755 index b0aa473a59..0000000000 --- a/package/ctcgfw/luci-app-xunlei/root/etc/init.d/xunlei +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh /etc/rc.common -START=99 - -start() { - config_load "xunlei" - - config_get enable config enable 0 - config_get device config device - config_get up config up 0 - config_get file config file - - device=$(uci get xunlei.config.device) - file=$(uci get xunlei.config.file) - vod=$(uci get xunlei.config.vod) - mountpoint="`mount | grep "$device" | awk '{print $3;exit}'`" - - rm -f /tmp/etc/thunder_mounts.cfg - rm -f /tmp/etc/etm.cfg - rm -f /tmp/etc/download.cfg - - path1="$file/xunlei/cfg/thunder_mounts.cfg" - path2="$file/xunlei/cfg/etm.cfg" - path3="$file/xunlei/cfg/download.cfg" - - [ "$up" -eq 1 ] && /etc/xware/xlup && /etc/xware/cfg - [ "$vod" -eq 1 ] && rm -f $file/xunlei/lib/vod_httpserver - [ "$vod" -eq 1 ] && rm -f $file/xunlei/vod_httpserver - - [ "$enable" -eq 0 ] && exit 0 - - ln -s "$path1" /tmp/etc/thunder_mounts.cfg - ln -s "$path2" /tmp/etc/etm.cfg - ln -s "$path3" /tmp/etc/download.cfg - - $file/xunlei/portal - sleep 3 - renice -n 19 $(pidof EmbedThunderManager) -} - -stop() { - file=$(uci get xunlei.config.file) - $file/xunlei/portal -s -} - -restart() { - stop - sleep 1 - start -} diff --git a/package/ctcgfw/luci-app-xunlei/root/etc/uci-defaults/luci-xunlei b/package/ctcgfw/luci-app-xunlei/root/etc/uci-defaults/luci-xunlei deleted file mode 100755 index 3d2c0c992c..0000000000 --- a/package/ctcgfw/luci-app-xunlei/root/etc/uci-defaults/luci-xunlei +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -uci -q batch <<-EOF >/dev/null - delete ucitrack.@xunlei[-1] - add ucitrack xunlei - set ucitrack.@xunlei[-1].init=xunlei - commit ucitrack -EOF - -rm -f /tmp/luci-indexcahe -exit 0 diff --git a/package/ctcgfw/luci-app-xunlei/root/etc/xware/cfg b/package/ctcgfw/luci-app-xunlei/root/etc/xware/cfg deleted file mode 100755 index 9b76849061..0000000000 --- a/package/ctcgfw/luci-app-xunlei/root/etc/xware/cfg +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh /etc/rc.common - -device=$(uci get xunlei.config.device) -file=$(uci get xunlei.config.file) -mountpoint="`mount | grep "$device" | awk '{print $3;exit}'`" - -[ -f "$file/xunlei/cfg/thunder_mounts.cfg" ] && cfg="$file/xunlei/cfg/thunder_mounts.cfg" -[ ! -f "$cfg" ] && { - cfg="/$file/xunlei/cfg/thunder_mounts.cfg" - -cat > "$cfg" << EOF -avaliable_mount_path_pattern -{ -$mountpoint -} - -EOF - } diff --git a/package/ctcgfw/luci-app-xunlei/root/etc/xware/xlatest b/package/ctcgfw/luci-app-xunlei/root/etc/xware/xlatest deleted file mode 100755 index 9c76c5876f..0000000000 --- a/package/ctcgfw/luci-app-xunlei/root/etc/xware/xlatest +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh /etc/rc.common - -VERSION=`wget -qO- http://dl.lazyzhu.com/file/Thunder/Xware/latest` -sleep 3 && killall wget -xl_configfile="/tmp/etc/xlver" -[ ! -f "$xl_configfile" ] && touch "$xl_configfile" -cat > "$xl_configfile" << EOF -$VERSION -EOF - diff --git a/package/ctcgfw/luci-app-xunlei/root/etc/xware/xlup b/package/ctcgfw/luci-app-xunlei/root/etc/xware/xlup deleted file mode 100755 index ca2745539f..0000000000 --- a/package/ctcgfw/luci-app-xunlei/root/etc/xware/xlup +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh /etc/rc.common - -device=$(uci get xunlei.config.device) -file=$(uci get xunlei.config.file) -mountpoint="`mount | grep "$device" | awk '{print $3;exit}'`" -DIR=$file/xunlei -$DIR/portal -s -sleep 1 -mkdir -p ${DIR}/cfg -cd ${DIR} -FILES=$(uci get xunlei.config.xware) -ver=$(uci get xunlei.config.ver) -url=$(uci get xunlei.config.url) -zversion=$(uci get xunlei.config.zversion) -VERSION=$(wget --no-check-certificate -O- ${url}/latest) - -{ - if [ "$zversion" -eq 1 ];then - wget --no-check-certificate ${url}/${ver}/${FILES} - else - wget --no-check-certificate ${url}/${VERSION}/${FILES} - fi -} - -{ -xl_configfile="/tmp/etc/xlver" -[ ! -f "$xl_configfile" ] && touch "$xl_configfile" - -cat > "$xl_configfile" << EOF -$VERSION -EOF -} - -rm -rf $DIR/portal && rm -rf $DIR/lib && tar zxvf ${FILES} -chmod +x $DIR/* && chmod +x $DIR/lib/* -rm -rf ${FILES} -rm -rf $file/xunlei/cfg/thunder_mounts.cfg>> /dev/null 2>&1 -uci set xunlei.config.up=0>> /dev/null 2>&1 -uci commit 2>&1 > /dev/null -vod=$(uci get xunlei.config.vod) -[ "$vod" -eq 1 ] && rm -f "$file"/xunlei/vod_httpserver -[ "$vod" -eq 1 ] && rm -f "$file"/xunlei/lib/vod_httpserver -sleep 3 && killall wget diff --git a/package/ctcgfw/luci-lib-docker/Makefile b/package/ctcgfw/luci-lib-docker/Makefile deleted file mode 100644 index b9e7d81aab..0000000000 --- a/package/ctcgfw/luci-lib-docker/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-lib-docker -PKG_VERSION:=v0.3.0 -PKG_RELEASE:=beta -PKG_MAINTAINER:=lisaac -PKG_LICENSE:=AGPL-3.0 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/lisaac/luci-lib-docker.git -PKG_MIRROR_HASH:=2ae79a80856a29e86a77744fb226aec35d1776d922c9bb06d2b602735ebd71d3 -PKG_SOURCE_VERSION:=$(PKG_VERSION) - -PKG_SOURCE_SUBDIR:=$(PKG_NAME) -PKG_SOURCE:=$(PKG_SOURCE_SUBDIR)-$(PKG_VERSION).tar.gz -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - SECTION:=luci - CATEGORY:=LuCI - SUBMENU:=6. Libraries - TITLE:=Docker Engine API for LuCI - PKGARCH:=all - DEPENDS:=@(aarch64||arm||x86_64) @HAS_FPU +luci-lib-jsonc -endef - -define Package/$(PKG_NAME)/description - Docker Engine API for LuCI -endef - -define Build/Prepare - tar -xzvf $(DL_DIR)/$(PKG_SOURCE) -C $(BUILD_DIR) -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -rm -fr /tmp/luci-indexcache /tmp/luci-modulecache -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci - cp -pR $(PKG_BUILD_DIR)/luasrc/* $(1)/usr/lib/lua/luci/ -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/package/ctcgfw/luci-proto-minieap/Makefile b/package/ctcgfw/luci-proto-minieap/Makefile deleted file mode 100644 index f1e0a1f1da..0000000000 --- a/package/ctcgfw/luci-proto-minieap/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-proto-minieap -PKG_VERSION:=2.1 -PKG_RELEASE:=1 -PKG_MAINTAINER:=Richard Yu -PKG_LICENSE:=GPLv3 -PKG_LICENSE_FILES:=LICENSE - -LUCI_TITLE:=LuCI support for MiniEAP -LUCI_DEPENDS:= -LUCI_PKGARCH:=all - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-proto-minieap/luasrc/model/cbi/admin_network/proto_minieap.lua b/package/ctcgfw/luci-proto-minieap/luasrc/model/cbi/admin_network/proto_minieap.lua deleted file mode 100644 index a56fecadfa..0000000000 --- a/package/ctcgfw/luci-proto-minieap/luasrc/model/cbi/admin_network/proto_minieap.lua +++ /dev/null @@ -1,100 +0,0 @@ -local map, section, net = ... - -local l = section.tab_names -for i, v in ipairs(l) do - if v == "firewall" then - table.remove(l, i) - break - end -end -section.tabs["firewall"] = nil - -l = section.tabs["advanced"].childs -for i, v in ipairs(l) do - if v.option == "delegate" then - table.remove(l, i) - break - end -end - -section:tab("rjv3", translate("RJv3 Plugin Settings"), nil) - -local i = #section.tab_names -local t = section.tab_names -t[i], t[i-1] = t[i-1], t[i] - -local o = section:taboption("general", Value, "username", translate("Username")) - -o = section:taboption("general", Value, "password", translate("Password")) -o.password = true - -o = section:taboption("general", DynamicList, "module", translate("Packet plugins")) -o.rmempty = true -o.datatype = "list(string)" -o:value("rjv3", "rjv3") -o:value("printer", "printer") - -o = section:taboption("advanced", Value, "max_fail", translate("Max fail")) -o.datatype = "uinteger" -o.placeholder = "3" - -o = section:taboption("advanced", Value, "max_retries", translate("Max retries")) -o.datatype = "uinteger" -o.placeholder = "3" - -o = section:taboption("advanced", Flag, "no_auto_reauth", translate("No auto reauth")) - -o = section:taboption("advanced", Value, "wait_after_fail", translate("Wait after fail")) -o.datatype = "uinteger" -o.placeholder = "30" - -o = section:taboption("advanced", Value, "stage_timeout", translate("Stage timeout")) -o.datatype = "uinteger" -o.placeholder = "5" - -o = section:taboption("advanced", Value, "auth_round", translate("Auth Round")) -o.datatype = "uinteger" -o.placeholder = "1" - -o = section:taboption("advanced", Value, "log_file", translate("Log file")) -o.placeholder = "/var/log/minieap.log" - --- rjv3 plugin -o = section:taboption("rjv3", Value, "heartbeat", translate("Heartbeat interval")) -o.datatype = "uinteger" -o.placeholder = "60" - -o = section:taboption("rjv3", ListValue, "eap_bcast_addr", translate("EAP broadcast address")) -o:value(0, translate("Standard")) -- BROADCAST_STANDARD -o:value(1, translate("RJ private")) -- BROADCAST_RJ --- o:value(2, translate("BROADCAST_CER")) -- BROADCAST_CER - -o = section:taboption("rjv3", ListValue, "dhcp_type", translate("DHCP type")) -o:value(0, translate("Disabled")) -- DHCP_NONE -o:value(1, translate("Double Auth")) -- DHCP_DOUBLE_AUTH -o:value(2, translate("DHCP After Auth")) -- DHCP_AFTER_AUTH -o:value(3, translate("DHCP Before Auth")) -- DHCP_BEFORE_AUTH - -o = section:taboption("rjv3", DynamicList, "rj_option", translate("RJ option")) -o.rmempty = true -o.placeholder = ":[:r]" - -o = section:taboption("rjv3", Value, "service", translate("Service name")) -o.placeholder = "internet" - -o = section:taboption("rjv3", Value, "version_str", translate("Version string")) -o.placeholder = "RG-SU For Linux V1.0" - -o = section:taboption("rjv3", Value, "dhcp_script", translate("DHCP script")) - -o = section:taboption("rjv3", Value, "fake_dns1", translate("Fake DNS 1")) -o.datatype = "ip4addr" - -o = section:taboption("rjv3", Value, "fake_dns2", translate("Fake DNS 2")) -o.datatype = "ip4addr" - -o = section:taboption("rjv3", Value, "fake_serial", translate("Fake HDD serial")) - -o = section:taboption("rjv3", Value, "max_dhcp_count", translate("Max DHCP count")) -o.datatype = "uinteger" -o.placeholder = "3" diff --git a/package/ctcgfw/luci-proto-minieap/luasrc/model/network/proto_minieap.lua b/package/ctcgfw/luci-proto-minieap/luasrc/model/network/proto_minieap.lua deleted file mode 100644 index ee5705bb1d..0000000000 --- a/package/ctcgfw/luci-proto-minieap/luasrc/model/network/proto_minieap.lua +++ /dev/null @@ -1,20 +0,0 @@ -local netmod = luci.model.network - -local proto = netmod:register_protocol("minieap") - -function proto.get_i18n(self) - return luci.i18n.translate("MiniEAP client") -end - -function proto.is_installed(self) - return nixio.fs.access("/lib/netifd/proto/minieap.sh") -end - -function proto.opkg_package(self) - return "minieap" -end - -if netmod["register_error_code"] then - netmod:register_error_code("MISSING_USER_OR_PASS", luci.i18n.translate("Missing username or password")) - netmod:register_error_code("EXIT_FAILURE", luci.i18n.translate("Program exited with failure. See system log for more information.")) -end diff --git a/package/ctcgfw/luci-proto-minieap/po/templates/minieap.pot b/package/ctcgfw/luci-proto-minieap/po/templates/minieap.pot deleted file mode 100644 index 028bd27f0a..0000000000 --- a/package/ctcgfw/luci-proto-minieap/po/templates/minieap.pot +++ /dev/null @@ -1,95 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -msgid "Auth Round" -msgstr "" - -msgid "DHCP After Auth" -msgstr "" - -msgid "DHCP Before Auth" -msgstr "" - -msgid "DHCP script" -msgstr "" - -msgid "DHCP type" -msgstr "" - -msgid "Disabled" -msgstr "" - -msgid "Double Auth" -msgstr "" - -msgid "EAP broadcast address" -msgstr "" - -msgid "Fake DNS 1" -msgstr "" - -msgid "Fake DNS 2" -msgstr "" - -msgid "Fake HDD serial" -msgstr "" - -msgid "Heartbeat interval" -msgstr "" - -msgid "Log file" -msgstr "" - -msgid "Max DHCP count" -msgstr "" - -msgid "Max fail" -msgstr "" - -msgid "Max retries" -msgstr "" - -msgid "MiniEAP client" -msgstr "" - -msgid "Missing username or password" -msgstr "" - -msgid "No auto reauth" -msgstr "" - -msgid "Packet plugins" -msgstr "" - -msgid "Password" -msgstr "" - -msgid "Program exited with failure. See system log for more information." -msgstr "" - -msgid "RJ option" -msgstr "" - -msgid "RJ private" -msgstr "" - -msgid "RJv3 Plugin Settings" -msgstr "" - -msgid "Service name" -msgstr "" - -msgid "Stage timeout" -msgstr "" - -msgid "Standard" -msgstr "" - -msgid "Username" -msgstr "" - -msgid "Version string" -msgstr "" - -msgid "Wait after fail" -msgstr "" diff --git a/package/ctcgfw/luci-proto-minieap/po/zh-cn/minieap.po b/package/ctcgfw/luci-proto-minieap/po/zh-cn/minieap.po deleted file mode 100644 index 95b6526a23..0000000000 --- a/package/ctcgfw/luci-proto-minieap/po/zh-cn/minieap.po +++ /dev/null @@ -1,95 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -msgid "Auth Round" -msgstr "认证次数" - -msgid "DHCP After Auth" -msgstr "认证后 DHCP" - -msgid "DHCP Before Auth" -msgstr "认证前 DHCP" - -msgid "DHCP script" -msgstr "DHCP 脚本" - -msgid "DHCP type" -msgstr "DHCP 方式" - -msgid "Disabled" -msgstr "禁用" - -msgid "Double Auth" -msgstr "二次认证" - -msgid "EAP broadcast address" -msgstr "EAP 广播地址" - -msgid "Fake DNS 1" -msgstr "自定义主 DNS 地址" - -msgid "Fake DNS 2" -msgstr "自定义次 DNS 地址" - -msgid "Fake HDD serial" -msgstr "自定义硬盘序列号" - -msgid "Heartbeat interval" -msgstr "心跳间隔" - -msgid "Log file" -msgstr "日志文件" - -msgid "Max DHCP count" -msgstr "最大 DHCP 次数" - -msgid "Max fail" -msgstr "最大失败次数" - -msgid "Max retries" -msgstr "最大重试次数" - -msgid "MiniEAP client" -msgstr "MiniEAP 客户端" - -msgid "Missing username or password" -msgstr "用户名或密码为空" - -msgid "No auto reauth" -msgstr "不自动重新认证" - -msgid "Packet plugins" -msgstr "数据包插件" - -msgid "Password" -msgstr "密码" - -msgid "Program exited with failure. See system log for more information." -msgstr "程序出错退出。查看系统日志获取更多信息。" - -msgid "RJ option" -msgstr "锐捷选项" - -msgid "RJ private" -msgstr "锐捷私有" - -msgid "RJv3 Plugin Settings" -msgstr "RJv3 插件设置" - -msgid "Service name" -msgstr "服务名称" - -msgid "Stage timeout" -msgstr "阶段超时" - -msgid "Standard" -msgstr "标准" - -msgid "Username" -msgstr "用户名" - -msgid "Version string" -msgstr "版本字符串" - -msgid "Wait after fail" -msgstr "失败后等待时间" diff --git a/package/ctcgfw/luci-proto-minieap/root/lib/netifd/minieap.script b/package/ctcgfw/luci-proto-minieap/root/lib/netifd/minieap.script deleted file mode 100755 index e691fe42e9..0000000000 --- a/package/ctcgfw/luci-proto-minieap/root/lib/netifd/minieap.script +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -[ -z "$INTERFACE" ] && echo "Error: should be run by minieap" && exit 1 - -. /lib/netifd/netifd-proto.sh - -proto_init_update "*" 1 -proto_send_update "$INTERFACE" diff --git a/package/ctcgfw/luci-proto-minieap/root/lib/netifd/proto/minieap.sh b/package/ctcgfw/luci-proto-minieap/root/lib/netifd/proto/minieap.sh deleted file mode 100755 index 0ec662cd60..0000000000 --- a/package/ctcgfw/luci-proto-minieap/root/lib/netifd/proto/minieap.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/sh - -. /lib/functions.sh -. /lib/functions/network.sh -. ../netifd-proto.sh -init_proto "$@" - -append_setting() { - local s="$1" - [ -n "$s" ] && \ - echo "$s" >>"$config_file" -} - -append_setting_list() { - [ -n "$1" ] && append_setting "$3=$1" -} - -proto_minieap_init_config() { - lasterror=1 - - proto_config_add_string username - proto_config_add_string password - #proto_config_add_string nic - proto_config_add_array 'module:list(string)' - #proto_config_add_int daemonize #=0 - #proto_config_add_string if_impl #=sockraw - proto_config_add_int max_fail - proto_config_add_int max_retries - proto_config_add_boolean no_auto_reauth - proto_config_add_int wait_after_fail - proto_config_add_int stage_timeout - #proto_config_add_string proxy_lan_iface - proto_config_add_int auth_round - #proto_config_add_string pid_file #=none - proto_config_add_string log_file - #proto_config_add_string script #=/lib/netifd/minieap.script - - #rjv3 plugin - proto_config_add_int heartbeat - proto_config_add_int eap_bcast_addr - proto_config_add_int dhcp_type - proto_config_add_array 'rj_option:list(string)' - proto_config_add_string service - proto_config_add_string version_str - proto_config_add_string dhcp_script - proto_config_add_string 'fake_dns1:ip4addr' - proto_config_add_string 'fake_dns2:ip4addr' - proto_config_add_string fake_serial - proto_config_add_int max_dhcp_count -} - -proto_minieap_setup() { - local config="$1" - local iface="$2" - - local username password module max_fail max_retries no_auto_reauth wait_after_fail stage_timeout auth_round log_file heartbeat eap_bcast_addr dhcp_type rj_option service version_str dhcp_script fake_dns1 fake_dns2 fake_serial max_dhcp_count - json_get_vars username password max_fail max_retries no_auto_reauth wait_after_fail stage_timeout auth_round log_file heartbeat eap_bcast_addr dhcp_type service version_str dhcp_script fake_dns1 fake_dns2 fake_serial max_dhcp_count - - [ -z "$username" -o -z "$password" ] && { - echo "minieap: Missing username or password." >&2 - proto_notify_error "$config" "MISSING_USER_OR_PASS" - proto_block_restart "$config" - return - } - - config_dir='/var/etc/minieap' - config_file="${config_dir}/${config}.conf" - - [ -d $config_dir ] || { - mkdir -p $config_dir - chmod 0755 $config_dir - } - >$config_file - - append_setting "username=$username" - append_setting "password=$password" - append_setting "nic=$iface" - json_for_each_item append_setting_list module module - append_setting "daemonize=0" - append_setting "if-impl=sockraw" - append_setting ${max_fail:+max-fail=$max_fail} - append_setting ${max_retries:+max-retries=$max_retries} - append_setting ${no_auto_reauth:+no-auto-reauth=$no_auto_reauth} - append_setting ${wait_after_fail:+wait-after-fail=$wait_after_fail} - append_setting ${stage_timeout:+stage-timeout=$stage_timeout} - append_setting ${auth_round:+auth-round=$auth_round} - append_setting "pid-file=none" - append_setting ${log_file:+log-file="$log_file"} - append_setting "script=/lib/netifd/minieap.script" - - append_setting ${heartbeat:+heartbeat=$heartbeat} - append_setting ${eap_bcast_addr:+eap-bcast-addr=$eap_bcast_addr} - append_setting ${dhcp_type:+dhcp-type=$dhcp_type} - json_for_each_item append_setting_list rj_option 'rj-option' - append_setting ${service:+service="$service"} - append_setting ${version_str:+version-str="$version_str"} - append_setting ${fake_dns1:+fake-dns1=$fake_dns1} - append_setting ${fake_dns2:+fake-dns2=$fake_dns2} - append_setting ${fake_serial:+fake-serial="$fake_serial"} - append_setting ${max_dhcp_count:+max-dhcp-count=$max_dhcp_count} - - network_is_up wan || (echo "wan is not ready, sleep 10s." >&2; sleep 10) - - proto_export "INTERFACE=$config" - proto_run_command "$config" minieap --conf-file "$config_file" -} - -proto_minieap_teardown() { - local interface="$1" - - [ ${ERROR:-0} -ne 0 ] && { - echo "minieap: Program exited with code $ERROR." >&2 - proto_notify_error "$interface" "EXIT_FAILURE" - proto_block_restart "$interface" - } - - proto_kill_command "$interface" -} - -add_protocol minieap diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/Makefile b/package/ctcgfw/luci-theme-Butterfly-dark/Makefile deleted file mode 100644 index c2a2a6263d..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2008-2014 The LuCI Team -# -# This is free software, licensed under the Apache License, Version 2.0 . -# - -include $(TOPDIR)/rules.mk - -LUCI_TITLE:=Butterfly_dark Theme -LUCI_DEPENDS:= -PKG_VERSION:=2.0 -PKG_RELEASE:=02-20200309 - -include $(TOPDIR)/feeds/luci/luci.mk - -# call BuildPackage - OpenWrt buildroot signature diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/loginstyle.css b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/loginstyle.css deleted file mode 100644 index 1fbb0bc8f7..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/loginstyle.css +++ /dev/null @@ -1,76 +0,0 @@ -.btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 10px 4px; margin-bottom: 0; font-size: 13px; line-height: 18px; color: #333333; text-align: center;text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); vertical-align: middle; background-color: #f5f5f5; background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(top, #ffffff, #e6e6e6); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#ffffff, endColorstr=#e6e6e6, GradientType=0); border-color: #e6e6e6 #e6e6e6 #e6e6e6; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border: 1px solid #e6e6e6; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); cursor: pointer; *margin-left: .3em; } -.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] { background-color: #e6e6e6; } -.btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } -.btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; } -.btn-primary, .btn-primary:hover { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); color: #ffffff; } -.btn-primary.active { color: rgba(255, 255, 255, 0.75); } -.btn-primary { background-color: #4a77d4; background-image: -moz-linear-gradient(top, #6eb6de, #4a77d4); background-image: -ms-linear-gradient(top, #6eb6de, #4a77d4); - -background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6eb6de), to(#4a77d4)); background-image: -webkit-linear-gradient(top, #6eb6de, #4a77d4); background-image: -o-linear-gradient(top, #6eb6de, #4a77d4); background-image: linear-gradient(top, #6eb6de, #4a77d4); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#6eb6de, endColorstr=#4a77d4, GradientType=0); border: 1px solid #3762bc; text-shadow: 1px 1px 1px rgba(0,0,0,0.4); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.5); } -.btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { filter: none; background-color: #4a77d4; } -.btn-block { width: 100%; display:block; } - -* { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; -ms-box-sizing:border-box; -o-box-sizing:border-box; box-sizing:border-box; } - -body, html { - height:100%; - margin:0; - padding:0; - font-family: 'Open Sans', sans-serif; - background-color:#0476A4; -} -.lin { - margin: auto; - padding: 15% 0 0; - width:360px; - height:300px; -} -.login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px; text-align:center; } - -input { - width: 100%; - height:40px; - margin-bottom: 10px; - background: rgba(0,0,0,0.3); - border: none; - outline: none; - padding: 10px; - font-size: 16px; - color: #fff; - text-shadow: 1px 1px 1px rgba(0,0,0,0.3); - border: 1px solid rgba(0,0,0,0.3); - border-radius: 4px; - box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2); - -webkit-transition: box-shadow .5s ease; - -moz-transition: box-shadow .5s ease; - -o-transition: box-shadow .5s ease; - -ms-transition: box-shadow .5s ease; - transition: box-shadow .5s ease; -} -input:focus { box-shadow: inset 0 -5px 45px rgba(100,100,100,0.4), 0 1px 1px rgba(255,255,255,0.2); } - -#Hi{ - width: 200px; - height:200px; - margin: -10px; - #padding: 5px; -} - -.land_logo { - display: block; - width: 360px; - height: 105px; - padding-bottom: 20px; - background: transparent url("/luci-static/bootstrap/images/wifilogo.png") no-repeat scroll 0% 0%; -} - -.loginfoot { -position: absolute; -padding-top: 100px; -text-align: left; -color: #FFF; -font-size: 14px; -width: 600px; -padding-right: 120px; -left: -40px; -} diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/mainmenu.css b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/mainmenu.css deleted file mode 100644 index 056097099e..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/mainmenu.css +++ /dev/null @@ -1,177 +0,0 @@ -.main-nav { - background: #3092c0; - - background-image: -webkit-gradient(linear, to bottom, to top, color-stop(0%, #3298c8), color-stop(100%, #2e8cb8)); - background-image: -webkit-linear-gradient(to bottom, #3298c8, #2e8cb8); - background-image: -moz-linear-gradient(to bottom, #3298c8, #2e8cb8); - background-image: -o-linear-gradient(to bottom, #3298c8, #2e8cb8); - background-image: linear-gradient(to bottom, #3298c8, #2e8cb8); - - /*-webkit-border-radius: 8px; - -moz-border-radius: 8px; - -ms-border-radius: 8px; - -o-border-radius: 8px; - border-radius: 8px;*/ - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); -} - -.main-nav:after { - clear: both; - content: "\00a0"; - display: block; - height: 0; - font: 0px/0 serif; - overflow: hidden; -} - -.nav-brand { - float: left; - margin: 0; -} - -.nav-brand a { - display: block; - padding: 10px 10px 10px 20px; - color: #fff; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 22px; - font-weight: normal; - line-height: 29px; - text-decoration: none; -} - -#main-menu { - clear: both; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -@media (min-width: 768px) { - #main-menu { - float: right; - clear: none; - } -} - - -/* Mobile menu top separator */ - -#main-menu:before { - content: ''; - display: block; - height: 1px; - font: 1px/1px sans-serif; - overflow: hidden; - background: #2e8cb8; -} - -@media (min-width: 768px) { - #main-menu:before { - display: none; - } -} - - -/* Mobile menu toggle button */ - -.main-menu-btn { - float: right; - margin: 10px; - position: relative; - display: inline-block; - width: 29px; - height: 29px; - text-indent: 29px; - white-space: nowrap; - overflow: hidden; - cursor: pointer; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - - -/* hamburger icon */ - -.main-menu-btn-icon, -.main-menu-btn-icon:before, -.main-menu-btn-icon:after { - position: absolute; - top: 50%; - left: 2px; - height: 2px; - width: 24px; - background: #fff; - -webkit-transition: all 0.25s; - transition: all 0.25s; -} - -.main-menu-btn-icon:before { - content: ''; - top: -7px; - left: 0; -} - -.main-menu-btn-icon:after { - content: ''; - top: 7px; - left: 0; -} - - -/* x icon */ - -#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon { - height: 0; - background: transparent; -} - -#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before { - top: 0; - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} - -#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after { - top: 0; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); -} - - -/* hide menu state checkbox (keep it visible to screen readers) */ - -#main-menu-state { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - border: 0; - padding: 0; - overflow: hidden; - clip: rect(1px, 1px, 1px, 1px); -} - - -/* hide the menu in mobile view */ - -#main-menu-state:not(:checked) ~ #main-menu { - display: none; -} - -#main-menu-state:checked ~ #main-menu { - display: block; -} - -@media (min-width: 768px) { - /* hide the button in desktop view */ - .main-menu-btn { - position: absolute; - top: -99999px; - } - /* always show the menu in desktop view */ - #main-menu-state:not(:checked) ~ #main-menu { - display: block; - } -} \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/_mixins.scss b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/_mixins.scss deleted file mode 100644 index 0ed06503c8..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/_mixins.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import 'mixins/_sub-items-indentation.scss'; -@import 'mixins/_round-corners-last-item.scss'; \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/_sm-blue-theme.scss b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/_sm-blue-theme.scss deleted file mode 100644 index d7c2828432..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/_sm-blue-theme.scss +++ /dev/null @@ -1,586 +0,0 @@ -// This file is best viewed with Tab size 4 code indentation - - -// ----------------------------------------------------------------------------------------------------------------- -// 1. Theme Quick Settings (Variables) -// (for further control, you will need to dig into the actual CSS in 2.) -// ----------------------------------------------------------------------------------------------------------------- - - -// ---------------------------------------------------------- -// :: 1.1. Colors -// ---------------------------------------------------------- - -$sm-blue__blue: #3092c0 !default; -$sm-blue__blue-dark: darken($sm-blue__blue, 5%) !default; -$sm-blue__blue-darker: #006892 !default; -$sm-blue__blue-light: lighten($sm-blue__blue, 30%) !default; -$sm-blue__white: #fff !default; -$sm-blue__gray: darken($sm-blue__white, 34%) !default; - -$sm-blue__text-shadow: rgba(0, 0, 0, 0.2) !default; -$sm-blue__box-shadow: rgba(0, 0, 0, 0.2) !default; - -$sm-blue__gradients_amount: 2% !default; - - -// ---------------------------------------------------------- -// :: 1.2. Breakpoints -// ---------------------------------------------------------- - -$sm-blue__desktop-vp: 768px !default; // switch from collapsible to desktop - - -// ---------------------------------------------------------- -// :: 1.3. Typography -// ---------------------------------------------------------- - -// Import "PT Sans Narrow" font from Google fonts -@import url(https://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700); - -$sm-blue__font-family: "PT Sans Narrow", "Arial Narrow", Arial, Helvetica, sans-serif !default; -$sm-blue__font-size-base: 18px !default; -$sm-blue__font-size-small: 16px !default; -$sm-blue__line-height: 23px !default; - - -// ---------------------------------------------------------- -// :: 1.4. Borders -// ---------------------------------------------------------- - -$sm-blue__border-width: 1px !default; -$sm-blue__border-radius-base: 8px !default; -$sm-blue__border-radius-small: 4px !default; - - -// ---------------------------------------------------------- -// :: 1.5. Collapsible main menu -// ---------------------------------------------------------- - -// Menu box -$sm-blue__collapsible-bg: transparent !default; -$sm-blue__collapsible-border-radius: $sm-blue__border-radius-base !default; -$sm-blue__collapsible-box-shadow: 0 1px 4px $sm-blue__box-shadow !default; - -// Items -$sm-blue__collapsible-item-color: $sm-blue__white !default; -$sm-blue__collapsible-item-bg: $sm-blue__blue !default; -$sm-blue__collapsible-item-current-color: $sm-blue__white !default; -$sm-blue__collapsible-item-current-bg: $sm-blue__blue-darker !default; -$sm-blue__collapsible-item-disabled-color: lighten($sm-blue__blue, 30%) !default; -$sm-blue__collapsible-item-padding-vertical: 10px !default; -$sm-blue__collapsible-item-padding-horizontal: 20px !default; - -// Toggle button (sub menu indicators) -$sm-blue__collapsible-toggle-bg: rgba(0, 0, 0, 0.1) !default; - - -// ---------------------------------------------------------- -// :: 1.6. Collapsible sub menus -// ---------------------------------------------------------- - -// Menu box -$sm-blue__collapsible-sub-bg: $sm-blue__white !default; - -// Items -$sm-blue__collapsible-sub-item-color: $sm-blue__blue-dark !default; -$sm-blue__collapsible-sub-item-bg: transparent !default; -$sm-blue__collapsible-sub-item-current-color: $sm-blue__white !default; -$sm-blue__collapsible-sub-item-current-bg: $sm-blue__blue-darker !default; -$sm-blue__collapsible-sub-item-disabled-color: darken($sm-blue__white, 30%) !default; - -// Items separators -$sm-blue__collapsible-sub-separators-color: rgba(0, 0, 0, 0.05) !default; - -// Items text indentation for deeper levels -$sm-blue__collapsible-sub-item-indentation: 8px !default; - - -// ---------------------------------------------------------- -// :: 1.7. Desktop main menu -// ---------------------------------------------------------- - -// Menu box -$sm-blue__desktop-bg: $sm-blue__blue !default; -$sm-blue__desktop-border-radius: $sm-blue__border-radius-base !default; -$sm-blue__desktop-box-shadow: 0 1px 1px $sm-blue__box-shadow !default; - -// Items -$sm-blue__desktop-item-color: $sm-blue__white !default; -$sm-blue__desktop-item-bg: $sm-blue__blue !default; -$sm-blue__desktop-item-hover-bg: darken($sm-blue__blue, 5%) !default; -$sm-blue__desktop-item-current-color: $sm-blue__white !default; -$sm-blue__desktop-item-current-bg: $sm-blue__blue-darker !default; -$sm-blue__desktop-item-disabled-color: lighten($sm-blue__blue, 30%) !default; -$sm-blue__desktop-item-padding-vertical: 13px !default; -$sm-blue__desktop-item-padding-horizontal: 24px !default; - -// Items separators -$sm-blue__desktop-separators-size: 1px !default; -$sm-blue__desktop-separators-color: darken($sm-blue__blue, 5%) !default; - -// Sub menu indicators -$sm-blue__desktop-arrow-size: 5px !default; // border-width -$sm-blue__desktop-arrow-color: $sm-blue__blue-light !default; - -// Vertical menu box -$sm-blue__desktop-vertical-box-shadow: 0 1px 4px $sm-blue__box-shadow !default; - -// Vertical items -$sm-blue__desktop-vertical-item-padding-vertical: 9px !default; -$sm-blue__desktop-vertical-item-padding-horizontal: 23px !default; - - -// ---------------------------------------------------------- -// :: 1.8. Desktop sub menus -// ---------------------------------------------------------- - -// Menu box -$sm-blue__desktop-sub-bg: $sm-blue__white !default; -$sm-blue__desktop-sub-border-color: $sm-blue__gray !default; -$sm-blue__desktop-sub-border-radius: $sm-blue__border-radius-small !default; -$sm-blue__desktop-sub-box-shadow: 0 5px 12px $sm-blue__box-shadow !default; -$sm-blue__desktop-sub-padding-vertical: 7px !default; -$sm-blue__desktop-sub-padding-horizontal: 0 !default; - -// Items -$sm-blue__desktop-sub-item-color: $sm-blue__blue-dark !default; -$sm-blue__desktop-sub-item-bg: transparent !default; -$sm-blue__desktop-sub-item-hover-color: $sm-blue__white !default; -$sm-blue__desktop-sub-item-hover-bg: $sm-blue__blue !default; -$sm-blue__desktop-sub-item-current-color: $sm-blue__white !default; -$sm-blue__desktop-sub-item-current-bg: $sm-blue__blue-darker !default; -$sm-blue__desktop-sub-item-disabled-color: darken($sm-blue__white, 30%) !default; -$sm-blue__desktop-sub-item-padding-vertical: 9px !default; -$sm-blue__desktop-sub-item-padding-horizontal: 23px !default; - - -// ----------------------------------------------------------------------------------------------------------------- -// 2. Theme CSS -// ----------------------------------------------------------------------------------------------------------------- - - -// ---------------------------------------------------------- -// :: 2.1. Collapsible mode (mobile first) -// ---------------------------------------------------------- - -// calc item height and sub menus toggle button size -$sm-blue__item-height: $sm-blue__line-height + $sm-blue__collapsible-item-padding-vertical * 2; -// set toggle button size to 80% of item height -$sm-blue__toggle-size: floor($sm-blue__item-height * 0.8); -$sm-blue__toggle-spacing: floor($sm-blue__item-height * 0.1); - -// Main menu box -.sm-blue { - background: $sm-blue__collapsible-bg; - border-radius: $sm-blue__collapsible-border-radius; - box-shadow: $sm-blue__collapsible-box-shadow; - - // Main menu items - a { - &, - &:hover, - &:focus, - &:active { - padding: $sm-blue__collapsible-item-padding-vertical $sm-blue__collapsible-item-padding-horizontal; - /* make room for the toggle button (sub indicator) */ - padding-right: $sm-blue__collapsible-item-padding-horizontal + $sm-blue__toggle-size + $sm-blue__toggle-spacing; - background: $sm-blue__collapsible-item-bg; - background-image: linear-gradient(to bottom, lighten($sm-blue__collapsible-item-bg, $sm-blue__gradients_amount), darken($sm-blue__collapsible-item-bg, $sm-blue__gradients_amount)); - color: $sm-blue__collapsible-item-color; - font-family: $sm-blue__font-family; - font-size: $sm-blue__font-size-base; - font-weight: bold; - line-height: $sm-blue__line-height; - text-decoration: none; - text-shadow: 0 1px 0 $sm-blue__text-shadow; - } - - &.current { - background: $sm-blue__collapsible-item-current-bg; - background-image: linear-gradient(to bottom, darken($sm-blue__collapsible-item-current-bg, $sm-blue__gradients_amount), lighten($sm-blue__collapsible-item-current-bg, $sm-blue__gradients_amount)); - color: $sm-blue__collapsible-item-current-color; - } - - &.disabled { - color: $sm-blue__collapsible-item-disabled-color; - } - - // Toggle buttons (sub menu indicators) - .sub-arrow { - position: absolute; - top: 50%; - margin-top: -(ceil($sm-blue__toggle-size / 2)); - left: auto; - right: $sm-blue__toggle-spacing; - width: $sm-blue__toggle-size; - height: $sm-blue__toggle-size; - overflow: hidden; - font: bold #{$sm-blue__font-size-small}/#{$sm-blue__toggle-size} monospace !important; - text-align: center; - text-shadow: none; - background: $sm-blue__collapsible-toggle-bg; - border-radius: $sm-blue__border-radius-small; - } - .sub-arrow::before { - content: '+'; - } - &.highlighted .sub-arrow::before { - content: '-'; - } - } - - // round the corners of the first item - > li:first-child > a, > li:first-child > :not(ul) a { - border-radius: $sm-blue__collapsible-border-radius $sm-blue__collapsible-border-radius 0 0; - } - // round the corners of the last item - @include sm-blue__round-corners-last-item($sm-blue__collapsible-border-radius); - - // Sub menus box - ul { - background: $sm-blue__collapsible-sub-bg; - - // darken the background of the 2+ level sub menus - ul { - background: rgba(darken($sm-blue__collapsible-sub-bg, 60%), 0.1); - } - - // Sub menus items - a { - &, - &:hover, - &:focus, - &:active { - background: $sm-blue__collapsible-sub-item-bg; - color: $sm-blue__collapsible-sub-item-color; - font-size: $sm-blue__font-size-small; - text-shadow: none; - // add indentation for sub menus text - border-left: $sm-blue__collapsible-sub-item-indentation solid transparent; - } - - &.current { - background: $sm-blue__collapsible-sub-item-current-bg; - background-image: linear-gradient(to bottom, darken($sm-blue__collapsible-sub-item-current-bg, $sm-blue__gradients_amount), lighten($sm-blue__collapsible-sub-item-current-bg, $sm-blue__gradients_amount)); - color: $sm-blue__collapsible-sub-item-current-color; - } - - &.disabled { - color: $sm-blue__collapsible-sub-item-disabled-color; - } - } - - // Add indentation for sub menus text for deeper levels - @include sm-blue__sub-items-indentation($sm-blue__collapsible-sub-item-indentation); - - // Sub menus items separators - li { - border-top: 1px solid $sm-blue__collapsible-sub-separators-color; - - &:first-child { - border-top: 0; - } - } - } -} - - -// ---------------------------------------------------------- -// :: 2.2. Desktop mode -// ---------------------------------------------------------- - -@media (min-width: $sm-blue__desktop-vp) { - - /* Switch to desktop layout - ----------------------------------------------- - These transform the menu tree from - collapsible to desktop (navbar + dropdowns) - -----------------------------------------------*/ - /* start... (it's not recommended editing these rules) */ - .sm-blue ul{position:absolute;width:12em;} - .sm-blue li{float:left;} - .sm-blue.sm-rtl li{float:right;} - .sm-blue ul li,.sm-blue.sm-rtl ul li,.sm-blue.sm-vertical li{float:none;} - .sm-blue a{white-space:nowrap;} - .sm-blue ul a,.sm-blue.sm-vertical a{white-space:normal;} - .sm-blue .sm-nowrap > li > a,.sm-blue .sm-nowrap > li > :not(ul) a{white-space:nowrap;} - /* ...end */ - - // Main menu box - .sm-blue { - background: $sm-blue__desktop-bg; - background-image: linear-gradient(to bottom, lighten($sm-blue__desktop-bg, $sm-blue__gradients_amount), darken($sm-blue__desktop-bg, $sm-blue__gradients_amount)); - border-radius: $sm-blue__desktop-border-radius; - box-shadow: $sm-blue__desktop-box-shadow; - - // Main menu items - a { - &, - &:hover, - &:focus, - &:active, - &.highlighted { - padding: $sm-blue__desktop-item-padding-vertical $sm-blue__desktop-item-padding-horizontal; - background: $sm-blue__desktop-item-bg; - background-image: linear-gradient(to bottom, lighten($sm-blue__desktop-item-bg, $sm-blue__gradients_amount), darken($sm-blue__desktop-item-bg, $sm-blue__gradients_amount)); - color: $sm-blue__desktop-item-color; - } - - &:hover, - &:focus, - &:active, - &.highlighted { - background: $sm-blue__desktop-item-hover-bg; - background-image: linear-gradient(to bottom, lighten($sm-blue__desktop-item-hover-bg, $sm-blue__gradients_amount), darken($sm-blue__desktop-item-hover-bg, $sm-blue__gradients_amount)); - } - - &.current { - background: $sm-blue__desktop-item-current-bg; - background-image: linear-gradient(to bottom, darken($sm-blue__desktop-item-current-bg, $sm-blue__gradients_amount), lighten($sm-blue__desktop-item-current-bg, $sm-blue__gradients_amount)); - color: $sm-blue__desktop-item-current-color; - } - - &.disabled { - background: $sm-blue__desktop-item-bg; - background-image: linear-gradient(to bottom, lighten($sm-blue__desktop-item-bg, $sm-blue__gradients_amount), darken($sm-blue__desktop-item-bg, $sm-blue__gradients_amount)); - color: $sm-blue__desktop-item-disabled-color; - } - - // Sub menu indicators - .sub-arrow { - top: auto; - margin-top: 0; - bottom: 2px; - left: 50%; - margin-left: -$sm-blue__desktop-arrow-size; - right: auto; - width: 0; - height: 0; - border-width: $sm-blue__desktop-arrow-size; - border-style: solid dashed dashed dashed; - border-color: $sm-blue__desktop-arrow-color transparent transparent transparent; - background: transparent; - border-radius: 0; - } - // reset mobile first style - .sub-arrow::before { - display: none; - } - } - - // round the corners of the first and last items - > li:first-child > a, > li:first-child > :not(ul) a { - border-radius: $sm-blue__desktop-border-radius 0 0 $sm-blue__desktop-border-radius; - } - > li:last-child > a, > li:last-child > :not(ul) a { - border-radius: 0 $sm-blue__desktop-border-radius $sm-blue__desktop-border-radius 0 !important; - } - - // Main menu items separators - > li { - border-left: $sm-blue__desktop-separators-size solid $sm-blue__desktop-separators-color; - - &:first-child { - border-left: 0; - } - } - - // Sub menus box - ul { - border: $sm-blue__border-width solid $sm-blue__desktop-sub-border-color; - padding: $sm-blue__desktop-sub-padding-vertical $sm-blue__desktop-sub-padding-horizontal; - background: $sm-blue__desktop-sub-bg; - border-radius: 0 0 $sm-blue__desktop-sub-border-radius $sm-blue__desktop-sub-border-radius !important; - box-shadow: $sm-blue__desktop-sub-box-shadow; - - // 2+ sub levels need rounding of all corners - ul { - border-radius: $sm-blue__desktop-sub-border-radius !important; - background: $sm-blue__desktop-sub-bg; - } - - // Sub menus items - a { - &, - &:hover, - &:focus, - &:active, - &.highlighted { - border: 0 !important; - padding: $sm-blue__desktop-sub-item-padding-vertical $sm-blue__desktop-sub-item-padding-horizontal; - background: $sm-blue__desktop-sub-item-bg; - color: $sm-blue__desktop-sub-item-color; - border-radius: 0 !important; - } - - &:hover, - &:focus, - &:active, - &.highlighted { - background: $sm-blue__desktop-sub-item-hover-bg; - background-image: linear-gradient(to bottom, lighten($sm-blue__desktop-sub-item-hover-bg, $sm-blue__gradients_amount), darken($sm-blue__desktop-sub-item-hover-bg, $sm-blue__gradients_amount)); - color: $sm-blue__desktop-sub-item-hover-color; - } - - &.current { - background: $sm-blue__desktop-sub-item-current-bg; - background-image: linear-gradient(to bottom, darken($sm-blue__desktop-sub-item-current-bg, $sm-blue__gradients_amount), lighten($sm-blue__desktop-sub-item-current-bg, $sm-blue__gradients_amount)); - color: $sm-blue__desktop-sub-item-current-color; - } - - &.disabled { - background: $sm-blue__desktop-sub-bg; - color: $sm-blue__desktop-sub-item-disabled-color; - } - - // Sub menu indicators - .sub-arrow { - top: 50%; - margin-top: -$sm-blue__desktop-arrow-size; - bottom: auto; - left: auto; - margin-left: 0; - right: 10px; - border-style: dashed dashed dashed solid; - border-color: transparent transparent transparent $sm-blue__desktop-arrow-color; - } - } - - // No sub menus items separators - li { - border: 0; - } - } - - // Scrolling arrows containers for tall sub menus - test sub menu: "Sub test" -> "more..." in the default download package - .scroll-up, - .scroll-down { - position: absolute; - display: none; - visibility: hidden; - overflow: hidden; - background: $sm-blue__desktop-sub-bg; - height: 20px; - // width and position will be set automatically by the script - } - .scroll-up-arrow, - .scroll-down-arrow { - position: absolute; - top: -2px; - left: 50%; - margin-left: -8px; - // we will use one-side border to create a triangle so that we don't use a real background image, of course, you can use a real image if you like too - width: 0; - height: 0; - overflow: hidden; - border-width: 8px; // tweak size of the arrow - border-style: dashed dashed solid dashed; - border-color: transparent transparent $sm-blue__desktop-sub-item-color transparent; - } - .scroll-down-arrow { - top: 6px; - border-style: solid dashed dashed dashed; - border-color: $sm-blue__desktop-sub-item-color transparent transparent transparent; - } - - - // Rigth-to-left - - // Main menu box - &.sm-rtl { - - // Vertical main menu items - &.sm-vertical { - a { - // Sub menu indicators - .sub-arrow { - right: auto; - left: 10px; - border-style: dashed solid dashed dashed; - border-color: transparent $sm-blue__desktop-arrow-color transparent transparent; - } - } - } - - // round the corners of the first and last items - > li:first-child > a, > li:first-child > :not(ul) a { - border-radius: 0 $sm-blue__desktop-border-radius $sm-blue__desktop-border-radius 0; - } - > li:last-child > a, > li:last-child > :not(ul) a { - border-radius: $sm-blue__desktop-border-radius 0 0 $sm-blue__desktop-border-radius !important; - } - - // Main menu items separators - > li { - &:first-child { - border-left: $sm-blue__desktop-separators-size solid $sm-blue__desktop-separators-color; - } - &:last-child { - border-left: 0; - } - } - - // Sub menus box - ul { - a { - // Sub menu indicators - .sub-arrow { - right: auto; - left: 10px; - border-style: dashed solid dashed dashed; - border-color: transparent $sm-blue__desktop-arrow-color transparent transparent; - } - } - } - } - - - // Vertical main menu - - // Main menu box - &.sm-vertical { - box-shadow: $sm-blue__desktop-vertical-box-shadow; - - // Main menu items - a { - padding: $sm-blue__desktop-vertical-item-padding-vertical $sm-blue__desktop-vertical-item-padding-horizontal; - - // Sub menu indicators - .sub-arrow { - top: 50%; - margin-top: -$sm-blue__desktop-arrow-size; - bottom: auto; - left: auto; - margin-left: 0; - right: 10px; - border-style: dashed dashed dashed solid; - border-color: transparent transparent transparent $sm-blue__desktop-arrow-color; - } - } - - // round the corners of the first and last items - > li:first-child > a, > li:first-child > :not(ul) a { - border-radius: $sm-blue__desktop-border-radius $sm-blue__desktop-border-radius 0 0; - } - > li:last-child > a, > li:last-child > :not(ul) a { - border-radius: 0 0 $sm-blue__desktop-border-radius $sm-blue__desktop-border-radius !important; - } - - // No main menu item separators - > li { - border-left: 0 !important; - } - - // Sub menus box - ul { - border-radius: $sm-blue__desktop-sub-border-radius !important; - - // Sub menus items - a { - padding: $sm-blue__desktop-sub-item-padding-vertical $sm-blue__desktop-sub-item-padding-horizontal; - } - } - } - } -} \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/mixins/_round-corners-last-item.scss b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/mixins/_round-corners-last-item.scss deleted file mode 100644 index 9622771c0b..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/mixins/_round-corners-last-item.scss +++ /dev/null @@ -1,25 +0,0 @@ -// Generate rules to round the corners of the last collapsible item - -@mixin sm-blue__round-corners-last-item($amount, $chainable: 'ul > li:last-child > ', $level: 4, $chain_prefix: '> li:last-child > ', $chain: '', $selector: '') { - $chain: $chain_prefix; - $selector: $chain + 'a, ' + $chain + '*:not(ul) a, ' + $chain + 'ul'; - @for $i from 1 through $level { - $chain: $chain + $chainable; - $selector: $selector + ', -' + $chain + ' a, ' + $chain + '*:not(ul) a, ' + $chain + ' ul'; - } - #{$selector} { - border-radius: 0 0 $amount $amount; - } - // highlighted items, don't need rounding since their sub is open - $chain: $chain_prefix; - $selector: $chain + 'a.highlighted, ' + $chain + '*:not(ul) a.highlighted'; - @for $i from 1 through $level { - $chain: $chain + $chainable; - $selector: $selector + ', -' + $chain + ' a.highlighted, ' + $chain + '*:not(ul) a.highlighted'; - } - #{$selector} { - border-radius: 0; - } -} \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/mixins/_sub-items-indentation.scss b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/mixins/_sub-items-indentation.scss deleted file mode 100644 index 30cd01b68a..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/mixins/_sub-items-indentation.scss +++ /dev/null @@ -1,15 +0,0 @@ -// Generate rules to indent sub menus text -// -// We'll use left border to avoid messing with the padding. - -@mixin sm-blue__sub-items-indentation($amount, $chainable: 'ul ', $level: 4, $chain: '') { - @for $i from 1 through $level { - $chain: $chain + $chainable; - #{$chain} a, - #{$chain} a:hover, - #{$chain} a:focus, - #{$chain} a:active { - border-left: ($amount * ($i + 1)) solid transparent; - } - } -} \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.css b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.css deleted file mode 100644 index 4cff3bb543..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.css +++ /dev/null @@ -1,333 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700); -.sm-blue { - background: transparent; - border-radius: 8px; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); -} -.sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active { - padding: 10px 20px; - /* make room for the toggle button (sub indicator) */ - padding-right: 58px; - background: #3092c0; - background-image: linear-gradient(to bottom, #3298c8, #2e8cb8); - color: #fff; - font-family: "PT Sans Narrow", "Arial Narrow", Arial, Helvetica, sans-serif; - font-size: 18px; - font-weight: bold; - line-height: 23px; - text-decoration: none; - text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); -} -.sm-blue a.current { - background: #006892; - background-image: linear-gradient(to bottom, #006188, #006f9c); - color: #fff; -} -.sm-blue a.disabled { - color: #a1d1e8; -} -.sm-blue a .sub-arrow { - position: absolute; - top: 50%; - margin-top: -17px; - left: auto; - right: 4px; - width: 34px; - height: 34px; - overflow: hidden; - font: bold 16px/34px monospace !important; - text-align: center; - text-shadow: none; - background: rgba(0, 0, 0, 0.1); - border-radius: 4px; -} -.sm-blue a .sub-arrow::before { - content: '+'; -} -.sm-blue a.highlighted .sub-arrow::before { - content: '-'; -} -.sm-blue > li:first-child > a, .sm-blue > li:first-child > :not(ul) a { - border-radius: 8px 8px 0 0; -} -.sm-blue > li:last-child > a, .sm-blue > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul { - border-radius: 0 0 8px 8px; -} -.sm-blue > li:last-child > a.highlighted, .sm-blue > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > a.highlighted, .sm-blue > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > ul > li:last-child > *:not(ul) a.highlighted { - border-radius: 0; -} -.sm-blue ul { - background: #fff; -} -.sm-blue ul ul { - background: rgba(102, 102, 102, 0.1); -} -.sm-blue ul a, .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active { - background: transparent; - color: #2b82ac; - font-size: 16px; - text-shadow: none; - border-left: 8px solid transparent; -} -.sm-blue ul a.current { - background: #006892; - background-image: linear-gradient(to bottom, #006188, #006f9c); - color: #fff; -} -.sm-blue ul a.disabled { - color: #b3b3b3; -} -.sm-blue ul ul a, -.sm-blue ul ul a:hover, -.sm-blue ul ul a:focus, -.sm-blue ul ul a:active { - border-left: 16px solid transparent; -} -.sm-blue ul ul ul a, -.sm-blue ul ul ul a:hover, -.sm-blue ul ul ul a:focus, -.sm-blue ul ul ul a:active { - border-left: 24px solid transparent; -} -.sm-blue ul ul ul ul a, -.sm-blue ul ul ul ul a:hover, -.sm-blue ul ul ul ul a:focus, -.sm-blue ul ul ul ul a:active { - border-left: 32px solid transparent; -} -.sm-blue ul ul ul ul ul a, -.sm-blue ul ul ul ul ul a:hover, -.sm-blue ul ul ul ul ul a:focus, -.sm-blue ul ul ul ul ul a:active { - border-left: 40px solid transparent; -} -.sm-blue ul li { - border-top: 1px solid rgba(0, 0, 0, 0.05); -} -.sm-blue ul li:first-child { - border-top: 0; -} - -@media (min-width: 768px) { - /* Switch to desktop layout - ----------------------------------------------- - These transform the menu tree from - collapsible to desktop (navbar + dropdowns) - -----------------------------------------------*/ - /* start... (it's not recommended editing these rules) */ - .sm-blue ul { - position: absolute; - width: 12em; - } - - .sm-blue li { - float: left; - } - - .sm-blue.sm-rtl li { - float: right; - } - - .sm-blue ul li, .sm-blue.sm-rtl ul li, .sm-blue.sm-vertical li { - float: none; - } - - .sm-blue a { - white-space: nowrap; - } - - .sm-blue ul a, .sm-blue.sm-vertical a { - white-space: normal; - } - - .sm-blue .sm-nowrap > li > a, .sm-blue .sm-nowrap > li > :not(ul) a { - white-space: nowrap; - } - - /* ...end */ - .sm-blue { - background: #3092c0; - background-image: linear-gradient(to bottom, #3298c8, #2e8cb8); - border-radius: 8px; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - } - .sm-blue a, .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active, .sm-blue a.highlighted { - padding: 13px 24px; - background: #3092c0; - background-image: linear-gradient(to bottom, #3298c8, #2e8cb8); - color: #fff; - } - .sm-blue a:hover, .sm-blue a:focus, .sm-blue a:active, .sm-blue a.highlighted { - background: #2b82ac; - background-image: linear-gradient(to bottom, #2d89b4, #297ca3); - } - .sm-blue a.current { - background: #006892; - background-image: linear-gradient(to bottom, #006188, #006f9c); - color: #fff; - } - .sm-blue a.disabled { - background: #3092c0; - background-image: linear-gradient(to bottom, #3298c8, #2e8cb8); - color: #a1d1e8; - } - .sm-blue a .sub-arrow { - top: auto; - margin-top: 0; - bottom: 2px; - left: 50%; - margin-left: -5px; - right: auto; - width: 0; - height: 0; - border-width: 5px; - border-style: solid dashed dashed dashed; - border-color: #a1d1e8 transparent transparent transparent; - background: transparent; - border-radius: 0; - } - .sm-blue a .sub-arrow::before { - display: none; - } - .sm-blue > li:first-child > a, .sm-blue > li:first-child > :not(ul) a { - border-radius: 8px 0 0 8px; - } - .sm-blue > li:last-child > a, .sm-blue > li:last-child > :not(ul) a { - border-radius: 0 8px 8px 0 !important; - } - .sm-blue > li { - border-left: 1px solid #2b82ac; - } - .sm-blue > li:first-child { - border-left: 0; - } - .sm-blue ul { - border: 1px solid #a8a8a8; - padding: 7px 0; - background: #fff; - border-radius: 0 0 4px 4px !important; - box-shadow: 0 5px 12px rgba(0, 0, 0, 0.2); - } - .sm-blue ul ul { - border-radius: 4px !important; - background: #fff; - } - .sm-blue ul a, .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active, .sm-blue ul a.highlighted { - border: 0 !important; - padding: 9px 23px; - background: transparent; - color: #2b82ac; - border-radius: 0 !important; - } - .sm-blue ul a:hover, .sm-blue ul a:focus, .sm-blue ul a:active, .sm-blue ul a.highlighted { - background: #3092c0; - background-image: linear-gradient(to bottom, #3298c8, #2e8cb8); - color: #fff; - } - .sm-blue ul a.current { - background: #006892; - background-image: linear-gradient(to bottom, #006188, #006f9c); - color: #fff; - } - .sm-blue ul a.disabled { - background: #fff; - color: #b3b3b3; - } - .sm-blue ul a .sub-arrow { - top: 50%; - margin-top: -5px; - bottom: auto; - left: auto; - margin-left: 0; - right: 10px; - border-style: dashed dashed dashed solid; - border-color: transparent transparent transparent #a1d1e8; - } - .sm-blue ul li { - border: 0; - } - .sm-blue .scroll-up, - .sm-blue .scroll-down { - position: absolute; - display: none; - visibility: hidden; - overflow: hidden; - background: #fff; - height: 20px; - } - .sm-blue .scroll-up-arrow, - .sm-blue .scroll-down-arrow { - position: absolute; - top: -2px; - left: 50%; - margin-left: -8px; - width: 0; - height: 0; - overflow: hidden; - border-width: 8px; - border-style: dashed dashed solid dashed; - border-color: transparent transparent #2b82ac transparent; - } - .sm-blue .scroll-down-arrow { - top: 6px; - border-style: solid dashed dashed dashed; - border-color: #2b82ac transparent transparent transparent; - } - .sm-blue.sm-rtl.sm-vertical a .sub-arrow { - right: auto; - left: 10px; - border-style: dashed solid dashed dashed; - border-color: transparent #a1d1e8 transparent transparent; - } - .sm-blue.sm-rtl > li:first-child > a, .sm-blue.sm-rtl > li:first-child > :not(ul) a { - border-radius: 0 8px 8px 0; - } - .sm-blue.sm-rtl > li:last-child > a, .sm-blue.sm-rtl > li:last-child > :not(ul) a { - border-radius: 8px 0 0 8px !important; - } - .sm-blue.sm-rtl > li:first-child { - border-left: 1px solid #2b82ac; - } - .sm-blue.sm-rtl > li:last-child { - border-left: 0; - } - .sm-blue.sm-rtl ul a .sub-arrow { - right: auto; - left: 10px; - border-style: dashed solid dashed dashed; - border-color: transparent #a1d1e8 transparent transparent; - } - .sm-blue.sm-vertical { - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); - } - .sm-blue.sm-vertical a { - padding: 9px 23px; - } - .sm-blue.sm-vertical a .sub-arrow { - top: 50%; - margin-top: -5px; - bottom: auto; - left: auto; - margin-left: 0; - right: 10px; - border-style: dashed dashed dashed solid; - border-color: transparent transparent transparent #a1d1e8; - } - .sm-blue.sm-vertical > li:first-child > a, .sm-blue.sm-vertical > li:first-child > :not(ul) a { - border-radius: 8px 8px 0 0; - } - .sm-blue.sm-vertical > li:last-child > a, .sm-blue.sm-vertical > li:last-child > :not(ul) a { - border-radius: 0 0 8px 8px !important; - } - .sm-blue.sm-vertical > li { - border-left: 0 !important; - } - .sm-blue.sm-vertical ul { - border-radius: 4px !important; - } - .sm-blue.sm-vertical ul a { - padding: 9px 23px; - } -} - -/*# sourceMappingURL=sm-blue.css.map */ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.css.map b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.css.map deleted file mode 100644 index b9c9d7e5d8..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "AAsCQ,2EAAmE;AAuI3E,QAAS;EACR,UAAU,EAlHsB,WAAW;EAmH3C,aAAa,EAlH2B,GAA4B;EAmHpE,UAAU,EAlH4B,4BAA+B;;AAsHpE,iEAGS;EACR,OAAO,EAAE,SAAyF;EAClG,qDAAqD;EACrD,aAAa,EAAE,IAAgG;EAC/G,UAAU,EAtC4B,OAAc;EAuCpD,gBAAgB,EAAE,4CAAiK;EACnL,KAAK,EAvCqC,IAAe;EAwCzD,WAAW,EAtJiB,8DAA8D;EAuJ1F,SAAS,EAtJqB,IAAI;EAuJlC,WAAW,EAAE,IAAI;EACjB,WAAW,EAtJiB,IAAI;EAuJhC,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,0BAA6B;;AAG3C,kBAAU;EACT,UAAU,EAhD8B,OAAqB;EAiD7D,gBAAgB,EAAE,4CAAiL;EACnM,KAAK,EAnDqC,IAAe;;AAsD1D,mBAAW;EACV,KAAK,EAxIsC,OAA4B;;AA4IxE,qBAAW;EACV,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,UAAU,EAAE,KAAkC;EAC9C,IAAI,EAAE,IAAI;EACV,KAAK,EA5CkB,GAAkC;EA6CzD,KAAK,EA9Ce,IAAkC;EA+CtD,MAAM,EA/Cc,IAAkC;EAgDtD,QAAQ,EAAE,MAAM;EAChB,IAAI,EAAE,mCAA+E;EACrF,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,IAAI;EACjB,UAAU,EAnJyB,kBAAkB;EAoJrD,aAAa,EA1KqB,GAAG;;AA4KtC,6BAAmB;EAClB,OAAO,EAAE,GAAG;;AAEb,yCAAiC;EAChC,OAAO,EAAE,GAAG;;AAKd,qEAAoD;EACnD,aAAa,EAAE,WAA2E;;AChO3F,6mCAAa;EACZ,aAAa,EAAE,WAAmB;;AAUnC,w3BAAa;EACZ,aAAa,EAAE,CAAC;;AD0NjB,WAAG;EACF,UAAU,EA3FiC,IAAe;;AA8F1D,cAAG;EACF,UAAU,EAAE,wBAAoD;;AAKhE,6EAGS;EACR,UAAU,EAxK0B,WAAW;EAyK/C,KAAK,EA7G8B,OAAmB;EA8GtD,SAAS,EAtNqB,IAAI;EAuNlC,WAAW,EAAE,IAAI;EAEjB,WAAW,EAAE,qBAA4D;;AAG1E,qBAAU;EACT,UAAU,EAhH6B,OAAqB;EAiH5D,gBAAgB,EAAE,4CAAyL;EAC3M,KAAK,EAnHoC,IAAe;;AAsHzD,sBAAW;EACV,KAAK,EApLwC,OAA4B;;AElF3E;;;uBAGmB;EAClB,WAAW,EAAE,sBAAsC;;AAJpD;;;0BAGmB;EAClB,WAAW,EAAE,sBAAsC;;AAJpD;;;6BAGmB;EAClB,WAAW,EAAE,sBAAsC;;AAJpD;;;gCAGmB;EAClB,WAAW,EAAE,sBAAsC;;AF0QpD,cAAG;EACF,UAAU,EAAE,6BAAoD;;AAEhE,0BAAc;EACb,UAAU,EAAE,CAAC;;;AAWjB,yBAAyC;EAExC;;;;mDAIiD;EACjD,yDAAyD;EACzD,WAAW;IAAC,QAAQ,EAAC,QAAQ;IAAC,KAAK,EAAC,IAAI;;;EACxC,WAAW;IAAC,KAAK,EAAC,IAAI;;;EACtB,kBAAkB;IAAC,KAAK,EAAC,KAAK;;;EAC9B,8DAA4D;IAAC,KAAK,EAAC,IAAI;;;EACvE,UAAU;IAAC,WAAW,EAAC,MAAM;;;EAC7B,qCAAoC;IAAC,WAAW,EAAC,MAAM;;;EACvD,mEAAkE;IAAC,WAAW,EAAC,MAAM;;;EACrF,YAAY;EAGZ,QAAS;IACR,UAAU,EAlK6B,OAAc;IAmKrD,gBAAgB,EAAE,4CAA+I;IACjK,aAAa,EAjNuB,GAA4B;IAkNhE,UAAU,EAjNwB,4BAA+B;;EAqNhE,yFAIc;IACb,OAAO,EAAE,SAAiF;IAC1F,UAAU,EA/K2B,OAAc;IAgLnD,gBAAgB,EAAE,4CAAyJ;IAC3K,KAAK,EAhLoC,IAAe;;EAmLzD,6EAGc;IACb,UAAU,EA/NwB,OAA0B;IAgO5D,gBAAgB,EAAE,4CAAqK;;EAGxL,kBAAU;IACT,UAAU,EA3L6B,OAAqB;IA4L5D,gBAAgB,EAAE,4CAAyK;IAC3L,KAAK,EA9LoC,IAAe;;EAiMzD,mBAAW;IACV,UAAU,EAnM2B,OAAc;IAoMnD,gBAAgB,EAAE,4CAAyJ;IAC3K,KAAK,EAzOkC,OAA4B;;EA6OpE,qBAAW;IACV,GAAG,EAAE,IAAI;IACT,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,IAA6B;IAC1C,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,YAAY,EA7OoB,GAAG;IA8OnC,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAiE;IAC/E,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,CAAC;;EAGjB,6BAAmB;IAClB,OAAO,EAAE,IAAI;;EAKf,qEAAoD;IACnD,aAAa,EAAE,WAAmE;;EAEnF,mEAAkD;IACjD,aAAa,EAAE,sBAA8E;;EAI9F,aAAK;IACJ,WAAW,EAAE,iBAA0E;;EAEvF,yBAAc;IACb,WAAW,EAAE,CAAC;;EAKhB,WAAG;IACF,MAAM,EAAE,iBAA+D;IACvE,OAAO,EAAE,KAA+E;IACxF,UAAU,EAlPgC,IAAe;IAmPzD,aAAa,EAAE,sBAAsF;IACrG,UAAU,EA7P0B,6BAAgC;;EAgQpE,cAAG;IACF,aAAa,EAAE,cAA8C;IAC7D,UAAU,EAzP+B,IAAe;;EA8PxD,wGAIc;IACb,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,QAAyF;IAClG,UAAU,EAxQsB,WAAW;IAyQ3C,KAAK,EA1Q6B,OAAmB;IA2QrD,aAAa,EAAE,YAAY;;EAG5B,yFAGc;IACb,UAAU,EA/Q0B,OAAc;IAgRlD,gBAAgB,EAAE,4CAA6K;IAC/L,KAAK,EAhRmC,IAAe;;EAmRxD,qBAAU;IACT,UAAU,EAnR4B,OAAqB;IAoR3D,gBAAgB,EAAE,4CAAiL;IACnM,KAAK,EAtRmC,IAAe;;EAyRxD,sBAAW;IACV,UAAU,EA1R8B,IAAe;IA2RvD,KAAK,EAzRoC,OAA4B;;EA6RtE,wBAAW;IACV,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAA6B;IACzC,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,CAAC;IACd,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAiE;;EAKjF,cAAG;IACF,MAAM,EAAE,CAAC;;EAKX;uBACa;IACZ,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,MAAM;IAChB,UAAU,EAxTgC,IAAe;IAyTzD,MAAM,EAAE,IAAI;;EAGb;6BACmB;IAClB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,IAAI;IAEjB,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,MAAM;IAChB,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAoE;;EAEnF,2BAAmB;IAClB,GAAG,EAAE,GAAG;IACR,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAoE;;EAahF,wCAAW;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAiE;;EAMlF,mFAAoD;IACnD,aAAa,EAAE,WAAmE;;EAEnF,iFAAkD;IACjD,aAAa,EAAE,sBAA8E;;EAK7F,gCAAc;IACb,WAAW,EAAE,iBAA0E;;EAExF,+BAAa;IACZ,WAAW,EAAE,CAAC;;EAQd,+BAAW;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAiE;;EAUnF,oBAAc;IACb,UAAU,EAha8B,4BAA+B;;EAmavE,sBAAE;IACD,OAAO,EAAE,QAAmG;;EAG5G,iCAAW;IACV,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,IAA6B;IACzC,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,CAAC;IACd,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,2CAAiE;;EAKjF,6FAAoD;IACnD,aAAa,EAAE,WAAmE;;EAEnF,2FAAkD;IACjD,aAAa,EAAE,sBAA8E;;EAI9F,yBAAK;IACJ,WAAW,EAAE,YAAY;;EAI1B,uBAAG;IACF,aAAa,EAAE,cAA8C;;EAG7D,yBAAE;IACD,OAAO,EAAE,QAAyF", -"sources": ["_sm-blue-theme.scss","mixins/_round-corners-last-item.scss","mixins/_sub-items-indentation.scss"], -"names": [], -"file": "sm-blue.css" -} diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.scss b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.scss deleted file mode 100644 index ddb9f1cc2a..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-blue/sm-blue.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import '_mixins.scss'; - -// the variables + the CSS -@import '_sm-blue-theme.scss'; \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-core-css.css b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-core-css.css deleted file mode 100644 index 6130ae29f1..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/sm-core-css.css +++ /dev/null @@ -1,14 +0,0 @@ -/* Mobile first layout SmartMenus Core CSS (it's not recommended editing these rules) - You need this once per page no matter how many menu trees or different themes you use. --------------------------------------------------------------------------------------------*/ - -.sm{box-sizing:border-box;position:relative;z-index:9999;-webkit-tap-highlight-color:rgba(0,0,0,0);} -.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;} -.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right;} -.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0;} -.sm ul{display:none;} -.sm li,.sm a{position:relative;} -.sm a{display:block;} -.sm a.disabled{cursor:default;} -.sm::after{content:"";display:block;height:0;font:0px/0 serif;clear:both;overflow:hidden;} -.sm *,.sm *::before,.sm *::after{box-sizing:inherit;} \ No newline at end of file diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/style.css b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/style.css deleted file mode 100644 index 0a1b939b1c..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/css/style.css +++ /dev/null @@ -1,2720 +0,0 @@ -@import url(custom.css); - -@font-face { - font-family: "icomoon"; - font-weight: normal; - font-style: normal; - src: url("fonts/font.eot"); - src: url("fonts/font.eot") format("embedded-opentype"), - url("fonts/font.ttf") format("truetype"), - url("fonts/font.woff") format("woff"), - url("fonts/font.svg") format("svg"); -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geogtq-th-webfont.woff) format("woff"); - font-weight: 200; - font-style: normal -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geog-thit-webfont.woff) format("woff"); - font-weight: 200; - font-style: italic -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geogtq-ul-webfont.woff) format("woff"); - font-weight: 300; - font-style: normal -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geog-ulit-webfont.woff) format("woff"); - font-weight: 300; - font-style: italic -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geogrotesque-regular-webfont.woff) format("woff"); - font-weight: 400; - font-style: normal -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geog-rgit-webfont.woff) format("woff"); - font-weight: 400; - font-style: italic -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geogrotesque-medium-webfont.woff) format("woff"); - font-weight: 500; - font-style: normal -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geog-mdit-webfont.woff) format("woff"); - font-weight: 500; - font-style: italic -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geogtq-sb-webfont.woff) format("woff"); - font-weight: 600; - font-style: normal -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geog-sbit-webfont.woff) format("woff"); - font-weight: 600; - font-style: italic -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geogtq-bd-webfont.woff) format("woff"); - font-weight: 700; - font-style: normal -} - -@font-face { - font-family: Geogrotesque; - src: url(fonts/geog-bdit-webfont.woff) format("woff"); - font-weight: 700; - font-style: italic -} - -.table { - position: relative; - display: table -} - -.tr { - display: table-row -} - -.thead { - display: table-header-group -} - -.tbody { - display: table-row-group -} - -.tfoot { - display: table-footer-group -} - -.td, -.th { - line-height: normal; - display: table-cell; - text-align: center; - vertical-align: middle; - padding: .5em -} - -.th { - font-weight: 700 -} - -.tr.placeholder { - height: 4em -} - -.tr.placeholder > .td { - line-height: 3; - position: absolute; - right: 0; - bottom: 0; - left: 0; - text-align: center!important; - background: inherit -} - -.td[width="33%"] { - padding: 1.1em -} - -.table[width="33%"], -.th[width="33%"], -.td[width="33%"] { - width: 33% -} - -.col-1 { - flex: 1 1 30px!important -} - -.col-2 { - flex: 2 2 60px!important -} - -.col-3 { - flex: 3 3 90px!important -} - -.col-4 { - flex: 4 4 120px!important -} - -.col-5 { - flex: 5 5 150px!important -} - -.col-6 { - flex: 6 6 180px!important -} - -.col-7 { - flex: 7 7 210px!important -} - -.col-8 { - flex: 8 8 240px!important -} - -.col-9 { - flex: 9 9 270px!important -} - -.col-10 { - flex: 10 10 300px!important -} - -.cbi-button-up, -.cbi-button-down, -.cbi-value-helpicon, -.showSide { - font-family: icomoon; - font-weight: 400; - font-style: normal; - font-variant: normal; - line-height: 1; - text-transform: none; - -webkit-font-smoothing: antialiased; - speak: none -} - -* { - box-sizing: border-box; - margin: 0; - padding: 0 -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: Geogrotesque, Arial, sans-serif; - font-weight: 400; - line-height: 1.1!important; - color: inherit -} - -html { - overflow-y: hidden; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100% -} - -body { - background: #252d38; - -} - -html, -body { - font-family: Geogrotesque, Arial, sans-serif; - font-weight: 400; - color: #fff; - height: 100%; - - font-size:15px; - line-height: 150%; - - - margin: 0; - padding: 0 -} - -select { - color: #555; - border: thin solid #ccc; - background-image: none; - padding: .36rem .8rem -} - -a { - color: #fff; -} - -.btn, -button, -select, -input, -.cbi-dropdown { - height: 1.8rem; - color: rgba(255, 255, 255, .87); - border: 0; - border-bottom: 2px solid rgba(0, 0, 0, .26); - border-radius: 0; - outline: 0; - background-color: rgba(0, 0, 0, 1); - background-image: none; - box-shadow: none; - padding: 0 -} - -select, -.cbi-dropdown { - width: inherit -} - -select:not([multiple="multiple"]):focus, -input:not(.cbi-button):focus, -.cbi-dropdown:focus, -.cbi-dynlist > .item:focus { - border-color: var(--main-color) -} - -select[multiple="multiple"] { - height: auto -} - -pre { - overflow: auto -} - -code { - font-size: 1rem; - font-size-adjust: .35; - color: #101010; - border-radius: 2px; - background: #ddd; - padding: 1px 3px -} - -abbr { - cursor: help; - text-decoration: underline; - color: #005470 -} - -hr { - opacity: .1; - border-color: #eee; - margin: 1rem 0 -} - -header, -.main { - position: absolute; - width: 100% -} - -header { - position: fixed; - z-index: 2000; - float: left; - height: 4rem; - transition: box-shadow .2s; - box-shadow: 0 2px 5px rgba(0, 0, 0, .26); - color: var(--header-color); - background: var(--header-bg) -} - -footer { - font-size: .8rem; - overflow: hidden; - text-align: right; - white-space: nowrap; - color: #aaa; - text-shadow: 0 0 2px #bbb; - padding: 1rem -} - -footer > a { - text-decoration: none; - color: #aaa -} - -.main { - /*top: 4rem;*/ - bottom: 0rem; - position: relative; - height: 100%; - overflow-y: auto; - height: calc(100% - 4rem); -} - -.main > .loading { - position: fixed; - width: 100%; - height: 100%; - z-index: 1000; - display: block; - background-color: rgb(254,251,245); - top: 0; -} - -.main > .loading > span { - font-family: Geogrotesque, Arial, sans-serif; - font-size: 2.0rem; - font-size-adjust: .35; - position: relative; - top: 12.5%; - display: block; - text-align: center; - color: #888 -} -.main > .loading > span > .loading-img:before { - content: "\e603" -} - -.main > .loading > span > .loading-img { - animation: anim-rotate 2s infinite linear; - margin-right: 0.2rem; - display: inline-block; -} - - -[id^="cbi-apply-"] { - position: absolute; - z-index: 200; - left: 50%; - top: 50%; - font-size: 1.2rem; - border-color: #525f7f; - text-align: center; - width: 300px; - height: 180px; - transform: translate(-50%, -50%); -} - -[id^="cbi-apply-"]>.panel-title { - border-bottom: none; -} - -[id^="cbi-apply-"]>img { - margin-top: 1rem; -} - -[id^="cbi-apply-"]>[id^="cbi-apply-"] { - height: auto; - font-size: 1rem; - display: block; - top: 80%; -} -.main-left { - position: fixed; - top: 4rem; - float: left; - overflow-x: auto; - width: calc(0% + 15rem); - height: calc(100% - 4rem); - border-right: 1px solid #bf3630 -} - - -.danger { - background-color: #ff7d60!important -} -.warning { - background-color: #065279!important -} - -.success { - background-color: #5cb85c!important -} - -.notice { - background-color: #5bc0de!important -} - -.error { - color: red -} - -.alert, -.alert-message { - font-weight: 700; - margin-bottom: 1em; - border: 0; - border-radius: 0!important; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); - text-shadow: 1px 1px rgba(0, 0, 0, .1); - padding: 1rem -} - -.alert-message > h4 { - font-size: 110%; - font-weight: 700 -} - -.alert-message > * { - margin: .5rem 0 -} - -.main > .main-left > .nav > li { - cursor: pointer; - padding: .5rem 1rem -} - -.main > .main-left > .nav > li:nth-last-child(1) { - font-size: 1.2rem; - margin-top: 1rem; - margin-bottom: 1rem -} - -.main > .main-left > .nav > li a { - display: block; - color: var(--menu-color); - text-decoration: none; - text-align: right -} - -.main > .main-left > .nav > .slide { - padding: 0 -} - -.main > .main-left > .nav > .slide > .menu::before { - position: absolute; - top: 40%; - right: 17px; - width: 1rem; - height: 1rem; - content: ""; - background-image: url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAwIDEwMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik01MDAsNjI1LjJMNzUuMywyNTVMMTAsMzE0LjlMNTAwLDc0NWw0OTAtNDMwLjFMOTI0LjcsMjU1TDUwMCw2MjUuMnoiLz48L2c+PC9zdmc+); - background-repeat: no-repeat -} - -.main > .main-left > .nav > .slide > .menu.active::before { - transform: rotate(-180deg) -} - -body[class*="node-"] > .main > .main-left > .nav > .slide > .menu::before { - transition: transform .1s ease-in-out -} - -body[class*="node-"] > .main > .main-left > .nav > .slide > .menu.active::before { - transition: transform .2s ease-in-out -} - -.main > .main-left > .nav > .slide > .menu { - font-family: Geogrotesque, Arial, sans-serif; - font-size: 1.2rem; - font-weight: 400; - font-style: italic; - line-height: 3.53; - display: block; - text-decoration: none; - color: var(--menu-color); - text-align: right; - padding: .5rem 2.5rem -} - -.main > .main-left > .nav > .slide:hover { - background: none -} - -.main > .main-left > .nav > .slide > .slide-menu > li { - font-style: italic; - text-align: right; - padding: .4rem 2rem -} - -.main > .main-left > .nav > .slide > .slide-menu > li > a { - white-space: nowrap; - text-decoration: none; - font-size: 1rem -} - -.main > .main-left > .nav > .slide > .slide-menu > .active:hover { - cursor: hand -} - -.main > .main-left > .nav > .slide > .menu, -.main > .main-left > .nav > .slide > .slide-menu > li { - position: relative; - overflow: hidden; - transform: translate3d(0, 0, 0) -} - -.main > .main-left > .nav > .slide > .menu:after, -.main > .main-left > .nav > .slide > .slide-menu > li:after { - position: absolute; - top: 0; - left: 0; - display: block; - width: 100%; - height: 100%; - content: ""; - transition: transform .5s, opacity 1s; - transform: scale(10, 10); - pointer-events: none; - opacity: 0; - background-image: radial-gradient(circle, #000 10%, transparent 10.01%); - background-repeat: no-repeat; - background-position: 50% -} - -.main > .main-left > .nav > .slide > .menu:active:after, -.main > .main-left > .nav > .slide > .slide-menu > li:active:after { - transition: 0s; - transform: scale(0, 0); - opacity: .2 -} - -#maincontent > .container { - margin: 0 2rem 1rem -} - -.Processes #maincontent > .container { - margin-right: 0 -} - -ul { - line-height: normal -} - -li { - list-style-type: none -} - -h1 { - font-size: 2rem; - padding-bottom: 10px -} - -h2 { - font-size: 1.8rem; - padding-bottom: 10px; - margin: 2rem 0 0 -} - -h3 { - font-size: 1.4rem; - padding-bottom: 10px; - margin: 2rem 0 0 -} - -h4 { - font-size: 1.2rem; - padding-bottom: 10px; - margin: 2rem 0 0 -} - -h5 { - font-size: 1rem; - padding-bottom: 10px; - margin: 2rem 0 0 -} -.cbi-section, -.cbi-section-error, -#iptables, -.Firewall form, -#cbi-network > .cbi-section-node, -#cbi-wireless > .cbi-section-node, -#cbi-wireless > #wifi_assoclist_table, -[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), -[data-page="admin-system-opkg"] #maincontent > .container { - font-family: Geogrotesque, Arial, sans-serif; - font-weight: 400; - font-style: normal; - line-height: normal; - min-width: inherit; - border: 0; - border-radius: 0; - background-color: rgba(0, 0, 0, .1); - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .5), 0 0 2px 0 rgba(0, 0, 0, .5); - margin: 1rem 0 0; - padding: 2rem -} - -fieldset > legend { - display: none !important; -} - -fieldset > fieldset { - margin: 0; - padding: 0; - border: none; - box-shadow: none; -} -.panel-title { - width: 100%; - display: block; - line-height: 1; - color: rgb(22,117,161); - font-size: 18px; - padding-bottom: 10px; - font-weight:bold; -} - -table { - border-spacing: 0; - border-collapse: collapse; - width: 100%; - border: 0px solid #eee; -} -table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table > tfoot > tr > th, table > thead > tr > td, table > thead > tr > th { - padding: 12px; - line-height: 1.6; - border-top: 0px dashed #EEE; - - white-space: nowrap; -} - -.cbi-section-table-cell { - text-align: center; -} - -.cbi-section-table-row { - text-align: center; -} - -.cbi-section-remove{ - margin-bottom: 10px; -} - -.cbi-section-table-row > .cbi-value-field [data-dynlist] > input, -.cbi-section-table-row > .cbi-value-field input.cbi-input-password { - width: calc(100% - 1.5rem) -} - -fieldset > table > tbody > tr:nth-of-type(odd) { - background-color: ##617486; -} - -/* fix progress bar */ -#swaptotal > div, -#swapfree > div, -#swapcache > div, -#memfree > div, -#membuff > div, -#conns > div, -#memcache > div, -#memtotal > div { - width: 100% !important; - border-color:#ccc !important; - height:20px !important; - color:#617486 !important; -} -#swaptotal > div > div, -#swapfree > div > div, -#swapcache > div > div, -#memfree > div > div, -#membuff > div > div, -#conns > div > div, -#memcache > div > div, -#memtotal > div > div { - height: 1.4rem !important; - background-color: #617486 !important; -} - -/* fix multiple table */ - - -table table { - border: none; -} - - -.cbi-value-field table { - border: none; -} - -td > table > tbody > tr > td { - border: none; -} - -.cbi-value-field > table > tbody > tr > td { - border: none; -} - -/* button style */ -.cbi-button { -cursor: pointer; - display: inline-block; - background-color: #e6e6e6; - background-repeat: no-repeat; - padding: 5px 14px 6px; - color: #333; - white-space: nowrap; - font-size: 14px; - line-height: normal; - border: 1px solid #ccc; - border-bottom-color: #bbb; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.cbi-button:not(select) { - -webkit-appearance: none!important -} - -form[method="post"] + form[method="post"], -.cbi-button + .cbi-button { - margin-left: .6rem -} - -.btn:hover, -.btn:focus, -.btn:active, -.cbi-button:hover, -.cbi-button:focus, -.cbi-button:active, -.item:hover::after, -.item:focus::after, -.item:active::after, -.cbi-page-actions .cbi-button-apply + .cbi-button-save:hover, -.cbi-page-actions .cbi-button-apply + .cbi-button-save:focus, -.cbi-page-actions .cbi-button-apply + .cbi-button-save:active { - text-decoration: none; - outline: 0 -} - -.btn:hover, -.btn:focus, -.cbi-button:hover, -.cbi-button:focus { - box-shadow: 0 0 2px rgba(0, 0, 0, .12), 0 2px 2px rgba(0, 0, 0, .2) -} - -.btn:active, -.cbi-button:active { - box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23) -} - -.btn:disabled, -.cbi-button:disabled { - cursor: not-allowed; - pointer-events: none; - opacity: .5; - box-shadow: none -} - -.alert-message [class="btn"], -.modal div[class="btn"], -.cbi-button-find, -.cbi-button-link, -.cbi-button-up, -.cbi-button-down, -.cbi-button-neutral, -.cbi-button[name="zero"], -.cbi-button[name="restart"], -.cbi-button[onclick="hide_empty(this)"] { - font-weight: 700; - border: thin solid #f4; - background-color: #0aa344 -} - -.btn.primary, -.cbi-page-actions .cbi-button-save, -.cbi-page-actions .cbi-button-apply + .cbi-button-save, -.cbi-button-add, -.cbi-button-save, -.cbi-button-positive, -.cbi-button-link, -.cbi-button[value="Enable"], -.cbi-button[value="Scan"], -.cbi-button[value^="Back"], -.cbi-button-neutral[onclick="handleConfig(event)"] { - font-weight: 400; - color: #fff; - border: thin solid #3b2e7e ; - background-color: #3b2e7e -} - -.cbi-button-link, -.cbi-input-find, -.cbi-input-save, -.cbi-button-add, -.cbi-button-save, -.cbi-button-find, -.cbi-input-reload, -.cbi-button-reload { - color: #fff !important; - background-color: #177cb0 !important; - border-color: #177cb0 !important; -} - -.cbi-button-reset, -.cbi-input-remove { - color: #fff !important; - background-color: #801dae !important; - border-color: #801dae !important; -} - - -.cbi-input-apply, -.cbi-button-apply, -.cbi-button-edit { - color: #fff !important; - background-color: #00BCD4 !important; - border-color: #00BCD4 !important; -} - -.cbi-input-reset, -.cbi-section-remove>.cbi-button, -.cbi-button-remove { - color: #fff !important; - background-color: #fb6340 !important; - border-color: #fb6340 !important; -} - -.cbi-page-actions .cbi-button-apply, -.cbi-section-actions .cbi-button-edit, -.cbi-button-edit, -.cbi-button-apply, -.cbi-button-reload, -.cbi-button-action, -.cbi-button[value="Submit"], -.cbi-button[value$="Apply"], -.cbi-button[onclick="addKey(event)"] { - font-weight: 400; - color: #fff; - border: thin solid #065279 ; - background-color: #065279 -} - -.btn.danger, -.cbi-section-remove > .cbi-button, -.cbi-button-remove, -.cbi-button-reset, -.cbi-button-negative, -.cbi-button[value="Stop"], -.cbi-button[value="Kill"], -.cbi-button[onclick="reboot(this)"], -.cbi-button-neutral[value="Restart"] { - font-weight: 400; - color: #fff; - border: thin solid #fb6340; - background-color: #fb6340 -} - -.btn[value="Dismiss"], -.cbi-button[value="Terminate"], -.cbi-button[value="Reset"], -.cbi-button[value="Disabled"], -.cbi-button[onclick^="iface_reconnect"], -.cbi-button[onclick="handleReset(event)"], -.cbi-button-neutral[value="Disable"] { - font-weight: 400; - color: #fff; - border: thin solid #fb6340; - background-color: #801dae -} - -.cbi-button-success, -.cbi-button-download, -.cbi-button[name="backup"], -.cbi-button[value="Upload"], -.cbi-button[value="Save mtdblock"] { - font-weight: 400; - color: #fff; - border: thin solid #f4; - background-color: #5cb85c -} - -.a-to-btn { - text-decoration: none -} - -.cbi-value-field .cbi-button-add { - font-weight: 700; - padding: 1px 6px -} - -.cbi-value-field .cbi-button-neutral { - padding: 1px 8px -} - -.tabs { - padding-left: .5rem; - border-bottom: solid 1px #bf3630; - margin: 0 -2rem -} - -.cbi-tabmenu > li, -.tabs > li { - display: inline-block; - padding: .6rem 0 -} - -.cbi-tabmenu > li > a, -.tabs > li > a { - text-decoration: none; - color: #fff; - padding: .5rem .8rem -} - -.tabs > li[class~="active"], -.tabs > li:hover { - margin-bottom: -.18751rem; - cursor: pointer; - color: var(--main-color); - border-bottom: .2rem solid var(--main-color) -} - -.tabs > li[class~="active"] > a { - color: var(--main-color) -} - -.tabs > li:hover { - border-bottom: .18751rem solid #c9c9c9 -} - -.cbi-tabmenu { - border: thin solid rgba(0, 0, 0, .5); - border-bottom: 0; - background-color: rgba(0, 0, 0, .2) -} - -[data-tab-title] { - height: 0; - opacity: 0; - overflow: hidden -} - -[data-tab-active="true"] { - opacity: 1; - height: auto; - overflow: visible; - transition: opacity .25s ease-in -} - -.cbi-section-node-tabbed { - margin-top: 0; - border: thin solid rgba(0, 0, 0, .5); - border-top: 0; - padding: 0 -} - -.cbi-value-field, -.cbi-value-description { - line-height: 1.25; - display: table-cell -} - -.cbi-input-invalid { - color: red; - border-color: red -} - -.cbi-section-error { - font-weight: 700; - line-height: 1.42857143; - border: thin solid red; - border-radius: 3px; - background-color: #fce6e6; - margin: 18px; - padding: 6px -} - -.cbi-section-error ul { - margin: 0 0 0 20px -} - -.cbi-section-error ul li { - font-weight: 700; - color: red -} - -.cbi-value-helpicon:before { - content: "\f059" -} - -.cbi-value-description { - font-size: small; - - opacity: .5; - padding: .5rem 0 0 -} - -.cbi-value-title { - display: table-cell; - float: left; - width: 23rem; - padding-top: .4rem; - padding-right: 2rem; - text-align: right; - word-wrap: break-word -} - -.cbi-value { - display: inline-block; - width: 100%; - padding: .3rem 1rem -} - -.cbi-value ul { - line-height: 1.25 -} - -.td[data-title]::before { - font-weight: 700; - display: none; - content: attr(data-title) ":\20"; - text-align: left; - white-space: nowrap; - padding: .25rem 0 -} - -.tr[data-title]::before, -.tr.cbi-section-table-titles.named::before { - font-weight: 700; - display: table-cell; - align-self: center; - flex: 1 1 5%; - content: attr(data-title) "\20"; - text-align: center; - vertical-align: middle; - white-space: normal; - word-wrap: break-word; - padding: .25rem -} - -.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { - width: auto!important -} - -.td.cbi-section-actions { - text-align: right!important; - vertical-align: middle -} - -.td.cbi-section-actions > * { - display: inline-flex -} - -.td.cbi-section-actions > * > *, -.td.cbi-section-actions > * > form > * { - margin: 0 5px -} - -.td.cbi-section-actions > * > form { - display: inline-flex; - margin: 0 -} - -.cbi-section-descr, -.cbi-map-descr { - font-size: small; - line-height: 1.42857143; - color: #999; - padding: .5rem -} - -.cbi-dynlist { - line-height: 1.3; - flex-direction: column; - min-height: 30px -} - -.cbi-dynlist > .item { - position: relative; - max-width: 24.9rem; - cursor: default; - pointer-events: none; - color: #666; - border-bottom: 2px solid rgba(0, 0, 0, .26); - margin: 0 2em 4px 0; - padding: 2px 4px -} - -.cbi-dynlist[name="sshkeys"] > .item { - max-width: none -} - -.cbi-dynlist > .item::after { - font-weight: 700; - position: absolute; - right: -2em; - bottom: 0; - display: inline-flex; - min-height: 17px; - content: "\00D7"; - pointer-events: auto; - color: #fff; - border: thin solid #d43f3a; - background-color: #d9534f; - padding: 0 6px -} - -.cbi-dynlist > .item > span { - white-space: normal; - word-break: break-word -} - -.cbi-dynlist, -.cbi-dropdown { - position: relative; - display: inline-flex; - height: auto; - cursor: default; - padding: 0 -} - -.cbi-dropdown > ul { - display: flex; - overflow-x: hidden; - overflow-y: auto; - width: 100%; - list-style: none; - margin: 0!important; - padding: 0 -} - -.cbi-dropdown > .open { - flex-basis: 15px -} - -.cbi-dropdown > .open, -.cbi-dropdown > .more { - font-size: 1rem; - font-weight: 900; - line-height: 2; - display: flex; - flex-direction: column; - flex-grow: 0; - flex-shrink: 0; - justify-content: center; - text-align: center; - padding: 0 .25em -} - -.cbi-dropdown > .more, -.cbi-dropdown > ul > li[placeholder] { - font-weight: 700; - display: none; - color: #777 -} - -.cbi-dropdown > ul > li { - display: none; - overflow: hidden; - align-items: center; - align-self: center; - flex-grow: 1; - flex-shrink: 1; - min-height: 20px; - white-space: nowrap; - text-overflow: ellipsis; - padding: .25em -} - -.cbi-dropdown > ul > li[display]:not([display="0"]) { - border-left: thin solid #ccc -} - -.cbi-dropdown[empty] > ul { - max-width: 1px -} - -.cbi-dropdown > ul > li > form { - display: none; - pointer-events: none; - margin: 0; - padding: 0 -} - -.cbi-dropdown > ul > li img { - margin-right: .25em; - vertical-align: middle -} - -.cbi-dropdown > ul > li > form > input[type="checkbox"] { - height: auto; - margin: 0 -} - -.cbi-dropdown > ul > li input[type="text"] { - height: 20px -} - -.cbi-dropdown[open] > ul.dropdown { - position: absolute; - z-index: 1100; - display: block; - width: auto; - min-width: 100%; - max-width: none; - max-height: 200px!important; - border: thin solid #918e8c; - background: #000; - box-shadow: 0 0 4px #000 -} - -.cbi-dropdown > ul > li[display], -.cbi-dropdown[open] > ul.preview, -.cbi-dropdown[open] > ul.dropdown > li, -.cbi-dropdown[multiple] > ul > li > label, -.cbi-dropdown[multiple][open] > ul.dropdown > li, -.cbi-dropdown[multiple][more] > .more, -.cbi-dropdown[multiple][empty] > .more { - display: flex; - align-items: center; - flex-grow: 1 -} - -.cbi-dropdown[open] > ul.dropdown > li { - border-bottom: thin solid #ccc -} - -.cbi-dropdown[open] > ul.dropdown > li[selected] { - background: #b0d0f0 -} - -.cbi-dropdown[open] > ul.dropdown > li.focus { - background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%) -} - -.cbi-dropdown[open] > ul.dropdown > li:last-child { - margin-bottom: 0; - border-bottom: 0 -} - -.cbi-dropdown[open] > ul.dropdown > li[unselectable] { - opacity: .7 -} - -.cbi-dropdown[disabled] { - pointer-events: none; - opacity: .6 -} - -.cbi-dropdown[open] .zonebadge { - width: auto -} - -#modal_overlay { - position: fixed; - z-index: 900; - top: 4rem; - right: 10000px; - bottom: 0; - left: -10000px; - overflow-y: scroll; - transition: opacity .125s ease-in; - opacity: 0; - background: rgba(0, 0, 0, .7); - -webkit-overflow-scrolling: touch -} - -.modal { - display: flex; - align-items: center; - flex-wrap: wrap; - width: 90%; - min-width: 270px; - max-width: 600px; - min-height: 32px; - max-height: 2400px; - border-radius: 3px!important; - background: #252d38; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .5), 0 0 2px 0 rgba(0, 0, 0, .5); - margin: 5em auto; - padding: 1em -} - -.modal > * { - line-height: normal; - flex-basis: 100% -} - -.modal > pre, -.modal > textarea { - font-size: 1rem; - font-size-adjust: .35; - overflow: auto; - margin-bottom: .5em; - white-space: pre-wrap; - color: #eee; - outline: 0; - background-color: #101010; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); - padding: 8.5px -} - -.modal > h4 { - margin: .5em 0 -} - -.modal ul { - margin-left: 2.2em -} - -.modal li { - list-style-type: square; - color: gray -} - -.modal p { - padding-left: .25rem; - word-break: break-word -} - -.modal .label { - font-size: .6rem; - font-weight: 400; - cursor: default; - border-radius: 0; - padding: .1rem .3rem 0 -} - -.modal .label.warning { - background-color: #f0ad4e!important -} - -.modal .spinning { - margin-bottom: 2em -} - -body.modal-overlay-active { - overflow: hidden; - height: 100vh -} - -body.modal-overlay-active #modal_overlay { - right: 0; - left: 0; - opacity: 1 -} - -.spinning { - position: relative; - padding-left: 32px!important -} - -.spinning::before { - position: absolute; - top: 0; - bottom: 0; - left: .2em; - width: 32px; - content: " "; - background: url(../resources/icons/loading.gif) no-repeat center; - background-size: 16px -} - -.left, -.left::before { - text-align: left!important -} - -.right, -.right::before { - text-align: right!important -} - -.top { - align-self: flex-start!important; - vertical-align: top!important -} - -.bottom { - align-self: flex-end!important; - vertical-align: bottom!important -} - -.inline { - display: inline -} - -.cbi-page-actions { - padding-top: 1rem; - text-align: right -} - -.cbi-page-actions > form[method="post"] { - display: inline-block -} - -.cbi-value-field .cbi-input-invalid { - color: red; - border-bottom-color: red -} - -.cbi-progressbar { - position: relative; - min-width: 170px; - height: 20px; - border: thin solid rgba(0, 0, 0, 0.8); - background: rgba(0, 0, 0, 0.5); - margin: 4px 0 -} - -.cbi-progressbar > div { - width: 0; - height: 100%; - transition: width .25s ease-in; - background: var(--bar-bg) -} - -.cbi-progressbar::after { - font-family: Geogrotesque, Arial, sans-serif; - font-size: 0.9em; - font-weight: 400; - font-size-adjust: .38; - line-height: normal; - position: absolute; - top: 2px; - right: 0; - bottom: 2px; - left: 0; - overflow: hidden; - content: attr(title); - text-align: center; - white-space: pre; - text-overflow: ellipsis; - text-shadow: 0 0 2px #eee -} - -.th[data-type="button"], -.td[data-type="button"], -.th[data-type="fvalue"], -.td[data-type="fvalue"] { - flex: 1 1 2em; - text-align: center -} - -.ifacebadge { - display: inline-flex; - border-bottom: thin solid rgba(0, 0, 0, .8); - background: rgba(0, 0, 0, 0.5); - box-shadow: inset 0 1px 0 rgba(0, 0, 0, .8), 0 1px 2px rgba(0, 0, 0, .05); - padding: .5rem .8rem -} - -td > .ifacebadge, -.td > .ifacebadge { - font-size: .8rem; -} - -.ifacebadge > em, -.ifacebadge > img { - display: inline-block; - align-self: flex-start; - margin: 0 .2rem -} - -.ifacebadge > img + img { - margin: 0 .2rem 0 0 -} - -.network-status-table .ifacebox { - flex-grow: 1; - margin: .5em -} - -.network-status-table .ifacebox-body { - display: flex; - flex-direction: column; - height: 100% -} - -.network-status-table .ifacebox-body > span { - flex: 10 10 auto -} - -.network-status-table .ifacebox-body .ifacebadge { - align-items: center; - flex: 1 1 auto; - min-width: 220px; - margin: .5em .25em 0; - padding: .5em -} - -.cbi-input-textarea { - font-family: Geogrotesque, Arial, sans-serif; - width: 100%; - min-height: 14rem; - color: #000; - padding: .8rem -} - -#syslog { - font-size: small; - overflow-y: hidden; - width: 100%; - min-height: 15rem; - margin-bottom: 20px; - resize: none; - color: #eee; - border: 0; - border-radius: 0; - background-color: #101010; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); - padding: 1rem 1rem 2.5rem -} - -#syslog:focus { - outline: 0 -} - -.uci-change-list { - font-family: Geogrotesque, Arial, sans-serif -} - -.uci-change-list ins, -.uci-change-legend-label ins { - display: block; - text-decoration: none; - border: thin solid green; - background-color: green; - padding: 2px -} - -.uci-change-list del, -.uci-change-legend-label del { - font-style: normal; - display: block; - text-decoration: none; - border: thin solid #bf3630; - background-color: #bf3630; - padding: 2px -} - -.uci-change-list var, -.uci-change-legend-label var { - font-style: normal; - display: block; - text-decoration: none; - border: thin solid #ccc; - background-color: #eee; - padding: 2px -} - -.uci-change-list var ins, -.uci-change-list var del { - font-style: normal; - white-space: pre; - border: 0; - padding: 0 -} - -.uci-change-legend { - padding: 5px -} - -.uci-change-legend-label { - float: left; - width: 150px -} - -.uci-change-legend-label > ins, -.uci-change-legend-label > del, -.uci-change-legend-label > var { - display: block; - float: left; - width: 10px; - height: 10px; - margin-right: 4px -} - -.uci-change-legend-label var ins, -.uci-change-legend-label var del { - line-height: .4; - border: 0 -} - -#iwsvg, -#iwsvg2, -#bwsvg { - border: thin solid #d4d4d4!important -} - -.ifacebox { - line-height: 1.25; - display: inline-flex; - flex-direction: column; - min-width: 100px; - border-bottom: thin solid rgba(0, 0, 0, 0.2); - background-color: rgba(0, 0, 0, 0.2); - box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.8), 0 1px 2px rgba(0, 0, 0, 0.8) -} - -.ifacebox-head { - background: #eee; - color: #000; - padding: .25em -} - -.ifacebox-head.active { - background: var(--bar-bg) -} - -.ifacebox-body { - padding: .25em -} - -.cbi-image-button { - margin-left: .5rem -} - -.zonebadge { - display: inline-block; - padding: .2rem .5rem -} - -.zonebadge .ifacebadge { - border: thin solid rgba(0, 0, 0, 0.8); - margin: .1rem .2rem; - padding: .2rem .3rem -} - -.zonebadge > input[type="text"] { - min-width: 10rem; - margin-top: .3rem; - padding: .16rem 1rem -} - -.zonebadge > em, -.zonebadge > strong { - display: inline-block; - margin: 0 .2rem -} - -.cbi-value-field .cbi-input-checkbox, -.cbi-value-field .cbi-input-radio { - margin-top: .15rem -} - -.cbi-value-field > ul > li .ifacebadge { - margin-top: -.5rem; - margin-left: .4rem; - background-color: #eee -} - -.cbi-section-table-row > .cbi-value-field .cbi-dropdown { - min-width: 7rem -} - -.cbi-section-create { - display: inline-flex; - align-items: center; - margin: .5rem -3px -} - -.cbi-section-create > * { - margin: .5rem -} - -div.cbi-value var, -td.cbi-value-field var, -.td.cbi-value-field var { - font-style: italic; - color: #0069d6 -} - -small { - font-size: 90%; - line-height: 1.42857143; - white-space: normal -} - -.cbi-button-up, -.cbi-button-down { - font-size: 1.2rem; - display: inline-block; - min-width: 0; - padding: .2rem .3rem -} - -.cbi-optionals { - border-top: thin solid #ccc; - padding: 1rem 1rem 0 -} - -.cbi-tooltip-container, -span[data-tooltip], -span[data-tooltip] .label { - cursor: help!important -} - -.cbi-tooltip { - position: absolute; - z-index: 1000; - left: -1000px; - transition: opacity .25s ease-out; - white-space: pre; - pointer-events: none; - opacity: 0; - border-radius: 3px; - background: #252d38; - box-shadow: 0 0 2px #000; - padding: 2px 5px -} - -.cbi-tooltip-container:hover .cbi-tooltip { - left: auto; - transition: opacity .25s ease-in; - opacity: 1 -} - -.zonebadge .cbi-tooltip { - background: inherit; - margin: -1.5rem 0 0 -.5rem; - padding: .25rem -} - -.zonebadge-empty { - color: #404040; - background: repeating-linear-gradient(45deg, rgba(204, 204, 204, .5), rgba(204, 204, 204, .5) 5px, rgba(255, 255, 255, .5) 5px, rgba(255, 255, 255, .5) 10px) -} - -.zone-forwards { - display: flex; - min-width: 10rem -} - -.zone-forwards > * { - flex: 1 1 45% -} - -.zone-forwards > span { - flex-basis: 10%; - text-align: center; - padding: 0 .25rem -} - -.zone-forwards .zone-src, -.zone-forwards .zone-dest { - display: flex; - flex-direction: column -} - -.label { - font-size: .8rem; - font-weight: 700; - white-space: nowrap; - text-decoration: none; - text-transform: uppercase; - color: #fff!important; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - background-color: #bfbfbf; - text-shadow: none; - padding: .3rem .8rem -} - -label > input[type="checkbox"], -label > input[type="radio"] { - position: relative; - top: .4rem; - right: .2rem; - vertical-align: bottom; - margin: 0 -} - -.darkMask { - position: fixed; - z-index: 99; - display: none; - width: 100%; - height: 100%; - content: ""; - background-color: rgba(0, 0, 0, .56) -} - -#diag-rc-output > pre, -#command-rc-output > pre { - font-size: 1.2rem; - font-size-adjust: .35; - line-height: normal; - display: block; - width: 100%; - white-space: pre; - color: #eee; - background-color: #101010; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); - padding: 8.5px -} - -input[name="ping"], -input[name="traceroute"], -input[name="nslookup"] { - width: 80% -} - -.node-main-login > .main fieldset { - display: inline; - overflow: hidden; - margin-bottom: 1rem; - border: 0; - background: none; - box-shadow: none; - padding: .5rem -} - -.node-main-login > .main .cbi-value-title { - width: 9.5rem -} - -.node-main-login > .main #maincontent { - text-align: center -} - -.node-main-login > .main .container { - display: inline-block; - margin-top: 2rem!important; - text-align: left; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); - padding: 1rem 3.5rem 2rem -} - -.node-main-login > .main .cbi-value > * { - display: inline-block!important -} - -.node-admin-status form { - margin: 2rem 2rem 0 0 -} - -[data-page="admin-system-reboot"] p { - padding-left: 2rem -} - -[data-page="admin-system-reboot"] p > span { - position: relative; - top: .1rem; - left: 1rem -} - -#cbi-samba .cbi-value-last .cbi-value-title { - width: auto; - padding-bottom: .6rem -} - -.controls > * > .btn:not([aria-label$="page"]) { - flex-grow: initial!important; - margin-top: .1rem -} - -.controls > #pager > .btn[aria-label$="page"] { - font-size: 1.4rem; - font-weight: 700 -} - -.controls > * > label { - margin-bottom: .2rem -} - -[data-page="admin-system-opkg"] div.btn { - line-height: 3; - display: inline; - padding: .3rem .6rem -} - -[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear), -[data-page="admin-system-opkg"] #maincontent > .container { - margin-top: 2rem; - padding-top: .1rem -} - -[data-page="admin-system-opkg"] #maincontent > .container { - margin: 2rem 2rem 1rem -} - -.td.version, -.td.size { - white-space: normal!important; - word-break: break-word -} - -.cbi-tabmenu + .cbi-section { - margin-top: 0 -} - -#cbi-wireless > #wifi_assoclist_table > .tr { - box-shadow: inset 1px -1px 0 rgba(0, 0, 0, .5), inset -1px -1px 0 rgba(0, 0, 0, .5) -} - -#cbi-wireless > #wifi_assoclist_table > .tr.placeholder > .td { - right: 33px; - bottom: 33px; - left: 33px; - border-top: thin solid rgba(0, 0, 0, .5)!important -} - -#cbi-wireless > #wifi_assoclist_table > .tr.table-titles { - box-shadow: inset 1px 0 0 rgba(0, 0, 0, .5), inset -1px 0 0 rgba(0, 0, 0, .5) -} - -#cbi-wireless > #wifi_assoclist_table > .tr.table-titles > .th { - border-bottom: thin solid rgba(0, 0, 0, .5); - box-shadow: 0 -1px 0 0 rgba(0, 0, 0, .5) -} - -#wifi_assoclist_table > .tr > .td[data-title="RX Rate / TX Rate"] { - width: 23rem -} - -#iptables { - margin: 0 -} - -.Firewall form { - box-shadow: none; - padding: 0 -} - -#cbi-firewall-redirect table *, -#cbi-network-switch_vlan table *, -#cbi-firewall-zone table * { - font-size: small -} - -#cbi-firewall-redirect table input[type="text"], -#cbi-network-switch_vlan table input[type="text"], -#cbi-firewall-zone table input[type="text"] { - width: 5rem -} - -#cbi-firewall-redirect table select, -#cbi-network-switch_vlan table select, -#cbi-firewall-zone table select { - min-width: 3.5rem -} - -#cbi-network-switch_vlan .th, -#cbi-network-switch_vlan .td { - flex-basis: 12% -} - -#applyreboot-container { - margin: 2rem -} - -#applyreboot-section { - line-height: 300%; - margin: 2rem -} - -.OpenVPN a { - line-height: initial!important -} - -.commandbox { - width: 24%!important; - border-bottom: thin solid #ccc; - background: #eee; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); - padding: .5rem 1rem -} - -.commandbox h3 { - line-height: normal!important; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - margin: 6px 0!important -} - -.commandbox div { - left: auto!important -} - -.commandbox code { - position: absolute; - overflow-x: hidden; - overflow-y: auto; - max-width: 60%; - max-height: 55px; - margin-top: -3px; - margin-left: 4px; - text-overflow: ellipsis; - padding: 2px 3px -} - -.commandbox p:first-of-type { - margin-top: -6px -} - -.commandbox p:nth-of-type(2) { - margin-top: 2px -} - -#command-rc-output .alert-message { - line-height: 1.42857143; - position: absolute; - top: 40px; - right: 32px; - max-width: 40%; - animation: anim-fade-in 1.5s forwards; - opacity: 0; - margin: 0 -} - -.pull-right, -.node-main-login > .main form > div:nth-last-child(1) { - float: right -} - -.pull-left, -.cbi-page-actions .cbi-button-link:first-child { - float: left -} - -body:not(.logged-in) > header > .fill > .container > #logo, -.main > .main-left > .nav > .slide > ul, -.main > .main-left[style*="overflow: hidden"] > .nav > .slide > .menu::before, -.cbi-value-helpicon > img, -.tr.placeholder .td[data-title]::before, -.cbi-dropdown > ul.preview, -.cbi-dropdown > ul > li .hide-close, -.cbi-dropdown[open] > ul.dropdown > li .hide-open, -.hidden, -.showSide, -.node-main-login > .main > .main-left, -[data-page^="admin-system-commands"] .panel-title, -[data-page^="command-cfg"] .mobile-hide, -[data-page^="command-cfg"] header > .fill > .container > #logo { - display: none -} - -#xhr_poll_status, -.cbi-value-field > ul > li { - display: flex -} - -.alert-message .btn, -.modal .btn { - padding: .3rem .6rem -} - -.container .alert, -.container .alert-message, -.cbi-map-descr + fieldset { - margin-top: 1rem -} - -.main > .main-left > .nav, -.cbi-value-field > ul > li > label { - margin-top: .5rem -} - -.logo .main-menu-brand { - width: 100%; - padding: 35px 15px 15px -} - -.contact-us { - padding-top: 7px; - font-size: 1rem; - color: #fff -} - -table > tbody > tr > td, -table > tbody > tr > th, -table > tfoot > tr > td, -table > tfoot > tr > th, -table > thead > tr > td, -table > thead > tr > th, -.table > .tbody > .tr > .td, -.table > .tbody > .tr > .th, -.table > .tfoot > .tr > .td, -.table > .tfoot > .tr > .th, -.table > .thead > .tr > .td, -.table > .thead > .tr > .th, -.table > .tr > .td.cbi-value-field, -.table > .tr > .th.cbi-section-table-cell, -.uci-change-list var, -.uci-change-list del, -.uci-change-list ins, -.cbi-section-remove { - padding: .5rem -} - -tr:first-child > td .tr:first-child > .td, -#cbi-wireless .td, -#cbi-network .tr:first-child > .td, -.table[width="100%"] > .tr:first-child > .td, -[data-page="admin-network-diagnostics"] .tr > .td, -.tr.table-titles > .th, -.tr.cbi-section-table-titles > .th, -#iwsvg, -[data-page="admin-status-realtime-bandwidth"] #bwsvg { - border-top: 0!important -} - -.cbi-section-table-row .td, -.center, -.center::before { - text-align: center!important -} - -table table, -.table .table, -.cbi-value-field table, -.cbi-value-field .table, -td > table > tbody > tr > td, -.td > .table > .tbody > .tr > .td, -.cbi-value-field > table > tbody > tr > td, -.cbi-value-field > .table > .tbody > .tr > .td { - border: 0 -} - -.cbi-dropdown > ul > li .hide-open, -.cbi-dropdown[open] > ul.dropdown > li .hide-close { - display: initial -} - -.cbi-dropdown[open], -.cbi-dropdown-container { - position: relative -} - -.cbi-dropdown[empty] > ul > li, -.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder], -.cbi-dropdown[multiple][open] > ul.dropdown > li > form, -.node-main-login > .main .cbi-value, -#cbi-samba .cbi-value-last .cbi-value-field, -#cbi-firewall-zone .table, -#cbi-network-switch_vlan .table { - display: block -} - -.cbi-value input[type="password"], -.cbi-value input[type="text"], -.cbi-value-field .cbi-dropdown, -.cbi-value-field .cbi-input-select, -.node-main-login > .main .cbi-input-text { - min-width: 15rem; - padding-left: 5px; - padding-right: 5px -} - -.network-status-table, -.network-status-table .ifacebox-body > div { - display: flex; - flex-wrap: wrap -} - -[data-page="admin-network-diagnostics"] .table, -.node-main-login .cbi-section { - box-shadow: none -} - -.node-status-overview > .main fieldset:nth-child(4) .td:nth-child(2), -.node-status-processes > .main .table .tr .td:nth-child(3) { - white-space: normal -} - -.main > .main-left > .nav > .slide > .slide-menu > .active > a, -.contact-us a { - color: #fff -} - -.cbi-tabmenu > li:hover, -.cbi-tabmenu > li[class~="cbi-tab"] { - background-color: rgba(0, 0, 0, .5) -} - -.table[width="100%"], -.th[width="100%"], -.td[width="100%"], -.cbi-section-table-row > .cbi-value-field .cbi-input-select, -.cbi-section-table-row > .cbi-value-field .cbi-input-text, -.cbi-section-table-row > .cbi-value-field .cbi-input-password, -.cbi-section-table-row > .cbi-value-field .cbi-dropdown, -.cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child, -.cbi-dropdown .zonebadge, -.node-main-login > .main > .main-right, -#cbi-firewall-zone .td.cbi-section-actions, -.logo { - width: 100% -} - -@keyframes anim-rotate { - 0% { - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0) - } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg) - } -} - -@media screen and (min-height: 585px) { - .node-main-login footer { - position: absolute; - bottom: 0; - width: 100% - } -} - -@keyframes anim-fade-in { - 100% { - opacity: 1 - } -} - -@media screen and (max-width: 1600px) { - header > .fill > .container > #logo { - margin: 0 2.5rem 0 .5rem - } - .main-left { - width: calc(0% + 13rem) - } - .main-right { - width: calc(100% - 13rem) - } - .cbi-dynlist > .item { - max-width: 21.9rem - } - .btn:not(button), - .cbi-button { - font-size: .8rem; - padding: .3rem .6rem - } - .label { - padding: .2rem .6rem - } - .cbi-value-title { - width: 15rem; - padding-right: .6rem - } - fieldset, - .cbi-section { - padding: 1rem - } - .cbi-input-textarea { - font-size: small - } - .node-admin-status > .main fieldset li > a { - padding: .3rem .6rem - } - #cbi-firewall-zone > .table { - display: block - } -} - -@media screen and (max-width: 1366px) { - header { - height: 3.5rem - } - header > .fill > .container { - margin-top: .25rem; - cursor: default - } - .main { - top: 3.5rem; - height: calc(100% - 3.5rem) - } - .main-left { - top: 3.5rem; - width: calc(0% + 13rem); - height: calc(100% - 3.5rem) - } - .main-right { - width: calc(100% - 13rem) - } - .cbi-dynlist > .item { - max-width: 19.9rem - } - .cbi-tabmenu > li > a, - .tabs > li > a { - padding: .2rem .5rem - } - .panel-title { - font-size: 1.1rem; - padding-bottom: 1rem - } - table { - font-size: .7rem!important; - width: 100%!important - } - .table .cbi-input-text { - width: 100% - } - .main > .main-left > .nav > li, - .main > .main-left > .nav > li a, - .main > .main-left > .nav > .slide > .menu { - font-size: .9rem - } - .main > .main-left > .nav > .slide > .slide-menu > li > a { - font-size: .7rem - } - #modal_overlay { - top: 3.5rem - } - [data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table) { - display: block - } - [data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table), - [data-page="admin-network-firewall-rules"] .table:not(.cbi-section-table), - [data-page="admin-network-hosts"] .table { - overflow-y: visible - } - .commandbox { - width: 32%!important - } -} - -@media screen and (max-width: 1152px) { - header > .fill > .container > .brand { - position: relative - } - [data-page^="command-cfg"] header > .fill > .container > .brand { - display: block; - margin-top: -1.75rem - } - html, - .main { - overflow-y: visible - } - .main-left { - position: fixed; - z-index: 100; - width: 0 - } - .main-right { - width: 100% - } - .cbi-dynlist > .item { - max-width: 14.9rem - } - .showSide { - display: inline-block; - overflow: visible; - margin-right: .5rem; - cursor: pointer; - border-radius: 50%; - padding: .1rem - } - .showSide:before { - font-size: 1.7rem; - content: "\e20e" - } - body:not(.logged-in) .showSide { - visibility: hidden; - width: 0; - margin: 0; - padding: 0 - } - .cbi-value-title { - width: 9rem; - padding-right: 1rem - } - #diag-rc-output > pre, - #command-rc-output > pre { - font-size: 1rem - } - #packages.table { - display: grid - } - .tr { - display: flex; - flex-direction: row; - flex-wrap: wrap - } - .Overview .table[width="100%"] > .tr { - flex-wrap: nowrap - } - .tr.placeholder { - border-bottom: thin solid #ddd - } - .tr.placeholder > .td, - #cbi-firewall .tr > .td, - #cbi-network .tr:nth-child(2) > .td, - .cbi-section #wifi_assoclist_table .tr > .td { - border-top: 0 - } - .th, - .td { - display: inline-block; - align-self: flex-start; - flex: 2 2 25%; - text-overflow: ellipsis; - word-wrap: break-word - } - .td select, - .td input[type="text"] { - width: 100%; - word-wrap: normal - } - .td [data-dynlist] > input, - .td input.cbi-input-password { - width: calc(100% - 1.5rem) - } - .td[data-type="button"], - .td[data-type="fvalue"] { - flex: 1 1 12.5%; - text-align: left - } - .th.cbi-value-field, - .td.cbi-value-field, - .th.cbi-section-table-cell, - .td.cbi-section-table-cell { - flex-basis: auto; - padding-top: 1rem - } - .cbi-section-table-row { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-between; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12) - } - .td.cbi-value-field, - .cbi-section-table-cell { - display: inline-block; - flex: 10 10 auto; - flex-basis: 50%; - text-align: center - } - .td.cbi-section-actions { - vertical-align: bottom - } - .tr[data-title]::before, - .tr.cbi-section-table-titles.named::before { - font-size: .9rem; - display: block; - flex: 1 1 100%; - border-bottom: thin solid rgba(0, 0, 0, .26); - background: #90c0e0 - } - .cbi-button + .cbi-button { - margin-left: 0 - } - .td.cbi-section-actions > * > *, - .td.cbi-section-actions > * > form > * { - margin: 2.1px 3px - } - .Firewall form { - position: static!important; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); - margin: 0 0 2rem; - padding: 2rem - } - .Firewall form input { - width: 100%!important; - margin: 1rem 0 0 - } - .Firewall .center, - .Firewall .center::before { - text-align: left!important - } - .commandbox { - width: 100%!important - } - header > .fill > .container > #logo, - .tr.table-titles, - .tr.cbi-section-table-titles, - .tr.cbi-section-table-descr { - display: none - } - .node-main-login > .main .cbi-value-title, - .td[data-title], - [data-page^="admin-status-realtime"] .td[id] { - text-align: left - } - .table, - .td[data-title]::before { - display: block - } -} - -@media screen and (max-width: 600px) { - .cbi-progressbar::after { - font-size: .95em; - line-height: 1.5 - } - fieldset, - .cbi-section { - margin: 1rem 0 0; - padding: 1rem - } - .tabs { - margin: 0 -1rem - } - #maincontent > .container { - margin: 0 1rem 1.5rem - } - .main > .main-left > .nav > .slide > .menu { - font-size: 1.2rem - } - .cbi-value-title { - display: block; - width: 100%; - min-width: 0!important; - margin-top: 1rem; - margin-bottom: .5rem; - text-align: left - } - .cbi-value > .cbi-value-field { - display: inline-block - } - .cbi-tabmenu > li, - .tabs > li { - padding: .6rem 0 - } - .cbi-tabmenu > li > a, - .tabs > li > a { - font-size: .9rem; - padding: .2rem .3rem - } - .cbi-page-actions > .cbi-button { - margin-top: .2rem - } - .node-main-login > .main .container { - margin: 2rem 1.2rem 1.5rem!important; - padding: .3rem 1.7rem 2rem 1.6rem - } - .node-main-login > .main .cbi-value { - padding: 0 - } - .node-main-login > .main form > div:nth-last-child(1) { - margin-top: 2rem - } - .node-main-login > .main .cbi-value-title { - font-size: 1.2rem; - width: 100%!important - } - .node-main-login > .main fieldset { - margin: 0; - padding: .5rem - } - .commandbox p:first-of-type { - margin-top: -8px - } - h2 { - font-size: 2rem - } - .panel-title { - font-size: 1.4rem; - padding-bottom: 1rem - } - .node-system-packages > .main .cbi-value.cbi-value-last > div { - width: 100%!important - } - .th, - .td { - flex-basis: 50% - } - .td.cbi-value-field { - flex-basis: 100% - } - .td.cbi-value-field[data-type="button"], - .td.cbi-value-field[data-type="fvalue"] { - flex-basis: 25%; - text-align: left - } - td > .ifacebadge, - .td > .ifacebadge { - font-size: .62rem - } - #cbi-wireless .td { - overflow: hidden - } - body, - #diag-rc-output > pre, - #command-rc-output > pre, - code { - font-size: .8rem - } - .main > .main-left > .nav > .slide > .slide-menu > li > a, - .tr[data-title]::before, - .tr.cbi-section-table-titles.named::before { - font-size: 1rem - } - .cbi-value-field, - .cbi-value-description, - .node-system-packages > .main .cbi-value .cbi-value-field input { - width: 100% - } - .cbi-page-actions > div > input, - .mobile-hide, - .hide-sm, - .hide-xs:not([data-title="MAC-Address"]) { - display: none - } - .tabs > li > a, - select, - input { - font-size: .9rem - } -} - -@media screen and (min-width: 600px) { - ::-webkit-scrollbar { - width: 10px; - height: 10px; - background: transparent - } - ::-webkit-scrollbar-thumb { - background: #9e9e9e - } - ::-webkit-scrollbar-thumb:hover { - background: #757575 - } - ::-webkit-scrollbar-thumb:active { - background: #424242 - } -} - -@media screen and (min-width: 1152px) { - .cbi-value-field .cbi-input-select { - width: 20rem - } - .cbi-section-node .tr { - overflow: hidden - } - .cbi-value input[type="password"], - .cbi-value input[type="text"], - .cbi-value-field .cbi-dropdown { - min-width: 20rem - } -} - -@media screen and (min-width: 1366px) { - .cbi-value-field .cbi-input-select { - width: 22rem - } - .cbi-value input[type="password"], - .cbi-value input[type="text"], - .cbi-value-field .cbi-dropdown { - min-width: 22rem - } -} - -@media screen and (min-width: 1600px) { - .cbi-value-field .cbi-input-select { - width: 25rem - } - .cbi-value input[type="password"], - .cbi-value input[type="text"], - .cbi-value-field .cbi-dropdown { - min-width: 25rem - } -} diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/favicon.ico b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/favicon.ico deleted file mode 100644 index 626343a5b0..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/favicon.ico and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/css/font-awesome.min.css b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/css/font-awesome.min.css deleted file mode 100644 index 540440ce89..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/FontAwesome.otf b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f36e..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/FontAwesome.otf and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.eot b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.svg b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e53..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.ttf b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.woff b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4b0..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.woff2 b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6040..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/font-awesome/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/bg.jpg b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/bg.jpg deleted file mode 100644 index dd17e84c64..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/bg.jpg and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/chat.gif b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/chat.gif deleted file mode 100644 index 6b1504a73d..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/chat.gif and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/connect.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/connect.png deleted file mode 100644 index d25e1e181d..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/connect.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/cont.gif b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/cont.gif deleted file mode 100644 index 9ec55b5aea..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/cont.gif and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/cont.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/cont.png deleted file mode 100644 index d25874af4c..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/cont.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/favicon.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/favicon.png deleted file mode 100644 index 3cf424269d..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/favicon.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/firmware.gif b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/firmware.gif deleted file mode 100644 index 1304478e68..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/firmware.gif and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/firmware.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/firmware.png deleted file mode 100644 index ce715cdf35..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/firmware.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/hot.gif b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/hot.gif deleted file mode 100644 index 16e705d929..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/hot.gif and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/link.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/link.png deleted file mode 100644 index 34832e722f..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/link.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/logo.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/logo.png deleted file mode 100644 index abbba3566d..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/logo.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/ncont.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/ncont.png deleted file mode 100644 index 0046eeb54c..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/ncont.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/net.gif b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/net.gif deleted file mode 100644 index 6a78f52456..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/net.gif and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/set.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/set.png deleted file mode 100644 index f7700c3b62..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/set.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/view.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/view.png deleted file mode 100644 index c281768080..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/view.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/wifi.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/wifi.png deleted file mode 100644 index 833c6771c5..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/wifi.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/wifilogo.png b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/wifilogo.png deleted file mode 100644 index 0720cb5084..0000000000 Binary files a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/images/wifilogo.png and /dev/null differ diff --git a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/js/jquery.min.js b/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/js/jquery.min.js deleted file mode 100644 index b893e0a99d..0000000000 --- a/package/ctcgfw/luci-theme-Butterfly-dark/htdocs/luci-static/Butterfly_dark/js/jquery.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery v3.5.0 | (c) 2005, 2020 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; - -return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("