diff --git a/luasrc/view/admin_network/user_status.htm b/luasrc/view/admin_network/user_status.htm new file mode 100755 index 000000000..0519ecba6 --- /dev/null +++ b/luasrc/view/admin_network/user_status.htm @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/luci-app-internet-detector/README.md b/luci-app-internet-detector/README.md index 5adf1b0c6..7d4da8e23 100644 --- a/luci-app-internet-detector/README.md +++ b/luci-app-internet-detector/README.md @@ -15,22 +15,22 @@ Internet-detector is an application for checking the availability of the Interne ## Installation notes (OpenWrt >= 21.02) opkg update - wget --no-check-certificate -O /tmp/internet-detector_1.3.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector_1.3.2-r1_all.ipk - opkg install /tmp/internet-detector_1.3.2-r1_all.ipk - rm /tmp/internet-detector_1.3.2-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector_1.3.3-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector_1.3.3-r1_all.ipk + opkg install /tmp/internet-detector_1.3.3-r1_all.ipk + rm /tmp/internet-detector_1.3.3-r1_all.ipk /etc/init.d/internet-detector start /etc/init.d/internet-detector enable - wget --no-check-certificate -O /tmp/luci-app-internet-detector_1.3.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-app-internet-detector_1.3.2-r1_all.ipk - opkg install /tmp/luci-app-internet-detector_1.3.2-r1_all.ipk - rm /tmp/luci-app-internet-detector_1.3.2-r1_all.ipk + wget --no-check-certificate -O /tmp/luci-app-internet-detector_1.3.3-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-app-internet-detector_1.3.3-r1_all.ipk + opkg install /tmp/luci-app-internet-detector_1.3.3-r1_all.ipk + rm /tmp/luci-app-internet-detector_1.3.3-r1_all.ipk /etc/init.d/rpcd restart i18n-ru: - wget --no-check-certificate -O /tmp/luci-i18n-internet-detector-ru_1.3.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-i18n-internet-detector-ru_1.3.2-r1_all.ipk - opkg install /tmp/luci-i18n-internet-detector-ru_1.3.2-r1_all.ipk - rm /tmp/luci-i18n-internet-detector-ru_1.3.2-r1_all.ipk + wget --no-check-certificate -O /tmp/luci-i18n-internet-detector-ru_1.3.3-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/luci-i18n-internet-detector-ru_1.3.3-r1_all.ipk + opkg install /tmp/luci-i18n-internet-detector-ru_1.3.3-r1_all.ipk + rm /tmp/luci-i18n-internet-detector-ru_1.3.3-r1_all.ipk ## Screenshots: @@ -42,9 +42,9 @@ i18n-ru: **Dependences:** modemmanager. - wget --no-check-certificate -O /tmp/internet-detector-mod-modem-restart_1.3.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-modem-restart_1.3.2-r1_all.ipk - opkg install /tmp/internet-detector-mod-modem-restart_1.3.2-r1_all.ipk - rm /tmp/internet-detector-mod-modem-restart_1.3.2-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector-mod-modem-restart_1.3.3-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-modem-restart_1.3.3-r1_all.ipk + opkg install /tmp/internet-detector-mod-modem-restart_1.3.3-r1_all.ipk + rm /tmp/internet-detector-mod-modem-restart_1.3.3-r1_all.ipk /etc/init.d/internet-detector restart ![](https://github.com/gSpotx2f/luci-app-internet-detector/blob/master/screenshots/04.jpg) @@ -53,11 +53,9 @@ i18n-ru: **Dependences:** mailsend. - wget --no-check-certificate -O /tmp/internet-detector-mod-email_1.3.2-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-email_1.3.2-r1_all.ipk - opkg install /tmp/internet-detector-mod-email_1.3.2-r1_all.ipk - rm /tmp/internet-detector-mod-email_1.3.2-r1_all.ipk + wget --no-check-certificate -O /tmp/internet-detector-mod-email_1.3.3-r1_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/current/internet-detector-mod-email_1.3.3-r1_all.ipk + opkg install /tmp/internet-detector-mod-email_1.3.3-r1_all.ipk + rm /tmp/internet-detector-mod-email_1.3.3-r1_all.ipk /etc/init.d/internet-detector restart ![](https://github.com/gSpotx2f/luci-app-internet-detector/blob/master/screenshots/05.jpg) - -## [OpenWrt 19.07](https://github.com/gSpotx2f/luci-app-internet-detector/tree/19.07) diff --git a/luci-app-internet-detector/internet-detector-mod-email/Makefile b/luci-app-internet-detector/internet-detector-mod-email/Makefile index 34700e735..7ca482f12 100644 --- a/luci-app-internet-detector/internet-detector-mod-email/Makefile +++ b/luci-app-internet-detector/internet-detector-mod-email/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector-mod-email -PKG_VERSION:=1.3.2 +PKG_VERSION:=1.3.3 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile b/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile index 21b6c0cd0..407fc6de2 100644 --- a/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile +++ b/luci-app-internet-detector/internet-detector-mod-modem-restart/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector-mod-modem-restart -PKG_VERSION:=1.3.2 +PKG_VERSION:=1.3.3 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector/Makefile b/luci-app-internet-detector/internet-detector/Makefile index 93d1ee633..eb411f732 100644 --- a/luci-app-internet-detector/internet-detector/Makefile +++ b/luci-app-internet-detector/internet-detector/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=internet-detector -PKG_VERSION:=1.3.2 +PKG_VERSION:=1.3.3 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/luci-app-internet-detector/internet-detector/files/etc/init.d/internet-detector b/luci-app-internet-detector/internet-detector/files/etc/init.d/internet-detector index a9c062b1b..2e2c7e2f4 100755 --- a/luci-app-internet-detector/internet-detector/files/etc/init.d/internet-detector +++ b/luci-app-internet-detector/internet-detector/files/etc/init.d/internet-detector @@ -10,7 +10,7 @@ run_instance() { config_get enabled "$1" enabled "0" if [ $enabled = "1" ]; then procd_open_instance "$1" - procd_set_param command "$PROG" "nodaemon" "$1" + procd_set_param command "$PROG" "-a" "nodaemon" "-i" "$1" procd_close_instance fi } @@ -24,7 +24,7 @@ start_service() { } stop_service() { - $PROG stop + $PROG -a stop } reload_service() { diff --git a/luci-app-internet-detector/internet-detector/files/usr/bin/internet-detector b/luci-app-internet-detector/internet-detector/files/usr/bin/internet-detector index c4959701c..c3ec1b996 100755 --- a/luci-app-internet-detector/internet-detector/files/usr/bin/internet-detector +++ b/luci-app-internet-detector/internet-detector/files/usr/bin/internet-detector @@ -11,68 +11,88 @@ (с) 2024 gSpot (https://github.com/gSpotx2f/luci-app-internet-detector) --]] +local getopt = require("posix.unistd").getopt local InternetDetector = require("internet-detector.main") local function help() - return string.format( - "Usage: %s daemon | nodaemon | debug | stop | status | inet-status | uipoll | --help", - arg[0] - ) + return table.concat({ + [1] = string.format( + "Usage: %s -a daemon -i | -a nodaemon -i | -a debug -i | -a stop | -S | -I | -U | -h", + arg[0]), + [2] = " -a ARG action: daemon | nodaemon | debug | stop", + [3] = " -i ARG instance: UCI instance name", + [4] = " -S status", + [5] = " -I inet status", + [6] = " -U uipoll", + [7] = " -h print this help text" + }, "\n") end -local helpArgs = { ["-h"] = true, ["--help"] = true, help = true } -if arg[1] == "daemon" then - if arg[2] then - if InternetDetector:setServiceConfig(arg[2]) then +local action, instance +local params = {} +local last_index = 1 +for r, optarg, optind in getopt(arg, "a:i:SIUh") do + if r == "?" then + print("Error! Unrecognized option") + os.exit(1) + end + last_index = optind + if r == "a" then + action = optarg + elseif r == "i" then + instance = optarg + else + params[#params + 1] = r + end +end +if action == "stop" then + InternetDetector:stop() +elseif action then + if not instance then + print("Error! Instance not specified [-i]") + os.exit(1) + end + if action == "daemon" then + if InternetDetector:setServiceConfig(instance) then InternetDetector:daemon() else os.exit(126) end - else - print(help()) - os.exit(1) - end -elseif arg[1] == "nodaemon" then - if arg[2] then - if InternetDetector:setServiceConfig(arg[2]) then + elseif action == "nodaemon" then + if InternetDetector:setServiceConfig(instance) then InternetDetector:noDaemon() else os.exit(126) end - else - print(help()) - os.exit(1) - end -elseif arg[1] == "debug" then - if arg[2] then - if InternetDetector:setServiceConfig(arg[2]) then + elseif action == "debug" then + if InternetDetector:setServiceConfig(instance) then InternetDetector.debug = true InternetDetector:noDaemon() else os.exit(126) end + else + print("Error! Wrong action [-a]") + os.exit(1) + end +else + if params[1] == "S" then + print(InternetDetector:status()) + elseif params[1] == "I" then + print(InternetDetector:inetStatus()) + elseif params[1] == "U" then + if InternetDetector:status() == "stoped" then + os.exit(126) + else + InternetDetector:setSIGUSR() + print(InternetDetector:inetStatus()) + end + elseif params[1] == "h" then + print(help()) else print(help()) os.exit(1) end -elseif arg[1] == "stop" then - InternetDetector:stop() -elseif arg[1] == "status" then - print(InternetDetector:status()) -elseif arg[1] == "inet-status" then - print(InternetDetector:inetStatus()) -elseif arg[1] == "uipoll" then - if InternetDetector:status() == "stoped" then - os.exit(126) - else - InternetDetector:setSIGUSR() - print(InternetDetector:inetStatus()) - end -elseif helpArgs[arg[1]] then - print(help()) -else - print(help()) - os.exit(1) end os.exit(0) diff --git a/luci-app-internet-detector/luci-app-internet-detector/Makefile b/luci-app-internet-detector/luci-app-internet-detector/Makefile index 4c01cac60..46a05741b 100644 --- a/luci-app-internet-detector/luci-app-internet-detector/Makefile +++ b/luci-app-internet-detector/luci-app-internet-detector/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-internet-detector -PKG_VERSION:=1.3.2 +PKG_VERSION:=1.3.3 PKG_RELEASE:=1 LUCI_TITLE:=LuCI support for internet-detector LUCI_DEPENDS:=+internet-detector diff --git a/luci-app-internet-detector/luci-app-internet-detector/root/usr/libexec/rpcd/luci.internet-detector b/luci-app-internet-detector/luci-app-internet-detector/root/usr/libexec/rpcd/luci.internet-detector index 2274633d6..824767d30 100755 --- a/luci-app-internet-detector/luci-app-internet-detector/root/usr/libexec/rpcd/luci.internet-detector +++ b/luci-app-internet-detector/luci-app-internet-detector/root/usr/libexec/rpcd/luci.internet-detector @@ -49,7 +49,7 @@ local function startUiInstances() "instance", function(s) if s.enabled == "1" then - os.execute(string.format("%s daemon %s", appExec, s[".name"])) + os.execute(string.format("%s -a daemon -i %s", appExec, s[".name"])) end end ) diff --git a/luci-app-oaf/Makefile b/luci-app-oaf/Makefile index 6dce8d628..bbcfe9a6a 100755 --- a/luci-app-oaf/Makefile +++ b/luci-app-oaf/Makefile @@ -9,7 +9,7 @@ LUCI_TITLE:=Open App Filter Module LUCI_PKGARCH:=all LUCI_DEPENDS:=+appfilter +kmod-oaf +luci-compat PKG_NAME:=luci-app-oaf -PKG_VERSION:=5.0.2 +PKG_VERSION:=6.1.1 PKG_RELEASE:=1 include $(TOPDIR)/feeds/luci/luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10001.png new file mode 100755 index 000000000..ab5820e88 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10002.png new file mode 100755 index 000000000..fbc17f000 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10003.png new file mode 100755 index 000000000..81f76f4fd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10004.png new file mode 100755 index 000000000..e3447dd1e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10005.png new file mode 100755 index 000000000..b208cea6e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10006.png new file mode 100755 index 000000000..e9e9c4e58 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10007.png new file mode 100755 index 000000000..9d8923b2e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10008.png new file mode 100755 index 000000000..a37cc9be3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1001.png new file mode 100755 index 000000000..a01fbff24 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10010.png new file mode 100755 index 000000000..dd2516424 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10011.png new file mode 100755 index 000000000..6bbdc0e8f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10012.png new file mode 100755 index 000000000..23046e6d5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10013.png new file mode 100755 index 000000000..cbdc7d08a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10014.png new file mode 100755 index 000000000..27541b577 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10015.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10015.png new file mode 100755 index 000000000..ebefaf5a7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10015.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10016.png new file mode 100755 index 000000000..69a2c9696 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10017.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10017.png new file mode 100755 index 000000000..8cb17a187 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10017.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10018.png new file mode 100755 index 000000000..41a1d52e4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10019.png new file mode 100755 index 000000000..37a932175 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1002.png new file mode 100755 index 000000000..eb3716adf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10020.png new file mode 100755 index 000000000..5dce396ed Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10021.png new file mode 100755 index 000000000..d4c79dcf5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10022.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10022.png new file mode 100755 index 000000000..6bc4e3230 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10022.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10023.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10023.png new file mode 100755 index 000000000..97b98d1ab Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10023.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10024.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10024.png new file mode 100755 index 000000000..6e56f2d16 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10024.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10025.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10025.png new file mode 100755 index 000000000..ac3e1a47a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10025.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10026.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10026.png new file mode 100755 index 000000000..b8e57178d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10026.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10027.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10027.png new file mode 100755 index 000000000..c4e451db8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10027.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10028.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10028.png new file mode 100755 index 000000000..ad9a1b178 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10028.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10029.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10029.png new file mode 100755 index 000000000..492d38cf0 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10029.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1003.png new file mode 100755 index 000000000..ced03216d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10030.png new file mode 100755 index 000000000..a035e2e8e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10031.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10031.png new file mode 100755 index 000000000..3a8a3dcd8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10031.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10032.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10032.png new file mode 100755 index 000000000..2bae1f5c6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10032.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10033.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10033.png new file mode 100755 index 000000000..24dea10eb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10033.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10034.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10034.png new file mode 100755 index 000000000..4825ca475 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10034.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10035.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10035.png new file mode 100755 index 000000000..07e56e14c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10035.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10036.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10036.png new file mode 100755 index 000000000..c256076c2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10036.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10037.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10037.png new file mode 100755 index 000000000..49b20fbdd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10037.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10038.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10038.png new file mode 100755 index 000000000..bd3e65e17 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10038.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10039.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10039.png new file mode 100755 index 000000000..f278b981f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10039.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1004.png new file mode 100755 index 000000000..6d73e9559 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10040.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10040.png new file mode 100755 index 000000000..f503fdb6b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10040.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1005.png new file mode 100755 index 000000000..75e702e9b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1006.png new file mode 100755 index 000000000..83430bdbe Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1007.png new file mode 100755 index 000000000..6ff6bbcda Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1008.png new file mode 100755 index 000000000..772833077 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1009.png new file mode 100755 index 000000000..9b6c8e538 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/10099.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10099.png new file mode 100755 index 000000000..3ccf82f45 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/10099.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1010.png new file mode 100755 index 000000000..0e4e232de Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1011.png new file mode 100755 index 000000000..56ccfb8f2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1012.png new file mode 100755 index 000000000..526b20644 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1013.png new file mode 100755 index 000000000..8b30ba1b5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1014.png new file mode 100755 index 000000000..9b0685997 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1016.png new file mode 100755 index 000000000..ab5820e88 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1018.png new file mode 100755 index 000000000..fbc17f000 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/1019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1019.png new file mode 100755 index 000000000..7bdfb40fe Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/1019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/11001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/11001.png new file mode 100755 index 000000000..74060db5b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/11001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/11002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/11002.png new file mode 100755 index 000000000..a8d35fd06 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/11002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/11003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/11003.png new file mode 100755 index 000000000..090bb5f16 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/11003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14001.png new file mode 100755 index 000000000..7f8e532e9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14002.png new file mode 100755 index 000000000..67a042485 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14003.png new file mode 100755 index 000000000..6a790fe81 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14004.png new file mode 100755 index 000000000..4c374faf9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14005.png new file mode 100755 index 000000000..f92f89f7b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14006.png new file mode 100755 index 000000000..7cb1b8d2d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14007.png new file mode 100755 index 000000000..b9056dc98 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14008.png new file mode 100755 index 000000000..7a3b67eaf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14009.png new file mode 100755 index 000000000..0e6cd8e4c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14010.png new file mode 100755 index 000000000..8b54042ca Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14011.png new file mode 100755 index 000000000..b61b31efb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14012.png new file mode 100755 index 000000000..64f342b03 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14013.png new file mode 100755 index 000000000..29d301b02 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14014.png new file mode 100755 index 000000000..c283c48b2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14015.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14015.png new file mode 100755 index 000000000..d127d05e7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14015.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14016.png new file mode 100755 index 000000000..4b47576a7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14017.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14017.png new file mode 100755 index 000000000..6bc4dce20 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14017.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14018.png new file mode 100755 index 000000000..aacac0c17 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14019.png new file mode 100755 index 000000000..5e3c49676 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14020.png new file mode 100755 index 000000000..093154659 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14021.png new file mode 100755 index 000000000..b0bba8aaf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14022.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14022.png new file mode 100755 index 000000000..f96c1b568 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14022.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14023.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14023.png new file mode 100755 index 000000000..40251b5ad Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14023.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14024.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14024.png new file mode 100755 index 000000000..7f6f95d66 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14024.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14025.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14025.png new file mode 100755 index 000000000..7380450a4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14025.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14026.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14026.png new file mode 100755 index 000000000..3e0a0f920 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14026.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/14027.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14027.png new file mode 100755 index 000000000..783a46ca3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/14027.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2001.png new file mode 100755 index 000000000..5aedcefa6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2002.png new file mode 100755 index 000000000..33a34ddd1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2003.png new file mode 100755 index 000000000..1723dcd26 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2004.png new file mode 100755 index 000000000..be1225ab5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2005.png new file mode 100755 index 000000000..1aed8064f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2006.png new file mode 100755 index 000000000..fa6ebaa76 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2007.png new file mode 100755 index 000000000..924a5a221 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2008.png new file mode 100755 index 000000000..d5e1fd4c5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2009.png new file mode 100755 index 000000000..11da6624f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2010.png new file mode 100755 index 000000000..f86222ab9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2011.png new file mode 100755 index 000000000..2ea2bd4ed Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2012.png new file mode 100755 index 000000000..dc012b16c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2013.png new file mode 100755 index 000000000..8526f2850 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2014.png new file mode 100755 index 000000000..0f2a8ed40 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2015.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2015.png new file mode 100755 index 000000000..97a9c5c01 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2015.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2016.png new file mode 100755 index 000000000..5b3e18d36 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2017.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2017.png new file mode 100755 index 000000000..d4db13fb7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2017.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2018.png new file mode 100755 index 000000000..24302ee74 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2019.png new file mode 100755 index 000000000..6780c7f5b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2020.png new file mode 100755 index 000000000..4d35ebc89 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2021.png new file mode 100755 index 000000000..d6a35f03d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2022.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2022.png new file mode 100755 index 000000000..c9c6ba98f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2022.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2023.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2023.png new file mode 100755 index 000000000..14626ce09 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2023.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2025.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2025.png new file mode 100755 index 000000000..5d8b5f815 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2025.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2026.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2026.png new file mode 100755 index 000000000..e70274329 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2026.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2027.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2027.png new file mode 100755 index 000000000..7e907bb4d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2027.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2028.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2028.png new file mode 100755 index 000000000..9a92371d1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2028.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2030.png new file mode 100755 index 000000000..8f046de29 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2031.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2031.png new file mode 100755 index 000000000..b86a6cfaf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2031.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2032.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2032.png new file mode 100755 index 000000000..24932cc5f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2032.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2033.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2033.png new file mode 100755 index 000000000..a419e2b1f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2033.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2034.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2034.png new file mode 100755 index 000000000..7863637aa Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2034.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2035.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2035.png new file mode 100755 index 000000000..dc2dbcbf3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2035.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2036.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2036.png new file mode 100755 index 000000000..84d7f0082 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2036.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2037.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2037.png new file mode 100755 index 000000000..1a87aed26 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2037.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2039.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2039.png new file mode 100755 index 000000000..de4299124 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2039.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2040.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2040.png new file mode 100755 index 000000000..59dc8fbfa Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2040.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2041.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2041.png new file mode 100755 index 000000000..9eeb0bca4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2041.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2042.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2042.png new file mode 100755 index 000000000..a102313b9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2042.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2043.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2043.png new file mode 100755 index 000000000..8e352d8e3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2043.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2050.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2050.png new file mode 100755 index 000000000..e75d5adb1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2050.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2051.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2051.png new file mode 100755 index 000000000..1ce8fbd17 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2051.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2052.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2052.png new file mode 100755 index 000000000..a8ff760ab Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2052.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2053.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2053.png new file mode 100755 index 000000000..9e5cebc15 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2053.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2054.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2054.png new file mode 100755 index 000000000..3b5731676 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2054.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2055.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2055.png new file mode 100755 index 000000000..f0de2696d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2055.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2056.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2056.png new file mode 100755 index 000000000..e105fea24 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2056.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2057.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2057.png new file mode 100755 index 000000000..4cb2174db Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2057.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2058.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2058.png new file mode 100755 index 000000000..614bf3f01 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2058.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2059.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2059.png new file mode 100755 index 000000000..64582e758 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2059.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2060.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2060.png new file mode 100755 index 000000000..985f33531 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2060.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2061.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2061.png new file mode 100755 index 000000000..16d4d851f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2061.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2067.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2067.png new file mode 100755 index 000000000..5a9647e40 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2067.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2068.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2068.png new file mode 100755 index 000000000..3e3ed9ea4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2068.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2069.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2069.png new file mode 100755 index 000000000..1ab35931a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2069.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2070.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2070.png new file mode 100755 index 000000000..96cb6fe3b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2070.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2071.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2071.png new file mode 100755 index 000000000..419765fbf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2071.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2072.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2072.png new file mode 100755 index 000000000..1775754cd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2072.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2073.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2073.png new file mode 100755 index 000000000..edbebc120 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2073.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2074.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2074.png new file mode 100755 index 000000000..479549ab9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2074.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2075.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2075.png new file mode 100755 index 000000000..c73c4d842 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2075.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2076.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2076.png new file mode 100755 index 000000000..b2df1e17e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2076.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2077.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2077.png new file mode 100755 index 000000000..64ea2d3a4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2077.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2078.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2078.png new file mode 100755 index 000000000..b2df1e17e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2078.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2079.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2079.png new file mode 100755 index 000000000..e5edcefba Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2079.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2080.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2080.png new file mode 100755 index 000000000..d5b4536ad Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2080.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2081.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2081.png new file mode 100755 index 000000000..e77f73a32 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2081.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2082.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2082.png new file mode 100755 index 000000000..5443e136c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2082.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2083.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2083.png new file mode 100755 index 000000000..b85fb3888 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2083.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2084.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2084.png new file mode 100755 index 000000000..b880031a2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2084.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2085.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2085.png new file mode 100755 index 000000000..ee01aad98 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2085.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2087.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2087.png new file mode 100755 index 000000000..a465445f9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2087.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2088.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2088.png new file mode 100755 index 000000000..e9319416f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2088.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2089.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2089.png new file mode 100755 index 000000000..2f2e592fe Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2089.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2093.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2093.png new file mode 100755 index 000000000..168db6683 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2093.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2098.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2098.png new file mode 100755 index 000000000..b3babfe4d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2098.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2099.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2099.png new file mode 100755 index 000000000..efef0a7af Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2099.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2100.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2100.png new file mode 100755 index 000000000..2123e7b84 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2100.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2101.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2101.png new file mode 100755 index 000000000..479549ab9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2101.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2102.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2102.png new file mode 100755 index 000000000..241101f54 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2102.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2103.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2103.png new file mode 100755 index 000000000..7e112f158 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2103.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2104.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2104.png new file mode 100755 index 000000000..aaf93f1db Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2104.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2105.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2105.png new file mode 100755 index 000000000..4b2aad2ae Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2105.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2106.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2106.png new file mode 100755 index 000000000..5af8ee931 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2106.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2107.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2107.png new file mode 100755 index 000000000..1405aa016 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2107.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2108.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2108.png new file mode 100755 index 000000000..9927ea5a2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2108.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2109.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2109.png new file mode 100755 index 000000000..f31dc61c4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2109.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2110.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2110.png new file mode 100755 index 000000000..04144a1bb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2110.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2111.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2111.png new file mode 100755 index 000000000..14626ce09 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2111.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2112.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2112.png new file mode 100755 index 000000000..515767aef Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2112.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2113.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2113.png new file mode 100755 index 000000000..f0590bd59 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2113.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2115.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2115.png new file mode 100755 index 000000000..169dbfccb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2115.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/2116.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2116.png new file mode 100755 index 000000000..824f95ece Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/2116.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3001.png new file mode 100755 index 000000000..bc5c054ff Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3002.png new file mode 100755 index 000000000..ea76d6f3f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3003.png new file mode 100755 index 000000000..1de75fcec Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3004.png new file mode 100755 index 000000000..2a87819f6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3005.png new file mode 100755 index 000000000..8b8b7883b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3006.png new file mode 100755 index 000000000..5b0eb2bff Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3008.png new file mode 100755 index 000000000..d546b7521 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3009.png new file mode 100755 index 000000000..94b092898 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3010.png new file mode 100755 index 000000000..a1d170507 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3011.png new file mode 100755 index 000000000..8c0f1b74f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3012.png new file mode 100755 index 000000000..bf399d464 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3014.png new file mode 100755 index 000000000..2c545157e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3016.png new file mode 100755 index 000000000..7ffb2630a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3017.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3017.png new file mode 100755 index 000000000..d7888ba52 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3017.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3018.png new file mode 100755 index 000000000..9f216f0a7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3019.png new file mode 100755 index 000000000..523ec84bc Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3020.png new file mode 100755 index 000000000..3e67dff70 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3021.png new file mode 100755 index 000000000..e1bb46429 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3022.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3022.png new file mode 100755 index 000000000..47d311e8d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3022.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3023.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3023.png new file mode 100755 index 000000000..e1262611c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3023.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3024.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3024.png new file mode 100755 index 000000000..15791e610 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3024.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3025.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3025.png new file mode 100755 index 000000000..6c35b8935 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3025.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3026.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3026.png new file mode 100755 index 000000000..a0f25595a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3026.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3027.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3027.png new file mode 100755 index 000000000..92f98764d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3027.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3028.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3028.png new file mode 100755 index 000000000..1ef08a869 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3028.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3029.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3029.png new file mode 100755 index 000000000..630e77658 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3029.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3030.png new file mode 100755 index 000000000..630e77658 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3031.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3031.png new file mode 100755 index 000000000..f91fe46b1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3031.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3032.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3032.png new file mode 100755 index 000000000..c20f18ad7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3032.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3033.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3033.png new file mode 100755 index 000000000..6f7bc9127 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3033.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3034.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3034.png new file mode 100755 index 000000000..d600be164 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3034.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3035.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3035.png new file mode 100755 index 000000000..707d70a65 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3035.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3038.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3038.png new file mode 100755 index 000000000..82fd22f6c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3038.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3039.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3039.png new file mode 100755 index 000000000..07e4f88d5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3039.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3042.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3042.png new file mode 100755 index 000000000..70d560f7a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3042.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3043.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3043.png new file mode 100755 index 000000000..a8aed22bb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3043.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3044.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3044.png new file mode 100755 index 000000000..f83c6b37d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3044.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3045.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3045.png new file mode 100755 index 000000000..d933e0a2a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3045.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3046.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3046.png new file mode 100755 index 000000000..87896584b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3046.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3047.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3047.png new file mode 100755 index 000000000..bd21879bd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3047.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3048.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3048.png new file mode 100755 index 000000000..f87b8331b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3048.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3049.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3049.png new file mode 100755 index 000000000..8647fba9b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3049.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3050.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3050.png new file mode 100755 index 000000000..019c4e90e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3050.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3051.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3051.png new file mode 100755 index 000000000..e49cb9887 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3051.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3052.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3052.png new file mode 100755 index 000000000..c8c87c638 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3052.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3053.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3053.png new file mode 100755 index 000000000..a4787d45d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3053.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3054.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3054.png new file mode 100755 index 000000000..d1bf665c7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3054.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3055.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3055.png new file mode 100755 index 000000000..f9313f02a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3055.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3056.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3056.png new file mode 100755 index 000000000..ba8ec8d5b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3056.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3057.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3057.png new file mode 100755 index 000000000..dd40ca0c3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3057.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3058.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3058.png new file mode 100755 index 000000000..5b3ada897 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3058.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3059.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3059.png new file mode 100755 index 000000000..cf72fcca1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3059.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3060.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3060.png new file mode 100755 index 000000000..5881e9238 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3060.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3061.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3061.png new file mode 100755 index 000000000..9ad8602b6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3061.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3062.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3062.png new file mode 100755 index 000000000..5e629a8af Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3062.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3063.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3063.png new file mode 100755 index 000000000..dfa00cb44 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3063.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3064.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3064.png new file mode 100755 index 000000000..4ef962620 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3064.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3065.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3065.png new file mode 100755 index 000000000..25283a17c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3065.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3066.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3066.png new file mode 100755 index 000000000..13047b0fc Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3066.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3067.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3067.png new file mode 100755 index 000000000..dcb7d8d2e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3067.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3068.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3068.png new file mode 100755 index 000000000..3c7d73e50 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3068.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3069.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3069.png new file mode 100755 index 000000000..8cb56a35f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3069.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3070.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3070.png new file mode 100755 index 000000000..2a87819f6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3070.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3071.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3071.png new file mode 100755 index 000000000..6c71290ce Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3071.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3072.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3072.png new file mode 100755 index 000000000..3f1220bdc Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3072.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3073.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3073.png new file mode 100755 index 000000000..01b27b6a4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3073.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3074.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3074.png new file mode 100755 index 000000000..25312a2d1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3074.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3075.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3075.png new file mode 100755 index 000000000..691a79057 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3075.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3077.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3077.png new file mode 100755 index 000000000..52932cf3d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3077.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3078.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3078.png new file mode 100755 index 000000000..ac075cccf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3078.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3079.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3079.png new file mode 100755 index 000000000..cfad8e7a9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3079.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3081.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3081.png new file mode 100755 index 000000000..4337bd7db Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3081.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3082.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3082.png new file mode 100755 index 000000000..a98e4af17 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3082.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3083.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3083.png new file mode 100755 index 000000000..c4768b50e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3083.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3084.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3084.png new file mode 100755 index 000000000..694a38f3d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3084.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3085.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3085.png new file mode 100755 index 000000000..b2df1e17e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3085.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3086.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3086.png new file mode 100755 index 000000000..2acf4a4a2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3086.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3087.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3087.png new file mode 100755 index 000000000..44a906b1b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3087.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3088.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3088.png new file mode 100755 index 000000000..6d1191961 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3088.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3089.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3089.png new file mode 100755 index 000000000..5db0102a4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3089.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3090.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3090.png new file mode 100755 index 000000000..84944e77a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3090.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3091.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3091.png new file mode 100755 index 000000000..8e00d90f4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3091.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3092.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3092.png new file mode 100755 index 000000000..e5edcefba Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3092.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3093.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3093.png new file mode 100755 index 000000000..c54f3e345 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3093.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3094.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3094.png new file mode 100755 index 000000000..f7799c9ed Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3094.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3095.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3095.png new file mode 100755 index 000000000..c158c7845 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3095.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3096.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3096.png new file mode 100755 index 000000000..42672eba1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3096.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3097.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3097.png new file mode 100755 index 000000000..0aba1bef5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3097.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3100.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3100.png new file mode 100755 index 000000000..63c86c398 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3100.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3101.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3101.png new file mode 100755 index 000000000..26e95d305 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3101.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3102.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3102.png new file mode 100755 index 000000000..0897fef67 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3102.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3103.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3103.png new file mode 100755 index 000000000..68dd03456 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3103.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3104.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3104.png new file mode 100755 index 000000000..5c95fc10c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3104.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3105.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3105.png new file mode 100755 index 000000000..44ea2494b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3105.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3106.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3106.png new file mode 100755 index 000000000..fed3d0de0 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3106.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3107.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3107.png new file mode 100755 index 000000000..dfd7d3a4f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3107.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3108.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3108.png new file mode 100755 index 000000000..b40e7dd7b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3108.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3109.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3109.png new file mode 100755 index 000000000..9a29ae190 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3109.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3110.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3110.png new file mode 100755 index 000000000..2c28ac7d8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3110.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3111.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3111.png new file mode 100755 index 000000000..f58c82e35 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3111.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3112.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3112.png new file mode 100755 index 000000000..e1b475f69 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3112.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3113.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3113.png new file mode 100755 index 000000000..4af981d8f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3113.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3114.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3114.png new file mode 100755 index 000000000..29ae61320 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3114.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3115.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3115.png new file mode 100755 index 000000000..80079fce9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3115.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3116.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3116.png new file mode 100755 index 000000000..179f7b014 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3116.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3117.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3117.png new file mode 100755 index 000000000..582c16c14 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3117.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3118.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3118.png new file mode 100755 index 000000000..012434b0c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3118.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3119.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3119.png new file mode 100755 index 000000000..6e29d08ea Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3119.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3120.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3120.png new file mode 100755 index 000000000..bbfc4ac3b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3120.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3121.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3121.png new file mode 100755 index 000000000..a243e5c98 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3121.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3122.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3122.png new file mode 100755 index 000000000..f65edc5f9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3122.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3123.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3123.png new file mode 100755 index 000000000..b3545f5a9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3123.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3124.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3124.png new file mode 100755 index 000000000..12b0754b5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3124.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3125.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3125.png new file mode 100755 index 000000000..30dbd4664 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3125.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3126.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3126.png new file mode 100755 index 000000000..ca51e594c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3126.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3127.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3127.png new file mode 100755 index 000000000..a2aa5c1f0 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3127.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3128.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3128.png new file mode 100755 index 000000000..e357bfe2d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3128.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3129.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3129.png new file mode 100755 index 000000000..141101af6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3129.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3130.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3130.png new file mode 100755 index 000000000..51d157375 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3130.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3131.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3131.png new file mode 100755 index 000000000..554a55810 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3131.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3132.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3132.png new file mode 100755 index 000000000..1dd64434f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3132.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3133.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3133.png new file mode 100755 index 000000000..4707500bf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3133.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3134.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3134.png new file mode 100755 index 000000000..569fe11e5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3134.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3135.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3135.png new file mode 100755 index 000000000..adfa95065 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3135.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3136.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3136.png new file mode 100755 index 000000000..c1ce9187c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3136.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3137.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3137.png new file mode 100755 index 000000000..4bf918ec5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3137.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3138.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3138.png new file mode 100755 index 000000000..a8aa15db8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3138.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3139.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3139.png new file mode 100755 index 000000000..fedbcc3a6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3139.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3140.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3140.png new file mode 100755 index 000000000..a185fbbce Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3140.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3141.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3141.png new file mode 100755 index 000000000..a69a78cf3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3141.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3142.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3142.png new file mode 100755 index 000000000..52ee3bc01 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3142.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3143.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3143.png new file mode 100755 index 000000000..df769124a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3143.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3144.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3144.png new file mode 100755 index 000000000..682f9c9fa Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3144.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3145.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3145.png new file mode 100755 index 000000000..470300a71 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3145.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3146.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3146.png new file mode 100755 index 000000000..54291e25c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3146.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3147.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3147.png new file mode 100755 index 000000000..028baf2cf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3147.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3148.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3148.png new file mode 100755 index 000000000..e7b4ca3e3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3148.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3149.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3149.png new file mode 100755 index 000000000..aa45d88a1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3149.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3150.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3150.png new file mode 100755 index 000000000..4e651cb54 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3150.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3151.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3151.png new file mode 100755 index 000000000..215efbb5a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3151.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3152.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3152.png new file mode 100755 index 000000000..5c0567097 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3152.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3153.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3153.png new file mode 100755 index 000000000..2aabd8fee Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3153.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3154.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3154.png new file mode 100755 index 000000000..fdf3ea552 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3154.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3155.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3155.png new file mode 100755 index 000000000..563cd3685 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3155.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3156.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3156.png new file mode 100755 index 000000000..e7eb1c43f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3156.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3157.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3157.png new file mode 100755 index 000000000..c2983af27 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3157.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3158.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3158.png new file mode 100755 index 000000000..8ebca8939 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3158.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/3159.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3159.png new file mode 100755 index 000000000..e225e5985 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/3159.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4001.png new file mode 100755 index 000000000..dfabf0f0f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4002.png new file mode 100755 index 000000000..51f88a1c3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4003.png new file mode 100755 index 000000000..c19cbd875 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4004.png new file mode 100755 index 000000000..c8c87c638 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4005.png new file mode 100755 index 000000000..2a983244f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4006.png new file mode 100755 index 000000000..ad6f7e6d4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4007.png new file mode 100755 index 000000000..350b75159 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4008.png new file mode 100755 index 000000000..951310ff7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4009.png new file mode 100755 index 000000000..3bff5319e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4010.png new file mode 100755 index 000000000..89be88cb2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4012.png new file mode 100755 index 000000000..19aaee6f4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4013.png new file mode 100755 index 000000000..b3c53808c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4014.png new file mode 100755 index 000000000..e3cd78598 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4015.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4015.png new file mode 100755 index 000000000..00ec2e05b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4015.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4016.png new file mode 100755 index 000000000..edee7bfef Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4018.png new file mode 100755 index 000000000..9a06f47a5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4019.png new file mode 100755 index 000000000..f573b6e92 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4020.png new file mode 100755 index 000000000..0e175dad3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4021.png new file mode 100755 index 000000000..c4e5b3698 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4022.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4022.png new file mode 100755 index 000000000..19640f9a3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4022.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4023.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4023.png new file mode 100755 index 000000000..45478b31c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4023.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4024.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4024.png new file mode 100755 index 000000000..912813d53 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4024.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4025.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4025.png new file mode 100755 index 000000000..b7257ebde Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4025.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4026.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4026.png new file mode 100755 index 000000000..49e49998a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4026.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4027.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4027.png new file mode 100755 index 000000000..53e67034b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4027.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4028.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4028.png new file mode 100755 index 000000000..94cf9b405 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4028.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4029.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4029.png new file mode 100755 index 000000000..92e72a0e0 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4029.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4030.png new file mode 100755 index 000000000..f694ede8d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4031.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4031.png new file mode 100755 index 000000000..ab9e5db10 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4031.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4032.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4032.png new file mode 100755 index 000000000..a9c7afb2f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4032.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4033.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4033.png new file mode 100755 index 000000000..dcfbfeef6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4033.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4034.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4034.png new file mode 100755 index 000000000..92a105216 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4034.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4035.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4035.png new file mode 100755 index 000000000..08c65c724 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4035.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4036.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4036.png new file mode 100755 index 000000000..cd79796bd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4036.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4039.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4039.png new file mode 100755 index 000000000..adfd7f30b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4039.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4040.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4040.png new file mode 100755 index 000000000..4ac3afed2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4040.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4041.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4041.png new file mode 100755 index 000000000..18355f227 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4041.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4052.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4052.png new file mode 100755 index 000000000..b7729e776 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4052.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4053.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4053.png new file mode 100755 index 000000000..d65070f04 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4053.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4054.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4054.png new file mode 100755 index 000000000..33d5fe539 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4054.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4055.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4055.png new file mode 100755 index 000000000..3276efd01 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4055.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4056.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4056.png new file mode 100755 index 000000000..2bae1f5c6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4056.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4057.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4057.png new file mode 100755 index 000000000..8cb17a187 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4057.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4058.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4058.png new file mode 100755 index 000000000..24dea10eb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4058.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/4059.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4059.png new file mode 100755 index 000000000..b8e57178d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/4059.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5001.png new file mode 100755 index 000000000..8d9bcdc40 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5002.png new file mode 100755 index 000000000..b3d606165 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5003.png new file mode 100755 index 000000000..630e77658 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5004.png new file mode 100755 index 000000000..f2bdb15b9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5005.png new file mode 100755 index 000000000..7b6f20ce9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5006.png new file mode 100755 index 000000000..12149c1e1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5007.png new file mode 100755 index 000000000..61837fa37 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5008.png new file mode 100755 index 000000000..20fe9c148 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5009.png new file mode 100755 index 000000000..26e95d305 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5010.png new file mode 100755 index 000000000..b1f7d4ae6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5011.png new file mode 100755 index 000000000..fc3cee017 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5012.png new file mode 100755 index 000000000..662ed392c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5013.png new file mode 100755 index 000000000..c024974b2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5014.png new file mode 100755 index 000000000..cb0f55a94 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5015.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5015.png new file mode 100755 index 000000000..0e21226e9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5015.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/5016.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5016.png new file mode 100755 index 000000000..52da0bec6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/5016.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6001.png new file mode 100755 index 000000000..bf81ed940 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6002.png new file mode 100755 index 000000000..48b4bd3bd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6003.png new file mode 100755 index 000000000..f3e14a003 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6004.png new file mode 100755 index 000000000..a4a1916b6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6005.png new file mode 100755 index 000000000..a1b4de7d2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6006.png new file mode 100755 index 000000000..a286157bc Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6007.png new file mode 100755 index 000000000..08e6f7374 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6008.png new file mode 100755 index 000000000..2a3eab41e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6009.png new file mode 100755 index 000000000..81a10ed58 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6010.png new file mode 100755 index 000000000..d2d7c4136 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6011.png new file mode 100755 index 000000000..e56990590 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6012.png new file mode 100755 index 000000000..185bb04b7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6013.png new file mode 100755 index 000000000..07280c329 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/6014.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6014.png new file mode 100755 index 000000000..417f30315 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/6014.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7001.png new file mode 100755 index 000000000..e99dd923d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7002.png new file mode 100755 index 000000000..3ecd6146c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7003.png new file mode 100755 index 000000000..74060db5b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7004.png new file mode 100755 index 000000000..a8d35fd06 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7005.png new file mode 100755 index 000000000..6607839d8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7006.png new file mode 100755 index 000000000..5aedcefa6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7007.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7007.png new file mode 100755 index 000000000..8253fd84a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7007.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7008.png new file mode 100755 index 000000000..421a9f0ac Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7009.png new file mode 100755 index 000000000..87bcebc8e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7010.png new file mode 100755 index 000000000..d98d56aa2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7011.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7011.png new file mode 100755 index 000000000..d62cb6304 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7011.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7012.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7012.png new file mode 100755 index 000000000..66f6b05fa Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7012.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7013.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7013.png new file mode 100755 index 000000000..e6257e7a5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7013.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7020.png new file mode 100755 index 000000000..8e899f28d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7021.png new file mode 100755 index 000000000..50d158e06 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7030.png new file mode 100755 index 000000000..9152277bf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7031.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7031.png new file mode 100755 index 000000000..3d6116050 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7031.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7032.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7032.png new file mode 100755 index 000000000..d2c8bc555 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7032.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7035.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7035.png new file mode 100755 index 000000000..090bb5f16 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7035.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7036.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7036.png new file mode 100755 index 000000000..40ead5bf1 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7036.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7038.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7038.png new file mode 100755 index 000000000..9aa891624 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7038.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7040.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7040.png new file mode 100755 index 000000000..70adbedc5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7040.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7041.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7041.png new file mode 100755 index 000000000..d4c79dcf5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7041.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7042.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7042.png new file mode 100755 index 000000000..6bc4e3230 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7042.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7043.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7043.png new file mode 100755 index 000000000..312979e75 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7043.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7044.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7044.png new file mode 100755 index 000000000..066ffca50 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7044.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7045.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7045.png new file mode 100755 index 000000000..505e919ce Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7045.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7046.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7046.png new file mode 100755 index 000000000..75b6fb9c6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7046.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/7047.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7047.png new file mode 100755 index 000000000..d05d6a955 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/7047.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8001.png new file mode 100755 index 000000000..b2df1e17e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8002.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8002.png new file mode 100755 index 000000000..51193da36 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8002.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8003.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8003.png new file mode 100755 index 000000000..bc90b67ca Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8003.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8004.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8004.png new file mode 100755 index 000000000..b0c4142e7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8004.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8005.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8005.png new file mode 100755 index 000000000..6fd95f735 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8005.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8006.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8006.png new file mode 100755 index 000000000..4c217b2b9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8006.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8008.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8008.png new file mode 100755 index 000000000..f3e3a72e6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8008.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8009.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8009.png new file mode 100755 index 000000000..479549ab9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8009.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8010.png new file mode 100755 index 000000000..ee01aad98 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8017.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8017.png new file mode 100755 index 000000000..6e56f2d16 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8017.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8018.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8018.png new file mode 100755 index 000000000..ac3e1a47a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8018.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8019.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8019.png new file mode 100755 index 000000000..c4e451db8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8019.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8020.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8020.png new file mode 100755 index 000000000..5d7bc0a16 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8020.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8021.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8021.png new file mode 100755 index 000000000..b8e57178d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8021.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8022.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8022.png new file mode 100755 index 000000000..8cb17a187 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8022.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8023.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8023.png new file mode 100755 index 000000000..41a1d52e4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8023.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8024.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8024.png new file mode 100755 index 000000000..37a932175 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8024.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8025.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8025.png new file mode 100755 index 000000000..5dce396ed Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8025.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8026.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8026.png new file mode 100755 index 000000000..a16637e56 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8026.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8027.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8027.png new file mode 100755 index 000000000..9333d453f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8027.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8028.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8028.png new file mode 100755 index 000000000..97b98d1ab Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8028.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8029.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8029.png new file mode 100755 index 000000000..5bc1c777e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8029.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8030.png new file mode 100755 index 000000000..fd08701cf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8031.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8031.png new file mode 100755 index 000000000..ed3af3493 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8031.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8032.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8032.png new file mode 100755 index 000000000..7380450a4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8032.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8033.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8033.png new file mode 100755 index 000000000..40251b5ad Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8033.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8034.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8034.png new file mode 100755 index 000000000..7f6f95d66 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8034.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8035.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8035.png new file mode 100755 index 000000000..cdf5d2353 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8035.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8036.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8036.png new file mode 100755 index 000000000..2cb0c32b3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8036.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8037.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8037.png new file mode 100755 index 000000000..c1b8dc8ea Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8037.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8038.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8038.png new file mode 100755 index 000000000..f1dff01fb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8038.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8039.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8039.png new file mode 100755 index 000000000..cda7743ab Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8039.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8040.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8040.png new file mode 100755 index 000000000..291f964b5 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8040.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8041.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8041.png new file mode 100755 index 000000000..e67c0fcef Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8041.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8042.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8042.png new file mode 100755 index 000000000..72f95ebe4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8042.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8043.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8043.png new file mode 100755 index 000000000..b208cea6e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8043.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8044.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8044.png new file mode 100755 index 000000000..ff615ca0f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8044.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8045.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8045.png new file mode 100755 index 000000000..a5540ff73 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8045.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8046.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8046.png new file mode 100755 index 000000000..755375725 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8046.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8047.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8047.png new file mode 100755 index 000000000..1d359186f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8047.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8048.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8048.png new file mode 100755 index 000000000..5622b2e13 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8048.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8049.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8049.png new file mode 100755 index 000000000..3c1c5514f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8049.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8050.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8050.png new file mode 100755 index 000000000..e9e9c4e58 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8050.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8051.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8051.png new file mode 100755 index 000000000..a3317228e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8051.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8052.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8052.png new file mode 100755 index 000000000..a1e20b691 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8052.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8053.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8053.png new file mode 100755 index 000000000..c13dad243 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8053.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8054.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8054.png new file mode 100755 index 000000000..27541b577 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8054.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8055.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8055.png new file mode 100755 index 000000000..9d8923b2e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8055.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8056.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8056.png new file mode 100755 index 000000000..6976b3c53 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8056.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8057.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8057.png new file mode 100755 index 000000000..d41545c9c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8057.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8058.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8058.png new file mode 100755 index 000000000..a37cc9be3 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8058.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8059.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8059.png new file mode 100755 index 000000000..ebefaf5a7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8059.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8060.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8060.png new file mode 100755 index 000000000..69a2c9696 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8060.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8061.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8061.png new file mode 100755 index 000000000..7fc711999 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8061.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8062.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8062.png new file mode 100755 index 000000000..92425c86a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8062.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8063.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8063.png new file mode 100755 index 000000000..8b354185f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8063.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8064.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8064.png new file mode 100755 index 000000000..33483b657 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8064.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8065.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8065.png new file mode 100755 index 000000000..4f336852e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8065.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8066.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8066.png new file mode 100755 index 000000000..14542a816 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8066.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8067.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8067.png new file mode 100755 index 000000000..7f8e532e9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8067.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8068.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8068.png new file mode 100755 index 000000000..67a042485 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8068.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8069.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8069.png new file mode 100755 index 000000000..6a790fe81 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8069.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8070.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8070.png new file mode 100755 index 000000000..4c374faf9 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8070.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8071.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8071.png new file mode 100755 index 000000000..f92f89f7b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8071.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8072.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8072.png new file mode 100755 index 000000000..7cb1b8d2d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8072.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8073.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8073.png new file mode 100755 index 000000000..b9056dc98 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8073.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8074.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8074.png new file mode 100755 index 000000000..7a3b67eaf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8074.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8075.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8075.png new file mode 100755 index 000000000..0e6cd8e4c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8075.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8076.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8076.png new file mode 100755 index 000000000..8b54042ca Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8076.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8077.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8077.png new file mode 100755 index 000000000..1bb8c0862 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8077.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8079.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8079.png new file mode 100755 index 000000000..8d1f6d406 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8079.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8087.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8087.png new file mode 100755 index 000000000..f16c0de3b Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8087.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8089.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8089.png new file mode 100755 index 000000000..034540292 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8089.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8090.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8090.png new file mode 100755 index 000000000..c46f0806c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8090.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8092.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8092.png new file mode 100755 index 000000000..7ea6544d6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8092.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8093.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8093.png new file mode 100755 index 000000000..ddced4931 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8093.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8096.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8096.png new file mode 100755 index 000000000..420dcd845 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8096.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8098.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8098.png new file mode 100755 index 000000000..52ee3bc01 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8098.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8099.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8099.png new file mode 100755 index 000000000..08156734e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8099.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8100.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8100.png new file mode 100755 index 000000000..dd2516424 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8100.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8101.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8101.png new file mode 100755 index 000000000..6bbdc0e8f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8101.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8102.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8102.png new file mode 100755 index 000000000..b61b31efb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8102.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8103.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8103.png new file mode 100755 index 000000000..834022632 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8103.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8104.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8104.png new file mode 100755 index 000000000..8004eb2ca Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8104.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8105.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8105.png new file mode 100755 index 000000000..ba7f02dda Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8105.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8106.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8106.png new file mode 100755 index 000000000..11a0790fe Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8106.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8107.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8107.png new file mode 100755 index 000000000..854b57c35 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8107.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8108.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8108.png new file mode 100755 index 000000000..a12652410 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8108.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8109.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8109.png new file mode 100755 index 000000000..52ee3bc01 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8109.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8110.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8110.png new file mode 100755 index 000000000..1b6a493e6 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8110.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8111.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8111.png new file mode 100755 index 000000000..7be639c81 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8111.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8112.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8112.png new file mode 100755 index 000000000..90c29ab5d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8112.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8116.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8116.png new file mode 100755 index 000000000..b0bba8aaf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8116.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8118.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8118.png new file mode 100755 index 000000000..f96c1b568 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8118.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8119.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8119.png new file mode 100755 index 000000000..64f342b03 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8119.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8120.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8120.png new file mode 100755 index 000000000..29d301b02 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8120.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8121.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8121.png new file mode 100755 index 000000000..c283c48b2 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8121.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8122.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8122.png new file mode 100755 index 000000000..d127d05e7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8122.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8123.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8123.png new file mode 100755 index 000000000..4b47576a7 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8123.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8125.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8125.png new file mode 100755 index 000000000..6bc4dce20 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8125.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8127.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8127.png new file mode 100755 index 000000000..aacac0c17 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8127.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8128.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8128.png new file mode 100755 index 000000000..5e3c49676 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8128.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8129.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8129.png new file mode 100755 index 000000000..093154659 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8129.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8131.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8131.png new file mode 100755 index 000000000..81f76f4fd Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8131.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8132.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8132.png new file mode 100755 index 000000000..30e42413a Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8132.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8133.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8133.png new file mode 100755 index 000000000..5c1d94e6f Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8133.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8134.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8134.png new file mode 100755 index 000000000..d2fbadb94 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8134.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8135.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8135.png new file mode 100755 index 000000000..0acea2d12 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8135.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8136.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8136.png new file mode 100755 index 000000000..226cade56 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8136.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8137.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8137.png new file mode 100755 index 000000000..8fd8f6c6c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8137.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8138.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8138.png new file mode 100755 index 000000000..6ae61c02d Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8138.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8142.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8142.png new file mode 100755 index 000000000..fd7ae2754 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8142.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8143.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8143.png new file mode 100755 index 000000000..2b3d856cb Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8143.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8144.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8144.png new file mode 100755 index 000000000..90d7dbc84 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8144.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8145.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8145.png new file mode 100755 index 000000000..c02b48370 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8145.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8146.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8146.png new file mode 100755 index 000000000..b2df1e17e Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8146.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/8147.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8147.png new file mode 100755 index 000000000..0d0b96cad Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/8147.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/9001.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9001.png new file mode 100755 index 000000000..66a1f94ec Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9001.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/9010.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9010.png new file mode 100755 index 000000000..fed2afdaf Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9010.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/9030.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9030.png new file mode 100755 index 000000000..a1586b0d8 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9030.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/9040.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9040.png new file mode 100755 index 000000000..b3a4817f4 Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/9040.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/app_icons/default.png b/luci-app-oaf/htdocs/luci-static/resources/app_icons/default.png new file mode 100755 index 000000000..1e068212c Binary files /dev/null and b/luci-app-oaf/htdocs/luci-static/resources/app_icons/default.png differ diff --git a/luci-app-oaf/htdocs/luci-static/resources/echarts.min.js b/luci-app-oaf/htdocs/luci-static/resources/echarts.min.js index 4b25b97b7..38e4722ee 100755 --- a/luci-app-oaf/htdocs/luci-static/resources/echarts.min.js +++ b/luci-app-oaf/htdocs/luci-static/resources/echarts.min.js @@ -19,4 +19,4 @@ */ -!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>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,getUserPixelRatio:t.getUserPixelRatio,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" .. version .. - "
"..translate("Feature format")..": " ..format .. - "
"..translate("App number")..": " ..rule_count .. - "
"..translate("Feature download")..":www.openappfilter.com" +local display_str = "" .. + "
" .. + ""..translate("Current version")..": " .. version .. + "
" .. + "
" .. + ""..translate("Feature format")..": " ..format .. + "
" .. + "
" .. + ""..translate("App number")..": " ..rule_count .. + "
" .. + "
" .. + ""..translate("Feature download")..": www.openappfilter.com" .. + "
" s = m:section(TypedSection, "feature", translate("App Feature"), display_str) fu = s:option(FileUpload, "") @@ -45,7 +67,7 @@ dir = "/tmp/upload/" nixio.fs.mkdir(dir) http.setfilehandler(function(meta, chunk, eof) local feature_file = "/etc/appfilter/feature.cfg" - local f_format="v1.0" + local f_format="v3.0" if not fd then if not meta then return @@ -62,31 +84,51 @@ http.setfilehandler(function(meta, chunk, eof) end if eof and fd then fd:close() - local fd2 = io.open("/tmp/upload/" .. meta.file) - local version_line = fd2:read("*l"); - local format_line = fd2:read("*l"); + -- Extract the tar.gz file + local tar_cmd = "tar -zxvf /tmp/upload/" .. meta.file .. " -C /tmp/upload/ >/dev/null" + local success = os.execute(tar_cmd) + if success ~= 0 then + um.value = translate("Failed to update feature file, format error") + return + else + um.value = translate("Update the feature file successfully, please refresh the page") + end + + local feature_dir="/tmp/upload/feature" + local fd2 = io.open("/tmp/upload/feature.cfg") + if not fd2 then + um.value = translate("Failed to extract feature file, file not found") + os.execute("rm /tmp/upload/* -fr") + return + end + local version_line = fd2:read("*l") + local format_line = fd2:read("*l") fd2:close() local ret = string.match(version_line, "#version") if ret ~= nil then if string.match(format_line, "#format") then f_format = SYS.exec("echo '"..format_line.."'|awk '{print $2}'") end - if not string.match(f_format, format) then + if not string.match(f_format, format) then um.value = translate("Failed to update feature file, format error"..",feature format:"..f_format) - os.execute("rm /tmp/upload/* -fr"); + os.execute("rm /tmp/upload/* -fr") return end - local cmd = "cp /tmp/upload/" .. meta.file .. " " .. feature_file; - os.execute(cmd); - os.execute("chmod 666 " .. feature_file); - os.execute("rm /tmp/appfilter -fr"); - os.execute("uci set appfilter.feature.update=1"); - luci.sys.exec("/etc/init.d/appfilter restart"); + local cmd = "cp /tmp/upload/feature.cfg " .. feature_file + os.execute(cmd) + os.execute("rm /www/luci-static/resources/app_icons/* -fr"); + cmd = "cp /tmp/upload/app_icons/* /www/luci-static/resources/app_icons/ -fr >/dev/null" + os.execute(cmd) + os.execute("chmod 666 " .. feature_file) + os.execute("rm /tmp/appfilter -fr") + os.execute("uci set appfilter.feature.update=1") + os.execute("uci commit appfilter") + luci.sys.exec("/etc/init.d/appfilter restart") um.value = translate("Update the feature file successfully, please refresh the page") else um.value = translate("Failed to update feature file, format error") end - os.execute("rm /tmp/upload/* -fr"); + os.execute("rm /tmp/upload/* -fr") end end) @@ -99,4 +141,7 @@ if luci.http.formvalue("upload") then elseif luci.http.formvalue("download") then Download() end + return m + + diff --git a/luci-app-oaf/luasrc/model/cbi/appfilter/time.lua b/luci-app-oaf/luasrc/model/cbi/appfilter/time.lua new file mode 100755 index 000000000..baa1afca2 --- /dev/null +++ b/luci-app-oaf/luasrc/model/cbi/appfilter/time.lua @@ -0,0 +1,19 @@ +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(""), translate("")) + +local v +v = m:section(SimpleSection) +v.template = "admin_network/time" +return m diff --git a/luci-app-oaf/luasrc/model/cbi/appfilter/user.lua b/luci-app-oaf/luasrc/model/cbi/appfilter/user.lua new file mode 100755 index 000000000..29c024095 --- /dev/null +++ b/luci-app-oaf/luasrc/model/cbi/appfilter/user.lua @@ -0,0 +1,19 @@ +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(""), translate("")) + +local v +v = m:section(SimpleSection) +v.template = "admin_network/user" +return m \ No newline at end of file diff --git a/luci-app-oaf/luasrc/view/admin_network/app_filter.htm b/luci-app-oaf/luasrc/view/admin_network/app_filter.htm index c4b1eaf37..91894d302 100755 --- a/luci-app-oaf/luasrc/view/admin_network/app_filter.htm +++ b/luci-app-oaf/luasrc/view/admin_network/app_filter.htm @@ -9,6 +9,17 @@ #appContainer { display: flex; flex-wrap: wrap; + margin-top: 20px; + } + + .button-check { + padding: 3px 8px; + background-color: transparent; /* Set background color to transparent */ + color: green; /* Set font color to black */ + border: 1px solid green; /* Set border color to green */ + border-radius: 3px; + cursor: pointer; + font-size: 12px; /* Reduce font size */ } .category { width: 100%; @@ -17,77 +28,86 @@ .app-list { display: flex; flex-wrap: wrap; - justify-content: flex-start; /* 左对齐 */ - margin-top: 10px; /* 增加与标题的间距 */ + justify-content: flex-start; + margin-top: 10px; } .app-item { width: 140px; /* 固定宽度 */ box-sizing: border-box; padding: 5px; - display: flex; /* 使用flex布局 */ - align-items: center; /* 垂直居中 */ + display: flex; + align-items: center; } .app-item label { - display: flex; /* 使用flex布局 */ - align-items: center; /* 垂直居中 */ - width: 100%; /* 确保标签占满整个宽度 */ - text-align: left; /* 左对齐文本 */ + display: flex; + align-items: center; + width: 100%; + text-align: left; } - .app-item input[type="checkbox"] { - margin-left: 2px; /* 勾选按钮离左侧2px */ - margin-right: 8px; /* 应用程序名称离按钮8px */ + input[type="checkbox"], + input[type="radio"] { + margin: 0; /* Reset all margins */ + padding: 0; /* Reset padding */ + width: 16px; /* Set a specific width */ + height: 16px; /* Set a specific height */ + border: 1px solid #ccc; /* Add a border */ + border-radius: 3px; /* Add slight rounding */ + background-color: #fff; /* Set background color */ + vertical-align: middle; /* Align vertically in the middle */ + appearance: none; /* Remove default styling */ + position: relative; /* Ensure relative positioning */ } h2 { margin-bottom: 10px; } .category-title { - display: flex; /* 使用flex布局 */ - justify-content: space-between; /* 两端对齐 */ - align-items: center; /* 垂直居中 */ - width: 100%; /* 设置宽度为100% */ - cursor: pointer; /* 鼠标悬停时显示为可点击 */ - margin-bottom: 10px; /* 增加下方间距 */ + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + cursor: pointer; + margin-bottom: 10px; } .category-name { - font-size: 14px; /* 设置字体大小为16px */ - font-weight: normal; /* 设置字体为正常,不加粗 */ + font-size: 14px; + font-weight: normal; } .arrow { - width: 12px; /* 图标宽度 */ - height: 12px; /* 图标高度 */ - /* background-image: url('path/to/your/icon.svg'); 替换为你的图标路径 */ + width: 12px; + height: 12px; + - background-image: url('<%=resource%>/icons/arrow.png'); /* 使用LuCI资源路径 */ - background-size: contain; /* 确保图标适应容器 */ - background-repeat: no-repeat; /* 防止重复 */ - transition: transform 0.3s ease; /* 添加过渡效果 */ - display: inline-block; /* 使旋转生效 */ - transform: rotate(0deg); /* 初始状态箭头向右 */ + background-image: url('<%=resource%>/icons/arrow.png'); + background-size: contain; + background-repeat: no-repeat; + transition: transform 0.3s ease; + display: inline-block; + transform: rotate(0deg); } .arrow.expanded { - transform: rotate(90deg); /* 展开状态箭头向下 */ + transform: rotate(90deg); } .category-title div { - gap: 6px; /* 设置子元素之间的间距为20px */ + gap: 6px; } @media (max-width: 600px) { .app-item { - width: 25%; /* 屏幕小于600px时每行显示4个 */ + width: 25%; } } .button-container { display: flex; - justify-content: right; /* 使按钮居中 */ - margin-top: 20px; /* 上方留出一些空间 */ + justify-content: right; + margin-top: 20px; } .submit-button { margin-top: 30px; - width: 150px; /* 设置按钮宽度 */ - height: 30px; /* 设置按钮高度 */ + width: 150px; + height: 30px; background-color: #2885e8; color: white; border: none; @@ -144,7 +164,7 @@ getAppFilterData().then(() => { getClassListData(); }); - getAppFilterBaseData(); // 新增调用获取过滤开关和工作模式数据的函数 + getAppFilterBaseData(); } function getAppFilterData() { @@ -152,7 +172,7 @@ new XHR().get('<%=url('admin/network/get_app_filter')%>', null, function (x, data) { app_filter_data = data.app_list; - resolve(); // 请求完成后调用 resolve + resolve(); } ); }); @@ -168,42 +188,41 @@ function renderAppList(data) { const container = document.getElementById('appContainer'); - container.innerHTML = ''; // 清空之前的数据 + container.innerHTML = ''; data.class_list.forEach(category => { const categoryTitle = document.createElement('div'); - categoryTitle.className = 'category-title'; // 添加CSS类 + categoryTitle.className = 'category-title'; const categoryName = document.createElement('span'); categoryName.textContent = `${category.name} (${category.app_list.length}个)`; - categoryName.className = 'category-name'; // 添加CSS类 + categoryName.className = 'category-name'; const rightContainer = document.createElement('div'); - rightContainer.style.display = 'flex'; // 使用flex布局 - rightContainer.style.alignItems = 'center'; // 垂直居中 + rightContainer.style.display = 'flex'; + rightContainer.style.alignItems = 'center'; const appCount = document.createElement('span'); const selectedCount = category.app_list.filter(app => app_filter_data.includes(parseInt(app.split(',')[0])) ).length; - appCount.textContent = `已选${selectedCount}个`; // 显示已选应用程序个数 - appCount.className = 'app-count'; // 添加CSS类 + appCount.textContent = `已选${selectedCount}个`; + appCount.className = 'app-count'; const arrow = document.createElement('span'); - arrow.className = 'arrow'; // 添加CSS类 + arrow.className = 'arrow'; rightContainer.appendChild(appCount); rightContainer.appendChild(arrow); categoryTitle.appendChild(categoryName); - categoryTitle.appendChild(rightContainer); // 将rightContainer放在最右侧 + categoryTitle.appendChild(rightContainer); container.appendChild(categoryTitle); const appList = document.createElement('div'); appList.className = 'app-list'; - appList.style.display = 'none'; // 初始状态隐藏 + appList.style.display = 'none'; - // 添加点击事件来切换显示/隐藏 categoryTitle.onclick = function() { if (appList.style.display === 'none') { appList.style.display = 'flex'; @@ -217,33 +236,40 @@ category.app_list.forEach(app => { const appItem = document.createElement('div'); appItem.className = 'app-item'; + const label = document.createElement('label'); + const containerDiv = document.createElement('div'); + containerDiv.style.display = 'flex'; + containerDiv.style.alignItems = 'center'; + const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.name = 'app'; checkbox.value = app.split(',')[0]; + if (app_filter_data.includes(parseInt(checkbox.value))) { checkbox.checked = true; } - // 添加图标 const appDetails = app.split(','); const appId = appDetails[0]; const appName = appDetails[1]; const withIcon = appDetails[2] === '1'; const icon = document.createElement('img'); - icon.src = withIcon ? `<%=resource%>/app_icons/${appId}.png` : `<%=resource%>/app_icons/default.png`; // 根据with_icon选择图标路径 + icon.src = withIcon ? `<%=resource%>/app_icons/${appId}.png` : `<%=resource%>/app_icons/default.png`; icon.alt = `Icon for ${appName}`; - icon.style.width = '20px'; // 设置图标宽度 - icon.style.height = '20px'; // 设置图标高度 - icon.style.marginRight = '5px'; // 设置图标与文本之间的间距 - icon.style.borderRadius = '7px'; // 设置圆角 - label.appendChild(checkbox); - label.appendChild(icon); // 将图标添加到标签中 - - label.appendChild(document.createTextNode(appName)); + icon.style.width = '20px'; + icon.style.height = '20px'; + icon.style.marginRight = '5px'; + icon.style.marginLeft = '5px'; + icon.style.borderRadius = '7px'; + containerDiv.appendChild(checkbox); + containerDiv.appendChild(icon); + containerDiv.appendChild(document.createTextNode(appName)); + + label.appendChild(containerDiv); appItem.appendChild(label); appList.appendChild(appItem); }); @@ -265,24 +291,22 @@ function (x, data) { init_data(); const modal = document.getElementById('modal'); - modal.style.display = 'flex'; // 显示模态框 + modal.style.display = 'flex'; setTimeout(() => { - modal.style.display = 'none'; // 3秒后自动隐藏模态框 + modal.style.display = 'none'; }, 1000); } ); } - // 新增接口函数 function submitAppFilterBase() { - // 获取过滤开关和工作模式的值 const filterSwitch = document.getElementById('filterSwitch').checked; const workMode = document.getElementById('workMode').value; const data = { data: { - enable: filterSwitch ? 1 : 0, // Convert boolean to 0 or 1 - work_mode: workMode // 工作模式 + enable: filterSwitch ? 1 : 0, + work_mode: workMode } }; console.log("data is " + data); @@ -292,7 +316,7 @@ } ); } - + function submitHandle() { submitAppFilterBase(); submitAppSelection(); @@ -306,7 +330,6 @@ document.getElementById('modal').style.display = 'none'; } - // 新增获取过滤开关和工作模式数据的函数 function getAppFilterBaseData() { console.log("getAppFilterBaseData"); new XHR().get('<%=url('admin/network/get_app_filter_base')%>', null, @@ -316,14 +339,60 @@ } else { document.getElementById('filterSwitch').checked = false; } - // 直接使用接口返回的work_mode值来设置选中的选项 document.getElementById('workMode').value = data.data.work_mode; console.log("Base filter settings loaded"); } ); } - window.onload = init_data; + function redirectToUserConfig() { + window.location.href = '<%=url('admin/services/appfilter/user')%>'; + } + function redirectToTimeConfig() { + window.location.href = '<%=url('admin/services/appfilter/time')%>'; + } + + + function updateRunStatus() { + new XHR().get('<%=url('admin/network/get_oaf_status')%>', null, + function (x, data) { + const runStatusElement = document.getElementById('run_status'); + const runDescElement = document.getElementById('run_desc'); + + + if (data.data.config_enable == 0) { + runStatusElement.textContent = '未配置'; + runStatusElement.style.color = 'red'; + } else { + if (data.data.enable === 1) { + runStatusElement.textContent = '运行中'; + runStatusElement.style.color = 'green'; + if (data.data.time_mode == 1 && data.data.filter == 1) { + runDescElement.textContent = `(${data.data.remain_time}分钟后关闭)`; + } + } else { + runStatusElement.textContent = '未运行'; + runStatusElement.style.color = 'red'; + if (data.data.time_mode == 1) { + if (data.data.match_time == 0) { + runDescElement.textContent = `(当前时间不在时间范围内)`; + } else { + runDescElement.textContent = `(${data.data.remain_time}分钟后开启)`; + } + } else { + runDescElement.textContent = `(当前时间不在时间范围内)`; + } + } + } + } + ); + } + + window.onload = function() { + init_data(); + updateRunStatus(); + setInterval(updateRunStatus, 5000); + }; //]]>
-
- - -
+
+
+ + 运行中 +
+
+ + +
-
- - -
-
-
- +
+ + +
+ + +
+
+ + +
+ +
+ + + +
+
+ +
+
+ +
\ No newline at end of file diff --git a/luci-app-oaf/luasrc/view/admin_network/time.htm b/luci-app-oaf/luasrc/view/admin_network/time.htm new file mode 100755 index 000000000..305343d57 --- /dev/null +++ b/luci-app-oaf/luasrc/view/admin_network/time.htm @@ -0,0 +1,511 @@ + + + + + + + + +
+ + +
+ + +
+

时间规则

+ +
+ + +
+ + +
+ +
周一
+
周二
+
周三
+
周四
+
周五
+
周六
+
周日
+
+ + +
+ + + + + + + + + + +
开始时间结束时间操作
+ + +
+ + + +
+ +
+ +
+ +
+
\ No newline at end of file diff --git a/luci-app-oaf/luasrc/view/admin_network/user.htm b/luci-app-oaf/luasrc/view/admin_network/user.htm new file mode 100755 index 000000000..f4efc2fd3 --- /dev/null +++ b/luci-app-oaf/luasrc/view/admin_network/user.htm @@ -0,0 +1,361 @@ + + + + +
+
+
+ 自动模式 + 手动模式 +
+ + +
+ 手动模式下,只有以下添加的终端被管控 +
+ + + + + +
+ +
+ +
+
+ + + + + \ No newline at end of file diff --git a/luci-app-oaf/luasrc/view/admin_network/user_status.htm b/luci-app-oaf/luasrc/view/admin_network/user_status.htm index 0e8863299..cf6091007 100755 --- a/luci-app-oaf/luasrc/view/admin_network/user_status.htm +++ b/luci-app-oaf/luasrc/view/admin_network/user_status.htm @@ -1,67 +1,450 @@ <% local dsp=require "luci.dispatcher" -%> - + + +
+ +
+ - - +
- <%:Id%> - - <%:Hostname%> - - <%:Mac%> + <%:设备信息%> <%:Ip%> @@ -72,6 +455,9 @@ <%:Online Status%> + <%:Actions%> +

@@ -79,4 +465,174 @@
-
\ No newline at end of file + +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/luci-app-oaf/luasrc/view/cbi/oaf_dvalue.htm b/luci-app-oaf/luasrc/view/cbi/oaf_dvalue.htm index 296c61e4d..adf6a2b3c 100755 --- a/luci-app-oaf/luasrc/view/cbi/oaf_dvalue.htm +++ b/luci-app-oaf/luasrc/view/cbi/oaf_dvalue.htm @@ -1,8 +1,10 @@ <%+cbi/valueheader%> - + <% local val = self:cfgvalue(section) or self.default or "" write(pcdata(val)) %> + + <%+cbi/valuefooter%> diff --git a/luci-app-oaf/luasrc/view/cbi/oaf_upload.htm b/luci-app-oaf/luasrc/view/cbi/oaf_upload.htm index aadf01d7f..a281bcd90 100755 --- a/luci-app-oaf/luasrc/view/cbi/oaf_upload.htm +++ b/luci-app-oaf/luasrc/view/cbi/oaf_upload.htm @@ -1,5 +1,32 @@ <%+cbi/valueheader%> - - - + +
+ + + +
+ + +
+ 特征库文件可以通过官网下载,下载后上传升级,注意特征码格式版本,需要和当前特征码格式一致! +
<%+cbi/valuefooter%> + + + + diff --git a/luci-app-oaf/root/etc/uci-defaults/94_feature_3.0 b/luci-app-oaf/root/etc/uci-defaults/94_feature_3.0 new file mode 100755 index 000000000..d437fd6a7 --- /dev/null +++ b/luci-app-oaf/root/etc/uci-defaults/94_feature_3.0 @@ -0,0 +1,7 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + set appfilter.feature.format='v3.0' + set appfilter.rule='rule' + commit appfilter +EOF \ No newline at end of file diff --git a/ngrokc/Makefile b/ngrokc/Makefile index fe6f4b9bc..7e0474e55 100644 --- a/ngrokc/Makefile +++ b/ngrokc/Makefile @@ -2,13 +2,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ngrokc PKG_VERSION:=1.55 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/dosgo/ngrok-c.git PKG_SOURCE_DATE:=2021-09-01 PKG_SOURCE_VERSION:=5da550284ed5bec7fa843c574e52b840e918fa4c -PKG_MIRROR_HASH:=f3893717333f810fb54253b1b399ac6d0eabe5c1e7f5e30fe53cdb8eecd28faf +PKG_MIRROR_HASH:=2c27217325f509c0d1ce863a6399de9222af6dd93748b87c1905b8ae832f06c3 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE diff --git a/oaf/Makefile b/oaf/Makefile index aaa95dd12..395171f66 100755 --- a/oaf/Makefile +++ b/oaf/Makefile @@ -9,8 +9,8 @@ PKG_AUTOLOAD:=oaf RSTRIP:=: define KernelPackage/oaf - SECTION:=Derry Apps - CATEGORY:=Derry Apps + SECTION:=TT Apps + CATEGORY:=TT Apps TITLE:=open app filter kernel module FILES:=$(PKG_BUILD_DIR)/oaf.ko DEPENDS:=+kmod-ipt-conntrack diff --git a/oaf/src/af_client.c b/oaf/src/af_client.c index 11cdea323..c11f54bbe 100755 --- a/oaf/src/af_client.c +++ b/oaf/src/af_client.c @@ -273,7 +273,7 @@ int __af_visit_info_report(af_client_info_t *node) cJSON_Minify(out); if (count > 0 || node->report_count == 0) { - AF_INFO("report:%s count=%d\n", out, node->report_count); + AF_LMT_INFO("report:%s count=%d\n", out, node->report_count); node->report_count++; af_send_msg_to_user(out, strlen(out)); } diff --git a/oaf/src/app_filter.c b/oaf/src/app_filter.c index 84b350e1c..3bcd16d6b 100755 --- a/oaf/src/app_filter.c +++ b/oaf/src/app_filter.c @@ -45,18 +45,6 @@ DEFINE_RWLOCK(af_feature_lock); #define MIN_HOST_LEN 4 -int dump_feature_list() -{ - af_feature_node_t *n, *node; - - list_for_each_entry_safe(node, n, &af_feature_head, head) - { - printk("%s %d feature = %s, node = %p\n", __func__, __LINE__, node->feature, node); - - } - return 0; -} - int __add_app_feature(char *feature, int appid, char *name, int proto, int src_port, port_info_t dport_info, char *host_url, char *request_url, char *dict, char *search_str, int ignore) { @@ -112,7 +100,6 @@ int __add_app_feature(char *feature, int appid, char *name, int proto, int src_p node->pos_info[node->pos_num].pos = index; node->pos_info[node->pos_num].value = value; node->pos_num++; - printk("%s %d feature = %s, node = %p pos_num = %d\n", __func__, __LINE__, node->feature, node, node->pos_num); feature_list_write_lock(); list_add(&(node->head), &af_feature_head); feature_list_write_unlock(); @@ -961,7 +948,7 @@ int app_filter_match(flow_info_t *flow, af_client_info_t *client) if (af_match_one(flow, node)) { - printk("match feature, appid=%d, feature = %s\n", node->app_id, node->feature); + AF_LMT_INFO("match feature, appid=%d, feature = %s\n", node->app_id, node->feature); flow->app_id = node->app_id; flow->feature = node; strncpy(flow->app_name, node->app_name, sizeof(flow->app_name) - 1); @@ -978,7 +965,7 @@ int app_filter_match(flow_info_t *flow, af_client_info_t *client) if (af_get_app_status(node->app_id)) { flow->drop = AF_TRUE; - printk("drop appid = %d, feature = %s\n", node->app_id, node->feature); + AF_LMT_INFO("drop appid = %d, feature = %s\n", node->app_id, node->feature); feature_list_read_unlock(); return AF_TRUE; } @@ -1169,7 +1156,7 @@ u_int32_t app_filter_hook_bypass_handle(struct sk_buff *skb, struct net_device * } if (flow.drop) { - printk("drop appid = %d, feature = %s\n", flow.app_id, flow.feature->feature); + AF_LMT_INFO("drop appid = %d, feature = %s\n", flow.app_id, flow.feature->feature); ret = NF_DROP; } @@ -1260,7 +1247,6 @@ u_int32_t app_filter_hook_gateway_handle(struct sk_buff *skb, struct net_device app_filter_match(&flow, client); - if (TEST_MODE()){ if (flow.l4_protocol == IPPROTO_UDP){ if (flow.dport == 53 || flow.dport == 443){ @@ -1273,7 +1259,7 @@ u_int32_t app_filter_hook_gateway_handle(struct sk_buff *skb, struct net_device if (flow.app_id != 0) { - printk("match flow.app_id = %d\n", flow.app_id); + AF_LMT_INFO("match flow.app_id = %d\n", flow.app_id); ct->mark = flow.app_id; AF_CLIENT_LOCK_W(); af_update_client_app_info(client, flow.app_id, flow.drop); diff --git a/oaf/src/app_filter.h b/oaf/src/app_filter.h index a85e95dec..f251401c0 100755 --- a/oaf/src/app_filter.h +++ b/oaf/src/app_filter.h @@ -1,7 +1,7 @@ #ifndef APP_FILTER_H #define APP_FILTER_H -#define AF_VERSION "5.0" +#define AF_VERSION "5.1" #define AF_FEATURE_CONFIG_FILE "/tmp/feature.cfg" #define MAX_DPI_PKT_NUM 64 diff --git a/open-app-filter/Makefile b/open-app-filter/Makefile index bb8900ce0..0c1aca30a 100755 --- a/open-app-filter/Makefile +++ b/open-app-filter/Makefile @@ -2,15 +2,15 @@ include $(TOPDIR)/rules.mk PKG_NAME:=appfilter -PKG_VERSION:=5.0.2 +PKG_VERSION:=6.1.1 PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk define Package/appfilter - SECTION:=Derry Apps - CATEGORY:=Derry Apps + SECTION:=TT Apps + CATEGORY:=TT Apps DEPENDS:=+libubox +libubus +libuci +libpthread +libjson-c +libblobmsg-json TITLE:=App filter userspace module endef @@ -34,7 +34,7 @@ define Build/Compile/Default endef define Package/appfilter/description - open appfilter app + openappfilter app endef @@ -47,6 +47,7 @@ define Package/appfilter/install $(INSTALL_BIN) ./files/oaf_rule $(1)/usr/bin $(INSTALL_BIN) ./files/gen_class.sh $(1)/usr/bin $(INSTALL_BIN) ./files/appfilter.config $(1)/etc/config/appfilter + $(INSTALL_BIN) ./files/user_info.config $(1)/etc/config/user_info $(INSTALL_BIN) $(PKG_BUILD_DIR)/oafd $(1)/usr/bin endef diff --git a/open-app-filter/files/appfilter.config b/open-app-filter/files/appfilter.config index f223e9cf5..d6905a954 100755 --- a/open-app-filter/files/appfilter.config +++ b/open-app-filter/files/appfilter.config @@ -6,13 +6,18 @@ config appfilter appfilter config feature feature option update 0 - option format 'v2.0' + option format 'v3.0' config time 'time' - option time_mode '0' - option days '0 1 2 3 4 5 6' + option deny_time '60' option start_time '00:00' - option end_time '23:59' - option start_time2 '' - option end_time2 '' + option end_time '23:00' + option allow_time '20' + option time_mode '0' + option days '1 2 3 4 5 6 0' + list time '00:00-23:59' + config user user + + +config rule 'rule' \ No newline at end of file diff --git a/open-app-filter/files/appfilter.init b/open-app-filter/files/appfilter.init index 7d458fc5d..4dc7e4b45 100755 --- a/open-app-filter/files/appfilter.init +++ b/open-app-filter/files/appfilter.init @@ -18,20 +18,8 @@ stop_service(){ } start_service(){ - local update rm $FEATURE_FILE - update=`uci get appfilter.feature.update` - if [ x"1" == x"$update" ];then - ln -s /etc/appfilter/feature.cfg $FEATURE_FILE - else - uci get luci.languages.zh_cn >/dev/null 2>&1 - if [ $? -eq 0 ];then - test -f $FEATURE_FILE && rm $FEATURE_FILE - ln -s /etc/appfilter/feature_cn.cfg $FEATURE_FILE - else - ln -s /etc/appfilter/feature_en.cfg $FEATURE_FILE - fi - fi + ln -s /etc/appfilter/feature.cfg $FEATURE_FILE gen_class.sh /tmp/feature.cfg insmod oaf /usr/bin/oaf_rule reload diff --git a/open-app-filter/files/feature.cfg b/open-app-filter/files/feature.cfg new file mode 100755 index 000000000..bdb43ca9b --- /dev/null +++ b/open-app-filter/files/feature.cfg @@ -0,0 +1,222 @@ +#version v22.3.24 +#format v3.0 +#id name:[proto;sport;dport;host url;request;dict] +#class chat 1 聊天 +1003 微博:[tcp;;443;weibo;;] +1004 陌陌:[tcp;;;momo;;,tcp;;;;;04:2f|05:66|06:65|07:65,tcp;;;;;00:03|01:03|02:00] +1005 支付宝:[tcp;;;alipay.com;;] +1006 钉钉:[tcp;;;dingtalk;;,tcp;;;;d?host=;,tcp;;;;/man/api;,tcp;;;;/beacon;] +1007 Soul:[tcp;;;soulapp;;] +1008 伊对:[tcp;;;520yidui;;] +1009 探探:[tcp;;;tancdn;;,tcp;;;tantanapp;;] +1010 多闪:[tcp;;;ppkankan;;] + +#class game 2 游戏 +2001 王者荣耀:[tcp;;;;;00:33|1:66|02:00|03:0b] +2002 和平精英:[tcp;;17500;;;00:33|1:66|03:0a|05:0a] +2003 英雄联盟手游:[tcp;;;;;00:33|01:66|02:00|03:0b,tcp;;443;;;00:01|01:00|10:86|11:47] +2015 我的世界:[tcp;;443;g79mclobt.nie.netease;;] +2005 欢乐斗地主:[tcp;;8000;;;00:74|01:67|02:77|03:5f] +2006 梦幻西游:[tcp;;;;;00:0e|01:00|02:fe|03:ff] +2007 明日之后:[udp;;;;;00:05|01:09|02:00,tcp;;;;;00:02|01:00|02:00|03:00|04:00|05:00] +2008 QQ飞车:[udp;;;;;00:28|01:28,tcp;;10000;;;00:33|01:66|02:00|03:08] +2009 跑跑卡丁车:[tcp;;8888;;;00:33|01:66|02:00|03:08] +2010 开心消消乐:[tcp;;80;happyelements;;] +2011 狂野飙车:[tcp;;;asphalt9;;] +2012 率土之滨:[tcp;;10001;;;00:00|01:00,tcp;;8001;;;00:00|01:00] +2013 一刀传世:[tcp;;8040;;;00:47|01:45] +2014 第五人格:[tcp;;4010;;;,tcp;;4010;;;,tcp;;4020;;;,tcp;;4030;;;,tcp;;4040;;;,tcp;;4050;;;,tcp;;4060;;;,tcp;;4070;;;,tcp;;4080;;;,tcp;;4090;;;] +2016 皇室战争:[udp;;9339;;;] +2017 炉石传说:[tcp;;3724;;;00:73:01:00:02:00] +2023 原神:[tcp;;443;yuanshen.com;;] +2025 天涯明月刀:[tcp;;10000;;;00:43|01:66|02:aa] +2026 微信小游戏:[tcp;;443;mmgame;;,tcp;;443;game.weixin.qq;;] +2033 我叫MT4:[tcp;;21248;;;,tcp;;;dir.mt4.qq.com;;] +2034 神都夜行录:[udp;;;;;00:00|01:00|02:00|03:00|04:56|05:40] +2041 光遇:[udp;;10000-15000;;;00:8f|01:ff,tcp;;;ma75.update.netease.com;;,tcp;;;ma75.proxima.nie.netease;;] +2042 保卫萝卜4:[tcp;;;s4.luobo.cn;;] +2040 哈利波特:[tcp;;10021-12000;;;00:02|01:00|02:00|03:00|04:00|05:00,tcp;;443;g92.proxima;;] +2067 9377游戏:[tcp;;;www.9377.com;;] +2068 4399游戏:[tcp;;;4399.com;;] +2069 7k7k游戏:[tcp;;;7k7k.com;;] +2070 17173游戏:[tcp;;;17173.com;;] +2071 37网游:[tcp;;;37.com;;] +2074 hao123游戏:[tcp;;;game.hao123.com;;] +2075 51游戏:[tcp;;;www.51.com;;] +2050 uu加速器:[tcp;;;mg.uu.163.com;;] +2051 腾讯加速器:[tcp;;;m.acc.qq.com;;] +2080 乐逗游戏:[tcp;;;.uu.cc;;] + +#class video 3 视频 +3001 抖音短视频:[tcp;;;-dy-;;,tcp;;;-dy.;;,tcp;;;douyin;;,tcp;;;amemv.com;;,tcp;;;apstatp.com;;,tcp;;;ecombdapi.com;;] +3003 腾讯视频:[tcp;;;v.qq.com;;,tcp;;;video.qq.com;;,tcp;;443;btrace.qq.com;;,tcp;;;tc.qq.com;;] +3004 爱奇艺:[tcp;;;iqiyi;;,tcp;;;qy.net;;] +3006 斗鱼直播:[tcp;;;douyu;;,tcp;;;douyu;;-2:2f|-1:00] +3005 微视:[tcp;;80;;;00:34|01:16|02:75,tcp;;80;weishi.qq.com;;] +3008 虎牙直播:[tcp;;;huya;;,udp;;;;;01:00|02:00|03:00|04:23,udp;;;;;01:00|02:00|03:00|04:24] +3009 快手:[tcp;;;kuaishou;;,tcp;;;ksyuncdn.com;;,tcp;;;.gifshow.com;;,tcp;;;yximgs.com;;,tcp;;80;;/ksc;,tcp;;;kwaicdn;;,tcp;;;kwimgs;;] +3011 花椒直播:[tcp;;;huajiao;;] +3012 映客直播:[tcp;;;;.inke.cn;] +3014 哔哩哔哩:[tcp;;;bilivideo;;,tcp;;;bilibili.com;;,tcp;;;;;00:47|05:75|06:70|07:67,tcp;;;;/bfs/emote/;,,tcp;;;hdslb.com;;] +3016 芒果tv:[tcp;;443;mgtv;;,tcp;;80;mgtv;;,tcp;;443;hitv;;] +3017 西瓜视频:[tcp;;;ixigua;;,tcp;;443;snsdk;;,tcp;;;xg-p.ixigua;;,tcp;;;bdxigua;;] +3018 搜狐视频:[tcp;;;aty.sohu.com;;,tcp;;;tv.itc.cn;;] +3019 播聊:[tcp;;80;randlove.cn;;,tcp;;;yueliao;;,tcp;;;5glive;;] +3020 咪咕视频:[tcp;;;miguvideo;;,tcp;;;migu.cn;;] +3021 韩剧TV:[tcp;;;hanju.koudaibaobao;;] +3022 人人视频:[tcp;;;rr.tv;;] +3023 央视影音:[tcp;;;cntv;;] +3024 土豆视频:[tcp;;;youku;;,tcp;;;ykimg;;] +3025 最右:[tcp;;;izuiyou;;] +3026 风行视频:[tcp;;;funshion;;] +3027 企鹅电竞:[tcp;;;egame.qq;;,tcp;;;liveplay;;,tcp;;;;pggame;] +3028 波波视频:[tcp;;;miaopai;;] +3029 酷狗短酷:[tcp;;;bssdl.kugou;;] +3030 酷狗直播:[tcp;;;rt-m.kugou;;,tcp;;;kgimg.com;;] + +#class shopping 4 购物 +4001 淘宝:[tcp;;;taobao;;,tcp;;;alicdn.com;;,tcp;;;tmall.com;;,tcp;;;;;00:d3|01:00,,tcp;;;;;00:d4|01:00,,tcp;;;;;00:d3|01:00] +4002 京东:[tcp;;;360buyimg;;,tcp;;;jd.com;;,tcp;;;jdcdn.com;;,tcp;;;;;00:d5|01:00] +4003 唯品会:[tcp;;;vips-mobile;;,tcp;;;vipshop;;,tcp;;;vip.com;;,tcp;;;vipstatic.com;;,tcp;;;appsimg.com;;] +4004 拼多多:[tcp;;;pinduoduo;;,tcp;;;yangkeduo.com;;,tcp;;;s1p.cdntip.com;;] +4010 饿了么:[tcp;;;eleme;;] +4012 闲鱼:[tcp;;;xianyu;;] +4021 转转:[tcp;;;zhuanzhuan;;,tcp;;;zhuanstatic;;] +4005 蘑菇街:[tcp;;;mogujie;;,tcp;;;mogucdn;;,tcp;;;;;00:73|01:ea|02:68|03:fb|04:3f] +4006 苏宁易购:[tcp;;;.suning.;;] +4007 当当网:[tcp;;;.dangdang.com;;] +4008 1号店:[tcp;;;.yhd.com;;] +4009 朴朴超市:[tcp;;;pupumall;;,tcp;;;pupuapi;;] +4013 叮咚买菜:[tcp;;;ddxq.mobi;;] +4014 小米有品:[tcp;;;youpin;;,tcp;;;shopapi.io.mi.com;;] +4015 微店:[tcp;;;weidian;;] +4016 折800:[tcp;;;zhe800.com;;] +4017 HM:[tcp;;;www.hm.com;;,tcp;;;measurement.com;;] +4018 好省:[tcp;;;hzhstb.com;;] +4019 什么值得买:[tcp;;;smzdm.com;;] +4022 网易严选:[tcp;;;yanxuan;;] +4023 识货:[tcp;;;shihuo;;] +4024 考拉海购:[tcp;;;kaola;;] +4025 宜家家居:[tcp;;;ikea.cn;;] +4026 小象优品:[tcp;;;xiaoxiangyoupin;;] + +#class music 5 音乐 +5001 网易云音乐:[tcp;;;music.163;;,tcp;;;music.126;;] +5002 QQ音乐:[tcp;;;;^/amobile.music.tc.qq.com;,tcp;;;qqmusic;;] +5003 酷狗音乐:[tcp;;;kugou;;,tcp;;;kgimg;;,tcp;;;fanxing;;] +5004 酷我音乐:[tcp;;;.kuwo.cn;;] +5005 喜马拉雅:[tcp;;;.ximalaya.com;;] +5006 千千音乐:[tcp;;;music.taihe.com;;] +5007 虾米音乐:[tcp;;;xiami;;] +5008 音悦台:[tcp;;;yinyuetai.com;;] +5009 豆瓣FM:[tcp;;;douban.fm;;] +5010 唱吧:[tcp;;;changba.com;;] +5011 音乐随心听:[tcp;;;fm.taihe.com;;] +5012 懒人听书:[tcp;;;lrts.me;;] + +#class employee 6 招聘 +6001 前程无忧:[tcp;;;51job;;] +6002 智联招聘:[tcp;;;zhaopin;;] +6003 猎聘:[tcp;;;liepin;;] +6004 赶集网:[tcp;;;58.com;;,tcp;;;58cdn;;] +6005 同城急聘:[tcp;;;xiaomei;;] +6006 领英:[tcp;;;linkedin;;] +6007 斗米:[tcp;;;doumi;;] +6008 看准:[tcp;;;kanzhun.com;;] +6009 应届生求职:[tcp;;;yingjiesheng.com;;] +6010 中华英才网:[tcp;;;chinahr.com;;] +6011 拉勾网:[tcp;;;lagou.com;;] +6012 大街网:[tcp;;;dajie.com;;] +6013 boss直聘:[tcp;;;zhipin.com;;] +6014 实习僧:[tcp;;;shixiseng.com;;] + +#class download 7 下载 +7001 迅雷:[udp;12345;;;;,udp;15000;;;;,tcp;;54321;;;,tcp;;12345;;;,udp;6881;;;;,udp;;12346;;;,udp;12346;;;;] +7002 AppStore:[tcp;;;itunes.apple.com;;] HIDE:0 +7003 samba共享:[tcp;;445;;;] HIDE:0 +7004 ftp文件传输:[tcp;;21;;;] HIDE:0 +7005 vivo应用商店:[tcp;;443;appstore.vivo;;,tcp;;443;apkappdefwsdl.vivo;;] HIDE:0 +7006 王者荣耀更新:[tcp;;80;;/sgame/;] +7007 天翼云盘:[tcp;;;ctyunapi;;] +7008 腾讯微云:[tcp;;;weiyun.com;;,tcp;;;aegis.qq.com;;,tcp;;;pingtas.qq.com;;,tcp;;443;;;00:77|01:6e|02:73] +7009 坚果云:[tcp;;;jianguoyun;;] +7010 蓝奏云:[tcp;;;pan.lanzou.com;;] +7011 华为云:[tcp;;;cloud.huawei.com;;,tcp;;;hicloud.com;;,tcp;;;myhuaweicloud.cn;;] +7020 windows更新:[tcp;;80;update.microsoft.com;;,tcp;;;windowsupdate.com;;] +7030 向日葵:[tcp;;;oray.com;;,tcp;;;oray.net;;] +7031 TeamViewer:[tcp;;;teamviewer;;] +7032 阿里云盘:[tcp;;;aliyundrive;;] +7035 SSH:[tcp;;;;;00:53|01:53|02:48] + +#class website 8 常用网站 +8001 百度:[tcp;;;baidu.com;;] +8002 新浪:[tcp;;;sina.com;;] +8003 搜狐:[tcp;;;sohu.com;;] +8004 网易:[tcp;;;163.com;;,tcp;;443;126.com;;] +8005 凤凰网:[tcp;;;ifeng.com;;] +8006 人民网:[tcp;;;people.com.cn;;] +8008 中华网:[tcp;;;china.com;;] +8009 hao123:[tcp;;;hao123.com;;,] +8010 2345:[tcp;;;2345.com;;,] +8015 游民星空:[tcp;;;gamersky.com;;] +8016 游侠网:[tcp;;;ali213.net;;] +8017 世纪佳缘:[tcp;;;jiayuan.com;;] +8018 珍爱网:[tcp;;;zhenai.com;;] +8019 百合网:[tcp;;;baihe.com;;] +8020 天涯社区:[tcp;;;tianya.cn;;] +8021 携程网:[tcp;;;ctrip.com;;] +8022 飞猪:[tcp;;;fliggy.com;;] +8023 12306:[tcp;;;12306.cn;;] +8024 马蜂窝:[tcp;;;mafengwo.cn;;] +8025 途牛:[tcp;;;tuniu.com;;] +8026 穷游网:[tcp;;;qyer.com;;] +8027 驴妈妈:[tcp;;;lvmama.com;;] +8028 同程旅游:[tcp;;;ly.com;;] +8029 太平洋汽车:[tcp;;;pcauto.com.cn;;] +8030 易车网:[tcp;;;bitauto.com;;] +8031 爱卡汽车:[tcp;;;xcar.com.cn;;] +8032 雪球:[tcp;;;xueqiu.com;;] +8033 东方财富:[tcp;;;eastmoney.com;;] +8034 证券之星:[tcp;;;stockstar.com;;] +8035 和讯:[tcp;;;hexun.com;;] +8036 第一财经:[tcp;;;yicai.com;;] +8037 全景网:[tcp;;;p5w.net;;] +8038 中彩网:[tcp;;;zhcw.com;;] +8039 中国体育彩票:[tcp;;;lottery.gov.cn;;] +8040 竞彩网:[tcp;;;sporttery.cn;;] +8041 豆丁:[tcp;;;docin.com;;] +8042 豆瓣:[tcp;;;douban.com;;] +8043 知乎:[tcp;;;zhihu.com;;] +8044 缤客:[tcp;;;booking.com;;] +8046 猫扑:[tcp;;;mop.com;;] +8047 赶集网:[tcp;;;ganji.com;;] +8048 安居客:[tcp;;;anjuke.com;;] +8049 房天下:[tcp;;;fang.com;;] +8050 链家:[tcp;;;lianjia.com;;] +8051 百姓网:[tcp;;;baixing.com;;] +8052 下厨房:[tcp;;;xiachufang.com;;] +8053 大众点评:[tcp;;;dianping.com;;] +8054 58同城:[tcp;;;58.com;;] +8055 天眼查:[tcp;;;tianyancha.com;;] +8056 千图网:[tcp;;;58pic.com;;] +8057 csdn社区:[tcp;;;csdn.net;;] +8058 有道词典:[tcp;;;dict.youdao.com;;] +8059 动漫之家:[tcp;;;dmzj.com;;] +8060 汽车之家:[tcp;;;autohome.com.cn;;] +8061 纵横中文网:[tcp;;;zongheng.com;;] +8062 起点中文网:[tcp;;;qidian.com;;] +8063 飞卢:[tcp;;;faloo.com;;] +8064 潇湘书院:[tcp;;;xxsy.net;;] +8065 cctv5:[tcp;;;sports.cctv.com;;] +8066 虎扑体育:[tcp;;;www.hupu.com;;] +8067 建设银行:[tcp;;;ccb.com;;] +8068 农业银行:[tcp;;;abchina.com;;] +8069 中国银行:[tcp;;;boc.cn;;] +8070 交通银行:[tcp;;;bankcomm.com;;] +8071 招商银行:[tcp;;;cmbchina.com;;] +8072 邮政储蓄:[tcp;;;psbc.com;;] +8073 兴业银行:[tcp;;;cib.com.cn;;] +8074 浦发银行:[tcp;;;spdb.com.cn;;] +8075 中信银行:[tcp;;;citicbank.com;;] +8076 上海银行:[tcp;;;bosc.cn;;] + diff --git a/open-app-filter/files/oaf_rule b/open-app-filter/files/oaf_rule index 82a9ec4e8..14f0f6797 100755 --- a/open-app-filter/files/oaf_rule +++ b/open-app-filter/files/oaf_rule @@ -38,6 +38,17 @@ load_rule() json_cleanup } + + +add_mac_to_array_callback() { + local section="$1" + local mac + config_get mac "$section" "mac" + if [ -n "$mac" ]; then + json_add_string "" "$mac" + fi +} + load_mac_list() { json_init @@ -45,18 +56,16 @@ load_mac_list() json_add_int "op" 4 json_add_object "data" json_add_array "mac_list" - config_get mac_list "user" "users" - if [ x"$mac_list" != x"" ];then - for mac in $mac_list: - do - json_add_string "" $mac - done - fi + + config_foreach add_mac_to_array_callback af_user + json_str=`json_dump` config_apply "$json_str" json_cleanup } + + reload_rule(){ config_load appfilter clean_rule diff --git a/open-app-filter/files/user_info.config b/open-app-filter/files/user_info.config new file mode 100755 index 000000000..e69de29bb diff --git a/open-app-filter/src/appfilter.h b/open-app-filter/src/appfilter.h index d29163567..454f7cda0 100755 --- a/open-app-filter/src/appfilter.h +++ b/open-app-filter/src/appfilter.h @@ -1,7 +1,105 @@ #ifndef __APPFILTER_H__ #define __APPFILTER_H__ #define MIN_INET_ADDR_LEN 7 + +#include +#include +#include +#include + +#define LOG_FILE_PATH "/tmp/log/appfilter.log" + +typedef enum { + LOG_LEVEL_DEBUG, + LOG_LEVEL_INFO, + LOG_LEVEL_WARN, + LOG_LEVEL_ERROR +} LogLevel; + +extern int current_log_level; + + static void af_log(LogLevel level, const char *format, ...){ + if (level < current_log_level) + return; + + FILE *log_file = fopen(LOG_FILE_PATH, "a"); + if (!log_file) { + perror("Failed to open log file"); + return; + } + + time_t now = time(NULL); + struct tm *t = localtime(&now); + char time_str[20]; + strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", t); + + const char *level_str; + switch (level) { + case LOG_LEVEL_DEBUG: level_str = "DEBUG"; break; + case LOG_LEVEL_INFO: level_str = "INFO"; break; + case LOG_LEVEL_WARN: level_str = "WARN"; break; + case LOG_LEVEL_ERROR: level_str = "ERROR"; break; + default: level_str = "UNKNOWN"; break; + } + + fprintf(log_file, "[%s] [%s] ", time_str, level_str); + + va_list args; + va_start(args, format); + vfprintf(log_file, format, args); + va_end(args); + fclose(log_file); +} + +#define LOG_DEBUG(format, ...) af_log(LOG_LEVEL_DEBUG, format, ##__VA_ARGS__) +#define LOG_INFO(format, ...) af_log(LOG_LEVEL_INFO, format, ##__VA_ARGS__) +#define LOG_WARN(format, ...) af_log(LOG_LEVEL_WARN, format, ##__VA_ARGS__) +#define LOG_ERROR(format, ...) af_log(LOG_LEVEL_ERROR, format, ##__VA_ARGS__) + #define CMD_GET_LAN_IP "ifconfig br-lan | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'" #define CMD_GET_LAN_MASK "ifconfig br-lan | grep 'inet addr' | awk '{print $4}' | awk -F: '{print $2}'" +#define MAX_TIME_LIST_LEN 1024 +#define MAX_TIME_LIST 64 +typedef struct af_time +{ + int hour; + int min; +} af_time_t; + +typedef struct af_global_config_t{ + int enable; + int user_mode; + int work_mode; +}af_global_config_t; + +typedef struct time_config{ + af_time_t start_time; + af_time_t end_time; +}time_config_t; + +typedef struct af_time_config_t{ + int time_mode; + time_config_t seg_time; + int deny_time; + int allow_time; + int days[7]; + int time_num; + time_config_t time_list[MAX_TIME_LIST]; +}af_time_config_t; + +typedef struct af_config_t{ + af_global_config_t global; + af_time_config_t time; +}af_config_t; + +typedef struct af_run_time_status{ + int deny_time; + int allow_time; + int filter; + int match_time; +}af_run_time_status_t; + +af_config_t g_af_config; + #endif \ No newline at end of file diff --git a/open-app-filter/src/appfilter_config.c b/open-app-filter/src/appfilter_config.c index 989de5ee3..fe851f64b 100755 --- a/open-app-filter/src/appfilter_config.c +++ b/open-app-filter/src/appfilter_config.c @@ -23,6 +23,7 @@ THE SOFTWARE. #include #include #include "appfilter_config.h" +#include "appfilter.h" #include app_name_info_t app_name_table[MAX_SUPPORT_APP_NUM]; @@ -35,7 +36,7 @@ static struct uci_context *uci_ctx = NULL; static struct uci_package *uci_appfilter; -int uci_get_int_value(struct uci_context *ctx, char *key) +int af_uci_get_int_value(struct uci_context *ctx, char *key) { struct uci_element *e; struct uci_ptr ptr; @@ -72,7 +73,7 @@ done: } -int uci_get_value(struct uci_context *ctx, char *key, char *output, int out_len) +int af_uci_get_value(struct uci_context *ctx, char *key, char *output, int out_len) { struct uci_element *e; struct uci_ptr ptr; @@ -303,6 +304,18 @@ int af_uci_set_int_value(struct uci_context *ctx, char *key, int value) return ret; } +int af_uci_del_array_value(struct uci_context *ctx, char *key_fmt, int index){ + char key[128] = {0}; + sprintf(key, key_fmt, index); + return af_uci_delete(ctx, key); +} + +int af_uci_set_array_value(struct uci_context *ctx, char *key_fmt, int index, char *value){ + char key[128] = {0}; + sprintf(key, key_fmt, index); + return af_uci_set_value(ctx, key, value); +} + int af_uci_commit(struct uci_context *ctx, const char * package) { struct uci_ptr ptr; int ret = UCI_OK; @@ -324,7 +337,50 @@ done: return UCI_OK; } +int af_get_uci_list_num(struct uci_context * ctx, char *package, char *section){ + int count = 0; + struct uci_ptr p; + struct uci_element *e; + struct uci_package *pkg = NULL; + if (UCI_OK != uci_load(ctx, package, &pkg)){ + return -1; + } + uci_foreach_element(&pkg->sections, e){ + struct uci_section *s = uci_to_section(e); + if (strcmp(s->type, section)){ + continue; + } + count++; + } + uci_unload(ctx, pkg); + return count; +} +int af_uci_get_array_value(struct uci_context *ctx, char *key_fmt, int index, char *output, int out_len) +{ + char key[128] = {0}; + sprintf(key, key_fmt, index); + return af_uci_get_value(ctx, key, output, out_len); +} + +int af_uci_add_section(struct uci_context * ctx, char *package_name, char *section) +{ + struct uci_section *s = NULL; + struct uci_package *p = NULL; + int ret; + ret = uci_load(ctx, package_name , &p); + if (ret != UCI_OK) + goto done; + + ret = uci_add_section(ctx, p, section, &s); + if (ret != UCI_OK) + goto done; + ret = uci_save(ctx, p); +done: + if (s) + fprintf(stdout, "%s\n", s->e.name); + return ret; +} // static struct uci_package * config_init_package(const char *config) @@ -427,78 +483,6 @@ int check_time_valid(char *t) return 1; } -void dump_af_time(af_ctl_time_t *t) -{ - int i; - printf("---------dump af time-------------\n"); - printf("%d:%d ---->%d:%d\n", t->start.hour, t->start.min, - t->end.hour, t->end.min); - for (i = 0; i < 7; i++) - { - printf("%d ", t->days[i]); - } - printf("\n"); -} - -af_ctl_time_t *load_appfilter_ctl_time_config(void) -{ - char start_time_str[64] = {0}; - char end_time_str[64] = {0}; - char start_time_str2[64] = {0}; - char end_time_str2[64] = {0}; - char days_str[64] = {0}; - int value = 0; - int ret = 0; - af_ctl_time_t *t = NULL; - struct uci_context *ctx = uci_alloc_context(); - if (!ctx) - return NULL; - - memset(start_time_str, 0x0, sizeof(start_time_str)); - memset(end_time_str, 0x0, sizeof(end_time_str)); - memset(start_time_str2, 0x0, sizeof(start_time_str2)); - memset(end_time_str2, 0x0, sizeof(end_time_str2)); - - uci_get_value(ctx, "appfilter.time.start_time", start_time_str, sizeof(start_time_str)); - uci_get_value(ctx, "appfilter.time.end_time", end_time_str, sizeof(end_time_str)); - uci_get_value(ctx, "appfilter.time.start_time2", start_time_str2, sizeof(start_time_str2)); - uci_get_value(ctx, "appfilter.time.end_time2", end_time_str2, sizeof(end_time_str2)); - uci_get_value(ctx, "appfilter.time.days", days_str, sizeof(days_str)); - - - t = malloc(sizeof(af_ctl_time_t)); - - value = uci_get_int_value(ctx, "appfilter.time.time_mode"); - if (value < 0) - t->time_mode = 0; - else - t->time_mode = value; - if (check_time_valid(start_time_str) && check_time_valid(end_time_str)){ - sscanf(start_time_str, "%d:%d", &t->start.hour, &t->start.min); - sscanf(end_time_str, "%d:%d", &t->end.hour, &t->end.min); - } - if (check_time_valid(start_time_str2) && check_time_valid(end_time_str2)){ - sscanf(start_time_str2, "%d:%d", &t->start2.hour, &t->start2.min); - sscanf(end_time_str2, "%d:%d", &t->end2.hour, &t->end2.min); - } - - char *p = strtok(days_str, " "); - if (!p) - goto EXIT; - do - { - int day = atoi(p); - if (day >= 0 && day <= 6) - t->days[day] = 1; - else - ret = 0; - } while (p = strtok(NULL, " ")); -EXIT: - uci_free_context(ctx); - return t; -} - - int config_get_appfilter_enable(void) { @@ -506,7 +490,7 @@ int config_get_appfilter_enable(void) struct uci_context *ctx = uci_alloc_context(); if (!ctx) return NULL; - enable = uci_get_int_value(ctx, "appfilter.global.enable"); + enable = af_uci_get_int_value(ctx, "appfilter.global.enable"); if (enable < 0) enable = 0; @@ -520,7 +504,7 @@ int config_get_lan_ip(char *lan_ip, int len) struct uci_context *ctx = uci_alloc_context(); if (!ctx) return -1; - ret = uci_get_value(ctx, "network.lan.ipaddr", lan_ip, len); + ret = af_uci_get_value(ctx, "network.lan.ipaddr", lan_ip, len); uci_free_context(ctx); return ret; } @@ -531,7 +515,7 @@ int config_get_lan_mask(char *lan_mask, int len) struct uci_context *ctx = uci_alloc_context(); if (!ctx) return -1; - ret = uci_get_value(ctx, "network.lan.netmask", lan_mask, len); + ret = af_uci_get_value(ctx, "network.lan.netmask", lan_mask, len); uci_free_context(ctx); return ret; } diff --git a/open-app-filter/src/appfilter_config.h b/open-app-filter/src/appfilter_config.h index 05f0069e5..44d987431 100755 --- a/open-app-filter/src/appfilter_config.h +++ b/open-app-filter/src/appfilter_config.h @@ -31,20 +31,6 @@ THE SOFTWARE. extern int g_cur_class_num; extern int g_app_count; extern char CLASS_NAME_TABLE[MAX_APP_TYPE][MAX_CLASS_NAME_LEN]; -typedef struct af_time -{ - int hour; - int min; -} af_time_t; -typedef struct af_ctl_time -{ - int time_mode; // 0,1 - af_time_t start; - af_time_t end; - af_time_t start2; // todo: time group list - af_time_t end2; - int days[7]; -} af_ctl_time_t; typedef struct app_name_info { @@ -58,7 +44,6 @@ char *get_app_name_by_id(int id); int appfilter_config_alloc(void); int appfilter_config_free(void); -af_ctl_time_t *load_appfilter_ctl_time_config(void); int config_get_appfilter_enable(void); int config_get_lan_ip(char *lan_ip, int len); int config_get_lan_mask(char *lan_mask, int len); @@ -69,4 +54,11 @@ int af_uci_del_list(struct uci_context *ctx, char *key, char *value); int af_uci_get_list_value(struct uci_context *ctx, char *key, char *output, int out_len, char *delimt); int af_uci_set_value(struct uci_context *ctx, char *key, char *value); int af_uci_set_int_value(struct uci_context *ctx, char *key, int value); +int af_uci_del_array_value(struct uci_context *ctx, char *key_fmt, int index); +int af_uci_set_array_value(struct uci_context *ctx, char *key_fmt, int index, char *value); +int af_get_uci_list_num(struct uci_context * ctx, char *package, char *section); +int af_uci_get_array_value(struct uci_context *ctx, char *key_fmt, int index, char *output, int out_len); +int af_uci_get_int_value(struct uci_context *ctx, char *key); +int af_uci_get_value(struct uci_context *ctx, char *key, char *output, int out_len); #endif + diff --git a/open-app-filter/src/appfilter_netlink.c b/open-app-filter/src/appfilter_netlink.c index 8edb7653b..60ab98a13 100755 --- a/open-app-filter/src/appfilter_netlink.c +++ b/open-app-filter/src/appfilter_netlink.c @@ -33,6 +33,7 @@ THE SOFTWARE. #include #include "appfilter_user.h" #include "appfilter_netlink.h" +#include "appfilter.h" #define MAX_NL_RCV_BUF_SIZE 4096 #define REPORT_INTERVAL_SECS 60 @@ -54,7 +55,6 @@ void appfilter_nl_handler(struct uloop_fd *u, unsigned int ev) .msg_iov = &iov, .msg_iovlen = 1, }; - printf("%s %d \n", __func__, __LINE__); do { @@ -79,7 +79,6 @@ void appfilter_nl_handler(struct uloop_fd *u, unsigned int ev) printf("magic error %x\n", af_hdr->magic); return; } - printf("%s %d \n", __func__, __LINE__); if (af_hdr->len <= 0 || af_hdr->len >= MAX_OAF_NETLINK_MSG_LEN) { @@ -94,7 +93,6 @@ void appfilter_nl_handler(struct uloop_fd *u, unsigned int ev) printf("parse json failed:%s", kdata); return; } - printf("%s %d \n", __func__, __LINE__); struct json_object *mac_obj = json_object_object_get(root, "mac"); @@ -119,7 +117,6 @@ void appfilter_nl_handler(struct uloop_fd *u, unsigned int ev) return; } } - printf("%s %d \n", __func__, __LINE__); struct json_object *ip_obj = json_object_object_get(root, "ip"); if (ip_obj) @@ -130,7 +127,6 @@ void appfilter_nl_handler(struct uloop_fd *u, unsigned int ev) json_object_put(root); return; } - printf("%s %d \n", __func__, __LINE__); for (i = 0; i < json_object_array_length(visit_array); i++) { @@ -156,24 +152,27 @@ void appfilter_nl_handler(struct uloop_fd *u, unsigned int ev) int hash = hash_appid(appid); visit_info_t *head = node->visit_htable[hash]; - - if (head && (cur_time.tv_sec - head->latest_time) < 300) - { - head->latest_time = cur_time.tv_sec; + visit_info_t *p = head; + while(p){ + LOG_DEBUG("appid = %d, p->appid = %d, p->latest_time = %d, cur_time.tv_sec = %d, cur_time.tv_sec - p->latest_time = %d\n", + appid, p->appid, p->latest_time, cur_time.tv_sec, cur_time.tv_sec - p->latest_time); + if((p->appid == appid) && ((cur_time.tv_sec - p->latest_time) < 300)){ + LOG_DEBUG("match appid = %d\n", appid, cur_time.tv_sec - p->latest_time); + break; + } + + p = p->next; } - else - { - visit_info_t *visit_node = (visit_info_t *)calloc(1, sizeof(visit_info_t)); - visit_node->action = action; - visit_node->appid = appid; - visit_node->latest_time = cur_time.tv_sec; - visit_node->first_time = cur_time.tv_sec - MIN_VISIT_TIME; - visit_node->next = NULL; - add_visit_info_node(&node->visit_htable[hash], visit_node); + if (!p){ + p = (visit_info_t *)calloc(1, sizeof(visit_info_t)); + p->appid = appid; + p->next = NULL; + p->first_time = cur_time.tv_sec - MIN_VISIT_TIME; + add_visit_info_node(&node->visit_htable[hash], p); } + p->action = action; + p->latest_time = cur_time.tv_sec; } - printf("%s %d \n", __func__, __LINE__); - json_object_put(root); } diff --git a/open-app-filter/src/appfilter_ubus.c b/open-app-filter/src/appfilter_ubus.c index 0b37c9bd8..5f36fd272 100755 --- a/open-app-filter/src/appfilter_ubus.c +++ b/open-app-filter/src/appfilter_ubus.c @@ -36,6 +36,9 @@ THE SOFTWARE. #include "appfilter_user.h" #include "appfilter_config.h" #include +#include "appfilter.h" + +extern int g_oaf_config_change; struct ubus_context *ubus_ctx = NULL; static struct blob_buf b; @@ -127,6 +130,99 @@ void ubus_dump_visit_list(struct blob_buf *b, char *mac) blobmsg_close_array(b, array); } +// Function to compare JSON objects based on the "lt" field +int compare_lt(const void *a, const void *b) { + struct json_object *obj_a = *(struct json_object **)a; + struct json_object *obj_b = *(struct json_object **)b; + + struct json_object *lt_a, *lt_b; + json_object_object_get_ex(obj_a, "lt", <_a); + json_object_object_get_ex(obj_b, "lt", <_b); + + int lt_val_a = json_object_get_int(lt_a); + int lt_val_b = json_object_get_int(lt_b); + + return lt_val_b - lt_val_a; +} + + +static int +appfilter_handle_dev_visit_list(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + int i, j; + struct json_object *root_obj = json_object_new_object(); + struct json_object *visit_array = json_object_new_array(); + + char *msg_obj_str = blobmsg_format_json(msg, true); + if (!msg_obj_str) + { + printf("format json failed\n"); + return 0; + } + + printf("msg_obj_str:%s\n", msg_obj_str); + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *mac_obj = json_object_object_get(req_obj, "mac"); + if (!mac_obj) + { + printf("mac is null\n"); + return 0; + } + printf("%s %d\n", __func__, __LINE__); + + char *mac = json_object_get_string(mac_obj); + dev_node_t *node = find_dev_node(mac); + + if (!node) + { + printf("not found mac:%s\n", mac); + return 0; + } + + json_object_object_add(root_obj, "hostname", json_object_new_string(node->hostname)); + json_object_object_add(root_obj, "mac", json_object_new_string(node->mac)); + json_object_object_add(root_obj, "ip", json_object_new_string(node->ip)); + + for (j = 0; j < MAX_VISIT_HASH_SIZE; j++) + { + visit_info_t *p_info = node->visit_htable[j]; + while (p_info) + { + char *first_time_str = format_time(p_info->first_time); + char *latest_time_str = format_time(p_info->latest_time); + int total_time = p_info->latest_time - p_info->first_time; + struct json_object *visit_obj = json_object_new_object(); + json_object_object_add(visit_obj, "name", json_object_new_string(get_app_name_by_id(p_info->appid))); + json_object_object_add(visit_obj, "id", json_object_new_int(p_info->appid)); + json_object_object_add(visit_obj, "act", json_object_new_int(p_info->action)); + json_object_object_add(visit_obj, "ft", json_object_new_int(p_info->first_time)); + json_object_object_add(visit_obj, "lt", json_object_new_int(p_info->latest_time)); + json_object_object_add(visit_obj, "tt", json_object_new_int(total_time)); + json_object_array_add(visit_array, visit_obj); + + if (first_time_str) + free(first_time_str); + if (latest_time_str) + free(latest_time_str); + p_info = p_info->next; + } + } + + // Sort the visit_array based on the "lt" field + json_object_array_sort(visit_array, compare_lt); + + json_object_object_add(root_obj, "total_num", json_object_new_int(json_object_array_length(visit_array))); + json_object_object_add(root_obj, "list", visit_array); + blob_buf_init(&b, 0); + blobmsg_add_object(&b, root_obj); + ubus_send_reply(ctx, req, b.head); + json_object_put(root_obj); + return 0; +} + + void update_app_visit_time_list(char *mac, struct app_visit_stat_info *visit_info) { int i, j, s; @@ -300,12 +396,6 @@ appfilter_handle_dev_list(struct ubus_context *ctx, struct ubus_object *obj, dev_node_t *node = dev_hash_table[i]; while (node) { - if (node->online == 0) - { - - node = node->next; - continue; - } struct json_object *dev_obj = json_object_new_object(); struct json_object *app_array = json_object_new_array(); app_visit_time_info_t top5_app_list[5]; @@ -330,7 +420,9 @@ appfilter_handle_dev_list(struct ubus_context *ctx, struct ubus_object *obj, json_object_object_add(dev_obj, "online", json_object_new_int(1)); json_object_object_add(dev_obj, "hostname", json_object_new_string(hostname)); - json_object_object_add(dev_obj, "latest_app", json_object_new_string("test")); + json_object_object_add(dev_obj, "nickname", json_object_new_string("")); + + json_object_array_add(dev_array, dev_obj); node = node->next; @@ -339,49 +431,6 @@ appfilter_handle_dev_list(struct ubus_context *ctx, struct ubus_object *obj, goto END; } } - for (i = 0; i < MAX_DEV_NODE_HASH_SIZE; i++) - { - dev_node_t *node = dev_hash_table[i]; - while (node) - { - if (node->online != 0) - { - - node = node->next; - continue; - } - struct json_object *dev_obj = json_object_new_object(); - struct json_object *app_array = json_object_new_array(); - app_visit_time_info_t top5_app_list[5]; - memset(top5_app_list, 0x0, sizeof(top5_app_list)); - update_top5_app(node, top5_app_list); - - for (j = 0; j < 5; j++) - { - if (top5_app_list[j].app_id == 0) - break; - struct json_object *app_obj = json_object_new_object(); - json_object_object_add(app_obj, "id", json_object_new_int(top5_app_list[j].app_id)); - json_object_object_add(app_obj, "name", json_object_new_string(get_app_name_by_id(top5_app_list[j].app_id))); - json_object_array_add(app_array, app_obj); - } - - json_object_object_add(dev_obj, "applist", app_array); - json_object_object_add(dev_obj, "mac", json_object_new_string(node->mac)); - char hostname[32] = {0}; - get_hostname_by_mac(node->mac, hostname); - json_object_object_add(dev_obj, "ip", json_object_new_string(node->ip)); - - json_object_object_add(dev_obj, "online", json_object_new_int(0)); - json_object_object_add(dev_obj, "hostname", json_object_new_string(hostname)); - json_object_object_add(dev_obj, "latest_app", json_object_new_string("test")); - json_object_array_add(dev_array, dev_obj); - node = node->next; - count++; - if (count >= MAX_SUPPORT_DEV_NUM) - goto END; - } - } END: @@ -393,8 +442,8 @@ END: return 0; } -static int -appfilter_handle_visit_time(struct ubus_context *ctx, struct ubus_object *obj, + +static int appfilter_handle_visit_time(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { @@ -420,15 +469,15 @@ appfilter_handle_visit_time(struct ubus_context *ctx, struct ubus_object *obj, struct json_object *resp_obj = json_object_new_object(); struct json_object *app_info_array = json_object_new_array(); - json_object_object_add(resp_obj, "app_list", app_info_array); + json_object_object_add(resp_obj, "list", app_info_array); + json_object_object_add(resp_obj, "total_num", json_object_new_int(info.num)); int i; for (i = 0; i < info.num; i++) { struct json_object *app_info_obj = json_object_new_object(); - json_object_object_add(app_info_obj, "app_id", - json_object_new_string(get_app_name_by_id(info.visit_list[i].app_id))); - json_object_object_add(app_info_obj, "visit_time", - json_object_new_int(info.visit_list[i].total_time)); + json_object_object_add(app_info_obj, "id", json_object_new_int(info.visit_list[i].app_id)); + json_object_object_add(app_info_obj, "name", json_object_new_string(get_app_name_by_id(info.visit_list[i].app_id))); + json_object_object_add(app_info_obj, "t", json_object_new_int(info.visit_list[i].total_time)); json_object_array_add(app_info_array, app_info_obj); } @@ -642,6 +691,7 @@ static int handle_set_app_filter(struct ubus_context *ctx, struct ubus_object *o } af_uci_commit(uci_ctx, "appfilter"); reload_oaf_rule(); + g_oaf_config_change = 1; uci_free_context(uci_ctx); struct blob_buf b = {}; @@ -669,8 +719,8 @@ static int handle_get_app_filter_base(struct ubus_context *ctx, struct ubus_obje } int enable = 0; int work_mode = 0; - enable = uci_get_int_value(uci_ctx, "appfilter.global.enable"); - work_mode = uci_get_int_value(uci_ctx, "appfilter.global.work_mode"); + enable = af_uci_get_int_value(uci_ctx, "appfilter.global.enable"); + work_mode = af_uci_get_int_value(uci_ctx, "appfilter.global.work_mode"); json_object_object_add(data_obj, "enable", json_object_new_int(enable)); json_object_object_add(data_obj, "work_mode", json_object_new_int(work_mode)); @@ -719,6 +769,7 @@ static int handle_set_app_filter_base(struct ubus_context *ctx, struct ubus_obje af_uci_set_int_value(uci_ctx, "appfilter.global.work_mode", json_object_get_int(work_mode_obj)); af_uci_commit(uci_ctx, "appfilter"); reload_oaf_rule(); + g_oaf_config_change = 1; uci_free_context(uci_ctx); struct blob_buf b = {}; blob_buf_init(&b, 0); @@ -729,12 +780,631 @@ static int handle_set_app_filter_base(struct ubus_context *ctx, struct ubus_obje return 0; } + + +static int handle_get_app_filter_time(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + struct json_object *response = json_object_new_object(); + struct json_object *data_obj = json_object_new_object(); + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return 0; + } + + // Get time_mode + int time_mode = af_uci_get_int_value(uci_ctx, "appfilter.time.time_mode"); + json_object_object_add(data_obj, "mode", json_object_new_int(time_mode)); + + // Get days + char days_str[128] = {0}; + af_uci_get_value(uci_ctx, "appfilter.time.days", days_str, sizeof(days_str)); + printf("days_str: %s\n", days_str); + struct json_object *days_array = json_object_new_array(); + char *day = strtok(days_str, " "); + while (day) { + json_object_array_add(days_array, json_object_new_int(atoi(day))); + day = strtok(NULL, " "); + } + json_object_object_add(data_obj, "weekday_list", days_array); + + // Get start_time and end_time + char start_time[32] = {0}; + char end_time[32] = {0}; + af_uci_get_value(uci_ctx, "appfilter.time.start_time", start_time, sizeof(start_time)); + af_uci_get_value(uci_ctx, "appfilter.time.end_time", end_time, sizeof(end_time)); + json_object_object_add(data_obj, "start_time", json_object_new_string(start_time)); + json_object_object_add(data_obj, "end_time", json_object_new_string(end_time)); + + // Get deny_time and allow_time + int deny_time = af_uci_get_int_value(uci_ctx, "appfilter.time.deny_time"); + int allow_time = af_uci_get_int_value(uci_ctx, "appfilter.time.allow_time"); + json_object_object_add(data_obj, "deny_time", json_object_new_int(deny_time)); + json_object_object_add(data_obj, "allow_time", json_object_new_int(allow_time)); + + // Get time list and parse into objects with start_time and end_time + char time_str[512] = {0}; + af_uci_get_list_value(uci_ctx, "appfilter.time.time", time_str, sizeof(time_str), " "); + struct json_object *time_array = json_object_new_array(); + char *time_period = strtok(time_str, " "); + while (time_period) { + char start[16] = {0}; + char end[16] = {0}; + char *delimiter = strchr(time_period, '-'); + if (delimiter) { + // Copy start_time (characters before '-') + strncpy(start, time_period, delimiter - time_period); + start[delimiter - time_period] = '\0'; + + // Copy end_time (characters after '-') + strcpy(end, delimiter + 1); + + // Create time period object + struct json_object *period_obj = json_object_new_object(); + json_object_object_add(period_obj, "start", json_object_new_string(start)); + json_object_object_add(period_obj, "end", json_object_new_string(end)); + json_object_array_add(time_array, period_obj); + } + time_period = strtok(NULL, " "); + } + json_object_object_add(data_obj, "time_list", time_array); + + json_object_object_add(response, "data", data_obj); + + uci_free_context(uci_ctx); + + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + + +// {"end_time":"12:00","weekday_list":[1,2,3,4,5,6,0],"deny_time":5,"start_time":"22:22","allow_time":30,"mode":1} +// {"mode":0,"weekday_list":[1,2],"time_list":[{"start":"00:11","end":"00:12"},{"start":"12:00","end":"14:00"}]} +static int handle_set_app_filter_time(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + printf("set appfilter time\n"); + int mode = 0; + struct json_object *response = json_object_new_object(); + int i; + char *msg_obj_str = blobmsg_format_json(msg, true); + if (!msg_obj_str) { + printf("format json failed\n"); + return 0; + } + printf("msg_obj_str: %s\n", msg_obj_str); + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *mode_obj = json_object_object_get(req_obj, "mode"); + struct json_object *weekday_list_obj = json_object_object_get(req_obj, "weekday_list"); + if (!mode_obj || !weekday_list_obj) { + printf("mode_obj or weekday_list_obj is NULL\n"); + return 0; + } + printf("mode_obj: %d\n", json_object_get_int(mode_obj)); + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return 0; + } + mode = json_object_get_int(mode_obj); + af_uci_set_int_value(uci_ctx, "appfilter.time.time_mode", mode); + + // Build days string from weekday array + char days_str[128] = {0}; + for (i = 0; i < json_object_array_length(weekday_list_obj); i++) { + struct json_object *weekday_obj = json_object_array_get_idx(weekday_list_obj, i); + char tmp[8]; + snprintf(tmp, sizeof(tmp), "%d", json_object_get_int(weekday_obj)); + if (i > 0) strcat(days_str, " "); + strcat(days_str, tmp); + } + af_uci_set_value(uci_ctx, "appfilter.time.days", days_str); + + if (mode == 0) { + struct json_object *time_list_obj = json_object_object_get(req_obj, "time_list"); + if (!time_list_obj) { + printf("time_list_obj is NULL\n"); + goto EXIT; + } + af_uci_delete(uci_ctx, "appfilter.time.time"); + int time_list_len = json_object_array_length(time_list_obj); + for (i = 0; i < time_list_len; i++) { + struct json_object *time_obj = json_object_array_get_idx(time_list_obj, i); + struct json_object *start_time_obj = json_object_object_get(time_obj, "start"); + struct json_object *end_time_obj = json_object_object_get(time_obj, "end"); + if (!start_time_obj || !end_time_obj) { + printf("start_time_obj or end_time_obj is NULL\n"); + goto EXIT; + } + char time_str[128] = {0}; + sprintf(time_str, "%s-%s", json_object_get_string(start_time_obj), json_object_get_string(end_time_obj)); + printf("time_str: %s\n", time_str); + af_uci_add_list(uci_ctx, "appfilter.time.time", time_str); + } + } + else { + struct json_object *deny_time_obj = json_object_object_get(req_obj, "deny_time"); + struct json_object *allow_time_obj = json_object_object_get(req_obj, "allow_time"); + struct json_object *start_time_obj = json_object_object_get(req_obj, "start_time"); + struct json_object *end_time_obj = json_object_object_get(req_obj, "end_time"); + if (!deny_time_obj || !allow_time_obj || !start_time_obj || !end_time_obj) { + printf("deny_time_obj or allow_time_obj or start_time_obj or end_time_obj is NULL\n"); + goto EXIT; + } + af_uci_set_int_value(uci_ctx, "appfilter.time.deny_time", json_object_get_int(deny_time_obj)); + af_uci_set_int_value(uci_ctx, "appfilter.time.allow_time", json_object_get_int(allow_time_obj)); + af_uci_set_value(uci_ctx, "appfilter.time.start_time", json_object_get_string(start_time_obj)); + af_uci_set_value(uci_ctx, "appfilter.time.end_time", json_object_get_string(end_time_obj)); + } + af_uci_commit(uci_ctx, "appfilter"); + g_oaf_config_change = 1; + printf("uci commit ok\n"); + // reload_oaf_rule(); +EXIT: + uci_free_context(uci_ctx); + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + +#if 0 + + +typedef void (*iter_func)(void *arg, dev_node_t *dev); +//todo:dev for each +extern dev_node_t *dev_hash_table[MAX_DEV_NODE_HASH_SIZE]; + +dev_node_t *add_dev_node(char *mac); +void init_dev_node_htable(); +void dump_dev_list(void); +void dump_dev_visit_list(void); +dev_node_t *find_dev_node(char *mac); +void dev_foreach(void *arg, iter_func iter); +#endif + + + +typedef struct all_users_info { + int flag; + struct json_object *users_array; +} all_users_info_t; + +void all_users_callback(void *arg, dev_node_t *dev) +{ + int flag = 0; + int i; + all_users_info_t *au_info = (all_users_info_t *)arg; + flag = au_info->flag; + struct json_object *users_array = au_info->users_array; + + if (json_object_array_length(users_array) >= MAX_SUPPORT_DEV_NUM) + { + printf("users_array length >= MAX_SUPPORT_DEV_NUM\n"); + return; + } + + struct json_object *user_obj = json_object_new_object(); + json_object_object_add(user_obj, "mac", json_object_new_string(dev->mac)); + json_object_object_add(user_obj, "online", json_object_new_int(1)); + + if (flag > 0) { + json_object_object_add(user_obj, "ip", json_object_new_string(dev->ip)); + + } + + if (flag > 1){ + json_object_object_add(user_obj, "hostname", json_object_new_string(dev->hostname)); + json_object_object_add(user_obj, "nickname", json_object_new_string(dev->nickname)); + } + + if (flag > 2){ + struct json_object *app_array = json_object_new_array(); + app_visit_time_info_t top5_app_list[5]; + memset(top5_app_list, 0x0, sizeof(top5_app_list)); + update_top5_app(dev, top5_app_list); + for (i = 0; i < 5; i++) + { + if (top5_app_list[i].app_id == 0) + break; + + struct json_object *app_obj = json_object_new_object(); + json_object_object_add(app_obj, "id", json_object_new_int(top5_app_list[i].app_id)); + json_object_object_add(app_obj, "name", json_object_new_string(get_app_name_by_id(top5_app_list[i].app_id))); + + json_object_array_add(app_array, app_obj); + } + json_object_object_add(user_obj, "applist", app_array); + } + json_object_array_add(users_array, user_obj); +} + + + +static int handle_get_all_users(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + + struct blob_attr *msg) { + struct json_object *response = json_object_new_object(); + struct json_object *data_obj = json_object_new_object(); + int flag = 0; + int page = 0; + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return 0; + } + + char *msg_obj_str = blobmsg_format_json(msg, true); + if (msg_obj_str) + { + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *flag_obj = json_object_object_get(req_obj, "flag"); + struct json_object *page_obj = json_object_object_get(req_obj, "page"); + if (flag_obj) { + flag = json_object_get_int(flag_obj); + } + if (page_obj) { + page = json_object_get_int(page_obj); + } + } + + printf("flag: %d, page: %d\n", flag, page); + all_users_info_t au_info; + au_info.flag = flag; + au_info.users_array = json_object_new_array(); + + struct json_object *users_array = json_object_new_array(); + + update_dev_nickname(); + + dev_foreach(&au_info, all_users_callback); + + json_object_object_add(data_obj, "list", au_info.users_array); + + json_object_object_add(response, "data", data_obj); + + uci_free_context(uci_ctx); + + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + +#if 0 +config user user + list mac 12:00:00:00:00:00 + list mac 12:00:00:00:00:00 + list mac 12:00:00:00:00:00 + +#endif + + + +static int handle_get_app_filter_user(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + struct json_object *response = json_object_new_object(); + struct json_object *data_obj = json_object_new_object(); + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return 0; + } + + int mode = af_uci_get_int_value(uci_ctx, "appfilter.global.user_mode"); + if (mode < 0) + mode = 0; + json_object_object_add(data_obj, "mode", json_object_new_int(mode)); + + struct json_object *user_array = json_object_new_array(); + char mac_str[128] = {0}; + int num = af_get_uci_list_num(uci_ctx, "appfilter", "af_user"); + for (int i = 0; i < num; i++) { + af_uci_get_array_value(uci_ctx, "appfilter.@af_user[%d].mac", i, mac_str, sizeof(mac_str)); + + struct json_object *user_obj = json_object_new_object(); + json_object_object_add(user_obj, "mac", json_object_new_string(mac_str)); + dev_node_t *dev = find_dev_node(mac_str); + if (dev){ + json_object_object_add(user_obj, "nickname", json_object_new_string(dev->nickname)); + json_object_object_add(user_obj, "hostname", json_object_new_string(dev->hostname)); + }else{ + json_object_object_add(user_obj, "nickname", json_object_new_string("")); + json_object_object_add(user_obj, "hostname", json_object_new_string("")); + } + json_object_array_add(user_array, user_obj); + } + + json_object_object_add(data_obj, "list", user_array); + json_object_object_add(response, "data", data_obj); + + uci_free_context(uci_ctx); + + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; + +} + + +static int handle_set_app_filter_user(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + struct json_object *response = json_object_new_object(); + int i; + char *msg_obj_str = blobmsg_format_json(msg, true); + if (!msg_obj_str) { + printf("format json failed\n"); + return 0; + } + printf("msg_obj_str: %s\n", msg_obj_str); + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *mode_object = json_object_object_get(req_obj, "mode"); + if (!mode_object) { + printf("mode_object is NULL\n"); + return 0; + } + printf("mode_object: %d\n", json_object_get_int(mode_object)); + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return 0; + } + + af_uci_set_int_value(uci_ctx, "appfilter.global.user_mode", json_object_get_int(mode_object)); + af_uci_commit(uci_ctx, "appfilter"); + reload_oaf_rule(); + + uci_free_context(uci_ctx); + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + + + + +static int handle_del_app_filter_user(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + printf("handle_del_app_filter_user\n"); + struct json_object *response = json_object_new_object(); + int i; + char *msg_obj_str = blobmsg_format_json(msg, true); + if (!msg_obj_str) { + printf("format json failed\n"); + return 0; + } + printf("msg_obj_str: %s\n", msg_obj_str); + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *mac_obj = json_object_object_get(req_obj, "mac"); + if (!mac_obj) { + printf("mac_obj is NULL\n"); + return 0; + } + printf("mac: %s\n", json_object_get_string(mac_obj)); + + + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return 0; + } + char mac_str[128] = {0}; + int num = af_get_uci_list_num(uci_ctx, "appfilter", "af_user"); + for (int i = 0; i < num; i++) { + af_uci_get_array_value(uci_ctx, "appfilter.@af_user[%d].mac", i, mac_str, sizeof(mac_str)); + if (strcmp(mac_str, json_object_get_string(mac_obj)) == 0) { + printf("delete af_user[%d]\n", i); + + char buf[128] = {0}; + sprintf(buf, "appfilter.@af_user[%d]", i); + af_uci_delete(uci_ctx, buf); + break; + } + } + + af_uci_commit(uci_ctx, "appfilter"); + reload_oaf_rule(); + + uci_free_context(uci_ctx); + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + + + + +static int handle_add_app_filter_user(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + printf("handle_add_app_filter_user\n"); + struct json_object *response = json_object_new_object(); + int i; + char *msg_obj_str = blobmsg_format_json(msg, true); + if (!msg_obj_str) { + printf("format json failed\n"); + return -1; + } + printf("msg_obj_str: %s\n", msg_obj_str); + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *mac_array = json_object_object_get(req_obj, "mac_list"); + if (!mac_array) + return -1; + + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return -1; + } + + int len = json_object_array_length(mac_array); + printf("len: %d\n", len); + for (int i = 0; i < len; i++) { + struct json_object *mac_obj = json_object_array_get_idx(mac_array, i); + af_uci_add_section(uci_ctx, "appfilter", "af_user"); + af_uci_set_value(uci_ctx, "appfilter.@af_user[-1].mac", json_object_get_string(mac_obj)); + } + printf("add af_user ok\n"); + af_uci_commit(uci_ctx, "appfilter"); + reload_oaf_rule(); + + uci_free_context(uci_ctx); + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + +static int handle_set_nickname(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + + struct json_object *response = json_object_new_object(); + int i; + char *msg_obj_str = blobmsg_format_json(msg, true); + if (!msg_obj_str) { + printf("format json failed\n"); + return -1; + } + printf("msg_obj_str: %s\n", msg_obj_str); + struct json_object *req_obj = json_tokener_parse(msg_obj_str); + struct json_object *mac_obj = json_object_object_get(req_obj, "mac"); + + struct json_object *nickname_obj = json_object_object_get(req_obj, "nickname"); + if (!nickname_obj || !mac_obj) + return -1; + + + struct uci_context *uci_ctx = uci_alloc_context(); + if (!uci_ctx) { + printf("Failed to allocate UCI context\n"); + return -1; + } + int num = af_get_uci_list_num(uci_ctx, "user_info", "user_info"); + char mac_str[128] = {0}; + int index = -1; + for (i = 0; i < num; i++) { + af_uci_get_array_value(uci_ctx, "user_info.@user_info[%d].mac", i, mac_str, sizeof(mac_str)); + if (strcmp(mac_str, json_object_get_string(mac_obj)) == 0) { + index = i; + printf("found nickname index: %d\n", index); + break; + } + } + + if (strlen(json_object_get_string(nickname_obj)) > 0) { + if (index == -1) { + af_uci_add_section(uci_ctx, "user_info", "user_info"); + } + af_uci_set_array_value(uci_ctx, "user_info.@user_info[%d].mac", index, json_object_get_string(mac_obj)); + af_uci_set_array_value(uci_ctx, "user_info.@user_info[%d].nickname", index, json_object_get_string(nickname_obj)); + } + else{ + char uci_option[128] = {0}; + sprintf(uci_option, "user_info.@user_info[%d]", index); + af_uci_delete(uci_ctx, uci_option); + printf("delete nickname mac = %s\n", json_object_get_string(mac_obj)); + } + + + af_uci_commit(uci_ctx, "user_info"); + reload_oaf_rule(); + + uci_free_context(uci_ctx); + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; +} + +extern af_run_time_status_t g_af_status; + + +static int handle_get_oaf_status(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { + struct json_object *response = json_object_new_object(); + struct json_object *data_obj = json_object_new_object(); + char result[128] = {0}; + int enable = 0; + + exec_with_result_line("cat /proc/sys/oaf/enable", result, sizeof(result)); + enable = atoi(result); + + json_object_object_add(data_obj, "enable", json_object_new_int(enable)); + json_object_object_add(data_obj, "config_enable", json_object_new_int(g_af_config.global.enable)); + json_object_object_add(data_obj, "time_mode", json_object_new_int(g_af_config.time.time_mode)); + json_object_object_add(data_obj, "match_time", json_object_new_int(g_af_status.match_time)); + + if (g_af_config.time.time_mode == 1) { + json_object_object_add(data_obj, "filter", json_object_new_int(g_af_status.filter)); + if (g_af_status.filter == 1) { // 过滤中 + json_object_object_add(data_obj, "remain_time", json_object_new_int(g_af_config.time.deny_time - g_af_status.deny_time)); + } + else { + json_object_object_add(data_obj, "remain_time", json_object_new_int(g_af_config.time.allow_time - g_af_status.allow_time)); + } + } + + + json_object_object_add(response, "data", data_obj); + + struct blob_buf b = {}; + blob_buf_init(&b, 0); + blobmsg_add_object(&b, response); + ubus_send_reply(ctx, req, b.head); + blob_buf_free(&b); + json_object_put(response); + return 0; + +} + static const struct blobmsg_policy empty_policy[1] = { //[DEV_NAME] = { .name = "name", .type = BLOBMSG_TYPE_STRING }, }; static struct ubus_method appfilter_object_methods[] = { - UBUS_METHOD("visit_list", appfilter_handle_visit_list, empty_policy), + UBUS_METHOD("dev_visit_list", appfilter_handle_dev_visit_list, empty_policy), UBUS_METHOD("dev_visit_time", appfilter_handle_visit_time, empty_policy), UBUS_METHOD("app_class_visit_time", handle_app_class_visit_time, empty_policy), UBUS_METHOD("dev_list", appfilter_handle_dev_list, empty_policy), @@ -744,6 +1414,16 @@ static struct ubus_method appfilter_object_methods[] = { UBUS_METHOD("set_app_filter_base", handle_set_app_filter_base, empty_policy), UBUS_METHOD("get_app_filter_base", handle_get_app_filter_base, empty_policy), + UBUS_METHOD("set_app_filter_time", handle_set_app_filter_time, empty_policy), + UBUS_METHOD("get_app_filter_time", handle_get_app_filter_time, empty_policy), + UBUS_METHOD("get_all_users", handle_get_all_users, empty_policy), + UBUS_METHOD("get_app_filter_user", handle_get_app_filter_user, empty_policy), + UBUS_METHOD("set_app_filter_user", handle_set_app_filter_user, empty_policy), + UBUS_METHOD("del_app_filter_user", handle_del_app_filter_user, empty_policy), + UBUS_METHOD("add_app_filter_user", handle_add_app_filter_user, empty_policy), + UBUS_METHOD("set_nickname", handle_set_nickname, empty_policy), + UBUS_METHOD("get_oaf_status", handle_get_oaf_status, empty_policy), + }; static struct ubus_object_type main_object_type = diff --git a/open-app-filter/src/appfilter_user.c b/open-app-filter/src/appfilter_user.c index 456f30e46..a8ff6e1e5 100755 --- a/open-app-filter/src/appfilter_user.c +++ b/open-app-filter/src/appfilter_user.c @@ -27,8 +27,10 @@ THE SOFTWARE. #include #include #include +#include #include #include +#include "appfilter_config.h" #include "appfilter.h" #include "appfilter_user.h" @@ -79,7 +81,6 @@ void init_dev_node_htable() dev_node_t *add_dev_node(char *mac) { unsigned int hash = 0; - printf("add dev node\n"); if (g_cur_user_num >= MAX_SUPPORT_USER_NUM) { printf("error, user num reach max %d\n", g_cur_user_num); @@ -185,6 +186,40 @@ void update_dev_hostname(void) fclose(fp); } +void clean_dev_nickname_iter(void *arg, dev_node_t *node) +{ + node->nickname[0] = '\0'; +} + +void clean_dev_nickname(void) +{ + dev_foreach(NULL, clean_dev_nickname_iter); +} + +void update_dev_nickname(void) +{ + char nickname_buf[128] = {0}; + char mac_str[128] = {0}; + struct uci_context *uci_ctx = uci_alloc_context(); + clean_dev_nickname(); + int num = af_get_uci_list_num(uci_ctx, "user_info", "user_info"); + + for (int i = 0; i < num; i++) { + af_uci_get_array_value(uci_ctx, "user_info.@user_info[%d].mac", i, mac_str, sizeof(mac_str)); + dev_node_t *node = find_dev_node(mac_str); + if (!node) + continue; + + af_uci_get_array_value(uci_ctx, "user_info.@user_info[%d].nickname", i, nickname_buf, sizeof(nickname_buf)); + printf("update dev nickname: %s\n", nickname_buf); + strncpy(node->nickname, nickname_buf, sizeof(node->nickname)); + } + printf("update dev nickname ok\n"); + uci_free_context(uci_ctx); +} + + + void clean_dev_online_status(void) { int i; @@ -294,7 +329,7 @@ void update_dev_from_arp(void) void update_dev_online_status(void) { update_dev_from_oaf(); - update_dev_from_arp(); + //update_dev_from_arp(); } #define DEV_OFFLINE_TIME (SECONDS_PER_DAY * 3) @@ -377,18 +412,25 @@ void flush_dev_expire_node(void) } } + +void update_dev_list(void) +{ + clean_dev_online_status(); + update_dev_hostname(); + update_dev_nickname(); + update_dev_online_status(); +} + + void dump_dev_list(void) + { int i, j; int count = 0; char hostname_buf[MAX_HOSTNAME_SIZE] = {0}; char ip_buf[MAX_IP_LEN] = {0}; - clean_dev_online_status(); - update_dev_hostname(); - - update_dev_online_status(); FILE *fp = fopen(OAF_DEV_LIST_FILE, "w"); if (!fp) @@ -422,7 +464,6 @@ void dump_dev_list(void) node = node->next; } } - printf("%s %d \n", __func__, __LINE__); for (i = 0; i < MAX_DEV_NODE_HASH_SIZE; i++) { dev_node_t *node = dev_hash_table[i]; @@ -448,7 +489,6 @@ void dump_dev_list(void) node = node->next; } } - printf("%s %d \n", __func__, __LINE__); EXIT: fclose(fp); } diff --git a/open-app-filter/src/appfilter_user.h b/open-app-filter/src/appfilter_user.h index fa88d805d..aa1540b76 100755 --- a/open-app-filter/src/appfilter_user.h +++ b/open-app-filter/src/appfilter_user.h @@ -19,6 +19,7 @@ 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. */ +#include #ifndef __FILTER_USER_H__ #define __FILTER_USER_H__ #define MAX_IP_LEN 32 @@ -36,6 +37,8 @@ THE SOFTWARE. #define MAX_APP_ID_NUM 128 #define MAX_SUPPORT_DEV_NUM 64 #define SECONDS_PER_DAY (24 * 3600) +#define MAX_NICKNAME_SIZE 64 + //extern dev_node_t *dev_hash_table[MAX_DEV_NODE_HASH_SIZE]; @@ -58,11 +61,12 @@ THE SOFTWARE. typedef struct visit_info { int appid; - int first_time; - int latest_time; + u_int32_t first_time; + u_int32_t latest_time; int action; int expire; /*定期清除无效数据*/ struct visit_info *next; + } visit_info_t; /* 用于记录某个app总时间和总流量 */ @@ -78,13 +82,15 @@ typedef struct dev_node char mac[MAX_MAC_LEN]; char ip[MAX_IP_LEN]; char hostname[MAX_HOSTNAME_SIZE]; + char nickname[MAX_NICKNAME_SIZE]; int online; int expire; - int offline_time; - int online_time; + u_int32_t offline_time; + u_int32_t online_time; visit_info_t *visit_htable[MAX_VISIT_HASH_SIZE]; visit_stat_t stat[MAX_APP_TYPE][MAX_APP_ID_NUM]; struct dev_node *next; + } dev_node_t; struct app_visit_info @@ -115,4 +121,6 @@ void flush_expire_visit_info(); int check_dev_expire(void); void flush_dev_expire_node(void); void flush_expire_visit_info(void); +void update_dev_list(void); +void update_dev_nickname(void); #endif diff --git a/open-app-filter/src/main.c b/open-app-filter/src/main.c index 33cff6177..c654c58ed 100755 --- a/open-app-filter/src/main.c +++ b/open-app-filter/src/main.c @@ -34,65 +34,119 @@ THE SOFTWARE. #include #include "appfilter.h" +int current_log_level = LOG_LEVEL_INFO; +af_run_time_status_t g_af_status; +int g_oaf_config_change = 0; -void check_appfilter_enable(void) -{ - int enable = 1; - struct tm *t; - af_ctl_time_t *af_t = NULL; - time_t tt; - time(&tt); - enable = config_get_appfilter_enable(); - - if (0 == enable) - goto EXIT; - af_t = load_appfilter_ctl_time_config(); - if (!af_t) - { - enable = 0; - goto EXIT; - } - - t = localtime(&tt); - if (af_t->days[t->tm_wday] != 1) - { - if (af_t->time_mode == 0){ - enable = 0; - goto EXIT; - } - } - - int cur_mins = t->tm_hour * 60 + t->tm_min; - if (((af_t->start.hour * 60 + af_t->start.min < cur_mins) && (cur_mins < af_t->end.hour * 60 + af_t->end.min)) - || ((af_t->start2.hour * 60 + af_t->start2.min < cur_mins) && (cur_mins < af_t->end2.hour * 60 + af_t->end2.min)) - ) - { - if (af_t->time_mode == 0){ - enable = 1; - } - else{ - enable = 0; - } - } - else{ - if (af_t->time_mode == 0){ - enable = 0; - } - else{ - enable = 1; - } - } -EXIT: - if (enable) - { - system("echo 1 >/proc/sys/oaf/enable "); - } - else - system("echo 0 >/proc/sys/oaf/enable "); - if (af_t) - free(af_t); +void af_init_time_status(void){ + g_af_status.filter = 0; + g_af_status.deny_time = 0; + g_af_status.allow_time = 0; + g_af_status.match_time = 0; } + +void af_init_status(void){ + af_init_time_status(); +} + + +/** +config time 'time' + option time_mode '0' + option start_time '00:00' + option end_time '23:59' + option days '1 2 3 4 5' + list time '12:00-13:00' + list time '15:00-16:00' + list time '18:00-19:00' + list time '21:00-21:30' + list time '22:00-23:00' + list time '23:01-23:30' + list time '23:50-23:40' +*/ + +int af_load_time_config(af_time_config_t *t_config) +{ + char time_list_buf[MAX_TIME_LIST_LEN] = {0}; + char days_buf[128] = {0}; + char start_time_buf[128] = {0}; + char end_time_buf[128] = {0}; + struct uci_context *ctx = uci_alloc_context(); + if (!ctx) + return -1; + memset(t_config, 0, sizeof(af_time_config_t)); + t_config->time_mode = af_uci_get_int_value(ctx, "appfilter.time.time_mode"); + t_config->deny_time = af_uci_get_int_value(ctx, "appfilter.time.deny_time"); + t_config->allow_time = af_uci_get_int_value(ctx, "appfilter.time.allow_time"); + + af_uci_get_value(ctx, "appfilter.time.start_time", start_time_buf, sizeof(start_time_buf)); + af_uci_get_value(ctx, "appfilter.time.end_time", end_time_buf, sizeof(end_time_buf)); + af_uci_get_value(ctx, "appfilter.time.days", days_buf, sizeof(days_buf)); + LOG_INFO("mode = %d, start_time: %s, end_time: %s, days: %s", t_config->time_mode, start_time_buf, end_time_buf, days_buf); + sscanf(start_time_buf, "%d:%d", &t_config->seg_time.start_time.hour, &t_config->seg_time.start_time.min); + sscanf(end_time_buf, "%d:%d", &t_config->seg_time.end_time.hour, &t_config->seg_time.end_time.min); + + t_config->time_num = 0; + char *p = strtok(days_buf, " "); + if (!p) + goto EXIT; + do + { + t_config->days[atoi(p)] = 1; + } while (p = strtok(NULL, " ")); + + af_uci_get_list_value(ctx, "appfilter.time.time", time_list_buf, sizeof(time_list_buf), " "); + p = strtok(time_list_buf, " "); + if (!p) + goto EXIT; + do + { + sscanf(p, "%d:%d-%d:%d", &t_config->time_list[t_config->time_num].start_time.hour, + &t_config->time_list[t_config->time_num].start_time.min, &t_config->time_list[t_config->time_num].end_time.hour, &t_config->time_list[t_config->time_num].end_time.min); + LOG_INFO("time[%d] %d:%d-%d:%d\n", t_config->time_num, t_config->time_list[t_config->time_num].start_time.hour, t_config->time_list[t_config->time_num].start_time.min, + t_config->time_list[t_config->time_num].end_time.hour, t_config->time_list[t_config->time_num].end_time.min); + t_config->time_num++; + } while (p = strtok(NULL, " ")); +EXIT: + uci_free_context(ctx); + return 0; +} + + +void af_load_global_config(af_global_config_t *config){ + int ret = 0; + struct uci_context *ctx = uci_alloc_context(); + if (!ctx) + return; + ret = af_uci_get_int_value(ctx, "appfilter.global.enable"); + if (ret < 0) + config->enable = 0; + else + config->enable = ret; + + ret = af_uci_get_int_value(ctx, "appfilter.global.user_mode"); + if (ret < 0) + config->user_mode = 0; + else + config->user_mode = ret; + + ret = af_uci_get_int_value(ctx, "appfilter.global.work_mode"); + if (ret < 0) + config->work_mode = 0; + else + config->work_mode = ret; + uci_free_context(ctx); + LOG_INFO("enable=%d, user_mode=%d, work_mode=%d", config->enable, config->user_mode, config->work_mode); +} + +void af_load_config(af_config_t *config){ + memset(config, 0, sizeof(af_config_t)); + af_load_global_config(&config->global); + af_load_time_config(&config->time); +} + + void update_lan_ip(void){ char ip_str[32] = {0}; char mask_str[32] = {0}; @@ -125,34 +179,125 @@ void update_lan_ip(void){ system(cmd_buf); } + + + +int af_check_time_manual(af_time_config_t *t_config) { + time_t now = time(NULL); + struct tm *current_time = localtime(&now); + int current_minutes = current_time->tm_hour * 60 + current_time->tm_min; + + LOG_DEBUG("current time: %02d:%02d\n", current_time->tm_hour, current_time->tm_min); + + for (int i = 0; i < t_config->time_num; i++) { + int start_minutes = t_config->time_list[i].start_time.hour * 60 + t_config->time_list[i].start_time.min; + int end_minutes = t_config->time_list[i].end_time.hour * 60 + t_config->time_list[i].end_time.min; + LOG_DEBUG("check time: %02d:%02d-%02d:%02d\n", + t_config->time_list[i].start_time.hour, t_config->time_list[i].start_time.min, + t_config->time_list[i].end_time.hour, t_config->time_list[i].end_time.min); + + if (current_minutes >= start_minutes && current_minutes <= end_minutes) { + LOG_DEBUG("current time in time list\n"); + g_af_status.match_time = 1; + return 1; + } + } + g_af_status.match_time = 0; + return 0; +} + +int af_check_time_dynamic(af_time_config_t *t_config) { + time_t now = time(NULL); + struct tm *current_time = localtime(&now); + int current_minutes = current_time->tm_hour * 60 + current_time->tm_min; + + int start_minutes = t_config->seg_time.start_time.hour * 60 + t_config->seg_time.start_time.min; + int end_minutes = t_config->seg_time.end_time.hour * 60 + t_config->seg_time.end_time.min; + LOG_DEBUG("check seg_time: %02d:%02d-%02d:%02d\n", + t_config->seg_time.start_time.hour, t_config->seg_time.start_time.min, + t_config->seg_time.end_time.hour, t_config->seg_time.end_time.min); + if (!(current_minutes >= start_minutes && current_minutes <= end_minutes)) { + LOG_DEBUG("current time not in seg_time\n"); + af_init_time_status(); + return 0; + } + + g_af_status.match_time = 1; + if (g_af_status.filter == 1) { + g_af_status.deny_time++; + if (g_af_status.deny_time >= t_config->deny_time) { + g_af_status.filter = 0; + g_af_status.deny_time = 0; + LOG_DEBUG("deny time over, filter = 0"); + } + LOG_DEBUG("deny_time: %d\n", g_af_status.deny_time); + } else { + g_af_status.allow_time++; + if (g_af_status.allow_time >= t_config->allow_time) { + g_af_status.filter = 1; + g_af_status.allow_time = 0; + LOG_DEBUG("allow time over, filter = 1"); + } + LOG_DEBUG("allow_time: %d\n", g_af_status.allow_time); + } + return g_af_status.filter; +} + +int af_check_time(af_time_config_t *t_config) { + time_t now = time(NULL); + struct tm *current_time = localtime(&now); + LOG_DEBUG("current day: %d\n", current_time->tm_wday); + if (!t_config->days[current_time->tm_wday]) { + LOG_DEBUG("current day not in configured days\n"); + af_init_time_status(); + return 0; + } + if (t_config->time_mode == 0) { + LOG_DEBUG("manual mode\n"); + return af_check_time_manual(t_config); + } else { + LOG_DEBUG("dynamic mode\n"); + return af_check_time_dynamic(t_config); + } +} + + +void update_oaf_status(void){ + int ret = 0; + int cur_enable = 0; + ret = af_check_time(&g_af_config.time); + if (ret == 1){ + system("echo 1 >/proc/sys/oaf/enable"); + } + else{ + system("echo 0 >/proc/sys/oaf/enable"); + } +} + + void dev_list_timeout_handler(struct uloop_timeout *t) { static int count = 0; count++; - - - - printf("%s %d count2 = %d\n", __func__, __LINE__, count); - - - dump_dev_list(); - printf("%s %d count = %d\n", __func__, __LINE__, count); - - check_dev_visit_info_expire(); - printf("%s %d count = %d\n", __func__, __LINE__, count); - - flush_expire_visit_info(); - //dump_dev_visit_list(); - update_lan_ip(); - check_appfilter_enable(); - printf("%s %d count = %d\n", __func__, __LINE__, count); - - if (check_dev_expire()){ - flush_expire_visit_info(); - flush_dev_expire_node(); + if (count % 10 == 0){ + update_dev_list(); + dump_dev_list(); + update_oaf_status(); } - printf("%s %d count = %d\n", __func__, __LINE__, count); - uloop_timeout_set(t, 10000); + if (count % 60 == 0){ + check_dev_visit_info_expire(); + update_lan_ip(); + if (check_dev_expire()){ + flush_dev_expire_node(); + } + flush_expire_visit_info(); + } + if (g_oaf_config_change == 1){ + af_load_config(&g_af_config); + update_oaf_status(); + g_oaf_config_change = 0; + } + uloop_timeout_set(t, 1000); } struct uloop_timeout dev_tm = { @@ -162,22 +307,24 @@ static struct uloop_fd appfilter_nl_fd = { .cb = appfilter_nl_handler, }; + + + int main(int argc, char **argv) { int ret = 0; + LOG_INFO("appfilter start"); + af_load_config(&g_af_config); + af_init_status(); uloop_init(); - printf("init appfilter2\n"); init_dev_node_htable(); - init_app_name_table(); init_app_class_name_table(); if (appfilter_ubus_init() < 0) { - fprintf(stderr, "Failed to connect to ubus\n"); + LOG_ERROR("Failed to connect to ubus\n"); return 1; } - - appfilter_nl_fd.fd = appfilter_nl_init(); uloop_fd_add(&appfilter_nl_fd, ULOOP_READ); af_msg_t msg; diff --git a/oscam/Makefile b/oscam/Makefile index 2b400f2ae..7c2b4032f 100644 --- a/oscam/Makefile +++ b/oscam/Makefile @@ -7,13 +7,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=oscam -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/nx111/oscam.git PKG_SOURCE_DATE:=2020-12-12 PKG_SOURCE_VERSION:=aafda4bca3c347698ef1dc32f7ebeff76378d55a -PKG_MIRROR_HASH:=98f08de63d82bbaf6e6de6f689fd3056655c13e70d235faa674b1169e6fe50ca +PKG_MIRROR_HASH:=68c66dfee1c9f23cc716e6fca21afedddeecc98ac5b433e705dbe2c9e5966609 PKG_LICENSE:=GPL-3.0 PKG_LICENSE_FILES:=COPYING diff --git a/v2ray-geodata/Makefile b/v2ray-geodata/Makefile index 77fc445d6..bc53e5e94 100644 --- a/v2ray-geodata/Makefile +++ b/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=f2f5f03da44d007fa91fb6a37c077c9efae8ad0269ef0e4130cf90b0822873e3 endef -GEOSITE_VER:=20250206090256 +GEOSITE_VER:=20250206143205 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=d7d1ad2e68c835e6d1909aa8c264a9727415efaf72540c27692bfd6e9d2c7332 + HASH:=e574c0b74f46f53667aa6c62ea735952288ec20d3c56bbb74dd1411803db436d endef GEOSITE_IRAN_VER:=202502030035